@hisptz/react-ui
Version:
A collection of reusable complex DHIS2 react ui components.
198 lines (161 loc) • 5.54 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useClearOrganisationData = useClearOrganisationData;
exports.useOrganisationUnitData = useOrganisationUnitData;
var _appRuntime = require("@dhis2/app-runtime");
var _asyncEs = require("async-es");
var _lodash = require("lodash");
var _react = require("react");
var _config = require("../constants/config");
var _queries = require("../constants/queries");
var _db = require("../services/db");
var _utils = require("../utils");
function sanitizeOrgUnitGroups(groups) {
return groups.map(ou => {
var _ou$organisationUnitG;
return (0, _lodash.set)(ou, "organisationUnitGroups", (_ou$organisationUnitG = ou.organisationUnitGroups) === null || _ou$organisationUnitG === void 0 ? void 0 : _ou$organisationUnitG.map(ouGroup => ouGroup.id));
});
}
function useOrganisationUnitData(pageSize) {
const [loading, setLoading] = (0, _react.useState)(false);
const engine = (0, _appRuntime.useDataEngine)();
const getLevels = (0, _react.useCallback)(async options => {
var _pagination$pageCount;
_db.db.clearOrgUnitLevels();
const pagination = await (0, _utils.getPagination)(engine, _queries.levelQuery, {
queryKey: "levels",
options: { ...options,
pageSize
}
});
const pageCount = (_pagination$pageCount = pagination.pageCount) !== null && _pagination$pageCount !== void 0 ? _pagination$pageCount : 0;
if (pageCount > 0) {
_db.db.updateCount({
resource: "levels",
key: "total",
value: pageCount
});
const levels = await (0, _asyncEs.mapSeries)((0, _lodash.range)(1, pageCount + 1), async page => {
const data = await engine.query(_queries.levelQuery, {
variables: { ...options,
page
}
});
_db.db.updateCount({
resource: "levels",
key: "page",
value: page
});
return (0, _lodash.get)(data, ["levels", "organisationUnitLevels"]);
}).then(_lodash.flattenDeep);
await _db.db.addOrganisationUnitLevels(levels);
}
}, []);
const getOrgUnits = (0, _react.useCallback)(async options => {
var _pagination$pageCount2;
_db.db.clearOrgUnits();
const pagination = await (0, _utils.getPagination)(engine, _queries.ouQuery, {
queryKey: "ous",
options: {
pageSize
}
});
const pageCount = (_pagination$pageCount2 = pagination.pageCount) !== null && _pagination$pageCount2 !== void 0 ? _pagination$pageCount2 : 0;
_db.db.updateCount({
resource: "orgUnits",
key: "total",
value: pageCount
});
if (pageCount > 0) {
const groups = await (0, _asyncEs.mapSeries)((0, _lodash.range)(1, pageCount + 1), async page => {
const data = await engine.query(_queries.ouQuery, {
variables: { ...options,
page
}
});
_db.db.updateCount({
resource: "orgUnits",
key: "page",
value: page
});
return (0, _lodash.get)(data, ["ous", "organisationUnits"]);
}).then(_lodash.flattenDeep);
await _db.db.addOrganisationUnits(sanitizeOrgUnitGroups(groups));
}
}, []);
const getGroups = (0, _react.useCallback)(async options => {
var _pagination$pageCount3;
_db.db.clearOrgUnitGroups();
const pagination = await (0, _utils.getPagination)(engine, _queries.groupQuery, {
queryKey: "groups",
options: {
pageSize
}
});
const pageCount = (_pagination$pageCount3 = pagination.pageCount) !== null && _pagination$pageCount3 !== void 0 ? _pagination$pageCount3 : 0;
_db.db.updateCount({
resource: "groups",
key: "total",
value: pageCount
});
if (pageCount > 0) {
const groups = await (0, _asyncEs.mapSeries)((0, _lodash.range)(1, pageCount + 1), async page => {
const data = await engine.query(_queries.groupQuery, {
variables: { ...options,
page
}
});
_db.db.updateCount({
resource: "groups",
key: "page",
value: page
});
return (0, _lodash.get)(data, ["groups", "organisationUnitGroups"]);
}).then(_lodash.flattenDeep);
await _db.db.addOrganisationUnitGroups(groups);
}
}, []);
(0, _react.useEffect)(() => {
async function get() {
setLoading(true);
try {
const hasLevels = await _db.db.hasOrganisationUnitLevels();
const hasGroups = await _db.db.hasOrganisationUnitGroups();
const hasOus = await _db.db.hasOrganisationUnits();
if (!hasLevels) {
await getLevels({
pageSize: pageSize !== null && pageSize !== void 0 ? pageSize : _config.OFFLINE_ORG_UNIT_PAGE_SIZE
});
}
if (!hasGroups) {
await getGroups({
pageSize: pageSize !== null && pageSize !== void 0 ? pageSize : _config.OFFLINE_ORG_UNIT_PAGE_SIZE
});
}
if (!hasOus) {
await getOrgUnits({
pageSize: pageSize !== null && pageSize !== void 0 ? pageSize : _config.OFFLINE_ORG_UNIT_PAGE_SIZE
});
}
} catch (e) {
console.error(e);
}
setLoading(false);
}
get();
}, []);
return {
loading
};
}
function useClearOrganisationData() {
return (0, _react.useCallback)(async () => {
try {
await _db.db.clear();
} catch (e) {
console.error(e);
}
}, []);
}