@hisptz/dhis2-analytics 2.1.14 → 2.1.16
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/ChartAnalytics/models/gauge.js +1 -1
- package/dist/components/ChartAnalytics/models/gauge.js.map +1 -1
- package/dist/components/DHIS2PivotTable/DHIS2PivotTable.js +6 -6
- package/dist/components/DHIS2PivotTable/DHIS2PivotTable.js.map +1 -1
- package/dist/components/DHIS2PivotTable/components/TableBody/index.js +19 -9
- package/dist/components/DHIS2PivotTable/components/TableBody/index.js.map +1 -1
- package/dist/components/DHIS2PivotTable/services/engine.js +26 -0
- package/dist/components/DHIS2PivotTable/services/engine.js.map +1 -1
- package/dist/components/DHIS2PivotTable/utils/color.js +14 -0
- package/dist/components/DHIS2PivotTable/utils/color.js.map +1 -0
- package/dist/esm/components/ChartAnalytics/models/gauge.js +1 -1
- package/dist/esm/components/ChartAnalytics/models/gauge.js.map +1 -1
- package/dist/esm/components/DHIS2PivotTable/DHIS2PivotTable.js +3 -3
- package/dist/esm/components/DHIS2PivotTable/DHIS2PivotTable.js.map +1 -1
- package/dist/esm/components/DHIS2PivotTable/components/TableBody/index.js +19 -9
- package/dist/esm/components/DHIS2PivotTable/components/TableBody/index.js.map +1 -1
- package/dist/esm/components/DHIS2PivotTable/services/engine.js +26 -0
- package/dist/esm/components/DHIS2PivotTable/services/engine.js.map +1 -1
- package/dist/esm/components/DHIS2PivotTable/utils/color.js +12 -0
- package/dist/esm/components/DHIS2PivotTable/utils/color.js.map +1 -0
- package/dist/types/components/ChartAnalytics/models/gauge.d.ts.map +1 -1
- package/dist/types/components/ChartAnalytics/types/props.d.ts +1 -1
- package/dist/types/components/ChartAnalytics/types/props.d.ts.map +1 -1
- package/dist/types/components/DHIS2PivotTable/components/TableBody/index.d.ts.map +1 -1
- package/dist/types/components/DHIS2PivotTable/services/engine.d.ts +24 -3
- package/dist/types/components/DHIS2PivotTable/services/engine.d.ts.map +1 -1
- package/dist/types/components/DHIS2PivotTable/utils/color.d.ts +2 -0
- package/dist/types/components/DHIS2PivotTable/utils/color.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -78,7 +78,7 @@ class DHIS2GaugeChart extends index_js.DHIS2Chart {
|
|
|
78
78
|
const chartColors = this.config.colors ?? [];
|
|
79
79
|
const legendSet = this.config.legendSet;
|
|
80
80
|
const legendColor = legendSet ? Map.getColorFromLegendSet(
|
|
81
|
-
Array.isArray(legendSet) ? lodash.head(legendSet)
|
|
81
|
+
Array.isArray(legendSet) ? lodash.head(legendSet)?.legends ?? [] : legendSet.legends,
|
|
82
82
|
this.getValue()
|
|
83
83
|
) : void 0;
|
|
84
84
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":["DHIS2Chart","head","get","colors","getColorFromLegendSet"],"mappings":";;;;;;;AAeA,MAAM,iBAAoB,GAAA,MAAA;AAC1B,MAAM,iBAAoB,GAAA,MAAA;AAEnB,MAAM,wBAAwBA,mBAAW,CAAA;AAAA,EAC/C,iBAA4B,GAAA;AAC3B,IAAO,OAAA,YAAA;AAAA;AACR,EAEA,cAA8B,GAAA;AAC7B,IAAO,OAAA;AAAA,MACN,UAAY,EAAA;AAAA,QACX,YAAc,EAAA,CAAA;AAAA,QACd,KAAO,EAAAC,WAAA,CAAK,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QAC9B,UAAY,EAAA;AAAA,UACX,CAAG,EAAA,CAAA;AAAA,UACH,WAAa,EAAA,CAAA;AAAA,UACb,OAAS,EAAA;AAAA,SACV;AAAA,QACA,WAAa,EAAA,CAAA;AAAA,QACb,WAAa,EAAA,OAAA;AAAA,QACb,WAAa,EAAA;AAAA;AACd,KACD;AAAA;AACD,EAEA,QAA+B,GAAA;AAC9B,IAAA,MAAM,EAAE,IAAA,EAAM,OAAQ,EAAA,GAAI,IAAK,CAAA,SAAA;AAC/B,IAAA,MAAM,mBAAmB,OAAS,CAAA,SAAA;AAAA,MACjC,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA;AAAA,KACxB;AACA,IAAO,OAAA,UAAA,CAAWC,WAAID,WAAK,CAAA,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA,IAAK,EAAE,CAAA;AAAA;AAC5D,EAEA,OAAmC,GAAA;AAClC,IAAO,OAAA;AAAA,MACN,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAK,CAAA;AAAA,MACrB,IAAM,EAAA,iBAAA;AAAA,MACN,UAAY,EAAA,GAAA;AAAA,MACZ,QAAU,EAAA,EAAA;AAAA,MACV,UAAY,EAAA;AAAA,QACX;AAAA,UACC,eAAiB,EAAA,aAAA;AAAA,UACjB,WAAa,EAAA,KAAA;AAAA,UACb,WAAa,EAAA,MAAA;AAAA,UACb,KAAO,EAAA;AAAA;AACR;AACD,KACD;AAAA;AACD,EAEA,SAAiC,GAAA;AAChC,IAAM,MAAA,KAAA,GAAQ,KAAK,QAAS,EAAA;AAC5B,IAAO,OAAA;AAAA,MACN;AAAA,QACC,MAAM,IAAK,CAAA,EAAA;AAAA,QACX,MAAM,CAAC,IAAA,CAAK,KAAM,CAAA,KAAA,IAAS,CAAC,CAAC,CAAA;AAAA,QAC7B,KAAO,EAAA,OAAA;AAAA,QACP,mBAAqB,EAAA,KAAA;AAAA,QACrB,UAAY,EAAA;AAAA,UACX,CAAG,EAAA,CAAA;AAAA,UACH,WAAa,EAAA,CAAA;AAAA,UACb,aAAe,EAAA,QAAA;AAAA,UACf,KAAO,EAAA;AAAA,YACN,QAAU,EAAA,iBAAA;AAAA,YACV,OAAOE,SAAO,CAAA;AAAA;AACf,SACD;AAAA,QACA,OAAS,EAAA,SAAA;AAAA,QACT,OAAS,EAAA;AAAA,UACR,WAAa,EAAA;AAAA;AACd;AACD,KACD;AAAA;AACD,EAEA,QAA2B,GAAA;AAC1B,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,IAAU,EAAC;AAC3C,IAAM,MAAA,SAAA,GAAY,KAAK,MAAO,CAAA,SAAA;AAC9B,IAAA,MAAM,cAAc,SACjB,GAAAC,yBAAA;AAAA,MACA,KAAA,CAAM,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":["DHIS2Chart","head","get","colors","getColorFromLegendSet"],"mappings":"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","file":"gauge.js","sourcesContent":["import {\n\ttype PaneBackgroundOptions,\n\ttype PaneOptions,\n\tPlotOptions,\n\tSeriesGaugeOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\ttype YAxisOptions,\n} from \"highcharts\";\nimport { get, head } from \"lodash\";\nimport { DHIS2Chart } from \"./index.js\";\nimport { getColorFromLegendSet } from \"../../Map\";\nimport { colors } from \"@dhis2/ui\";\nimport type { LegendSet } from \"@hisptz/dhis2-utils/src\";\n\nconst DEFAULT_PANE_SIZE = \"100%\";\nconst DEFAULT_FONT_SIZE = \"28px\";\n\nexport class DHIS2GaugeChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"solidgauge\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tsolidgauge: {\n\t\t\t\tborderRadius: 4,\n\t\t\t\tcolor: head(this.config.colors),\n\t\t\t\tdataLabels: {\n\t\t\t\t\ty: 5,\n\t\t\t\t\tborderWidth: 0,\n\t\t\t\t\tuseHTML: true,\n\t\t\t\t},\n\t\t\t\tborderWidth: 0,\n\t\t\t\tborderColor: \"white\",\n\t\t\t\tinnerRadius: \"60%\",\n\t\t\t},\n\t\t} as Highcharts.PlotOptions;\n\t}\n\n\tgetValue(): number | undefined {\n\t\tconst { rows, headers } = this.analytics;\n\t\tconst valueHeaderIndex = headers!.findIndex(\n\t\t\t({ name }) => name === \"value\",\n\t\t);\n\t\treturn parseFloat(get(head(rows), [valueHeaderIndex]) ?? \"\");\n\t}\n\n\tgetPane(): PaneOptions | undefined {\n\t\treturn {\n\t\t\tcenter: [\"50%\", \"85%\"],\n\t\t\tsize: DEFAULT_PANE_SIZE,\n\t\t\tstartAngle: -90,\n\t\t\tendAngle: 90,\n\t\t\tbackground: [\n\t\t\t\t{\n\t\t\t\t\tbackgroundColor: \"transparent\",\n\t\t\t\t\tinnerRadius: \"60%\",\n\t\t\t\t\touterRadius: \"100%\",\n\t\t\t\t\tshape: \"arc\",\n\t\t\t\t} as PaneBackgroundOptions,\n\t\t\t],\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst value = this.getValue();\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: this.id,\n\t\t\t\tdata: [Math.round(value ?? 0)],\n\t\t\t\tcolor: \"white\",\n\t\t\t\tenableMouseTracking: false,\n\t\t\t\tdataLabels: {\n\t\t\t\t\ty: 0,\n\t\t\t\t\tborderWidth: 0,\n\t\t\t\t\tverticalAlign: \"bottom\",\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t\tcolor: colors.grey900,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcompare: \"percent\",\n\t\t\t\ttooltip: {\n\t\t\t\t\tvalueSuffix: \"%\",\n\t\t\t\t},\n\t\t\t},\n\t\t] as unknown as SeriesGaugeOptions[];\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tconst chartColors = this.config.colors ?? [];\n\t\tconst legendSet = this.config.legendSet;\n\t\tconst legendColor = legendSet\n\t\t\t? getColorFromLegendSet(\n\t\t\t\t\tArray.isArray(legendSet)\n\t\t\t\t\t\t? (head(legendSet as unknown as Array<LegendSet>)\n\t\t\t\t\t\t\t\t?.legends ?? [])\n\t\t\t\t\t\t: (legendSet as LegendSet).legends,\n\t\t\t\t\tthis.getValue(),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\treturn [\n\t\t\t{\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 100,\n\t\t\t\toffset: 0,\n\t\t\t\tlineWidth: 0,\n\t\t\t\tminorTicks: false,\n\t\t\t\ttickWidth: 0,\n\t\t\t\ttype: \"linear\",\n\t\t\t\tlabels: {\n\t\t\t\t\tenabled: false,\n\t\t\t\t\tdistance: 20,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmaxPadding: 0,\n\t\t\t\tpane: 0,\n\t\t\t\tminColor: legendColor ?? head(chartColors),\n\t\t\t\tmaxColor: legendColor ?? head(chartColors),\n\t\t\t\tmargin: 0,\n\t\t\t} as YAxisOptions,\n\t\t];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -4,9 +4,9 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var engine_js = require('./services/engine.js');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var engine_js$1 = require('./state/engine.js');
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
7
|
+
var Table = require('./components/Table');
|
|
8
|
+
var TableHeaders = require('./components/TableHeaders');
|
|
9
|
+
var TableBody = require('./components/TableBody');
|
|
10
10
|
|
|
11
11
|
function DHIS2PivotTable({
|
|
12
12
|
analytics,
|
|
@@ -18,9 +18,9 @@ function DHIS2PivotTable({
|
|
|
18
18
|
() => new engine_js.DHIS2PivotTableEngine({ analytics, config }),
|
|
19
19
|
[analytics, config]
|
|
20
20
|
);
|
|
21
|
-
return /* @__PURE__ */ jsxRuntime.jsx(engine_js$1.DHIS2PivotTableEngineProvider, { engine, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
22
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
+
return /* @__PURE__ */ jsxRuntime.jsx(engine_js$1.DHIS2PivotTableEngineProvider, { engine, children: /* @__PURE__ */ jsxRuntime.jsxs(Table.PivotTable, { setRef, tableProps, children: [
|
|
22
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableHeaders.TableHeaders, {}),
|
|
23
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableBody.CustomPivotTableBody, {})
|
|
24
24
|
] }) });
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/DHIS2PivotTable/DHIS2PivotTable.tsx"],"names":["useMemo","DHIS2PivotTableEngine","DHIS2PivotTableEngineProvider","jsxs","PivotTable","jsx","TableHeaders","CustomPivotTableBody"],"mappings":";;;;;;;;;;AA6BO,SAAS,eAAgB,CAAA;AAAA,EAC/B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACD,CAAyB,EAAA;AACxB,EAAA,MAAM,MAAS,GAAAA,aAAA;AAAA,IACd,MAAM,IAAIC,+BAAA,CAAsB,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,IACrD,CAAC,WAAW,MAAM;AAAA,GACnB;AAEA,EAAA,sCACEC,yCAA8B,EAAA,EAAA,MAAA,EAC9B,QAAC,kBAAAC,eAAA,CAAAC,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DHIS2PivotTable/DHIS2PivotTable.tsx"],"names":["useMemo","DHIS2PivotTableEngine","DHIS2PivotTableEngineProvider","jsxs","PivotTable","jsx","TableHeaders","CustomPivotTableBody"],"mappings":";;;;;;;;;;AA6BO,SAAS,eAAgB,CAAA;AAAA,EAC/B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACD,CAAyB,EAAA;AACxB,EAAA,MAAM,MAAS,GAAAA,aAAA;AAAA,IACd,MAAM,IAAIC,+BAAA,CAAsB,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,IACrD,CAAC,WAAW,MAAM;AAAA,GACnB;AAEA,EAAA,sCACEC,yCAA8B,EAAA,EAAA,MAAA,EAC9B,QAAC,kBAAAC,eAAA,CAAAC,gBAAA,EAAA,EAAW,QAAgB,UAC3B,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,yBAAa,EAAA,EAAA,CAAA;AAAA,mCACbC,8BAAqB,EAAA,EAAA;AAAA,GAAA,EACvB,CACD,EAAA,CAAA;AAEF","file":"DHIS2PivotTable.js","sourcesContent":["import { Analytics, LegendSet } from \"@hisptz/dhis2-utils\";\nimport { DHIS2PivotTableEngine, type EngineConfig } from \"./services/engine.js\";\nimport React, { useMemo } from \"react\";\nimport { DHIS2PivotTableEngineProvider } from \"./state/engine.js\";\nimport { PivotTable } from \"./components/Table\";\nimport { TableHeaders } from \"./components/TableHeaders\";\nimport { CustomPivotTableBody } from \"./components/TableBody\";\nimport { DataTableProps } from \"@dhis2/ui\";\n\nexport interface DHIS2PivotTableOptions {\n\tlegendSets?: LegendSet[];\n\thideEmptyColumns?: boolean;\n\thideEmptyRows?: boolean;\n\tshowRowTotals?: boolean;\n\tshowColumnTotals?: boolean;\n\tshowRowSubtotals?: boolean;\n\tshowColumnSubtotals?: boolean;\n\tfixColumnHeaders?: boolean;\n\tfixRowHeaders?: boolean;\n\tshowFilterAsTitle?: boolean;\n}\n\nexport interface DHIS2PivotTableProps {\n\tanalytics: Analytics;\n\ttableProps?: DataTableProps;\n\tsetRef?: (ref: HTMLTableElement) => void;\n\tconfig: EngineConfig;\n}\n\nexport function DHIS2PivotTable({\n\tanalytics,\n\tconfig,\n\ttableProps,\n\tsetRef,\n}: DHIS2PivotTableProps) {\n\tconst engine = useMemo(\n\t\t() => new DHIS2PivotTableEngine({ analytics, config }),\n\t\t[analytics, config],\n\t);\n\n\treturn (\n\t\t<DHIS2PivotTableEngineProvider engine={engine}>\n\t\t\t<PivotTable setRef={setRef} tableProps={tableProps}>\n\t\t\t\t<TableHeaders />\n\t\t\t\t<CustomPivotTableBody />\n\t\t\t</PivotTable>\n\t\t</DHIS2PivotTableEngineProvider>\n\t);\n}\n"]}
|
|
@@ -7,6 +7,7 @@ var ui = require('@dhis2/ui');
|
|
|
7
7
|
var react = require('react');
|
|
8
8
|
var classes = require('./TableBody.module.css');
|
|
9
9
|
var usehooksTs = require('usehooks-ts');
|
|
10
|
+
var color = require('../../utils/color');
|
|
10
11
|
|
|
11
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
13
|
|
|
@@ -24,15 +25,24 @@ function DataRowRenderer({
|
|
|
24
25
|
...mapper,
|
|
25
26
|
[dimension]: item.uid
|
|
26
27
|
}));
|
|
27
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: completeMapper?.map((mapper2) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: completeMapper?.map((mapper2) => {
|
|
29
|
+
const legend = engine?.getItemValueLegend(mapper2);
|
|
30
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
31
|
+
ui.DataTableCell,
|
|
32
|
+
{
|
|
33
|
+
style: {
|
|
34
|
+
background: legend?.style === "FILL" ? legend?.color : void 0,
|
|
35
|
+
color: legend?.style === "FILL" ? color.getTextColorFromBackgroundColor(
|
|
36
|
+
legend?.color
|
|
37
|
+
) : legend?.style === "TEXT" ? legend.color : void 0
|
|
38
|
+
},
|
|
39
|
+
align: "center",
|
|
40
|
+
bordered: true,
|
|
41
|
+
children: engine?.getValue(mapper2) ?? ""
|
|
42
|
+
},
|
|
43
|
+
`${Object.values(mapper2).join("-")}-value`
|
|
44
|
+
);
|
|
45
|
+
}) });
|
|
36
46
|
}
|
|
37
47
|
function RowRenderer({
|
|
38
48
|
row,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":["useCustomPivotTableEngine","jsx","Fragment","mapper","DataTableCell","useRef","useResizeObserver","slice","isEmpty","jsxs","DataTableRow","classes","TableBody"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":["useCustomPivotTableEngine","jsx","Fragment","mapper","DataTableCell","getTextColorFromBackgroundColor","useRef","useResizeObserver","slice","isEmpty","jsxs","DataTableRow","classes","TableBody"],"mappings":"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","file":"index.js","sourcesContent":["import { Header } from \"../../services/engine\";\nimport { isEmpty, slice } from \"lodash\";\nimport { useCustomPivotTableEngine } from \"../../state/engine.js\";\nimport { DataTableCell, DataTableRow, TableBody } from \"@dhis2/ui\";\nimport React, { Fragment, ReactNode, useRef } from \"react\";\nimport { AnalyticsItem } from \"@hisptz/dhis2-utils\";\nimport classes from \"./TableBody.module.css\";\nimport { DHIS2Dimension } from \"../../interfaces\";\nimport { useResizeObserver } from \"usehooks-ts\";\nimport { getTextColorFromBackgroundColor } from \"../../utils/color\";\n\nfunction DataRowRenderer({\n\tmapper,\n\titem,\n\tdimension,\n}: {\n\tmapper?: { [key: string]: any };\n\titem: AnalyticsItem;\n\tdimension: DHIS2Dimension;\n}) {\n\tconst engine = useCustomPivotTableEngine();\n\n\tconst columnMappers = engine?.columnMap;\n\tconst completeMapper = columnMappers?.map((map) => ({\n\t\t...map,\n\t\t...mapper,\n\t\t[dimension]: item.uid,\n\t}));\n\n\treturn (\n\t\t<>\n\t\t\t{completeMapper?.map((mapper) => {\n\t\t\t\tconst legend = engine?.getItemValueLegend(mapper);\n\n\t\t\t\treturn (\n\t\t\t\t\t<DataTableCell\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\tlegend?.style === \"FILL\"\n\t\t\t\t\t\t\t\t\t? legend?.color\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\tlegend?.style === \"FILL\"\n\t\t\t\t\t\t\t\t\t? getTextColorFromBackgroundColor(\n\t\t\t\t\t\t\t\t\t\t\tlegend?.color,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: legend?.style === \"TEXT\"\n\t\t\t\t\t\t\t\t\t\t? legend.color\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={`${Object.values(mapper).join(\"-\")}-value`}\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tbordered\n\t\t\t\t\t>\n\t\t\t\t\t\t{engine?.getValue(mapper) ?? \"\"}\n\t\t\t\t\t</DataTableCell>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nfunction RowRenderer({\n\trow,\n\tindex,\n\tconfig: { rows, columns, mapper, prevWidth, fixRowHeaders },\n}: {\n\trow: Header;\n\tindex: number;\n\tconfig: {\n\t\trows: Header[];\n\t\tcolumns?: Header[];\n\t\tmapper?: { [key: string]: string | undefined };\n\t\tprevWidth?: number;\n\t\tfixRowHeaders?: boolean;\n\t};\n}): React.ReactElement | null {\n\tconst cellRef = useRef<HTMLElement | null>(null);\n\tconst { width } = useResizeObserver({\n\t\tref: cellRef,\n\t});\n\n\tconst rowSpan = slice(rows, index + 1).reduce((acc, column) => {\n\t\treturn acc * (column.items?.length ?? 1);\n\t}, 1);\n\tconst hasSubRows = !isEmpty(rows[index + 1]);\n\tconst nextRow = rows[index + 1];\n\n\treturn (\n\t\t<>\n\t\t\t{row?.items?.map((item) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={`${item.name}-${row.dimension}-fragment`}>\n\t\t\t\t\t\t<DataTableRow key={`${item.name}-${row.dimension}-row`}>\n\t\t\t\t\t\t\t<DataTableCell\n\t\t\t\t\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t\t\t\t\tref={cellRef}\n\t\t\t\t\t\t\t\tfixed={fixRowHeaders}\n\t\t\t\t\t\t\t\tleft={`${prevWidth}px` as unknown as boolean}\n\t\t\t\t\t\t\t\tclassName={classes[\"header-cell\"]}\n\t\t\t\t\t\t\t\ttag=\"th\"\n\t\t\t\t\t\t\t\tbordered\n\t\t\t\t\t\t\t\trowSpan={(\n\t\t\t\t\t\t\t\t\trowSpan + (hasSubRows ? 1 : 0)\n\t\t\t\t\t\t\t\t).toString()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.name as unknown as string | ReactNode}\n\t\t\t\t\t\t\t</DataTableCell>\n\t\t\t\t\t\t\t{!hasSubRows ? (\n\t\t\t\t\t\t\t\t<DataRowRenderer\n\t\t\t\t\t\t\t\t\tdimension={row.dimension}\n\t\t\t\t\t\t\t\t\tmapper={mapper}\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</DataTableRow>\n\t\t\t\t\t\t{hasSubRows ? (\n\t\t\t\t\t\t\t<RowRenderer\n\t\t\t\t\t\t\t\trow={nextRow}\n\t\t\t\t\t\t\t\tindex={index + 1}\n\t\t\t\t\t\t\t\tconfig={{\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\t\t\tprevWidth: width,\n\t\t\t\t\t\t\t\t\tmapper: {\n\t\t\t\t\t\t\t\t\t\t...mapper,\n\t\t\t\t\t\t\t\t\t\t[row.dimension]:\n\t\t\t\t\t\t\t\t\t\t\titem.uid as unknown as string,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nexport function CustomPivotTableBody() {\n\tconst engine = useCustomPivotTableEngine();\n\tconst rows = engine?.rowHeaders;\n\tconst columns = engine?.columnHeaders;\n\tconst fixRowHeaders = engine?.fixRowHeaders;\n\n\tif (!rows || isEmpty(rows)) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<TableBody>\n\t\t\t<RowRenderer\n\t\t\t\trow={rows[0]}\n\t\t\t\tindex={0}\n\t\t\t\tconfig={{ rows, columns, fixRowHeaders }}\n\t\t\t/>\n\t\t</TableBody>\n\t);\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var lodash = require('lodash');
|
|
4
|
+
var Map = require('../../Map');
|
|
4
5
|
|
|
5
6
|
class DHIS2PivotTableEngine {
|
|
6
7
|
constructor({
|
|
@@ -50,6 +51,31 @@ class DHIS2PivotTableEngine {
|
|
|
50
51
|
getItem(id) {
|
|
51
52
|
return this.analyticsData.metaData?.items[id];
|
|
52
53
|
}
|
|
54
|
+
getItemValueLegend(mapper) {
|
|
55
|
+
const legend = this.config.options?.legend;
|
|
56
|
+
if (!legend) return;
|
|
57
|
+
const value = this.getValue(mapper);
|
|
58
|
+
const strategy = legend?.strategy;
|
|
59
|
+
if (strategy === "FIXED") {
|
|
60
|
+
const legends = legend.set.legends;
|
|
61
|
+
const color = Map.getColorFromLegendSet(legends, value);
|
|
62
|
+
return {
|
|
63
|
+
color,
|
|
64
|
+
style: legend.style
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (strategy === "BY_DATA_ITEM") {
|
|
68
|
+
const legendSet = legend.legendMap.get(mapper.dx);
|
|
69
|
+
if (!legendSet) return;
|
|
70
|
+
const legends = legendSet.legends;
|
|
71
|
+
const color = Map.getColorFromLegendSet(legends, value);
|
|
72
|
+
return {
|
|
73
|
+
color,
|
|
74
|
+
style: legend.style
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
53
79
|
getValue(mapper) {
|
|
54
80
|
const dimensions = Object.values(mapper);
|
|
55
81
|
const data = this.analyticsData.rows?.filter(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":["findIndex","dimension","compact","intersection","times","zip"],"mappings":"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","file":"engine.js","sourcesContent":["import { Analytics, AnalyticsItem, LegendSet } from \"@hisptz/dhis2-utils\";\nimport { compact, findIndex, intersection, times, zip } from \"lodash\";\nimport { DHIS2Dimension } from \"../interfaces/index.js\";\n\nexport interface EngineConfig {\n\tlayout: {\n\t\tcolumns: { dimension: DHIS2Dimension; label?: string }[];\n\t\trows: { dimension: DHIS2Dimension; label?: string }[];\n\t\tfilter?: { dimension: DHIS2Dimension; label?: string }[];\n\t};\n\toptions?: {\n\t\tlegendSets?: LegendSet[];\n\t\thideEmptyColumns?: boolean;\n\t\thideEmptyRows?: boolean;\n\t\tshowRowTotals?: boolean;\n\t\tshowColumnTotals?: boolean;\n\t\tshowRowSubtotals?: boolean;\n\t\tshowColumnSubtotals?: boolean;\n\t\tshowFilterAsTitle?: boolean;\n\t\tfixColumnHeaders?: boolean;\n\t\tfixRowHeaders?: boolean;\n\t\t[key: string]: any;\n\t};\n}\n\nexport interface Header {\n\tdimension: DHIS2Dimension;\n\tlabel?: string;\n\titems?: AnalyticsItem[];\n}\n\nexport class DHIS2PivotTableEngine {\n\tanalyticsData: Analytics;\n\tvalueIndex: number;\n\tconfig: EngineConfig;\n\trowHeaders?: Header[];\n\tcolumnHeaders?: Header[];\n\n\tcolumnMap?: { [key: string]: any }[];\n\n\tconstructor({\n\t\tanalytics,\n\t\tconfig,\n\t}: {\n\t\tanalytics: Analytics;\n\t\tconfig: EngineConfig;\n\t}) {\n\t\tthis.config = config;\n\t\tthis.analyticsData = analytics;\n\t\tthis.valueIndex = findIndex(this.analyticsData.headers, [\n\t\t\t\"name\",\n\t\t\t\"value\",\n\t\t]);\n\t\tthis.getHeaders();\n\t\tthis.getColumnMap();\n\t}\n\n\tget title() {\n\t\tconst filters = this.config.layout.filter ?? [];\n\t\tconst labels =\n\t\t\tfilters?.map(({ dimension }) => {\n\t\t\t\tconst dimensions =\n\t\t\t\t\tthis.analyticsData.metaData?.dimensions[dimension];\n\n\t\t\t\treturn dimensions?.map((dimension) => {\n\t\t\t\t\tconst dimensionItem =\n\t\t\t\t\t\tthis.analyticsData.metaData?.items[dimension];\n\t\t\t\t\treturn dimensionItem?.name;\n\t\t\t\t});\n\t\t\t}) ?? [];\n\n\t\treturn compact(labels.flat()).join(\", \");\n\t}\n\n\tget titleSpan() {\n\t\tconst rowHeaders = this.rowHeaders?.length ?? 0;\n\t\tconst columnHeaders =\n\t\t\tthis.columnHeaders?.reduce(\n\t\t\t\t(acc, val) => acc + (val.items?.length ?? 0),\n\t\t\t\t0,\n\t\t\t) ?? 0;\n\n\t\treturn rowHeaders + columnHeaders;\n\t}\n\n\tget showTitle() {\n\t\treturn this.config?.options?.showFilterAsTitle;\n\t}\n\n\tget fixColumnHeaders() {\n\t\treturn this.config.options?.fixColumnHeaders ?? true;\n\t}\n\n\tget fixRowHeaders() {\n\t\treturn this.config.options?.fixRowHeaders ?? true;\n\t}\n\n\tgetDimensionItems(dimension: DHIS2Dimension) {\n\t\treturn this.analyticsData.metaData?.dimensions[dimension] ?? [];\n\t}\n\n\tgetItem(id: string) {\n\t\treturn this.analyticsData.metaData?.items[id as any];\n\t}\n\n\tgetValue(mapper: { [key: string]: any }) {\n\t\tconst dimensions = Object.values(mapper);\n\t\tconst data = this.analyticsData.rows?.filter(\n\t\t\t(row) => intersection(row, dimensions).length >= dimensions.length,\n\t\t);\n\t\treturn data?.reduce((acc, row) => {\n\t\t\treturn acc + parseFloat(row[this.valueIndex]);\n\t\t}, 0);\n\t}\n\n\tgetHeaders() {\n\t\tthis.rowHeaders = this.config.layout.rows.map((rowConfig) => {\n\t\t\treturn {\n\t\t\t\t...rowConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(rowConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t\tthis.columnHeaders = this.config.layout.columns.map((columnConfig) => {\n\t\t\treturn {\n\t\t\t\t...columnConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(columnConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t}\n\n\tgetColumnMap() {\n\t\tconst columns = this.columnHeaders;\n\t\tconst sanitizedColumns =\n\t\t\tcompact(\n\t\t\t\tcolumns?.map(\n\t\t\t\t\t(column) =>\n\t\t\t\t\t\tcolumn.items?.map((item) => ({\n\t\t\t\t\t\t\t[column.dimension]: item.uid,\n\t\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\tconst size = sanitizedColumns.reduce((acc, items) => {\n\t\t\treturn acc * (items?.length ?? 1);\n\t\t}, 1);\n\t\tconst standardiseColumns = sanitizedColumns.map((items) => [\n\t\t\t...times(size / items.length, () => items).flat(),\n\t\t]);\n\t\tthis.columnMap = compact(\n\t\t\tzip(...standardiseColumns).map((arr) =>\n\t\t\t\tarr.reduce((obj, value) => {\n\t\t\t\t\treturn { ...obj, ...value };\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":["findIndex","dimension","compact","getColorFromLegendSet","intersection","times","zip"],"mappings":"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","file":"engine.js","sourcesContent":["import type { LegendSet } from \"@hisptz/dhis2-utils\";\nimport { Analytics, AnalyticsItem } from \"@hisptz/dhis2-utils\";\nimport { compact, findIndex, intersection, times, zip } from \"lodash\";\nimport { DHIS2Dimension } from \"../interfaces\";\nimport { getColorFromLegendSet } from \"../../Map\";\n\nexport interface BaseLegendConfig {\n\tstrategy: \"FIXED\" | \"BY_DATA_ITEM\";\n\tshowKey: boolean;\n\tstyle: \"TEXT\" | \"FILL\";\n}\nexport interface FixedLegendConfig extends BaseLegendConfig {\n\tstrategy: \"FIXED\";\n\tset: LegendSet;\n}\n\nexport interface DataItemLegendConfig extends BaseLegendConfig {\n\tstrategy: \"BY_DATA_ITEM\";\n\tlegendMap: Map<string, LegendSet>;\n}\n\nexport type LegendConfig = FixedLegendConfig | DataItemLegendConfig;\n\nexport interface EngineConfig {\n\tlayout: {\n\t\tcolumns: { dimension: DHIS2Dimension; label?: string }[];\n\t\trows: { dimension: DHIS2Dimension; label?: string }[];\n\t\tfilter?: { dimension: DHIS2Dimension; label?: string }[];\n\t};\n\toptions?: {\n\t\tlegend?: LegendConfig;\n\t\thideEmptyColumns?: boolean;\n\t\thideEmptyRows?: boolean;\n\t\tshowRowTotals?: boolean;\n\t\tshowColumnTotals?: boolean;\n\t\tshowRowSubtotals?: boolean;\n\t\tshowColumnSubtotals?: boolean;\n\t\tshowFilterAsTitle?: boolean;\n\t\tfixColumnHeaders?: boolean;\n\t\tfixRowHeaders?: boolean;\n\t\t[key: string]: any;\n\t};\n}\n\nexport interface Header {\n\tdimension: DHIS2Dimension;\n\tlabel?: string;\n\titems?: AnalyticsItem[];\n}\n\nexport class DHIS2PivotTableEngine {\n\tanalyticsData: Analytics;\n\tvalueIndex: number;\n\tconfig: EngineConfig;\n\trowHeaders?: Header[];\n\tcolumnHeaders?: Header[];\n\n\tcolumnMap?: { [key: string]: any }[];\n\n\tconstructor({\n\t\tanalytics,\n\t\tconfig,\n\t}: {\n\t\tanalytics: Analytics;\n\t\tconfig: EngineConfig;\n\t}) {\n\t\tthis.config = config;\n\t\tthis.analyticsData = analytics;\n\t\tthis.valueIndex = findIndex(this.analyticsData.headers, [\n\t\t\t\"name\",\n\t\t\t\"value\",\n\t\t]);\n\t\tthis.getHeaders();\n\t\tthis.getColumnMap();\n\t}\n\n\tget title() {\n\t\tconst filters = this.config.layout.filter ?? [];\n\t\tconst labels =\n\t\t\tfilters?.map(({ dimension }) => {\n\t\t\t\tconst dimensions =\n\t\t\t\t\tthis.analyticsData.metaData?.dimensions[dimension];\n\n\t\t\t\treturn dimensions?.map((dimension) => {\n\t\t\t\t\tconst dimensionItem =\n\t\t\t\t\t\tthis.analyticsData.metaData?.items[dimension];\n\t\t\t\t\treturn dimensionItem?.name;\n\t\t\t\t});\n\t\t\t}) ?? [];\n\n\t\treturn compact(labels.flat()).join(\", \");\n\t}\n\n\tget titleSpan() {\n\t\tconst rowHeaders = this.rowHeaders?.length ?? 0;\n\t\tconst columnHeaders =\n\t\t\tthis.columnHeaders?.reduce(\n\t\t\t\t(acc, val) => acc + (val.items?.length ?? 0),\n\t\t\t\t0,\n\t\t\t) ?? 0;\n\n\t\treturn rowHeaders + columnHeaders;\n\t}\n\n\tget showTitle() {\n\t\treturn this.config?.options?.showFilterAsTitle;\n\t}\n\n\tget fixColumnHeaders() {\n\t\treturn this.config.options?.fixColumnHeaders ?? true;\n\t}\n\n\tget fixRowHeaders() {\n\t\treturn this.config.options?.fixRowHeaders ?? true;\n\t}\n\n\tgetDimensionItems(dimension: DHIS2Dimension) {\n\t\treturn this.analyticsData.metaData?.dimensions[dimension] ?? [];\n\t}\n\n\tgetItem(id: string) {\n\t\treturn this.analyticsData.metaData?.items[id as any];\n\t}\n\n\tgetItemValueLegend(mapper: { [key: string]: any }) {\n\t\tconst legend = this.config.options?.legend;\n\t\tif (!legend) return;\n\t\tconst value = this.getValue(mapper);\n\t\tconst strategy = legend?.strategy;\n\t\tif (strategy === \"FIXED\") {\n\t\t\tconst legends = legend.set.legends;\n\t\t\tconst color = getColorFromLegendSet(legends, value);\n\t\t\treturn {\n\t\t\t\tcolor,\n\t\t\t\tstyle: legend.style,\n\t\t\t};\n\t\t}\n\t\tif (strategy === \"BY_DATA_ITEM\") {\n\t\t\tconst legendSet = legend.legendMap.get(mapper.dx);\n\t\t\tif (!legendSet) return;\n\t\t\tconst legends = legendSet.legends;\n\t\t\tconst color = getColorFromLegendSet(legends, value);\n\t\t\treturn {\n\t\t\t\tcolor,\n\t\t\t\tstyle: legend.style,\n\t\t\t};\n\t\t}\n\t\treturn;\n\t}\n\n\tgetValue(mapper: { [key: string]: any }) {\n\t\tconst dimensions = Object.values(mapper);\n\t\tconst data = this.analyticsData.rows?.filter(\n\t\t\t(row) => intersection(row, dimensions).length >= dimensions.length,\n\t\t);\n\t\treturn data?.reduce((acc, row) => {\n\t\t\treturn acc + parseFloat(row[this.valueIndex]);\n\t\t}, 0);\n\t}\n\n\tgetHeaders() {\n\t\tthis.rowHeaders = this.config.layout.rows.map((rowConfig) => {\n\t\t\treturn {\n\t\t\t\t...rowConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(rowConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t\tthis.columnHeaders = this.config.layout.columns.map((columnConfig) => {\n\t\t\treturn {\n\t\t\t\t...columnConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(columnConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t}\n\n\tgetColumnMap() {\n\t\tconst columns = this.columnHeaders;\n\t\tconst sanitizedColumns =\n\t\t\tcompact(\n\t\t\t\tcolumns?.map((column) =>\n\t\t\t\t\tcolumn.items?.map((item) => ({\n\t\t\t\t\t\t[column.dimension]: item.uid,\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\tconst size = sanitizedColumns.reduce((acc, items) => {\n\t\t\treturn acc * (items?.length ?? 1);\n\t\t}, 1);\n\t\tconst standardiseColumns = sanitizedColumns.map((items) => [\n\t\t\t...times(size / items.length, () => items).flat(),\n\t\t]);\n\t\tthis.columnMap = compact(\n\t\t\tzip(...standardiseColumns).map((arr) =>\n\t\t\t\tarr.reduce((obj, value) => {\n\t\t\t\t\treturn { ...obj, ...value };\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function getTextColorFromBackgroundColor(background) {
|
|
4
|
+
background = background.replace(/^#/, "");
|
|
5
|
+
let r = parseInt(background.substring(0, 2), 16);
|
|
6
|
+
let g = parseInt(background.substring(2, 4), 16);
|
|
7
|
+
let b = parseInt(background.substring(4, 6), 16);
|
|
8
|
+
let yiq = (r * 299 + g * 587 + b * 114) / 1e3;
|
|
9
|
+
return yiq >= 128 ? "#000000" : "#FFFFFF";
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.getTextColorFromBackgroundColor = getTextColorFromBackgroundColor;
|
|
13
|
+
//# sourceMappingURL=color.js.map
|
|
14
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/DHIS2PivotTable/utils/color.ts"],"names":[],"mappings":";;AAAO,SAAS,gCAAgC,UAA4B,EAAA;AAE3E,EAAa,UAAA,GAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,EAAM,EAAE,CAAA;AAGxC,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAG/C,EAAA,IAAI,OAAO,CAAI,GAAA,GAAA,GAAM,CAAI,GAAA,GAAA,GAAM,IAAI,GAAO,IAAA,GAAA;AAG1C,EAAO,OAAA,GAAA,IAAO,MAAM,SAAY,GAAA,SAAA;AACjC","file":"color.js","sourcesContent":["export function getTextColorFromBackgroundColor(background: string): string {\n\t// Remove the hash at the start if it's there\n\tbackground = background.replace(/^#/, \"\");\n\n\t// Convert hex to RGB\n\tlet r = parseInt(background.substring(0, 2), 16);\n\tlet g = parseInt(background.substring(2, 4), 16);\n\tlet b = parseInt(background.substring(4, 6), 16);\n\n\t// Calculate the YIQ value\n\tlet yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n\t// Return black for light backgrounds and white for dark backgrounds\n\treturn yiq >= 128 ? \"#000000\" : \"#FFFFFF\";\n}\n"]}
|
|
@@ -76,7 +76,7 @@ class DHIS2GaugeChart extends DHIS2Chart {
|
|
|
76
76
|
const chartColors = this.config.colors ?? [];
|
|
77
77
|
const legendSet = this.config.legendSet;
|
|
78
78
|
const legendColor = legendSet ? getColorFromLegendSet(
|
|
79
|
-
Array.isArray(legendSet) ? head(legendSet)
|
|
79
|
+
Array.isArray(legendSet) ? head(legendSet)?.legends ?? [] : legendSet.legends,
|
|
80
80
|
this.getValue()
|
|
81
81
|
) : void 0;
|
|
82
82
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":[],"mappings":";;;;;AAeA,MAAM,iBAAoB,GAAA,MAAA;AAC1B,MAAM,iBAAoB,GAAA,MAAA;AAEnB,MAAM,wBAAwB,UAAW,CAAA;AAAA,EAC/C,iBAA4B,GAAA;AAC3B,IAAO,OAAA,YAAA;AAAA;AACR,EAEA,cAA8B,GAAA;AAC7B,IAAO,OAAA;AAAA,MACN,UAAY,EAAA;AAAA,QACX,YAAc,EAAA,CAAA;AAAA,QACd,KAAO,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QAC9B,UAAY,EAAA;AAAA,UACX,CAAG,EAAA,CAAA;AAAA,UACH,WAAa,EAAA,CAAA;AAAA,UACb,OAAS,EAAA;AAAA,SACV;AAAA,QACA,WAAa,EAAA,CAAA;AAAA,QACb,WAAa,EAAA,OAAA;AAAA,QACb,WAAa,EAAA;AAAA;AACd,KACD;AAAA;AACD,EAEA,QAA+B,GAAA;AAC9B,IAAA,MAAM,EAAE,IAAA,EAAM,OAAQ,EAAA,GAAI,IAAK,CAAA,SAAA;AAC/B,IAAA,MAAM,mBAAmB,OAAS,CAAA,SAAA;AAAA,MACjC,CAAC,EAAE,IAAK,EAAA,KAAM,IAAS,KAAA;AAAA,KACxB;AACA,IAAO,OAAA,UAAA,CAAW,IAAI,IAAK,CAAA,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA,IAAK,EAAE,CAAA;AAAA;AAC5D,EAEA,OAAmC,GAAA;AAClC,IAAO,OAAA;AAAA,MACN,MAAA,EAAQ,CAAC,KAAA,EAAO,KAAK,CAAA;AAAA,MACrB,IAAM,EAAA,iBAAA;AAAA,MACN,UAAY,EAAA,GAAA;AAAA,MACZ,QAAU,EAAA,EAAA;AAAA,MACV,UAAY,EAAA;AAAA,QACX;AAAA,UACC,eAAiB,EAAA,aAAA;AAAA,UACjB,WAAa,EAAA,KAAA;AAAA,UACb,WAAa,EAAA,MAAA;AAAA,UACb,KAAO,EAAA;AAAA;AACR;AACD,KACD;AAAA;AACD,EAEA,SAAiC,GAAA;AAChC,IAAM,MAAA,KAAA,GAAQ,KAAK,QAAS,EAAA;AAC5B,IAAO,OAAA;AAAA,MACN;AAAA,QACC,MAAM,IAAK,CAAA,EAAA;AAAA,QACX,MAAM,CAAC,IAAA,CAAK,KAAM,CAAA,KAAA,IAAS,CAAC,CAAC,CAAA;AAAA,QAC7B,KAAO,EAAA,OAAA;AAAA,QACP,mBAAqB,EAAA,KAAA;AAAA,QACrB,UAAY,EAAA;AAAA,UACX,CAAG,EAAA,CAAA;AAAA,UACH,WAAa,EAAA,CAAA;AAAA,UACb,aAAe,EAAA,QAAA;AAAA,UACf,KAAO,EAAA;AAAA,YACN,QAAU,EAAA,iBAAA;AAAA,YACV,OAAO,MAAO,CAAA;AAAA;AACf,SACD;AAAA,QACA,OAAS,EAAA,SAAA;AAAA,QACT,OAAS,EAAA;AAAA,UACR,WAAa,EAAA;AAAA;AACd;AACD,KACD;AAAA;AACD,EAEA,QAA2B,GAAA;AAC1B,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,IAAU,EAAC;AAC3C,IAAM,MAAA,SAAA,GAAY,KAAK,MAAO,CAAA,SAAA;AAC9B,IAAA,MAAM,cAAc,SACjB,GAAA,qBAAA;AAAA,MACA,KAAA,CAAM,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":[],"mappings":"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","file":"gauge.js","sourcesContent":["import {\n\ttype PaneBackgroundOptions,\n\ttype PaneOptions,\n\tPlotOptions,\n\tSeriesGaugeOptions,\n\tSeriesOptionsType,\n\tXAxisOptions,\n\ttype YAxisOptions,\n} from \"highcharts\";\nimport { get, head } from \"lodash\";\nimport { DHIS2Chart } from \"./index.js\";\nimport { getColorFromLegendSet } from \"../../Map\";\nimport { colors } from \"@dhis2/ui\";\nimport type { LegendSet } from \"@hisptz/dhis2-utils/src\";\n\nconst DEFAULT_PANE_SIZE = \"100%\";\nconst DEFAULT_FONT_SIZE = \"28px\";\n\nexport class DHIS2GaugeChart extends DHIS2Chart {\n\tgetHighchartsType(): string {\n\t\treturn \"solidgauge\";\n\t}\n\n\tgetPlotOptions(): PlotOptions {\n\t\treturn {\n\t\t\tsolidgauge: {\n\t\t\t\tborderRadius: 4,\n\t\t\t\tcolor: head(this.config.colors),\n\t\t\t\tdataLabels: {\n\t\t\t\t\ty: 5,\n\t\t\t\t\tborderWidth: 0,\n\t\t\t\t\tuseHTML: true,\n\t\t\t\t},\n\t\t\t\tborderWidth: 0,\n\t\t\t\tborderColor: \"white\",\n\t\t\t\tinnerRadius: \"60%\",\n\t\t\t},\n\t\t} as Highcharts.PlotOptions;\n\t}\n\n\tgetValue(): number | undefined {\n\t\tconst { rows, headers } = this.analytics;\n\t\tconst valueHeaderIndex = headers!.findIndex(\n\t\t\t({ name }) => name === \"value\",\n\t\t);\n\t\treturn parseFloat(get(head(rows), [valueHeaderIndex]) ?? \"\");\n\t}\n\n\tgetPane(): PaneOptions | undefined {\n\t\treturn {\n\t\t\tcenter: [\"50%\", \"85%\"],\n\t\t\tsize: DEFAULT_PANE_SIZE,\n\t\t\tstartAngle: -90,\n\t\t\tendAngle: 90,\n\t\t\tbackground: [\n\t\t\t\t{\n\t\t\t\t\tbackgroundColor: \"transparent\",\n\t\t\t\t\tinnerRadius: \"60%\",\n\t\t\t\t\touterRadius: \"100%\",\n\t\t\t\t\tshape: \"arc\",\n\t\t\t\t} as PaneBackgroundOptions,\n\t\t\t],\n\t\t};\n\t}\n\n\tgetSeries(): SeriesOptionsType[] {\n\t\tconst value = this.getValue();\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: this.id,\n\t\t\t\tdata: [Math.round(value ?? 0)],\n\t\t\t\tcolor: \"white\",\n\t\t\t\tenableMouseTracking: false,\n\t\t\t\tdataLabels: {\n\t\t\t\t\ty: 0,\n\t\t\t\t\tborderWidth: 0,\n\t\t\t\t\tverticalAlign: \"bottom\",\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tfontSize: DEFAULT_FONT_SIZE,\n\t\t\t\t\t\tcolor: colors.grey900,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcompare: \"percent\",\n\t\t\t\ttooltip: {\n\t\t\t\t\tvalueSuffix: \"%\",\n\t\t\t\t},\n\t\t\t},\n\t\t] as unknown as SeriesGaugeOptions[];\n\t}\n\n\tgetYAxis(): YAxisOptions[] {\n\t\tconst chartColors = this.config.colors ?? [];\n\t\tconst legendSet = this.config.legendSet;\n\t\tconst legendColor = legendSet\n\t\t\t? getColorFromLegendSet(\n\t\t\t\t\tArray.isArray(legendSet)\n\t\t\t\t\t\t? (head(legendSet as unknown as Array<LegendSet>)\n\t\t\t\t\t\t\t\t?.legends ?? [])\n\t\t\t\t\t\t: (legendSet as LegendSet).legends,\n\t\t\t\t\tthis.getValue(),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\treturn [\n\t\t\t{\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 100,\n\t\t\t\toffset: 0,\n\t\t\t\tlineWidth: 0,\n\t\t\t\tminorTicks: false,\n\t\t\t\ttickWidth: 0,\n\t\t\t\ttype: \"linear\",\n\t\t\t\tlabels: {\n\t\t\t\t\tenabled: false,\n\t\t\t\t\tdistance: 20,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmaxPadding: 0,\n\t\t\t\tpane: 0,\n\t\t\t\tminColor: legendColor ?? head(chartColors),\n\t\t\t\tmaxColor: legendColor ?? head(chartColors),\n\t\t\t\tmargin: 0,\n\t\t\t} as YAxisOptions,\n\t\t];\n\t}\n\n\tgetXAxis(): XAxisOptions | undefined {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -2,9 +2,9 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { DHIS2PivotTableEngine } from './services/engine.js';
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { DHIS2PivotTableEngineProvider } from './state/engine.js';
|
|
5
|
-
import { PivotTable } from './components/Table
|
|
6
|
-
import { TableHeaders } from './components/TableHeaders
|
|
7
|
-
import { CustomPivotTableBody } from './components/TableBody
|
|
5
|
+
import { PivotTable } from './components/Table';
|
|
6
|
+
import { TableHeaders } from './components/TableHeaders';
|
|
7
|
+
import { CustomPivotTableBody } from './components/TableBody';
|
|
8
8
|
|
|
9
9
|
function DHIS2PivotTable({
|
|
10
10
|
analytics,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/DHIS2PivotTable/DHIS2PivotTable.tsx"],"names":[],"mappings":";;;;;;;;AA6BO,SAAS,eAAgB,CAAA;AAAA,EAC/B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACD,CAAyB,EAAA;AACxB,EAAA,MAAM,MAAS,GAAA,OAAA;AAAA,IACd,MAAM,IAAI,qBAAA,CAAsB,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,IACrD,CAAC,WAAW,MAAM;AAAA,GACnB;AAEA,EAAA,2BACE,6BAA8B,EAAA,EAAA,MAAA,EAC9B,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,QAAgB,UAC3B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,wBACb,oBAAqB,EAAA,EAAA;AAAA,GAAA,EACvB,CACD,EAAA,CAAA;AAEF","file":"DHIS2PivotTable.js","sourcesContent":["import { Analytics, LegendSet } from \"@hisptz/dhis2-utils\";\nimport { DHIS2PivotTableEngine, type EngineConfig } from \"./services/engine.js\";\nimport React, { useMemo } from \"react\";\nimport { DHIS2PivotTableEngineProvider } from \"./state/engine.js\";\nimport { PivotTable } from \"./components/Table
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/DHIS2PivotTable/DHIS2PivotTable.tsx"],"names":[],"mappings":";;;;;;;;AA6BO,SAAS,eAAgB,CAAA;AAAA,EAC/B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACD,CAAyB,EAAA;AACxB,EAAA,MAAM,MAAS,GAAA,OAAA;AAAA,IACd,MAAM,IAAI,qBAAA,CAAsB,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,IACrD,CAAC,WAAW,MAAM;AAAA,GACnB;AAEA,EAAA,2BACE,6BAA8B,EAAA,EAAA,MAAA,EAC9B,QAAC,kBAAA,IAAA,CAAA,UAAA,EAAA,EAAW,QAAgB,UAC3B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,wBACb,oBAAqB,EAAA,EAAA;AAAA,GAAA,EACvB,CACD,EAAA,CAAA;AAEF","file":"DHIS2PivotTable.js","sourcesContent":["import { Analytics, LegendSet } from \"@hisptz/dhis2-utils\";\nimport { DHIS2PivotTableEngine, type EngineConfig } from \"./services/engine.js\";\nimport React, { useMemo } from \"react\";\nimport { DHIS2PivotTableEngineProvider } from \"./state/engine.js\";\nimport { PivotTable } from \"./components/Table\";\nimport { TableHeaders } from \"./components/TableHeaders\";\nimport { CustomPivotTableBody } from \"./components/TableBody\";\nimport { DataTableProps } from \"@dhis2/ui\";\n\nexport interface DHIS2PivotTableOptions {\n\tlegendSets?: LegendSet[];\n\thideEmptyColumns?: boolean;\n\thideEmptyRows?: boolean;\n\tshowRowTotals?: boolean;\n\tshowColumnTotals?: boolean;\n\tshowRowSubtotals?: boolean;\n\tshowColumnSubtotals?: boolean;\n\tfixColumnHeaders?: boolean;\n\tfixRowHeaders?: boolean;\n\tshowFilterAsTitle?: boolean;\n}\n\nexport interface DHIS2PivotTableProps {\n\tanalytics: Analytics;\n\ttableProps?: DataTableProps;\n\tsetRef?: (ref: HTMLTableElement) => void;\n\tconfig: EngineConfig;\n}\n\nexport function DHIS2PivotTable({\n\tanalytics,\n\tconfig,\n\ttableProps,\n\tsetRef,\n}: DHIS2PivotTableProps) {\n\tconst engine = useMemo(\n\t\t() => new DHIS2PivotTableEngine({ analytics, config }),\n\t\t[analytics, config],\n\t);\n\n\treturn (\n\t\t<DHIS2PivotTableEngineProvider engine={engine}>\n\t\t\t<PivotTable setRef={setRef} tableProps={tableProps}>\n\t\t\t\t<TableHeaders />\n\t\t\t\t<CustomPivotTableBody />\n\t\t\t</PivotTable>\n\t\t</DHIS2PivotTableEngineProvider>\n\t);\n}\n"]}
|
|
@@ -5,6 +5,7 @@ import { TableBody, DataTableRow, DataTableCell } from '@dhis2/ui';
|
|
|
5
5
|
import { useRef, Fragment as Fragment$1 } from 'react';
|
|
6
6
|
import classes from './TableBody.module.css';
|
|
7
7
|
import { useResizeObserver } from 'usehooks-ts';
|
|
8
|
+
import { getTextColorFromBackgroundColor } from '../../utils/color';
|
|
8
9
|
|
|
9
10
|
function DataRowRenderer({
|
|
10
11
|
mapper,
|
|
@@ -18,15 +19,24 @@ function DataRowRenderer({
|
|
|
18
19
|
...mapper,
|
|
19
20
|
[dimension]: item.uid
|
|
20
21
|
}));
|
|
21
|
-
return /* @__PURE__ */ jsx(Fragment, { children: completeMapper?.map((mapper2) =>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
return /* @__PURE__ */ jsx(Fragment, { children: completeMapper?.map((mapper2) => {
|
|
23
|
+
const legend = engine?.getItemValueLegend(mapper2);
|
|
24
|
+
return /* @__PURE__ */ jsx(
|
|
25
|
+
DataTableCell,
|
|
26
|
+
{
|
|
27
|
+
style: {
|
|
28
|
+
background: legend?.style === "FILL" ? legend?.color : void 0,
|
|
29
|
+
color: legend?.style === "FILL" ? getTextColorFromBackgroundColor(
|
|
30
|
+
legend?.color
|
|
31
|
+
) : legend?.style === "TEXT" ? legend.color : void 0
|
|
32
|
+
},
|
|
33
|
+
align: "center",
|
|
34
|
+
bordered: true,
|
|
35
|
+
children: engine?.getValue(mapper2) ?? ""
|
|
36
|
+
},
|
|
37
|
+
`${Object.values(mapper2).join("-")}-value`
|
|
38
|
+
);
|
|
39
|
+
}) });
|
|
30
40
|
}
|
|
31
41
|
function RowRenderer({
|
|
32
42
|
row,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":["mapper","Fragment"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":["mapper","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { Header } from \"../../services/engine\";\nimport { isEmpty, slice } from \"lodash\";\nimport { useCustomPivotTableEngine } from \"../../state/engine.js\";\nimport { DataTableCell, DataTableRow, TableBody } from \"@dhis2/ui\";\nimport React, { Fragment, ReactNode, useRef } from \"react\";\nimport { AnalyticsItem } from \"@hisptz/dhis2-utils\";\nimport classes from \"./TableBody.module.css\";\nimport { DHIS2Dimension } from \"../../interfaces\";\nimport { useResizeObserver } from \"usehooks-ts\";\nimport { getTextColorFromBackgroundColor } from \"../../utils/color\";\n\nfunction DataRowRenderer({\n\tmapper,\n\titem,\n\tdimension,\n}: {\n\tmapper?: { [key: string]: any };\n\titem: AnalyticsItem;\n\tdimension: DHIS2Dimension;\n}) {\n\tconst engine = useCustomPivotTableEngine();\n\n\tconst columnMappers = engine?.columnMap;\n\tconst completeMapper = columnMappers?.map((map) => ({\n\t\t...map,\n\t\t...mapper,\n\t\t[dimension]: item.uid,\n\t}));\n\n\treturn (\n\t\t<>\n\t\t\t{completeMapper?.map((mapper) => {\n\t\t\t\tconst legend = engine?.getItemValueLegend(mapper);\n\n\t\t\t\treturn (\n\t\t\t\t\t<DataTableCell\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\tlegend?.style === \"FILL\"\n\t\t\t\t\t\t\t\t\t? legend?.color\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\tlegend?.style === \"FILL\"\n\t\t\t\t\t\t\t\t\t? getTextColorFromBackgroundColor(\n\t\t\t\t\t\t\t\t\t\t\tlegend?.color,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: legend?.style === \"TEXT\"\n\t\t\t\t\t\t\t\t\t\t? legend.color\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tkey={`${Object.values(mapper).join(\"-\")}-value`}\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tbordered\n\t\t\t\t\t>\n\t\t\t\t\t\t{engine?.getValue(mapper) ?? \"\"}\n\t\t\t\t\t</DataTableCell>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nfunction RowRenderer({\n\trow,\n\tindex,\n\tconfig: { rows, columns, mapper, prevWidth, fixRowHeaders },\n}: {\n\trow: Header;\n\tindex: number;\n\tconfig: {\n\t\trows: Header[];\n\t\tcolumns?: Header[];\n\t\tmapper?: { [key: string]: string | undefined };\n\t\tprevWidth?: number;\n\t\tfixRowHeaders?: boolean;\n\t};\n}): React.ReactElement | null {\n\tconst cellRef = useRef<HTMLElement | null>(null);\n\tconst { width } = useResizeObserver({\n\t\tref: cellRef,\n\t});\n\n\tconst rowSpan = slice(rows, index + 1).reduce((acc, column) => {\n\t\treturn acc * (column.items?.length ?? 1);\n\t}, 1);\n\tconst hasSubRows = !isEmpty(rows[index + 1]);\n\tconst nextRow = rows[index + 1];\n\n\treturn (\n\t\t<>\n\t\t\t{row?.items?.map((item) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={`${item.name}-${row.dimension}-fragment`}>\n\t\t\t\t\t\t<DataTableRow key={`${item.name}-${row.dimension}-row`}>\n\t\t\t\t\t\t\t<DataTableCell\n\t\t\t\t\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t\t\t\t\tref={cellRef}\n\t\t\t\t\t\t\t\tfixed={fixRowHeaders}\n\t\t\t\t\t\t\t\tleft={`${prevWidth}px` as unknown as boolean}\n\t\t\t\t\t\t\t\tclassName={classes[\"header-cell\"]}\n\t\t\t\t\t\t\t\ttag=\"th\"\n\t\t\t\t\t\t\t\tbordered\n\t\t\t\t\t\t\t\trowSpan={(\n\t\t\t\t\t\t\t\t\trowSpan + (hasSubRows ? 1 : 0)\n\t\t\t\t\t\t\t\t).toString()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.name as unknown as string | ReactNode}\n\t\t\t\t\t\t\t</DataTableCell>\n\t\t\t\t\t\t\t{!hasSubRows ? (\n\t\t\t\t\t\t\t\t<DataRowRenderer\n\t\t\t\t\t\t\t\t\tdimension={row.dimension}\n\t\t\t\t\t\t\t\t\tmapper={mapper}\n\t\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</DataTableRow>\n\t\t\t\t\t\t{hasSubRows ? (\n\t\t\t\t\t\t\t<RowRenderer\n\t\t\t\t\t\t\t\trow={nextRow}\n\t\t\t\t\t\t\t\tindex={index + 1}\n\t\t\t\t\t\t\t\tconfig={{\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\t\t\tprevWidth: width,\n\t\t\t\t\t\t\t\t\tmapper: {\n\t\t\t\t\t\t\t\t\t\t...mapper,\n\t\t\t\t\t\t\t\t\t\t[row.dimension]:\n\t\t\t\t\t\t\t\t\t\t\titem.uid as unknown as string,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nexport function CustomPivotTableBody() {\n\tconst engine = useCustomPivotTableEngine();\n\tconst rows = engine?.rowHeaders;\n\tconst columns = engine?.columnHeaders;\n\tconst fixRowHeaders = engine?.fixRowHeaders;\n\n\tif (!rows || isEmpty(rows)) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<TableBody>\n\t\t\t<RowRenderer\n\t\t\t\trow={rows[0]}\n\t\t\t\tindex={0}\n\t\t\t\tconfig={{ rows, columns, fixRowHeaders }}\n\t\t\t/>\n\t\t</TableBody>\n\t);\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { findIndex, compact, intersection, times, zip } from 'lodash';
|
|
2
|
+
import { getColorFromLegendSet } from '../../Map';
|
|
2
3
|
|
|
3
4
|
class DHIS2PivotTableEngine {
|
|
4
5
|
constructor({
|
|
@@ -48,6 +49,31 @@ class DHIS2PivotTableEngine {
|
|
|
48
49
|
getItem(id) {
|
|
49
50
|
return this.analyticsData.metaData?.items[id];
|
|
50
51
|
}
|
|
52
|
+
getItemValueLegend(mapper) {
|
|
53
|
+
const legend = this.config.options?.legend;
|
|
54
|
+
if (!legend) return;
|
|
55
|
+
const value = this.getValue(mapper);
|
|
56
|
+
const strategy = legend?.strategy;
|
|
57
|
+
if (strategy === "FIXED") {
|
|
58
|
+
const legends = legend.set.legends;
|
|
59
|
+
const color = getColorFromLegendSet(legends, value);
|
|
60
|
+
return {
|
|
61
|
+
color,
|
|
62
|
+
style: legend.style
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (strategy === "BY_DATA_ITEM") {
|
|
66
|
+
const legendSet = legend.legendMap.get(mapper.dx);
|
|
67
|
+
if (!legendSet) return;
|
|
68
|
+
const legends = legendSet.legends;
|
|
69
|
+
const color = getColorFromLegendSet(legends, value);
|
|
70
|
+
return {
|
|
71
|
+
color,
|
|
72
|
+
style: legend.style
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
51
77
|
getValue(mapper) {
|
|
52
78
|
const dimensions = Object.values(mapper);
|
|
53
79
|
const data = this.analyticsData.rows?.filter(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":["dimension"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":["dimension"],"mappings":";;;AAkDO,MAAM,qBAAsB,CAAA;AAAA,EASlC,WAAY,CAAA;AAAA,IACX,SAAA;AAAA,IACA;AAAA,GAIE,EAAA;AACF,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,aAAgB,GAAA,SAAA;AACrB,IAAA,IAAA,CAAK,UAAa,GAAA,SAAA,CAAU,IAAK,CAAA,aAAA,CAAc,OAAS,EAAA;AAAA,MACvD,MAAA;AAAA,MACA;AAAA,KACA,CAAA;AACD,IAAA,IAAA,CAAK,UAAW,EAAA;AAChB,IAAA,IAAA,CAAK,YAAa,EAAA;AAAA;AACnB,EAEA,IAAI,KAAQ,GAAA;AACX,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,UAAU,EAAC;AAC9C,IAAA,MAAM,SACL,OAAS,EAAA,GAAA,CAAI,CAAC,EAAE,WAAgB,KAAA;AAC/B,MAAA,MAAM,UACL,GAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,WAAW,SAAS,CAAA;AAElD,MAAO,OAAA,UAAA,EAAY,GAAI,CAAA,CAACA,UAAc,KAAA;AACrC,QAAA,MAAM,aACL,GAAA,IAAA,CAAK,aAAc,CAAA,QAAA,EAAU,MAAMA,UAAS,CAAA;AAC7C,QAAA,OAAO,aAAe,EAAA,IAAA;AAAA,OACtB,CAAA;AAAA,KACD,KAAK,EAAC;AAER,IAAA,OAAO,QAAQ,MAAO,CAAA,IAAA,EAAM,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA;AACxC,EAEA,IAAI,SAAY,GAAA;AACf,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,UAAA,EAAY,MAAU,IAAA,CAAA;AAC9C,IAAM,MAAA,aAAA,GACL,KAAK,aAAe,EAAA,MAAA;AAAA,MACnB,CAAC,GAAK,EAAA,GAAA,KAAQ,GAAO,IAAA,GAAA,CAAI,OAAO,MAAU,IAAA,CAAA,CAAA;AAAA,MAC1C;AAAA,KACI,IAAA,CAAA;AAEN,IAAA,OAAO,UAAa,GAAA,aAAA;AAAA;AACrB,EAEA,IAAI,SAAY,GAAA;AACf,IAAO,OAAA,IAAA,CAAK,QAAQ,OAAS,EAAA,iBAAA;AAAA;AAC9B,EAEA,IAAI,gBAAmB,GAAA;AACtB,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,OAAA,EAAS,gBAAoB,IAAA,IAAA;AAAA;AACjD,EAEA,IAAI,aAAgB,GAAA;AACnB,IAAO,OAAA,IAAA,CAAK,MAAO,CAAA,OAAA,EAAS,aAAiB,IAAA,IAAA;AAAA;AAC9C,EAEA,kBAAkB,SAA2B,EAAA;AAC5C,IAAA,OAAO,KAAK,aAAc,CAAA,QAAA,EAAU,UAAW,CAAA,SAAS,KAAK,EAAC;AAAA;AAC/D,EAEA,QAAQ,EAAY,EAAA;AACnB,IAAA,OAAO,IAAK,CAAA,aAAA,CAAc,QAAU,EAAA,KAAA,CAAM,EAAS,CAAA;AAAA;AACpD,EAEA,mBAAmB,MAAgC,EAAA;AAClD,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,MAAA,CAAO,OAAS,EAAA,MAAA;AACpC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACb,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,QAAA,CAAS,MAAM,CAAA;AAClC,IAAA,MAAM,WAAW,MAAQ,EAAA,QAAA;AACzB,IAAA,IAAI,aAAa,OAAS,EAAA;AACzB,MAAM,MAAA,OAAA,GAAU,OAAO,GAAI,CAAA,OAAA;AAC3B,MAAM,MAAA,KAAA,GAAQ,qBAAsB,CAAA,OAAA,EAAS,KAAK,CAAA;AAClD,MAAO,OAAA;AAAA,QACN,KAAA;AAAA,QACA,OAAO,MAAO,CAAA;AAAA,OACf;AAAA;AAED,IAAA,IAAI,aAAa,cAAgB,EAAA;AAChC,MAAA,MAAM,SAAY,GAAA,MAAA,CAAO,SAAU,CAAA,GAAA,CAAI,OAAO,EAAE,CAAA;AAChD,MAAA,IAAI,CAAC,SAAW,EAAA;AAChB,MAAA,MAAM,UAAU,SAAU,CAAA,OAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,qBAAsB,CAAA,OAAA,EAAS,KAAK,CAAA;AAClD,MAAO,OAAA;AAAA,QACN,KAAA;AAAA,QACA,OAAO,MAAO,CAAA;AAAA,OACf;AAAA;AAED,IAAA;AAAA;AACD,EAEA,SAAS,MAAgC,EAAA;AACxC,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA;AACvC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,aAAA,CAAc,IAAM,EAAA,MAAA;AAAA,MACrC,CAAC,GAAQ,KAAA,YAAA,CAAa,KAAK,UAAU,CAAA,CAAE,UAAU,UAAW,CAAA;AAAA,KAC7D;AACA,IAAA,OAAO,IAAM,EAAA,MAAA,CAAO,CAAC,GAAA,EAAK,GAAQ,KAAA;AACjC,MAAA,OAAO,GAAM,GAAA,UAAA,CAAW,GAAI,CAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,OAC1C,CAAC,CAAA;AAAA;AACL,EAEA,UAAa,GAAA;AACZ,IAAA,IAAA,CAAK,aAAa,IAAK,CAAA,MAAA,CAAO,OAAO,IAAK,CAAA,GAAA,CAAI,CAAC,SAAc,KAAA;AAC5D,MAAO,OAAA;AAAA,QACN,GAAG,SAAA;AAAA,QACH,KAAO,EAAA,OAAA;AAAA,UACN,IAAK,CAAA,iBAAA,CAAkB,SAAU,CAAA,SAAS,CAAE,CAAA,GAAA;AAAA,YAC3C,CAAC,MAAA,KAAmB,IAAK,CAAA,OAAA,CAAQ,MAAM;AAAA;AACxC;AACD,OACD;AAAA,KACA,CAAA;AACD,IAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,MAAA,CAAO,OAAO,OAAQ,CAAA,GAAA,CAAI,CAAC,YAAiB,KAAA;AACrE,MAAO,OAAA;AAAA,QACN,GAAG,YAAA;AAAA,QACH,KAAO,EAAA,OAAA;AAAA,UACN,IAAK,CAAA,iBAAA,CAAkB,YAAa,CAAA,SAAS,CAAE,CAAA,GAAA;AAAA,YAC9C,CAAC,MAAA,KAAmB,IAAK,CAAA,OAAA,CAAQ,MAAM;AAAA;AACxC;AACD,OACD;AAAA,KACA,CAAA;AAAA;AACF,EAEA,YAAe,GAAA;AACd,IAAA,MAAM,UAAU,IAAK,CAAA,aAAA;AACrB,IAAA,MAAM,gBACL,GAAA,OAAA;AAAA,MACC,OAAS,EAAA,GAAA;AAAA,QAAI,CAAC,MACb,KAAA,MAAA,CAAO,KAAO,EAAA,GAAA,CAAI,CAAC,IAAU,MAAA;AAAA,UAC5B,CAAC,MAAA,CAAO,SAAS,GAAG,IAAK,CAAA;AAAA,SACxB,CAAA;AAAA;AACH,SACI,EAAC;AACP,IAAA,MAAM,IAAO,GAAA,gBAAA,CAAiB,MAAO,CAAA,CAAC,KAAK,KAAU,KAAA;AACpD,MAAO,OAAA,GAAA,IAAO,OAAO,MAAU,IAAA,CAAA,CAAA;AAAA,OAC7B,CAAC,CAAA;AACJ,IAAA,MAAM,kBAAqB,GAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,KAAU,KAAA;AAAA,MAC1D,GAAG,MAAM,IAAO,GAAA,KAAA,CAAM,QAAQ,MAAM,KAAK,EAAE,IAAK;AAAA,KAChD,CAAA;AACD,IAAA,IAAA,CAAK,SAAY,GAAA,OAAA;AAAA,MAChB,GAAA,CAAI,GAAG,kBAAkB,CAAE,CAAA,GAAA;AAAA,QAAI,CAAC,GAC/B,KAAA,GAAA,CAAI,MAAO,CAAA,CAAC,KAAK,KAAU,KAAA;AAC1B,UAAA,OAAO,EAAE,GAAG,GAAK,EAAA,GAAG,KAAM,EAAA;AAAA,SAC1B;AAAA;AACF,KACD;AAAA;AAEF","file":"engine.js","sourcesContent":["import type { LegendSet } from \"@hisptz/dhis2-utils\";\nimport { Analytics, AnalyticsItem } from \"@hisptz/dhis2-utils\";\nimport { compact, findIndex, intersection, times, zip } from \"lodash\";\nimport { DHIS2Dimension } from \"../interfaces\";\nimport { getColorFromLegendSet } from \"../../Map\";\n\nexport interface BaseLegendConfig {\n\tstrategy: \"FIXED\" | \"BY_DATA_ITEM\";\n\tshowKey: boolean;\n\tstyle: \"TEXT\" | \"FILL\";\n}\nexport interface FixedLegendConfig extends BaseLegendConfig {\n\tstrategy: \"FIXED\";\n\tset: LegendSet;\n}\n\nexport interface DataItemLegendConfig extends BaseLegendConfig {\n\tstrategy: \"BY_DATA_ITEM\";\n\tlegendMap: Map<string, LegendSet>;\n}\n\nexport type LegendConfig = FixedLegendConfig | DataItemLegendConfig;\n\nexport interface EngineConfig {\n\tlayout: {\n\t\tcolumns: { dimension: DHIS2Dimension; label?: string }[];\n\t\trows: { dimension: DHIS2Dimension; label?: string }[];\n\t\tfilter?: { dimension: DHIS2Dimension; label?: string }[];\n\t};\n\toptions?: {\n\t\tlegend?: LegendConfig;\n\t\thideEmptyColumns?: boolean;\n\t\thideEmptyRows?: boolean;\n\t\tshowRowTotals?: boolean;\n\t\tshowColumnTotals?: boolean;\n\t\tshowRowSubtotals?: boolean;\n\t\tshowColumnSubtotals?: boolean;\n\t\tshowFilterAsTitle?: boolean;\n\t\tfixColumnHeaders?: boolean;\n\t\tfixRowHeaders?: boolean;\n\t\t[key: string]: any;\n\t};\n}\n\nexport interface Header {\n\tdimension: DHIS2Dimension;\n\tlabel?: string;\n\titems?: AnalyticsItem[];\n}\n\nexport class DHIS2PivotTableEngine {\n\tanalyticsData: Analytics;\n\tvalueIndex: number;\n\tconfig: EngineConfig;\n\trowHeaders?: Header[];\n\tcolumnHeaders?: Header[];\n\n\tcolumnMap?: { [key: string]: any }[];\n\n\tconstructor({\n\t\tanalytics,\n\t\tconfig,\n\t}: {\n\t\tanalytics: Analytics;\n\t\tconfig: EngineConfig;\n\t}) {\n\t\tthis.config = config;\n\t\tthis.analyticsData = analytics;\n\t\tthis.valueIndex = findIndex(this.analyticsData.headers, [\n\t\t\t\"name\",\n\t\t\t\"value\",\n\t\t]);\n\t\tthis.getHeaders();\n\t\tthis.getColumnMap();\n\t}\n\n\tget title() {\n\t\tconst filters = this.config.layout.filter ?? [];\n\t\tconst labels =\n\t\t\tfilters?.map(({ dimension }) => {\n\t\t\t\tconst dimensions =\n\t\t\t\t\tthis.analyticsData.metaData?.dimensions[dimension];\n\n\t\t\t\treturn dimensions?.map((dimension) => {\n\t\t\t\t\tconst dimensionItem =\n\t\t\t\t\t\tthis.analyticsData.metaData?.items[dimension];\n\t\t\t\t\treturn dimensionItem?.name;\n\t\t\t\t});\n\t\t\t}) ?? [];\n\n\t\treturn compact(labels.flat()).join(\", \");\n\t}\n\n\tget titleSpan() {\n\t\tconst rowHeaders = this.rowHeaders?.length ?? 0;\n\t\tconst columnHeaders =\n\t\t\tthis.columnHeaders?.reduce(\n\t\t\t\t(acc, val) => acc + (val.items?.length ?? 0),\n\t\t\t\t0,\n\t\t\t) ?? 0;\n\n\t\treturn rowHeaders + columnHeaders;\n\t}\n\n\tget showTitle() {\n\t\treturn this.config?.options?.showFilterAsTitle;\n\t}\n\n\tget fixColumnHeaders() {\n\t\treturn this.config.options?.fixColumnHeaders ?? true;\n\t}\n\n\tget fixRowHeaders() {\n\t\treturn this.config.options?.fixRowHeaders ?? true;\n\t}\n\n\tgetDimensionItems(dimension: DHIS2Dimension) {\n\t\treturn this.analyticsData.metaData?.dimensions[dimension] ?? [];\n\t}\n\n\tgetItem(id: string) {\n\t\treturn this.analyticsData.metaData?.items[id as any];\n\t}\n\n\tgetItemValueLegend(mapper: { [key: string]: any }) {\n\t\tconst legend = this.config.options?.legend;\n\t\tif (!legend) return;\n\t\tconst value = this.getValue(mapper);\n\t\tconst strategy = legend?.strategy;\n\t\tif (strategy === \"FIXED\") {\n\t\t\tconst legends = legend.set.legends;\n\t\t\tconst color = getColorFromLegendSet(legends, value);\n\t\t\treturn {\n\t\t\t\tcolor,\n\t\t\t\tstyle: legend.style,\n\t\t\t};\n\t\t}\n\t\tif (strategy === \"BY_DATA_ITEM\") {\n\t\t\tconst legendSet = legend.legendMap.get(mapper.dx);\n\t\t\tif (!legendSet) return;\n\t\t\tconst legends = legendSet.legends;\n\t\t\tconst color = getColorFromLegendSet(legends, value);\n\t\t\treturn {\n\t\t\t\tcolor,\n\t\t\t\tstyle: legend.style,\n\t\t\t};\n\t\t}\n\t\treturn;\n\t}\n\n\tgetValue(mapper: { [key: string]: any }) {\n\t\tconst dimensions = Object.values(mapper);\n\t\tconst data = this.analyticsData.rows?.filter(\n\t\t\t(row) => intersection(row, dimensions).length >= dimensions.length,\n\t\t);\n\t\treturn data?.reduce((acc, row) => {\n\t\t\treturn acc + parseFloat(row[this.valueIndex]);\n\t\t}, 0);\n\t}\n\n\tgetHeaders() {\n\t\tthis.rowHeaders = this.config.layout.rows.map((rowConfig) => {\n\t\t\treturn {\n\t\t\t\t...rowConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(rowConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t\tthis.columnHeaders = this.config.layout.columns.map((columnConfig) => {\n\t\t\treturn {\n\t\t\t\t...columnConfig,\n\t\t\t\titems: compact(\n\t\t\t\t\tthis.getDimensionItems(columnConfig.dimension).map(\n\t\t\t\t\t\t(itemId: string) => this.getItem(itemId),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\t}\n\n\tgetColumnMap() {\n\t\tconst columns = this.columnHeaders;\n\t\tconst sanitizedColumns =\n\t\t\tcompact(\n\t\t\t\tcolumns?.map((column) =>\n\t\t\t\t\tcolumn.items?.map((item) => ({\n\t\t\t\t\t\t[column.dimension]: item.uid,\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t) ?? [];\n\t\tconst size = sanitizedColumns.reduce((acc, items) => {\n\t\t\treturn acc * (items?.length ?? 1);\n\t\t}, 1);\n\t\tconst standardiseColumns = sanitizedColumns.map((items) => [\n\t\t\t...times(size / items.length, () => items).flat(),\n\t\t]);\n\t\tthis.columnMap = compact(\n\t\t\tzip(...standardiseColumns).map((arr) =>\n\t\t\t\tarr.reduce((obj, value) => {\n\t\t\t\t\treturn { ...obj, ...value };\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function getTextColorFromBackgroundColor(background) {
|
|
2
|
+
background = background.replace(/^#/, "");
|
|
3
|
+
let r = parseInt(background.substring(0, 2), 16);
|
|
4
|
+
let g = parseInt(background.substring(2, 4), 16);
|
|
5
|
+
let b = parseInt(background.substring(4, 6), 16);
|
|
6
|
+
let yiq = (r * 299 + g * 587 + b * 114) / 1e3;
|
|
7
|
+
return yiq >= 128 ? "#000000" : "#FFFFFF";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { getTextColorFromBackgroundColor };
|
|
11
|
+
//# sourceMappingURL=color.js.map
|
|
12
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/DHIS2PivotTable/utils/color.ts"],"names":[],"mappings":"AAAO,SAAS,gCAAgC,UAA4B,EAAA;AAE3E,EAAa,UAAA,GAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,EAAM,EAAE,CAAA;AAGxC,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAC/C,EAAA,IAAI,IAAI,QAAS,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA,CAAC,GAAG,EAAE,CAAA;AAG/C,EAAA,IAAI,OAAO,CAAI,GAAA,GAAA,GAAM,CAAI,GAAA,GAAA,GAAM,IAAI,GAAO,IAAA,GAAA;AAG1C,EAAO,OAAA,GAAA,IAAO,MAAM,SAAY,GAAA,SAAA;AACjC","file":"color.js","sourcesContent":["export function getTextColorFromBackgroundColor(background: string): string {\n\t// Remove the hash at the start if it's there\n\tbackground = background.replace(/^#/, \"\");\n\n\t// Convert hex to RGB\n\tlet r = parseInt(background.substring(0, 2), 16);\n\tlet g = parseInt(background.substring(2, 4), 16);\n\tlet b = parseInt(background.substring(4, 6), 16);\n\n\t// Calculate the YIQ value\n\tlet yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n\t// Return black for light backgrounds and white for dark backgrounds\n\treturn yiq >= 128 ? \"#000000\" : \"#FFFFFF\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gauge.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,WAAW,EAChB,WAAW,EAEX,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,qBAAa,eAAgB,SAAQ,UAAU;IAC9C,iBAAiB,IAAI,MAAM;IAI3B,cAAc,IAAI,WAAW;IAiB7B,QAAQ,IAAI,MAAM,GAAG,SAAS;IAQ9B,OAAO,IAAI,WAAW,GAAG,SAAS;IAiBlC,SAAS,IAAI,iBAAiB,EAAE;IAyBhC,QAAQ,IAAI,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"gauge.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/models/gauge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,WAAW,EAChB,WAAW,EAEX,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,qBAAa,eAAgB,SAAQ,UAAU;IAC9C,iBAAiB,IAAI,MAAM;IAI3B,cAAc,IAAI,WAAW;IAiB7B,QAAQ,IAAI,MAAM,GAAG,SAAS;IAQ9B,OAAO,IAAI,WAAW,GAAG,SAAS;IAiBlC,SAAS,IAAI,iBAAiB,EAAE;IAyBhC,QAAQ,IAAI,YAAY,EAAE;IAqC1B,QAAQ,IAAI,YAAY,GAAG,SAAS;CAGpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/types/props.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACN,cAAc,EACd,OAAO,EACP,YAAY,EACZ,0BAA0B,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,MAAM,MAAM,SAAS,GAClB,QAAQ,GACR,KAAK,GACL,gBAAgB,GAChB,MAAM,GACN,cAAc,GACd,KAAK,GACL,aAAa,GACb,OAAO,GACP,MAAM,GACN,cAAc,GACd,OAAO,GACP,SAAS,CAAC;AAEb,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,cAAc,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACP,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAChB,OAAO,CAAC,OAAO,CAAC,GAChB,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChartAnalytics/types/props.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACN,cAAc,EACd,OAAO,EACP,YAAY,EACZ,0BAA0B,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,MAAM,MAAM,SAAS,GAClB,QAAQ,GACR,KAAK,GACL,gBAAgB,GAChB,MAAM,GACN,cAAc,GACd,KAAK,GACL,aAAa,GACb,OAAO,GACP,MAAM,GACN,cAAc,GACd,OAAO,GACP,SAAS,CAAC;AAEb,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,MAAM,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,cAAc,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE;QACP,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAChB,OAAO,CAAC,OAAO,CAAC,GAChB,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/DHIS2PivotTable/components/TableBody/index.tsx"],"names":[],"mappings":"AA4IA,wBAAgB,oBAAoB,mDAmBnC"}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { LegendSet } from "@hisptz/dhis2-utils";
|
|
2
|
+
import { Analytics, AnalyticsItem } from "@hisptz/dhis2-utils";
|
|
3
|
+
import { DHIS2Dimension } from "../interfaces";
|
|
4
|
+
export interface BaseLegendConfig {
|
|
5
|
+
strategy: "FIXED" | "BY_DATA_ITEM";
|
|
6
|
+
showKey: boolean;
|
|
7
|
+
style: "TEXT" | "FILL";
|
|
8
|
+
}
|
|
9
|
+
export interface FixedLegendConfig extends BaseLegendConfig {
|
|
10
|
+
strategy: "FIXED";
|
|
11
|
+
set: LegendSet;
|
|
12
|
+
}
|
|
13
|
+
export interface DataItemLegendConfig extends BaseLegendConfig {
|
|
14
|
+
strategy: "BY_DATA_ITEM";
|
|
15
|
+
legendMap: Map<string, LegendSet>;
|
|
16
|
+
}
|
|
17
|
+
export type LegendConfig = FixedLegendConfig | DataItemLegendConfig;
|
|
3
18
|
export interface EngineConfig {
|
|
4
19
|
layout: {
|
|
5
20
|
columns: {
|
|
@@ -16,7 +31,7 @@ export interface EngineConfig {
|
|
|
16
31
|
}[];
|
|
17
32
|
};
|
|
18
33
|
options?: {
|
|
19
|
-
|
|
34
|
+
legend?: LegendConfig;
|
|
20
35
|
hideEmptyColumns?: boolean;
|
|
21
36
|
hideEmptyRows?: boolean;
|
|
22
37
|
showRowTotals?: boolean;
|
|
@@ -54,6 +69,12 @@ export declare class DHIS2PivotTableEngine {
|
|
|
54
69
|
get fixRowHeaders(): boolean;
|
|
55
70
|
getDimensionItems(dimension: DHIS2Dimension): string[];
|
|
56
71
|
getItem(id: string): AnalyticsItem | undefined;
|
|
72
|
+
getItemValueLegend(mapper: {
|
|
73
|
+
[key: string]: any;
|
|
74
|
+
}): {
|
|
75
|
+
color: string;
|
|
76
|
+
style: "TEXT" | "FILL";
|
|
77
|
+
} | undefined;
|
|
57
78
|
getValue(mapper: {
|
|
58
79
|
[key: string]: any;
|
|
59
80
|
}): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../src/components/DHIS2PivotTable/services/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../../src/components/DHIS2PivotTable/utils/color.ts"],"names":[],"mappings":"AAAA,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAc1E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hisptz/dhis2-analytics",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.16",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/types/index.d.ts",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"tsup": "^8.4.0",
|
|
42
42
|
"typescript": "^5.3.3",
|
|
43
43
|
"usehooks-ts": "^2.16.0",
|
|
44
|
-
"@repo/
|
|
45
|
-
"@repo/
|
|
44
|
+
"@repo/typescript-config": "0.0.2",
|
|
45
|
+
"@repo/eslint-config": "0.0.0"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@google/earthengine": "^1.5.21",
|