UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

198 lines (161 loc) 5.54 kB
"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); } }, []); }