UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

150 lines (122 loc) 3.99 kB
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; } import { filter as _filter, flattenDeep, fromPairs, isArray, isEmpty } from "lodash"; import { DATASTORE_FUNCTIONS_ENDPOINT } from "../constants"; import DataSource from "./dataSource"; const keysQuery = { keys: { resource: DATASTORE_FUNCTIONS_ENDPOINT } }; const generateQuery = keys => { return fromPairs(keys === null || keys === void 0 ? void 0 : keys.map(key => [key, { resource: DATASTORE_FUNCTIONS_ENDPOINT, id: key }])); }; export default class CustomFunctions extends DataSource { constructor(_ref) { let { label } = _ref; super({ resource: "", label, type: "customFunction" }); _defineProperty(this, "functions", void 0); _defineProperty(this, "keys", void 0); _defineProperty(this, "rules", void 0); _defineProperty(this, "query", void 0); } async setQuery(engine) { var _await$engine$query; this.keys = (_await$engine$query = await engine.query(keysQuery)) === null || _await$engine$query === void 0 ? void 0 : _await$engine$query.keys; this.query = generateQuery(this.keys); } async queryData(engine) { try { var _this$functions; await this.setQuery(engine); this.functions = Object.values(await engine.query(this.query)); this.rules = flattenDeep((_this$functions = this.functions) === null || _this$functions === void 0 ? void 0 : _this$functions.map(func => { var _func$rules; return (_func$rules = func.rules) === null || _func$rules === void 0 ? void 0 : _func$rules.map(rule => ({ id: "".concat(func.id, ".").concat(rule.id), displayName: rule.name })); })); } catch (e) { console.error(e); this.functions = []; this.rules = []; } } async filter(engine, _ref2) { let { selectedGroup, page, searchKeyword } = _ref2; const filter = { group: undefined, search: undefined }; if (selectedGroup) { filter.group = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.id; } if (searchKeyword) { filter.search = searchKeyword; } return this.getDataSources(engine, { filter, page }); } async getGroups(engine) { if (!this.functions) { await this.queryData(engine); } return this.functions; } async getDataSources(engine, _ref3) { var _filteredRules; let { filter } = _ref3; if (!this.functions) { await this.queryData(engine); } if (isEmpty(filter)) { return { pager: { pageCount: 1 }, data: this.rules }; } let filteredRules = this.rules; if (!isArray(filter) && filter !== null && filter !== void 0 && filter.group) { filteredRules = _filter(filteredRules, _ref4 => { let { id } = _ref4; return id.startsWith(filter === null || filter === void 0 ? void 0 : filter.group); }); } if (!isArray(filter) && filter !== null && filter !== void 0 && filter.search) { filteredRules = _filter(filteredRules, _ref5 => { var _filter$search$toLowe, _filter$search; let { displayName } = _ref5; return displayName.toLowerCase().match(RegExp((_filter$search$toLowe = filter === null || filter === void 0 ? void 0 : (_filter$search = filter.search) === null || _filter$search === void 0 ? void 0 : _filter$search.toLowerCase()) !== null && _filter$search$toLowe !== void 0 ? _filter$search$toLowe : "")); }); } return Promise.resolve({ pager: { pageCount: 1 }, data: (_filteredRules = filteredRules) !== null && _filteredRules !== void 0 ? _filteredRules : [] }); } }