UNPKG

@hisptz/react-ui

Version:

A collection of reusable complex DHIS2 react ui components.

152 lines (146 loc) 6.03 kB
import { useEffect, useState } from "react"; import { getDetailedValueFromApi, getFormulaSources } from "../../Functions/FormulaFunctions"; import { dataTypes, dataTypesInitials } from "../../Models"; export function useGetFormulaDataDetailed(formula, engine, location) { const [loading, setLoading] = useState(true); const [error, setError] = useState(false); const [data, setData] = useState(); useEffect(() => { let tempArr = getFormulaSources(formula, dataTypesInitials.DATA_ELEMENT); let tempArr2 = getFormulaSources(formula, dataTypesInitials.PROGRAM_INDICATOR); let tempArr3 = getFormulaSources(formula, dataTypesInitials.DATASET_REPORTING_RATES); let tempArr4 = getFormulaSources(formula, dataTypesInitials.ATTRIBUTES); let tempArr5 = getFormulaSources(formula, dataTypesInitials.CONSTANTS); let tempArr6 = getFormulaSources(formula, dataTypesInitials.ORG_UNIT_COUNT); let tempArr7 = getFormulaSources(formula, dataTypesInitials.PROGRAM_DATA_ELEMENT); async function fetch() { tempArr = await getWordData(engine, tempArr, dataTypes.DATA_ELEMENT, location); tempArr2 = await getWordData(engine, tempArr2, dataTypes.PROGRAM_INDICATOR, location); tempArr3 = await getWordData(engine, tempArr3, dataTypes.DATASET_REPORTING_RATES, location); tempArr4 = await getWordData(engine, tempArr4, dataTypes.ATTRIBUTES, location); tempArr5 = await getWordData(engine, tempArr5, dataTypes.CONSTANTS, location); tempArr6 = await getWordData(engine, tempArr6, dataTypes.ORG_UNIT_COUNT, location); tempArr7 = await getWordData(engine, tempArr7, dataTypes.PROGRAM_DATA_ELEMENT, location); } fetch().then(() => { const result = { dataElements: tempArr, programIndicators: tempArr2, dataSetReportingRates: tempArr3, attributes: tempArr4, constants: tempArr5, orgUnitCount: tempArr6, programDtElement: tempArr7 }; setData(result); setLoading(false); }).catch(error => { setLoading(false); setError(error); }); }, []); return { loading, error, data }; } async function getWordData(engine, arr, type, location) { //arr for array of id of datas to get their values, type indicates the data type of data eg dataElement=0 program indicator=1, reporting rates=2 const allPromises = arr === null || arr === void 0 ? void 0 : arr.map(e => { return getDetailedValueFromApi(engine, e, type); }); return await Promise.all(allPromises).then(value => { return value.map((val, i) => { if (type === dataTypes.DATA_ELEMENT) { if (val.length === 2) { //array of two elements first element is dataElement second element of array is category option combo return { id: arr[i], val: val[0].displayName + " " + val[1], location: location, sources: val[0].dataSetElements }; } if (val.length === 1) { //this is array of one element for data element that are just pure no category options return { id: arr[i], val: val[0].displayName, location: location, sources: val[0].dataSetElements }; } } if (type === dataTypes.ATTRIBUTES || type === dataTypes.PROGRAM_DATA_ELEMENT) { return { id: arr[i], val: val[1], location: location, sources: val[0] }; } if (type === dataTypes.PROGRAM_INDICATOR) { return { id: arr[i], val: val[0].displayName, location: location, sources: val[0].program }; } else { //for orgUnit count, constants and reporting rates return { id: arr[i], val: val[0], location: location }; } }); // if(type===dataTypes.DATA_ELEMENT){ // value.map((val,i)=>{ //We always return array just for uniformity // if(val.length===2){ //array of two elements first element is dataElement second element of array is category option combo // return {id:arr[i],val:val[0].displayName+" "+val[1],location:location,sources:val[0].dataSetElements} // }if(val.length===1){ //this is array of one element for data element that are just pure no category options // // return {id:arr[i],val:val[0].displayName,"location":location,sources:val[0].dataSetElements} // } // // }) // } // if(type===dataTypes.ATTRIBUTES || type===dataTypes.PROGRAM_DATA_ELEMENT){ // value.map((val,i)=> { // return {id: arr[i], "val": val[1].displayName, location: location, sources: val[0].displayName} // }) // } // // if(type===dataTypes.PROGRAM_INDICATOR){ // value.map((val,i)=>{ //We always return array just for uniformity // return {"id":arr[i],"val":val[0].displayName,"location":location,sources:val[0].program} // // }) // } // else { //for orgUnit count, constants and reporting rates // value.map((val,i)=>{ //We always return array just for uniformity // return {"id":arr[i],"val":val[0],"location":location} // // }) // } // if(wordDtEl.length===arr.length){ //array is full so we reload to update UI // setDataElementArray(wordDtEl) // updateDataElementHandler( (prev)=>{ // return prev.concat(wordDtEl) // } ) // } // if(programInd.length===arr.length){ // setProgramIndicatorArray(programInd) // updateProgramIndicatorHandler((prev)=>{ // return prev.concat(programInd) // } ) // } // if(dataSetReportingRates.length===arr.length){ // setDataSetReportingRatesArray(dataSetReportingRates) // updateDataSetReportingRatesHandler((prev)=>{ // return prev.concat(dataSetReportingRates) // }) // } }); }