@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.
Files changed (110) hide show
  1. package/dist/components/LoadingIndicator.js +3 -5
  2. package/dist/components/LoadingIndicator.js.map +1 -1
  3. package/dist/components/ScorecardLegendsView/components/LegendView.js +86 -56
  4. package/dist/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
  5. package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -31
  6. package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
  7. package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -26
  8. package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
  9. package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -22
  10. package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
  11. package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js +6 -13
  12. package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
  13. package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
  14. package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
  15. package/dist/components/ScorecardTable/components/AverageCell.js +2 -2
  16. package/dist/components/ScorecardTable/components/AverageCell.js.map +1 -1
  17. package/dist/components/ScorecardTable/components/AverageFooterCell.js +10 -32
  18. package/dist/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
  19. package/dist/components/ScorecardTable/components/DataContainer.js +4 -1
  20. package/dist/components/ScorecardTable/components/DataContainer.js.map +1 -1
  21. package/dist/components/ScorecardTable/components/DataFooterCell.js +35 -71
  22. package/dist/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
  23. package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
  24. package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
  25. package/dist/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
  26. package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +37 -2
  27. package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  28. package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +78 -0
  29. package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
  30. package/dist/esm/components/LoadingIndicator.js +2 -4
  31. package/dist/esm/components/LoadingIndicator.js.map +1 -1
  32. package/dist/esm/components/ScorecardLegendsView/components/LegendView.js +86 -52
  33. package/dist/esm/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
  34. package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -27
  35. package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
  36. package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -22
  37. package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
  38. package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -18
  39. package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
  40. package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js +4 -11
  41. package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
  42. package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
  43. package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
  44. package/dist/esm/components/ScorecardTable/components/AverageCell.js +2 -2
  45. package/dist/esm/components/ScorecardTable/components/AverageCell.js.map +1 -1
  46. package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js +11 -33
  47. package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
  48. package/dist/esm/components/ScorecardTable/components/DataContainer.js +4 -1
  49. package/dist/esm/components/ScorecardTable/components/DataContainer.js.map +1 -1
  50. package/dist/esm/components/ScorecardTable/components/DataFooterCell.js +36 -72
  51. package/dist/esm/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
  52. package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
  53. package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
  54. package/dist/esm/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
  55. package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +39 -4
  56. package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  57. package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +72 -0
  58. package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
  59. package/dist/esm/hooks/completed.js +13 -0
  60. package/dist/esm/hooks/completed.js.map +1 -0
  61. package/dist/esm/hooks/table.js +35 -45
  62. package/dist/esm/hooks/table.js.map +1 -1
  63. package/dist/esm/hooks/value.js +51 -101
  64. package/dist/esm/hooks/value.js.map +1 -1
  65. package/dist/esm/schemas/config.js +4 -0
  66. package/dist/esm/schemas/config.js.map +1 -1
  67. package/dist/esm/utils/columns.js +15 -5
  68. package/dist/esm/utils/columns.js.map +1 -1
  69. package/dist/esm/utils/dataEngine.js +128 -83
  70. package/dist/esm/utils/dataEngine.js.map +1 -1
  71. package/dist/hooks/completed.js +15 -0
  72. package/dist/hooks/completed.js.map +1 -0
  73. package/dist/hooks/table.js +43 -53
  74. package/dist/hooks/table.js.map +1 -1
  75. package/dist/hooks/value.js +49 -98
  76. package/dist/hooks/value.js.map +1 -1
  77. package/dist/schemas/config.js +4 -0
  78. package/dist/schemas/config.js.map +1 -1
  79. package/dist/types/components/LoadingIndicator.d.ts.map +1 -1
  80. package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts +1 -1
  81. package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts.map +1 -1
  82. package/dist/types/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.d.ts.map +1 -1
  83. package/dist/types/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.d.ts.map +1 -1
  84. package/dist/types/components/ScorecardLegendsView/components/PeriodSpecificTargetView.d.ts.map +1 -1
  85. package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts.map +1 -1
  86. package/dist/types/components/ScorecardTable/FurtherAnalysisVisualization.d.ts.map +1 -1
  87. package/dist/types/components/ScorecardTable/components/AverageFooterCell.d.ts.map +1 -1
  88. package/dist/types/components/ScorecardTable/components/DataContainer.d.ts.map +1 -1
  89. package/dist/types/components/ScorecardTable/components/DataFooterCell.d.ts.map +1 -1
  90. package/dist/types/components/ScorecardTable/components/FurtherAnalysisMenu.d.ts.map +1 -1
  91. package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts +10 -0
  92. package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts.map +1 -1
  93. package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts.map +1 -1
  94. package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts +13 -0
  95. package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts.map +1 -0
  96. package/dist/types/hooks/completed.d.ts +2 -0
  97. package/dist/types/hooks/completed.d.ts.map +1 -0
  98. package/dist/types/hooks/table.d.ts.map +1 -1
  99. package/dist/types/hooks/value.d.ts +9 -3
  100. package/dist/types/hooks/value.d.ts.map +1 -1
  101. package/dist/types/schemas/config.d.ts +18 -0
  102. package/dist/types/schemas/config.d.ts.map +1 -1
  103. package/dist/types/utils/columns.d.ts.map +1 -1
  104. package/dist/types/utils/dataEngine.d.ts +16 -12
  105. package/dist/types/utils/dataEngine.d.ts.map +1 -1
  106. package/dist/utils/columns.js +15 -5
  107. package/dist/utils/columns.js.map +1 -1
  108. package/dist/utils/dataEngine.js +127 -82
  109. package/dist/utils/dataEngine.js.map +1 -1
  110. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
- import { useState, useEffect } from 'react';
2
- import { useScorecardData } from '../components/DataProvider';
1
+ import { useCallback, useSyncExternalStore, useMemo } from 'react';
2
+ import { useScorecardData, useScorecardMeta } from '../components';
3
3
  import { getValues } from '../utils/columns';
4
- import { every, isEqual, meanBy } from 'lodash';
4
+ import { compact, flatten, meanBy } from 'lodash';
5
5
 
6
6
  function getDataValues({
7
7
  data,
@@ -33,47 +33,27 @@ function getDataValues({
33
33
  };
34
34
  });
35
35
  }
36
- function useCellValue(dataConfig) {
36
+ function useDataValue(config) {
37
37
  const { data: scorecardEngine } = useScorecardData();
38
- const [loading, setLoading] = useState(false);
39
- const [cellData, setCellData] = useState([]);
40
- useEffect(() => {
41
- return scorecardEngine.addOnCompleteListener((completed) => {
42
- if (completed) {
43
- setLoading(false);
44
- }
45
- });
46
- }, []);
47
- useEffect(() => {
48
- setLoading(true);
49
- const listener = (data) => {
50
- const values = getDataValues({ data, dataConfig });
51
- const hasValues = every(values, (value) => !!value.data);
52
- setCellData((prevState) => {
53
- if (isEqual(prevState, values)) {
54
- return prevState;
55
- } else {
56
- return values;
57
- }
58
- });
59
- if (hasValues) {
60
- scorecardEngine.removeListener(listener);
61
- setLoading(false);
62
- }
63
- };
64
- if (scorecardEngine.isDone) {
65
- const values = getDataValues({
66
- data: scorecardEngine.data,
67
- dataConfig
68
- });
69
- setCellData(values);
70
- setLoading(false);
71
- } else {
72
- return scorecardEngine.addDataListener(listener);
73
- }
74
- }, [dataConfig]);
38
+ const getSnapshot = useCallback(scorecardEngine.getSnapshot(config), [
39
+ config
40
+ ]);
41
+ return useSyncExternalStore(
42
+ (listener) => scorecardEngine.addGeneralListener(listener),
43
+ getSnapshot
44
+ );
45
+ }
46
+ function useCellValue(dataConfig) {
47
+ const analyticsData = useDataValue({
48
+ dx: dataConfig.dataSources.map((source) => source.id),
49
+ pe: compact([dataConfig.currentPeriod, dataConfig.previousPeriod]),
50
+ ou: [dataConfig.orgUnit.uid]
51
+ });
52
+ const cellData = useMemo(() => {
53
+ return analyticsData ? getDataValues({ dataConfig, data: analyticsData }) : void 0;
54
+ }, [analyticsData]);
75
55
  return {
76
- loading,
56
+ loading: false,
77
57
  cellData
78
58
  };
79
59
  }
@@ -98,36 +78,22 @@ function getDataHolderAverageValues({
98
78
  }) ?? [];
99
79
  }
100
80
  function useDataHolderAverageCellValue(dataConfig) {
101
- const { data: scorecardEngine } = useScorecardData();
102
- const [loading, setLoading] = useState(false);
103
- const [cellData, setCellData] = useState([]);
104
- useEffect(() => {
105
- setLoading(true);
106
- const listener = (completed) => {
107
- if (completed) {
108
- setLoading(false);
109
- setCellData(
110
- getDataHolderAverageValues({
111
- data: scorecardEngine.data,
112
- dataConfig
113
- })
114
- );
115
- }
116
- };
117
- if (scorecardEngine.isDone) {
118
- setLoading(false);
119
- setCellData(
120
- getDataHolderAverageValues({
121
- data: scorecardEngine.data,
122
- dataConfig
123
- })
124
- );
125
- } else {
126
- return scorecardEngine.addOnCompleteListener(listener);
127
- }
128
- }, [dataConfig]);
81
+ const { periods, orgUnits } = useScorecardMeta();
82
+ const analyticsData = useDataValue({
83
+ dx: flatten(
84
+ dataConfig.dataHolder?.dataSources.map((source) => source.id)
85
+ ) ?? [],
86
+ ou: orgUnits.map(({ uid }) => uid),
87
+ pe: periods.map(({ uid }) => uid)
88
+ });
89
+ const cellData = useMemo(() => {
90
+ return analyticsData ? getDataHolderAverageValues({
91
+ data: analyticsData,
92
+ dataConfig
93
+ }) : void 0;
94
+ }, [analyticsData]);
129
95
  return {
130
- loading,
96
+ loading: false,
131
97
  cellData
132
98
  };
133
99
  }
@@ -141,40 +107,24 @@ function getOrgUnitAverageValues({
141
107
  return meanBy(dataValues, (value) => parseFloat(value.value));
142
108
  }
143
109
  function useOrgUnitAverageCellValue(dataConfig) {
144
- const { data: scorecardEngine } = useScorecardData();
145
- const [loading, setLoading] = useState(false);
146
- const [average, setAverage] = useState(null);
147
- useEffect(() => {
148
- setLoading(true);
149
- const listener = (completed) => {
150
- if (completed) {
151
- setLoading(false);
152
- setAverage(
153
- getOrgUnitAverageValues({
154
- data: scorecardEngine.data,
155
- dataConfig
156
- })
157
- );
158
- }
159
- };
160
- if (scorecardEngine.isDone) {
161
- setLoading(false);
162
- setAverage(
163
- getOrgUnitAverageValues({
164
- data: scorecardEngine.data,
165
- dataConfig
166
- })
167
- );
168
- } else {
169
- return scorecardEngine.addOnCompleteListener(listener);
170
- }
171
- }, [dataConfig]);
110
+ const { periods, dataItems } = useScorecardMeta();
111
+ const analyticsData = useDataValue({
112
+ dx: dataItems.map((item) => item.uid),
113
+ ou: compact([dataConfig.orgUnit?.uid]),
114
+ pe: periods.map(({ uid }) => uid)
115
+ });
116
+ const average = useMemo(() => {
117
+ return analyticsData ? getOrgUnitAverageValues({
118
+ data: analyticsData,
119
+ dataConfig
120
+ }) : void 0;
121
+ }, [analyticsData]);
172
122
  return {
173
- loading,
123
+ loading: false,
174
124
  average
175
125
  };
176
126
  }
177
127
 
178
- export { useCellValue, useDataHolderAverageCellValue, useOrgUnitAverageCellValue };
128
+ export { useCellValue, useDataHolderAverageCellValue, useDataValue, useOrgUnitAverageCellValue };
179
129
  //# sourceMappingURL=value.js.map
180
130
  //# sourceMappingURL=value.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/value.ts"],"names":["data"],"mappings":"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","file":"value.js","sourcesContent":["import { useEffect, useState } from \"react\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardCellData,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n} from \"../schemas/config\";\nimport { useScorecardData } from \"../components/DataProvider\";\nimport type {\n\tDataEngineListener,\n\tOnCompleteDataEngineListener,\n} from \"../utils/dataEngine\";\nimport type { AnalyticsData } from \"../utils/data\";\nimport { getValues } from \"../utils/columns\";\nimport { every, isEqual, meanBy } from \"lodash\";\n\nfunction getDataValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData[] {\n\treturn dataConfig.dataSources.map((dataSource) => {\n\t\tconst filteredData = data.filter((data) => {\n\t\t\treturn (\n\t\t\t\tdata.dx === dataSource.id &&\n\t\t\t\tdata.ou === dataConfig.orgUnit.uid &&\n\t\t\t\t[dataConfig.currentPeriod, dataConfig.previousPeriod].includes(\n\t\t\t\t\tdata.pe,\n\t\t\t\t)\n\t\t\t);\n\t\t});\n\n\t\tconst value = getValues({\n\t\t\tcurrentPeriod: dataConfig.currentPeriod!,\n\t\t\tpreviousPeriod: dataConfig.previousPeriod,\n\t\t\tvalues: filteredData,\n\t\t});\n\n\t\tif (!value.current) {\n\t\t\treturn {\n\t\t\t\t...dataSource,\n\t\t\t\tdata: {\n\t\t\t\t\tcurrent: undefined,\n\t\t\t\t\tprevious: undefined,\n\t\t\t\t},\n\t\t\t} as ScorecardCellData;\n\t\t}\n\n\t\treturn {\n\t\t\t...dataSource,\n\t\t\tdata: value,\n\t\t} as ScorecardCellData;\n\t});\n}\n\nexport function useCellValue(dataConfig: ScorecardTableCellConfig) {\n\tconst { data: scorecardEngine } = useScorecardData();\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [cellData, setCellData] = useState<ScorecardCellData[]>([]);\n\n\tuseEffect(() => {\n\t\treturn scorecardEngine.addOnCompleteListener((completed) => {\n\t\t\tif (completed) {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\tconst listener: DataEngineListener = (data) => {\n\t\t\tconst values = getDataValues({ data, dataConfig });\n\t\t\tconst hasValues = every(values, (value) => !!value.data);\n\t\t\tsetCellData((prevState) => {\n\t\t\t\tif (isEqual(prevState, values)) {\n\t\t\t\t\treturn prevState;\n\t\t\t\t} else {\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (hasValues) {\n\t\t\t\tscorecardEngine.removeListener(listener);\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t};\n\t\tif (scorecardEngine.isDone) {\n\t\t\tconst values = getDataValues({\n\t\t\t\tdata: scorecardEngine.data,\n\t\t\t\tdataConfig,\n\t\t\t});\n\n\t\t\tsetCellData(values);\n\t\t\tsetLoading(false);\n\t\t} else {\n\t\t\treturn scorecardEngine.addDataListener(listener);\n\t\t}\n\t}, [dataConfig]);\n\n\treturn {\n\t\tloading,\n\t\tcellData,\n\t};\n}\n\nfunction getDataHolderAverageValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableAverageCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardAverageCellData[] {\n\treturn (\n\t\tdataConfig.dataHolder?.dataSources.map((source) => {\n\t\t\tconst dataValues = data.filter((datum) => {\n\t\t\t\treturn datum.dx === source.id;\n\t\t\t});\n\t\t\tconst average = meanBy(dataValues, (value) =>\n\t\t\t\tparseFloat(value.value!),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tdata: {\n\t\t\t\t\taverage,\n\t\t\t\t},\n\t\t\t};\n\t\t}) ?? []\n\t);\n}\n\nexport function useDataHolderAverageCellValue(\n\tdataConfig: ScorecardTableAverageCellConfig,\n) {\n\tconst { data: scorecardEngine } = useScorecardData();\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [cellData, setCellData] = useState<ScorecardAverageCellData[]>([]);\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\tconst listener: OnCompleteDataEngineListener = (completed) => {\n\t\t\tif (completed) {\n\t\t\t\tsetLoading(false);\n\t\t\t\tsetCellData(\n\t\t\t\t\tgetDataHolderAverageValues({\n\t\t\t\t\t\tdata: scorecardEngine.data,\n\t\t\t\t\t\tdataConfig,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tif (scorecardEngine.isDone) {\n\t\t\tsetLoading(false);\n\t\t\tsetCellData(\n\t\t\t\tgetDataHolderAverageValues({\n\t\t\t\t\tdata: scorecardEngine.data,\n\t\t\t\t\tdataConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\treturn scorecardEngine.addOnCompleteListener(listener);\n\t\t}\n\t}, [dataConfig]);\n\n\treturn {\n\t\tloading,\n\t\tcellData,\n\t};\n}\n\nfunction getOrgUnitAverageValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableAverageCellConfig;\n\tdata: AnalyticsData[];\n}): number {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn datum.ou === dataConfig.orgUnit?.uid;\n\t});\n\n\treturn meanBy(dataValues, (value) => parseFloat(value.value!));\n}\n\nexport function useOrgUnitAverageCellValue(\n\tdataConfig: ScorecardTableAverageCellConfig,\n) {\n\tconst { data: scorecardEngine } = useScorecardData();\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [average, setAverage] = useState<number | null>(null);\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\tconst listener: OnCompleteDataEngineListener = (completed) => {\n\t\t\tif (completed) {\n\t\t\t\tsetLoading(false);\n\t\t\t\tsetAverage(\n\t\t\t\t\tgetOrgUnitAverageValues({\n\t\t\t\t\t\tdata: scorecardEngine.data,\n\t\t\t\t\t\tdataConfig,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t}\n\t\t};\n\t\tif (scorecardEngine.isDone) {\n\t\t\tsetLoading(false);\n\t\t\tsetAverage(\n\t\t\t\tgetOrgUnitAverageValues({\n\t\t\t\t\tdata: scorecardEngine.data,\n\t\t\t\t\tdataConfig,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\treturn scorecardEngine.addOnCompleteListener(listener);\n\t\t}\n\t}, [dataConfig]);\n\n\treturn {\n\t\tloading,\n\t\taverage,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../src/hooks/value.ts"],"names":["data"],"mappings":"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","file":"value.js","sourcesContent":["import { useCallback, useMemo, useSyncExternalStore } from \"react\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardCellData,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n} from \"../schemas/config\";\nimport { useScorecardData, useScorecardMeta } from \"../components\";\n\nimport type { AnalyticsData } from \"../utils/data\";\nimport { getValues } from \"../utils/columns\";\nimport { compact, flatten, meanBy } from \"lodash\";\n\nfunction getDataValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData[] {\n\treturn dataConfig.dataSources.map((dataSource) => {\n\t\tconst filteredData = data.filter((data) => {\n\t\t\treturn (\n\t\t\t\tdata.dx === dataSource.id &&\n\t\t\t\tdata.ou === dataConfig.orgUnit.uid &&\n\t\t\t\t[dataConfig.currentPeriod, dataConfig.previousPeriod].includes(\n\t\t\t\t\tdata.pe,\n\t\t\t\t)\n\t\t\t);\n\t\t});\n\n\t\tconst value = getValues({\n\t\t\tcurrentPeriod: dataConfig.currentPeriod!,\n\t\t\tpreviousPeriod: dataConfig.previousPeriod,\n\t\t\tvalues: filteredData,\n\t\t});\n\n\t\tif (!value.current) {\n\t\t\treturn {\n\t\t\t\t...dataSource,\n\t\t\t\tdata: {\n\t\t\t\t\tcurrent: undefined,\n\t\t\t\t\tprevious: undefined,\n\t\t\t\t},\n\t\t\t} as ScorecardCellData;\n\t\t}\n\n\t\treturn {\n\t\t\t...dataSource,\n\t\t\tdata: value,\n\t\t} as ScorecardCellData;\n\t});\n}\n\nexport function useDataValue(config: {\n\tdx: string[];\n\tpe: string[];\n\tou: string[];\n}) {\n\tconst { data: scorecardEngine } = useScorecardData();\n\tconst getSnapshot = useCallback(scorecardEngine.getSnapshot(config), [\n\t\tconfig,\n\t]);\n\treturn useSyncExternalStore(\n\t\t(listener) => scorecardEngine.addGeneralListener(listener),\n\t\tgetSnapshot,\n\t);\n}\n\nexport function useCellValue(dataConfig: ScorecardTableCellConfig) {\n\tconst analyticsData = useDataValue({\n\t\tdx: dataConfig.dataSources.map((source) => source.id),\n\t\tpe: compact([dataConfig.currentPeriod!, dataConfig.previousPeriod]),\n\t\tou: [dataConfig.orgUnit.uid],\n\t});\n\n\tconst cellData = useMemo(() => {\n\t\treturn analyticsData\n\t\t\t? getDataValues({ dataConfig, data: analyticsData })\n\t\t\t: undefined;\n\t}, [analyticsData]);\n\n\treturn {\n\t\tloading: false,\n\t\tcellData,\n\t};\n}\n\nfunction getDataHolderAverageValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableAverageCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardAverageCellData[] {\n\treturn (\n\t\tdataConfig.dataHolder?.dataSources.map((source) => {\n\t\t\tconst dataValues = data.filter((datum) => {\n\t\t\t\treturn datum.dx === source.id;\n\t\t\t});\n\t\t\tconst average = meanBy(dataValues, (value) =>\n\t\t\t\tparseFloat(value.value!),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tdata: {\n\t\t\t\t\taverage,\n\t\t\t\t},\n\t\t\t};\n\t\t}) ?? []\n\t);\n}\n\nexport function useDataHolderAverageCellValue(\n\tdataConfig: ScorecardTableAverageCellConfig,\n) {\n\tconst { periods, orgUnits } = useScorecardMeta()!;\n\tconst analyticsData = useDataValue({\n\t\tdx:\n\t\t\tflatten(\n\t\t\t\tdataConfig.dataHolder?.dataSources.map((source) => source.id),\n\t\t\t) ?? [],\n\t\tou: orgUnits.map(({ uid }) => uid),\n\t\tpe: periods.map(({ uid }) => uid),\n\t});\n\tconst cellData = useMemo(() => {\n\t\treturn analyticsData\n\t\t\t? getDataHolderAverageValues({\n\t\t\t\t\tdata: analyticsData,\n\t\t\t\t\tdataConfig,\n\t\t\t\t})\n\t\t\t: undefined;\n\t}, [analyticsData]);\n\n\treturn {\n\t\tloading: false,\n\t\tcellData,\n\t};\n}\n\nfunction getOrgUnitAverageValues({\n\tdata,\n\tdataConfig,\n}: {\n\tdataConfig: ScorecardTableAverageCellConfig;\n\tdata: AnalyticsData[];\n}): number {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn datum.ou === dataConfig.orgUnit?.uid;\n\t});\n\treturn meanBy(dataValues, (value) => parseFloat(value.value!));\n}\n\nexport function useOrgUnitAverageCellValue(\n\tdataConfig: ScorecardTableAverageCellConfig,\n) {\n\tconst { periods, dataItems } = useScorecardMeta()!;\n\n\tconst analyticsData = useDataValue({\n\t\tdx: dataItems.map((item) => item.uid),\n\t\tou: compact([dataConfig.orgUnit?.uid]),\n\t\tpe: periods.map(({ uid }) => uid),\n\t});\n\tconst average = useMemo(() => {\n\t\treturn analyticsData\n\t\t\t? getOrgUnitAverageValues({\n\t\t\t\t\tdata: analyticsData,\n\t\t\t\t\tdataConfig,\n\t\t\t\t})\n\t\t\t: undefined;\n\t}, [analyticsData]);\n\n\treturn {\n\t\tloading: false,\n\t\taverage,\n\t};\n}\n"]}
@@ -171,6 +171,10 @@ const scorecardTableAverageCellConfig = z.object({
171
171
  uid: z.string(),
172
172
  name: z.string(),
173
173
  hierarchy: z.string()
174
+ }).optional(),
175
+ period: z.object({
176
+ uid: z.string(),
177
+ name: z.string()
174
178
  }).optional()
175
179
  });
176
180
  const scorecardCellDataSchema = dataSourceSchema.extend({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schemas/config.ts"],"names":["ScorecardTableOrientation","ScorecardTableDimension","ScorecardDraggableItems"],"mappings":";;AAGO,MAAM,oBAAA,GAAuB,EAAE,IAAA,CAAK;AAAA,EAC1C,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACD,CAAC;AAEM,MAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAU,EAAE,OAAA,EAAQ;AAAA,EACpB,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAO,CAAA,CAAE,MAAA;AAAA,IACR,EAAE,MAAA,EAAO;AAAA,IACT,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,EAAG,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,EAAG;AAAA,GAChD;AAAA,EACA,YAAY,CAAA,CAAE,MAAA;AAAA,IACb,EAAE,MAAA,EAAO;AAAA,IACT,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,EAAG,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,EAAG;AAAA;AAEjD,CAAC;AAMM,MAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC9C,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACxB,CAAC;AAIM,MAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EAClD,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,kBAAA,EAAoB,EAClB,IAAA,CAAK,CAAC,OAAO,eAAA,EAAiB,eAAe,CAAC,CAAA,CAC9C,QAAA,EAAS;AAAA,EACX,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,qBAAA,EAAuB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5C,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,KAAA,EAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,cAAA,EAAgB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACrC,gBAAA,EAAkB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACvC,iBAAA,EAAmB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACxC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,sBAAA,EAAwB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACrC,CAAC;AAIM,MAAM,+BAAA,GAAkC,EAAE,MAAA,CAAO;AAAA,EACvD,WAAA,EAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,WAAA,EAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,UAAU,CAAA,CAAE,KAAA;AAAA,IACX,EAAE,MAAA,CAAO;AAAA,MACR,EAAA,EAAI,EAAE,MAAA;AAAO,KACb;AAAA,GACF;AAAA,EACA,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC7B,CAAC;AAIM,MAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC7C,SAAS,CAAA,CAAE,KAAA;AAAA,IACV,EAAE,MAAA,CAAO;AAAA,MACR,EAAA,EAAI,EAAE,MAAA;AAAO,KACb;AAAA,GACF;AAAA,EACA,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAClB,CAAC;AAIM,MAAM,YAAA,GAAe,EAAE,MAAA,CAAO;AAAA,EACpC,kBAAA,EAAoB,EAAE,MAAA,EAAO;AAAA,EAC7B,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC5C,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAC;AAC3C,CAAC;AAIM,MAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAAA,EACnC,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EACzB,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,YAAY;AAC9B,CAAC;AAIM,MAAM,2BAA2B,CAAA,CAAE,MAAA;AAAA,EACzC,EAAE,MAAA,EAAO;AAAA,EACT,CAAA,CAAE,MAAM,YAAY;AACrB;AAIO,MAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACxC,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,IAAA,EAAM,oBAAA;AAAA,EACN,aAAA,EAAe,EAAE,OAAA,EAAQ;AAAA,EACzB,UAAA,EAAY,EAAE,OAAA,EAAQ;AAAA,EACtB,YAAA,EAAc,EAAE,MAAA,EAAO;AAAA,EACvB,UAAA,EAAY,EAAE,OAAA,EAAQ;AAAA,EACtB,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAAS,EAAE,KAAA,CAAM,CAAC,EAAE,KAAA,CAAM,YAAY,CAAA,EAAG,wBAAwB,CAAC,CAAA;AAAA,EAClE,eAAA,EAAiB,CAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA,EACxD,kBAAA,EAAoB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACzC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC;AAIM,MAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACxC,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACpC,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,gBAAgB;AACtC,CAAC;AAIM,MAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACvC,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACpC,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACrC,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,EAClB,KAAA,EAAO,EAAE,MAAA;AACV,CAAC;AAID,MAAM,aAAA,GAAgB,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,EAAG,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAE9D,MAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACvC,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,iBAAA,EAAmB,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EACjD,OAAA,EAAS,0BAAA;AAAA,EACT,gBAAA,EAAkB,+BAAA;AAAA,EAClB,eAAA,EAAiB,qBAAA;AAAA,EACjB,aAAA,EAAe,EAAE,MAAA,CAAO;AAAA,IACvB,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,eAAe;AAAA,GACnC,CAAA;AAAA,EACD,qBAAA,EAAuB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EAC/C,kBAAkB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC/C,OAAA,EAAS,iBAAiB,QAAA,EAAS;AAAA;AAAA,EAEnC,IAAA,EAAM,EACJ,MAAA,CAAO;AAAA,IACP,EAAA,EAAI,EAAE,MAAA;AAAO,GACb,EACA,QAAA,EAAS;AAAA,EACX,YAAA,EAAc,CAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,EAC9C,iBAAA,EAAmB,CAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,EACnD,YAAA,EAAc,EACZ,MAAA,CAAO;AAAA,IACP,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,IACjB,EAAA,EAAI,EAAE,MAAA;AAAO,GACb,EACA,QAAA;AACH,CAAC;AAI4B,EAAE,MAAA,CAAO;AAAA,EACrC,gBAAA,EAAkB,+BAAA;AAAA,EAClB,eAAA,EAAiB,qBAAA;AAAA,EACjB,OAAA,EAAS,0BAAA;AAAA,EACT,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,YAAA,EAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC3B,CAAC;AAIM,MAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC9C,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC;AAIM,MAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,UAAA,EAAY,iBAAiB,QAAA,EAAS;AAAA,EACtC,OAAA,EAAS,EACP,MAAA,CAAO;AAAA,IACP,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,IACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,SAAA,EAAW,EAAE,MAAA;AAAO,GACpB,EACA,QAAA,EAAS;AAAA,EACX,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACrB,CAAC;AAIM,MAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAChD,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACrC,OAAA,EAAS,EAAE,MAAA,CAAO;AAAA,IACjB,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,IACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,SAAA,EAAW,EAAE,MAAA;AAAO,GACpB,CAAA;AAAA,EACD,cAAA,EAAgB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC3B,CAAC;AAGM,MAAM,+BAAA,GAAkC,EAAE,MAAA,CAAO;AAAA,EACvD,UAAA,EAAY,iBAAiB,QAAA,EAAS;AAAA,EACtC,OAAA,EAAS,EACP,MAAA,CAAO;AAAA,IACP,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,IACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,SAAA,EAAW,EAAE,MAAA;AAAO,GACpB,EACA,QAAA;AACH,CAAC;AAKM,MAAM,uBAAA,GAA0B,iBAAiB,MAAA,CAAO;AAAA,EAC9D,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,IACd,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC9B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC7B;AACF,CAAC;AAGM,MAAM,8BAAA,GAAiC,iBAAiB,MAAA,CAAO;AAAA,EACrE,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,IACd,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC7B;AACF,CAAC;AAOM,IAAK,yBAAA,qBAAAA,0BAAAA,KAAL;AACN,EAAAA,2BAAA,kBAAA,CAAA,GAAmB,gBAAA;AACnB,EAAAA,2BAAA,kBAAA,CAAA,GAAmB,gBAAA;AAFR,EAAA,OAAAA,0BAAAA;AAAA,CAAA,EAAA,yBAAA,IAAA,EAAA;AAKL,IAAK,uBAAA,qBAAAC,wBAAAA,KAAL;AACN,EAAAA,yBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,yBAAA,WAAA,CAAA,GAAY,UAAA;AACZ,EAAAA,yBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,yBAAA,MAAA,CAAA,GAAO,MAAA;AAJI,EAAA,OAAAA,wBAAAA;AAAA,CAAA,EAAA,uBAAA,IAAA,EAAA;AAOL,IAAK,uBAAA,qBAAAC,wBAAAA,KAAL;AACN,EAAAA,yBAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,yBAAA,MAAA,CAAA,GAAO,MAAA;AAFI,EAAA,OAAAA,wBAAAA;AAAA,CAAA,EAAA,uBAAA,IAAA,EAAA","file":"config.js","sourcesContent":["import { z } from \"zod\";\nimport type { RowData } from \"@tanstack/react-table\";\n\nexport const supportedDataSources = z.enum([\n\t\"indicator\",\n\t\"programIndicator\",\n\t\"dataSet\",\n\t\"dataElement\",\n\t\"customFunction\",\n\t\"sqlView\",\n]);\n\nexport const scorecardSharing = z.object({\n\towner: z.string(),\n\texternal: z.boolean(),\n\tpublic: z.string(),\n\tusers: z.record(\n\t\tz.string(),\n\t\tz.object({ access: z.string(), id: z.string() }),\n\t),\n\tuserGroups: z.record(\n\t\tz.string(),\n\t\tz.object({ access: z.string(), id: z.string() }),\n\t),\n});\n\nexport type ScorecardSharing = z.infer<typeof scorecardSharing>;\n\nexport type SupportedDataSources = z.infer<typeof supportedDataSources>;\n\nexport const legendDefinitionSchema = z.object({\n\tid: z.string(),\n\tcolor: z.string(),\n\tname: z.string(),\n\tisDefault: z.boolean().optional(),\n});\n\nexport type LegendDefinition = z.infer<typeof legendDefinitionSchema>;\n\nexport const scorecardViewOptionsSchema = z.object({\n\taverageColumn: z.boolean().optional(),\n\taverageDisplayType: z\n\t\t.enum([\"ALL\", \"ABOVE_AVERAGE\", \"BELOW_AVERAGE\"])\n\t\t.optional(),\n\taverageRow: z.boolean().optional(),\n\temptyRows: z.boolean().optional(),\n\thighlightedIndicators: z.boolean().optional(),\n\titemNumber: z.boolean().optional(),\n\tlegend: z.boolean().optional(),\n\tshowHierarchy: z.boolean().optional(),\n\ttitle: z.boolean().optional(),\n\tarrows: z.boolean().optional(),\n\tshowDataInRows: z.boolean().optional(),\n\tdisableExpanding: z.boolean().optional(),\n\tdisablePagination: z.boolean().optional(),\n\tprintMode: z.boolean().optional(),\n\tdisableFurtherAnalysis: z.boolean().optional(),\n});\n\nexport type ScorecardViewOptions = z.infer<typeof scorecardViewOptionsSchema>;\n\nexport const organisationUnitSelectionSchema = z.object({\n\tuserOrgUnit: z.boolean().optional(),\n\tuserSubUnit: z.boolean().optional(),\n\tuserSubX2Unit: z.boolean().optional(),\n\torgUnits: z.array(\n\t\tz.object({\n\t\t\tid: z.string(),\n\t\t}),\n\t),\n\tgroups: z.array(z.string()).optional(),\n\tlevels: z.array(z.string()).optional(),\n});\n\nexport type OrgUnitSelection = z.infer<typeof organisationUnitSelectionSchema>;\n\nexport const periodSelectionSchema = z.object({\n\tperiods: z.array(\n\t\tz.object({\n\t\t\tid: z.string(),\n\t\t}),\n\t),\n\ttype: z.string().optional(),\n});\n\nexport type PeriodSelection = z.infer<typeof periodSelectionSchema>;\n\nexport const legendSchema = z.object({\n\tlegendDefinitionId: z.string(),\n\tid: z.string(),\n\tstartValue: z.union([z.string(), z.number()]),\n\tendValue: z.union([z.string(), z.number()]),\n});\n\nexport type ScorecardLegend = z.infer<typeof legendSchema>;\n\nexport const specificTargetSchema = z.object({\n\ttype: z.enum([\"periods\", \"orgUnit\"]),\n\titems: z.array(z.string()),\n\tlegends: z.array(legendSchema),\n});\n\nexport type SpecificTarget = z.infer<typeof specificTargetSchema>;\n\nexport const orgUnitLevelLegendSchema = z.record(\n\tz.string(),\n\tz.array(legendSchema),\n);\n\nexport type OrgUnitLevelLegend = z.infer<typeof orgUnitLevelLegendSchema>;\n\nexport const dataSourceSchema = z.object({\n\tid: z.string(),\n\tname: z.string(),\n\tlabel: z.string().optional(),\n\ttype: supportedDataSources,\n\tdisplayArrows: z.boolean(),\n\thighIsGood: z.boolean(),\n\teffectiveGap: z.number(),\n\tshowColors: z.boolean(),\n\tweight: z.number(),\n\tlegends: z.union([z.array(legendSchema), orgUnitLevelLegendSchema]),\n\tspecificTargets: z.array(specificTargetSchema).optional(),\n\tspecificTargetsSet: z.boolean().optional(),\n\tdescription: z.string().optional(),\n});\n\nexport type ScorecardDataSource = z.infer<typeof dataSourceSchema>;\n\nexport const dataHolderSchema = z.object({\n\tid: z.union([z.number(), z.string()]),\n\tdataSources: z.array(dataSourceSchema),\n});\n\nexport type ScorecardDataHolder = z.infer<typeof dataHolderSchema>;\n\nexport const dataGroupSchema = z.object({\n\tid: z.union([z.number(), z.string()]),\n\tdataHolders: z.array(dataHolderSchema),\n\tstyle: z.object({}),\n\ttitle: z.string(),\n});\n\nexport type ScorecardDataGroup = z.infer<typeof dataGroupSchema>;\n\nconst sharingObject = z.object({ access: z.string(), id: z.string() });\n\nexport const scorecardConfig = z.object({\n\tid: z.string(),\n\ttitle: z.string(),\n\tsubtitle: z.string().optional(),\n\tcustomHeader: z.string().optional(),\n\tdescription: z.string().optional(),\n\tlegendDefinitions: z.array(legendDefinitionSchema),\n\toptions: scorecardViewOptionsSchema,\n\torgUnitSelection: organisationUnitSelectionSchema,\n\tperiodSelection: periodSelectionSchema,\n\tdataSelection: z.object({\n\t\tdataGroups: z.array(dataGroupSchema),\n\t}),\n\thighlightedIndicators: z.array(dataSourceSchema),\n\tadditionalLabels: z.array(z.string()).optional(),\n\tsharing: scorecardSharing.optional(),\n\t//These are placed as optional and they will be removed in future versions\n\tuser: z\n\t\t.object({\n\t\t\tid: z.string(),\n\t\t})\n\t\t.optional(),\n\tuserAccesses: z.array(sharingObject).optional(),\n\tuserGroupAccesses: z.array(sharingObject).optional(),\n\tpublicAccess: z\n\t\t.object({\n\t\t\taccess: z.string(),\n\t\t\tid: z.string(),\n\t\t})\n\t\t.optional(),\n});\n\nexport type ScorecardConfig = z.infer<typeof scorecardConfig>;\n\nconst scorecardStateSchema = z.object({\n\torgUnitSelection: organisationUnitSelectionSchema,\n\tperiodSelection: periodSelectionSchema,\n\toptions: scorecardViewOptionsSchema,\n\tnested: z.boolean().optional(),\n\thasOnePeriod: z.boolean().optional(),\n});\n\nexport type ScorecardState = z.infer<typeof scorecardStateSchema>;\n\nexport const scorecardAnalyticsData = z.object({\n\tdx: z.string().optional(),\n\tpe: z.string().optional(),\n\tou: z.string().optional(),\n\tvalue: z.string().optional(),\n});\n\nexport type ScorecardAnalyticsData = z.infer<typeof scorecardAnalyticsData>;\n\nexport const scorecardTableData = z.object({\n\tlabel: z.string(),\n\tdataHolder: dataHolderSchema.optional(),\n\torgUnit: z\n\t\t.object({\n\t\t\tuid: z.string(),\n\t\t\tname: z.string(),\n\t\t\thierarchy: z.string(),\n\t\t})\n\t\t.optional(),\n\texpand: z.boolean().optional(),\n});\n\nexport type ScorecardTableData = z.infer<typeof scorecardTableData> & RowData;\n\nexport const scorecardTableCellConfig = z.object({\n\tdataSources: z.array(dataSourceSchema),\n\torgUnit: z.object({\n\t\tuid: z.string(),\n\t\tname: z.string(),\n\t\thierarchy: z.string(),\n\t}),\n\tpreviousPeriod: z.string().optional(),\n\tcurrentPeriod: z.string().optional(),\n});\nexport type ScorecardTableCellConfig = z.infer<typeof scorecardTableCellConfig>;\n\nexport const scorecardTableAverageCellConfig = z.object({\n\tdataHolder: dataHolderSchema.optional(),\n\torgUnit: z\n\t\t.object({\n\t\t\tuid: z.string(),\n\t\t\tname: z.string(),\n\t\t\thierarchy: z.string(),\n\t\t})\n\t\t.optional(),\n});\nexport type ScorecardTableAverageCellConfig = z.infer<\n\ttypeof scorecardTableAverageCellConfig\n>;\n\nexport const scorecardCellDataSchema = dataSourceSchema.extend({\n\tdata: z.object({\n\t\tprevious: z.number().optional(),\n\t\tcurrent: z.number().optional(),\n\t}),\n});\nexport type ScorecardCellData = z.infer<typeof scorecardCellDataSchema>;\n\nexport const scorecardAverageCellDataSchema = dataSourceSchema.extend({\n\tdata: z.object({\n\t\taverage: z.number().optional(),\n\t}),\n});\nexport type ScorecardAverageCellData = z.infer<\n\ttypeof scorecardAverageCellDataSchema\n>;\n\nexport type SanitizedScorecardTableData = z.infer<typeof scorecardTableData>;\n\nexport enum ScorecardTableOrientation {\n\tORG_UNIT_VS_DATA = \"orgUnitsVsData\",\n\tDATA_VS_ORG_UNIT = \"dataVsOrgUnits\",\n}\n\nexport enum ScorecardTableDimension {\n\tGROUP = \"group\",\n\tORG_UNITS = \"orgUnits\",\n\tPERIODS = \"periods\",\n\tDATA = \"data\",\n}\n\nexport enum ScorecardDraggableItems {\n\tou = \"ou\",\n\tdata = \"data\",\n}\n"]}
1
+ {"version":3,"sources":["../../../src/schemas/config.ts"],"names":["ScorecardTableOrientation","ScorecardTableDimension","ScorecardDraggableItems"],"mappings":"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","file":"config.js","sourcesContent":["import { z } from \"zod\";\nimport type { RowData } from \"@tanstack/react-table\";\n\nexport const supportedDataSources = z.enum([\n\t\"indicator\",\n\t\"programIndicator\",\n\t\"dataSet\",\n\t\"dataElement\",\n\t\"customFunction\",\n\t\"sqlView\",\n]);\n\nexport const scorecardSharing = z.object({\n\towner: z.string(),\n\texternal: z.boolean(),\n\tpublic: z.string(),\n\tusers: z.record(\n\t\tz.string(),\n\t\tz.object({ access: z.string(), id: z.string() }),\n\t),\n\tuserGroups: z.record(\n\t\tz.string(),\n\t\tz.object({ access: z.string(), id: z.string() }),\n\t),\n});\n\nexport type ScorecardSharing = z.infer<typeof scorecardSharing>;\n\nexport type SupportedDataSources = z.infer<typeof supportedDataSources>;\n\nexport const legendDefinitionSchema = z.object({\n\tid: z.string(),\n\tcolor: z.string(),\n\tname: z.string(),\n\tisDefault: z.boolean().optional(),\n});\n\nexport type LegendDefinition = z.infer<typeof legendDefinitionSchema>;\n\nexport const scorecardViewOptionsSchema = z.object({\n\taverageColumn: z.boolean().optional(),\n\taverageDisplayType: z\n\t\t.enum([\"ALL\", \"ABOVE_AVERAGE\", \"BELOW_AVERAGE\"])\n\t\t.optional(),\n\taverageRow: z.boolean().optional(),\n\temptyRows: z.boolean().optional(),\n\thighlightedIndicators: z.boolean().optional(),\n\titemNumber: z.boolean().optional(),\n\tlegend: z.boolean().optional(),\n\tshowHierarchy: z.boolean().optional(),\n\ttitle: z.boolean().optional(),\n\tarrows: z.boolean().optional(),\n\tshowDataInRows: z.boolean().optional(),\n\tdisableExpanding: z.boolean().optional(),\n\tdisablePagination: z.boolean().optional(),\n\tprintMode: z.boolean().optional(),\n\tdisableFurtherAnalysis: z.boolean().optional(),\n});\n\nexport type ScorecardViewOptions = z.infer<typeof scorecardViewOptionsSchema>;\n\nexport const organisationUnitSelectionSchema = z.object({\n\tuserOrgUnit: z.boolean().optional(),\n\tuserSubUnit: z.boolean().optional(),\n\tuserSubX2Unit: z.boolean().optional(),\n\torgUnits: z.array(\n\t\tz.object({\n\t\t\tid: z.string(),\n\t\t}),\n\t),\n\tgroups: z.array(z.string()).optional(),\n\tlevels: z.array(z.string()).optional(),\n});\n\nexport type OrgUnitSelection = z.infer<typeof organisationUnitSelectionSchema>;\n\nexport const periodSelectionSchema = z.object({\n\tperiods: z.array(\n\t\tz.object({\n\t\t\tid: z.string(),\n\t\t}),\n\t),\n\ttype: z.string().optional(),\n});\n\nexport type PeriodSelection = z.infer<typeof periodSelectionSchema>;\n\nexport const legendSchema = z.object({\n\tlegendDefinitionId: z.string(),\n\tid: z.string(),\n\tstartValue: z.union([z.string(), z.number()]),\n\tendValue: z.union([z.string(), z.number()]),\n});\n\nexport type ScorecardLegend = z.infer<typeof legendSchema>;\n\nexport const specificTargetSchema = z.object({\n\ttype: z.enum([\"periods\", \"orgUnit\"]),\n\titems: z.array(z.string()),\n\tlegends: z.array(legendSchema),\n});\n\nexport type SpecificTarget = z.infer<typeof specificTargetSchema>;\n\nexport const orgUnitLevelLegendSchema = z.record(\n\tz.string(),\n\tz.array(legendSchema),\n);\n\nexport type OrgUnitLevelLegend = z.infer<typeof orgUnitLevelLegendSchema>;\n\nexport const dataSourceSchema = z.object({\n\tid: z.string(),\n\tname: z.string(),\n\tlabel: z.string().optional(),\n\ttype: supportedDataSources,\n\tdisplayArrows: z.boolean(),\n\thighIsGood: z.boolean(),\n\teffectiveGap: z.number(),\n\tshowColors: z.boolean(),\n\tweight: z.number(),\n\tlegends: z.union([z.array(legendSchema), orgUnitLevelLegendSchema]),\n\tspecificTargets: z.array(specificTargetSchema).optional(),\n\tspecificTargetsSet: z.boolean().optional(),\n\tdescription: z.string().optional(),\n});\n\nexport type ScorecardDataSource = z.infer<typeof dataSourceSchema>;\n\nexport const dataHolderSchema = z.object({\n\tid: z.union([z.number(), z.string()]),\n\tdataSources: z.array(dataSourceSchema),\n});\n\nexport type ScorecardDataHolder = z.infer<typeof dataHolderSchema>;\n\nexport const dataGroupSchema = z.object({\n\tid: z.union([z.number(), z.string()]),\n\tdataHolders: z.array(dataHolderSchema),\n\tstyle: z.object({}),\n\ttitle: z.string(),\n});\n\nexport type ScorecardDataGroup = z.infer<typeof dataGroupSchema>;\n\nconst sharingObject = z.object({ access: z.string(), id: z.string() });\n\nexport const scorecardConfig = z.object({\n\tid: z.string(),\n\ttitle: z.string(),\n\tsubtitle: z.string().optional(),\n\tcustomHeader: z.string().optional(),\n\tdescription: z.string().optional(),\n\tlegendDefinitions: z.array(legendDefinitionSchema),\n\toptions: scorecardViewOptionsSchema,\n\torgUnitSelection: organisationUnitSelectionSchema,\n\tperiodSelection: periodSelectionSchema,\n\tdataSelection: z.object({\n\t\tdataGroups: z.array(dataGroupSchema),\n\t}),\n\thighlightedIndicators: z.array(dataSourceSchema),\n\tadditionalLabels: z.array(z.string()).optional(),\n\tsharing: scorecardSharing.optional(),\n\t//These are placed as optional and they will be removed in future versions\n\tuser: z\n\t\t.object({\n\t\t\tid: z.string(),\n\t\t})\n\t\t.optional(),\n\tuserAccesses: z.array(sharingObject).optional(),\n\tuserGroupAccesses: z.array(sharingObject).optional(),\n\tpublicAccess: z\n\t\t.object({\n\t\t\taccess: z.string(),\n\t\t\tid: z.string(),\n\t\t})\n\t\t.optional(),\n});\n\nexport type ScorecardConfig = z.infer<typeof scorecardConfig>;\n\nconst scorecardStateSchema = z.object({\n\torgUnitSelection: organisationUnitSelectionSchema,\n\tperiodSelection: periodSelectionSchema,\n\toptions: scorecardViewOptionsSchema,\n\tnested: z.boolean().optional(),\n\thasOnePeriod: z.boolean().optional(),\n});\n\nexport type ScorecardState = z.infer<typeof scorecardStateSchema>;\n\nexport const scorecardAnalyticsData = z.object({\n\tdx: z.string().optional(),\n\tpe: z.string().optional(),\n\tou: z.string().optional(),\n\tvalue: z.string().optional(),\n});\n\nexport type ScorecardAnalyticsData = z.infer<typeof scorecardAnalyticsData>;\n\nexport const scorecardTableData = z.object({\n\tlabel: z.string(),\n\tdataHolder: dataHolderSchema.optional(),\n\torgUnit: z\n\t\t.object({\n\t\t\tuid: z.string(),\n\t\t\tname: z.string(),\n\t\t\thierarchy: z.string(),\n\t\t})\n\t\t.optional(),\n\texpand: z.boolean().optional(),\n});\n\nexport type ScorecardTableData = z.infer<typeof scorecardTableData> & RowData;\n\nexport const scorecardTableCellConfig = z.object({\n\tdataSources: z.array(dataSourceSchema),\n\torgUnit: z.object({\n\t\tuid: z.string(),\n\t\tname: z.string(),\n\t\thierarchy: z.string(),\n\t}),\n\tpreviousPeriod: z.string().optional(),\n\tcurrentPeriod: z.string().optional(),\n});\nexport type ScorecardTableCellConfig = z.infer<typeof scorecardTableCellConfig>;\n\nexport const scorecardTableAverageCellConfig = z.object({\n\tdataHolder: dataHolderSchema.optional(),\n\torgUnit: z\n\t\t.object({\n\t\t\tuid: z.string(),\n\t\t\tname: z.string(),\n\t\t\thierarchy: z.string(),\n\t\t})\n\t\t.optional(),\n\tperiod: z\n\t\t.object({\n\t\t\tuid: z.string(),\n\t\t\tname: z.string(),\n\t\t})\n\t\t.optional(),\n});\nexport type ScorecardTableAverageCellConfig = z.infer<\n\ttypeof scorecardTableAverageCellConfig\n>;\n\nexport const scorecardCellDataSchema = dataSourceSchema.extend({\n\tdata: z.object({\n\t\tprevious: z.number().optional(),\n\t\tcurrent: z.number().optional(),\n\t}),\n});\nexport type ScorecardCellData = z.infer<typeof scorecardCellDataSchema>;\n\nexport const scorecardAverageCellDataSchema = dataSourceSchema.extend({\n\tdata: z.object({\n\t\taverage: z.number().optional(),\n\t}),\n});\nexport type ScorecardAverageCellData = z.infer<\n\ttypeof scorecardAverageCellDataSchema\n>;\n\nexport type SanitizedScorecardTableData = z.infer<typeof scorecardTableData>;\n\nexport enum ScorecardTableOrientation {\n\tORG_UNIT_VS_DATA = \"orgUnitsVsData\",\n\tDATA_VS_ORG_UNIT = \"dataVsOrgUnits\",\n}\n\nexport enum ScorecardTableDimension {\n\tGROUP = \"group\",\n\tORG_UNITS = \"orgUnits\",\n\tPERIODS = \"periods\",\n\tDATA = \"data\",\n}\n\nexport enum ScorecardDraggableItems {\n\tou = \"ou\",\n\tdata = \"data\",\n}\n"]}
@@ -27,18 +27,18 @@ function getValueFromConfig({
27
27
  }
28
28
  function getSortingFunction(dataEngine) {
29
29
  return function sortingFunction(rowA, rowB, columnId) {
30
- if (!dataEngine.isDone) {
30
+ if (!dataEngine.getIsCompleteSnapshot()) {
31
31
  return 0;
32
32
  }
33
33
  const dataA = rowA.getValue(columnId);
34
34
  const dataB = rowB.getValue(columnId);
35
35
  const dataAValue = getValueFromConfig({
36
36
  config: dataA,
37
- data: dataEngine.data
37
+ data: Array.from(dataEngine.data.values())
38
38
  });
39
39
  const dataBValue = getValueFromConfig({
40
40
  config: dataB,
41
- data: dataEngine.data
41
+ data: Array.from(dataEngine.data.values())
42
42
  });
43
43
  const valueA = dataAValue.data.current ?? 0;
44
44
  const valueB = dataBValue.data.current ?? 0;
@@ -164,6 +164,14 @@ function getDataHolderColumn({
164
164
  (acc, { label }, index) => index === 0 ? `${label}` : `${acc} / ${label}`,
165
165
  ""
166
166
  );
167
+ const legends = dataSources.map(
168
+ ({ legends: legends2, id: id2, label, specificTargetsSet }) => ({
169
+ id: id2,
170
+ label,
171
+ legends: legends2,
172
+ specificTargetsSet
173
+ })
174
+ );
167
175
  if (hasOnePeriod) {
168
176
  return columnHelper.accessor(
169
177
  (rowData) => {
@@ -188,7 +196,8 @@ function getDataHolderColumn({
188
196
  {
189
197
  header: DataHeaderCell,
190
198
  meta: {
191
- label: header
199
+ label: header,
200
+ legends
192
201
  },
193
202
  id: id.toString(),
194
203
  cell: DataContainer,
@@ -237,7 +246,8 @@ function getDataHolderColumn({
237
246
  )
238
247
  ),
239
248
  meta: {
240
- label: header
249
+ label: header,
250
+ legends
241
251
  },
242
252
  header: DataHeaderCell,
243
253
  enableSorting: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/columns.ts"],"names":[],"mappings":";;;;;;;;;;AAkCA,MAAM,eAAe,kBAAA,EAAuC;AAE5D,SAAS,kBAAA,CAAmB;AAAA,EAC3B,MAAA;AAAA,EACA;AACD,CAAA,EAGsB;AACrB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,KAAU;AACzC,IAAA,OACC,MAAA,CAAO,OAAA,CAAQ,GAAA,KAAQ,KAAA,CAAM,MAC7B,MAAA,CAAO,aAAA,KAAkB,KAAA,CAAM,EAAA,IAC/B,KAAA,CAAM,EAAA,KAAO,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CAAG,EAAA;AAAA,EAEzC,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACN,GAAG,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAAA,IAC1B,MAAM,SAAA,CAAU;AAAA,MACf,MAAA,EAAQ,UAAA;AAAA,MACR,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,gBAAgB,MAAA,CAAO;AAAA,KACvB;AAAA,GACF;AACD;AAEA,SAAS,mBAAmB,UAAA,EAAiC;AAC5D,EAAA,OAAO,SAAS,eAAA,CACf,IAAA,EACA,IAAA,EACA,QAAA,EACC;AACD,IAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACvB,MAAA,OAAO,CAAA;AAAA,IACR;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAEpC,IAAA,MAAM,aAAa,kBAAA,CAAmB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,UAAA,CAAW;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,aAAa,kBAAA,CAAmB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,UAAA,CAAW;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,CAAA;AAE1C,IAAA,IAAI,WAAW,MAAA,EAAQ;AACtB,MAAA,OAAO,CAAA;AAAA,IACR;AAEA,IAAA,OAAO,MAAA,GAAS,SAAS,CAAA,GAAI,EAAA;AAAA,EAC9B,CAAA;AACD;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC/B,UAAA;AAAA,EACA;AACD,CAAA,EAGG;AACF,EAAA,MAAM,sBAAsB,UAAA,CAAW,MAAA,CAAO,CAAC,EAAE,IAAG,KAAM;AACzD,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,EAAE,GAAA,EAAI,KAAM,GAAA,KAAQ,EAAE,CAAA;AAAA,EACnD,CAAC,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,GAAA,CAAI,CAAC,EAAE,OAAM,KAAO,KAAA,GAAQ,CAAC,KAAA,GAAQ,CAAE,CAAA;AAE1E,EAAA,OAAO,IAAA,CAAK,MAAO,GAAA,CAAI,MAAM,IAAI,MAAA,CAAO,MAAA,GAAU,GAAG,CAAA,GAAI,GAAA;AAC1D;AAEO,SAAS,SAAA,CAAU;AAAA,EACzB,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACD,CAAA,EAIG;AACF,EAAA,MAAM,mBAAmB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,IAAG,KAAM;AAChD,IAAA,OAAO,EAAA,KAAO,aAAA;AAAA,EACf,CAAC,CAAA;AAED,EAAA,MAAM,oBAAoB,MAAA,CAAO,IAAA,CAAK,CAAC,EAAE,IAAG,KAAM;AACjD,IAAA,OAAO,EAAA,KAAO,cAAA;AAAA,EACf,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,iBAAA,EAAmB,KAAA,IAAS,EAAE,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,gBAAA,EAAkB,KAAA,IAAS,EAAE,CAAA;AAE7D,EAAA,OAAO;AAAA,IACN,QAAA,EAAU,KAAA,CAAM,aAAa,CAAA,GAAI,MAAA,GAAY,aAAA;AAAA,IAC7C,OAAA,EAAS,KAAA,CAAM,YAAY,CAAA,GAAI,MAAA,GAAY;AAAA,GAC5C;AACD;AAEO,SAAS,uBAAA,CAAwB;AAAA,EACvC,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAI8D;AAC7D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAChC,IAAA,OAAO,aAAa,KAAA,CAAM;AAAA,MACzB,IAAI,OAAA,CAAQ,GAAA;AAAA,MACZ,MAAA,EAAQ,cAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACL,OAAO,OAAA,CAAQ;AAAA,OAChB;AAAA,MACA,SAAS,OAAA,CAAQ,GAAA;AAAA,QAAI,CAAC,EAAE,IAAA,EAAM,GAAA,OAC7B,YAAA,CAAa,QAAA;AAAA,UACZ,CAAC,OAAA,KAAY;AACZ,YAAA,MAAM,aAAA,GAAgB,GAAA;AACtB,YAAA,MAAM,cAAA,GAAiB,IAAA;AAAA,cACtB,uBAAA,CAAwB;AAAA,gBACvB,QAAA;AAAA,gBACA,QAAQ,6BAAA,CAA8B;AAAA,kBACrC,QAAA;AAAA,kBACA,QAAA,EAAU;AAAA,iBACV,CAAA;AAAA,gBACD,KAAA,EAAO;AAAA,eACP;AAAA,aACF,EAAG,EAAA;AACH,YAAA,MAAM,WAAA,GAAc,QAAQ,UAAA,EAAY,WAAA;AACxC,YAAA,OAAO;AAAA,cACN,aAAA;AAAA,cACA,cAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACD;AAAA,UACD,CAAA;AAAA,UACA;AAAA,YACC,MAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAM;AAAA,cACL,KAAA,EAAO;AAAA,aACR;AAAA,YACA,IAAA,EAAM,aAAA;AAAA,YACN,IAAA,EAAM,GAAA;AAAA,YACN,EAAA,EAAI,CAAA,EAAG,OAAA,CAAQ,GAAG,IAAI,GAAG,CAAA,CAAA;AAAA,YACzB,aAAA,EAAe,IAAA;AAAA,YACf,SAAA,EAAW,mBAAmB,UAAU,CAAA;AAAA,YACxC,MAAA,EAAQ;AAAA;AACT;AACD;AACD,KACA,CAAA;AAAA,EACF,CAAC,CAAA;AACF;AAEO,SAAS,gBAAA,CAAiB,EAAC,EAGiC;AAClE,EAAA,OAAO,aAAa,KAAA,CAAM;AAAA,IACzB,EAAA,EAAI,gBAAA;AAAA,IACJ,MAAA,EAAQ,iBAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACR,YAAA,CAAa,QAAA;AAAA,QACZ,CAAC,OAAA,KAAY;AACZ,UAAA,OAAO;AAAA,YACN,GAAG;AAAA,WACJ;AAAA,QACD,CAAA;AAAA,QACA;AAAA,UACC,EAAA,EAAI,CAAA,OAAA,CAAA;AAAA,UACJ,QAAQ,MAAM,IAAA;AAAA,UACd,IAAA,EAAM,WAAA;AAAA,UACN,YAAA,EAAc,IAAA;AAAA,UACd,IAAA,EAAM,GAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACT;AACD;AACD,GACA,CAAA;AACF;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC5B,YAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAMG;AACF,EAAA,MAAM,EAAE,EAAA,EAAI,WAAA,EAAY,GAAI,UAAA;AAE5B,EAAA,MAAM,MAAA,GACL,YAAY,MAAA,KAAW,CAAA,GACpB,KAAK,WAAW,CAAA,EAAG,QACnB,WAAA,CAAY,MAAA;AAAA,IACZ,CAAC,GAAA,EAAK,EAAE,KAAA,IAAS,KAAA,KAChB,KAAA,KAAU,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,CAAA,EAAG,GAAG,MAAM,KAAK,CAAA,CAAA;AAAA,IAC7C;AAAA,GACD;AAEH,EAAA,IAAI,YAAA,EAAc;AACjB,IAAA,OAAO,YAAA,CAAa,QAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACZ,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,OAAO,CAAA,CAAG,GAAA;AACrC,QAAA,MAAM,cAAA,GAAiB,IAAA;AAAA,UACtB,uBAAA,CAAwB;AAAA,YACvB,QAAA;AAAA,YACA,QAAQ,6BAAA,CAA8B;AAAA,cACrC,QAAA;AAAA,cACA,QAAA,EAAU;AAAA,aACV,CAAA;AAAA,YACD,KAAA,EAAO;AAAA,WACP;AAAA,SACF,EAAG,EAAA;AAEH,QAAA,OAAO;AAAA,UACN,GAAG,OAAA;AAAA,UACH,WAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACD;AAAA,MACD,CAAA;AAAA,MACA;AAAA,QACC,MAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACL,KAAA,EAAO;AAAA,SACR;AAAA,QACA,EAAA,EAAI,GAAG,QAAA,EAAS;AAAA,QAChB,IAAA,EAAM,aAAA;AAAA,QACN,IAAA,EAAM,GAAA;AAAA,QACN,aAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAW,mBAAmB,UAAU,CAAA;AAAA,QACxC,MAAA,EAAQ;AAAA;AACT,KACD;AAAA,EACD;AAEA,EAAA,OAAO,aAAa,KAAA,CAAM;AAAA,IACzB,EAAA,EAAI,GAAG,QAAA,EAAS;AAAA,IAChB,SAAS,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,EAAE,IAAA,EAAM,GAAA,OAC7B,YAAA,CAAa,QAAA;AAAA,QACZ,CAAC,OAAA,KAAY;AACZ,UAAA,MAAM,aAAA,GAAgB,GAAA;AACtB,UAAA,MAAM,cAAA,GAAiB,IAAA;AAAA,YACtB,uBAAA,CAAwB;AAAA,cACvB,QAAA;AAAA,cACA,QAAQ,6BAAA,CAA8B;AAAA,gBACrC,QAAA;AAAA,gBACA,QAAA,EAAU;AAAA,eACV,CAAA;AAAA,cACD,KAAA,EAAO;AAAA,aACP;AAAA,WACF,EAAG,EAAA;AACH,UAAA,OAAO;AAAA,YACN,GAAG,OAAA;AAAA,YACH,WAAA;AAAA,YACA,aAAA;AAAA,YACA;AAAA,WACD;AAAA,QACD,CAAA;AAAA,QACA;AAAA,UACC,MAAA,EAAQ,cAAA;AAAA,UACR,IAAA,EAAM;AAAA,YACL,KAAA,EAAO;AAAA,WACR;AAAA,UACA,IAAA,EAAM,aAAA;AAAA,UACN,IAAA,EAAM,GAAA;AAAA,UACN,IAAI,CAAA,EAAG,EAAA,CAAG,QAAA,EAAU,IAAI,GAAG,CAAA,CAAA;AAAA,UAC3B,aAAA,EAAe,IAAA;AAAA,UACf,SAAA,EAAW,mBAAmB,UAAU,CAAA;AAAA,UACxC,MAAA,EAAQ;AAAA;AACT;AACD,KACD;AAAA,IACA,IAAA,EAAM;AAAA,MACL,KAAA,EAAO;AAAA,KACR;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,aAAA,EAAe,IAAA;AAAA,IACf,SAAA,EAAW,mBAAmB,UAAU;AAAA,GACxC,CAAA;AACF;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACpC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACD,CAAA,EAK8D;AAC7D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,CAAc,UAAA,IAAc,EAAC;AACvD,EAAA,MAAM,WAAA,GAAc,WAAW,MAAA,KAAW,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,MAAM,YAAA,GAAe,QAAQ,MAAA,KAAW,CAAA;AAExC,EAAA,IAAI,WAAA,EAAa;AAChB,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,IAAG,KAAM;AACrD,MAAA,OAAO,aAAa,KAAA,CAAM;AAAA,QACzB,EAAA,EAAI,GAAG,QAAA,EAAS;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACP;AAAA,QACA,OAAA,EAAS,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AACxC,UAAA,OAAO,mBAAA,CAAoB;AAAA,YAC1B,YAAA;AAAA,YACA,UAAA;AAAA,YACA,OAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WACA,CAAA;AAAA,QACF,CAAC,CAAA;AAAA,QAED,aAAA,EAAe,KAAA;AAAA,QACf,QAAQ,MAAM;AAAA,OACd,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACF,CAAA,MAAO;AACN,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,IAAG,KAAM;AACrD,MAAA,OAAO,aAAa,KAAA,CAAM;AAAA,QACzB,EAAA,EAAI,GAAG,QAAA,EAAS;AAAA,QAChB,MAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACP;AAAA,QACA,OAAA,EAAS,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AACxC,UAAA,OAAO,mBAAA,CAAoB;AAAA,YAC1B,YAAA;AAAA,YACA,UAAA;AAAA,YACA,OAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA,WACA,CAAA;AAAA,QACF,CAAC,CAAA;AAAA,QACD,aAAA,EAAe,KAAA;AAAA,QACf,QAAQ,MAAM;AAAA,OACd,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACF;AACD","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":["legends","id"],"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"]}