ra-data-graphql-simple
Version:
A GraphQL simple data provider for react-admin
228 lines • 10.5 kB
JavaScript
;
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