@hisptz/dhis2-scorecard 1.2.30 → 1.2.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/LoadingIndicator.js +3 -5
- package/dist/components/LoadingIndicator.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/LegendView.js +86 -56
- package/dist/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -31
- package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -26
- package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -22
- package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js +6 -13
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
- package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
- package/dist/components/ScorecardTable/components/AverageCell.js +2 -2
- package/dist/components/ScorecardTable/components/AverageCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/AverageFooterCell.js +10 -32
- package/dist/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/DataContainer.js +4 -1
- package/dist/components/ScorecardTable/components/DataContainer.js.map +1 -1
- package/dist/components/ScorecardTable/components/DataFooterCell.js +35 -71
- package/dist/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
- package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
- package/dist/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +37 -2
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +78 -0
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
- package/dist/esm/components/LoadingIndicator.js +2 -4
- package/dist/esm/components/LoadingIndicator.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/LegendView.js +86 -52
- package/dist/esm/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -27
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -22
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -18
- package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js +4 -11
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
- package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/AverageCell.js +2 -2
- package/dist/esm/components/ScorecardTable/components/AverageCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js +11 -33
- package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/DataContainer.js +4 -1
- package/dist/esm/components/ScorecardTable/components/DataContainer.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/DataFooterCell.js +36 -72
- package/dist/esm/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +39 -4
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +72 -0
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
- package/dist/esm/hooks/completed.js +13 -0
- package/dist/esm/hooks/completed.js.map +1 -0
- package/dist/esm/hooks/table.js +35 -45
- package/dist/esm/hooks/table.js.map +1 -1
- package/dist/esm/hooks/value.js +51 -101
- package/dist/esm/hooks/value.js.map +1 -1
- package/dist/esm/schemas/config.js +4 -0
- package/dist/esm/schemas/config.js.map +1 -1
- package/dist/esm/utils/columns.js +15 -5
- package/dist/esm/utils/columns.js.map +1 -1
- package/dist/esm/utils/dataEngine.js +128 -83
- package/dist/esm/utils/dataEngine.js.map +1 -1
- package/dist/hooks/completed.js +15 -0
- package/dist/hooks/completed.js.map +1 -0
- package/dist/hooks/table.js +43 -53
- package/dist/hooks/table.js.map +1 -1
- package/dist/hooks/value.js +49 -98
- package/dist/hooks/value.js.map +1 -1
- package/dist/schemas/config.js +4 -0
- package/dist/schemas/config.js.map +1 -1
- package/dist/types/components/LoadingIndicator.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts +1 -1
- package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/PeriodSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/FurtherAnalysisVisualization.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/AverageFooterCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/DataContainer.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/DataFooterCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisMenu.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts +10 -0
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts +13 -0
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts.map +1 -0
- package/dist/types/hooks/completed.d.ts +2 -0
- package/dist/types/hooks/completed.d.ts.map +1 -0
- package/dist/types/hooks/table.d.ts.map +1 -1
- package/dist/types/hooks/value.d.ts +9 -3
- package/dist/types/hooks/value.d.ts.map +1 -1
- package/dist/types/schemas/config.d.ts +18 -0
- package/dist/types/schemas/config.d.ts.map +1 -1
- package/dist/types/utils/columns.d.ts.map +1 -1
- package/dist/types/utils/dataEngine.d.ts +16 -12
- package/dist/types/utils/dataEngine.d.ts.map +1 -1
- package/dist/utils/columns.js +15 -5
- package/dist/utils/columns.js.map +1 -1
- package/dist/utils/dataEngine.js +127 -82
- package/dist/utils/dataEngine.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { AnalyticsData } from "./data";
|
|
2
2
|
import type { QueueObject } from "async";
|
|
3
3
|
export type RemoveListener = () => void;
|
|
4
|
-
export type DataEngineListener = (
|
|
5
|
-
export type OnCompleteDataEngineListener = (
|
|
4
|
+
export type DataEngineListener = () => void;
|
|
5
|
+
export type OnCompleteDataEngineListener = () => void;
|
|
6
6
|
export type ProgressListeners = (progress: number) => void;
|
|
7
7
|
export type ScorecardDataEngine = ReturnType<typeof createScorecardDataEngine>;
|
|
8
8
|
export declare function createScorecardDataEngine(): {
|
|
@@ -11,14 +11,18 @@ export declare function createScorecardDataEngine(): {
|
|
|
11
11
|
orgUnits: string[];
|
|
12
12
|
dataItems: string[];
|
|
13
13
|
}>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
getSnapshot: (config: {
|
|
15
|
+
dx: string[];
|
|
16
|
+
pe: string[];
|
|
17
|
+
ou: string[];
|
|
18
|
+
}) => () => AnalyticsData[] | undefined;
|
|
19
|
+
getIsCompleteSnapshot: () => boolean;
|
|
20
|
+
data: Map<string, AnalyticsData>;
|
|
17
21
|
isDone: boolean;
|
|
18
22
|
initialized: boolean;
|
|
19
23
|
dataListeners: DataEngineListener[];
|
|
20
|
-
onCompleteListeners: OnCompleteDataEngineListener
|
|
21
|
-
progressListeners: ProgressListeners
|
|
24
|
+
onCompleteListeners: Set<OnCompleteDataEngineListener>;
|
|
25
|
+
progressListeners: Set<ProgressListeners>;
|
|
22
26
|
dimensions: {
|
|
23
27
|
orgUnits: string[];
|
|
24
28
|
periods: string[];
|
|
@@ -27,19 +31,19 @@ export declare function createScorecardDataEngine(): {
|
|
|
27
31
|
updateProgress(): void;
|
|
28
32
|
updateTotalRequests(value: number): void;
|
|
29
33
|
updateCompleteRequests(value: number): void;
|
|
30
|
-
addDataListener(listener: DataEngineListener): RemoveListener;
|
|
34
|
+
addDataListener(key: string, listener: DataEngineListener): RemoveListener;
|
|
35
|
+
addGeneralListener(listener: DataEngineListener): RemoveListener;
|
|
31
36
|
addOnCompleteListener(listener: OnCompleteDataEngineListener): RemoveListener;
|
|
32
37
|
addProgressListener(listener: ProgressListeners): RemoveListener;
|
|
33
|
-
removeListener(listener: DataEngineListener):
|
|
34
|
-
updateData(
|
|
35
|
-
complete(): void;
|
|
38
|
+
removeListener(key: string, listener: DataEngineListener): boolean | undefined;
|
|
39
|
+
updateData(downloadedData: AnalyticsData[]): void;
|
|
36
40
|
clear(): void;
|
|
37
41
|
setupDataFetch(): void;
|
|
38
42
|
initialize(fetch: (dimensions: {
|
|
39
43
|
periods: string[];
|
|
40
44
|
orgUnits: string[];
|
|
41
45
|
dataItems: string[];
|
|
42
|
-
}) => Promise<AnalyticsData[]>, { dimensions, }: {
|
|
46
|
+
}) => Promise<AnalyticsData[]>, { dimensions: appliedDimensions, }: {
|
|
43
47
|
dimensions: {
|
|
44
48
|
dataItems: string[];
|
|
45
49
|
orgUnits: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../../../src/utils/dataEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AACxC,MAAM,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"dataEngine.d.ts","sourceRoot":"","sources":["../../../src/utils/dataEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC;AAC5C,MAAM,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAC;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAI3D,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE/E,wBAAgB,yBAAyB;;iBAO9B,MAAM,EAAE;kBACP,MAAM,EAAE;mBACP,MAAM,EAAE;;0BAkBS;QAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAA;KAAE;;;;;mBAuCnD,kBAAkB,EAAE;;;;kBAhD/B,MAAM,EAAE;iBACT,MAAM,EAAE;mBACN,MAAM,EAAE;;;+BAwDQ,MAAM;kCAIH,MAAM;yBAK9B,MAAM,YACD,kBAAkB,GAC1B,cAAc;iCAMY,kBAAkB,GAAG,cAAc;oCAOrD,4BAA4B,GACpC,cAAc;kCAMa,iBAAiB,GAAG,cAAc;wBAM5C,MAAM,YAAY,kBAAkB;+BAG7B,aAAa,EAAE;;;sBAuIlC,CAAC,UAAU,EAAE;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,EAAE,CAAC;KACpB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,sCAG3B;QACF,UAAU,EAAE;YACX,SAAS,EAAE,MAAM,EAAE,CAAC;YACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;KACF;EAYH"}
|
package/dist/utils/columns.js
CHANGED
|
@@ -29,18 +29,18 @@ function getValueFromConfig({
|
|
|
29
29
|
}
|
|
30
30
|
function getSortingFunction(dataEngine) {
|
|
31
31
|
return function sortingFunction(rowA, rowB, columnId) {
|
|
32
|
-
if (!dataEngine.
|
|
32
|
+
if (!dataEngine.getIsCompleteSnapshot()) {
|
|
33
33
|
return 0;
|
|
34
34
|
}
|
|
35
35
|
const dataA = rowA.getValue(columnId);
|
|
36
36
|
const dataB = rowB.getValue(columnId);
|
|
37
37
|
const dataAValue = getValueFromConfig({
|
|
38
38
|
config: dataA,
|
|
39
|
-
data: dataEngine.data
|
|
39
|
+
data: Array.from(dataEngine.data.values())
|
|
40
40
|
});
|
|
41
41
|
const dataBValue = getValueFromConfig({
|
|
42
42
|
config: dataB,
|
|
43
|
-
data: dataEngine.data
|
|
43
|
+
data: Array.from(dataEngine.data.values())
|
|
44
44
|
});
|
|
45
45
|
const valueA = dataAValue.data.current ?? 0;
|
|
46
46
|
const valueB = dataBValue.data.current ?? 0;
|
|
@@ -166,6 +166,14 @@ function getDataHolderColumn({
|
|
|
166
166
|
(acc, { label }, index) => index === 0 ? `${label}` : `${acc} / ${label}`,
|
|
167
167
|
""
|
|
168
168
|
);
|
|
169
|
+
const legends = dataSources.map(
|
|
170
|
+
({ legends: legends2, id: id2, label, specificTargetsSet }) => ({
|
|
171
|
+
id: id2,
|
|
172
|
+
label,
|
|
173
|
+
legends: legends2,
|
|
174
|
+
specificTargetsSet
|
|
175
|
+
})
|
|
176
|
+
);
|
|
169
177
|
if (hasOnePeriod) {
|
|
170
178
|
return columnHelper.accessor(
|
|
171
179
|
(rowData) => {
|
|
@@ -190,7 +198,8 @@ function getDataHolderColumn({
|
|
|
190
198
|
{
|
|
191
199
|
header: DataHeaderCell.DataHeaderCell,
|
|
192
200
|
meta: {
|
|
193
|
-
label: header
|
|
201
|
+
label: header,
|
|
202
|
+
legends
|
|
194
203
|
},
|
|
195
204
|
id: id.toString(),
|
|
196
205
|
cell: DataContainer.DataContainer,
|
|
@@ -239,7 +248,8 @@ function getDataHolderColumn({
|
|
|
239
248
|
)
|
|
240
249
|
),
|
|
241
250
|
meta: {
|
|
242
|
-
label: header
|
|
251
|
+
label: header,
|
|
252
|
+
legends
|
|
243
253
|
},
|
|
244
254
|
header: DataHeaderCell.DataHeaderCell,
|
|
245
255
|
enableSorting: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/columns.ts"],"names":["createColumnHelper","head","sum","DataHeaderCell","getAdjacentFixedPeriods","createFixedPeriodFromPeriodId","DataContainer","DataFooterCell","AverageHeaderCell","AverageCell","AverageFooterCell","EmptyDataHeaderCell"],"mappings":"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","file":"columns.js","sourcesContent":["import type { ScorecardMeta } from \"../components\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardCellData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\ttype ColumnDef,\n\tcreateColumnHelper,\n\ttype Row,\n} from \"@tanstack/react-table\";\nimport { head, sum } from \"lodash\";\nimport type { ItemMeta } from \"../hooks/metadata\";\nimport { DataContainer } from \"../components/ScorecardTable/components/DataContainer\";\nimport {\n\tDataHeaderCell,\n\tEmptyDataHeaderCell,\n} from \"../components/ScorecardTable/components/TableHeader/components/DataHeaderCell\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\nimport { AverageCell } from \"../components/ScorecardTable/components/AverageCell\";\nimport { AverageHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/AverageHeaderCell\";\nimport { DataFooterCell } from \"../components/ScorecardTable/components/DataFooterCell\";\nimport { AverageFooterCell } from \"../components/ScorecardTable/components/AverageFooterCell\";\nimport type { ScorecardDataEngine } from \"./dataEngine\";\nimport type { AnalyticsData } from \"./data\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction getValueFromConfig({\n\tconfig,\n\tdata,\n}: {\n\tconfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn (\n\t\t\tconfig.orgUnit.uid === datum.ou &&\n\t\t\tconfig.currentPeriod === datum.pe &&\n\t\t\tdatum.dx === head(config.dataSources)!.id\n\t\t);\n\t});\n\n\treturn {\n\t\t...head(config.dataSources)!,\n\t\tdata: getValues({\n\t\t\tvalues: dataValues,\n\t\t\tcurrentPeriod: config.currentPeriod!,\n\t\t\tpreviousPeriod: config.previousPeriod,\n\t\t}),\n\t};\n}\n\nfunction getSortingFunction(dataEngine: ScorecardDataEngine) {\n\treturn function sortingFunction(\n\t\trowA: Row<ScorecardTableData>,\n\t\trowB: Row<ScorecardTableData>,\n\t\tcolumnId: string,\n\t) {\n\t\tif (!dataEngine.isDone) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellConfig;\n\t\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellConfig;\n\n\t\tconst dataAValue = getValueFromConfig({\n\t\t\tconfig: dataA,\n\t\t\tdata: dataEngine.data,\n\t\t});\n\n\t\tconst dataBValue = getValueFromConfig({\n\t\t\tconfig: dataB,\n\t\t\tdata: dataEngine.data,\n\t\t});\n\n\t\tconst valueA = dataAValue.data.current ?? 0;\n\t\tconst valueB = dataBValue.data.current ?? 0;\n\n\t\tif (valueA === valueB) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn valueA > valueB ? 1 : -1;\n\t};\n}\n\nexport function getAverageValue({\n\tdataValues,\n\tmeta,\n}: {\n\tdataValues: ScorecardAnalyticsData[];\n\tmeta: ScorecardMeta;\n}) {\n\tconst currentPeriodValues = dataValues.filter(({ pe }) => {\n\t\treturn !!meta.periods.find(({ uid }) => uid === pe);\n\t});\n\tconst values = currentPeriodValues.map(({ value }) => (value ? +value : 0));\n\n\treturn Math.round((sum(values) / values.length) * 100) / 100;\n}\n\nexport function getValues({\n\tvalues,\n\tcurrentPeriod,\n\tpreviousPeriod,\n}: {\n\tvalues: ScorecardAnalyticsData[];\n\tcurrentPeriod: string;\n\tpreviousPeriod?: string;\n}) {\n\tconst currentValueData = values.find(({ pe }) => {\n\t\treturn pe === currentPeriod;\n\t});\n\n\tconst previousValueData = values.find(({ pe }) => {\n\t\treturn pe === previousPeriod;\n\t});\n\n\tconst previousValue = parseFloat(previousValueData?.value ?? \"\");\n\tconst currentValue = parseFloat(currentValueData?.value ?? \"\");\n\n\treturn {\n\t\tprevious: isNaN(previousValue) ? undefined : previousValue,\n\t\tcurrent: isNaN(currentValue) ? undefined : currentValue,\n\t};\n}\n\nexport function getOrgUnitColumnHeaders({\n\tmeta,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst orgUnits = meta.orgUnits ?? [];\n\tconst periods = meta.periods ?? [];\n\treturn orgUnits.map((orgUnit) => {\n\t\treturn columnHelper.group({\n\t\t\tid: orgUnit.uid,\n\t\t\theader: DataHeaderCell,\n\t\t\tmeta: {\n\t\t\t\tlabel: orgUnit.name,\n\t\t\t},\n\t\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\t\tcolumnHelper.accessor(\n\t\t\t\t\t(rowData) => {\n\t\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)?.id;\n\t\t\t\t\t\tconst dataSources = rowData.dataHolder?.dataSources;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\t\torgUnit: orgUnit,\n\t\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\t\tsize: 120,\n\t\t\t\t\t\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t});\n}\n\nexport function getAverageColumn({}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}): ColumnDef<ScorecardTableData, ScorecardTableAverageCellConfig> {\n\treturn columnHelper.group({\n\t\tid: \"average-header\",\n\t\theader: AverageHeaderCell,\n\t\tcolumns: [\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: `average`,\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tcell: AverageCell,\n\t\t\t\t\tenableHiding: true,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tfooter: AverageFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t],\n\t});\n}\n\nfunction getDataHolderColumn({\n\thasOnePeriod,\n\tdataHolder,\n\tperiods,\n\tcalendar,\n\tdataEngine,\n}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}) {\n\tconst { id, dataSources } = dataHolder;\n\n\tconst header =\n\t\tdataSources.length === 1\n\t\t\t? head(dataSources)?.label\n\t\t\t: dataSources.reduce(\n\t\t\t\t\t(acc, { label }, index) =>\n\t\t\t\t\t\tindex === 0 ? `${label}` : `${acc} / ${label}`,\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\n\tif (hasOnePeriod) {\n\t\treturn columnHelper.accessor(\n\t\t\t(rowData) => {\n\t\t\t\tconst currentPeriod = head(periods)!.uid;\n\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t}),\n\t\t\t\t)?.id;\n\n\t\t\t\treturn {\n\t\t\t\t\t...rowData,\n\t\t\t\t\tdataSources,\n\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\tcurrentPeriod,\n\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: header,\n\t\t\t\t},\n\t\t\t\tid: id.toString(),\n\t\t\t\tcell: DataContainer,\n\t\t\t\tsize: 120,\n\t\t\t\tenableSorting: true,\n\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\tfooter: DataFooterCell,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn columnHelper.group({\n\t\tid: id.toString(),\n\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)?.id;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t},\n\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tid: `${id.toString()}-${uid}`,\n\t\t\t\t\tenableSorting: true,\n\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tmeta: {\n\t\t\tlabel: header,\n\t\t},\n\t\theader: DataHeaderCell,\n\t\tenableSorting: true,\n\t\tsortingFn: getSortingFunction(dataEngine),\n\t});\n}\n\nexport function getDataColumnHeaders({\n\tmeta,\n\tconfig,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst dataGroups = config.dataSelection.dataGroups ?? [];\n\tconst hasOneGroup = dataGroups.length === 1;\n\tconst periods = meta.periods ?? [];\n\tconst hasOnePeriod = periods.length === 1;\n\n\tif (hasOneGroup) {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: EmptyDataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t} else {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/columns.ts"],"names":["createColumnHelper","head","sum","DataHeaderCell","getAdjacentFixedPeriods","createFixedPeriodFromPeriodId","DataContainer","DataFooterCell","AverageHeaderCell","AverageCell","AverageFooterCell","legends","id","EmptyDataHeaderCell"],"mappings":"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","file":"columns.js","sourcesContent":["import type { ScorecardMeta } from \"../components\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardCellData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\ttype ColumnDef,\n\tcreateColumnHelper,\n\ttype Row,\n} from \"@tanstack/react-table\";\nimport { head, sum } from \"lodash\";\nimport type { ItemMeta } from \"../hooks/metadata\";\nimport { DataContainer } from \"../components/ScorecardTable/components/DataContainer\";\nimport {\n\tDataHeaderCell,\n\tEmptyDataHeaderCell,\n} from \"../components/ScorecardTable/components/TableHeader/components/DataHeaderCell\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\nimport { AverageCell } from \"../components/ScorecardTable/components/AverageCell\";\nimport { AverageHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/AverageHeaderCell\";\nimport { DataFooterCell } from \"../components/ScorecardTable/components/DataFooterCell\";\nimport { AverageFooterCell } from \"../components/ScorecardTable/components/AverageFooterCell\";\nimport type { ScorecardDataEngine } from \"./dataEngine\";\nimport type { AnalyticsData } from \"./data\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction getValueFromConfig({\n\tconfig,\n\tdata,\n}: {\n\tconfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn (\n\t\t\tconfig.orgUnit.uid === datum.ou &&\n\t\t\tconfig.currentPeriod === datum.pe &&\n\t\t\tdatum.dx === head(config.dataSources)!.id\n\t\t);\n\t});\n\n\treturn {\n\t\t...head(config.dataSources)!,\n\t\tdata: getValues({\n\t\t\tvalues: dataValues,\n\t\t\tcurrentPeriod: config.currentPeriod!,\n\t\t\tpreviousPeriod: config.previousPeriod,\n\t\t}),\n\t};\n}\n\nfunction getSortingFunction(dataEngine: ScorecardDataEngine) {\n\treturn function sortingFunction(\n\t\trowA: Row<ScorecardTableData>,\n\t\trowB: Row<ScorecardTableData>,\n\t\tcolumnId: string,\n\t) {\n\t\tif (!dataEngine.getIsCompleteSnapshot()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellConfig;\n\t\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellConfig;\n\n\t\tconst dataAValue = getValueFromConfig({\n\t\t\tconfig: dataA,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst dataBValue = getValueFromConfig({\n\t\t\tconfig: dataB,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst valueA = dataAValue.data.current ?? 0;\n\t\tconst valueB = dataBValue.data.current ?? 0;\n\n\t\tif (valueA === valueB) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn valueA > valueB ? 1 : -1;\n\t};\n}\n\nexport function getAverageValue({\n\tdataValues,\n\tmeta,\n}: {\n\tdataValues: ScorecardAnalyticsData[];\n\tmeta: ScorecardMeta;\n}) {\n\tconst currentPeriodValues = dataValues.filter(({ pe }) => {\n\t\treturn !!meta.periods.find(({ uid }) => uid === pe);\n\t});\n\tconst values = currentPeriodValues.map(({ value }) => (value ? +value : 0));\n\n\treturn Math.round((sum(values) / values.length) * 100) / 100;\n}\n\nexport function getValues({\n\tvalues,\n\tcurrentPeriod,\n\tpreviousPeriod,\n}: {\n\tvalues: ScorecardAnalyticsData[];\n\tcurrentPeriod: string;\n\tpreviousPeriod?: string;\n}) {\n\tconst currentValueData = values.find(({ pe }) => {\n\t\treturn pe === currentPeriod;\n\t});\n\n\tconst previousValueData = values.find(({ pe }) => {\n\t\treturn pe === previousPeriod;\n\t});\n\n\tconst previousValue = parseFloat(previousValueData?.value ?? \"\");\n\tconst currentValue = parseFloat(currentValueData?.value ?? \"\");\n\n\treturn {\n\t\tprevious: isNaN(previousValue) ? undefined : previousValue,\n\t\tcurrent: isNaN(currentValue) ? undefined : currentValue,\n\t};\n}\n\nexport function getOrgUnitColumnHeaders({\n\tmeta,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst orgUnits = meta.orgUnits ?? [];\n\tconst periods = meta.periods ?? [];\n\treturn orgUnits.map((orgUnit) => {\n\t\treturn columnHelper.group({\n\t\t\tid: orgUnit.uid,\n\t\t\theader: DataHeaderCell,\n\t\t\tmeta: {\n\t\t\t\tlabel: orgUnit.name,\n\t\t\t},\n\t\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\t\tcolumnHelper.accessor(\n\t\t\t\t\t(rowData) => {\n\t\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)?.id;\n\t\t\t\t\t\tconst dataSources = rowData.dataHolder?.dataSources;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\t\torgUnit: orgUnit,\n\t\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\t\tsize: 120,\n\t\t\t\t\t\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t});\n}\n\nexport function getAverageColumn({}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}): ColumnDef<ScorecardTableData, ScorecardTableAverageCellConfig> {\n\treturn columnHelper.group({\n\t\tid: \"average-header\",\n\t\theader: AverageHeaderCell,\n\t\tcolumns: [\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: `average`,\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tcell: AverageCell,\n\t\t\t\t\tenableHiding: true,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tfooter: AverageFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t],\n\t});\n}\n\nfunction getDataHolderColumn({\n\thasOnePeriod,\n\tdataHolder,\n\tperiods,\n\tcalendar,\n\tdataEngine,\n}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}) {\n\tconst { id, dataSources } = dataHolder;\n\n\tconst header =\n\t\tdataSources.length === 1\n\t\t\t? head(dataSources)?.label\n\t\t\t: dataSources.reduce(\n\t\t\t\t\t(acc, { label }, index) =>\n\t\t\t\t\t\tindex === 0 ? `${label}` : `${acc} / ${label}`,\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\n\tconst legends = dataSources.map(\n\t\t({ legends, id, label, specificTargetsSet }) => ({\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tlegends,\n\t\t\tspecificTargetsSet,\n\t\t}),\n\t);\n\n\tif (hasOnePeriod) {\n\t\treturn columnHelper.accessor(\n\t\t\t(rowData) => {\n\t\t\t\tconst currentPeriod = head(periods)!.uid;\n\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t}),\n\t\t\t\t)?.id;\n\n\t\t\t\treturn {\n\t\t\t\t\t...rowData,\n\t\t\t\t\tdataSources,\n\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\tcurrentPeriod,\n\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: header,\n\t\t\t\t\tlegends,\n\t\t\t\t},\n\t\t\t\tid: id.toString(),\n\t\t\t\tcell: DataContainer,\n\t\t\t\tsize: 120,\n\t\t\t\tenableSorting: true,\n\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\tfooter: DataFooterCell,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn columnHelper.group({\n\t\tid: id.toString(),\n\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)?.id;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t},\n\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tid: `${id.toString()}-${uid}`,\n\t\t\t\t\tenableSorting: true,\n\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tmeta: {\n\t\t\tlabel: header,\n\t\t\tlegends,\n\t\t},\n\t\theader: DataHeaderCell,\n\t\tenableSorting: true,\n\t\tsortingFn: getSortingFunction(dataEngine),\n\t});\n}\n\nexport function getDataColumnHeaders({\n\tmeta,\n\tconfig,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst dataGroups = config.dataSelection.dataGroups ?? [];\n\tconst hasOneGroup = dataGroups.length === 1;\n\tconst periods = meta.periods ?? [];\n\tconst hasOnePeriod = periods.length === 1;\n\n\tif (hasOneGroup) {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: EmptyDataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t} else {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t}\n}\n"]}
|
package/dist/utils/dataEngine.js
CHANGED
|
@@ -5,169 +5,214 @@ var lodash = require('lodash');
|
|
|
5
5
|
|
|
6
6
|
const chunkSize = 5;
|
|
7
7
|
function createScorecardDataEngine() {
|
|
8
|
+
const data = /* @__PURE__ */ new Map();
|
|
9
|
+
const mappedData = /* @__PURE__ */ new Map();
|
|
10
|
+
const generalListeners = /* @__PURE__ */ new Set();
|
|
11
|
+
const progressListeners = /* @__PURE__ */ new Set();
|
|
12
|
+
const onCompleteListeners = /* @__PURE__ */ new Set();
|
|
13
|
+
let dataQueryQueue = asyncEs.queue(async () => Promise.resolve([]));
|
|
14
|
+
const keyListeners = /* @__PURE__ */ new Map();
|
|
15
|
+
let totalRequests = 0;
|
|
16
|
+
let completedRequests = 0;
|
|
17
|
+
let isDone = false;
|
|
18
|
+
let initialized = false;
|
|
19
|
+
let dimensions = {
|
|
20
|
+
orgUnits: [],
|
|
21
|
+
periods: [],
|
|
22
|
+
dataItems: []
|
|
23
|
+
};
|
|
24
|
+
function getSnapshot(config) {
|
|
25
|
+
return function() {
|
|
26
|
+
const keys = lodash.flattenDeep(
|
|
27
|
+
config.dx.map(
|
|
28
|
+
(dx) => config.ou.map(
|
|
29
|
+
(ou) => config.pe.map((pe) => `${ou}-${dx}-${pe}`)
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
);
|
|
33
|
+
const dataKey = keys.join("-");
|
|
34
|
+
if (mappedData.get(dataKey)) {
|
|
35
|
+
return mappedData.get(dataKey);
|
|
36
|
+
}
|
|
37
|
+
const datum = lodash.compact(keys.map((key) => data.get(key)));
|
|
38
|
+
if (!lodash.isEmpty(datum)) {
|
|
39
|
+
mappedData.set(dataKey, datum);
|
|
40
|
+
}
|
|
41
|
+
return mappedData.get(dataKey);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function getIsCompleteSnapshot() {
|
|
45
|
+
return isDone;
|
|
46
|
+
}
|
|
47
|
+
function complete() {
|
|
48
|
+
isDone = true;
|
|
49
|
+
for (const listener of onCompleteListeners) {
|
|
50
|
+
listener();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
8
53
|
return {
|
|
9
|
-
queue:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
isDone:
|
|
14
|
-
initialized
|
|
54
|
+
queue: dataQueryQueue,
|
|
55
|
+
getSnapshot,
|
|
56
|
+
getIsCompleteSnapshot,
|
|
57
|
+
data,
|
|
58
|
+
isDone: getIsCompleteSnapshot(),
|
|
59
|
+
initialized,
|
|
15
60
|
dataListeners: [],
|
|
16
|
-
onCompleteListeners
|
|
17
|
-
progressListeners
|
|
18
|
-
dimensions
|
|
19
|
-
orgUnits: [],
|
|
20
|
-
periods: [],
|
|
21
|
-
dataItems: []
|
|
22
|
-
},
|
|
61
|
+
onCompleteListeners,
|
|
62
|
+
progressListeners,
|
|
63
|
+
dimensions,
|
|
23
64
|
updateProgress() {
|
|
24
|
-
const progress =
|
|
65
|
+
const progress = completedRequests / totalRequests;
|
|
25
66
|
for (const listener of this.progressListeners) {
|
|
26
67
|
listener(progress);
|
|
27
68
|
}
|
|
28
69
|
},
|
|
29
70
|
updateTotalRequests(value) {
|
|
30
|
-
|
|
71
|
+
totalRequests = value;
|
|
31
72
|
this.updateProgress();
|
|
32
73
|
},
|
|
33
74
|
updateCompleteRequests(value) {
|
|
34
|
-
|
|
75
|
+
completedRequests = value;
|
|
35
76
|
this.updateProgress();
|
|
36
77
|
},
|
|
37
|
-
addDataListener(listener) {
|
|
38
|
-
|
|
78
|
+
addDataListener(key, listener) {
|
|
79
|
+
keyListeners.get(key)?.add(listener);
|
|
39
80
|
return () => {
|
|
40
|
-
|
|
81
|
+
keyListeners.get(key)?.delete(listener);
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
addGeneralListener(listener) {
|
|
85
|
+
generalListeners.add(listener);
|
|
86
|
+
return () => {
|
|
87
|
+
generalListeners.delete(listener);
|
|
41
88
|
};
|
|
42
89
|
},
|
|
43
90
|
addOnCompleteListener(listener) {
|
|
44
|
-
|
|
91
|
+
onCompleteListeners.add(listener);
|
|
45
92
|
return () => {
|
|
46
|
-
|
|
93
|
+
onCompleteListeners.delete(listener);
|
|
47
94
|
};
|
|
48
95
|
},
|
|
49
96
|
addProgressListener(listener) {
|
|
50
|
-
|
|
97
|
+
progressListeners.add(listener);
|
|
51
98
|
return () => {
|
|
52
|
-
|
|
99
|
+
progressListeners.delete(listener);
|
|
53
100
|
};
|
|
54
101
|
},
|
|
55
|
-
removeListener(listener) {
|
|
56
|
-
return
|
|
102
|
+
removeListener(key, listener) {
|
|
103
|
+
return keyListeners.get(key)?.delete(listener);
|
|
57
104
|
},
|
|
58
|
-
updateData(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
105
|
+
updateData(downloadedData) {
|
|
106
|
+
for (const dataItem of downloadedData) {
|
|
107
|
+
const { ou, dx, pe } = dataItem;
|
|
108
|
+
data.set(`${ou}-${dx}-${pe}`, dataItem);
|
|
62
109
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.isDone = true;
|
|
66
|
-
for (const listener of this.onCompleteListeners) {
|
|
67
|
-
listener(this.isDone);
|
|
110
|
+
for (const listener of generalListeners) {
|
|
111
|
+
listener();
|
|
68
112
|
}
|
|
69
113
|
},
|
|
70
114
|
clear() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
115
|
+
data.clear();
|
|
116
|
+
mappedData.clear();
|
|
117
|
+
isDone = false;
|
|
118
|
+
initialized = false;
|
|
74
119
|
},
|
|
75
120
|
setupDataFetch() {
|
|
76
121
|
const getTheLongestDimension = () => {
|
|
77
|
-
const
|
|
122
|
+
const updatedDimensions = [
|
|
78
123
|
{
|
|
79
124
|
dimension: "pe",
|
|
80
|
-
length:
|
|
125
|
+
length: dimensions.periods.length
|
|
81
126
|
},
|
|
82
127
|
{
|
|
83
128
|
dimension: "dx",
|
|
84
|
-
length:
|
|
129
|
+
length: dimensions.dataItems.length
|
|
85
130
|
},
|
|
86
131
|
{
|
|
87
132
|
dimension: "ou",
|
|
88
|
-
length:
|
|
133
|
+
length: dimensions.orgUnits.length
|
|
89
134
|
}
|
|
90
135
|
];
|
|
91
|
-
return lodash.maxBy(
|
|
136
|
+
return lodash.maxBy(updatedDimensions, "length").dimension;
|
|
92
137
|
};
|
|
93
138
|
const getChunkedData = async (maxItem) => {
|
|
94
139
|
switch (maxItem) {
|
|
95
140
|
case "dx":
|
|
96
141
|
const dataItemChunks = lodash.chunk(
|
|
97
|
-
|
|
142
|
+
dimensions.dataItems,
|
|
98
143
|
chunkSize
|
|
99
144
|
);
|
|
100
145
|
this.updateTotalRequests(dataItemChunks.length);
|
|
101
146
|
for (const dataItemChunk of dataItemChunks) {
|
|
102
|
-
|
|
103
|
-
periods:
|
|
147
|
+
dataQueryQueue.push({
|
|
148
|
+
periods: dimensions.periods,
|
|
104
149
|
dataItems: dataItemChunk,
|
|
105
|
-
orgUnits:
|
|
106
|
-
}).then((
|
|
107
|
-
this.updateData(
|
|
108
|
-
}).then((
|
|
150
|
+
orgUnits: dimensions.orgUnits
|
|
151
|
+
}).then((data2) => {
|
|
152
|
+
this.updateData(data2);
|
|
153
|
+
}).then((data2) => {
|
|
109
154
|
this.updateCompleteRequests(
|
|
110
|
-
|
|
155
|
+
completedRequests + 1
|
|
111
156
|
);
|
|
112
|
-
return
|
|
157
|
+
return data2;
|
|
113
158
|
});
|
|
114
159
|
}
|
|
115
160
|
break;
|
|
116
161
|
case "pe":
|
|
117
162
|
const periodChunks = lodash.chunk(
|
|
118
|
-
|
|
163
|
+
dimensions.periods,
|
|
119
164
|
chunkSize
|
|
120
165
|
);
|
|
121
166
|
this.updateTotalRequests(periodChunks.length);
|
|
122
167
|
for (const periodChunk of periodChunks) {
|
|
123
|
-
|
|
168
|
+
dataQueryQueue.push({
|
|
124
169
|
periods: periodChunk,
|
|
125
|
-
dataItems:
|
|
126
|
-
orgUnits:
|
|
127
|
-
}).then((
|
|
128
|
-
this.updateData(
|
|
129
|
-
}).then((
|
|
170
|
+
dataItems: dimensions.dataItems,
|
|
171
|
+
orgUnits: dimensions.orgUnits
|
|
172
|
+
}).then((data2) => {
|
|
173
|
+
this.updateData(data2);
|
|
174
|
+
}).then((data2) => {
|
|
130
175
|
this.updateCompleteRequests(
|
|
131
|
-
|
|
176
|
+
completedRequests + 1
|
|
132
177
|
);
|
|
133
|
-
return
|
|
178
|
+
return data2;
|
|
134
179
|
});
|
|
135
180
|
}
|
|
136
181
|
break;
|
|
137
182
|
case "ou":
|
|
138
183
|
const orgUnitChunks = lodash.chunk(
|
|
139
|
-
|
|
184
|
+
dimensions.orgUnits,
|
|
140
185
|
chunkSize
|
|
141
186
|
);
|
|
142
187
|
this.updateTotalRequests(orgUnitChunks.length);
|
|
143
188
|
for (const orgUnitChunk of orgUnitChunks) {
|
|
144
|
-
|
|
145
|
-
periods:
|
|
146
|
-
dataItems:
|
|
189
|
+
dataQueryQueue.push({
|
|
190
|
+
periods: dimensions.periods,
|
|
191
|
+
dataItems: dimensions.dataItems,
|
|
147
192
|
orgUnits: orgUnitChunk
|
|
148
|
-
}).then((
|
|
149
|
-
this.updateData(
|
|
150
|
-
}).then((
|
|
193
|
+
}).then((data2) => {
|
|
194
|
+
this.updateData(data2);
|
|
195
|
+
}).then((data2) => {
|
|
151
196
|
this.updateCompleteRequests(
|
|
152
|
-
|
|
197
|
+
completedRequests + 1
|
|
153
198
|
);
|
|
154
|
-
return
|
|
199
|
+
return data2;
|
|
155
200
|
});
|
|
156
201
|
}
|
|
157
202
|
break;
|
|
158
203
|
}
|
|
159
204
|
};
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
const { orgUnits, periods, dataItems } =
|
|
205
|
+
dataQueryQueue.remove(() => true);
|
|
206
|
+
if (dimensions.periods.length < 5 && dimensions.dataItems.length < 5 && dimensions.orgUnits.length < 5) {
|
|
207
|
+
const { orgUnits, periods, dataItems } = dimensions;
|
|
163
208
|
this.updateTotalRequests(1);
|
|
164
209
|
this.updateCompleteRequests(0);
|
|
165
|
-
|
|
210
|
+
dataQueryQueue.push({
|
|
166
211
|
periods,
|
|
167
212
|
orgUnits,
|
|
168
213
|
dataItems
|
|
169
|
-
}).then((
|
|
170
|
-
this.updateData(
|
|
214
|
+
}).then((data2) => {
|
|
215
|
+
this.updateData(data2);
|
|
171
216
|
this.updateCompleteRequests(1);
|
|
172
217
|
});
|
|
173
218
|
return;
|
|
@@ -176,15 +221,15 @@ function createScorecardDataEngine() {
|
|
|
176
221
|
getChunkedData(dimensionWithMaxItems);
|
|
177
222
|
},
|
|
178
223
|
initialize(fetch, {
|
|
179
|
-
dimensions
|
|
224
|
+
dimensions: appliedDimensions
|
|
180
225
|
}) {
|
|
181
|
-
this.dimensions = dimensions;
|
|
182
|
-
this.queue = asyncEs.queue(asyncEs.asyncify(fetch));
|
|
183
|
-
this.queue.drain(() => {
|
|
184
|
-
this.complete();
|
|
185
|
-
});
|
|
186
|
-
this.initialized = true;
|
|
187
226
|
this.clear();
|
|
227
|
+
dimensions = appliedDimensions;
|
|
228
|
+
dataQueryQueue = asyncEs.queue(asyncEs.asyncify(fetch));
|
|
229
|
+
dataQueryQueue.drain(() => {
|
|
230
|
+
complete();
|
|
231
|
+
});
|
|
232
|
+
initialized = true;
|
|
188
233
|
this.setupDataFetch();
|
|
189
234
|
}
|
|
190
235
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/dataEngine.ts"],"names":["queue","maxBy","chunk","asyncify"],"mappings":";;;;;AAUA,MAAM,SAAA,GAAY,CAAA;AAIX,SAAS,yBAAA,GAA4B;AAC3C,EAAA,OAAO;AAAA,IACN,OAAOA,aAAA,CAAM,YAAY,QAAQ,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAK5C,MAAM,EAAC;AAAA,IACP,aAAA,EAAe,CAAA;AAAA,IACf,iBAAA,EAAmB,CAAA;AAAA,IACnB,MAAA,EAAQ,KAAA;AAAA,IACR,WAAA,EAAa,KAAA;AAAA,IACb,eAAe,EAAC;AAAA,IAChB,qBAAqB,EAAC;AAAA,IACtB,mBAAmB,EAAC;AAAA,IACpB,UAAA,EAAY;AAAA,MACX,UAAU,EAAC;AAAA,MACX,SAAS,EAAC;AAAA,MACV,WAAW;AAAC,KACb;AAAA,IACA,cAAA,GAAiB;AAChB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,aAAA;AAC/C,MAAA,KAAA,MAAW,QAAA,IAAY,KAAK,iBAAA,EAAmB;AAC9C,QAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,MAClB;AAAA,IACD,CAAA;AAAA,IACA,oBAAoB,KAAA,EAAe;AAClC,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACrB,CAAA;AAAA,IACA,uBAAuB,KAAA,EAAe;AACrC,MAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AACzB,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACrB,CAAA;AAAA,IACA,gBAAgB,QAAA,EAA8C;AAC7D,MAAA,IAAA,CAAK,aAAA,CAAc,KAAK,QAAQ,CAAA;AAChC,MAAA,OAAO,MAAM;AACZ,QAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,MAChD,CAAA;AAAA,IACD,CAAA;AAAA,IACA,sBACC,QAAA,EACiB;AACjB,MAAA,IAAA,CAAK,mBAAA,CAAoB,KAAK,QAAQ,CAAA;AACtC,MAAA,OAAO,MAAM;AACZ,QAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,MACtD,CAAA;AAAA,IACD,CAAA;AAAA,IACA,oBAAoB,QAAA,EAA6C;AAChE,MAAA,IAAA,CAAK,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AACpC,MAAA,OAAO,MAAM;AACZ,QAAA,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,MACpD,CAAA;AAAA,IACD,CAAA;AAAA,IACA,eAAe,QAAA,EAA8B;AAC5C,MAAA,OAAO,KAAK,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,QAAQ,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,WAAW,IAAA,EAAuB;AACjC,MAAA,IAAA,CAAK,OAAO,CAAC,GAAG,IAAA,CAAK,IAAA,EAAM,GAAG,IAAI,CAAA;AAClC,MAAA,KAAA,MAAW,QAAA,IAAY,KAAK,aAAA,EAAe;AAC1C,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,MACnB;AAAA,IACD,CAAA;AAAA,IACA,QAAA,GAAW;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,KAAA,MAAW,QAAA,IAAY,KAAK,mBAAA,EAAqB;AAChD,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,MACrB;AAAA,IACD,CAAA;AAAA,IACA,KAAA,GAAQ;AACP,MAAA,IAAA,CAAK,OAAO,EAAC;AACb,MAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAAA,IACpB,CAAA;AAAA,IACA,cAAA,GAAiB;AAChB,MAAA,MAAM,yBAAyB,MAAM;AACpC,QAAA,MAAM,UAAA,GAAa;AAAA,UAClB;AAAA,YACC,SAAA,EAAW,IAAA;AAAA,YACX,MAAA,EAAQ,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ;AAAA,WACjC;AAAA,UACA;AAAA,YACC,SAAA,EAAW,IAAA;AAAA,YACX,MAAA,EAAQ,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU;AAAA,WACnC;AAAA,UACA;AAAA,YACC,SAAA,EAAW,IAAA;AAAA,YACX,MAAA,EAAQ,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS;AAAA;AAClC,SACD;AAEA,QAAA,OAAOC,YAAA,CAAM,UAAA,EAAY,QAAQ,CAAA,CAAG,SAAA;AAAA,MACrC,CAAA;AACA,MAAA,MAAM,cAAA,GAAiB,OAAO,OAAA,KAAgC;AAC7D,QAAA,QAAQ,OAAA;AAAS,UAChB,KAAK,IAAA;AACJ,YAAA,MAAM,cAAA,GAAiBC,YAAA;AAAA,cACtB,KAAK,UAAA,CAAW,SAAA;AAAA,cAChB;AAAA,aACD;AACA,YAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,MAAM,CAAA;AAC9C,YAAA,KAAA,MAAW,iBAAiB,cAAA,EAAgB;AAC3C,cAAA,IAAA,CAAK,MACH,IAAA,CAAK;AAAA,gBACL,OAAA,EAAS,KAAK,UAAA,CAAW,OAAA;AAAA,gBACzB,SAAA,EAAW,aAAA;AAAA,gBACX,QAAA,EAAU,KAAK,UAAA,CAAW;AAAA,eAC1B,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,WAAW,IAAuB,CAAA;AAAA,cACxC,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,sBAAA;AAAA,kBACJ,KAAK,iBAAA,GAAoB;AAAA,iBAC1B;AACA,gBAAA,OAAO,IAAA;AAAA,cACR,CAAC,CAAA;AAAA,YACH;AACA,YAAA;AAAA,UACD,KAAK,IAAA;AACJ,YAAA,MAAM,YAAA,GAAeA,YAAA;AAAA,cACpB,KAAK,UAAA,CAAW,OAAA;AAAA,cAChB;AAAA,aACD;AACA,YAAA,IAAA,CAAK,mBAAA,CAAoB,aAAa,MAAM,CAAA;AAC5C,YAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACvC,cAAA,IAAA,CAAK,MACH,IAAA,CAAK;AAAA,gBACL,OAAA,EAAS,WAAA;AAAA,gBACT,SAAA,EAAW,KAAK,UAAA,CAAW,SAAA;AAAA,gBAC3B,QAAA,EAAU,KAAK,UAAA,CAAW;AAAA,eAC1B,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,WAAW,IAAuB,CAAA;AAAA,cACxC,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,sBAAA;AAAA,kBACJ,KAAK,iBAAA,GAAoB;AAAA,iBAC1B;AACA,gBAAA,OAAO,IAAA;AAAA,cACR,CAAC,CAAA;AAAA,YACH;AACA,YAAA;AAAA,UACD,KAAK,IAAA;AACJ,YAAA,MAAM,aAAA,GAAgBA,YAAA;AAAA,cACrB,KAAK,UAAA,CAAW,QAAA;AAAA,cAChB;AAAA,aACD;AACA,YAAA,IAAA,CAAK,mBAAA,CAAoB,cAAc,MAAM,CAAA;AAC7C,YAAA,KAAA,MAAW,gBAAgB,aAAA,EAAe;AACzC,cAAA,IAAA,CAAK,MACH,IAAA,CAAK;AAAA,gBACL,OAAA,EAAS,KAAK,UAAA,CAAW,OAAA;AAAA,gBACzB,SAAA,EAAW,KAAK,UAAA,CAAW,SAAA;AAAA,gBAC3B,QAAA,EAAU;AAAA,eACV,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,WAAW,IAAuB,CAAA;AAAA,cACxC,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,gBAAA,IAAA,CAAK,sBAAA;AAAA,kBACJ,KAAK,iBAAA,GAAoB;AAAA,iBAC1B;AACA,gBAAA,OAAO,IAAA;AAAA,cACR,CAAC,CAAA;AAAA,YACH;AACA,YAAA;AAAA;AACF,MACD,CAAA;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,IAAI,CAAA;AAC5B,MAAA,IACC,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,MAAA,GAAS,KACjC,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,MAAA,GAAS,CAAA,IACnC,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,SAAS,CAAA,EACjC;AACD,QAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,KAAc,IAAA,CAAK,UAAA;AAC9C,QAAA,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1B,QAAA,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAC7B,QAAA,IAAA,CAAK,MACH,IAAA,CAAK;AAAA,UACL,OAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACA,CAAA,CACA,IAAA,CAAK,CAAC,IAAA,KAAS;AACf,UAAA,IAAA,CAAK,WAAW,IAAuB,CAAA;AACvC,UAAA,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAAA,QAC9B,CAAC,CAAA;AACF,QAAA;AAAA,MACD;AACA,MAAA,MAAM,wBAAwB,sBAAA,EAAuB;AACrD,MAAA,cAAA,CAAe,qBAAqB,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,WACC,KAAA,EAKA;AAAA,MACC;AAAA,KACD,EAOC;AACD,MAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,MAAA,IAAA,CAAK,KAAA,GAAQF,aAAA,CAAMG,gBAAA,CAAS,KAAK,CAAC,CAAA;AAClC,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACtB,QAAA,IAAA,CAAK,QAAA,EAAS;AAAA,MACf,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACrB;AAAA,GACD;AACD","file":"dataEngine.js","sourcesContent":["import type { AnalyticsData } from \"./data\";\nimport { asyncify, queue } from \"async-es\";\nimport { chunk, maxBy } from \"lodash\";\nimport type { QueueObject } from \"async\";\n\nexport type RemoveListener = () => void;\nexport type DataEngineListener = (data: AnalyticsData[]) => void;\nexport type OnCompleteDataEngineListener = (completed: boolean) => void;\nexport type ProgressListeners = (progress: number) => void;\n\nconst chunkSize = 5;\n\nexport type ScorecardDataEngine = ReturnType<typeof createScorecardDataEngine>;\n\nexport function createScorecardDataEngine() {\n\treturn {\n\t\tqueue: queue(async () => Promise.resolve([])) as QueueObject<{\n\t\t\tperiods: string[];\n\t\t\torgUnits: string[];\n\t\t\tdataItems: string[];\n\t\t}>,\n\t\tdata: [] as AnalyticsData[],\n\t\ttotalRequests: 0,\n\t\tcompletedRequests: 0,\n\t\tisDone: false,\n\t\tinitialized: false,\n\t\tdataListeners: [] as DataEngineListener[],\n\t\tonCompleteListeners: [] as OnCompleteDataEngineListener[],\n\t\tprogressListeners: [] as ProgressListeners[],\n\t\tdimensions: {\n\t\t\torgUnits: [] as string[],\n\t\t\tperiods: [] as string[],\n\t\t\tdataItems: [] as string[],\n\t\t},\n\t\tupdateProgress() {\n\t\t\tconst progress = this.completedRequests / this.totalRequests;\n\t\t\tfor (const listener of this.progressListeners) {\n\t\t\t\tlistener(progress);\n\t\t\t}\n\t\t},\n\t\tupdateTotalRequests(value: number) {\n\t\t\tthis.totalRequests = value;\n\t\t\tthis.updateProgress();\n\t\t},\n\t\tupdateCompleteRequests(value: number) {\n\t\t\tthis.completedRequests = value;\n\t\t\tthis.updateProgress();\n\t\t},\n\t\taddDataListener(listener: DataEngineListener): RemoveListener {\n\t\t\tthis.dataListeners.push(listener);\n\t\t\treturn () => {\n\t\t\t\tthis.dataListeners.filter((l) => l !== listener);\n\t\t\t};\n\t\t},\n\t\taddOnCompleteListener(\n\t\t\tlistener: OnCompleteDataEngineListener,\n\t\t): RemoveListener {\n\t\t\tthis.onCompleteListeners.push(listener);\n\t\t\treturn () => {\n\t\t\t\tthis.onCompleteListeners.filter((l) => l !== listener);\n\t\t\t};\n\t\t},\n\t\taddProgressListener(listener: ProgressListeners): RemoveListener {\n\t\t\tthis.progressListeners.push(listener);\n\t\t\treturn () => {\n\t\t\t\tthis.progressListeners.filter((l) => l !== listener);\n\t\t\t};\n\t\t},\n\t\tremoveListener(listener: DataEngineListener) {\n\t\t\treturn this.dataListeners.filter((l) => l !== listener);\n\t\t},\n\t\tupdateData(data: AnalyticsData[]) {\n\t\t\tthis.data = [...this.data, ...data];\n\t\t\tfor (const listener of this.dataListeners) {\n\t\t\t\tlistener(this.data);\n\t\t\t}\n\t\t},\n\t\tcomplete() {\n\t\t\tthis.isDone = true;\n\t\t\tfor (const listener of this.onCompleteListeners) {\n\t\t\t\tlistener(this.isDone);\n\t\t\t}\n\t\t},\n\t\tclear() {\n\t\t\tthis.data = [];\n\t\t\tthis.isDone = false;\n\t\t\tthis.initialized = false;\n\t\t},\n\t\tsetupDataFetch() {\n\t\t\tconst getTheLongestDimension = () => {\n\t\t\t\tconst dimensions = [\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"pe\",\n\t\t\t\t\t\tlength: this.dimensions.periods.length,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"dx\",\n\t\t\t\t\t\tlength: this.dimensions.dataItems.length,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"ou\",\n\t\t\t\t\t\tlength: this.dimensions.orgUnits.length,\n\t\t\t\t\t},\n\t\t\t\t] as const;\n\n\t\t\t\treturn maxBy(dimensions, \"length\")!.dimension;\n\t\t\t};\n\t\t\tconst getChunkedData = async (maxItem: \"dx\" | \"pe\" | \"ou\") => {\n\t\t\t\tswitch (maxItem) {\n\t\t\t\t\tcase \"dx\":\n\t\t\t\t\t\tconst dataItemChunks = chunk(\n\t\t\t\t\t\t\tthis.dimensions.dataItems,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(dataItemChunks.length);\n\t\t\t\t\t\tfor (const dataItemChunk of dataItemChunks) {\n\t\t\t\t\t\t\tthis.queue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: this.dimensions.periods,\n\t\t\t\t\t\t\t\t\tdataItems: dataItemChunk,\n\t\t\t\t\t\t\t\t\torgUnits: this.dimensions.orgUnits,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tthis.completedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pe\":\n\t\t\t\t\t\tconst periodChunks = chunk(\n\t\t\t\t\t\t\tthis.dimensions.periods,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(periodChunks.length);\n\t\t\t\t\t\tfor (const periodChunk of periodChunks) {\n\t\t\t\t\t\t\tthis.queue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: periodChunk,\n\t\t\t\t\t\t\t\t\tdataItems: this.dimensions.dataItems,\n\t\t\t\t\t\t\t\t\torgUnits: this.dimensions.orgUnits,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tthis.completedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ou\":\n\t\t\t\t\t\tconst orgUnitChunks = chunk(\n\t\t\t\t\t\t\tthis.dimensions.orgUnits,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(orgUnitChunks.length);\n\t\t\t\t\t\tfor (const orgUnitChunk of orgUnitChunks) {\n\t\t\t\t\t\t\tthis.queue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: this.dimensions.periods,\n\t\t\t\t\t\t\t\t\tdataItems: this.dimensions.dataItems,\n\t\t\t\t\t\t\t\t\torgUnits: orgUnitChunk,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tthis.completedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.queue.remove(() => true);\n\t\t\tif (\n\t\t\t\tthis.dimensions.periods.length < 5 &&\n\t\t\t\tthis.dimensions.dataItems.length < 5 &&\n\t\t\t\tthis.dimensions.orgUnits.length < 5\n\t\t\t) {\n\t\t\t\tconst { orgUnits, periods, dataItems } = this.dimensions;\n\t\t\t\tthis.updateTotalRequests(1);\n\t\t\t\tthis.updateCompleteRequests(0);\n\t\t\t\tthis.queue\n\t\t\t\t\t.push({\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\torgUnits,\n\t\t\t\t\t\tdataItems,\n\t\t\t\t\t})\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\tthis.updateCompleteRequests(1);\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst dimensionWithMaxItems = getTheLongestDimension();\n\t\t\tgetChunkedData(dimensionWithMaxItems);\n\t\t},\n\t\tinitialize(\n\t\t\tfetch: (dimensions: {\n\t\t\t\tperiods: string[];\n\t\t\t\torgUnits: string[];\n\t\t\t\tdataItems: string[];\n\t\t\t}) => Promise<AnalyticsData[]>,\n\t\t\t{\n\t\t\t\tdimensions,\n\t\t\t}: {\n\t\t\t\tdimensions: {\n\t\t\t\t\tdataItems: string[];\n\t\t\t\t\torgUnits: string[];\n\t\t\t\t\tperiods: string[];\n\t\t\t\t};\n\t\t\t},\n\t\t) {\n\t\t\tthis.dimensions = dimensions;\n\t\t\tthis.queue = queue(asyncify(fetch));\n\t\t\tthis.queue.drain(() => {\n\t\t\t\tthis.complete();\n\t\t\t});\n\t\t\tthis.initialized = true;\n\t\t\tthis.clear();\n\t\t\tthis.setupDataFetch();\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/dataEngine.ts"],"names":["queue","flattenDeep","compact","isEmpty","maxBy","chunk","data","asyncify"],"mappings":"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","file":"dataEngine.js","sourcesContent":["import type { AnalyticsData } from \"./data\";\nimport { asyncify, queue } from \"async-es\";\nimport { chunk, compact, flattenDeep, isEmpty, map, maxBy, uniq } from \"lodash\";\nimport type { QueueObject } from \"async\";\n\nexport type RemoveListener = () => void;\nexport type DataEngineListener = () => void;\nexport type OnCompleteDataEngineListener = () => void;\nexport type ProgressListeners = (progress: number) => void;\n\nconst chunkSize = 5;\n\nexport type ScorecardDataEngine = ReturnType<typeof createScorecardDataEngine>;\n\nexport function createScorecardDataEngine() {\n\tconst data = new Map<string, AnalyticsData>();\n\tconst mappedData = new Map<string, AnalyticsData[]>();\n\tconst generalListeners = new Set<DataEngineListener>();\n\tconst progressListeners = new Set<ProgressListeners>();\n\tconst onCompleteListeners = new Set<OnCompleteDataEngineListener>();\n\tlet dataQueryQueue = queue(async () => Promise.resolve([])) as QueueObject<{\n\t\tperiods: string[];\n\t\torgUnits: string[];\n\t\tdataItems: string[];\n\t}>;\n\tconst keyListeners = new Map<string, Set<DataEngineListener>>();\n\n\tlet totalRequests = 0;\n\tlet completedRequests = 0;\n\tlet isDone = false;\n\tlet initialized = false;\n\tlet dimensions: {\n\t\torgUnits: string[];\n\t\tperiods: string[];\n\t\tdataItems: string[];\n\t} = {\n\t\torgUnits: [] as string[],\n\t\tperiods: [] as string[],\n\t\tdataItems: [] as string[],\n\t};\n\n\tfunction getSnapshot(config: { dx: string[]; pe: string[]; ou: string[] }) {\n\t\treturn function () {\n\t\t\tconst keys = flattenDeep(\n\t\t\t\tconfig.dx.map((dx) =>\n\t\t\t\t\tconfig.ou.map((ou) =>\n\t\t\t\t\t\tconfig.pe.map((pe) => `${ou}-${dx}-${pe}`),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst dataKey = keys.join(\"-\");\n\t\t\tif (mappedData.get(dataKey)) {\n\t\t\t\treturn mappedData.get(dataKey);\n\t\t\t}\n\t\t\tconst datum = compact(keys.map((key) => data.get(key)));\n\t\t\tif (!isEmpty(datum)) {\n\t\t\t\tmappedData.set(dataKey, datum);\n\t\t\t}\n\t\t\treturn mappedData.get(dataKey);\n\t\t};\n\t}\n\n\tfunction getIsCompleteSnapshot() {\n\t\treturn isDone;\n\t}\n\n\tfunction complete() {\n\t\tisDone = true;\n\t\tfor (const listener of onCompleteListeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\treturn {\n\t\tqueue: dataQueryQueue,\n\t\tgetSnapshot,\n\t\tgetIsCompleteSnapshot,\n\t\tdata,\n\t\tisDone: getIsCompleteSnapshot(),\n\t\tinitialized,\n\t\tdataListeners: [] as DataEngineListener[],\n\t\tonCompleteListeners,\n\t\tprogressListeners,\n\t\tdimensions,\n\t\tupdateProgress() {\n\t\t\tconst progress = completedRequests / totalRequests;\n\t\t\tfor (const listener of this.progressListeners) {\n\t\t\t\tlistener(progress);\n\t\t\t}\n\t\t},\n\t\tupdateTotalRequests(value: number) {\n\t\t\ttotalRequests = value;\n\t\t\tthis.updateProgress();\n\t\t},\n\t\tupdateCompleteRequests(value: number) {\n\t\t\tcompletedRequests = value;\n\t\t\tthis.updateProgress();\n\t\t},\n\t\taddDataListener(\n\t\t\tkey: string,\n\t\t\tlistener: DataEngineListener,\n\t\t): RemoveListener {\n\t\t\tkeyListeners.get(key)?.add(listener);\n\t\t\treturn () => {\n\t\t\t\tkeyListeners.get(key)?.delete(listener);\n\t\t\t};\n\t\t},\n\t\taddGeneralListener(listener: DataEngineListener): RemoveListener {\n\t\t\tgeneralListeners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tgeneralListeners.delete(listener);\n\t\t\t};\n\t\t},\n\t\taddOnCompleteListener(\n\t\t\tlistener: OnCompleteDataEngineListener,\n\t\t): RemoveListener {\n\t\t\tonCompleteListeners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tonCompleteListeners.delete(listener);\n\t\t\t};\n\t\t},\n\t\taddProgressListener(listener: ProgressListeners): RemoveListener {\n\t\t\tprogressListeners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tprogressListeners.delete(listener);\n\t\t\t};\n\t\t},\n\t\tremoveListener(key: string, listener: DataEngineListener) {\n\t\t\treturn keyListeners.get(key)?.delete(listener);\n\t\t},\n\t\tupdateData(downloadedData: AnalyticsData[]) {\n\t\t\tfor (const dataItem of downloadedData) {\n\t\t\t\tconst { ou, dx, pe } = dataItem;\n\t\t\t\tdata.set(`${ou}-${dx}-${pe}`, dataItem);\n\t\t\t}\n\t\t\tfor (const listener of generalListeners) {\n\t\t\t\tlistener();\n\t\t\t}\n\t\t},\n\t\tclear() {\n\t\t\tdata.clear();\n\t\t\tmappedData.clear();\n\t\t\tisDone = false;\n\t\t\tinitialized = false;\n\t\t},\n\t\tsetupDataFetch() {\n\t\t\tconst getTheLongestDimension = () => {\n\t\t\t\tconst updatedDimensions = [\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"pe\",\n\t\t\t\t\t\tlength: dimensions.periods.length,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"dx\",\n\t\t\t\t\t\tlength: dimensions.dataItems.length,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdimension: \"ou\",\n\t\t\t\t\t\tlength: dimensions.orgUnits.length,\n\t\t\t\t\t},\n\t\t\t\t] as const;\n\n\t\t\t\treturn maxBy(updatedDimensions, \"length\")!.dimension;\n\t\t\t};\n\t\t\tconst getChunkedData = async (maxItem: \"dx\" | \"pe\" | \"ou\") => {\n\t\t\t\tswitch (maxItem) {\n\t\t\t\t\tcase \"dx\":\n\t\t\t\t\t\tconst dataItemChunks = chunk(\n\t\t\t\t\t\t\tdimensions.dataItems,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(dataItemChunks.length);\n\t\t\t\t\t\tfor (const dataItemChunk of dataItemChunks) {\n\t\t\t\t\t\t\tdataQueryQueue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: dimensions.periods,\n\t\t\t\t\t\t\t\t\tdataItems: dataItemChunk,\n\t\t\t\t\t\t\t\t\torgUnits: dimensions.orgUnits,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tcompletedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pe\":\n\t\t\t\t\t\tconst periodChunks = chunk(\n\t\t\t\t\t\t\tdimensions.periods,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(periodChunks.length);\n\t\t\t\t\t\tfor (const periodChunk of periodChunks) {\n\t\t\t\t\t\t\tdataQueryQueue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: periodChunk,\n\t\t\t\t\t\t\t\t\tdataItems: dimensions.dataItems,\n\t\t\t\t\t\t\t\t\torgUnits: dimensions.orgUnits,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tcompletedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ou\":\n\t\t\t\t\t\tconst orgUnitChunks = chunk(\n\t\t\t\t\t\t\tdimensions.orgUnits,\n\t\t\t\t\t\t\tchunkSize,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.updateTotalRequests(orgUnitChunks.length);\n\t\t\t\t\t\tfor (const orgUnitChunk of orgUnitChunks) {\n\t\t\t\t\t\t\tdataQueryQueue\n\t\t\t\t\t\t\t\t.push({\n\t\t\t\t\t\t\t\t\tperiods: dimensions.periods,\n\t\t\t\t\t\t\t\t\tdataItems: dimensions.dataItems,\n\t\t\t\t\t\t\t\t\torgUnits: orgUnitChunk,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\t\t\t\tthis.updateCompleteRequests(\n\t\t\t\t\t\t\t\t\t\tcompletedRequests + 1,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t\tdataQueryQueue.remove(() => true);\n\t\t\tif (\n\t\t\t\tdimensions.periods.length < 5 &&\n\t\t\t\tdimensions.dataItems.length < 5 &&\n\t\t\t\tdimensions.orgUnits.length < 5\n\t\t\t) {\n\t\t\t\tconst { orgUnits, periods, dataItems } = dimensions;\n\t\t\t\tthis.updateTotalRequests(1);\n\t\t\t\tthis.updateCompleteRequests(0);\n\t\t\t\tdataQueryQueue\n\t\t\t\t\t.push({\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\torgUnits,\n\t\t\t\t\t\tdataItems,\n\t\t\t\t\t})\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tthis.updateData(data as AnalyticsData[]);\n\t\t\t\t\t\tthis.updateCompleteRequests(1);\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst dimensionWithMaxItems = getTheLongestDimension();\n\t\t\tgetChunkedData(dimensionWithMaxItems);\n\t\t},\n\t\tinitialize(\n\t\t\tfetch: (dimensions: {\n\t\t\t\tperiods: string[];\n\t\t\t\torgUnits: string[];\n\t\t\t\tdataItems: string[];\n\t\t\t}) => Promise<AnalyticsData[]>,\n\t\t\t{\n\t\t\t\tdimensions: appliedDimensions,\n\t\t\t}: {\n\t\t\t\tdimensions: {\n\t\t\t\t\tdataItems: string[];\n\t\t\t\t\torgUnits: string[];\n\t\t\t\t\tperiods: string[];\n\t\t\t\t};\n\t\t\t},\n\t\t) {\n\t\t\tthis.clear();\n\t\t\tdimensions = appliedDimensions;\n\t\t\tdataQueryQueue = queue(asyncify(fetch));\n\t\t\tdataQueryQueue.drain(() => {\n\t\t\t\tcomplete();\n\t\t\t});\n\t\t\tinitialized = true;\n\t\t\tthis.setupDataFetch();\n\t\t},\n\t};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hisptz/dhis2-scorecard",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.33",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"tsup": "^8.3.0",
|
|
44
44
|
"typescript": "^5.3.3",
|
|
45
45
|
"usehooks-ts": "^2.9.2",
|
|
46
|
-
"@repo/
|
|
47
|
-
"@repo/
|
|
46
|
+
"@repo/eslint-config": "0.0.0",
|
|
47
|
+
"@repo/typescript-config": "0.0.2"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@tanstack/react-table": "^8.21.3",
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"react-jsx-parser": "^2.2.0",
|
|
58
58
|
"react-to-print": "^3.0.1",
|
|
59
59
|
"xlsx": "^0.18.5",
|
|
60
|
-
"@hisptz/dhis2-
|
|
60
|
+
"@hisptz/dhis2-analytics": "2.1.33",
|
|
61
61
|
"@hisptz/dhis2-utils": "2.0.19",
|
|
62
|
-
"@hisptz/dhis2-
|
|
62
|
+
"@hisptz/dhis2-ui": "2.0.51"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
65
|
"@dhis2/app-runtime": "^3",
|