ra-data-graphql-simple
Version:
A GraphQL simple data provider for react-admin
27 lines • 1.59 kB
JavaScript
import buildVariables from "./buildVariables.js";
import buildGqlQuery from "./buildGqlQuery.js";
import getResponseParser from "./getResponseParser.js";
export const buildQueryFactory = (buildVariablesImpl = buildVariables, buildGqlQueryImpl = buildGqlQuery, getResponseParserImpl = getResponseParser) => (introspectionResults) => {
const knownResources = introspectionResults.resources.map(r => r.type.name);
const buildQuery = (raFetchType, resourceName, params) => {
const resource = introspectionResults.resources.find(r => r.type.name === resourceName);
if (!resource) {
throw new Error(`Unknown resource ${resourceName}. Make sure it has been declared on your server side schema. Known resources are ${knownResources.join(', ')}`);
}
const queryType = resource[raFetchType];
if (!queryType) {
throw new Error(`No query or mutation matching fetch type ${raFetchType} could be found for resource ${resource.type.name}`);
}
const variables = buildVariablesImpl(introspectionResults)(resource, raFetchType, params, queryType);
const query = buildGqlQueryImpl(introspectionResults)(resource, raFetchType, queryType, variables);
const parseResponse = getResponseParserImpl(introspectionResults)(raFetchType, resource, queryType);
return {
query,
variables,
parseResponse,
};
};
return buildQuery;
};
export default buildQueryFactory(buildVariables, buildGqlQuery, getResponseParser);
//# sourceMappingURL=buildQuery.js.map