import { HttpError } from "react-admin"; import { ABORT_SIGNAL, DATA_PROVIDER_SPRING } from "./setting"; export default (adapter) => { let dataProviderPromise = getDataProvider(adapter); const dataProviderWithGeneratedData = new Proxy(defaultDataProvider, { get: function (target, property) { if (typeof property === 'symbol' || property === 'then') { return; } if (property === 'supportAbortSignal') { return ABORT_SIGNAL; } return async (resource, params) => { return await dataProviderPromise.then(dataProvider => { try { if (typeof dataProvider[property] === 'function') { return dataProvider[property](resource, params); } else { console.error('dataProvider[property] not a function:', property); return Promise.reject(new Error(`function ${property} can not found`)); } } catch (error) { console.error('wrong to use dataProvider function:', error); return Promise.reject(error); } }).catch(error => { console.error('dataProviderPromise fail:', error); return Promise.reject(error); }); } } }); return dataProviderWithGeneratedData; } const getDataProvider = async (adapter) => { let dataProviderModule; if (adapter === DATA_PROVIDER_SPRING) { dataProviderModule = await import('./MyDataProvider'); } else { dataProviderModule = defaultDataProvider; } return dataProviderModule.default; } const defaultDataProvider = { // get a list of records based on sort, filter, and pagination getList: (resource, params) => { return Promise.resolve(); }, // get a single record by id getOne: (resource, params) => { return Promise.resolve(); }, // get a list of records based on an array of ids getMany: (resource, params) => { return Promise.resolve(); }, // get the records referenced to another record, e.g. comments for a post getManyReference: (resource, params) => { return Promise.resolve(); }, // create a record create: (resource, params) => { return Promise.resolve(); }, // update a record based on a patch update: (resource, params) => { return Promise.resolve(); }, // update a list of records based on an array of ids and a common patch updateMany: (resource, params) => { return Promise.resolve(); }, // delete a record by id delete: (resource, params) => { return Promise.resolve(); }, // delete a list of records based on an array of ids deleteMany: (resource, params) => { return Promise.resolve(); }, }