UNPKG

ra-data-opencrud

Version:

A Prisma/GraphCMS data provider for react-admin

60 lines 2.99 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = require("graphql"); var react_admin_1 = require("react-admin"); var getFinalType_1 = __importDefault(require("./utils/getFinalType")); var sanitizeResource = function (introspectionResults, resource) { return function (data) { return Object.keys(data).reduce(function (acc, key) { var _a, _b, _c, _d; if (key.startsWith('_')) { return acc; } var field = resource.type.fields.find(function (f) { return f.name === key; }); var type = getFinalType_1.default(field.type); if (type.kind !== graphql_1.TypeKind.OBJECT) { return __assign({}, acc, (_a = {}, _a[field.name] = data[field.name], _a)); } // FIXME: We might have to handle linked types which are not resources but will have to be careful about endless circular dependencies var linkedResource = introspectionResults.resources.find(function (r) { return r.type.name === type.name; }); if (linkedResource) { var linkedResourceData = data[field.name]; if (Array.isArray(linkedResourceData)) { return __assign({}, acc, (_b = {}, _b[field.name] = data[field.name].map(sanitizeResource(introspectionResults, linkedResource)), _b[field.name + "Ids"] = data[field.name].map(function (d) { return d.id; }), _b)); } return __assign({}, acc, (_c = {}, _c[field.name + ".id"] = linkedResourceData ? data[field.name].id : undefined, _c[field.name] = linkedResourceData ? sanitizeResource(introspectionResults, linkedResource)(data[field.name]) : undefined, _c)); } return __assign({}, acc, (_d = {}, _d[field.name] = data[field.name], _d)); }, {}); }; }; exports.default = (function (introspectionResults) { return function (aorFetchType, resource) { return function (response) { var sanitize = sanitizeResource(introspectionResults, resource); var data = response.data; if (aorFetchType === react_admin_1.GET_LIST || aorFetchType === react_admin_1.GET_MANY || aorFetchType === react_admin_1.GET_MANY_REFERENCE) { return { data: response.data.items.map(sanitize), total: response.data.total.aggregate.count }; } return { data: sanitize(data.data) }; }; }; }); //# sourceMappingURL=getResponseParser.js.map