multiple dataProviders with react-admin v 3.9.6

Viewed 306

Hi I would like to use 2 dataProviders in v3 using a superDataProvider. And decide by resource's name. I follow same examples but without success ( also I try the demo way using dataProviderFactory)

import jsonServerProvider from 'ra-data-json-server';
import restProvider from 'ra-data-simple-rest';

const dataProviderRest = restProvider('https://myapi.com');
const dataProviderJson = jsonServerProvider('https://jsonplaceholder.typicode.com');

const superDataProvider = (type: any, resource: any, params: any) => {
    if (resource === 'tags') {
        return dataProviderRest;
    }
    return dataProviderJson;
}

export default superDataProvider;
1 Answers

The docs says that a dataProvider must have these methods:

const dataProvider = {
    getList:    (resource, params) => Promise,
    getOne:     (resource, params) => Promise,
    getMany:    (resource, params) => Promise,
    getManyReference: (resource, params) => Promise,
    create:     (resource, params) => Promise,
    update:     (resource, params) => Promise,
    updateMany: (resource, params) => Promise,
    delete:     (resource, params) => Promise,
    deleteMany: (resource, params) => Promise,
}

So, I think something like this can be used:

import jsonServerProvider from 'ra-data-json-server';
import restProvider from 'ra-data-simple-rest';

const dataProviderRest = restProvider('https://myapi.com');
const dataProviderJson = jsonServerProvider('https://jsonplaceholder.typicode.com');

export const superDataProvider = {
    ...dataProviderJson, // Preserve methods that are not extended

    update: (resource, params) => {
        if (resource === 'tags') {
            return dataProviderRest.update(resource, params);
        }
        return dataProviderJson.update(resource, params);
    }
}
Related