offix icon indicating copy to clipboard operation
offix copied to clipboard

Datastore Hooks Generation

Open Eunovo opened this issue 4 years ago • 1 comments

We want to generate hooks for Models, see example below;

export const useFindTodos = (filter?: Filter<Todo>) => useQuery(TodoModel, filter);

The problem here is that to generate the above hook, we need to generate TodoModel but to generate TodoModel, we need to generate code to initialise DataStore like this

export const datastore = new DataStore({
  dbName: "offix-datasync",
  replicationConfig: {
    client: {
      url: "http://localhost:5400/graphql",
      wsUrl: "ws://localhost:5400/graphql",
    }
  }
});

export const TodoModel = datastore.setupModel<Todo>(schema.Todo);

The problem here is that the user will need to edit this config. We don't want users to edit any generated file. How do we save users from boilerplate code without generating the config?

Possible Solutions

There was a suggestion to generate something like this

let TodoModel
let UserModel
export function createModels(datastore: DataStore) {
   TodoModel = datastore.setupModel<Todo>(schema.Todo);
   UserModel = datastore.setupModel<User>(schema.User);
}

export { TodoModel, UserModel }; 

This can work. Users will have to do something like this

import {  createModels, schema } from "./generated"; 

const datastore = ... // create datastore

// if users want to edit schema, they'll have to do it here

createModels(datastore);

export * from "./generated";

@wtrocki @kingsleyzissou

Eunovo avatar Aug 21 '20 10:08 Eunovo

Yep. That will work. Not priority for MVP though

wtrocki avatar Aug 21 '20 11:08 wtrocki