@hisptz/dhis2-analytics 2.0.18 → 2.0.20

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 (128) hide show
  1. package/dist/components/Scorecard/Scorecard.js +2 -10
  2. package/dist/components/Scorecard/Scorecard.js.map +1 -1
  3. package/dist/components/Scorecard/Scorecard.stories.js +3 -2
  4. package/dist/components/Scorecard/Scorecard.stories.js.map +1 -1
  5. package/dist/components/Scorecard/components/ConfigProvider.js +14 -1
  6. package/dist/components/Scorecard/components/ConfigProvider.js.map +1 -1
  7. package/dist/components/Scorecard/components/MetaProvider.js.map +1 -1
  8. package/dist/components/Scorecard/components/ScorecardContext.js +18 -0
  9. package/dist/components/Scorecard/components/ScorecardContext.js.map +1 -0
  10. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js +4 -4
  11. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  12. package/dist/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js +25 -10
  13. package/dist/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js.map +1 -1
  14. package/dist/components/Scorecard/components/StateProvider.js +37 -5
  15. package/dist/components/Scorecard/components/StateProvider.js.map +1 -1
  16. package/dist/components/Scorecard/components/index.js +35 -0
  17. package/dist/components/Scorecard/components/index.js.map +1 -0
  18. package/dist/components/Scorecard/hooks/columns.js +10 -8
  19. package/dist/components/Scorecard/hooks/columns.js.map +1 -1
  20. package/dist/components/Scorecard/hooks/data.js +6 -9
  21. package/dist/components/Scorecard/hooks/data.js.map +1 -1
  22. package/dist/components/Scorecard/hooks/dataItem.js +20 -0
  23. package/dist/components/Scorecard/hooks/dataItem.js.map +1 -0
  24. package/dist/components/Scorecard/hooks/index.js +14 -0
  25. package/dist/components/Scorecard/hooks/index.js.map +1 -0
  26. package/dist/components/Scorecard/hooks/metadata.js +20 -15
  27. package/dist/components/Scorecard/hooks/metadata.js.map +1 -1
  28. package/dist/components/Scorecard/hooks/table.js +2 -2
  29. package/dist/components/Scorecard/hooks/table.js.map +1 -1
  30. package/dist/components/Scorecard/index.js +14 -0
  31. package/dist/components/Scorecard/index.js.map +1 -1
  32. package/dist/components/Scorecard/schemas/config.js +1 -0
  33. package/dist/components/Scorecard/schemas/config.js.map +1 -1
  34. package/dist/components/Scorecard/utils/analytics.js +12 -1
  35. package/dist/components/Scorecard/utils/analytics.js.map +1 -1
  36. package/dist/components/Scorecard/utils/columns.js +18 -6
  37. package/dist/components/Scorecard/utils/columns.js.map +1 -1
  38. package/dist/components/Scorecard/utils/state.js +15 -0
  39. package/dist/components/Scorecard/utils/state.js.map +1 -0
  40. package/dist/esm/components/Scorecard/Scorecard.js +2 -10
  41. package/dist/esm/components/Scorecard/Scorecard.js.map +1 -1
  42. package/dist/esm/components/Scorecard/Scorecard.stories.js +3 -2
  43. package/dist/esm/components/Scorecard/Scorecard.stories.js.map +1 -1
  44. package/dist/esm/components/Scorecard/components/ConfigProvider.js +10 -1
  45. package/dist/esm/components/Scorecard/components/ConfigProvider.js.map +1 -1
  46. package/dist/esm/components/Scorecard/components/MetaProvider.js.map +1 -1
  47. package/dist/esm/components/Scorecard/components/ScorecardContext.js +16 -0
  48. package/dist/esm/components/Scorecard/components/ScorecardContext.js.map +1 -0
  49. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js +3 -3
  50. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  51. package/dist/esm/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js +26 -11
  52. package/dist/esm/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js.map +1 -1
  53. package/dist/esm/components/Scorecard/components/StateProvider.js +34 -7
  54. package/dist/esm/components/Scorecard/components/StateProvider.js.map +1 -1
  55. package/dist/esm/components/Scorecard/components/index.js +6 -0
  56. package/dist/esm/components/Scorecard/components/index.js.map +1 -0
  57. package/dist/esm/components/Scorecard/hooks/columns.js +6 -4
  58. package/dist/esm/components/Scorecard/hooks/columns.js.map +1 -1
  59. package/dist/esm/components/Scorecard/hooks/data.js +4 -7
  60. package/dist/esm/components/Scorecard/hooks/data.js.map +1 -1
  61. package/dist/esm/components/Scorecard/hooks/dataItem.js +18 -0
  62. package/dist/esm/components/Scorecard/hooks/dataItem.js.map +1 -0
  63. package/dist/esm/components/Scorecard/hooks/index.js +3 -0
  64. package/dist/esm/components/Scorecard/hooks/index.js.map +1 -0
  65. package/dist/esm/components/Scorecard/hooks/metadata.js +19 -14
  66. package/dist/esm/components/Scorecard/hooks/metadata.js.map +1 -1
  67. package/dist/esm/components/Scorecard/hooks/table.js +1 -1
  68. package/dist/esm/components/Scorecard/hooks/table.js.map +1 -1
  69. package/dist/esm/components/Scorecard/index.js +2 -0
  70. package/dist/esm/components/Scorecard/index.js.map +1 -1
  71. package/dist/esm/components/Scorecard/schemas/config.js +1 -0
  72. package/dist/esm/components/Scorecard/schemas/config.js.map +1 -1
  73. package/dist/esm/components/Scorecard/utils/analytics.js +12 -2
  74. package/dist/esm/components/Scorecard/utils/analytics.js.map +1 -1
  75. package/dist/esm/components/Scorecard/utils/columns.js +18 -6
  76. package/dist/esm/components/Scorecard/utils/columns.js.map +1 -1
  77. package/dist/esm/components/Scorecard/utils/state.js +13 -0
  78. package/dist/esm/components/Scorecard/utils/state.js.map +1 -0
  79. package/dist/types/components/Scorecard/Scorecard.d.ts +3 -6
  80. package/dist/types/components/Scorecard/Scorecard.d.ts.map +1 -1
  81. package/dist/types/components/Scorecard/components/ConfigProvider.d.ts +3 -1
  82. package/dist/types/components/Scorecard/components/ConfigProvider.d.ts.map +1 -1
  83. package/dist/types/components/Scorecard/components/MetaProvider.d.ts +1 -0
  84. package/dist/types/components/Scorecard/components/MetaProvider.d.ts.map +1 -1
  85. package/dist/types/components/Scorecard/components/ScorecardContext.d.ts +10 -0
  86. package/dist/types/components/Scorecard/components/ScorecardContext.d.ts.map +1 -0
  87. package/dist/types/components/Scorecard/components/ScorecardTable/ScorecardTable.d.ts +4 -1
  88. package/dist/types/components/Scorecard/components/ScorecardTable/ScorecardTable.d.ts.map +1 -1
  89. package/dist/types/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.d.ts +1 -1
  90. package/dist/types/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.d.ts.map +1 -1
  91. package/dist/types/components/Scorecard/components/StateProvider.d.ts +5 -3
  92. package/dist/types/components/Scorecard/components/StateProvider.d.ts.map +1 -1
  93. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts +1 -0
  94. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts.map +1 -1
  95. package/dist/types/components/Scorecard/components/index.d.ts +5 -0
  96. package/dist/types/components/Scorecard/components/index.d.ts.map +1 -0
  97. package/dist/types/components/Scorecard/hooks/columns.d.ts +1 -0
  98. package/dist/types/components/Scorecard/hooks/columns.d.ts.map +1 -1
  99. package/dist/types/components/Scorecard/hooks/data.d.ts +1 -0
  100. package/dist/types/components/Scorecard/hooks/data.d.ts.map +1 -1
  101. package/dist/types/components/Scorecard/hooks/dataItem.d.ts +3 -0
  102. package/dist/types/components/Scorecard/hooks/dataItem.d.ts.map +1 -0
  103. package/dist/types/components/Scorecard/hooks/index.d.ts +2 -0
  104. package/dist/types/components/Scorecard/hooks/index.d.ts.map +1 -0
  105. package/dist/types/components/Scorecard/hooks/metadata.d.ts +1 -3
  106. package/dist/types/components/Scorecard/hooks/metadata.d.ts.map +1 -1
  107. package/dist/types/components/Scorecard/hooks/orgUnit.d.ts +1 -0
  108. package/dist/types/components/Scorecard/hooks/orgUnit.d.ts.map +1 -1
  109. package/dist/types/components/Scorecard/hooks/table.d.ts.map +1 -1
  110. package/dist/types/components/Scorecard/index.d.ts +2 -0
  111. package/dist/types/components/Scorecard/index.d.ts.map +1 -1
  112. package/dist/types/components/Scorecard/schemas/config.d.ts +43 -0
  113. package/dist/types/components/Scorecard/schemas/config.d.ts.map +1 -1
  114. package/dist/types/components/Scorecard/utils/analytics.d.ts +8 -0
  115. package/dist/types/components/Scorecard/utils/analytics.d.ts.map +1 -1
  116. package/dist/types/components/Scorecard/utils/columns.d.ts +1 -0
  117. package/dist/types/components/Scorecard/utils/columns.d.ts.map +1 -1
  118. package/dist/types/components/Scorecard/utils/dataSources.d.ts +1 -0
  119. package/dist/types/components/Scorecard/utils/dataSources.d.ts.map +1 -1
  120. package/dist/types/components/Scorecard/utils/state.d.ts +5 -0
  121. package/dist/types/components/Scorecard/utils/state.d.ts.map +1 -0
  122. package/package.json +10 -3
  123. package/dist/components/Scorecard/components/StateSetProvider.js +0 -17
  124. package/dist/components/Scorecard/components/StateSetProvider.js.map +0 -1
  125. package/dist/esm/components/Scorecard/components/StateSetProvider.js +0 -14
  126. package/dist/esm/components/Scorecard/components/StateSetProvider.js.map +0 -1
  127. package/dist/types/components/Scorecard/components/StateSetProvider.d.ts +0 -9
  128. package/dist/types/components/Scorecard/components/StateSetProvider.d.ts.map +0 -1
@@ -14,7 +14,17 @@ function getDimensions({
14
14
  const orgUnitsIds = orgUnits.getOrgUnitsForAnalytics(
15
15
  state?.orgUnitSelection ?? config?.orgUnitSelection
16
16
  );
17
- const periodsIds = state.periodSelection.periods.map(({ id }) => id);
17
+ const periodsIds = state.periodSelection.periods.map((period) => period.id);
18
+ return {
19
+ dataItemsIds,
20
+ orgUnitsIds,
21
+ periodsIds
22
+ };
23
+ }
24
+ function getDimensionsFromMeta({ meta }) {
25
+ const dataItemsIds = meta.dataItems.map((item) => item.uid);
26
+ const orgUnitsIds = meta.orgUnits.map((orgUnit) => orgUnit.uid);
27
+ const periodsIds = meta.periods.map((period) => period.uid);
18
28
  return {
19
29
  dataItemsIds,
20
30
  orgUnitsIds,
@@ -23,5 +33,6 @@ function getDimensions({
23
33
  }
24
34
 
25
35
  exports.getDimensions = getDimensions;
36
+ exports.getDimensionsFromMeta = getDimensionsFromMeta;
26
37
  //# sourceMappingURL=out.js.map
27
38
  //# sourceMappingURL=analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/utils/analytics.ts"],"names":[],"mappings":"AACA,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AAEjC,SAAS,cAAc;AAAA,EAC7B;AAAA,EACA;AACD,GAGG;AACF,QAAM,kBAAkB;AAAA,IACvB,QAAQ,eAAe,cAAc,CAAC;AAAA,EACvC;AAEA,QAAM,eAAe,iBAAiB,IAAI,CAAC,SAAS,MAAM,EAAE;AAC5D,QAAM,cAAc;AAAA,IACnB,OAAO,oBAAoB,QAAQ;AAAA,EACpC;AACA,QAAM,aAAa,MAAM,gBAAgB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;AAEnE,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD","sourcesContent":["import type { ScorecardConfig, ScorecardState } from \"../schemas/config\";\nimport { getDataSourcesFromGroups } from \"./dataSources\";\nimport { getOrgUnitsForAnalytics } from \"./orgUnits\";\n\nexport function getDimensions({\n\tconfig,\n\tstate,\n}: {\n\tconfig: ScorecardConfig;\n\tstate: ScorecardState;\n}) {\n\tconst dataItemObjects = getDataSourcesFromGroups(\n\t\tconfig?.dataSelection?.dataGroups ?? [],\n\t);\n\n\tconst dataItemsIds = dataItemObjects?.map((item) => item?.id);\n\tconst orgUnitsIds = getOrgUnitsForAnalytics(\n\t\tstate?.orgUnitSelection ?? config?.orgUnitSelection,\n\t);\n\tconst periodsIds = state.periodSelection.periods.map(({ id }) => id);\n\n\treturn {\n\t\tdataItemsIds,\n\t\torgUnitsIds,\n\t\tperiodsIds,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/utils/analytics.ts"],"names":[],"mappings":"AACA,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AAGjC,SAAS,cAAc;AAAA,EAC7B;AAAA,EACA;AACD,GAGG;AACF,QAAM,kBAAkB;AAAA,IACvB,QAAQ,eAAe,cAAc,CAAC;AAAA,EACvC;AAEA,QAAM,eAAe,iBAAiB,IAAI,CAAC,SAAS,MAAM,EAAE;AAC5D,QAAM,cAAc;AAAA,IACnB,OAAO,oBAAoB,QAAQ;AAAA,EACpC;AACA,QAAM,aAAa,MAAM,gBAAgB,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE;AAE1E,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEO,SAAS,sBAAsB,EAAE,KAAK,GAA4B;AACxE,QAAM,eAAe,KAAK,UAAU,IAAI,CAAC,SAAS,KAAK,GAAG;AAC1D,QAAM,cAAc,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,GAAG;AAC9D,QAAM,aAAa,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,GAAG;AAE1D,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD","sourcesContent":["import type { ScorecardConfig, ScorecardState } from \"../schemas/config\";\nimport { getDataSourcesFromGroups } from \"./dataSources\";\nimport { getOrgUnitsForAnalytics } from \"./orgUnits\";\nimport type { ScorecardMeta } from \"../components\";\n\nexport function getDimensions({\n\tconfig,\n\tstate,\n}: {\n\tconfig: ScorecardConfig;\n\tstate: ScorecardState;\n}) {\n\tconst dataItemObjects = getDataSourcesFromGroups(\n\t\tconfig?.dataSelection?.dataGroups ?? [],\n\t);\n\n\tconst dataItemsIds = dataItemObjects?.map((item) => item?.id);\n\tconst orgUnitsIds = getOrgUnitsForAnalytics(\n\t\tstate?.orgUnitSelection ?? config?.orgUnitSelection,\n\t);\n\tconst periodsIds = state.periodSelection.periods.map((period) => period.id);\n\n\treturn {\n\t\tdataItemsIds,\n\t\torgUnitsIds,\n\t\tperiodsIds,\n\t};\n}\n\nexport function getDimensionsFromMeta({ meta }: { meta: ScorecardMeta }) {\n\tconst dataItemsIds = meta.dataItems.map((item) => item.uid);\n\tconst orgUnitsIds = meta.orgUnits.map((orgUnit) => orgUnit.uid);\n\tconst periodsIds = meta.periods.map((period) => period.uid);\n\n\treturn {\n\t\tdataItemsIds,\n\t\torgUnitsIds,\n\t\tperiodsIds,\n\t};\n}\n"]}
@@ -291,12 +291,24 @@ function getDataColumnHeaders({
291
291
  const periods = meta.periods ?? [];
292
292
  const hasOnePeriod = periods.length === 1;
293
293
  if (hasOneGroup) {
294
- return lodash.head(dataGroups).dataHolders.map((dataHolder) => {
295
- return getDataHolderColumn({
296
- hasOnePeriod,
297
- dataHolder,
298
- periods,
299
- calendar
294
+ return dataGroups.map(({ title, dataHolders, id }) => {
295
+ return columnHelper.group({
296
+ id: id.toString(),
297
+ header: DataHeaderCell.DataHeaderCell,
298
+ meta: {
299
+ label: title,
300
+ bold: true
301
+ },
302
+ columns: dataHolders.map((dataHolder) => {
303
+ return getDataHolderColumn({
304
+ hasOnePeriod,
305
+ dataHolder,
306
+ periods,
307
+ calendar
308
+ });
309
+ }),
310
+ enableSorting: false,
311
+ footer: () => null
300
312
  });
301
313
  });
302
314
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/utils/columns.ts"],"names":["id"],"mappings":"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","sourcesContent":["import type { ScorecardMeta } from \"../components/MetaProvider\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableCellData,\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 { DataHeaderCell } 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\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction sortingFunction(\n\trowA: Row<ScorecardTableData>,\n\trowB: Row<ScorecardTableData>,\n\tcolumnId: string,\n) {\n\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellData;\n\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellData;\n\n\tconst valueA = head(dataA.dataSources)?.data.current ?? 0;\n\tconst valueB = head(dataB.dataSources)?.data.current ?? 0;\n\n\tif (valueA === valueB) {\n\t\treturn 0;\n\t}\n\n\treturn valueA > valueB ? 1 : -1;\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\nfunction 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}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellData>[] {\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\n\t\t\t\t\t\tconst values = rowData.dataValues.filter(({ ou }) => {\n\t\t\t\t\t\t\treturn ou === orgUnit.uid;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst dataSources =\n\t\t\t\t\t\t\trowData.dataHolder?.dataSources?.map(\n\t\t\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\t\t\tconst dataSourceValues = values.filter(\n\t\t\t\t\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\t\t\t\t\treturn value.dx === dataSource.id;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\t\t\t\tvalues: dataSourceValues,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\t\tperiod: uid,\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 ScorecardTableCellData;\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\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: sortingFunction,\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,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}) {\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\tdataSources: rowData.dataHolder?.dataSources?.map(\n\t\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\t\tconst dataValues = rowData.dataValues.filter(\n\t\t\t\t\t\t\t\t\t({ dx }) => dx === dataSource.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\t\taverage: getAverageValue({\n\t\t\t\t\t\t\t\t\t\tdataValues,\n\t\t\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\taverage: getAverageValue({\n\t\t\t\t\t\t\tdataValues: rowData.dataValues,\n\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t}),\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\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}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\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, id }) => `${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\tconst dataSourceWithValues = dataSources.map((dataSource) => {\n\t\t\t\t\tconst values = rowData.dataValues.filter(({ dx }) => {\n\t\t\t\t\t\treturn dx === dataSource.id;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\tvalues,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...rowData,\n\t\t\t\t\tdataSources: dataSourceWithValues,\n\t\t\t\t\tperiod: head(periods)?.uid,\n\t\t\t\t} as ScorecardTableCellData;\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\tenableSorting: true,\n\t\t\t\tsortingFn: sortingFunction,\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\tconst dataSourceWithValues = dataSources.map(\n\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\tconst values = rowData.dataValues.filter(\n\t\t\t\t\t\t\t\t({ dx }) => {\n\t\t\t\t\t\t\t\t\treturn dx === dataSource.id;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\t\tvalues,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\tdataSources: dataSourceWithValues,\n\t\t\t\t\t\tperiod: uid,\n\t\t\t\t\t} as ScorecardTableCellData;\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\tid: `${id.toString()}-${uid}`,\n\t\t\t\t\tenableSorting: true,\n\t\t\t\t\tsortingFn: sortingFunction,\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: sortingFunction,\n\t});\n}\n\nexport function getDataColumnHeaders({\n\tmeta,\n\tconfig,\n\tcalendar,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n\tcalendar: SupportedCalendar;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellData>[] {\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 head(dataGroups)!.dataHolders.map((dataHolder) => {\n\t\t\treturn getDataHolderColumn({\n\t\t\t\thasOnePeriod,\n\t\t\t\tdataHolder,\n\t\t\t\tperiods,\n\t\t\t\tcalendar,\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});\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/components/Scorecard/utils/columns.ts"],"names":["id"],"mappings":"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","sourcesContent":["import type { ScorecardMeta } from \"../components/MetaProvider\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableCellData,\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 { DataHeaderCell } 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\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction sortingFunction(\n\trowA: Row<ScorecardTableData>,\n\trowB: Row<ScorecardTableData>,\n\tcolumnId: string,\n) {\n\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellData;\n\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellData;\n\n\tconst valueA = head(dataA.dataSources)?.data.current ?? 0;\n\tconst valueB = head(dataB.dataSources)?.data.current ?? 0;\n\n\tif (valueA === valueB) {\n\t\treturn 0;\n\t}\n\n\treturn valueA > valueB ? 1 : -1;\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\nfunction 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}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellData>[] {\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\n\t\t\t\t\t\tconst values = rowData.dataValues.filter(({ ou }) => {\n\t\t\t\t\t\t\treturn ou === orgUnit.uid;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst dataSources =\n\t\t\t\t\t\t\trowData.dataHolder?.dataSources?.map(\n\t\t\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\t\t\tconst dataSourceValues = values.filter(\n\t\t\t\t\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\t\t\t\t\treturn value.dx === dataSource.id;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\t\t\t\tvalues: dataSourceValues,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\t\tperiod: uid,\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 ScorecardTableCellData;\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\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: sortingFunction,\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,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}) {\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\tdataSources: rowData.dataHolder?.dataSources?.map(\n\t\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\t\tconst dataValues = rowData.dataValues.filter(\n\t\t\t\t\t\t\t\t\t({ dx }) => dx === dataSource.id,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\t\taverage: getAverageValue({\n\t\t\t\t\t\t\t\t\t\tdataValues,\n\t\t\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\taverage: getAverageValue({\n\t\t\t\t\t\t\tdataValues: rowData.dataValues,\n\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t}),\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\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}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\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, id }) => `${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\tconst dataSourceWithValues = dataSources.map((dataSource) => {\n\t\t\t\t\tconst values = rowData.dataValues.filter(({ dx }) => {\n\t\t\t\t\t\treturn dx === dataSource.id;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\tvalues,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...rowData,\n\t\t\t\t\tdataSources: dataSourceWithValues,\n\t\t\t\t\tperiod: head(periods)?.uid,\n\t\t\t\t} as ScorecardTableCellData;\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\tenableSorting: true,\n\t\t\t\tsortingFn: sortingFunction,\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\tconst dataSourceWithValues = dataSources.map(\n\t\t\t\t\t\t(dataSource) => {\n\t\t\t\t\t\t\tconst values = rowData.dataValues.filter(\n\t\t\t\t\t\t\t\t({ dx }) => {\n\t\t\t\t\t\t\t\t\treturn dx === dataSource.id;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst data = getValues({\n\t\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\t\tvalues,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...dataSource,\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\tdataSources: dataSourceWithValues,\n\t\t\t\t\t\tperiod: uid,\n\t\t\t\t\t} as ScorecardTableCellData;\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\tid: `${id.toString()}-${uid}`,\n\t\t\t\t\tenableSorting: true,\n\t\t\t\t\tsortingFn: sortingFunction,\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: sortingFunction,\n\t});\n}\n\nexport function getDataColumnHeaders({\n\tmeta,\n\tconfig,\n\tcalendar,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n\tcalendar: SupportedCalendar;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellData>[] {\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: 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});\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});\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"]}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ function getInitialStateFromConfig(config, options) {
4
+ return {
5
+ periodSelection: config.periodSelection,
6
+ orgUnitSelection: config.orgUnitSelection,
7
+ options: config.options,
8
+ nested: options?.nested ?? false,
9
+ hasOnePeriod: config.periodSelection.periods.length === 1
10
+ };
11
+ }
12
+
13
+ exports.getInitialStateFromConfig = getInitialStateFromConfig;
14
+ //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/utils/state.ts"],"names":[],"mappings":"AAEO,SAAS,0BACf,QACA,SACiB;AACjB,SAAO;AAAA,IACN,iBAAiB,OAAO;AAAA,IACxB,kBAAkB,OAAO;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,QAAQ,SAAS,UAAU;AAAA,IAC3B,cAAc,OAAO,gBAAgB,QAAQ,WAAW;AAAA,EACzD;AACD","sourcesContent":["import type { ScorecardConfig, ScorecardState } from \"../schemas/config\";\n\nexport function getInitialStateFromConfig(\n\tconfig: ScorecardConfig,\n\toptions?: { nested: boolean },\n): ScorecardState {\n\treturn {\n\t\tperiodSelection: config.periodSelection,\n\t\torgUnitSelection: config.orgUnitSelection,\n\t\toptions: config.options,\n\t\tnested: options?.nested ?? false,\n\t\thasOnePeriod: config.periodSelection.periods.length === 1,\n\t};\n}\n"]}
@@ -1,18 +1,10 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { ScorecardConfigProvider } from './components/ConfigProvider';
3
- import { ScorecardMetaProvider } from './components/MetaProvider';
4
- import { ScorecardStateProvider } from './components/StateProvider';
5
2
  import { TableStateProvider } from './components/TableStateProvider';
6
3
  import { ScorecardTable } from './components/ScorecardTable';
7
4
  import { ScorecardDataProvider } from './components/DataProvider';
8
- import { ScorecardSetStateProvider } from './components/StateSetProvider';
9
5
 
10
- function Scorecard({
11
- config,
12
- state,
13
- setState
14
- }) {
15
- return /* @__PURE__ */ jsx(ScorecardConfigProvider, { config, children: /* @__PURE__ */ jsx(ScorecardStateProvider, { config: state, children: /* @__PURE__ */ jsx(ScorecardSetStateProvider, { setState, children: /* @__PURE__ */ jsx(ScorecardMetaProvider, { children: /* @__PURE__ */ jsx(ScorecardDataProvider, { children: /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(ScorecardTable, {}) }) }) }) }) }) });
6
+ function Scorecard({ tableProps }) {
7
+ return /* @__PURE__ */ jsx(ScorecardDataProvider, { children: /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(ScorecardTable, { ...tableProps ?? {} }) }) });
16
8
  }
17
9
 
18
10
  export { Scorecard };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/Scorecard.tsx"],"names":[],"mappings":"AA+BQ;AA7BR,SAAS,+BAA+B;AACxC,SAAS,6BAA6B;AACtC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,6BAA6B;AACtC;AAAA,EAEC;AAAA,OACM;AAQA,SAAS,UAAU;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACD,GAAuC;AACtC,SACC,oBAAC,2BAAwB,QACxB,8BAAC,0BAAuB,QAAQ,OAC/B,8BAAC,6BAA0B,UAC1B,8BAAC,yBACA,8BAAC,yBACA,8BAAC,sBACA,8BAAC,kBAAe,GACjB,GACD,GACD,GACD,GACD,GACD;AAEF","sourcesContent":["import type { ScorecardConfig, ScorecardState } from \"./schemas/config\";\nimport React from \"react\";\nimport { ScorecardConfigProvider } from \"./components/ConfigProvider\";\nimport { ScorecardMetaProvider } from \"./components/MetaProvider\";\nimport { ScorecardStateProvider } from \"./components/StateProvider\";\nimport { TableStateProvider } from \"./components/TableStateProvider\";\nimport { ScorecardTable } from \"./components/ScorecardTable\";\nimport { ScorecardDataProvider } from \"./components/DataProvider\";\nimport {\n\ttype ScorecardSetState,\n\tScorecardSetStateProvider,\n} from \"./components/StateSetProvider\";\n\nexport interface ScorecardProps {\n\tconfig: ScorecardConfig;\n\tstate: ScorecardState;\n\tsetState: ScorecardSetState;\n}\n\nexport function Scorecard({\n\tconfig,\n\tstate,\n\tsetState,\n}: ScorecardProps): React.ReactElement {\n\treturn (\n\t\t<ScorecardConfigProvider config={config}>\n\t\t\t<ScorecardStateProvider config={state}>\n\t\t\t\t<ScorecardSetStateProvider setState={setState}>\n\t\t\t\t\t<ScorecardMetaProvider>\n\t\t\t\t\t\t<ScorecardDataProvider>\n\t\t\t\t\t\t\t<TableStateProvider>\n\t\t\t\t\t\t\t\t<ScorecardTable />\n\t\t\t\t\t\t\t</TableStateProvider>\n\t\t\t\t\t\t</ScorecardDataProvider>\n\t\t\t\t\t</ScorecardMetaProvider>\n\t\t\t\t</ScorecardSetStateProvider>\n\t\t\t</ScorecardStateProvider>\n\t\t</ScorecardConfigProvider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/Scorecard.tsx"],"names":[],"mappings":"AAgBI;AAfJ,SAAS,0BAA0B;AACnC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,6BAA6B;AAM/B,SAAS,UAAU,EAAE,WAAW,GAAuC;AAC7E,SACC,oBAAC,yBACA,8BAAC,sBACA,8BAAC,kBAAgB,GAAI,cAAc,CAAC,GAAI,GACzC,GACD;AAEF","sourcesContent":["import React from \"react\";\nimport { TableStateProvider } from \"./components/TableStateProvider\";\nimport {\n\tScorecardTable,\n\ttype ScorecardTableProps,\n} from \"./components/ScorecardTable\";\nimport { ScorecardDataProvider } from \"./components/DataProvider\";\n\nexport interface ScorecardProps {\n\ttableProps?: ScorecardTableProps;\n}\n\nexport function Scorecard({ tableProps }: ScorecardProps): React.ReactElement {\n\treturn (\n\t\t<ScorecardDataProvider>\n\t\t\t<TableStateProvider>\n\t\t\t\t<ScorecardTable {...(tableProps ?? {})} />\n\t\t\t</TableStateProvider>\n\t\t</ScorecardDataProvider>\n\t);\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Scorecard } from './Scorecard';
3
3
  import { useState } from 'react';
4
+ import { ScorecardContext } from './components';
4
5
 
5
6
  const config = {
6
7
  additionalLabels: ["Source: HMIS"],
@@ -1075,7 +1076,7 @@ const meta = {
1075
1076
  title: "Scorecard",
1076
1077
  component: Scorecard,
1077
1078
  decorators: (Story, context) => {
1078
- const [state, setState] = useState({
1079
+ useState({
1079
1080
  options: {
1080
1081
  ...config.options,
1081
1082
  averageRow: true
@@ -1083,7 +1084,7 @@ const meta = {
1083
1084
  orgUnitSelection: config.orgUnitSelection,
1084
1085
  periodSelection: config.periodSelection
1085
1086
  });
1086
- return /* @__PURE__ */ jsx("div", { style: { maxWidth: 1400, overflowX: "auto" }, children: /* @__PURE__ */ jsx(Story, { args: { ...context.args, state, setState } }) });
1087
+ return /* @__PURE__ */ jsx("div", { style: { maxWidth: 1400, overflowX: "auto" }, children: /* @__PURE__ */ jsx(ScorecardContext, { config, children: /* @__PURE__ */ jsx(Story, { args: { ...context.args } }) }) });
1087
1088
  }
1088
1089
  };
1089
1090
  var Scorecard_stories_default = meta;