@hisptz/dhis2-scorecard 1.2.30 → 1.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/LoadingIndicator.js +3 -5
- package/dist/components/LoadingIndicator.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/LegendView.js +86 -56
- package/dist/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -31
- package/dist/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -26
- package/dist/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -22
- package/dist/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js +6 -13
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
- package/dist/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
- package/dist/components/ScorecardTable/components/AverageCell.js +2 -2
- package/dist/components/ScorecardTable/components/AverageCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/AverageFooterCell.js +10 -32
- package/dist/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/DataContainer.js +4 -1
- package/dist/components/ScorecardTable/components/DataContainer.js.map +1 -1
- package/dist/components/ScorecardTable/components/DataFooterCell.js +35 -71
- package/dist/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
- package/dist/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
- package/dist/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +20 -2
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +78 -0
- package/dist/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
- package/dist/esm/components/LoadingIndicator.js +2 -4
- package/dist/esm/components/LoadingIndicator.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/LegendView.js +86 -52
- package/dist/esm/components/ScorecardLegendsView/components/LegendView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js +7 -27
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js +16 -22
- package/dist/esm/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js +4 -18
- package/dist/esm/components/ScorecardLegendsView/components/PeriodSpecificTargetView.js.map +1 -1
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js +4 -11
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js +6 -6
- package/dist/esm/components/ScorecardTable/FurtherAnalysisVisualization.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/AverageCell.js +2 -2
- package/dist/esm/components/ScorecardTable/components/AverageCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js +11 -33
- package/dist/esm/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/DataContainer.js +4 -1
- package/dist/esm/components/ScorecardTable/components/DataContainer.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/DataFooterCell.js +36 -72
- package/dist/esm/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js +45 -0
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisMenu.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/FurtherAnalysisModal.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +21 -3
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js +72 -0
- package/dist/esm/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.js.map +1 -0
- package/dist/esm/hooks/completed.js +13 -0
- package/dist/esm/hooks/completed.js.map +1 -0
- package/dist/esm/hooks/table.js +35 -45
- package/dist/esm/hooks/table.js.map +1 -1
- package/dist/esm/hooks/value.js +51 -101
- package/dist/esm/hooks/value.js.map +1 -1
- package/dist/esm/schemas/config.js +4 -0
- package/dist/esm/schemas/config.js.map +1 -1
- package/dist/esm/utils/columns.js +10 -4
- package/dist/esm/utils/columns.js.map +1 -1
- package/dist/esm/utils/dataEngine.js +128 -83
- package/dist/esm/utils/dataEngine.js.map +1 -1
- package/dist/hooks/completed.js +15 -0
- package/dist/hooks/completed.js.map +1 -0
- package/dist/hooks/table.js +43 -53
- package/dist/hooks/table.js.map +1 -1
- package/dist/hooks/value.js +49 -98
- package/dist/hooks/value.js.map +1 -1
- package/dist/schemas/config.js +4 -0
- package/dist/schemas/config.js.map +1 -1
- package/dist/types/components/LoadingIndicator.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts +1 -1
- package/dist/types/components/ScorecardLegendsView/components/LegendView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/OrgUnitLevelSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/OrgUnitSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardLegendsView/components/PeriodSpecificTargetView.d.ts.map +1 -1
- package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/FurtherAnalysisVisualization.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/AverageFooterCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/DataContainer.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/DataFooterCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisMenu.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts +10 -0
- package/dist/types/components/ScorecardTable/components/FurtherAnalysisModal.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts.map +1 -1
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts +12 -0
- package/dist/types/components/ScorecardTable/components/TableHeader/components/DataHeaderLegendView.d.ts.map +1 -0
- package/dist/types/hooks/completed.d.ts +2 -0
- package/dist/types/hooks/completed.d.ts.map +1 -0
- package/dist/types/hooks/table.d.ts.map +1 -1
- package/dist/types/hooks/value.d.ts +9 -3
- package/dist/types/hooks/value.d.ts.map +1 -1
- package/dist/types/schemas/config.d.ts +18 -0
- package/dist/types/schemas/config.d.ts.map +1 -1
- package/dist/types/utils/columns.d.ts.map +1 -1
- package/dist/types/utils/dataEngine.d.ts +16 -12
- package/dist/types/utils/dataEngine.d.ts.map +1 -1
- package/dist/utils/columns.js +10 -4
- package/dist/utils/columns.js.map +1 -1
- package/dist/utils/dataEngine.js +127 -82
- package/dist/utils/dataEngine.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { DropdownButton, IconDownload24, FlyoutMenu, MenuItem } from '@dhis2/ui';
|
|
3
3
|
import i18n from '@dhis2/d2-i18n';
|
|
4
|
-
import { useTransition, useState, useRef
|
|
4
|
+
import { useTransition, useState, useRef } from 'react';
|
|
5
5
|
import { useScorecardData } from '../../DataProvider';
|
|
6
6
|
import { useReactToPrint } from 'react-to-print';
|
|
7
7
|
import { useScorecardConfig } from '../../ConfigProvider';
|
|
@@ -11,6 +11,7 @@ import { useScorecardMeta } from '../../MetaProvider';
|
|
|
11
11
|
import { downloadALMAData, downloadALMAMeta } from '../utils/download';
|
|
12
12
|
import { useAlert } from '@dhis2/app-runtime';
|
|
13
13
|
import '../print.css';
|
|
14
|
+
import { useScorecardLoadingCompleted } from '../../../hooks/completed';
|
|
14
15
|
|
|
15
16
|
function DownloadMenu({
|
|
16
17
|
previewRef,
|
|
@@ -56,7 +57,7 @@ function DownloadMenu({
|
|
|
56
57
|
downloadALMAData({
|
|
57
58
|
config,
|
|
58
59
|
meta,
|
|
59
|
-
data: dataEngine.data
|
|
60
|
+
data: Array.from(dataEngine.data.values())
|
|
60
61
|
});
|
|
61
62
|
break;
|
|
62
63
|
}
|
|
@@ -91,17 +92,9 @@ function DownloadMenu({
|
|
|
91
92
|
}
|
|
92
93
|
function ScorecardDownloadButton() {
|
|
93
94
|
const [isPending, startTransition] = useTransition();
|
|
94
|
-
const { data: dataEngine } = useScorecardData();
|
|
95
95
|
const [openMenu, setOpenMenu] = useState(false);
|
|
96
|
-
const
|
|
96
|
+
const completed = useScorecardLoadingCompleted();
|
|
97
97
|
const previewRef = useRef(null);
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
return dataEngine.addOnCompleteListener((completed2) => {
|
|
100
|
-
startTransition(() => {
|
|
101
|
-
setCompleted(completed2);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
}, [dataEngine]);
|
|
105
98
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
106
99
|
completed && openMenu ? /* @__PURE__ */ jsx(ScorecardPreviewArea, { previewRef }) : null,
|
|
107
100
|
/* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"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","file":"ScorecardDownloadButton.js","sourcesContent":["import {\n\tDropdownButton,\n\tFlyoutMenu,\n\tIconDownload24,\n\tMenuItem,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { type RefObject, useRef, useState, useTransition } from \"react\";\nimport { useScorecardData } from \"../../DataProvider\";\nimport { useReactToPrint } from \"react-to-print\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { ScorecardPreviewArea } from \"./ScorecardPreviewArea\";\nimport * as xlsx from \"xlsx\";\nimport { useScorecardMeta } from \"../../MetaProvider\";\nimport { downloadALMAData, downloadALMAMeta } from \"../utils/download\";\nimport { useAlert } from \"@dhis2/app-runtime\";\nimport \"../print.css\";\nimport { useScorecardLoadingCompleted } from \"../../../hooks/completed\";\n\nfunction DownloadMenu({\n\tpreviewRef,\n\tonClose,\n}: {\n\tpreviewRef: RefObject<HTMLDivElement>;\n\tonClose: () => void;\n}) {\n\tconst config = useScorecardConfig();\n\tconst { show } = useAlert(\n\t\t({ message }) => message,\n\t\t({ type }) => ({ ...type, duration: 3000 }),\n\t);\n\tconst { data: dataEngine } = useScorecardData();\n\tconst meta = useScorecardMeta();\n\tconst print = useReactToPrint({\n\t\tcontentRef: previewRef,\n\t\tdocumentTitle: config.title,\n\t\tonPrintError: (errorLocation, error) => {\n\t\t\tconsole.error(`Error running ${errorLocation}`);\n\t\t\tconsole.error(error);\n\t\t\tshow({\n\t\t\t\tmessage: `${i18n.t(\"Could not open the print dialog\")}: ${\n\t\t\t\t\terror.message ?? i18n.t(\"Unknown error\")\n\t\t\t\t}`,\n\t\t\t\ttype: { info: true },\n\t\t\t});\n\t\t},\n\t});\n\n\tconst onDownload =\n\t\t(type: \"excel\" | \"csv\" | \"alma\" | \"almaMeta\" | \"pdf\") => () => {\n\t\t\tonClose();\n\t\t\tswitch (type) {\n\t\t\t\tcase \"pdf\":\n\t\t\t\t\tprint();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"csv\":\n\t\t\t\tcase \"excel\":\n\t\t\t\t\tconst extension = type === \"csv\" ? \"csv\" : \"xlsx\";\n\t\t\t\t\tconst workbook = xlsx.utils.table_to_book(\n\t\t\t\t\t\tpreviewRef.current,\n\t\t\t\t\t);\n\t\t\t\t\txlsx.writeFile(workbook, `${config.title}.${extension}`);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"almaMeta\":\n\t\t\t\t\tdownloadALMAMeta({ config, meta: meta! });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"alma\":\n\t\t\t\t\tdownloadALMAData({\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tmeta: meta!,\n\t\t\t\t\t\tdata: Array.from(dataEngine.data.values()),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\treturn (\n\t\t<>\n\t\t\t<FlyoutMenu closeMenu={onClose}>\n\t\t\t\t<MenuItem\n\t\t\t\t\tonClick={onDownload(\"excel\")}\n\t\t\t\t\tlabel={i18n.t(\"Excel\")}\n\t\t\t\t/>\n\t\t\t\t<MenuItem onClick={onDownload(\"csv\")} label={i18n.t(\"CSV\")} />\n\t\t\t\t<MenuItem onClick={onDownload(\"pdf\")} label={i18n.t(\"PDF\")} />\n\t\t\t\t<MenuItem label={i18n.t(\"ALMA\")}>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={onDownload(\"alma\")}\n\t\t\t\t\t\tlabel={i18n.t(\"Data(JSON)\")}\n\t\t\t\t\t/>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={onDownload(\"almaMeta\")}\n\t\t\t\t\t\tlabel={i18n.t(\"Metadata\")}\n\t\t\t\t\t/>\n\t\t\t\t</MenuItem>\n\t\t\t</FlyoutMenu>\n\t\t</>\n\t);\n}\n\nexport function ScorecardDownloadButton() {\n\tconst [isPending, startTransition] = useTransition();\n\tconst [openMenu, setOpenMenu] = useState<boolean>(false);\n\tconst completed = useScorecardLoadingCompleted();\n\tconst previewRef = useRef<HTMLDivElement | null>(null);\n\n\treturn (\n\t\t<>\n\t\t\t{completed && openMenu ? (\n\t\t\t\t<ScorecardPreviewArea previewRef={previewRef} />\n\t\t\t) : null}\n\t\t\t<DropdownButton\n\t\t\t\ttype=\"button\"\n\t\t\t\tvalue=\"scorecard-download-button\"\n\t\t\t\tdisabled={!completed || isPending}\n\t\t\t\topen={openMenu}\n\t\t\t\tonClick={({ open }) => {\n\t\t\t\t\tstartTransition(() => {\n\t\t\t\t\t\tsetOpenMenu(open);\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\ticon={<IconDownload24 />}\n\t\t\t\tcomponent={\n\t\t\t\t\tisPending ? (\n\t\t\t\t\t\t<div>Loading</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<DownloadMenu\n\t\t\t\t\t\t\tonClose={() => setOpenMenu(false)}\n\t\t\t\t\t\t\tpreviewRef={previewRef}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{!completed\n\t\t\t\t\t? i18n.t(\"Please wait...\")\n\t\t\t\t\t: isPending\n\t\t\t\t\t\t? i18n.t(\"Preparing...\")\n\t\t\t\t\t\t: i18n.t(\"Download\")}\n\t\t\t</DropdownButton>\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -22,7 +22,7 @@ function FurtherAnalysisVisualization({
|
|
|
22
22
|
Visualization,
|
|
23
23
|
{
|
|
24
24
|
height: 400,
|
|
25
|
-
layout: {
|
|
25
|
+
layout: config.layout ?? {
|
|
26
26
|
columns: ["dx"],
|
|
27
27
|
filters: ["pe"],
|
|
28
28
|
rows: ["ou"]
|
|
@@ -30,7 +30,7 @@ function FurtherAnalysisVisualization({
|
|
|
30
30
|
showToolbar: true,
|
|
31
31
|
showOrgUnitSelector: true,
|
|
32
32
|
showPeriodSelector: true,
|
|
33
|
-
defaultVisualizationType: "chart",
|
|
33
|
+
defaultVisualizationType: config.type?.visualizationType ?? "chart",
|
|
34
34
|
dimensions: {
|
|
35
35
|
ou: orgUnits,
|
|
36
36
|
pe: periods,
|
|
@@ -38,11 +38,11 @@ function FurtherAnalysisVisualization({
|
|
|
38
38
|
},
|
|
39
39
|
config: {
|
|
40
40
|
chart: {
|
|
41
|
-
type: "column",
|
|
41
|
+
type: config.type?.chartType ?? "column",
|
|
42
42
|
layout: {
|
|
43
|
-
filter: ["pe"],
|
|
44
|
-
category: ["ou"],
|
|
45
|
-
series: ["dx"]
|
|
43
|
+
filter: config.layout?.filters ?? ["pe"],
|
|
44
|
+
category: config.layout?.rows ?? ["ou"],
|
|
45
|
+
series: config.layout?.columns ?? ["dx"]
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
pivotTable: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ScorecardTable/FurtherAnalysisVisualization.tsx"],"names":[],"mappings":";;;;AAUO,SAAS,4BAAA,CAA6B;AAAA,EAC5C;AACD,CAAA,EAAsC;AACrC,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,MAAA,CAAO,gBAAgB,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,OAAO,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAC,EAAE,EAAA,EAAG,KAAM,EAAE,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,EAAE,EAAA,OAAS,EAAE,CAAA;AACvD,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACZ;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACA,MAAA,EAAQ,GAAA;AAAA,UACR,MAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ScorecardTable/FurtherAnalysisVisualization.tsx"],"names":[],"mappings":";;;;AAUO,SAAS,4BAAA,CAA6B;AAAA,EAC5C;AACD,CAAA,EAAsC;AACrC,EAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,MAAA,CAAO,gBAAgB,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,OAAO,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAC,EAAE,EAAA,EAAG,KAAM,EAAE,CAAA;AACjE,EAAA,MAAM,SAAA,GAAY,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,EAAE,EAAA,OAAS,EAAE,CAAA;AACvD,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACZ;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACA,MAAA,EAAQ,GAAA;AAAA,UACR,MAAA,EACC,OAAO,MAAA,IAAU;AAAA,YAChB,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,YACd,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,YACd,IAAA,EAAM,CAAC,IAAI;AAAA,WACZ;AAAA,UAED,WAAA,EAAW,IAAA;AAAA,UACX,mBAAA,EAAmB,IAAA;AAAA,UACnB,kBAAA,EAAkB,IAAA;AAAA,UAClB,wBAAA,EACC,MAAA,CAAO,IAAA,EAAM,iBAAA,IAAqB,OAAA;AAAA,UAEnC,UAAA,EAAY;AAAA,YACX,EAAA,EAAI,QAAA;AAAA,YACJ,EAAA,EAAI,OAAA;AAAA,YACJ,EAAA,EAAI;AAAA,WACL;AAAA,UACA,MAAA,EAAQ;AAAA,YACP,KAAA,EAAO;AAAA,cACN,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,SAAA,IAAa,QAAA;AAAA,cAChC,MAAA,EAAQ;AAAA,gBACP,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,IAAW,CAAC,IAAI,CAAA;AAAA,gBACvC,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,IAAA,IAAQ,CAAC,IAAI,CAAA;AAAA,gBACtC,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,IAAW,CAAC,IAAI;AAAA;AACxC,aACD;AAAA,YACA,YAAY,EAAC;AAAA,YACb,GAAA,EAAK;AAAA,cACJ,eAAA,EAAiB,IAAA;AAAA,cACjB,cAAA,EAAgB,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,gBACjD,OAAA,EAAS,IAAA;AAAA,gBACT,MAAM,IAAA,CAAK,KAAA;AAAA,gBACX,IAAI,IAAA,CAAK,EAAA;AAAA,gBACT,IAAA,EAAM,YAAA;AAAA,gBACN,QAAA,EAAU;AAAA,kBACT,MAAM,IAAA,CAAK,IAAA;AAAA,kBACX,aAAa,IAAA,CAAK,KAAA;AAAA,kBAClB,IAAI,IAAA,CAAK,EAAA;AAAA,kBACT,YAAA,EAAc;AAAA,oBACb,UAAA,EAAY,QAAA;AAAA,oBACZ,KAAA,EAAO;AAAA;AACR;AACD,eACD,CAAE;AAAA;AACH;AACD;AAAA;AACD;AAAA,GACD;AAEF","file":"FurtherAnalysisVisualization.js","sourcesContent":["import { getOrgUnitsForAnalytics } from \"../../utils/orgUnits\";\nimport type { FurtherAnalysisConfig } from \"./components/FurtherAnalysisModal\";\nimport { Visualization } from \"@hisptz/dhis2-analytics\";\n\nexport type DataItemType = \"dataElement\" | \"indicator\" | \"programIndicator\";\n\nexport interface FurtherAnalysisVisualizationProps {\n\tconfig: FurtherAnalysisConfig;\n}\n\nexport function FurtherAnalysisVisualization({\n\tconfig,\n}: FurtherAnalysisVisualizationProps) {\n\tconst orgUnits = getOrgUnitsForAnalytics(config.orgUnitSelection);\n\tconst periods = config.periodSelection.periods.map(({ id }) => id);\n\tconst dataItems = config.dataSources.map(({ id }) => id);\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: 400,\n\t\t\t\tpadding: 32,\n\t\t\t\tminHeight: 500,\n\t\t\t\tmaxHeight: \"80dvh\",\n\t\t\t}}\n\t\t>\n\t\t\t<Visualization\n\t\t\t\theight={400}\n\t\t\t\tlayout={\n\t\t\t\t\tconfig.layout ?? {\n\t\t\t\t\t\tcolumns: [\"dx\"],\n\t\t\t\t\t\tfilters: [\"pe\"],\n\t\t\t\t\t\trows: [\"ou\"],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshowToolbar\n\t\t\t\tshowOrgUnitSelector\n\t\t\t\tshowPeriodSelector\n\t\t\t\tdefaultVisualizationType={\n\t\t\t\t\tconfig.type?.visualizationType ?? \"chart\"\n\t\t\t\t}\n\t\t\t\tdimensions={{\n\t\t\t\t\tou: orgUnits,\n\t\t\t\t\tpe: periods,\n\t\t\t\t\tdx: dataItems,\n\t\t\t\t}}\n\t\t\t\tconfig={{\n\t\t\t\t\tchart: {\n\t\t\t\t\t\ttype: config.type?.chartType ?? \"column\",\n\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\tfilter: config.layout?.filters ?? [\"pe\"],\n\t\t\t\t\t\t\tcategory: config.layout?.rows ?? [\"ou\"],\n\t\t\t\t\t\t\tseries: config.layout?.columns ?? [\"dx\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tpivotTable: {},\n\t\t\t\t\tmap: {\n\t\t\t\t\t\tshowPeriodTitle: true,\n\t\t\t\t\t\tthematicLayers: config.dataSources.map((item) => ({\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tname: item.label,\n\t\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\t\ttype: \"choropleth\",\n\t\t\t\t\t\t\tdataItem: {\n\t\t\t\t\t\t\t\ttype: item.type as DataItemType,\n\t\t\t\t\t\t\t\tdisplayName: item.label!,\n\t\t\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\t\t\tlegendConfig: {\n\t\t\t\t\t\t\t\t\tcolorClass: \"YlOrBr\",\n\t\t\t\t\t\t\t\t\tscale: 7,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"]}
|
|
@@ -23,7 +23,7 @@ function SingleAverageCell({
|
|
|
23
23
|
config,
|
|
24
24
|
value: dataSource.data.average
|
|
25
25
|
});
|
|
26
|
-
}, [dataSource]);
|
|
26
|
+
}, [dataSource, config]);
|
|
27
27
|
if (!dataSource.data.average || isNaN(dataSource.data.average)) {
|
|
28
28
|
return /* @__PURE__ */ jsx(DataTableCell, { bordered: true });
|
|
29
29
|
}
|
|
@@ -122,7 +122,7 @@ function DataSourceAverageCell(props) {
|
|
|
122
122
|
}
|
|
123
123
|
function OrgUnitAverageCell(props) {
|
|
124
124
|
const size = props.cell.column.getSize();
|
|
125
|
-
const dataConfig = useMemo(() => props.getValue(), [props
|
|
125
|
+
const dataConfig = useMemo(() => props.getValue(), [props]);
|
|
126
126
|
const { loading, average } = useOrgUnitAverageCellValue(dataConfig);
|
|
127
127
|
if (loading) {
|
|
128
128
|
return /* @__PURE__ */ jsx(CellLoader, { size });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/AverageCell.tsx"],"names":[],"mappings":";;;;;;;;;;;AAsBO,SAAS,iBAAA,CAAkB;AAAA,EACjC,UAAA;AAAA,EACA;AACD,CAAA,EAGG;AACF,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAClC,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACtC,IAAA,IAAI,CAAC,UAAA,EAAY;AAChB,MAAA;AAAA,IACD;AACA,IAAA,OAAO,SAAA,CAAU;AAAA,MAChB,UAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA,EAAO,WAAW,IAAA,CAAK;AAAA,KACvB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/AverageCell.tsx"],"names":[],"mappings":"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","file":"AverageCell.js","sourcesContent":["import type { CellContext } from \"@tanstack/react-table\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableData,\n} from \"../../../schemas/config\";\nimport { DataTableCell } from \"@dhis2/ui\";\nimport { head, isEmpty } from \"lodash\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useMemo } from \"react\";\nimport {\n\tgetLegend,\n\tgetTextColorFromBackgroundColor,\n} from \"../../../utils/legends\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport {\n\tuseDataHolderAverageCellValue,\n\tuseOrgUnitAverageCellValue,\n} from \"../../../hooks/value\";\nimport { CellLoader } from \"./CellLoader\";\nimport { useScorecardViewStateValue } from \"../../../utils\";\n\nexport function SingleAverageCell({\n\tdataSource,\n\tsize,\n}: {\n\tdataSource: ScorecardAverageCellData;\n\tsize: number;\n}) {\n\tconst config = useScorecardConfig();\n\tconst legendDefinition = useMemo(() => {\n\t\tif (!dataSource) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource,\n\t\t\tconfig: config!,\n\t\t\tvalue: dataSource.data.average,\n\t\t});\n\t}, [dataSource, config]);\n\n\tif (!dataSource.data.average || isNaN(dataSource.data.average)) {\n\t\treturn <DataTableCell bordered />;\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tbordered\n\t\t\tstyle={{\n\t\t\t\tbackground: legendDefinition?.color,\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tminWidth: 100,\n\t\t\t\twidth: size,\n\t\t\t\theight: 48,\n\t\t\t\tcolor: legendDefinition\n\t\t\t\t\t? getTextColorFromBackgroundColor(legendDefinition?.color)\n\t\t\t\t\t: undefined,\n\t\t\t}}\n\t\t\talign=\"center\"\n\t\t>\n\t\t\t<b>{dataSource.data.average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function LinkedAverageCell({\n\tdataSources,\n\tsize,\n}: {\n\tdataSources: Array<ScorecardAverageCellData>;\n\tsize: number;\n}) {\n\tconst [top, bottom] = dataSources ?? [];\n\tconst config = useScorecardConfig();\n\tconst topLegendDefinition = useMemo(() => {\n\t\tif (!top) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: top,\n\t\t\tconfig: config!,\n\t\t\tvalue: top.data.average,\n\t\t});\n\t}, [top]);\n\tconst bottomLegendDefinition = useMemo(() => {\n\t\tif (!bottom) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: bottom,\n\t\t\tconfig: config!,\n\t\t\tvalue: bottom.data.average,\n\t\t});\n\t}, [bottom]);\n\n\treturn (\n\t\t<LinkedCell\n\t\t\tbold\n\t\t\tsize={size}\n\t\t\ttop={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...top,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: top.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\tvalue: top.data.average,\n\t\t\t}}\n\t\t\tbottom={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...bottom,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: bottom.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\tvalue: bottom.data.average,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction DataSourceAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props.getValue()]);\n\tconst { cellData: dataSources, loading } =\n\t\tuseDataHolderAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\tif (!isEmpty(dataSources)) {\n\t\tif (dataSources?.length === 1) {\n\t\t\treturn (\n\t\t\t\t<SingleAverageCell\n\t\t\t\t\tsize={size}\n\t\t\t\t\tdataSource={head(dataSources)!}\n\t\t\t\t/>\n\t\t\t);\n\t\t} else {\n\t\t\treturn <LinkedAverageCell size={size} dataSources={dataSources!} />;\n\t\t}\n\t}\n\n\treturn <DataTableCell bordered style={{ width: size }} />;\n}\n\nfunction OrgUnitAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props]);\n\tconst { loading, average } = useOrgUnitAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\tif (isNaN(average as number)) {\n\t\treturn (\n\t\t\t<DataTableCell\n\t\t\t\tstyle={{ width: size }}\n\t\t\t\tbordered\n\t\t\t\talign=\"center\"\n\t\t\t\tkey={props.row.id}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tstyle={{ width: size }}\n\t\t\tbordered\n\t\t\talign=\"center\"\n\t\t\tkey={props.row.id}\n\t\t>\n\t\t\t<b>{average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function AverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst showDataInRows =\n\t\tuseScorecardViewStateValue<boolean>(\"showDataInRows\");\n\n\tif (showDataInRows) {\n\t\treturn <DataSourceAverageCell {...props} />;\n\t}\n\n\treturn <OrgUnitAverageCell {...props} />;\n}\n"]}
|
|
@@ -2,46 +2,24 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { DataTableCell } from '@dhis2/ui';
|
|
3
3
|
import { useScorecardMeta } from '../../MetaProvider';
|
|
4
4
|
import { useScorecardData } from '../../DataProvider';
|
|
5
|
-
import {
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
6
|
import { getAverageValue } from '../../../utils/columns';
|
|
7
|
-
import {
|
|
7
|
+
import { useScorecardLoadingCompleted } from '../../../hooks/completed';
|
|
8
8
|
|
|
9
9
|
function AverageFooterCell({
|
|
10
10
|
column
|
|
11
11
|
}) {
|
|
12
12
|
const size = column.getSize();
|
|
13
|
-
const meta = useScorecardMeta();
|
|
14
|
-
const [loading, setLoading] = useState(false);
|
|
15
|
-
const [average, setAverage] = useState();
|
|
16
13
|
const { data: scorecardEngine } = useScorecardData();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
);
|
|
27
|
-
setLoading(false);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
if (scorecardEngine.isDone) {
|
|
31
|
-
setAverage(
|
|
32
|
-
getAverageValue({
|
|
33
|
-
dataValues: scorecardEngine.data,
|
|
34
|
-
meta
|
|
35
|
-
})
|
|
36
|
-
);
|
|
37
|
-
setLoading(false);
|
|
38
|
-
} else {
|
|
39
|
-
return scorecardEngine.addOnCompleteListener(listener);
|
|
40
|
-
}
|
|
41
|
-
}, []);
|
|
42
|
-
if (loading) {
|
|
43
|
-
return /* @__PURE__ */ jsx(CellLoader, { size });
|
|
44
|
-
}
|
|
14
|
+
const meta = useScorecardMeta();
|
|
15
|
+
const isDone = useScorecardLoadingCompleted();
|
|
16
|
+
const average = useMemo(() => {
|
|
17
|
+
if (!isDone) return;
|
|
18
|
+
return getAverageValue({
|
|
19
|
+
dataValues: Array.from(scorecardEngine.data.values()),
|
|
20
|
+
meta
|
|
21
|
+
});
|
|
22
|
+
}, [meta, isDone, scorecardEngine.data]);
|
|
45
23
|
if (!average || isNaN(average)) {
|
|
46
24
|
return /* @__PURE__ */ jsx(DataTableCell, { style: { width: size }, bordered: true });
|
|
47
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/AverageFooterCell.tsx"],"names":[],"mappings":";;;;;;;;AASO,SAAS,iBAAA,CAAkB;AAAA,EACjC;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,EAAA,MAAM,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/AverageFooterCell.tsx"],"names":[],"mappings":";;;;;;;;AASO,SAAS,iBAAA,CAAkB;AAAA,EACjC;AACD,CAAA,EAA2C;AAC1C,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAM,eAAA,EAAgB,GAAI,gBAAA,EAAiB;AACnD,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,MAAM,SAAS,4BAAA,EAA6B;AAC5C,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC7B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,OAAO,eAAA,CAAgB;AAAA,MACtB,YAAY,KAAA,CAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAA;AAAA,MACpD;AAAA,KACA,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,MAAA,EAAQ,eAAA,CAAgB,IAAI,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,OAAA,IAAW,KAAA,CAAM,OAAO,CAAA,EAAG;AAC/B,IAAA,uBAAO,GAAA,CAAC,iBAAc,KAAA,EAAO,EAAE,OAAO,IAAA,EAAK,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,EACxD;AAEA,EAAA,2BACE,aAAA,EAAA,EAAc,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,IAAQ,QAAA,EAAQ,IAAA,EAAC,OAAM,QAAA,EACrD,QAAA,kBAAA,GAAA,CAAC,OAAG,QAAA,EAAA,OAAA,EAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,IAAW,CAAA,EACpC,CAAA;AAEF","file":"AverageFooterCell.js","sourcesContent":["import { DataTableCell } from \"@dhis2/ui\";\nimport type { HeaderContext } from \"@tanstack/react-table\";\nimport type { ScorecardTableData } from \"../../../schemas/config\";\nimport { useScorecardMeta } from \"../../MetaProvider\";\nimport { useScorecardData } from \"../../DataProvider\";\nimport { useMemo, useSyncExternalStore } from \"react\";\nimport { getAverageValue } from \"../../../utils/columns\";\nimport { useScorecardLoadingCompleted } from \"../../../hooks/completed\";\n\nexport function AverageFooterCell({\n\tcolumn,\n}: HeaderContext<ScorecardTableData, any>) {\n\tconst size = column.getSize();\n\tconst { data: scorecardEngine } = useScorecardData();\n\tconst meta = useScorecardMeta();\n\tconst isDone = useScorecardLoadingCompleted();\n\tconst average = useMemo(() => {\n\t\tif (!isDone) return;\n\t\treturn getAverageValue({\n\t\t\tdataValues: Array.from(scorecardEngine.data.values()),\n\t\t\tmeta: meta!,\n\t\t});\n\t}, [meta, isDone, scorecardEngine.data]);\n\n\tif (!average || isNaN(average)) {\n\t\treturn <DataTableCell style={{ width: size }} bordered />;\n\t}\n\n\treturn (\n\t\t<DataTableCell style={{ width: size }} bordered align=\"center\">\n\t\t\t<b>{average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n"]}
|
|
@@ -23,7 +23,10 @@ function DataContainerComponent(props) {
|
|
|
23
23
|
if (!dataConfig) {
|
|
24
24
|
return /* @__PURE__ */ jsx(DataTableCell, { bordered: true });
|
|
25
25
|
}
|
|
26
|
-
if (cellData
|
|
26
|
+
if (!cellData) {
|
|
27
|
+
return /* @__PURE__ */ jsx(DataTableCell, { bordered: true });
|
|
28
|
+
}
|
|
29
|
+
if (cellData.length === 1) {
|
|
27
30
|
return /* @__PURE__ */ jsx(
|
|
28
31
|
SingleDataCell,
|
|
29
32
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":";;;;;;;;;;AAcA,SAAS,uBACR,KAAA,EACC;AACD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAQ;AACvC,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,EAAS;AAClC,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAClC,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,KAAa,YAAA,CAAa,KAAA,CAAM,UAAU,CAAA;AAE3D,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACrB,IAAA,uBAAO,GAAA,CAAC,iBAAc,KAAA,EAAO,EAAE,OAAO,IAAA,EAAK,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,OAAA,EAAS;AACZ,IAAA,uBAAO,GAAA,CAAC,cAAW,IAAA,EAAY,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,CAAC,UAAA,EAAY;AAChB,IAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EAAC,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,QAAA,EAAU,WAAW,CAAA,EAAG;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":";;;;;;;;;;AAcA,SAAS,uBACR,KAAA,EACC;AACD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAQ;AACvC,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,EAAS;AAClC,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAClC,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,KAAa,YAAA,CAAa,KAAA,CAAM,UAAU,CAAA;AAE3D,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,EAAM;AACrB,IAAA,uBAAO,GAAA,CAAC,iBAAc,KAAA,EAAO,EAAE,OAAO,IAAA,EAAK,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,OAAA,EAAS;AACZ,IAAA,uBAAO,GAAA,CAAC,cAAW,IAAA,EAAY,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,CAAC,UAAA,EAAY;AAChB,IAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EAAC,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACd,IAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EAAC,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC1B,IAAA,uBACC,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,GAAG,UAAA;AAAA,QACJ,IAAA;AAAA,QACA,QAAQ,UAAA,CAAW,aAAA;AAAA,QACnB,WAAA,EAAa;AAAA;AAAA,KACd;AAAA,EAEF;AAEA,EAAA,uBACC,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAG,UAAA;AAAA,MACJ,IAAA;AAAA,MACA,QAAQ,UAAA,CAAW,aAAA;AAAA,MACnB,WAAA,EAAa;AAAA;AAAA,GACd;AAEF;AAEO,MAAM,aAAA,GAAgB,IAAA,CAAK,SAASA,cAAAA,CAC1C,KAAA,EACC;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,EAAS;AAE9B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,IAAA,2BAAQ,aAAA,EAAA,EAAc,QAAA,EAAQ,MAAC,GAAA,EAAI,IAAA,EAAK,OAAM,MAAA,EAAO,CAAA;AAAA,EACtD;AAEA,EAAA,uBAAO,GAAA,CAAC,sBAAA,EAAA,EAAwB,GAAG,KAAA,EAAO,CAAA;AAC3C,CAAC","file":"DataContainer.js","sourcesContent":["import type {\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../../../schemas/config\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useScorecardMeta } from \"../../MetaProvider\";\nimport { SingleDataCell } from \"./SingleDataCell\";\nimport { LinkedDataCell } from \"./LinkedDataCell\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport { DataTableCell } from \"@dhis2/ui\";\nimport { memo } from \"react\";\nimport { useCellValue } from \"../../../hooks/value\";\nimport { CellLoader } from \"./CellLoader\";\n\nfunction DataContainerComponent(\n\tprops: CellContext<ScorecardTableData, ScorecardTableCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = props.getValue();\n\tconst config = useScorecardConfig();\n\tconst meta = useScorecardMeta();\n\tconst { loading, cellData } = useCellValue(props.getValue());\n\n\tif (!config || !meta) {\n\t\treturn <DataTableCell style={{ width: size }} bordered />;\n\t}\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\tif (!dataConfig) {\n\t\treturn <DataTableCell bordered />;\n\t}\n\n\tif (!cellData) {\n\t\treturn <DataTableCell bordered />;\n\t}\n\n\tif (cellData.length === 1) {\n\t\treturn (\n\t\t\t<SingleDataCell\n\t\t\t\t{...dataConfig}\n\t\t\t\tsize={size}\n\t\t\t\tperiod={dataConfig.currentPeriod!}\n\t\t\t\tdataSources={cellData}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<LinkedDataCell\n\t\t\t{...dataConfig}\n\t\t\tsize={size}\n\t\t\tperiod={dataConfig.currentPeriod!}\n\t\t\tdataSources={cellData}\n\t\t/>\n\t);\n}\n\nexport const DataContainer = memo(function DataContainer(\n\tprops: CellContext<ScorecardTableData, ScorecardTableCellConfig>,\n) {\n\tconst config = props.getValue();\n\n\tif (!config) {\n\t\treturn <DataTableCell bordered tag=\"th\" width=\"auto\" />;\n\t}\n\n\treturn <DataContainerComponent {...props} />;\n});\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useMemo
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
3
|
import { DataTableCell } from '@dhis2/ui';
|
|
4
|
-
import {
|
|
5
|
-
import { head, meanBy, isEmpty } from 'lodash';
|
|
6
|
-
import { CellLoader } from './CellLoader';
|
|
4
|
+
import { compact, meanBy, isEmpty, head } from 'lodash';
|
|
7
5
|
import { SingleAverageCell, LinkedAverageCell } from './AverageCell';
|
|
8
|
-
import { useScorecardViewStateValue } from '../../../utils
|
|
6
|
+
import { useScorecardViewStateValue } from '../../../utils';
|
|
7
|
+
import { useDataValue } from '../../../hooks/value';
|
|
9
8
|
|
|
10
9
|
function getOrgUnitAverage({
|
|
11
10
|
dataSourcesConfig,
|
|
@@ -30,37 +29,24 @@ function OrgUnitFooterCell({
|
|
|
30
29
|
dataSourcesConfig,
|
|
31
30
|
size
|
|
32
31
|
}) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
);
|
|
46
|
-
setLoading(false);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
if (scorecardEngine.isDone) {
|
|
50
|
-
setAverageValues(
|
|
51
|
-
getOrgUnitAverage({
|
|
52
|
-
dataSourcesConfig,
|
|
53
|
-
data: scorecardEngine.data
|
|
54
|
-
})
|
|
55
|
-
);
|
|
56
|
-
setLoading(false);
|
|
57
|
-
} else {
|
|
58
|
-
return scorecardEngine.addOnCompleteListener(listener);
|
|
32
|
+
const analyticsData = useDataValue({
|
|
33
|
+
ou: dataSourcesConfig.map(({ orgUnit }) => orgUnit.uid),
|
|
34
|
+
pe: compact(
|
|
35
|
+
dataSourcesConfig.map(({ currentPeriod }) => currentPeriod)
|
|
36
|
+
),
|
|
37
|
+
dx: compact(
|
|
38
|
+
dataSourcesConfig.map(({ dataSources }) => dataSources?.map(({ id }) => id)).flat()
|
|
39
|
+
)
|
|
40
|
+
});
|
|
41
|
+
const averageValues = useMemo(() => {
|
|
42
|
+
if (!analyticsData) {
|
|
43
|
+
return;
|
|
59
44
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
return getOrgUnitAverage({
|
|
46
|
+
dataSourcesConfig,
|
|
47
|
+
data: analyticsData
|
|
48
|
+
});
|
|
49
|
+
}, [analyticsData, dataSourcesConfig]);
|
|
64
50
|
if (isEmpty(averageValues)) {
|
|
65
51
|
return /* @__PURE__ */ jsx(DataTableCell, { style: { width: size }, bordered: true });
|
|
66
52
|
}
|
|
@@ -74,43 +60,21 @@ function DataHolderFooterCell({
|
|
|
74
60
|
dataSourcesConfig,
|
|
75
61
|
size
|
|
76
62
|
}) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const average2 = meanBy(
|
|
90
|
-
dataValues,
|
|
91
|
-
(value) => parseFloat(value.value)
|
|
92
|
-
);
|
|
93
|
-
setAverage(average2);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
if (scorecardEngine.isDone) {
|
|
97
|
-
const orgUnitId = head(dataSourcesConfig);
|
|
98
|
-
const dataValues = scorecardEngine.data.filter(
|
|
99
|
-
(datum) => datum.ou === orgUnitId.orgUnit.uid
|
|
100
|
-
);
|
|
101
|
-
const average2 = meanBy(
|
|
102
|
-
dataValues,
|
|
103
|
-
(value) => parseFloat(value.value)
|
|
104
|
-
);
|
|
105
|
-
setAverage(average2);
|
|
106
|
-
setLoading(false);
|
|
107
|
-
} else {
|
|
108
|
-
return scorecardEngine.addOnCompleteListener(listener);
|
|
63
|
+
const analyticsData = useDataValue({
|
|
64
|
+
ou: dataSourcesConfig.map(({ orgUnit }) => orgUnit.uid),
|
|
65
|
+
pe: compact(
|
|
66
|
+
dataSourcesConfig.map(({ currentPeriod }) => currentPeriod)
|
|
67
|
+
),
|
|
68
|
+
dx: compact(
|
|
69
|
+
dataSourcesConfig.map(({ dataSources }) => dataSources?.map(({ id }) => id)).flat()
|
|
70
|
+
)
|
|
71
|
+
});
|
|
72
|
+
const average = useMemo(() => {
|
|
73
|
+
if (!analyticsData) {
|
|
74
|
+
return;
|
|
109
75
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
return /* @__PURE__ */ jsx(CellLoader, { size });
|
|
113
|
-
}
|
|
76
|
+
return meanBy(analyticsData, (datum) => parseFloat(datum.value));
|
|
77
|
+
}, [analyticsData]);
|
|
114
78
|
if (isNaN(average)) {
|
|
115
79
|
return /* @__PURE__ */ jsx(DataTableCell, { style: { width: size }, bordered: true, align: "center" });
|
|
116
80
|
}
|
|
@@ -126,7 +90,7 @@ function DataFooterCell({
|
|
|
126
90
|
return table.getRowModel().rows.map(
|
|
127
91
|
(row) => row.getValue(column.id)
|
|
128
92
|
);
|
|
129
|
-
}, [table.
|
|
93
|
+
}, [table, column.id]);
|
|
130
94
|
if (showDataInRows) {
|
|
131
95
|
return /* @__PURE__ */ jsx(
|
|
132
96
|
DataHolderFooterCell,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataFooterCell.tsx"],"names":[
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataFooterCell.tsx"],"names":[],"mappings":";;;;;;;;AAcA,SAAS,iBAAA,CAAkB;AAAA,EAC1B,iBAAA;AAAA,EACA;AACD,CAAA,EAG+B;AAC9B,EAAA,MAAM,gBAAA,GAAmB,KAAK,iBAAiB,CAAA;AAE/C,EAAA,OAAO,gBAAA,EAAkB,WAAA,EAAa,GAAA,CAAI,CAAC,MAAA,KAAW;AACrD,IAAA,MAAM,SAAS,gBAAA,CAAiB,aAAA;AAChC,IAAA,MAAM,aAAa,IAAA,CAAK,MAAA;AAAA,MACvB,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,MAAA,IAAU,KAAA,CAAM,OAAO,MAAA,CAAO;AAAA,KACvD;AACA,IAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAY,CAAC,UAAU,UAAA,CAAW,KAAA,CAAM,KAAM,CAAC,CAAA;AAEtE,IAAA,OAAO;AAAA,MACN,GAAG,MAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACL;AAAA;AACD,KACD;AAAA,EACD,CAAC,CAAA;AACF;AAEA,SAAS,iBAAA,CAAkB;AAAA,EAC1B,iBAAA;AAAA,EACA;AACD,CAAA,EAGG;AACF,EAAA,MAAM,gBAAgB,YAAA,CAAa;AAAA,IAClC,EAAA,EAAI,kBAAkB,GAAA,CAAI,CAAC,EAAE,OAAA,EAAQ,KAAM,QAAQ,GAAG,CAAA;AAAA,IACtD,EAAA,EAAI,OAAA;AAAA,MACH,kBAAkB,GAAA,CAAI,CAAC,EAAE,aAAA,OAAoB,aAAa;AAAA,KAC3D;AAAA,IACA,EAAA,EAAI,OAAA;AAAA,MACH,iBAAA,CACE,GAAA,CAAI,CAAC,EAAE,aAAY,KAAM,WAAA,EAAa,GAAA,CAAI,CAAC,EAAE,EAAA,EAAG,KAAM,EAAE,CAAC,EACzD,IAAA;AAAK;AACR,GACA,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,aAAA,EAAe;AACnB,MAAA;AAAA,IACD;AAEA,IAAA,OAAO,iBAAA,CAAkB;AAAA,MACxB,iBAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACN,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,iBAAiB,CAAC,CAAA;AAErC,EAAA,IAAI,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC3B,IAAA,uBAAO,GAAA,CAAC,iBAAc,KAAA,EAAO,EAAE,OAAO,IAAA,EAAK,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,aAAA,EAAe,WAAW,CAAA,EAAG;AAChC,IAAA,2BACE,iBAAA,EAAA,EAAkB,IAAA,EAAY,UAAA,EAAY,IAAA,CAAK,aAAa,CAAA,EAAI,CAAA;AAAA,EAEnE,CAAA,MAAO;AACN,IAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAY,WAAA,EAAa,aAAA,EAAgB,CAAA;AAAA,EACpE;AACD;AAEA,SAAS,oBAAA,CAAqB;AAAA,EAC7B,iBAAA;AAAA,EACA;AACD,CAAA,EAGG;AACF,EAAA,MAAM,gBAAgB,YAAA,CAAa;AAAA,IAClC,EAAA,EAAI,kBAAkB,GAAA,CAAI,CAAC,EAAE,OAAA,EAAQ,KAAM,QAAQ,GAAG,CAAA;AAAA,IACtD,EAAA,EAAI,OAAA;AAAA,MACH,kBAAkB,GAAA,CAAI,CAAC,EAAE,aAAA,OAAoB,aAAa;AAAA,KAC3D;AAAA,IACA,EAAA,EAAI,OAAA;AAAA,MACH,iBAAA,CACE,GAAA,CAAI,CAAC,EAAE,aAAY,KAAM,WAAA,EAAa,GAAA,CAAI,CAAC,EAAE,EAAA,EAAG,KAAM,EAAE,CAAC,EACzD,IAAA;AAAK;AACR,GACA,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC7B,IAAA,IAAI,CAAC,aAAA,EAAe;AACnB,MAAA;AAAA,IACD;AACA,IAAA,OAAO,OAAO,aAAA,EAAe,CAAC,UAAU,UAAA,CAAW,KAAA,CAAM,KAAM,CAAC,CAAA;AAAA,EAGjE,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,IAAI,KAAA,CAAM,OAAiB,CAAA,EAAG;AAC7B,IAAA,uBACC,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,EAAE,KAAA,EAAO,MAAK,EAAG,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAM,QAAA,EAAS,CAAA;AAAA,EAEjE;AACA,EAAA,2BACE,aAAA,EAAA,EAAc,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,IAAQ,QAAA,EAAQ,IAAA,EAAC,OAAM,QAAA,EACrD,QAAA,kBAAA,GAAA,CAAC,OAAG,QAAA,EAAA,OAAA,EAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,IAAW,CAAA,EACpC,CAAA;AAEF;AAEO,SAAS,cAAA,CAAe;AAAA,EAC9B,KAAA;AAAA,EACA;AACD,CAAA,EAAgE;AAC/D,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,EAAA,MAAM,cAAA,GACL,2BAAoC,gBAAgB,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACtC,IAAA,OAAO,KAAA,CACL,WAAA,EAAY,CACZ,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACV,GAAA,CAAI,QAAA,CAAS,OAAO,EAAE;AAAA,KACvB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAA,CAAO,EAAE,CAAC,CAAA;AAErB,EAAA,IAAI,cAAA,EAAgB;AACnB,IAAA,uBACC,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACA,IAAA;AAAA,QACA,iBAAA,EAAmB;AAAA;AAAA,KACpB;AAAA,EAEF;AAEA,EAAA,uBACC,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAY,iBAAA,EAAmB,gBAAA,EAAkB,CAAA;AAEtE","file":"DataFooterCell.js","sourcesContent":["import type { HeaderContext } from \"@tanstack/react-table\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardTableCellConfig,\n\tScorecardTableData,\n} from \"../../../schemas/config\";\nimport { useMemo } from \"react\";\nimport { DataTableCell } from \"@dhis2/ui\";\nimport type { AnalyticsData } from \"../../../utils/data\";\nimport { compact, head, isEmpty, meanBy } from \"lodash\";\nimport { LinkedAverageCell, SingleAverageCell } from \"./AverageCell\";\nimport { useScorecardViewStateValue } from \"../../../utils\";\nimport { useDataValue } from \"../../../hooks/value\";\n\nfunction getOrgUnitAverage({\n\tdataSourcesConfig,\n\tdata,\n}: {\n\tdataSourcesConfig: ScorecardTableCellConfig[];\n\tdata: AnalyticsData[];\n}): ScorecardAverageCellData[] {\n\tconst dataSourceConfig = head(dataSourcesConfig)!;\n\n\treturn dataSourceConfig?.dataSources?.map((config) => {\n\t\tconst period = dataSourceConfig.currentPeriod!;\n\t\tconst dataValues = data.filter(\n\t\t\t(datum) => datum.pe === period && datum.dx === config.id,\n\t\t);\n\t\tconst average = meanBy(dataValues, (value) => parseFloat(value.value!));\n\n\t\treturn {\n\t\t\t...config,\n\t\t\tdata: {\n\t\t\t\taverage,\n\t\t\t},\n\t\t};\n\t});\n}\n\nfunction OrgUnitFooterCell({\n\tdataSourcesConfig,\n\tsize,\n}: {\n\tdataSourcesConfig: ScorecardTableCellConfig[];\n\tsize: number;\n}) {\n\tconst analyticsData = useDataValue({\n\t\tou: dataSourcesConfig.map(({ orgUnit }) => orgUnit.uid),\n\t\tpe: compact(\n\t\t\tdataSourcesConfig.map(({ currentPeriod }) => currentPeriod),\n\t\t),\n\t\tdx: compact(\n\t\t\tdataSourcesConfig\n\t\t\t\t.map(({ dataSources }) => dataSources?.map(({ id }) => id))\n\t\t\t\t.flat(),\n\t\t),\n\t});\n\n\tconst averageValues = useMemo(() => {\n\t\tif (!analyticsData) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn getOrgUnitAverage({\n\t\t\tdataSourcesConfig,\n\t\t\tdata: analyticsData,\n\t\t});\n\t}, [analyticsData, dataSourcesConfig]);\n\n\tif (isEmpty(averageValues)) {\n\t\treturn <DataTableCell style={{ width: size }} bordered />;\n\t}\n\n\tif (averageValues?.length === 1) {\n\t\treturn (\n\t\t\t<SingleAverageCell size={size} dataSource={head(averageValues)!} />\n\t\t);\n\t} else {\n\t\treturn <LinkedAverageCell size={size} dataSources={averageValues!} />;\n\t}\n}\n\nfunction DataHolderFooterCell({\n\tdataSourcesConfig,\n\tsize,\n}: {\n\tdataSourcesConfig: ScorecardTableCellConfig[];\n\tsize: number;\n}) {\n\tconst analyticsData = useDataValue({\n\t\tou: dataSourcesConfig.map(({ orgUnit }) => orgUnit.uid),\n\t\tpe: compact(\n\t\t\tdataSourcesConfig.map(({ currentPeriod }) => currentPeriod),\n\t\t),\n\t\tdx: compact(\n\t\t\tdataSourcesConfig\n\t\t\t\t.map(({ dataSources }) => dataSources?.map(({ id }) => id))\n\t\t\t\t.flat(),\n\t\t),\n\t});\n\tconst average = useMemo(() => {\n\t\tif (!analyticsData) {\n\t\t\treturn;\n\t\t}\n\t\treturn meanBy(analyticsData, (datum) => parseFloat(datum.value!)) as\n\t\t\t| number\n\t\t\t| undefined;\n\t}, [analyticsData]);\n\n\tif (isNaN(average as number)) {\n\t\treturn (\n\t\t\t<DataTableCell style={{ width: size }} bordered align=\"center\" />\n\t\t);\n\t}\n\treturn (\n\t\t<DataTableCell style={{ width: size }} bordered align=\"center\">\n\t\t\t<b>{average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function DataFooterCell({\n\ttable,\n\tcolumn,\n}: HeaderContext<ScorecardTableData, ScorecardTableCellConfig>) {\n\tconst size = column.getSize();\n\tconst showDataInRows =\n\t\tuseScorecardViewStateValue<boolean>(\"showDataInRows\");\n\tconst dataSourceConfig = useMemo(() => {\n\t\treturn table\n\t\t\t.getRowModel()\n\t\t\t.rows.map((row) =>\n\t\t\t\trow.getValue(column.id),\n\t\t\t) as ScorecardTableCellConfig[];\n\t}, [table, column.id]);\n\n\tif (showDataInRows) {\n\t\treturn (\n\t\t\t<DataHolderFooterCell\n\t\t\t\tsize={size}\n\t\t\t\tdataSourcesConfig={dataSourceConfig}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<OrgUnitFooterCell size={size} dataSourcesConfig={dataSourceConfig} />\n\t);\n}\n"]}
|
|
@@ -113,6 +113,15 @@ function FurtherAnalysisMenu({
|
|
|
113
113
|
}
|
|
114
114
|
]
|
|
115
115
|
},
|
|
116
|
+
type: {
|
|
117
|
+
visualizationType: "chart",
|
|
118
|
+
chartType: "line"
|
|
119
|
+
},
|
|
120
|
+
layout: {
|
|
121
|
+
columns: ["dx"],
|
|
122
|
+
rows: ["pe"],
|
|
123
|
+
filters: ["ou"]
|
|
124
|
+
},
|
|
116
125
|
orgUnitSelection: {
|
|
117
126
|
levels: [],
|
|
118
127
|
groups: [],
|
|
@@ -143,6 +152,15 @@ function FurtherAnalysisMenu({
|
|
|
143
152
|
}
|
|
144
153
|
]
|
|
145
154
|
},
|
|
155
|
+
type: {
|
|
156
|
+
visualizationType: "chart",
|
|
157
|
+
chartType: "line"
|
|
158
|
+
},
|
|
159
|
+
layout: {
|
|
160
|
+
columns: ["dx"],
|
|
161
|
+
rows: ["pe"],
|
|
162
|
+
filters: ["ou"]
|
|
163
|
+
},
|
|
146
164
|
orgUnitSelection: {
|
|
147
165
|
levels: [],
|
|
148
166
|
groups: [],
|
|
@@ -173,6 +191,15 @@ function FurtherAnalysisMenu({
|
|
|
173
191
|
}
|
|
174
192
|
]
|
|
175
193
|
},
|
|
194
|
+
type: {
|
|
195
|
+
visualizationType: "chart",
|
|
196
|
+
chartType: "line"
|
|
197
|
+
},
|
|
198
|
+
layout: {
|
|
199
|
+
columns: ["dx"],
|
|
200
|
+
rows: ["pe"],
|
|
201
|
+
filters: ["ou"]
|
|
202
|
+
},
|
|
176
203
|
orgUnitSelection: {
|
|
177
204
|
levels: [],
|
|
178
205
|
groups: [],
|
|
@@ -203,6 +230,15 @@ function FurtherAnalysisMenu({
|
|
|
203
230
|
}
|
|
204
231
|
]
|
|
205
232
|
},
|
|
233
|
+
type: {
|
|
234
|
+
visualizationType: "chart",
|
|
235
|
+
chartType: "line"
|
|
236
|
+
},
|
|
237
|
+
layout: {
|
|
238
|
+
columns: ["dx"],
|
|
239
|
+
rows: ["pe"],
|
|
240
|
+
filters: ["ou"]
|
|
241
|
+
},
|
|
206
242
|
orgUnitSelection: {
|
|
207
243
|
levels: [],
|
|
208
244
|
groups: [],
|
|
@@ -233,6 +269,15 @@ function FurtherAnalysisMenu({
|
|
|
233
269
|
}
|
|
234
270
|
]
|
|
235
271
|
},
|
|
272
|
+
type: {
|
|
273
|
+
visualizationType: "chart",
|
|
274
|
+
chartType: "line"
|
|
275
|
+
},
|
|
276
|
+
layout: {
|
|
277
|
+
columns: ["dx"],
|
|
278
|
+
rows: ["pe"],
|
|
279
|
+
filters: ["ou"]
|
|
280
|
+
},
|
|
236
281
|
orgUnitSelection: {
|
|
237
282
|
levels: [],
|
|
238
283
|
groups: [],
|