UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

126 lines (116 loc) 5.59 kB
import { useDataQuery } from "@dhis2/app-runtime"; import i18n from "@dhis2/d2-i18n"; import { IndicatorGroupContext, IndicatorGroupProvider } from "./../../../../../../components/DictionaryAnalysis/Store/IndicatorGroupContext"; import _ from "lodash"; import PropTypes from "prop-types"; import React, { useContext, useEffect, useState } from "react"; import Error from "../../../../Shared/Componets/Error/ErrorAPIResult"; import Loader from "../../../../Shared/Componets/Loaders/Loader"; import { getFormulaSources } from "../../../../Utils/Functions/FormulaFunctions"; import { dataTypesInitials } from "../../../../Utils/Models"; import DataSets from "./DataSets"; import Programs from "./Programs"; const query = { sources: { resource: "indicatorGroups", id: _ref => { let { id } = _ref; return id; }, params: { fields: ["indicators[id,displayName,numerator,denominator]"] } } }; export default function DataSources(_ref2) { var _data$sources3, _data$sources3$indica; let { id } = _ref2; const { loading, error, data, refetch } = useDataQuery(query, { variables: { id } }); useEffect(() => { refetch({ id }); }, [id]); const [result, setResult] = useState({}); const { values, setValues } = useContext(IndicatorGroupContext); useEffect(() => { var _data$sources, _data$sources$indicat, _data$sources2, _data$sources2$indica; let numeratorDataElement; let denominatorDataElement; let numeratorProgramDtElement; let denominatorProgramDtElement; //for each indicator, put dataElements from both numerator and den in one array them pass in it const sourcesDataElement = data === null || data === void 0 ? void 0 : (_data$sources = data.sources) === null || _data$sources === void 0 ? void 0 : (_data$sources$indicat = _data$sources.indicators) === null || _data$sources$indicat === void 0 ? void 0 : _data$sources$indicat.map(e => { numeratorDataElement = getFormulaSources(e === null || e === void 0 ? void 0 : e.numerator, dataTypesInitials.DATA_ELEMENT); denominatorDataElement = getFormulaSources(e === null || e === void 0 ? void 0 : e.denominator, dataTypesInitials.DATA_ELEMENT); return [...numeratorDataElement, ...denominatorDataElement]; }); const sourceProgram = data === null || data === void 0 ? void 0 : (_data$sources2 = data.sources) === null || _data$sources2 === void 0 ? void 0 : (_data$sources2$indica = _data$sources2.indicators) === null || _data$sources2$indica === void 0 ? void 0 : _data$sources2$indica.map(e => { numeratorProgramDtElement = getFormulaSources(e === null || e === void 0 ? void 0 : e.numerator, dataTypesInitials.PROGRAM_DATA_ELEMENT); denominatorProgramDtElement = getFormulaSources(e === null || e === void 0 ? void 0 : e.denominator, dataTypesInitials.PROGRAM_DATA_ELEMENT); const ind = _.concat([], getFormulaSources(e === null || e === void 0 ? void 0 : e.numerator, dataTypesInitials.PROGRAM_INDICATOR), getFormulaSources(e === null || e === void 0 ? void 0 : e.denominator, dataTypesInitials.PROGRAM_INDICATOR)); const attr = _.concat([], getFormulaSources(e === null || e === void 0 ? void 0 : e.numerator, dataTypesInitials.ATTRIBUTES), getFormulaSources(e === null || e === void 0 ? void 0 : e.denominator, dataTypesInitials.ATTRIBUTES)); const prgDtEl = [...numeratorProgramDtElement, ...denominatorProgramDtElement]; return { prgInd: ind, attr: attr, prgDtEl: prgDtEl }; }); setResult({ sourcesDataElement: sourcesDataElement, sourceProgram: sourceProgram }); setValues({ numerator: { aggregate: numeratorDataElement, tracker: numeratorProgramDtElement }, denominator: { aggregate: denominatorDataElement, tracker: denominatorProgramDtElement } }); }, [data]); if (loading) { return /*#__PURE__*/React.createElement(Loader, { text: "" }); } if (error) { return /*#__PURE__*/React.createElement(Error, { error: error }); } return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", null, i18n.t("Data sources (Datasets/Programs)"), " "), /*#__PURE__*/React.createElement("p", null, " ", i18n.t("Indicators in this group are captured from the following sources"), " "), /*#__PURE__*/React.createElement("ul", null, result.sourcesDataElement ? data === null || data === void 0 ? void 0 : (_data$sources3 = data.sources) === null || _data$sources3 === void 0 ? void 0 : (_data$sources3$indica = _data$sources3.indicators) === null || _data$sources3$indica === void 0 ? void 0 : _data$sources3$indica.map((e, index) => { var _result$sourcesDataEl; return /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("b", null, " ", e === null || e === void 0 ? void 0 : e.displayName, " "), /*#__PURE__*/React.createElement(IndicatorGroupProvider, { value: { values, setValues } }, /*#__PURE__*/React.createElement(DataSets, { aggregate: (_result$sourcesDataEl = result === null || result === void 0 ? void 0 : result.sourcesDataElement[index]) !== null && _result$sourcesDataEl !== void 0 ? _result$sourcesDataEl : [] }), /*#__PURE__*/React.createElement(Programs, { sources: result === null || result === void 0 ? void 0 : result.sourceProgram[index] }))); }) : "")); } DataSources.propTypes = { id: PropTypes.string.isRequired };