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();
|
},
|
|
}
|