3

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;
Karol Zlot
  • 2,887
  • 2
  • 20
  • 37
Pamela Pereyra
  • 101
  • 1
  • 10

1 Answers1

1

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);
    }
}
Karol Zlot
  • 2,887
  • 2
  • 20
  • 37
Mads Lie Jensen
  • 381
  • 2
  • 4