ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
59 lines (53 loc) • 1.58 kB
text/typescript
import {
CREATE,
DELETE,
DELETE_MANY,
GET_LIST,
GET_MANY,
GET_MANY_REFERENCE,
GET_ONE,
UPDATE,
UPDATE_MANY,
} from './dataFetchActions';
import { LegacyDataProvider, DataProvider } from '../types';
import { defaultDataProvider } from './defaultDataProvider';
const fetchMap = {
create: CREATE,
delete: DELETE,
deleteMany: DELETE_MANY,
getList: GET_LIST,
getMany: GET_MANY,
getManyReference: GET_MANY_REFERENCE,
getOne: GET_ONE,
update: UPDATE,
updateMany: UPDATE_MANY,
};
/**
* Turn a function-based dataProvider to an object-based one
*
* Allows using legacy dataProviders transparently.
*
* @param {Function} legacyDataProvider A legacy dataProvider (type, resource, params) => Promise<any>
*
* @returns {Object} A dataProvider that react-admin can use
*/
const convertLegacyDataProvider = (
legacyDataProvider: LegacyDataProvider
): DataProvider => {
const proxy = new Proxy(defaultDataProvider, {
get(_, name) {
return (resource, params) => {
if (Object.keys(fetchMap).includes(name.toString())) {
const fetchType = fetchMap[name.toString()];
return legacyDataProvider(fetchType, resource, params);
}
return legacyDataProvider(name.toString(), resource, params);
};
},
apply(_, __, args) {
return legacyDataProvider.apply(legacyDataProvider, args);
},
});
return proxy;
};
export default convertLegacyDataProvider;