@hisptz/react-ui
Version:
A collection of reusable complex DHIS2 react ui components.
150 lines (122 loc) • 3.99 kB
JavaScript
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 : []
});
}
}