UNPKG

ra-data-graphql-simple

Version:

A GraphQL simple data provider for react-admin

228 lines 10.5 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 __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var ra_core_1 = require("ra-core"); var getFinalType_1 = __importDefault(require("./getFinalType")); var isList_1 = __importDefault(require("./isList")); exports.default = (function (introspectionResults) { return function (resource, raFetchMethod, params, queryType) { var _a; var preparedParams = prepareParams(params, queryType, introspectionResults); switch (raFetchMethod) { case ra_core_1.GET_LIST: { return buildGetListVariables(introspectionResults)(resource, raFetchMethod, preparedParams); } case ra_core_1.GET_MANY: return __assign({ filter: { ids: preparedParams.ids } }, (preparedParams.meta ? { meta: preparedParams.meta } : {})); case ra_core_1.GET_MANY_REFERENCE: { var variables = buildGetListVariables(introspectionResults)(resource, raFetchMethod, preparedParams); variables.filter = __assign(__assign({}, variables.filter), (_a = {}, _a[preparedParams.target] = preparedParams.id, _a)); return variables; } case ra_core_1.GET_ONE: case ra_core_1.DELETE: return __assign({ id: preparedParams.id }, (preparedParams.meta ? { meta: preparedParams.meta } : {})); case ra_core_1.DELETE_MANY: return preparedParams; case ra_core_1.CREATE: case ra_core_1.UPDATE: { return buildCreateUpdateVariables(resource, raFetchMethod, preparedParams, queryType); } case ra_core_1.UPDATE_MANY: { var ids = preparedParams.ids, resourceData = preparedParams.data; var _b = buildCreateUpdateVariables(resource, raFetchMethod, { data: resourceData }, queryType), id = _b.id, data = __rest(_b, ["id"]); return { ids: ids, data: data, }; } } }; }); var sanitizeValue = function (type, value) { if (type.name === 'Int') { return parseInt(value, 10); } if (type.name === 'Float') { return parseFloat(value); } return value; }; var castType = function (value, type) { var realType = type.kind === 'NON_NULL' ? type.ofType : type; switch ("".concat(realType.kind, ":").concat(realType.name)) { case 'SCALAR:Int': return Number(value); case 'SCALAR:String': return String(value); case 'SCALAR:Boolean': return Boolean(value); default: return value; } }; var prepareParams = function (params, queryType, introspectionResults) { var result = {}; if (!params) { return params; } Object.keys(params).forEach(function (key) { var param = params[key]; var arg = null; if (!param) { result[key] = param; return; } if (queryType && Array.isArray(queryType.args)) { arg = queryType.args.find(function (item) { return item.name === key; }); } if (param instanceof File) { result[key] = param; return; } if (param instanceof Date) { result[key] = param.toISOString(); return; } if (param instanceof Object && !Array.isArray(param) && arg && arg.type.kind === 'INPUT_OBJECT') { var args = introspectionResults.types.find(function (item) { return item.kind === arg.type.kind && item.name === arg.type.name; }).inputFields; result[key] = prepareParams(param, { args: args }, introspectionResults); return; } if (param instanceof Object && !(param instanceof Date) && !Array.isArray(param)) { result[key] = prepareParams(param, queryType, introspectionResults); return; } if (!arg) { result[key] = param; return; } result[key] = castType(param, arg.type); }); return result; }; var buildGetListVariables = function (introspectionResults) { return function (resource, raFetchMethod, params) { var variables = { filter: {} }; if (params.filter) { variables.filter = Object.keys(params.filter).reduce(function (acc, key) { var _a, _b, _c, _d, _e, _f, _g; var _h, _j; if (key === 'ids') { return __assign(__assign({}, acc), { ids: params.filter[key] }); } if (typeof params.filter[key] === 'object') { var type = introspectionResults.types.find(function (t) { return t.name === "".concat(resource.type.name, "Filter"); }); var filterSome = (_h = type === null || type === void 0 ? void 0 : type.inputFields) === null || _h === void 0 ? void 0 : _h.find(function (t) { return t.name === "".concat(key, "_some"); }); if (filterSome) { var filter = Object.keys(params.filter[key]).reduce(function (acc, k) { var _a; return (__assign(__assign({}, acc), (_a = {}, _a["".concat(k, "_in")] = params.filter[key][k], _a))); }, {}); return __assign(__assign({}, acc), (_a = {}, _a["".concat(key, "_some")] = filter, _a)); } } var parts = key.split('.'); if (parts.length > 1) { if (parts[1] === 'id') { var type_1 = introspectionResults.types.find(function (t) { return t.name === "".concat(resource.type.name, "Filter"); }); var filterSome = (_j = type_1 === null || type_1 === void 0 ? void 0 : type_1.inputFields) === null || _j === void 0 ? void 0 : _j.find(function (t) { return t.name === "".concat(parts[0], "_some"); }); if (filterSome) { return __assign(__assign({}, acc), (_b = {}, _b["".concat(parts[0], "_some")] = { id: params.filter[key], }, _b)); } return __assign(__assign({}, acc), (_c = {}, _c[parts[0]] = { id: params.filter[key] }, _c)); } var resourceField_1 = resource.type.fields.find(function (f) { return f.name === parts[0]; }); var type = (0, getFinalType_1.default)(resourceField_1.type); return __assign(__assign({}, acc), (_d = {}, _d[key] = sanitizeValue(type, params.filter[key]), _d)); } var resourceField = resource.type.fields.find(function (f) { return f.name === key; }); if (resourceField) { var type_2 = (0, getFinalType_1.default)(resourceField.type); var isAList = (0, isList_1.default)(resourceField.type); if (isAList) { return __assign(__assign({}, acc), (_e = {}, _e[key] = Array.isArray(params.filter[key]) ? params.filter[key].map(function (value) { return sanitizeValue(type_2, value); }) : sanitizeValue(type_2, [params.filter[key]]), _e)); } return __assign(__assign({}, acc), (_f = {}, _f[key] = sanitizeValue(type_2, params.filter[key]), _f)); } return __assign(__assign({}, acc), (_g = {}, _g[key] = params.filter[key], _g)); }, {}); } if (params.pagination) { variables.page = parseInt(params.pagination.page, 10) - 1; variables.perPage = parseInt(params.pagination.perPage, 10); } if (params.sort) { variables.sortField = params.sort.field; variables.sortOrder = params.sort.order; } if (params.meta) variables = __assign(__assign({}, variables), { meta: params.meta }); return variables; }; }; var buildCreateUpdateVariables = function (resource, raFetchMethod, _a, queryType) { var id = _a.id, data = _a.data, meta = _a.meta; return Object.keys(data).reduce(function (acc, key) { var _a, _b, _c; if (Array.isArray(data[key])) { var arg = queryType.args.find(function (a) { return a.name === "".concat(key, "Ids"); }); if (arg) { return __assign(__assign({}, acc), (_a = {}, _a["".concat(key, "Ids")] = data[key].map(function (_a) { var id = _a.id; return id; }), _a)); } } if (typeof data[key] === 'object') { var arg = queryType.args.find(function (a) { return a.name === "".concat(key, "Id"); }); if (arg) { return __assign(__assign({}, acc), (_b = {}, _b["".concat(key, "Id")] = data[key].id, _b)); } } return __assign(__assign({}, acc), (_c = {}, _c[key] = data[key], _c)); }, { id: id, meta: meta }); }; //# sourceMappingURL=buildVariables.js.map