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