UNPKG

ra-nest-crud

Version:

a data provider for react admin that handles request from nestjsx-crud server

186 lines (185 loc) 7.89 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; }; Object.defineProperty(exports, "__esModule", { value: true }); var crud_request_1 = require("@nestjsx/crud-request"); var react_admin_1 = require("react-admin"); exports.default = (function (apiUrl, httpClient) { if (httpClient === void 0) { httpClient = react_admin_1.fetchUtils.fetchJson; } var composeFilter = function (paramsFilter) { if (paramsFilter === "" || (typeof paramsFilter.q !== "undefined" && paramsFilter.q === "")) { paramsFilter = {}; } var flatFilter = react_admin_1.fetchUtils.flattenObject(paramsFilter); var filter = Object.keys(flatFilter).map(function (key) { var splitKey = key.split("||"); var ops = splitKey[1] ? splitKey[1] : "cont"; var field = splitKey[0]; if (field.indexOf("_") === 0 && field.indexOf(".") > -1) { field = field.split(/\.(.+)/)[1]; } return { field: field, operator: ops, value: flatFilter[key] }; }); return filter; }; var convertDataRequestToHTTP = function (type, resource, params) { var url = ""; var options = {}; switch (type) { case react_admin_1.GET_LIST: { var _a = params.pagination, page = _a.page, perPage = _a.perPage; var _b = params.filter, orCondition = _b["0"], andCondition = __rest(_b, ["0"]); var andConditionObject_1 = composeFilter(andCondition).reduce(function (prev, item) { var _a; prev[item.field] = (_a = {}, _a[item.operator] = item.value, _a); return prev; }, {}); var query = crud_request_1.RequestQueryBuilder.create(!!orCondition ? { search: { $or: composeFilter(orCondition).map(function (item) { var _a, _b; return (__assign((_a = {}, _a[item.field] = (_b = {}, _b[item.operator] = item.value, _b), _a), andConditionObject_1)); }), }, } : { filter: composeFilter(andCondition), }) .setLimit(perPage) .setPage(page) .sortBy(params.sort) .setOffset((page - 1) * perPage) .query(); url = apiUrl + "/" + resource + "?" + query; break; } case react_admin_1.GET_ONE: { url = apiUrl + "/" + resource + "/" + params.id; break; } case react_admin_1.GET_MANY: { var query = crud_request_1.RequestQueryBuilder.create() .setFilter({ field: "id", operator: crud_request_1.CondOperator.IN, value: "" + params.ids, }) .query(); url = apiUrl + "/" + resource + "?" + query; break; } case react_admin_1.GET_MANY_REFERENCE: { var _c = params.pagination, page = _c.page, perPage = _c.perPage; var filter = composeFilter(params.filter); filter.push({ field: params.target, operator: crud_request_1.CondOperator.EQUALS, value: params.id, }); var query = crud_request_1.RequestQueryBuilder.create({ filter: filter, }) .sortBy(params.sort) .setLimit(perPage) .setOffset((page - 1) * perPage) .query(); url = apiUrl + "/" + resource + "?" + query; break; } case react_admin_1.UPDATE: { url = apiUrl + "/" + resource + "/" + params.id; options.method = "PATCH"; options.body = JSON.stringify(params.data); break; } case react_admin_1.CREATE: { options.method = "POST"; if (Array.isArray(params.data)) { url = apiUrl + "/" + resource + "/bulk"; options.body = JSON.stringify({ bulk: params.data }); break; } url = apiUrl + "/" + resource; options.body = JSON.stringify(params.data); break; } case react_admin_1.DELETE: { url = apiUrl + "/" + resource + "/" + params.id; if (!!params.previousData) { options.body = JSON.stringify(params.previousData); } options.method = "DELETE"; break; } default: throw new Error("Unsupported fetch action type " + type); } return { url: url, options: options }; }; var convertHTTPResponse = function (response, type, resource, params) { var headers = response.headers, json = response.json; switch (type) { case react_admin_1.GET_LIST: case react_admin_1.GET_MANY_REFERENCE: return { data: json.data, total: json.total, }; case react_admin_1.CREATE: return { data: __assign(__assign({}, params.data), { id: json.id }) }; default: return { data: json }; } }; return function (type, resource, params) { if (type === react_admin_1.UPDATE_MANY) { return Promise.all(params.ids.map(function (id) { return httpClient(apiUrl + "/" + resource + "/" + id, { method: "PUT", body: JSON.stringify(params.data), }); })).then(function (responses) { return ({ data: responses.map(function (response) { return response.json; }), }); }); } if (type === react_admin_1.DELETE_MANY) { return Promise.all(params.ids.map(function (id) { return httpClient(apiUrl + "/" + resource + "/" + id, { method: "DELETE", }); })).then(function (responses) { return ({ data: responses.map(function (response) { return response.json; }), }); }); } var _a = convertDataRequestToHTTP(type, resource, params), url = _a.url, options = _a.options; return httpClient(url, options).then(function (response) { return convertHTTPResponse(response, type, resource, params); }); }; });