UNPKG

ra-data-opencrud

Version:

A Prisma/GraphCMS data provider for react-admin

216 lines 10.7 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 react_admin_1 = require("react-admin"); var isObject_1 = __importDefault(require("lodash/isObject")); var getFinalType_1 = __importDefault(require("./utils/getFinalType")); var computeAddRemoveUpdate_1 = require("./utils/computeAddRemoveUpdate"); var mutations_1 = require("./constants/mutations"); //TODO: Object filter weren't tested yet var buildGetListVariables = function (introspectionResults) { return function (resource, aorFetchType, params) { var filter = Object.keys(params.filter).reduce(function (acc, key) { var _a, _b, _c, _d, _e, _f, _g; if (key === 'ids') { return __assign({}, acc, { id_in: params.filter[key] }); } if (Array.isArray(params.filter[key])) { var type = introspectionResults.types.find(function (t) { return t.name === resource.type.name + "WhereInput"; }); var inputField = type.inputFields.find(function (t) { return t.name === key; }); if (!!inputField) { return __assign({}, acc, (_a = {}, _a[key] = { id_in: params.filter[key] }, _a)); } } if (isObject_1.default(params.filter[key])) { var type = introspectionResults.types.find(function (t) { return t.name === resource.type.name + "WhereInput"; }); var filterSome = type.inputFields.find(function (t) { return t.name === key + "_some"; }); if (filterSome) { var filter_1 = Object.keys(params.filter[key]).reduce(function (acc, k) { var _a; return (__assign({}, acc, (_a = {}, _a[k + "_in"] = params.filter[key][k], _a))); }, {}); return __assign({}, acc, (_b = {}, _b[key + "_some"] = filter_1, _b)); } } var parts = key.split('.'); if (parts.length > 1) { if (parts[1] == 'id') { var type = introspectionResults.types.find(function (t) { return t.name === resource.type.name + "WhereInput"; }); var filterSome = type.inputFields.find(function (t) { return t.name === parts[0] + "_some"; }); if (filterSome) { return __assign({}, acc, (_c = {}, _c[parts[0] + "_some"] = { id: params.filter[key] }, _c)); } return __assign({}, acc, (_d = {}, _d[parts[0]] = { id: params.filter[key] }, _d)); } var resourceField = resource.type.fields.find(function (f) { return f.name === parts[0]; }); if (resourceField.type.name === 'Int') { return __assign({}, acc, (_e = {}, _e[key] = parseInt(params.filter[key]), _e)); } if (resourceField.type.name === 'Float') { return __assign({}, acc, (_f = {}, _f[key] = parseFloat(params.filter[key]), _f)); } } return __assign({}, acc, (_g = {}, _g[key] = params.filter[key], _g)); }, {}); return { skip: (params.pagination.page - 1) * params.pagination.perPage, first: params.pagination.perPage, orderBy: params.sort.field + "_" + params.sort.order, where: filter }; }; }; var findInputFieldForType = function (introspectionResults, typeName, field) { var type = introspectionResults.types.find(function (t) { return t.name === typeName; }); if (!type) { return null; } var inputFieldType = type.inputFields.find(function (t) { return t.name === field; }); return !!inputFieldType ? getFinalType_1.default(inputFieldType.type) : null; }; var inputFieldExistsForType = function (introspectionResults, typeName, field) { return !!findInputFieldForType(introspectionResults, typeName, field); }; var buildReferenceField = function (_a) { var inputArg = _a.inputArg, introspectionResults = _a.introspectionResults, typeName = _a.typeName, field = _a.field, mutationType = _a.mutationType; var inputType = findInputFieldForType(introspectionResults, typeName, field); var mutationInputType = findInputFieldForType(introspectionResults, inputType.name, mutationType); return Object.keys(inputArg).reduce(function (acc, key) { var _a; return inputFieldExistsForType(introspectionResults, mutationInputType.name, key) ? __assign({}, acc, (_a = {}, _a[key] = inputArg[key], _a)) : acc; }, {}); }; var buildUpdateVariables = function (introspectionResults) { return function (resource, aorFetchType, params) { return Object.keys(params.data).reduce(function (acc, key) { var _a, _b, _c, _d, _e; if (Array.isArray(params.data[key])) { var inputType = findInputFieldForType(introspectionResults, resource.type.name + "UpdateInput", key); if (!inputType) { return acc; } //TODO: Make connect, disconnect and update overridable //TODO: Make updates working var _f = computeAddRemoveUpdate_1.computeFieldsToAddRemoveUpdate(params.previousData[key + "Ids"], params.data[key + "Ids"]), fieldsToAdd = _f.fieldsToAdd, fieldsToRemove = _f.fieldsToRemove /* fieldsToUpdate */; return __assign({}, acc, { data: __assign({}, acc.data, (_a = {}, _a[key] = (_b = {}, _b[mutations_1.PRISMA_CONNECT] = fieldsToAdd, _b[mutations_1.PRISMA_DISCONNECT] = fieldsToRemove, _b), _a)) }); } if (isObject_1.default(params.data[key])) { var fieldsToUpdate = buildReferenceField({ inputArg: params.data[key], introspectionResults: introspectionResults, typeName: resource.type.name + "UpdateInput", field: key, mutationType: mutations_1.PRISMA_CONNECT }); // If no fields in the object are valid, continue if (Object.keys(fieldsToUpdate).length === 0) { return acc; } // Else, connect the nodes return __assign({}, acc, { data: __assign({}, acc.data, (_c = {}, _c[key] = (_d = {}, _d[mutations_1.PRISMA_CONNECT] = __assign({}, fieldsToUpdate), _d), _c)) }); } // Put id field in a where object if (key === 'id' && params.data[key]) { return __assign({}, acc, { where: { id: params.data[key] } }); } var type = introspectionResults.types.find(function (t) { return t.name === resource.type.name; }); var isInField = type.fields.find(function (t) { return t.name === key; }); if (!!isInField) { // Rest should be put in data object return __assign({}, acc, { data: __assign({}, acc.data, (_e = {}, _e[key] = params.data[key], _e)) }); } return acc; }, {}); }; }; var buildCreateVariables = function (introspectionResults) { return function (resource, aorFetchType, params) { return Object.keys(params.data).reduce(function (acc, key) { var _a, _b, _c, _d, _e; if (Array.isArray(params.data[key])) { if (!inputFieldExistsForType(introspectionResults, resource.type.name + "CreateInput", key)) { return acc; } return __assign({}, acc, { data: __assign({}, acc.data, (_a = {}, _a[key] = (_b = {}, _b[mutations_1.PRISMA_CONNECT] = params.data[key + "Ids"].map(function (id) { return ({ id: id }); }), _b), _a)) }); } if (isObject_1.default(params.data[key])) { var fieldsToConnect = buildReferenceField({ inputArg: params.data[key], introspectionResults: introspectionResults, typeName: resource.type.name + "CreateInput", field: key, mutationType: mutations_1.PRISMA_CONNECT }); // If no fields in the object are valid, continue if (Object.keys(fieldsToConnect).length === 0) { return acc; } // Else, connect the nodes return __assign({}, acc, { data: __assign({}, acc.data, (_c = {}, _c[key] = (_d = {}, _d[mutations_1.PRISMA_CONNECT] = __assign({}, fieldsToConnect), _d), _c)) }); } // Put id field in a where object if (key === 'id' && params.data[key]) { return __assign({}, acc, { where: { id: params.data[key] } }); } var type = introspectionResults.types.find(function (t) { return t.name === resource.type.name; }); var isInField = type.fields.find(function (t) { return t.name === key; }); if (isInField) { // Rest should be put in data object return __assign({}, acc, { data: __assign({}, acc.data, (_e = {}, _e[key] = params.data[key], _e)) }); } return acc; }, {}); }; }; exports.default = (function (introspectionResults) { return function (resource, aorFetchType, params) { var _a; switch (aorFetchType) { case react_admin_1.GET_LIST: { return buildGetListVariables(introspectionResults)(resource, aorFetchType, params); } case react_admin_1.GET_MANY: return { where: { id_in: params.ids } }; case react_admin_1.GET_MANY_REFERENCE: { var parts = params.target.split('.'); return { where: (_a = {}, _a[parts[0]] = { id: params.id }, _a) }; } case react_admin_1.GET_ONE: return { where: { id: params.id } }; case react_admin_1.UPDATE: { return buildUpdateVariables(introspectionResults)(resource, aorFetchType, params); } case react_admin_1.CREATE: { return buildCreateVariables(introspectionResults)(resource, aorFetchType, params); } case react_admin_1.DELETE: return { where: { id: params.id } }; } }; }); //# sourceMappingURL=buildVariables.js.map