UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

191 lines (165 loc) 5.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = require("lodash"); var _utils = require("../../../core/utils"); var _dataSource = _interopRequireDefault(require("./dataSource")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class DataSets extends _dataSource.default { constructor(_ref) { let { label } = _ref; super({ resource: "", label: label !== null && label !== void 0 ? label : "Data Sets", type: "dataSet" }); _defineProperty(this, "groupKey", "dataSets.id"); _defineProperty(this, "groupResource", "dataSets"); _defineProperty(this, "categories", [{ label: "Reporting rate", id: "REPORTING_RATE" }, { label: "Reporting rate on time", id: "REPORTING_RATE_ON_TIME" }, { label: "Actual reports", id: "ACTUAL_REPORTS" }, { label: "Actual reports on time", id: "ACTUAL_REPORTS_ON_TIME" }, { label: "Expected Reports", id: "EXPECTED_REPORTS" }]); _defineProperty(this, "groups", []); _defineProperty(this, "groupQuery", { dataSets: { resource: this.groupResource, params: _ref2 => { let { page, filter } = _ref2; return { page, fields: ["id", "displayName"], totalPages: true, filter, order: "displayName:asc" }; } } }); } async getData(engine) { var _engine$query; this.groups = (_engine$query = engine.query(this.groupQuery)) === null || _engine$query === void 0 ? void 0 : _engine$query.dataSets; } async getDataSources(engine, _ref3) { var _response$dataSets, _response$dataSets2, _response$dataSets2$d; let { filter, page } = _ref3; const response = await engine.query(this.groupQuery, { variables: { filter, page } }); return { pager: response === null || response === void 0 ? void 0 : (_response$dataSets = response.dataSets) === null || _response$dataSets === void 0 ? void 0 : _response$dataSets.pager, data: (0, _lodash.flattenDeep)(response === null || response === void 0 ? void 0 : (_response$dataSets2 = response.dataSets) === null || _response$dataSets2 === void 0 ? void 0 : (_response$dataSets2$d = _response$dataSets2.dataSets) === null || _response$dataSets2$d === void 0 ? void 0 : _response$dataSets2$d.map(_ref4 => { let { id, displayName } = _ref4; return this.categories.map(_ref5 => { let { id: categoryId, label: categoryLabel } = _ref5; return { id: "".concat(id, ".").concat(categoryId), displayName: "".concat(displayName, " - ").concat(categoryLabel) }; }); })) }; } async getGroups(engine) { var _response$dataSets$da, _response$dataSets3; const response = await engine.query(this.groupQuery, { variables: { filter: null, page: 1 } }); return (_response$dataSets$da = response === null || response === void 0 ? void 0 : (_response$dataSets3 = response.dataSets) === null || _response$dataSets3 === void 0 ? void 0 : _response$dataSets3.dataSets) !== null && _response$dataSets$da !== void 0 ? _response$dataSets$da : []; } async filter(engine, _ref6) { let { filter, selectedGroup, page, searchKeyword } = _ref6; const { data, pager } = await this.getDataSources(engine, { filter, page }); if (selectedGroup) { const filteredData = (0, _lodash.filter)(data, _ref7 => { let { id } = _ref7; return id.split(".")[0] === (selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id); }); if (searchKeyword) { const searchedData = (0, _lodash.filter)(filteredData, _ref8 => { let { id, displayName } = _ref8; const index = "".concat(id, "-").concat(displayName); return index.match(new RegExp(searchKeyword)); }); return { pager: (0, _utils.updatePager)(pager, searchedData.length), data: searchedData }; } return Promise.resolve({ pager: (0, _utils.updatePager)(pager, filteredData.length), data: filteredData }); } if (searchKeyword) { const filteredData = (0, _lodash.filter)(data, _ref9 => { let { id, displayName } = _ref9; const index = "".concat(id, "-").concat(displayName); return index.toLowerCase().match(new RegExp(searchKeyword.toLowerCase())); }); return Promise.resolve({ pager: (0, _utils.updatePager)(pager, filteredData.length), data: filteredData }); } return await this.getDataSources(engine, { filter, page }); } } exports.default = DataSets;