@hisptz/dhis2-scorecard 1.2.31 → 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.
@@ -23,6 +23,20 @@ function EmptyDataHeaderCell({
23
23
  const colSpan = header.colSpan.toString();
24
24
  return /* @__PURE__ */ jsxRuntime.jsx(ui.DataTableColumnHeader, { colSpan });
25
25
  }
26
+ function SpecificTargetsIndicator({
27
+ legends
28
+ }) {
29
+ const hasSpecificTargets = legends?.some(
30
+ ({ specificTargetsSet }) => specificTargetsSet === true
31
+ );
32
+ return hasSpecificTargets ? /* @__PURE__ */ jsxRuntime.jsx(
33
+ ui.Tooltip,
34
+ {
35
+ content: i18n__default.default.t("This data item has specific targets configured"),
36
+ children: "*"
37
+ }
38
+ ) : null;
39
+ }
26
40
  function DataHeaderCellComponent({
27
41
  column,
28
42
  header
@@ -36,7 +50,6 @@ function DataHeaderCellComponent({
36
50
  const sortDirection = !column?.getIsSorted() ? "default" : column.getIsSorted();
37
51
  const nextSortType = column?.getNextSortingOrder() === "asc" ? i18n__default.default.t("in ascending order") : column?.getNextSortingOrder() === "desc" ? i18n__default.default.t("in descending order") : i18n__default.default.t("disable");
38
52
  const legends = header.column.columnDef.meta?.legends;
39
- console.log(openLegendView, legends, labelRef.current);
40
53
  return /* @__PURE__ */ jsxRuntime.jsx(
41
54
  ui.DataTableColumnHeader,
42
55
  {
@@ -68,7 +81,11 @@ function DataHeaderCellComponent({
68
81
  onClose: toggleLegendView
69
82
  }
70
83
  ),
71
- bold ? /* @__PURE__ */ jsxRuntime.jsx("b", { children: label }) : /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: toggleLegendView, ref: labelRef, children: label })
84
+ bold ? /* @__PURE__ */ jsxRuntime.jsx("b", { children: label }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { onClick: toggleLegendView, ref: labelRef, children: [
85
+ label,
86
+ " ",
87
+ /* @__PURE__ */ jsxRuntime.jsx(SpecificTargetsIndicator, { legends })
88
+ ] })
72
89
  ]
73
90
  }
74
91
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":["jsx","DataTableColumnHeader","useScorecardViewStateValue","useRef","useBoolean","i18n","DroppableCell","ScorecardDraggableItems","jsxs","DraggableCell","isEmpty","DataHeaderLegendView"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBO,SAAS,mBAAA,CAAoB;AAAA,EACnC;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAS;AACxC,EAAA,uBAAOA,cAAA,CAACC,4BAAsB,OAAA,EAAkB,CAAA;AACjD;AAEO,SAAS,uBAAA,CAAwB;AAAA,EACvC,MAAA;AAAA,EACA;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,UAAA,GAAaC,iCAAoC,gBAAgB,CAAA;AACvE,EAAA,MAAM,QAAA,GAAWC,aAAoB,IAAI,CAAA;AACzC,EAAA,MAAM,KAAA,GAEJ,OAAO,MAAA,CAAO,SAAA,CAAU,KAIvB,KAAA,IAAU,MAAA,CAAO,UAAU,IAAA,CAA2B,KAAA;AAEzD,EAAA,MAAM,IAAA,GACJ,OAAO,MAAA,CAAO,SAAA,CAAU,KAA4B,IAAA,IACpD,MAAA,CAAO,UAAU,IAAA,CAA4B,IAAA;AAE/C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAS;AACxC,EAAA,MAAM,EAAE,KAAA,EAAO,cAAA,EAAgB,QAAQ,gBAAA,EAAiB,GACvDC,sBAAW,KAAK,CAAA;AAEjB,EAAA,MAAM,gBAAgB,CAAC,MAAA,EAAQ,aAAY,GACxC,SAAA,GACC,OAAQ,WAAA,EAAY;AACxB,EAAA,MAAM,eACL,MAAA,EAAQ,mBAAA,OAA0B,KAAA,GAC/BC,qBAAA,CAAK,EAAE,oBAAoB,CAAA,GAC3B,QAAQ,mBAAA,EAAoB,KAAM,SACjCA,qBAAA,CAAK,CAAA,CAAE,qBAAqB,CAAA,GAC5BA,qBAAA,CAAK,EAAE,SAAS,CAAA;AAErB,EAAA,MAAM,OAAA,GACL,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,IAAA,EAOtB,OAAA;AAEH,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,OAAA,EAAS,QAAA,CAAS,OAAO,CAAA;AAErD,EAAA,uBACCL,cAAA;AAAA,IAACC,wBAAA;AAAA,IAAA;AAAA,MAEA,eAAeI,qBAAA,CAAK,CAAA,CAAE,uBAAA,EAAyB,EAAE,cAAc,CAAA;AAAA,MAC/D,eAAA,EACC,MAAA,CAAO,MAAA,EAAQ,UAAA,EAAW,IAAK,OAAO,UAAA,EAAW,GAC9C,CAAC,CAAA,EAAG,CAAA,KAAM;AACV,QAAA,MAAM,IAAA,GAAO,OAAQ,uBAAA,EAAwB;AAC7C,QAAA,IAAI,IAAA,EAAM;AACT,UAAA,IAAA,CAAK,CAAC,CAAA;AAAA,QACP;AAAA,MACD,CAAA,GACC,MAAA;AAAA,MAEJ,aAAA,EACC,OAAO,MAAA,EAAQ,UAAA,MAAgB,MAAA,CAAO,UAAA,KACnC,aAAA,GACA,MAAA;AAAA,MAEJ,KAAA,EAAM,QAAA;AAAA,MACN,OAAA;AAAA,MAEA,QAAA,kBAAAL,cAAA;AAAA,QAACM,8BAAA;AAAA,QAAA;AAAA,UACA,MAAA,EACC,aACG,CAACC,8BAAA,CAAwB,IAAI,CAAA,GAC7B,CAACA,+BAAwB,EAAE,CAAA;AAAA,UAG/B,QAAA,kBAAAC,eAAA;AAAA,YAACC,2BAAA;AAAA,YAAA;AAAA,cACA,EAAA,EAAI,KAAA;AAAA,cACJ,IAAA,EACC,UAAA,GACGF,8BAAA,CAAwB,EAAA,GACxBA,8BAAA,CAAwB,IAAA;AAAA,cAG3B,QAAA,EAAA;AAAA,gBAAA,cAAA,IAAkB,CAACG,cAAA,CAAQ,OAAO,CAAA,oBAClCV,cAAA;AAAA,kBAACW,yCAAA;AAAA,kBAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA,EAAW,QAAA;AAAA,oBACX,OAAA,EAAS;AAAA;AAAA,iBACV;AAAA,gBAEA,IAAA,mBACAX,cAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA,mBAEVA,cAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,gBAAA,EAAkB,GAAA,EAAK,QAAA,EACpC,QAAA,EAAA,KAAA,EACF;AAAA;AAAA;AAAA;AAEF;AAAA;AACD,KAAA;AAAA,IAlDK,GAAG,KAAK,CAAA;AAAA,GAmDd;AAEF;AAEO,MAAM,cAAA,GAAiB","file":"DataHeaderCell.js","sourcesContent":["import type { HeaderContext } from \"@tanstack/react-table\";\nimport {\n\tScorecardDraggableItems,\n\ttype ScorecardLegend,\n\ttype ScorecardTableData,\n} from \"../../../../../schemas/config\";\nimport { DataTableColumnHeader, type DataTableSortDirection } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { DraggableCell } from \"../../DraggableCell\";\nimport DroppableCell from \"../../DroppableCell\";\nimport { useScorecardViewStateValue } from \"../../../../../utils\";\nimport { useBoolean } from \"usehooks-ts\";\nimport { useRef } from \"react\";\nimport { DataHeaderLegendView } from \"./DataHeaderLegendView\";\nimport { isEmpty } from \"lodash\";\n\nexport function EmptyDataHeaderCell({\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst colSpan = header.colSpan.toString();\n\treturn <DataTableColumnHeader colSpan={colSpan} />;\n}\n\nexport function DataHeaderCellComponent({\n\tcolumn,\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst dataInRows = useScorecardViewStateValue<boolean>(\"showDataInRows\");\n\tconst labelRef = useRef<HTMLElement>(null);\n\tconst label =\n\t\t(\n\t\t\theader.column.columnDef.meta as {\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: { id: string };\n\t\t\t}\n\t\t).label ?? (column.columnDef.meta as { label: string }).label;\n\n\tconst bold =\n\t\t(header.column.columnDef.meta as { bold?: boolean }).bold ??\n\t\t(column.columnDef.meta as { bold?: boolean }).bold;\n\n\tconst colSpan = header.colSpan.toString();\n\tconst { value: openLegendView, toggle: toggleLegendView } =\n\t\tuseBoolean(false);\n\n\tconst sortDirection = !column?.getIsSorted()\n\t\t? \"default\"\n\t\t: (column!.getIsSorted() as DataTableSortDirection);\n\tconst nextSortType =\n\t\tcolumn?.getNextSortingOrder() === \"asc\"\n\t\t\t? i18n.t(\"in ascending order\")\n\t\t\t: column?.getNextSortingOrder() === \"desc\"\n\t\t\t\t? i18n.t(\"in descending order\")\n\t\t\t\t: i18n.t(\"disable\");\n\n\tconst legends = (\n\t\theader.column.columnDef.meta as {\n\t\t\tlegends: Array<{\n\t\t\t\tid: string;\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: ScorecardLegend[];\n\t\t\t}>;\n\t\t}\n\t)?.legends;\n\n\tconsole.log(openLegendView, legends, labelRef.current);\n\n\treturn (\n\t\t<DataTableColumnHeader\n\t\t\tkey={`${label}`}\n\t\t\tsortIconTitle={i18n.t(\"Sort {{nextSortType}}\", { nextSortType })}\n\t\t\tonSortIconClick={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? (_, e) => {\n\t\t\t\t\t\t\tconst sort = column!.getToggleSortingHandler();\n\t\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\t\tsort(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tsortDirection={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? sortDirection\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={colSpan}\n\t\t>\n\t\t\t<DroppableCell\n\t\t\t\taccept={\n\t\t\t\t\tdataInRows\n\t\t\t\t\t\t? [ScorecardDraggableItems.data]\n\t\t\t\t\t\t: [ScorecardDraggableItems.ou]\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<DraggableCell\n\t\t\t\t\tid={label}\n\t\t\t\t\ttype={\n\t\t\t\t\t\tdataInRows\n\t\t\t\t\t\t\t? ScorecardDraggableItems.ou\n\t\t\t\t\t\t\t: ScorecardDraggableItems.data\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{openLegendView && !isEmpty(legends) && (\n\t\t\t\t\t\t<DataHeaderLegendView\n\t\t\t\t\t\t\tlegends={legends}\n\t\t\t\t\t\t\treference={labelRef}\n\t\t\t\t\t\t\tonClose={toggleLegendView}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{bold ? (\n\t\t\t\t\t\t<b>{label}</b>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span onClick={toggleLegendView} ref={labelRef}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</DraggableCell>\n\t\t\t</DroppableCell>\n\t\t</DataTableColumnHeader>\n\t);\n}\n\nexport const DataHeaderCell = DataHeaderCellComponent;\n"]}
1
+ {"version":3,"sources":["../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":["jsx","DataTableColumnHeader","Tooltip","i18n","useScorecardViewStateValue","useRef","useBoolean","DroppableCell","ScorecardDraggableItems","jsxs","DraggableCell","isEmpty","DataHeaderLegendView"],"mappings":"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","file":"DataHeaderCell.js","sourcesContent":["import type { HeaderContext } from \"@tanstack/react-table\";\nimport {\n\tScorecardDraggableItems,\n\ttype ScorecardLegend,\n\ttype ScorecardTableData,\n} from \"../../../../../schemas/config\";\nimport {\n\tDataTableColumnHeader,\n\ttype DataTableSortDirection,\n\tTooltip,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { DraggableCell } from \"../../DraggableCell\";\nimport DroppableCell from \"../../DroppableCell\";\nimport { useScorecardViewStateValue } from \"../../../../../utils\";\nimport { useBoolean } from \"usehooks-ts\";\nimport { useRef } from \"react\";\nimport { DataHeaderLegendView } from \"./DataHeaderLegendView\";\nimport { isEmpty } from \"lodash\";\n\nexport function EmptyDataHeaderCell({\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst colSpan = header.colSpan.toString();\n\treturn <DataTableColumnHeader colSpan={colSpan} />;\n}\n\nfunction SpecificTargetsIndicator({\n\tlegends,\n}: {\n\tlegends?: Array<{ specificTargetsSet?: boolean | undefined }>;\n}) {\n\tconst hasSpecificTargets = legends?.some(\n\t\t({ specificTargetsSet }) => specificTargetsSet === true,\n\t);\n\treturn hasSpecificTargets ? (\n\t\t<Tooltip\n\t\t\tcontent={i18n.t(\"This data item has specific targets configured\")}\n\t\t>\n\t\t\t*\n\t\t</Tooltip>\n\t) : null;\n}\n\nexport function DataHeaderCellComponent({\n\tcolumn,\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst dataInRows = useScorecardViewStateValue<boolean>(\"showDataInRows\");\n\tconst labelRef = useRef<HTMLElement>(null);\n\tconst label =\n\t\t(\n\t\t\theader.column.columnDef.meta as {\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: { id: string };\n\t\t\t}\n\t\t).label ?? (column.columnDef.meta as { label: string }).label;\n\n\tconst bold =\n\t\t(header.column.columnDef.meta as { bold?: boolean }).bold ??\n\t\t(column.columnDef.meta as { bold?: boolean }).bold;\n\n\tconst colSpan = header.colSpan.toString();\n\tconst { value: openLegendView, toggle: toggleLegendView } =\n\t\tuseBoolean(false);\n\n\tconst sortDirection = !column?.getIsSorted()\n\t\t? \"default\"\n\t\t: (column!.getIsSorted() as DataTableSortDirection);\n\tconst nextSortType =\n\t\tcolumn?.getNextSortingOrder() === \"asc\"\n\t\t\t? i18n.t(\"in ascending order\")\n\t\t\t: column?.getNextSortingOrder() === \"desc\"\n\t\t\t\t? i18n.t(\"in descending order\")\n\t\t\t\t: i18n.t(\"disable\");\n\n\tconst legends = (\n\t\theader.column.columnDef.meta as {\n\t\t\tlegends: Array<{\n\t\t\t\tid: string;\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: ScorecardLegend[];\n\t\t\t\tspecificTargetsSet?: boolean;\n\t\t\t}>;\n\t\t}\n\t)?.legends;\n\n\treturn (\n\t\t<DataTableColumnHeader\n\t\t\tkey={`${label}`}\n\t\t\tsortIconTitle={i18n.t(\"Sort {{nextSortType}}\", { nextSortType })}\n\t\t\tonSortIconClick={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? (_, e) => {\n\t\t\t\t\t\t\tconst sort = column!.getToggleSortingHandler();\n\t\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\t\tsort(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tsortDirection={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? sortDirection\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={colSpan}\n\t\t>\n\t\t\t<DroppableCell\n\t\t\t\taccept={\n\t\t\t\t\tdataInRows\n\t\t\t\t\t\t? [ScorecardDraggableItems.data]\n\t\t\t\t\t\t: [ScorecardDraggableItems.ou]\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<DraggableCell\n\t\t\t\t\tid={label}\n\t\t\t\t\ttype={\n\t\t\t\t\t\tdataInRows\n\t\t\t\t\t\t\t? ScorecardDraggableItems.ou\n\t\t\t\t\t\t\t: ScorecardDraggableItems.data\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{openLegendView && !isEmpty(legends) && (\n\t\t\t\t\t\t<DataHeaderLegendView\n\t\t\t\t\t\t\tlegends={legends}\n\t\t\t\t\t\t\treference={labelRef}\n\t\t\t\t\t\t\tonClose={toggleLegendView}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{bold ? (\n\t\t\t\t\t\t<b>{label}</b>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span onClick={toggleLegendView} ref={labelRef}>\n\t\t\t\t\t\t\t{label}{\" \"}\n\t\t\t\t\t\t\t<SpecificTargetsIndicator legends={legends} />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</DraggableCell>\n\t\t\t</DroppableCell>\n\t\t</DataTableColumnHeader>\n\t);\n}\n\nexport const DataHeaderCell = DataHeaderCellComponent;\n"]}
@@ -25,8 +25,8 @@ function DataHeaderLegendView({
25
25
  flexDirection: "column",
26
26
  padding: 16
27
27
  },
28
- children: legends?.map(({ id, label, legends: legends2 }) => {
29
- if (!Array.isArray(legends2)) {
28
+ children: legends?.map(({ id, label, legends: legends2, specificTargetsSet }) => {
29
+ if (specificTargetsSet) {
30
30
  return /* @__PURE__ */ jsxRuntime.jsxs(
31
31
  "div",
32
32
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":["isEmpty","jsx","Popover","legends","jsxs","colors","i18n","LegendsView"],"mappings":";;;;;;;;;;;;AAOO,SAAS,oBAAA,CAAqB;AAAA,EACpC,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EAQG;AACF,EAAA,IAAIA,cAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,uBACCC,cAAA,CAACC,UAAA,EAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,SAAA,EACjC,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,EAAA;AAAA,QACL,aAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS;AAAA,OACV;AAAA,MAEC,QAAA,EAAA,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,KAAA,EAAO,OAAA,EAAAE,UAAQ,KAAM;AACzC,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQA,QAAO,CAAA,EAAG;AAC5B,UAAA,uBACCC,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,GAAA,EAAK;AAAA,eACN;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAH,cAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCACnCA,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAO;AAAA,sBACN,OAAOI,SAAA,CAAO,OAAA;AAAA,sBACd,QAAA,EAAU;AAAA,qBACX;AAAA,oBAEC,QAAA,EAAAC,qBAAA,CAAK,CAAA;AAAA,sBACL;AAAA;AACD;AAAA;AACD;AAAA;AAAA,WACD;AAAA,QAEF;AAEA,QAAA,uBACCF,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,GAAA,EAAK;AAAA,aACN;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACnCA,cAAA,CAACM,sBAAA,EAAA,EAAY,OAAA,EAASJ,QAAAA,EAAS;AAAA;AAAA,WAAA;AAAA,UAH1B,GAAG,EAAE,CAAA,YAAA;AAAA,SAIX;AAAA,MAEF,CAAC;AAAA;AAAA,GACF,EACD,CAAA;AAEF","file":"DataHeaderLegendView.js","sourcesContent":["import type { ScorecardLegend } from \"../../../../../schemas/config\";\nimport { colors, Popover } from \"@dhis2/ui\";\nimport type { RefObject } from \"react\";\nimport { LegendsView } from \"../../../../ScorecardLegendsView/components/LegendView\";\nimport { isEmpty } from \"lodash\";\nimport i18n from \"@dhis2/d2-i18n\";\n\nexport function DataHeaderLegendView({\n\tlegends,\n\treference,\n\tonClose,\n}: {\n\tlegends: Array<{\n\t\tid: string;\n\t\tlabel: string;\n\t\tlegends: Array<ScorecardLegend>;\n\t}>;\n\treference: RefObject<HTMLElement>;\n\tonClose: () => void;\n}) {\n\tif (isEmpty(legends)) return null;\n\n\treturn (\n\t\t<Popover onClickOutside={onClose} reference={reference}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: 16,\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\tpadding: 16,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{legends?.map(({ id, label, legends }) => {\n\t\t\t\t\tif (!Array.isArray(legends)) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: colors.grey700,\n\t\t\t\t\t\t\t\t\t\tfontSize: 12,\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\t\t{i18n.t(\n\t\t\t\t\t\t\t\t\t\t\"This data item has been configured with specific targets. Open the specific targets menu to learn more\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={`${id}-legend-view`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t<LegendsView legends={legends} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Popover>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":["isEmpty","jsx","Popover","legends","jsxs","colors","i18n","LegendsView"],"mappings":";;;;;;;;;;;;AAOO,SAAS,oBAAA,CAAqB;AAAA,EACpC,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EASG;AACF,EAAA,IAAIA,cAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,uBACCC,cAAA,CAACC,UAAA,EAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,SAAA,EACjC,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,EAAA;AAAA,QACL,aAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS;AAAA,OACV;AAAA,MAEC,QAAA,EAAA,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,KAAA,EAAO,OAAA,EAAAE,QAAAA,EAAS,kBAAA,EAAmB,KAAM;AAC7D,QAAA,IAAI,kBAAA,EAAoB;AACvB,UAAA,uBACCC,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,GAAA,EAAK;AAAA,eACN;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAH,cAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCACnCA,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAO;AAAA,sBACN,OAAOI,SAAA,CAAO,OAAA;AAAA,sBACd,QAAA,EAAU;AAAA,qBACX;AAAA,oBAEC,QAAA,EAAAC,qBAAA,CAAK,CAAA;AAAA,sBACL;AAAA;AACD;AAAA;AACD;AAAA;AAAA,WACD;AAAA,QAEF;AAEA,QAAA,uBACCF,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,GAAA,EAAK;AAAA,aACN;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAAH,cAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACnCA,cAAA,CAACM,sBAAA,EAAA,EAAY,OAAA,EAASJ,QAAAA,EAAS;AAAA;AAAA,WAAA;AAAA,UAH1B,GAAG,EAAE,CAAA,YAAA;AAAA,SAIX;AAAA,MAEF,CAAC;AAAA;AAAA,GACF,EACD,CAAA;AAEF","file":"DataHeaderLegendView.js","sourcesContent":["import type { ScorecardLegend } from \"../../../../../schemas/config\";\nimport { colors, Popover } from \"@dhis2/ui\";\nimport type { RefObject } from \"react\";\nimport { LegendsView } from \"../../../../ScorecardLegendsView/components/LegendView\";\nimport { isEmpty } from \"lodash\";\nimport i18n from \"@dhis2/d2-i18n\";\n\nexport function DataHeaderLegendView({\n\tlegends,\n\treference,\n\tonClose,\n}: {\n\tlegends: Array<{\n\t\tid: string;\n\t\tlabel: string;\n\t\tlegends: Array<ScorecardLegend>;\n\t\tspecificTargetsSet?: boolean;\n\t}>;\n\treference: RefObject<HTMLElement>;\n\tonClose: () => void;\n}) {\n\tif (isEmpty(legends)) return null;\n\n\treturn (\n\t\t<Popover onClickOutside={onClose} reference={reference}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: 16,\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\tpadding: 16,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{legends?.map(({ id, label, legends, specificTargetsSet }) => {\n\t\t\t\t\tif (specificTargetsSet) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: colors.grey700,\n\t\t\t\t\t\t\t\t\t\tfontSize: 12,\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\t\t{i18n.t(\n\t\t\t\t\t\t\t\t\t\t\"This data item has been configured with specific targets. Open the specific targets menu to learn more\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={`${id}-legend-view`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t<LegendsView legends={legends} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Popover>\n\t);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { ScorecardDraggableItems } from '../../../../../schemas/config';
3
- import { DataTableColumnHeader } from '@dhis2/ui';
3
+ import { DataTableColumnHeader, Tooltip } from '@dhis2/ui';
4
4
  import i18n from '@dhis2/d2-i18n';
5
5
  import { DraggableCell } from '../../DraggableCell';
6
6
  import DroppableCell from '../../DroppableCell';
@@ -16,6 +16,20 @@ function EmptyDataHeaderCell({
16
16
  const colSpan = header.colSpan.toString();
17
17
  return /* @__PURE__ */ jsx(DataTableColumnHeader, { colSpan });
18
18
  }
19
+ function SpecificTargetsIndicator({
20
+ legends
21
+ }) {
22
+ const hasSpecificTargets = legends?.some(
23
+ ({ specificTargetsSet }) => specificTargetsSet === true
24
+ );
25
+ return hasSpecificTargets ? /* @__PURE__ */ jsx(
26
+ Tooltip,
27
+ {
28
+ content: i18n.t("This data item has specific targets configured"),
29
+ children: "*"
30
+ }
31
+ ) : null;
32
+ }
19
33
  function DataHeaderCellComponent({
20
34
  column,
21
35
  header
@@ -29,7 +43,6 @@ function DataHeaderCellComponent({
29
43
  const sortDirection = !column?.getIsSorted() ? "default" : column.getIsSorted();
30
44
  const nextSortType = column?.getNextSortingOrder() === "asc" ? i18n.t("in ascending order") : column?.getNextSortingOrder() === "desc" ? i18n.t("in descending order") : i18n.t("disable");
31
45
  const legends = header.column.columnDef.meta?.legends;
32
- console.log(openLegendView, legends, labelRef.current);
33
46
  return /* @__PURE__ */ jsx(
34
47
  DataTableColumnHeader,
35
48
  {
@@ -61,7 +74,11 @@ function DataHeaderCellComponent({
61
74
  onClose: toggleLegendView
62
75
  }
63
76
  ),
64
- bold ? /* @__PURE__ */ jsx("b", { children: label }) : /* @__PURE__ */ jsx("span", { onClick: toggleLegendView, ref: labelRef, children: label })
77
+ bold ? /* @__PURE__ */ jsx("b", { children: label }) : /* @__PURE__ */ jsxs("span", { onClick: toggleLegendView, ref: labelRef, children: [
78
+ label,
79
+ " ",
80
+ /* @__PURE__ */ jsx(SpecificTargetsIndicator, { legends })
81
+ ] })
65
82
  ]
66
83
  }
67
84
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAgBO,SAAS,mBAAA,CAAoB;AAAA,EACnC;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAS;AACxC,EAAA,uBAAO,GAAA,CAAC,yBAAsB,OAAA,EAAkB,CAAA;AACjD;AAEO,SAAS,uBAAA,CAAwB;AAAA,EACvC,MAAA;AAAA,EACA;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,UAAA,GAAa,2BAAoC,gBAAgB,CAAA;AACvE,EAAA,MAAM,QAAA,GAAW,OAAoB,IAAI,CAAA;AACzC,EAAA,MAAM,KAAA,GAEJ,OAAO,MAAA,CAAO,SAAA,CAAU,KAIvB,KAAA,IAAU,MAAA,CAAO,UAAU,IAAA,CAA2B,KAAA;AAEzD,EAAA,MAAM,IAAA,GACJ,OAAO,MAAA,CAAO,SAAA,CAAU,KAA4B,IAAA,IACpD,MAAA,CAAO,UAAU,IAAA,CAA4B,IAAA;AAE/C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAS;AACxC,EAAA,MAAM,EAAE,KAAA,EAAO,cAAA,EAAgB,QAAQ,gBAAA,EAAiB,GACvD,WAAW,KAAK,CAAA;AAEjB,EAAA,MAAM,gBAAgB,CAAC,MAAA,EAAQ,aAAY,GACxC,SAAA,GACC,OAAQ,WAAA,EAAY;AACxB,EAAA,MAAM,eACL,MAAA,EAAQ,mBAAA,OAA0B,KAAA,GAC/B,IAAA,CAAK,EAAE,oBAAoB,CAAA,GAC3B,QAAQ,mBAAA,EAAoB,KAAM,SACjC,IAAA,CAAK,CAAA,CAAE,qBAAqB,CAAA,GAC5B,IAAA,CAAK,EAAE,SAAS,CAAA;AAErB,EAAA,MAAM,OAAA,GACL,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,IAAA,EAOtB,OAAA;AAEH,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,OAAA,EAAS,QAAA,CAAS,OAAO,CAAA;AAErD,EAAA,uBACC,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MAEA,eAAe,IAAA,CAAK,CAAA,CAAE,uBAAA,EAAyB,EAAE,cAAc,CAAA;AAAA,MAC/D,eAAA,EACC,MAAA,CAAO,MAAA,EAAQ,UAAA,EAAW,IAAK,OAAO,UAAA,EAAW,GAC9C,CAAC,CAAA,EAAG,CAAA,KAAM;AACV,QAAA,MAAM,IAAA,GAAO,OAAQ,uBAAA,EAAwB;AAC7C,QAAA,IAAI,IAAA,EAAM;AACT,UAAA,IAAA,CAAK,CAAC,CAAA;AAAA,QACP;AAAA,MACD,CAAA,GACC,MAAA;AAAA,MAEJ,aAAA,EACC,OAAO,MAAA,EAAQ,UAAA,MAAgB,MAAA,CAAO,UAAA,KACnC,aAAA,GACA,MAAA;AAAA,MAEJ,KAAA,EAAM,QAAA;AAAA,MACN,OAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACA,MAAA,EACC,aACG,CAAC,uBAAA,CAAwB,IAAI,CAAA,GAC7B,CAAC,wBAAwB,EAAE,CAAA;AAAA,UAG/B,QAAA,kBAAA,IAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACA,EAAA,EAAI,KAAA;AAAA,cACJ,IAAA,EACC,UAAA,GACG,uBAAA,CAAwB,EAAA,GACxB,uBAAA,CAAwB,IAAA;AAAA,cAG3B,QAAA,EAAA;AAAA,gBAAA,cAAA,IAAkB,CAAC,OAAA,CAAQ,OAAO,CAAA,oBAClC,GAAA;AAAA,kBAAC,oBAAA;AAAA,kBAAA;AAAA,oBACA,OAAA;AAAA,oBACA,SAAA,EAAW,QAAA;AAAA,oBACX,OAAA,EAAS;AAAA;AAAA,iBACV;AAAA,gBAEA,IAAA,mBACA,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA,mBAEV,GAAA,CAAC,MAAA,EAAA,EAAK,OAAA,EAAS,gBAAA,EAAkB,GAAA,EAAK,QAAA,EACpC,QAAA,EAAA,KAAA,EACF;AAAA;AAAA;AAAA;AAEF;AAAA;AACD,KAAA;AAAA,IAlDK,GAAG,KAAK,CAAA;AAAA,GAmDd;AAEF;AAEO,MAAM,cAAA,GAAiB","file":"DataHeaderCell.js","sourcesContent":["import type { HeaderContext } from \"@tanstack/react-table\";\nimport {\n\tScorecardDraggableItems,\n\ttype ScorecardLegend,\n\ttype ScorecardTableData,\n} from \"../../../../../schemas/config\";\nimport { DataTableColumnHeader, type DataTableSortDirection } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { DraggableCell } from \"../../DraggableCell\";\nimport DroppableCell from \"../../DroppableCell\";\nimport { useScorecardViewStateValue } from \"../../../../../utils\";\nimport { useBoolean } from \"usehooks-ts\";\nimport { useRef } from \"react\";\nimport { DataHeaderLegendView } from \"./DataHeaderLegendView\";\nimport { isEmpty } from \"lodash\";\n\nexport function EmptyDataHeaderCell({\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst colSpan = header.colSpan.toString();\n\treturn <DataTableColumnHeader colSpan={colSpan} />;\n}\n\nexport function DataHeaderCellComponent({\n\tcolumn,\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst dataInRows = useScorecardViewStateValue<boolean>(\"showDataInRows\");\n\tconst labelRef = useRef<HTMLElement>(null);\n\tconst label =\n\t\t(\n\t\t\theader.column.columnDef.meta as {\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: { id: string };\n\t\t\t}\n\t\t).label ?? (column.columnDef.meta as { label: string }).label;\n\n\tconst bold =\n\t\t(header.column.columnDef.meta as { bold?: boolean }).bold ??\n\t\t(column.columnDef.meta as { bold?: boolean }).bold;\n\n\tconst colSpan = header.colSpan.toString();\n\tconst { value: openLegendView, toggle: toggleLegendView } =\n\t\tuseBoolean(false);\n\n\tconst sortDirection = !column?.getIsSorted()\n\t\t? \"default\"\n\t\t: (column!.getIsSorted() as DataTableSortDirection);\n\tconst nextSortType =\n\t\tcolumn?.getNextSortingOrder() === \"asc\"\n\t\t\t? i18n.t(\"in ascending order\")\n\t\t\t: column?.getNextSortingOrder() === \"desc\"\n\t\t\t\t? i18n.t(\"in descending order\")\n\t\t\t\t: i18n.t(\"disable\");\n\n\tconst legends = (\n\t\theader.column.columnDef.meta as {\n\t\t\tlegends: Array<{\n\t\t\t\tid: string;\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: ScorecardLegend[];\n\t\t\t}>;\n\t\t}\n\t)?.legends;\n\n\tconsole.log(openLegendView, legends, labelRef.current);\n\n\treturn (\n\t\t<DataTableColumnHeader\n\t\t\tkey={`${label}`}\n\t\t\tsortIconTitle={i18n.t(\"Sort {{nextSortType}}\", { nextSortType })}\n\t\t\tonSortIconClick={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? (_, e) => {\n\t\t\t\t\t\t\tconst sort = column!.getToggleSortingHandler();\n\t\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\t\tsort(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tsortDirection={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? sortDirection\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={colSpan}\n\t\t>\n\t\t\t<DroppableCell\n\t\t\t\taccept={\n\t\t\t\t\tdataInRows\n\t\t\t\t\t\t? [ScorecardDraggableItems.data]\n\t\t\t\t\t\t: [ScorecardDraggableItems.ou]\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<DraggableCell\n\t\t\t\t\tid={label}\n\t\t\t\t\ttype={\n\t\t\t\t\t\tdataInRows\n\t\t\t\t\t\t\t? ScorecardDraggableItems.ou\n\t\t\t\t\t\t\t: ScorecardDraggableItems.data\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{openLegendView && !isEmpty(legends) && (\n\t\t\t\t\t\t<DataHeaderLegendView\n\t\t\t\t\t\t\tlegends={legends}\n\t\t\t\t\t\t\treference={labelRef}\n\t\t\t\t\t\t\tonClose={toggleLegendView}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{bold ? (\n\t\t\t\t\t\t<b>{label}</b>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span onClick={toggleLegendView} ref={labelRef}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</DraggableCell>\n\t\t\t</DroppableCell>\n\t\t</DataTableColumnHeader>\n\t);\n}\n\nexport const DataHeaderCell = DataHeaderCellComponent;\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":[],"mappings":"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","file":"DataHeaderCell.js","sourcesContent":["import type { HeaderContext } from \"@tanstack/react-table\";\nimport {\n\tScorecardDraggableItems,\n\ttype ScorecardLegend,\n\ttype ScorecardTableData,\n} from \"../../../../../schemas/config\";\nimport {\n\tDataTableColumnHeader,\n\ttype DataTableSortDirection,\n\tTooltip,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { DraggableCell } from \"../../DraggableCell\";\nimport DroppableCell from \"../../DroppableCell\";\nimport { useScorecardViewStateValue } from \"../../../../../utils\";\nimport { useBoolean } from \"usehooks-ts\";\nimport { useRef } from \"react\";\nimport { DataHeaderLegendView } from \"./DataHeaderLegendView\";\nimport { isEmpty } from \"lodash\";\n\nexport function EmptyDataHeaderCell({\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst colSpan = header.colSpan.toString();\n\treturn <DataTableColumnHeader colSpan={colSpan} />;\n}\n\nfunction SpecificTargetsIndicator({\n\tlegends,\n}: {\n\tlegends?: Array<{ specificTargetsSet?: boolean | undefined }>;\n}) {\n\tconst hasSpecificTargets = legends?.some(\n\t\t({ specificTargetsSet }) => specificTargetsSet === true,\n\t);\n\treturn hasSpecificTargets ? (\n\t\t<Tooltip\n\t\t\tcontent={i18n.t(\"This data item has specific targets configured\")}\n\t\t>\n\t\t\t*\n\t\t</Tooltip>\n\t) : null;\n}\n\nexport function DataHeaderCellComponent({\n\tcolumn,\n\theader,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst dataInRows = useScorecardViewStateValue<boolean>(\"showDataInRows\");\n\tconst labelRef = useRef<HTMLElement>(null);\n\tconst label =\n\t\t(\n\t\t\theader.column.columnDef.meta as {\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: { id: string };\n\t\t\t}\n\t\t).label ?? (column.columnDef.meta as { label: string }).label;\n\n\tconst bold =\n\t\t(header.column.columnDef.meta as { bold?: boolean }).bold ??\n\t\t(column.columnDef.meta as { bold?: boolean }).bold;\n\n\tconst colSpan = header.colSpan.toString();\n\tconst { value: openLegendView, toggle: toggleLegendView } =\n\t\tuseBoolean(false);\n\n\tconst sortDirection = !column?.getIsSorted()\n\t\t? \"default\"\n\t\t: (column!.getIsSorted() as DataTableSortDirection);\n\tconst nextSortType =\n\t\tcolumn?.getNextSortingOrder() === \"asc\"\n\t\t\t? i18n.t(\"in ascending order\")\n\t\t\t: column?.getNextSortingOrder() === \"desc\"\n\t\t\t\t? i18n.t(\"in descending order\")\n\t\t\t\t: i18n.t(\"disable\");\n\n\tconst legends = (\n\t\theader.column.columnDef.meta as {\n\t\t\tlegends: Array<{\n\t\t\t\tid: string;\n\t\t\t\tlabel: string;\n\t\t\t\tlegends: ScorecardLegend[];\n\t\t\t\tspecificTargetsSet?: boolean;\n\t\t\t}>;\n\t\t}\n\t)?.legends;\n\n\treturn (\n\t\t<DataTableColumnHeader\n\t\t\tkey={`${label}`}\n\t\t\tsortIconTitle={i18n.t(\"Sort {{nextSortType}}\", { nextSortType })}\n\t\t\tonSortIconClick={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? (_, e) => {\n\t\t\t\t\t\t\tconst sort = column!.getToggleSortingHandler();\n\t\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\t\tsort(e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\tsortDirection={\n\t\t\t\theader.column?.getCanSort() || column.getCanSort()\n\t\t\t\t\t? sortDirection\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={colSpan}\n\t\t>\n\t\t\t<DroppableCell\n\t\t\t\taccept={\n\t\t\t\t\tdataInRows\n\t\t\t\t\t\t? [ScorecardDraggableItems.data]\n\t\t\t\t\t\t: [ScorecardDraggableItems.ou]\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<DraggableCell\n\t\t\t\t\tid={label}\n\t\t\t\t\ttype={\n\t\t\t\t\t\tdataInRows\n\t\t\t\t\t\t\t? ScorecardDraggableItems.ou\n\t\t\t\t\t\t\t: ScorecardDraggableItems.data\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{openLegendView && !isEmpty(legends) && (\n\t\t\t\t\t\t<DataHeaderLegendView\n\t\t\t\t\t\t\tlegends={legends}\n\t\t\t\t\t\t\treference={labelRef}\n\t\t\t\t\t\t\tonClose={toggleLegendView}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{bold ? (\n\t\t\t\t\t\t<b>{label}</b>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span onClick={toggleLegendView} ref={labelRef}>\n\t\t\t\t\t\t\t{label}{\" \"}\n\t\t\t\t\t\t\t<SpecificTargetsIndicator legends={legends} />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</DraggableCell>\n\t\t\t</DroppableCell>\n\t\t</DataTableColumnHeader>\n\t);\n}\n\nexport const DataHeaderCell = DataHeaderCellComponent;\n"]}
@@ -19,8 +19,8 @@ function DataHeaderLegendView({
19
19
  flexDirection: "column",
20
20
  padding: 16
21
21
  },
22
- children: legends?.map(({ id, label, legends: legends2 }) => {
23
- if (!Array.isArray(legends2)) {
22
+ children: legends?.map(({ id, label, legends: legends2, specificTargetsSet }) => {
23
+ if (specificTargetsSet) {
24
24
  return /* @__PURE__ */ jsxs(
25
25
  "div",
26
26
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":["legends"],"mappings":";;;;;;AAOO,SAAS,oBAAA,CAAqB;AAAA,EACpC,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EAQG;AACF,EAAA,IAAI,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,uBACC,GAAA,CAAC,OAAA,EAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,SAAA,EACjC,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,EAAA;AAAA,QACL,aAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS;AAAA,OACV;AAAA,MAEC,QAAA,EAAA,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,KAAA,EAAO,OAAA,EAAAA,UAAQ,KAAM;AACzC,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQA,QAAO,CAAA,EAAG;AAC5B,UAAA,uBACC,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,GAAA,EAAK;AAAA,eACN;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCACnC,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAO;AAAA,sBACN,OAAO,MAAA,CAAO,OAAA;AAAA,sBACd,QAAA,EAAU;AAAA,qBACX;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK,CAAA;AAAA,sBACL;AAAA;AACD;AAAA;AACD;AAAA;AAAA,WACD;AAAA,QAEF;AAEA,QAAA,uBACC,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,GAAA,EAAK;AAAA,aACN;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACnC,GAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAASA,QAAAA,EAAS;AAAA;AAAA,WAAA;AAAA,UAH1B,GAAG,EAAE,CAAA,YAAA;AAAA,SAIX;AAAA,MAEF,CAAC;AAAA;AAAA,GACF,EACD,CAAA;AAEF","file":"DataHeaderLegendView.js","sourcesContent":["import type { ScorecardLegend } from \"../../../../../schemas/config\";\nimport { colors, Popover } from \"@dhis2/ui\";\nimport type { RefObject } from \"react\";\nimport { LegendsView } from \"../../../../ScorecardLegendsView/components/LegendView\";\nimport { isEmpty } from \"lodash\";\nimport i18n from \"@dhis2/d2-i18n\";\n\nexport function DataHeaderLegendView({\n\tlegends,\n\treference,\n\tonClose,\n}: {\n\tlegends: Array<{\n\t\tid: string;\n\t\tlabel: string;\n\t\tlegends: Array<ScorecardLegend>;\n\t}>;\n\treference: RefObject<HTMLElement>;\n\tonClose: () => void;\n}) {\n\tif (isEmpty(legends)) return null;\n\n\treturn (\n\t\t<Popover onClickOutside={onClose} reference={reference}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: 16,\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\tpadding: 16,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{legends?.map(({ id, label, legends }) => {\n\t\t\t\t\tif (!Array.isArray(legends)) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: colors.grey700,\n\t\t\t\t\t\t\t\t\t\tfontSize: 12,\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\t\t{i18n.t(\n\t\t\t\t\t\t\t\t\t\t\"This data item has been configured with specific targets. Open the specific targets menu to learn more\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={`${id}-legend-view`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t<LegendsView legends={legends} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Popover>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":["legends"],"mappings":";;;;;;AAOO,SAAS,oBAAA,CAAqB;AAAA,EACpC,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EASG;AACF,EAAA,IAAI,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,IAAA;AAE7B,EAAA,uBACC,GAAA,CAAC,OAAA,EAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,SAAA,EACjC,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,EAAA;AAAA,QACL,aAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS;AAAA,OACV;AAAA,MAEC,QAAA,EAAA,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,KAAA,EAAO,OAAA,EAAAA,QAAAA,EAAS,kBAAA,EAAmB,KAAM;AAC7D,QAAA,IAAI,kBAAA,EAAoB;AACvB,UAAA,uBACC,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,GAAA,EAAK;AAAA,eACN;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCACnC,GAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACA,KAAA,EAAO;AAAA,sBACN,OAAO,MAAA,CAAO,OAAA;AAAA,sBACd,QAAA,EAAU;AAAA,qBACX;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK,CAAA;AAAA,sBACL;AAAA;AACD;AAAA;AACD;AAAA;AAAA,WACD;AAAA,QAEF;AAEA,QAAA,uBACC,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,GAAA,EAAK;AAAA,aACN;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,OAAE,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BACnC,GAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAASA,QAAAA,EAAS;AAAA;AAAA,WAAA;AAAA,UAH1B,GAAG,EAAE,CAAA,YAAA;AAAA,SAIX;AAAA,MAEF,CAAC;AAAA;AAAA,GACF,EACD,CAAA;AAEF","file":"DataHeaderLegendView.js","sourcesContent":["import type { ScorecardLegend } from \"../../../../../schemas/config\";\nimport { colors, Popover } from \"@dhis2/ui\";\nimport type { RefObject } from \"react\";\nimport { LegendsView } from \"../../../../ScorecardLegendsView/components/LegendView\";\nimport { isEmpty } from \"lodash\";\nimport i18n from \"@dhis2/d2-i18n\";\n\nexport function DataHeaderLegendView({\n\tlegends,\n\treference,\n\tonClose,\n}: {\n\tlegends: Array<{\n\t\tid: string;\n\t\tlabel: string;\n\t\tlegends: Array<ScorecardLegend>;\n\t\tspecificTargetsSet?: boolean;\n\t}>;\n\treference: RefObject<HTMLElement>;\n\tonClose: () => void;\n}) {\n\tif (isEmpty(legends)) return null;\n\n\treturn (\n\t\t<Popover onClickOutside={onClose} reference={reference}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tgap: 16,\n\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\tpadding: 16,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{legends?.map(({ id, label, legends, specificTargetsSet }) => {\n\t\t\t\t\tif (specificTargetsSet) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: colors.grey700,\n\t\t\t\t\t\t\t\t\t\tfontSize: 12,\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\t\t{i18n.t(\n\t\t\t\t\t\t\t\t\t\t\"This data item has been configured with specific targets. Open the specific targets menu to learn more\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tkey={`${id}-legend-view`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<b style={{ fontSize: 14 }}>{label}</b>\n\t\t\t\t\t\t\t<LegendsView legends={legends} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</Popover>\n\t);\n}\n"]}
@@ -164,11 +164,14 @@ function getDataHolderColumn({
164
164
  (acc, { label }, index) => index === 0 ? `${label}` : `${acc} / ${label}`,
165
165
  ""
166
166
  );
167
- const legends = dataSources.map(({ legends: legends2, id: id2, label }) => ({
168
- id: id2,
169
- label,
170
- legends: legends2
171
- }));
167
+ const legends = dataSources.map(
168
+ ({ legends: legends2, id: id2, label, specificTargetsSet }) => ({
169
+ id: id2,
170
+ label,
171
+ legends: legends2,
172
+ specificTargetsSet
173
+ })
174
+ );
172
175
  if (hasOnePeriod) {
173
176
  return columnHelper.accessor(
174
177
  (rowData) => {
@@ -243,7 +246,8 @@ function getDataHolderColumn({
243
246
  )
244
247
  ),
245
248
  meta: {
246
- label: header
249
+ label: header,
250
+ legends
247
251
  },
248
252
  header: DataHeaderCell,
249
253
  enableSorting: true,
@@ -1 +1 @@
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(({ legends, id, label }) => ({\n\t\tid,\n\t\tlabel,\n\t\tlegends,\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},\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"]}
1
+ {"version":3,"sources":["../../../src/utils/columns.ts"],"names":["legends","id"],"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,UAAA,CAAW,qBAAA,EAAsB,EAAG;AACxC,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,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ;AAAA,KACzC,CAAA;AAED,IAAA,MAAM,aAAa,kBAAA,CAAmB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ;AAAA,KACzC,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,MAAM,UAAU,WAAA,CAAY,GAAA;AAAA,IAC3B,CAAC,EAAE,OAAA,EAAAA,QAAAA,EAAS,IAAAC,GAAAA,EAAI,KAAA,EAAO,oBAAmB,MAAO;AAAA,MAChD,EAAA,EAAAA,GAAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAAD,QAAAA;AAAA,MACA;AAAA,KACD;AAAA,GACD;AAEA,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,MAAA;AAAA,UACP;AAAA,SACD;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,MAAA;AAAA,MACP;AAAA,KACD;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,QACD,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.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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataHeaderCell.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAGN,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAWvC,wBAAgB,mBAAmB,CAAC,EACnC,MAAM,GACN,EAAE,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,2CAGxC;AAED,wBAAgB,uBAAuB,CAAC,EACvC,MAAM,EACN,MAAM,GACN,EAAE,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,2CAgGxC;AAED,eAAO,MAAM,cAAc,gCAA0B,CAAC"}
1
+ {"version":3,"file":"DataHeaderCell.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAGN,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAevC,wBAAgB,mBAAmB,CAAC,EACnC,MAAM,GACN,EAAE,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,2CAGxC;AAmBD,wBAAgB,uBAAuB,CAAC,EACvC,MAAM,EACN,MAAM,GACN,EAAE,aAAa,CAAC,kBAAkB,EAAE,GAAG,CAAC,2CAgGxC;AAED,eAAO,MAAM,cAAc,gCAA0B,CAAC"}
@@ -5,6 +5,7 @@ export declare function DataHeaderLegendView({ legends, reference, onClose, }: {
5
5
  id: string;
6
6
  label: string;
7
7
  legends: Array<ScorecardLegend>;
8
+ specificTargetsSet?: boolean;
8
9
  }>;
9
10
  reference: RefObject<HTMLElement>;
10
11
  onClose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DataHeaderLegendView.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,wBAAgB,oBAAoB,CAAC,EACpC,OAAO,EACP,SAAS,EACT,OAAO,GACP,EAAE;IACF,OAAO,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;KAChC,CAAC,CAAC;IACH,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB,kDAuDA"}
1
+ {"version":3,"file":"DataHeaderLegendView.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,wBAAgB,oBAAoB,CAAC,EACpC,OAAO,EACP,SAAS,EACT,OAAO,GACP,EAAE;IACF,OAAO,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC,CAAC;IACH,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB,kDAuDA"}
@@ -1 +1 @@
1
- {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/utils/columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,sBAAsB,EAEtB,eAAe,EAEf,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,KAAK,SAAS,EAGd,MAAM,uBAAuB,CAAC;AAY/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAKvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAgExD,wBAAgB,eAAe,CAAC,EAC/B,UAAU,EACV,IAAI,GACJ,EAAE;IACF,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,IAAI,EAAE,aAAa,CAAC;CACpB,UAOA;AAED,wBAAgB,SAAS,CAAC,EACzB,MAAM,EACN,aAAa,EACb,cAAc,GACd,EAAE;IACF,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;;;EAgBA;AAED,wBAAgB,uBAAuB,CAAC,EACvC,IAAI,EACJ,QAAQ,EACR,UAAU,GACV,EAAE;IACF,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;CAChC,GAAG,SAAS,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,EAAE,CAgD5D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACxB,GAAG,SAAS,CAAC,kBAAkB,EAAE,+BAA+B,CAAC,CAsBjE;AAoHD,wBAAgB,oBAAoB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,GACV,EAAE;IACF,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;CAChC,GAAG,SAAS,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,EAAE,CAmD5D"}
1
+ {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/utils/columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,sBAAsB,EAEtB,eAAe,EAEf,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,KAAK,SAAS,EAGd,MAAM,uBAAuB,CAAC;AAY/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAKvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAgExD,wBAAgB,eAAe,CAAC,EAC/B,UAAU,EACV,IAAI,GACJ,EAAE;IACF,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,IAAI,EAAE,aAAa,CAAC;CACpB,UAOA;AAED,wBAAgB,SAAS,CAAC,EACzB,MAAM,EACN,aAAa,EACb,cAAc,GACd,EAAE;IACF,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;;;EAgBA;AAED,wBAAgB,uBAAuB,CAAC,EACvC,IAAI,EACJ,QAAQ,EACR,UAAU,GACV,EAAE;IACF,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;CAChC,GAAG,SAAS,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,EAAE,CAgD5D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACxB,GAAG,SAAS,CAAC,kBAAkB,EAAE,+BAA+B,CAAC,CAsBjE;AAwHD,wBAAgB,oBAAoB,CAAC,EACpC,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,GACV,EAAE;IACF,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;CAChC,GAAG,SAAS,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,EAAE,CAmD5D"}
@@ -166,11 +166,14 @@ function getDataHolderColumn({
166
166
  (acc, { label }, index) => index === 0 ? `${label}` : `${acc} / ${label}`,
167
167
  ""
168
168
  );
169
- const legends = dataSources.map(({ legends: legends2, id: id2, label }) => ({
170
- id: id2,
171
- label,
172
- legends: legends2
173
- }));
169
+ const legends = dataSources.map(
170
+ ({ legends: legends2, id: id2, label, specificTargetsSet }) => ({
171
+ id: id2,
172
+ label,
173
+ legends: legends2,
174
+ specificTargetsSet
175
+ })
176
+ );
174
177
  if (hasOnePeriod) {
175
178
  return columnHelper.accessor(
176
179
  (rowData) => {
@@ -245,7 +248,8 @@ function getDataHolderColumn({
245
248
  )
246
249
  ),
247
250
  meta: {
248
- label: header
251
+ label: header,
252
+ legends
249
253
  },
250
254
  header: DataHeaderCell.DataHeaderCell,
251
255
  enableSorting: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/columns.ts"],"names":["createColumnHelper","head","sum","DataHeaderCell","getAdjacentFixedPeriods","createFixedPeriodFromPeriodId","DataContainer","DataFooterCell","AverageHeaderCell","AverageCell","AverageFooterCell","legends","id","EmptyDataHeaderCell"],"mappings":"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","file":"columns.js","sourcesContent":["import type { ScorecardMeta } from \"../components\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardCellData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\ttype ColumnDef,\n\tcreateColumnHelper,\n\ttype Row,\n} from \"@tanstack/react-table\";\nimport { head, sum } from \"lodash\";\nimport type { ItemMeta } from \"../hooks/metadata\";\nimport { DataContainer } from \"../components/ScorecardTable/components/DataContainer\";\nimport {\n\tDataHeaderCell,\n\tEmptyDataHeaderCell,\n} from \"../components/ScorecardTable/components/TableHeader/components/DataHeaderCell\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\nimport { AverageCell } from \"../components/ScorecardTable/components/AverageCell\";\nimport { AverageHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/AverageHeaderCell\";\nimport { DataFooterCell } from \"../components/ScorecardTable/components/DataFooterCell\";\nimport { AverageFooterCell } from \"../components/ScorecardTable/components/AverageFooterCell\";\nimport type { ScorecardDataEngine } from \"./dataEngine\";\nimport type { AnalyticsData } from \"./data\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction getValueFromConfig({\n\tconfig,\n\tdata,\n}: {\n\tconfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn (\n\t\t\tconfig.orgUnit.uid === datum.ou &&\n\t\t\tconfig.currentPeriod === datum.pe &&\n\t\t\tdatum.dx === head(config.dataSources)!.id\n\t\t);\n\t});\n\n\treturn {\n\t\t...head(config.dataSources)!,\n\t\tdata: getValues({\n\t\t\tvalues: dataValues,\n\t\t\tcurrentPeriod: config.currentPeriod!,\n\t\t\tpreviousPeriod: config.previousPeriod,\n\t\t}),\n\t};\n}\n\nfunction getSortingFunction(dataEngine: ScorecardDataEngine) {\n\treturn function sortingFunction(\n\t\trowA: Row<ScorecardTableData>,\n\t\trowB: Row<ScorecardTableData>,\n\t\tcolumnId: string,\n\t) {\n\t\tif (!dataEngine.getIsCompleteSnapshot()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellConfig;\n\t\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellConfig;\n\n\t\tconst dataAValue = getValueFromConfig({\n\t\t\tconfig: dataA,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst dataBValue = getValueFromConfig({\n\t\t\tconfig: dataB,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst valueA = dataAValue.data.current ?? 0;\n\t\tconst valueB = dataBValue.data.current ?? 0;\n\n\t\tif (valueA === valueB) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn valueA > valueB ? 1 : -1;\n\t};\n}\n\nexport function getAverageValue({\n\tdataValues,\n\tmeta,\n}: {\n\tdataValues: ScorecardAnalyticsData[];\n\tmeta: ScorecardMeta;\n}) {\n\tconst currentPeriodValues = dataValues.filter(({ pe }) => {\n\t\treturn !!meta.periods.find(({ uid }) => uid === pe);\n\t});\n\tconst values = currentPeriodValues.map(({ value }) => (value ? +value : 0));\n\n\treturn Math.round((sum(values) / values.length) * 100) / 100;\n}\n\nexport function getValues({\n\tvalues,\n\tcurrentPeriod,\n\tpreviousPeriod,\n}: {\n\tvalues: ScorecardAnalyticsData[];\n\tcurrentPeriod: string;\n\tpreviousPeriod?: string;\n}) {\n\tconst currentValueData = values.find(({ pe }) => {\n\t\treturn pe === currentPeriod;\n\t});\n\n\tconst previousValueData = values.find(({ pe }) => {\n\t\treturn pe === previousPeriod;\n\t});\n\n\tconst previousValue = parseFloat(previousValueData?.value ?? \"\");\n\tconst currentValue = parseFloat(currentValueData?.value ?? \"\");\n\n\treturn {\n\t\tprevious: isNaN(previousValue) ? undefined : previousValue,\n\t\tcurrent: isNaN(currentValue) ? undefined : currentValue,\n\t};\n}\n\nexport function getOrgUnitColumnHeaders({\n\tmeta,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst orgUnits = meta.orgUnits ?? [];\n\tconst periods = meta.periods ?? [];\n\treturn orgUnits.map((orgUnit) => {\n\t\treturn columnHelper.group({\n\t\t\tid: orgUnit.uid,\n\t\t\theader: DataHeaderCell,\n\t\t\tmeta: {\n\t\t\t\tlabel: orgUnit.name,\n\t\t\t},\n\t\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\t\tcolumnHelper.accessor(\n\t\t\t\t\t(rowData) => {\n\t\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)?.id;\n\t\t\t\t\t\tconst dataSources = rowData.dataHolder?.dataSources;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\t\torgUnit: orgUnit,\n\t\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\t\tsize: 120,\n\t\t\t\t\t\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t});\n}\n\nexport function getAverageColumn({}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}): ColumnDef<ScorecardTableData, ScorecardTableAverageCellConfig> {\n\treturn columnHelper.group({\n\t\tid: \"average-header\",\n\t\theader: AverageHeaderCell,\n\t\tcolumns: [\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: `average`,\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tcell: AverageCell,\n\t\t\t\t\tenableHiding: true,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tfooter: AverageFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t],\n\t});\n}\n\nfunction getDataHolderColumn({\n\thasOnePeriod,\n\tdataHolder,\n\tperiods,\n\tcalendar,\n\tdataEngine,\n}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}) {\n\tconst { id, dataSources } = dataHolder;\n\n\tconst header =\n\t\tdataSources.length === 1\n\t\t\t? head(dataSources)?.label\n\t\t\t: dataSources.reduce(\n\t\t\t\t\t(acc, { label }, index) =>\n\t\t\t\t\t\tindex === 0 ? `${label}` : `${acc} / ${label}`,\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\n\tconst legends = dataSources.map(({ legends, id, label }) => ({\n\t\tid,\n\t\tlabel,\n\t\tlegends,\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},\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"]}
1
+ {"version":3,"sources":["../../src/utils/columns.ts"],"names":["createColumnHelper","head","sum","DataHeaderCell","getAdjacentFixedPeriods","createFixedPeriodFromPeriodId","DataContainer","DataFooterCell","AverageHeaderCell","AverageCell","AverageFooterCell","legends","id","EmptyDataHeaderCell"],"mappings":"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","file":"columns.js","sourcesContent":["import type { ScorecardMeta } from \"../components\";\nimport type {\n\tScorecardAnalyticsData,\n\tScorecardCellData,\n\tScorecardConfig,\n\tScorecardDataHolder,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\ttype ColumnDef,\n\tcreateColumnHelper,\n\ttype Row,\n} from \"@tanstack/react-table\";\nimport { head, sum } from \"lodash\";\nimport type { ItemMeta } from \"../hooks/metadata\";\nimport { DataContainer } from \"../components/ScorecardTable/components/DataContainer\";\nimport {\n\tDataHeaderCell,\n\tEmptyDataHeaderCell,\n} from \"../components/ScorecardTable/components/TableHeader/components/DataHeaderCell\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\nimport { AverageCell } from \"../components/ScorecardTable/components/AverageCell\";\nimport { AverageHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/AverageHeaderCell\";\nimport { DataFooterCell } from \"../components/ScorecardTable/components/DataFooterCell\";\nimport { AverageFooterCell } from \"../components/ScorecardTable/components/AverageFooterCell\";\nimport type { ScorecardDataEngine } from \"./dataEngine\";\nimport type { AnalyticsData } from \"./data\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nfunction getValueFromConfig({\n\tconfig,\n\tdata,\n}: {\n\tconfig: ScorecardTableCellConfig;\n\tdata: AnalyticsData[];\n}): ScorecardCellData {\n\tconst dataValues = data.filter((datum) => {\n\t\treturn (\n\t\t\tconfig.orgUnit.uid === datum.ou &&\n\t\t\tconfig.currentPeriod === datum.pe &&\n\t\t\tdatum.dx === head(config.dataSources)!.id\n\t\t);\n\t});\n\n\treturn {\n\t\t...head(config.dataSources)!,\n\t\tdata: getValues({\n\t\t\tvalues: dataValues,\n\t\t\tcurrentPeriod: config.currentPeriod!,\n\t\t\tpreviousPeriod: config.previousPeriod,\n\t\t}),\n\t};\n}\n\nfunction getSortingFunction(dataEngine: ScorecardDataEngine) {\n\treturn function sortingFunction(\n\t\trowA: Row<ScorecardTableData>,\n\t\trowB: Row<ScorecardTableData>,\n\t\tcolumnId: string,\n\t) {\n\t\tif (!dataEngine.getIsCompleteSnapshot()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst dataA = rowA.getValue(columnId) as ScorecardTableCellConfig;\n\t\tconst dataB = rowB.getValue(columnId) as ScorecardTableCellConfig;\n\n\t\tconst dataAValue = getValueFromConfig({\n\t\t\tconfig: dataA,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst dataBValue = getValueFromConfig({\n\t\t\tconfig: dataB,\n\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t});\n\n\t\tconst valueA = dataAValue.data.current ?? 0;\n\t\tconst valueB = dataBValue.data.current ?? 0;\n\n\t\tif (valueA === valueB) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn valueA > valueB ? 1 : -1;\n\t};\n}\n\nexport function getAverageValue({\n\tdataValues,\n\tmeta,\n}: {\n\tdataValues: ScorecardAnalyticsData[];\n\tmeta: ScorecardMeta;\n}) {\n\tconst currentPeriodValues = dataValues.filter(({ pe }) => {\n\t\treturn !!meta.periods.find(({ uid }) => uid === pe);\n\t});\n\tconst values = currentPeriodValues.map(({ value }) => (value ? +value : 0));\n\n\treturn Math.round((sum(values) / values.length) * 100) / 100;\n}\n\nexport function getValues({\n\tvalues,\n\tcurrentPeriod,\n\tpreviousPeriod,\n}: {\n\tvalues: ScorecardAnalyticsData[];\n\tcurrentPeriod: string;\n\tpreviousPeriod?: string;\n}) {\n\tconst currentValueData = values.find(({ pe }) => {\n\t\treturn pe === currentPeriod;\n\t});\n\n\tconst previousValueData = values.find(({ pe }) => {\n\t\treturn pe === previousPeriod;\n\t});\n\n\tconst previousValue = parseFloat(previousValueData?.value ?? \"\");\n\tconst currentValue = parseFloat(currentValueData?.value ?? \"\");\n\n\treturn {\n\t\tprevious: isNaN(previousValue) ? undefined : previousValue,\n\t\tcurrent: isNaN(currentValue) ? undefined : currentValue,\n\t};\n}\n\nexport function getOrgUnitColumnHeaders({\n\tmeta,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst orgUnits = meta.orgUnits ?? [];\n\tconst periods = meta.periods ?? [];\n\treturn orgUnits.map((orgUnit) => {\n\t\treturn columnHelper.group({\n\t\t\tid: orgUnit.uid,\n\t\t\theader: DataHeaderCell,\n\t\t\tmeta: {\n\t\t\t\tlabel: orgUnit.name,\n\t\t\t},\n\t\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\t\tcolumnHelper.accessor(\n\t\t\t\t\t(rowData) => {\n\t\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)?.id;\n\t\t\t\t\t\tconst dataSources = rowData.dataHolder?.dataSources;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\t\torgUnit: orgUnit,\n\t\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\t\tsize: 120,\n\t\t\t\t\t\tid: `${orgUnit.uid}-${uid}`,\n\t\t\t\t\t\tenableSorting: true,\n\t\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t});\n}\n\nexport function getAverageColumn({}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n}): ColumnDef<ScorecardTableData, ScorecardTableAverageCellConfig> {\n\treturn columnHelper.group({\n\t\tid: \"average-header\",\n\t\theader: AverageHeaderCell,\n\t\tcolumns: [\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: `average`,\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tcell: AverageCell,\n\t\t\t\t\tenableHiding: true,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tfooter: AverageFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t],\n\t});\n}\n\nfunction getDataHolderColumn({\n\thasOnePeriod,\n\tdataHolder,\n\tperiods,\n\tcalendar,\n\tdataEngine,\n}: {\n\thasOnePeriod: boolean;\n\tdataHolder: ScorecardDataHolder;\n\tperiods: ItemMeta[];\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}) {\n\tconst { id, dataSources } = dataHolder;\n\n\tconst header =\n\t\tdataSources.length === 1\n\t\t\t? head(dataSources)?.label\n\t\t\t: dataSources.reduce(\n\t\t\t\t\t(acc, { label }, index) =>\n\t\t\t\t\t\tindex === 0 ? `${label}` : `${acc} / ${label}`,\n\t\t\t\t\t\"\",\n\t\t\t\t);\n\n\tconst legends = dataSources.map(\n\t\t({ legends, id, label, specificTargetsSet }) => ({\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tlegends,\n\t\t\tspecificTargetsSet,\n\t\t}),\n\t);\n\n\tif (hasOnePeriod) {\n\t\treturn columnHelper.accessor(\n\t\t\t(rowData) => {\n\t\t\t\tconst currentPeriod = head(periods)!.uid;\n\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t}),\n\t\t\t\t)?.id;\n\n\t\t\t\treturn {\n\t\t\t\t\t...rowData,\n\t\t\t\t\tdataSources,\n\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\tcurrentPeriod,\n\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t},\n\t\t\t{\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: header,\n\t\t\t\t\tlegends,\n\t\t\t\t},\n\t\t\t\tid: id.toString(),\n\t\t\t\tcell: DataContainer,\n\t\t\t\tsize: 120,\n\t\t\t\tenableSorting: true,\n\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\tfooter: DataFooterCell,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn columnHelper.group({\n\t\tid: id.toString(),\n\t\tcolumns: periods.map(({ name, uid }) =>\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\tconst currentPeriod = uid;\n\t\t\t\t\tconst previousPeriod = head(\n\t\t\t\t\t\tgetAdjacentFixedPeriods({\n\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\t\t\tperiodId: currentPeriod,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tsteps: -1,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)?.id;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...rowData,\n\t\t\t\t\t\tdataSources,\n\t\t\t\t\t\tcurrentPeriod,\n\t\t\t\t\t\tpreviousPeriod,\n\t\t\t\t\t} as ScorecardTableCellConfig;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\theader: DataHeaderCell,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tlabel: name,\n\t\t\t\t\t},\n\t\t\t\t\tcell: DataContainer,\n\t\t\t\t\tsize: 120,\n\t\t\t\t\tid: `${id.toString()}-${uid}`,\n\t\t\t\t\tenableSorting: true,\n\t\t\t\t\tsortingFn: getSortingFunction(dataEngine),\n\t\t\t\t\tfooter: DataFooterCell,\n\t\t\t\t},\n\t\t\t),\n\t\t),\n\t\tmeta: {\n\t\t\tlabel: header,\n\t\t\tlegends,\n\t\t},\n\t\theader: DataHeaderCell,\n\t\tenableSorting: true,\n\t\tsortingFn: getSortingFunction(dataEngine),\n\t});\n}\n\nexport function getDataColumnHeaders({\n\tmeta,\n\tconfig,\n\tcalendar,\n\tdataEngine,\n}: {\n\tmeta: ScorecardMeta;\n\tconfig: ScorecardConfig;\n\tcalendar: SupportedCalendar;\n\tdataEngine: ScorecardDataEngine;\n}): ColumnDef<ScorecardTableData, ScorecardTableCellConfig>[] {\n\tconst dataGroups = config.dataSelection.dataGroups ?? [];\n\tconst hasOneGroup = dataGroups.length === 1;\n\tconst periods = meta.periods ?? [];\n\tconst hasOnePeriod = periods.length === 1;\n\n\tif (hasOneGroup) {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: EmptyDataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t} else {\n\t\treturn dataGroups.map(({ title, dataHolders, id }) => {\n\t\t\treturn columnHelper.group({\n\t\t\t\tid: id.toString(),\n\t\t\t\theader: DataHeaderCell,\n\t\t\t\tmeta: {\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tbold: true,\n\t\t\t\t},\n\t\t\t\tcolumns: dataHolders.map((dataHolder) => {\n\t\t\t\t\treturn getDataHolderColumn({\n\t\t\t\t\t\thasOnePeriod,\n\t\t\t\t\t\tdataHolder,\n\t\t\t\t\t\tperiods,\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tenableSorting: false,\n\t\t\t\tfooter: () => null,\n\t\t\t});\n\t\t});\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hisptz/dhis2-scorecard",
3
- "version": "1.2.31",
3
+ "version": "1.2.33",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -43,8 +43,8 @@
43
43
  "tsup": "^8.3.0",
44
44
  "typescript": "^5.3.3",
45
45
  "usehooks-ts": "^2.9.2",
46
- "@repo/typescript-config": "0.0.2",
47
- "@repo/eslint-config": "0.0.0"
46
+ "@repo/eslint-config": "0.0.0",
47
+ "@repo/typescript-config": "0.0.2"
48
48
  },
49
49
  "dependencies": {
50
50
  "@tanstack/react-table": "^8.21.3",
@@ -57,9 +57,9 @@
57
57
  "react-jsx-parser": "^2.2.0",
58
58
  "react-to-print": "^3.0.1",
59
59
  "xlsx": "^0.18.5",
60
- "@hisptz/dhis2-analytics": "2.1.32",
61
- "@hisptz/dhis2-ui": "2.0.51",
62
- "@hisptz/dhis2-utils": "2.0.19"
60
+ "@hisptz/dhis2-analytics": "2.1.33",
61
+ "@hisptz/dhis2-utils": "2.0.19",
62
+ "@hisptz/dhis2-ui": "2.0.51"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "@dhis2/app-runtime": "^3",