Combining Multiple Falcor Data Sources into Single Model

178 views Asked by At

Modified the question to explain better:

I have two Falcor models from two different HttpDataSource, like below:

First model (User model):

const user_model = new falcor.Model(
{
  source: new HttpDataSource('http://localhost:3000/api/userManagement')
});
user_model.get(['user', 'list'])

OUTPUT1:

{
    "jsonGraph": {
        "user": {
            "list": {
                "$type": "atom",
                "value": {
                    "users": [...]
                }
            }
        }
    }
}

Second model (Role model):

const role_model = new falcor.Model(
{
  source: new HttpDataSource('http://localhost:3000/api/roleManagement')
});

role_model.get(['role', 'list'])

OUTPUT2:

{
    "jsonGraph": {
        "role": {
            "list": {
                "$type": "atom",
                "value": {
                    "roles": [...]
                }
            }
        }
    }
}

Is there a way to combine all these Falcor models into a single model?

The purpose is, if I try to do user_model.get(['user', 'list']) more than once it would get the data from Falcor-Model-Cache (after the first fetch from DB).

But if I try to do role_model.get(['user', 'list']), then I have to hit the DB again to get the data (inorder to store the same User list in role_model cache).

So instead if there is a way like below:

all_model = user_model + role_model

then I can do all_model.get(['user', 'list']) (or) all_model.get(['role', 'list']). So basically I would have only one combined Falcor-Model-Cache at the browser end.

Hope the question is more clear now.

1

There are 1 answers

1
Eliseo On

You must use forkJoin

forkJoin(model1.source,model2.source).subscribe(res=>{
    //in res[0] you have the response of model1.source
    //in res[1] you have the response of model2.source
    let data={...res[0],...res[1]}
    //in data you have all the properties
}