ra-nest-crud
Version:
a data provider for react admin that handles request from nestjsx-crud server
186 lines (185 loc) • 7.89 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;
};
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);
});
};
});