UNPKG

ra-data-graphql-simple

Version:

A GraphQL simple data provider for react-admin

58 lines 2.73 kB
import merge from 'lodash/merge.js'; import buildDataProvider, { defaultOptions as baseDefaultOptions, } from 'ra-data-graphql'; import { DELETE_MANY, UPDATE_MANY } from 'ra-core'; import pluralize from 'pluralize'; import defaultBuildQuery from "./buildQuery.js"; export const buildQuery = defaultBuildQuery; export { buildQueryFactory } from "./buildQuery.js"; export { default as buildGqlQuery } from "./buildGqlQuery.js"; export { default as buildVariables } from "./buildVariables.js"; export { default as getResponseParser } from "./getResponseParser.js"; const defaultOptions = { ...baseDefaultOptions, buildQuery: defaultBuildQuery, }; const bulkActionOperationNames = { [DELETE_MANY]: resource => `delete${pluralize(resource.name)}`, [UPDATE_MANY]: resource => `update${pluralize(resource.name)}`, }; export default (options) => { const { bulkActionsEnabled = false, ...dPOptions } = merge({}, defaultOptions, options); if (bulkActionsEnabled && dPOptions.introspection?.operationNames) dPOptions.introspection.operationNames = merge(dPOptions.introspection.operationNames, bulkActionOperationNames); const defaultDataProvider = buildDataProvider(dPOptions); return { ...defaultDataProvider, // This provider defaults to sending multiple DELETE requests for DELETE_MANY // and multiple UPDATE requests for UPDATE_MANY unless bulk actions are enabled // This can be optimized using the apollo-link-batch-http link ...(bulkActionsEnabled ? {} : { deleteMany: (resource, params) => { const { ids, ...otherParams } = params; return Promise.all(ids.map(id => defaultDataProvider.delete(resource, { id, previousData: null, ...otherParams, }))).then(results => { const data = results.reduce((acc, { data }) => [...acc, data.id], []); return { data }; }); }, updateMany: (resource, params) => { const { ids, data, ...otherParams } = params; return Promise.all(ids.map(id => defaultDataProvider.update(resource, { id, data: data, previousData: null, ...otherParams, }))).then(results => { const data = results.reduce((acc, { data }) => [...acc, data.id], []); return { data }; }); }, }), }; }; //# sourceMappingURL=index.js.map