@hisptz/react-ui
Version:
A collection of reusable complex DHIS2 react ui components.
164 lines (129 loc) • 4.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = require("lodash");
var _constants = require("../constants");
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; }
const keysQuery = {
keys: {
resource: _constants.DATASTORE_FUNCTIONS_ENDPOINT
}
};
const generateQuery = keys => {
return (0, _lodash.fromPairs)(keys === null || keys === void 0 ? void 0 : keys.map(key => [key, {
resource: _constants.DATASTORE_FUNCTIONS_ENDPOINT,
id: key
}]));
};
class CustomFunctions extends _dataSource.default {
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 = (0, _lodash.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 ((0, _lodash.isEmpty)(filter)) {
return {
pager: {
pageCount: 1
},
data: this.rules
};
}
let filteredRules = this.rules;
if (!(0, _lodash.isArray)(filter) && filter !== null && filter !== void 0 && filter.group) {
filteredRules = (0, _lodash.filter)(filteredRules, _ref4 => {
let {
id
} = _ref4;
return id.startsWith(filter === null || filter === void 0 ? void 0 : filter.group);
});
}
if (!(0, _lodash.isArray)(filter) && filter !== null && filter !== void 0 && filter.search) {
filteredRules = (0, _lodash.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 : []
});
}
}
exports.default = CustomFunctions;