@hisptz/dhis2-scorecard 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/components/ScorecardHeader.js +9 -15
  2. package/dist/components/ScorecardHeader.js.map +1 -1
  3. package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js +7 -3
  4. package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
  5. package/dist/components/ScorecardPrint/components/ScorecardPreviewArea.js +30 -19
  6. package/dist/components/ScorecardPrint/components/ScorecardPreviewArea.js.map +1 -1
  7. package/dist/components/ScorecardPrint/print.css +1 -9
  8. package/dist/components/ScorecardPrint/print.css.map +1 -1
  9. package/dist/components/ScorecardTable/ScorecardTable.module.css +3 -0
  10. package/dist/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
  11. package/dist/components/ScorecardTable/components/DataContainer.js +0 -4
  12. package/dist/components/ScorecardTable/components/DataContainer.js.map +1 -1
  13. package/dist/components/ScorecardTable/components/LinkedDataCell.js +0 -4
  14. package/dist/components/ScorecardTable/components/LinkedDataCell.js.map +1 -1
  15. package/dist/esm/components/ScorecardHeader.js +10 -16
  16. package/dist/esm/components/ScorecardHeader.js.map +1 -1
  17. package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js +7 -3
  18. package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
  19. package/dist/esm/components/ScorecardPrint/components/ScorecardPreviewArea.js +31 -20
  20. package/dist/esm/components/ScorecardPrint/components/ScorecardPreviewArea.js.map +1 -1
  21. package/dist/esm/components/ScorecardPrint/print.css +1 -9
  22. package/dist/esm/components/ScorecardPrint/print.css.map +1 -1
  23. package/dist/esm/components/ScorecardTable/ScorecardTable.module.css +3 -0
  24. package/dist/esm/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
  25. package/dist/esm/components/ScorecardTable/components/DataContainer.js +0 -4
  26. package/dist/esm/components/ScorecardTable/components/DataContainer.js.map +1 -1
  27. package/dist/esm/components/ScorecardTable/components/LinkedDataCell.js +0 -4
  28. package/dist/esm/components/ScorecardTable/components/LinkedDataCell.js.map +1 -1
  29. package/dist/types/components/ScorecardHeader.d.ts.map +1 -1
  30. package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts +1 -0
  31. package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts.map +1 -1
  32. package/dist/types/components/ScorecardPrint/components/ScorecardPreviewArea.d.ts.map +1 -1
  33. package/dist/types/components/ScorecardTable/components/DataContainer.d.ts.map +1 -1
  34. package/dist/types/components/ScorecardTable/components/LinkedDataCell.d.ts.map +1 -1
  35. package/package.json +5 -5
@@ -31,9 +31,9 @@ function ScorecardHeader() {
31
31
  if (!showTitle) {
32
32
  return null;
33
33
  }
34
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "row space-between", id: "scorecard-header", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "row", children: customHeader ? (
34
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: customHeader ? (
35
35
  /*
36
- // @ts-ignore */
36
+ // @ts-ignore */
37
37
  /* @__PURE__ */ jsxRuntime.jsx(
38
38
  JsxParser__default.default,
39
39
  {
@@ -56,25 +56,19 @@ function ScorecardHeader() {
56
56
  flexDirection: "column",
57
57
  alignItems: "center",
58
58
  justifyContent: "center",
59
+ width: "100%",
59
60
  gap: 16
60
61
  },
61
62
  children: [
62
- /* @__PURE__ */ jsxRuntime.jsxs(
63
- "h1",
64
- {
65
- style: { margin: 8 },
66
- id: "data-test-score-card-title",
67
- children: [
68
- title,
69
- " ",
70
- `${periods.length === 1 ? ` - ${period?.name}` : ""}`
71
- ]
72
- }
73
- ),
63
+ /* @__PURE__ */ jsxRuntime.jsxs("h1", { style: { margin: 8 }, id: "data-test-score-card-title", children: [
64
+ title,
65
+ " ",
66
+ `${periods.length === 1 ? ` - ${period?.name}` : ""}`
67
+ ] }),
74
68
  /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { color: ui.colors.grey600, margin: 0 }, children: subtitle })
75
69
  ]
76
70
  }
77
- ) }) });
71
+ ) });
78
72
  }
79
73
 
80
74
  exports.ScorecardHeader = ScorecardHeader;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AAuCK,cAqBC,YArBD;AAvCL,SAAS,0BAA0B;AACnC,SAAS,eAAe;AACxB,SAAS,sCAAsC;AAE/C,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,eAAe;AAEf,SAAS,kBAAkB;AACjC,QAAM,SAAS,mBAAmB;AAClC,QAAM,EAAE,cAAc,OAAO,SAAS,IAAI,UAAU,CAAC;AAErD,QAAM,kBACL,+BAAgD,iBAAiB;AAClE,QAAM,YAAY,+BAAwC;AAAA,IACzD;AAAA,IACA;AAAA,EACD,CAAC;AAED,QAAM,UAAU,QAAQ,MAAM,gBAAgB,SAAS,CAAC,eAAe,CAAC;AAExE,QAAM,SAAS,QAAQ,MAAM;AAC5B,QAAI,QAAQ,SAAS,GAAG;AACvB;AAAA,IACD;AACA,WAAO,cAAc,cAAc,KAAK,OAAO,GAAG,EAAY;AAAA,EAC/D,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,SAAI,WAAU,qBAAoB,IAAI,oBACtC,8BAAC,SAAI,WAAU,OACb;AAAA;AAAA;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,uBAAqB;AAAA,QACrB,WAAU;AAAA,QACV,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA,QAAQ,QAAQ,WAAW,IAAI,QAAQ,OAAO;AAAA,QAC/C;AAAA,QACA,KAAK;AAAA;AAAA,IACN;AAAA,MAEA;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,KAAK;AAAA,MACN;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO,EAAE,QAAQ,EAAE;AAAA,YACnB,IAAI;AAAA,YAEH;AAAA;AAAA,cAAO;AAAA,cACP,GACA,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,KAAK,EAC/C;AAAA;AAAA;AAAA,QACD;AAAA,QACA,oBAAC,QAAG,OAAO,EAAE,OAAO,OAAO,SAAS,QAAQ,EAAE,GAC5C,oBACF;AAAA;AAAA;AAAA,EACD,GAEF,GACD;AAEF","sourcesContent":["import { useScorecardConfig } from \"./ConfigProvider\";\nimport { useMemo } from \"react\";\nimport { useScorecardStateSelectorValue } from \"../state\";\nimport type { PeriodSelection } from \"../schemas/config\";\nimport { PeriodUtility } from \"@hisptz/dhis2-utils\";\nimport { head } from \"lodash\";\nimport { colors } from \"@dhis2/ui\";\nimport JsxParser from \"react-jsx-parser\";\n\nexport function ScorecardHeader() {\n\tconst config = useScorecardConfig();\n\tconst { customHeader, title, subtitle } = config ?? {};\n\n\tconst periodSelection =\n\t\tuseScorecardStateSelectorValue<PeriodSelection>(\"periodSelection\");\n\tconst showTitle = useScorecardStateSelectorValue<boolean>([\n\t\t\"options\",\n\t\t\"title\",\n\t]);\n\n\tconst periods = useMemo(() => periodSelection.periods, [periodSelection]);\n\n\tconst period = useMemo(() => {\n\t\tif (periods.length > 1) {\n\t\t\treturn;\n\t\t}\n\t\treturn PeriodUtility.getPeriodById(head(periods)?.id as string);\n\t}, [periods]);\n\n\tif (!showTitle) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"row space-between\" id={\"scorecard-header\"}>\n\t\t\t<div className=\"row\">\n\t\t\t\t{customHeader ? (\n\t\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t\t<JsxParser\n\t\t\t\t\t\tautoCloseVoidElements\n\t\t\t\t\t\tclassName=\"w-100\"\n\t\t\t\t\t\tonError={console.error}\n\t\t\t\t\t\tbindings={{\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tsubtitle,\n\t\t\t\t\t\t\tperiod: periods.length === 1 ? period?.name : \"\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tjsx={customHeader}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<h1\n\t\t\t\t\t\t\tstyle={{ margin: 8 }}\n\t\t\t\t\t\t\tid={\"data-test-score-card-title\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{title}{\" \"}\n\t\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\t\tperiods.length === 1 ? ` - ${period?.name}` : \"\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<h3 style={{ color: colors.grey600, margin: 0 }}>\n\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AAkCE,mBAIE,KAsBC,YA1BH;AAlCF,SAAS,0BAA0B;AACnC,SAAS,eAAe;AACxB,SAAS,sCAAsC;AAE/C,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,eAAe;AAEf,SAAS,kBAAkB;AACjC,QAAM,SAAS,mBAAmB;AAClC,QAAM,EAAE,cAAc,OAAO,SAAS,IAAI,UAAU,CAAC;AAErD,QAAM,kBACL,+BAAgD,iBAAiB;AAClE,QAAM,YAAY,+BAAwC;AAAA,IACzD;AAAA,IACA;AAAA,EACD,CAAC;AAED,QAAM,UAAU,QAAQ,MAAM,gBAAgB,SAAS,CAAC,eAAe,CAAC;AAExE,QAAM,SAAS,QAAQ,MAAM;AAC5B,QAAI,QAAQ,SAAS,GAAG;AACvB;AAAA,IACD;AACA,WAAO,cAAc,cAAc,KAAK,OAAO,GAAG,EAAY;AAAA,EAC/D,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,SACC,gCACE;AAAA;AAAA;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,uBAAqB;AAAA,QACrB,WAAU;AAAA,QACV,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA,QAAQ,QAAQ,WAAW,IAAI,QAAQ,OAAO;AAAA,QAC/C;AAAA,QACA,KAAK;AAAA;AAAA,IACN;AAAA,MAEA;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,KAAK;AAAA,MACN;AAAA,MAEA;AAAA,6BAAC,QAAG,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,8BAC5B;AAAA;AAAA,UAAO;AAAA,UACP,GAAG,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,KAAK,EAAE;AAAA,WACrD;AAAA,QACA,oBAAC,QAAG,OAAO,EAAE,OAAO,OAAO,SAAS,QAAQ,EAAE,GAC5C,oBACF;AAAA;AAAA;AAAA,EACD,GAEF;AAEF","sourcesContent":["import { useScorecardConfig } from \"./ConfigProvider\";\nimport { useMemo } from \"react\";\nimport { useScorecardStateSelectorValue } from \"../state\";\nimport type { PeriodSelection } from \"../schemas/config\";\nimport { PeriodUtility } from \"@hisptz/dhis2-utils\";\nimport { head } from \"lodash\";\nimport { colors } from \"@dhis2/ui\";\nimport JsxParser from \"react-jsx-parser\";\n\nexport function ScorecardHeader() {\n\tconst config = useScorecardConfig();\n\tconst { customHeader, title, subtitle } = config ?? {};\n\n\tconst periodSelection =\n\t\tuseScorecardStateSelectorValue<PeriodSelection>(\"periodSelection\");\n\tconst showTitle = useScorecardStateSelectorValue<boolean>([\n\t\t\"options\",\n\t\t\"title\",\n\t]);\n\n\tconst periods = useMemo(() => periodSelection.periods, [periodSelection]);\n\n\tconst period = useMemo(() => {\n\t\tif (periods.length > 1) {\n\t\t\treturn;\n\t\t}\n\t\treturn PeriodUtility.getPeriodById(head(periods)?.id as string);\n\t}, [periods]);\n\n\tif (!showTitle) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{customHeader ? (\n\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t<JsxParser\n\t\t\t\t\tautoCloseVoidElements\n\t\t\t\t\tclassName=\"w-100\"\n\t\t\t\t\tonError={console.error}\n\t\t\t\t\tbindings={{\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tsubtitle,\n\t\t\t\t\t\tperiod: periods.length === 1 ? period?.name : \"\",\n\t\t\t\t\t}}\n\t\t\t\t\tjsx={customHeader}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<h1 style={{ margin: 8 }} id={\"data-test-score-card-title\"}>\n\t\t\t\t\t\t{title}{\" \"}\n\t\t\t\t\t\t{`${periods.length === 1 ? ` - ${period?.name}` : \"\"}`}\n\t\t\t\t\t</h1>\n\t\t\t\t\t<h3 style={{ color: colors.grey600, margin: 0 }}>\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</h3>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n"]}
@@ -12,6 +12,7 @@ var xlsx = require('xlsx');
12
12
  var MetaProvider = require('../../MetaProvider');
13
13
  var download = require('../utils/download');
14
14
  var appRuntime = require('@dhis2/app-runtime');
15
+ require('../print.css');
15
16
 
16
17
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
18
 
@@ -49,7 +50,6 @@ function DownloadMenu({
49
50
  const meta = MetaProvider.useScorecardMeta();
50
51
  const print = reactToPrint.useReactToPrint({
51
52
  contentRef: previewRef,
52
- preserveAfterPrint: false,
53
53
  documentTitle: config.title,
54
54
  onPrintError: (errorLocation, error) => {
55
55
  console.error(`Error running ${errorLocation}`);
@@ -121,10 +121,14 @@ function ScorecardDownloadButton() {
121
121
  const [completed, setCompleted] = react.useState(dataEngine.isDone);
122
122
  const previewRef = react.useRef(null);
123
123
  react.useEffect(() => {
124
- return dataEngine.addOnCompleteListener(setCompleted);
124
+ return dataEngine.addOnCompleteListener((completed2) => {
125
+ startTransition(() => {
126
+ setCompleted(completed2);
127
+ });
128
+ });
125
129
  }, [dataEngine]);
126
130
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
127
- openMenu && /* @__PURE__ */ jsxRuntime.jsx(ScorecardPreviewArea.ScorecardPreviewArea, { previewRef }),
131
+ completed && /* @__PURE__ */ jsxRuntime.jsx(ScorecardPreviewArea.ScorecardPreviewArea, { previewRef }),
128
132
  /* @__PURE__ */ jsxRuntime.jsx(
129
133
  ui.DropdownButton,
130
134
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n\tDropdownButton,\n\tFlyoutMenu,\n\tIconDownload24,\n\tMenuItem,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport {\n\ttype RefObject,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tuseTransition,\n} 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\";\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\tpreserveAfterPrint: false,\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: dataEngine.data,\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 { data: dataEngine } = useScorecardData();\n\tconst [openMenu, setOpenMenu] = useState<boolean>(false);\n\tconst [completed, setCompleted] = useState<boolean>(dataEngine.isDone);\n\tconst previewRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\treturn dataEngine.addOnCompleteListener(setCompleted);\n\t}, [dataEngine]);\n\n\treturn (\n\t\t<>\n\t\t\t{openMenu && <ScorecardPreviewArea previewRef={previewRef} />}\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}\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"]}
1
+ {"version":3,"sources":["../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":["completed"],"mappings":"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","sourcesContent":["import {\n\tDropdownButton,\n\tFlyoutMenu,\n\tIconDownload24,\n\tMenuItem,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport {\n\ttype RefObject,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tuseTransition,\n} 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\";\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: dataEngine.data,\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 { data: dataEngine } = useScorecardData();\n\tconst [openMenu, setOpenMenu] = useState<boolean>(false);\n\tconst [completed, setCompleted] = useState<boolean>(dataEngine.isDone);\n\tconst previewRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\treturn dataEngine.addOnCompleteListener((completed) => {\n\t\t\tstartTransition(() => {\n\t\t\t\tsetCompleted(completed);\n\t\t\t});\n\t\t});\n\t}, [dataEngine]);\n\n\treturn (\n\t\t<>\n\t\t\t{completed && <ScorecardPreviewArea previewRef={previewRef} />}\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}\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"]}
@@ -28,31 +28,42 @@ const ScorecardPreviewArea = react.memo(function ScorecardPreviewArea2({
28
28
  printMode: true
29
29
  }
30
30
  };
31
- return /* @__PURE__ */ jsxRuntime.jsx(StateProvider.ScorecardStateProvider, { initialState: updatedState, config, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
32
- "div",
31
+ return /* @__PURE__ */ jsxRuntime.jsxs(
32
+ StateProvider.ScorecardStateProvider,
33
33
  {
34
- className: "print-preview",
35
- style: {
36
- height: "100%",
37
- display: "flex",
38
- gap: 16,
39
- flexDirection: "column"
40
- },
41
- ref: previewRef,
34
+ withRecoilRoot: true,
35
+ initialState: updatedState,
36
+ config,
42
37
  children: [
43
- /* @__PURE__ */ jsxRuntime.jsx(ScorecardHeader.ScorecardHeader, {}),
44
- /* @__PURE__ */ jsxRuntime.jsx(ScorecardLegendsView.ScorecardLegendsView, {}),
45
- /* @__PURE__ */ jsxRuntime.jsx(TableStateProvider.TableStateProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(reactDnd.DndProvider, { backend: reactDndHtml5Backend.HTML5Backend, children: /* @__PURE__ */ jsxRuntime.jsx(
46
- ScorecardTable.ScorecardTable,
38
+ /* @__PURE__ */ jsxRuntime.jsx("style", { type: "text/css", media: "print", children: " @page { size: landscape; margin: 32px; }" }),
39
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
40
+ "div",
47
41
  {
48
- scrollHeight: "100%",
49
- scrollWidth: "100%",
50
- width: "100%"
42
+ className: "print-preview",
43
+ style: {
44
+ height: "100%",
45
+ display: "flex",
46
+ gap: 16,
47
+ flexDirection: "column"
48
+ },
49
+ ref: previewRef,
50
+ children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx(ScorecardHeader.ScorecardHeader, {}),
52
+ /* @__PURE__ */ jsxRuntime.jsx(ScorecardLegendsView.ScorecardLegendsView, {}),
53
+ /* @__PURE__ */ jsxRuntime.jsx(TableStateProvider.TableStateProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(reactDnd.DndProvider, { backend: reactDndHtml5Backend.HTML5Backend, children: /* @__PURE__ */ jsxRuntime.jsx(
54
+ ScorecardTable.ScorecardTable,
55
+ {
56
+ scrollHeight: "100%",
57
+ scrollWidth: "100%",
58
+ width: "100%"
59
+ }
60
+ ) }) })
61
+ ]
51
62
  }
52
- ) }) })
63
+ ) })
53
64
  ]
54
65
  }
55
- ) }) });
66
+ );
56
67
  });
57
68
 
58
69
  exports.ScorecardPreviewArea = ScorecardPreviewArea;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"AAmCI,SAUC,KAVD;AAnCJ,SAAgB,YAA4B;AAC5C,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AAEnC,OAAO;AAEA,MAAM,uBAAuB,KAAK,SAASA,sBAAqB;AAAA,EACtE;AACD,GAEG;AACF,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,eAAe;AAAA,IACpB,GAAI,SAAS,CAAC;AAAA,IACd,SAAS;AAAA,MACR,GAAI,OAAO,WAAW,CAAC;AAAA,MACvB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,WAAW;AAAA,IACZ;AAAA,EACD;AAEA,SACC,oBAAC,0BAAuB,cAAc,cAAc,QACnD,8BAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC7B;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,OAAO;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,KAAK;AAAA,QACL,eAAe;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MAEL;AAAA,4BAAC,mBAAgB;AAAA,QACjB,oBAAC,wBAAqB;AAAA,QACtB,oBAAC,sBACA,8BAAC,eAAY,SAAS,cACrB;AAAA,UAAC;AAAA;AAAA,YACA,cAAa;AAAA,YACb,aAAY;AAAA,YACZ,OAAM;AAAA;AAAA,QACP,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD,GACD;AAEF,CAAC","sourcesContent":["import React, { memo, type RefObject } from \"react\";\nimport { TableStateProvider } from \"../../TableStateProvider\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { ScorecardTable } from \"../../ScorecardTable\";\nimport { ScorecardHeader } from \"../../ScorecardHeader\";\nimport { ScorecardLegendsView } from \"../../ScorecardLegendsView\";\nimport { ScorecardStateProvider } from \"../../StateProvider\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useRecoilValue } from \"recoil\";\nimport { scorecardStateAtom } from \"../../../state\";\nimport type { ScorecardState } from \"../../../schemas/config\";\nimport \"../print.css\";\n\nexport const ScorecardPreviewArea = memo(function ScorecardPreviewArea({\n\tpreviewRef,\n}: {\n\tpreviewRef: RefObject<HTMLDivElement>;\n}) {\n\tconst config = useScorecardConfig();\n\tconst state = useRecoilValue(scorecardStateAtom);\n\n\tconst updatedState = {\n\t\t...(state ?? {}),\n\t\toptions: {\n\t\t\t...(state?.options ?? {}),\n\t\t\tdisableExpanding: true,\n\t\t\tdisablePagination: true,\n\t\t\tprintMode: true,\n\t\t},\n\t} as ScorecardState;\n\n\treturn (\n\t\t<ScorecardStateProvider initialState={updatedState} config={config}>\n\t\t\t<div style={{ display: \"none\" }}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"print-preview\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t}}\n\t\t\t\t\tref={previewRef}\n\t\t\t\t>\n\t\t\t\t\t<ScorecardHeader />\n\t\t\t\t\t<ScorecardLegendsView />\n\t\t\t\t\t<TableStateProvider>\n\t\t\t\t\t\t<DndProvider backend={HTML5Backend}>\n\t\t\t\t\t\t\t<ScorecardTable\n\t\t\t\t\t\t\t\tscrollHeight=\"100%\"\n\t\t\t\t\t\t\t\tscrollWidth=\"100%\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DndProvider>\n\t\t\t\t\t</TableStateProvider>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ScorecardStateProvider>\n\t);\n});\n"]}
1
+ {"version":3,"sources":["../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"AAsCG,cAQC,YARD;AAtCH,SAAgB,YAA4B;AAC5C,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AAEnC,OAAO;AAEA,MAAM,uBAAuB,KAAK,SAASA,sBAAqB;AAAA,EACtE;AACD,GAEG;AACF,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,eAAe;AAAA,IACpB,GAAI,SAAS,CAAC;AAAA,IACd,SAAS;AAAA,MACR,GAAI,OAAO,WAAW,CAAC;AAAA,MACvB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,WAAW;AAAA,IACZ;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,gBAAc;AAAA,MACd,cAAc;AAAA,MACd;AAAA,MAEA;AAAA,4BAAC,WAAM,MAAK,YAAW,OAAM,SAE3B,wDAIF;AAAA,QACA,oBAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC7B;AAAA,UAAC;AAAA;AAAA,YACA,WAAU;AAAA,YACV,OAAO;AAAA,cACN,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,KAAK;AAAA,cACL,eAAe;AAAA,YAChB;AAAA,YACA,KAAK;AAAA,YAEL;AAAA,kCAAC,mBAAgB;AAAA,cACjB,oBAAC,wBAAqB;AAAA,cACtB,oBAAC,sBACA,8BAAC,eAAY,SAAS,cACrB;AAAA,gBAAC;AAAA;AAAA,kBACA,cAAa;AAAA,kBACb,aAAY;AAAA,kBACZ,OAAM;AAAA;AAAA,cACP,GACD,GACD;AAAA;AAAA;AAAA,QACD,GACD;AAAA;AAAA;AAAA,EACD;AAEF,CAAC","sourcesContent":["import React, { memo, type RefObject } from \"react\";\nimport { TableStateProvider } from \"../../TableStateProvider\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { ScorecardTable } from \"../../ScorecardTable\";\nimport { ScorecardHeader } from \"../../ScorecardHeader\";\nimport { ScorecardLegendsView } from \"../../ScorecardLegendsView\";\nimport { ScorecardStateProvider } from \"../../StateProvider\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useRecoilValue } from \"recoil\";\nimport { scorecardStateAtom } from \"../../../state\";\nimport type { ScorecardState } from \"../../../schemas/config\";\nimport \"../print.css\";\n\nexport const ScorecardPreviewArea = memo(function ScorecardPreviewArea({\n\tpreviewRef,\n}: {\n\tpreviewRef: RefObject<HTMLDivElement>;\n}) {\n\tconst config = useScorecardConfig();\n\tconst state = useRecoilValue(scorecardStateAtom);\n\n\tconst updatedState = {\n\t\t...(state ?? {}),\n\t\toptions: {\n\t\t\t...(state?.options ?? {}),\n\t\t\tdisableExpanding: true,\n\t\t\tdisablePagination: true,\n\t\t\tprintMode: true,\n\t\t},\n\t} as ScorecardState;\n\n\treturn (\n\t\t<ScorecardStateProvider\n\t\t\twithRecoilRoot\n\t\t\tinitialState={updatedState}\n\t\t\tconfig={config}\n\t\t>\n\t\t\t<style type=\"text/css\" media=\"print\">\n\t\t\t\t{\n\t\t\t\t\t\"\\\n @page { size: landscape; margin: 32px; }\\\n\"\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<div style={{ display: \"none\" }}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"print-preview\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t}}\n\t\t\t\t\tref={previewRef}\n\t\t\t\t>\n\t\t\t\t\t<ScorecardHeader />\n\t\t\t\t\t<ScorecardLegendsView />\n\t\t\t\t\t<TableStateProvider>\n\t\t\t\t\t\t<DndProvider backend={HTML5Backend}>\n\t\t\t\t\t\t\t<ScorecardTable\n\t\t\t\t\t\t\t\tscrollHeight=\"100%\"\n\t\t\t\t\t\t\t\tscrollWidth=\"100%\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DndProvider>\n\t\t\t\t\t</TableStateProvider>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ScorecardStateProvider>\n\t);\n});\n"]}
@@ -1,13 +1,5 @@
1
- body {
2
- @media print {
3
- @page {
4
- margin: 32px !important;
5
- }
6
- }
7
- }
8
1
  .print-preview > * {
9
- padding: 32px;
10
- border: 1px solid black;
2
+ margin: 1px;
11
3
  font-size: 1em !important;
12
4
  .print-hide {
13
5
  display: none !important;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\nbody {\n @media print {\n @page {\n margin: 32px !important;\n }\n }\n}\n\n.print-preview > * {\n padding: 32px;\n border: 1px solid black;\n font-size: 1em !important;\n\n .print-hide {\n display: none !important;\n }\n\n table {\n border-color: #A0ADBA !important;\n border-left: 1px solid black !important;\n border-top: 1px solid black !important;\n table-layout: fixed !important;\n }\n\n\n td {\n border-color: black !important;\n }\n\n td > div * {\n font-size: 1em !important;\n }\n\n th {\n border-color: black !important;\n border-right: 1px solid black !important;\n background: transparent !important;\n }\n\n /*tr td:first-child > svg {*/\n /* display: none !important;*/\n /*}*/\n\n button {\n display: none !important;\n }\n\n input {\n display: none !important;\n }\n\n\n @media print {\n border: unset;\n\n }\n\n\n}\n\n"],"mappings":"AACA;AACI,SAAO;AACH;AACI,cAAQ;AACZ;AACJ;AACJ;AAEA,CAAC,cAAc,EAAE;AACb,WAAS;AACT,UAAQ,IAAI,MAAM;AAClB,aAAW;AAEX,GAAC;AACG,aAAS;AACb;AAEA;AACI,kBAAc;AACd,iBAAa,IAAI,MAAM;AACvB,gBAAY,IAAI,MAAM;AACtB,kBAAc;AAClB;AAGA;AACI,kBAAc;AAClB;AAEA,KAAG,EAAE,IAAI;AACL,eAAW;AACf;AAEA;AACI,kBAAc;AACd,kBAAc,IAAI,MAAM;AACxB,gBAAY;AAChB;AAMA;AACI,aAAS;AACb;AAEA;AACI,aAAS;AACb;AAGA,SAAO;AACH,YAAQ;AAEZ;AAGJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\n.print-preview > * {\n margin: 1px;\n font-size: 1em !important;\n\n .print-hide {\n display: none !important;\n }\n\n table {\n border-color: #A0ADBA !important;\n border-left: 1px solid black !important;\n border-top: 1px solid black !important;\n table-layout: fixed !important;\n }\n\n\n td {\n border-color: black !important;\n }\n\n td > div * {\n font-size: 1em !important;\n }\n\n th {\n border-color: black !important;\n border-right: 1px solid black !important;\n background: transparent !important;\n }\n\n /*tr td:first-child > svg {*/\n /* display: none !important;*/\n /*}*/\n\n button {\n display: none !important;\n }\n\n input {\n display: none !important;\n }\n\n\n @media print {\n border: unset;\n\n }\n\n\n}\n\n"],"mappings":"AACA,CAAC,cAAc,EAAE;AACb,UAAQ;AACR,aAAW;AAEX,GAAC;AACG,aAAS;AACb;AAEA;AACI,kBAAc;AACd,iBAAa,IAAI,MAAM;AACvB,gBAAY,IAAI,MAAM;AACtB,kBAAc;AAClB;AAGA;AACI,kBAAc;AAClB;AAEA,KAAG,EAAE,IAAI;AACL,eAAW;AACf;AAEA;AACI,kBAAc;AACd,kBAAc,IAAI,MAAM;AACxB,gBAAY;AAChB;AAMA;AACI,aAAS;AACb;AAEA;AACI,aAAS;AACb;AAGA,SAAO;AACH,YAAQ;AAEZ;AAGJ;","names":[]}
@@ -8,6 +8,9 @@
8
8
  z-index: 1;
9
9
  padding: 10px 12px;
10
10
  }
11
+ .expandCell {
12
+ page-break-inside: avoid !important;
13
+ }
11
14
  .loading-cell {
12
15
  animation: shimmer 2s infinite linear;
13
16
  background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ScorecardTable/ScorecardTable.module.css"],"sourcesContent":["\n.expandCell > td:first-child {\n left: 0;\n top: auto;\n text-align: left;\n width: 40px !important;\n background-color: rgb(243, 245, 247);\n position: sticky !important;\n z-index: 1;\n padding: 10px 12px;\n}\n\n\n.loading-cell {\n animation: shimmer 2s infinite linear;\n background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);\n background-size: 500px 100px;\n animation-name: moving-gradient;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n@-webkit-keyframes moving-gradient {\n 0% {\n background-position: -250px 0;\n }\n 100% {\n background-position: 250px 0;\n }\n}\n\n.loader {\n position: sticky !important;\n left: 0;\n}\n\n\n"],"mappings":"AACA,CAAC,WAAW,EAAE,EAAE;AACZ,QAAM;AACN,OAAK;AACL,cAAY;AACZ,SAAO;AACP,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,YAAU;AACV,WAAS;AACT,WAAS,KAAK;AAClB;AAGA,CAAC;AACG,aAAW,QAAQ,GAAG,SAAS;AAC/B,cAAY,gBAAgB,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK;AAC/D,mBAAiB,MAAM;AACvB,kBAAgB;AAChB,sBAAoB;AACpB,6BAA2B;AAC3B,6BAA2B;AAC3B,uBAAqB;AACzB;AAEA,mBAPoB;AAQhB;AACI,yBAAqB,OAAO;AAChC;AACA;AACI,yBAAqB,MAAM;AAC/B;AACJ;AAEA,CAAC;AACG,YAAU;AACV,QAAM;AACV;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/ScorecardTable/ScorecardTable.module.css"],"sourcesContent":["\n.expandCell > td:first-child {\n left: 0;\n top: auto;\n text-align: left;\n width: 40px !important;\n background-color: rgb(243, 245, 247);\n position: sticky !important;\n z-index: 1;\n padding: 10px 12px;\n}\n\n.expandCell {\n page-break-inside: avoid !important;\n}\n\n\n.loading-cell {\n animation: shimmer 2s infinite linear;\n background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);\n background-size: 500px 100px;\n animation-name: moving-gradient;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n@-webkit-keyframes moving-gradient {\n 0% {\n background-position: -250px 0;\n }\n 100% {\n background-position: 250px 0;\n }\n}\n\n.loader {\n position: sticky !important;\n left: 0;\n}\n\n\n"],"mappings":"AACA,CAAC,WAAW,EAAE,EAAE;AACZ,QAAM;AACN,OAAK;AACL,cAAY;AACZ,SAAO;AACP,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,YAAU;AACV,WAAS;AACT,WAAS,KAAK;AAClB;AAEA,CAXC;AAYG,qBAAmB;AACvB;AAGA,CAAC;AACG,aAAW,QAAQ,GAAG,SAAS;AAC/B,cAAY,gBAAgB,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK;AAC/D,mBAAiB,MAAM;AACvB,kBAAgB;AAChB,sBAAoB;AACpB,6BAA2B;AAC3B,6BAA2B;AAC3B,uBAAqB;AACzB;AAEA,mBAPoB;AAQhB;AACI,yBAAqB,OAAO;AAChC;AACA;AACI,yBAAqB,MAAM;AAC/B;AACJ;AAEA,CAAC;AACG,YAAU;AACV,QAAM;AACV;","names":[]}
@@ -36,10 +36,6 @@ function DataContainerComponent(props) {
36
36
  }
37
37
  );
38
38
  }
39
- console.log({
40
- cellData,
41
- dataConfig
42
- });
43
39
  return /* @__PURE__ */ jsxRuntime.jsx(
44
40
  LinkedDataCell.LinkedDataCell,
45
41
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":"AAwBS;AApBT,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAE3B,SAAS,uBACR,OACC;AACD,QAAM,OAAO,MAAM,KAAK,OAAO,QAAQ;AACvC,QAAM,aAAa,MAAM,SAAS;AAClC,QAAM,SAAS,mBAAmB;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,SAAS,SAAS,IAAI,aAAa,MAAM,SAAS,CAAC;AAE3D,MAAI,CAAC,UAAU,CAAC,MAAM;AACrB,WAAO,oBAAC,iBAAc,OAAO,EAAE,OAAO,KAAK,GAAG,UAAQ,MAAC;AAAA,EACxD;AAEA,MAAI,SAAS;AACZ,WAAO,oBAAC,cAAW,MAAY;AAAA,EAChC;AAEA,MAAI,CAAC,YAAY;AAChB,WAAO,oBAAC,iBAAc,UAAQ,MAAC;AAAA,EAChC;AAEA,MAAI,UAAU,WAAW,GAAG;AAC3B,WACC;AAAA,MAAC;AAAA;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,aAAa;AAAA;AAAA,IACd;AAAA,EAEF;AAEA,UAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC;AAAA,IAAC;AAAA;AAAA,MACC,GAAG;AAAA,MACJ;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,aAAa;AAAA;AAAA,EACd;AAEF;AAEO,MAAM,gBAAgB,KAAK,SAASA,eAC1C,OACC;AACD,QAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,CAAC,QAAQ;AACZ,WAAO,oBAAC,iBAAc,UAAQ,MAAC,KAAI,MAAK,OAAM,QAAO;AAAA,EACtD;AAEA,SAAO,oBAAC,0BAAwB,GAAG,OAAO;AAC3C,CAAC","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?.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\tconsole.log({\n\t\tcellData,\n\t\tdataConfig,\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
+ {"version":3,"sources":["../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":"AAwBS;AApBT,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAE3B,SAAS,uBACR,OACC;AACD,QAAM,OAAO,MAAM,KAAK,OAAO,QAAQ;AACvC,QAAM,aAAa,MAAM,SAAS;AAClC,QAAM,SAAS,mBAAmB;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,SAAS,SAAS,IAAI,aAAa,MAAM,SAAS,CAAC;AAE3D,MAAI,CAAC,UAAU,CAAC,MAAM;AACrB,WAAO,oBAAC,iBAAc,OAAO,EAAE,OAAO,KAAK,GAAG,UAAQ,MAAC;AAAA,EACxD;AAEA,MAAI,SAAS;AACZ,WAAO,oBAAC,cAAW,MAAY;AAAA,EAChC;AAEA,MAAI,CAAC,YAAY;AAChB,WAAO,oBAAC,iBAAc,UAAQ,MAAC;AAAA,EAChC;AAEA,MAAI,UAAU,WAAW,GAAG;AAC3B,WACC;AAAA,MAAC;AAAA;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,aAAa;AAAA;AAAA,IACd;AAAA,EAEF;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACC,GAAG;AAAA,MACJ;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,aAAa;AAAA;AAAA,EACd;AAEF;AAEO,MAAM,gBAAgB,KAAK,SAASA,eAC1C,OACC;AACD,QAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,CAAC,QAAQ;AACZ,WAAO,oBAAC,iBAAc,UAAQ,MAAC,KAAI,MAAK,OAAM,QAAO;AAAA,EACtD;AAEA,SAAO,oBAAC,0BAAwB,GAAG,OAAO;AAC3C,CAAC","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?.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"]}
@@ -27,10 +27,6 @@ function LinkedDataCellComponent({
27
27
  orgUnit,
28
28
  period
29
29
  });
30
- console.log({
31
- top,
32
- bottom
33
- });
34
30
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
35
31
  !!furtherAnalysisConfig && /* @__PURE__ */ jsxRuntime.jsx(
36
32
  FurtherAnalysisModal.FurtherAnalysis,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":"AA+CE,mBAEE,KAFF;AA7CF,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,MAAM,gBAAgB;AAC/B,SAAS,2BAA2B;AACpC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,eAAe;AASxB,SAAS,wBAAwB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwB;AACvB,QAAM,CAAC,uBAAuB,wBAAwB,IACrD,SAAuC,IAAI;AAC5C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,MAAS;AAE9D,QAAM,CAAC,KAAK,MAAM,IAAI,eAAe,CAAC;AACtC,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,YAAY;AAAA,IAC7D,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,EAAE,kBAAkB,uBAAuB,IAAI,YAAY;AAAA,IAChE,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AAED,UAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC,iCACE;AAAA,KAAC,CAAC,yBACF;AAAA,MAAC;AAAA;AAAA,QACA,SAAS,MAAM;AACd,mCAAyB,IAAI;AAAA,QAC9B;AAAA,QACA,MAAM,CAAC;AAAA,QACP,QAAQ;AAAA;AAAA,IACT;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,eAAe,CAAC,MAAW;AAC1B,YAAE,eAAe;AACjB,4BAAkB,EAAE,MAAM;AAAA,QAC3B;AAAA,QACA,SAAS,CAAC,UAAsB;AAC/B,gBAAM,gBAAgB;AACtB,mCAAyB;AAAA,YACxB,iBAAiB;AAAA,cAChB,SAAS;AAAA,gBACR;AAAA,kBACC,IAAI;AAAA,gBACL;AAAA,cACD;AAAA,YACD;AAAA,YACA,kBAAkB;AAAA,cACjB,QAAQ,CAAC;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,UAAU;AAAA,gBACT;AAAA,kBACC,IAAI,QAAQ;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACJ,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,UACP,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,QAAQ,MAAM;AAAA,QACtB;AAAA;AAAA,IACD;AAAA,IACC,kBACA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,IACX;AAAA,KAEF;AAEF;AAEO,MAAM,iBAAiB;AAAA,EAC7B;AAAA,EACA,CAAC,WAAW,aAAa;AACxB,WAAO,QAAQ,WAAW,QAAQ;AAAA,EACnC;AACD","sourcesContent":["import type { ScorecardCellData } from \"../../../schemas/config\";\nimport type { ItemMeta } from \"../../../hooks/metadata\";\nimport { useCellData } from \"../../../hooks/cellData\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport { memo, useState } from \"react\";\nimport { FurtherAnalysisMenu } from \"./FurtherAnalysisMenu\";\nimport {\n\tFurtherAnalysis,\n\ttype FurtherAnalysisConfig,\n} from \"./FurtherAnalysisModal\";\nimport { isEqual } from \"lodash\";\n\nexport interface LinkedDataCellProps {\n\tdataSources: ScorecardCellData[];\n\torgUnit: ItemMeta & { hierarchy: string };\n\tperiod: string;\n\tsize: number;\n}\n\nfunction LinkedDataCellComponent({\n\tdataSources,\n\torgUnit,\n\tperiod,\n\tsize,\n}: LinkedDataCellProps) {\n\tconst [furtherAnalysisConfig, setFurtherAnalysisConfig] =\n\t\tuseState<FurtherAnalysisConfig | null>(null);\n\tconst [stateActionRef, setStateActionRef] = useState(undefined);\n\n\tconst [top, bottom] = dataSources ?? [];\n\tconst { legendDefinition: topLegendDefinition } = useCellData({\n\t\tdataSource: top,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\tconst { legendDefinition: bottomLegendDefinition } = useCellData({\n\t\tdataSource: bottom,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\n\tconsole.log({\n\t\ttop,\n\t\tbottom,\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{!!furtherAnalysisConfig && (\n\t\t\t\t<FurtherAnalysis\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetFurtherAnalysisConfig(null);\n\t\t\t\t\t}}\n\t\t\t\t\thide={!furtherAnalysisConfig}\n\t\t\t\t\tconfig={furtherAnalysisConfig}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<LinkedCell\n\t\t\t\tsize={size}\n\t\t\t\tonContextMenu={(e: any) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetStateActionRef(e.target);\n\t\t\t\t}}\n\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tsetFurtherAnalysisConfig({\n\t\t\t\t\t\tperiodSelection: {\n\t\t\t\t\t\t\tperiods: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: period,\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\torgUnitSelection: {\n\t\t\t\t\t\t\tlevels: [],\n\t\t\t\t\t\t\tgroups: [],\n\t\t\t\t\t\t\torgUnits: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: orgUnit.uid,\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\tdataSources,\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\ttop={{\n\t\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\t\tdataSource: top,\n\t\t\t\t\tvalue: top?.data?.current,\n\t\t\t\t}}\n\t\t\t\tbottom={{\n\t\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\t\tdataSource: bottom,\n\t\t\t\t\tvalue: bottom?.data?.current,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{stateActionRef && (\n\t\t\t\t<FurtherAnalysisMenu\n\t\t\t\t\tdataSources={dataSources}\n\t\t\t\t\tonSelect={setFurtherAnalysisConfig}\n\t\t\t\t\tstateActionRef={stateActionRef}\n\t\t\t\t\tsetStateActionRef={setStateActionRef}\n\t\t\t\t\torgUnit={orgUnit}\n\t\t\t\t\tperiodId={period}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const LinkedDataCell = memo(\n\tLinkedDataCellComponent,\n\t(prevProps, nowProps) => {\n\t\treturn isEqual(prevProps, nowProps);\n\t},\n);\n"]}
1
+ {"version":3,"sources":["../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":"AA0CE,mBAEE,KAFF;AAxCF,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,MAAM,gBAAgB;AAC/B,SAAS,2BAA2B;AACpC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,eAAe;AASxB,SAAS,wBAAwB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwB;AACvB,QAAM,CAAC,uBAAuB,wBAAwB,IACrD,SAAuC,IAAI;AAC5C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,MAAS;AAE9D,QAAM,CAAC,KAAK,MAAM,IAAI,eAAe,CAAC;AACtC,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,YAAY;AAAA,IAC7D,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,EAAE,kBAAkB,uBAAuB,IAAI,YAAY;AAAA,IAChE,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC,iCACE;AAAA,KAAC,CAAC,yBACF;AAAA,MAAC;AAAA;AAAA,QACA,SAAS,MAAM;AACd,mCAAyB,IAAI;AAAA,QAC9B;AAAA,QACA,MAAM,CAAC;AAAA,QACP,QAAQ;AAAA;AAAA,IACT;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,eAAe,CAAC,MAAW;AAC1B,YAAE,eAAe;AACjB,4BAAkB,EAAE,MAAM;AAAA,QAC3B;AAAA,QACA,SAAS,CAAC,UAAsB;AAC/B,gBAAM,gBAAgB;AACtB,mCAAyB;AAAA,YACxB,iBAAiB;AAAA,cAChB,SAAS;AAAA,gBACR;AAAA,kBACC,IAAI;AAAA,gBACL;AAAA,cACD;AAAA,YACD;AAAA,YACA,kBAAkB;AAAA,cACjB,QAAQ,CAAC;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,UAAU;AAAA,gBACT;AAAA,kBACC,IAAI,QAAQ;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACJ,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,UACP,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,QAAQ,MAAM;AAAA,QACtB;AAAA;AAAA,IACD;AAAA,IACC,kBACA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,IACX;AAAA,KAEF;AAEF;AAEO,MAAM,iBAAiB;AAAA,EAC7B;AAAA,EACA,CAAC,WAAW,aAAa;AACxB,WAAO,QAAQ,WAAW,QAAQ;AAAA,EACnC;AACD","sourcesContent":["import type { ScorecardCellData } from \"../../../schemas/config\";\nimport type { ItemMeta } from \"../../../hooks/metadata\";\nimport { useCellData } from \"../../../hooks/cellData\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport { memo, useState } from \"react\";\nimport { FurtherAnalysisMenu } from \"./FurtherAnalysisMenu\";\nimport {\n\tFurtherAnalysis,\n\ttype FurtherAnalysisConfig,\n} from \"./FurtherAnalysisModal\";\nimport { isEqual } from \"lodash\";\n\nexport interface LinkedDataCellProps {\n\tdataSources: ScorecardCellData[];\n\torgUnit: ItemMeta & { hierarchy: string };\n\tperiod: string;\n\tsize: number;\n}\n\nfunction LinkedDataCellComponent({\n\tdataSources,\n\torgUnit,\n\tperiod,\n\tsize,\n}: LinkedDataCellProps) {\n\tconst [furtherAnalysisConfig, setFurtherAnalysisConfig] =\n\t\tuseState<FurtherAnalysisConfig | null>(null);\n\tconst [stateActionRef, setStateActionRef] = useState(undefined);\n\n\tconst [top, bottom] = dataSources ?? [];\n\tconst { legendDefinition: topLegendDefinition } = useCellData({\n\t\tdataSource: top,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\tconst { legendDefinition: bottomLegendDefinition } = useCellData({\n\t\tdataSource: bottom,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{!!furtherAnalysisConfig && (\n\t\t\t\t<FurtherAnalysis\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetFurtherAnalysisConfig(null);\n\t\t\t\t\t}}\n\t\t\t\t\thide={!furtherAnalysisConfig}\n\t\t\t\t\tconfig={furtherAnalysisConfig}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<LinkedCell\n\t\t\t\tsize={size}\n\t\t\t\tonContextMenu={(e: any) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetStateActionRef(e.target);\n\t\t\t\t}}\n\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tsetFurtherAnalysisConfig({\n\t\t\t\t\t\tperiodSelection: {\n\t\t\t\t\t\t\tperiods: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: period,\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\torgUnitSelection: {\n\t\t\t\t\t\t\tlevels: [],\n\t\t\t\t\t\t\tgroups: [],\n\t\t\t\t\t\t\torgUnits: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: orgUnit.uid,\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\tdataSources,\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\ttop={{\n\t\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\t\tdataSource: top,\n\t\t\t\t\tvalue: top?.data?.current,\n\t\t\t\t}}\n\t\t\t\tbottom={{\n\t\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\t\tdataSource: bottom,\n\t\t\t\t\tvalue: bottom?.data?.current,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{stateActionRef && (\n\t\t\t\t<FurtherAnalysisMenu\n\t\t\t\t\tdataSources={dataSources}\n\t\t\t\t\tonSelect={setFurtherAnalysisConfig}\n\t\t\t\t\tstateActionRef={stateActionRef}\n\t\t\t\t\tsetStateActionRef={setStateActionRef}\n\t\t\t\t\torgUnit={orgUnit}\n\t\t\t\t\tperiodId={period}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const LinkedDataCell = memo(\n\tLinkedDataCellComponent,\n\t(prevProps, nowProps) => {\n\t\treturn isEqual(prevProps, nowProps);\n\t},\n);\n"]}
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { useScorecardConfig } from './ConfigProvider';
3
3
  import { useMemo } from 'react';
4
4
  import { useScorecardStateSelectorValue } from '../state';
@@ -25,9 +25,9 @@ function ScorecardHeader() {
25
25
  if (!showTitle) {
26
26
  return null;
27
27
  }
28
- return /* @__PURE__ */ jsx("div", { className: "row space-between", id: "scorecard-header", children: /* @__PURE__ */ jsx("div", { className: "row", children: customHeader ? (
28
+ return /* @__PURE__ */ jsx(Fragment, { children: customHeader ? (
29
29
  /*
30
- // @ts-ignore */
30
+ // @ts-ignore */
31
31
  /* @__PURE__ */ jsx(
32
32
  JsxParser,
33
33
  {
@@ -50,25 +50,19 @@ function ScorecardHeader() {
50
50
  flexDirection: "column",
51
51
  alignItems: "center",
52
52
  justifyContent: "center",
53
+ width: "100%",
53
54
  gap: 16
54
55
  },
55
56
  children: [
56
- /* @__PURE__ */ jsxs(
57
- "h1",
58
- {
59
- style: { margin: 8 },
60
- id: "data-test-score-card-title",
61
- children: [
62
- title,
63
- " ",
64
- `${periods.length === 1 ? ` - ${period?.name}` : ""}`
65
- ]
66
- }
67
- ),
57
+ /* @__PURE__ */ jsxs("h1", { style: { margin: 8 }, id: "data-test-score-card-title", children: [
58
+ title,
59
+ " ",
60
+ `${periods.length === 1 ? ` - ${period?.name}` : ""}`
61
+ ] }),
68
62
  /* @__PURE__ */ jsx("h3", { style: { color: colors.grey600, margin: 0 }, children: subtitle })
69
63
  ]
70
64
  }
71
- ) }) });
65
+ ) });
72
66
  }
73
67
 
74
68
  export { ScorecardHeader };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AAuCK,cAqBC,YArBD;AAvCL,SAAS,0BAA0B;AACnC,SAAS,eAAe;AACxB,SAAS,sCAAsC;AAE/C,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,eAAe;AAEf,SAAS,kBAAkB;AACjC,QAAM,SAAS,mBAAmB;AAClC,QAAM,EAAE,cAAc,OAAO,SAAS,IAAI,UAAU,CAAC;AAErD,QAAM,kBACL,+BAAgD,iBAAiB;AAClE,QAAM,YAAY,+BAAwC;AAAA,IACzD;AAAA,IACA;AAAA,EACD,CAAC;AAED,QAAM,UAAU,QAAQ,MAAM,gBAAgB,SAAS,CAAC,eAAe,CAAC;AAExE,QAAM,SAAS,QAAQ,MAAM;AAC5B,QAAI,QAAQ,SAAS,GAAG;AACvB;AAAA,IACD;AACA,WAAO,cAAc,cAAc,KAAK,OAAO,GAAG,EAAY;AAAA,EAC/D,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,SAAI,WAAU,qBAAoB,IAAI,oBACtC,8BAAC,SAAI,WAAU,OACb;AAAA;AAAA;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,uBAAqB;AAAA,QACrB,WAAU;AAAA,QACV,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA,QAAQ,QAAQ,WAAW,IAAI,QAAQ,OAAO;AAAA,QAC/C;AAAA,QACA,KAAK;AAAA;AAAA,IACN;AAAA,MAEA;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,KAAK;AAAA,MACN;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAO,EAAE,QAAQ,EAAE;AAAA,YACnB,IAAI;AAAA,YAEH;AAAA;AAAA,cAAO;AAAA,cACP,GACA,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,KAAK,EAC/C;AAAA;AAAA;AAAA,QACD;AAAA,QACA,oBAAC,QAAG,OAAO,EAAE,OAAO,OAAO,SAAS,QAAQ,EAAE,GAC5C,oBACF;AAAA;AAAA;AAAA,EACD,GAEF,GACD;AAEF","sourcesContent":["import { useScorecardConfig } from \"./ConfigProvider\";\nimport { useMemo } from \"react\";\nimport { useScorecardStateSelectorValue } from \"../state\";\nimport type { PeriodSelection } from \"../schemas/config\";\nimport { PeriodUtility } from \"@hisptz/dhis2-utils\";\nimport { head } from \"lodash\";\nimport { colors } from \"@dhis2/ui\";\nimport JsxParser from \"react-jsx-parser\";\n\nexport function ScorecardHeader() {\n\tconst config = useScorecardConfig();\n\tconst { customHeader, title, subtitle } = config ?? {};\n\n\tconst periodSelection =\n\t\tuseScorecardStateSelectorValue<PeriodSelection>(\"periodSelection\");\n\tconst showTitle = useScorecardStateSelectorValue<boolean>([\n\t\t\"options\",\n\t\t\"title\",\n\t]);\n\n\tconst periods = useMemo(() => periodSelection.periods, [periodSelection]);\n\n\tconst period = useMemo(() => {\n\t\tif (periods.length > 1) {\n\t\t\treturn;\n\t\t}\n\t\treturn PeriodUtility.getPeriodById(head(periods)?.id as string);\n\t}, [periods]);\n\n\tif (!showTitle) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"row space-between\" id={\"scorecard-header\"}>\n\t\t\t<div className=\"row\">\n\t\t\t\t{customHeader ? (\n\t\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t\t<JsxParser\n\t\t\t\t\t\tautoCloseVoidElements\n\t\t\t\t\t\tclassName=\"w-100\"\n\t\t\t\t\t\tonError={console.error}\n\t\t\t\t\t\tbindings={{\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tsubtitle,\n\t\t\t\t\t\t\tperiod: periods.length === 1 ? period?.name : \"\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tjsx={customHeader}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<h1\n\t\t\t\t\t\t\tstyle={{ margin: 8 }}\n\t\t\t\t\t\t\tid={\"data-test-score-card-title\"}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{title}{\" \"}\n\t\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\t\tperiods.length === 1 ? ` - ${period?.name}` : \"\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<h3 style={{ color: colors.grey600, margin: 0 }}>\n\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AAkCE,mBAIE,KAsBC,YA1BH;AAlCF,SAAS,0BAA0B;AACnC,SAAS,eAAe;AACxB,SAAS,sCAAsC;AAE/C,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,eAAe;AAEf,SAAS,kBAAkB;AACjC,QAAM,SAAS,mBAAmB;AAClC,QAAM,EAAE,cAAc,OAAO,SAAS,IAAI,UAAU,CAAC;AAErD,QAAM,kBACL,+BAAgD,iBAAiB;AAClE,QAAM,YAAY,+BAAwC;AAAA,IACzD;AAAA,IACA;AAAA,EACD,CAAC;AAED,QAAM,UAAU,QAAQ,MAAM,gBAAgB,SAAS,CAAC,eAAe,CAAC;AAExE,QAAM,SAAS,QAAQ,MAAM;AAC5B,QAAI,QAAQ,SAAS,GAAG;AACvB;AAAA,IACD;AACA,WAAO,cAAc,cAAc,KAAK,OAAO,GAAG,EAAY;AAAA,EAC/D,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,CAAC,WAAW;AACf,WAAO;AAAA,EACR;AAEA,SACC,gCACE;AAAA;AAAA;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACA,uBAAqB;AAAA,QACrB,WAAU;AAAA,QACV,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA,QAAQ,QAAQ,WAAW,IAAI,QAAQ,OAAO;AAAA,QAC/C;AAAA,QACA,KAAK;AAAA;AAAA,IACN;AAAA,MAEA;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,KAAK;AAAA,MACN;AAAA,MAEA;AAAA,6BAAC,QAAG,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,8BAC5B;AAAA;AAAA,UAAO;AAAA,UACP,GAAG,QAAQ,WAAW,IAAI,MAAM,QAAQ,IAAI,KAAK,EAAE;AAAA,WACrD;AAAA,QACA,oBAAC,QAAG,OAAO,EAAE,OAAO,OAAO,SAAS,QAAQ,EAAE,GAC5C,oBACF;AAAA;AAAA;AAAA,EACD,GAEF;AAEF","sourcesContent":["import { useScorecardConfig } from \"./ConfigProvider\";\nimport { useMemo } from \"react\";\nimport { useScorecardStateSelectorValue } from \"../state\";\nimport type { PeriodSelection } from \"../schemas/config\";\nimport { PeriodUtility } from \"@hisptz/dhis2-utils\";\nimport { head } from \"lodash\";\nimport { colors } from \"@dhis2/ui\";\nimport JsxParser from \"react-jsx-parser\";\n\nexport function ScorecardHeader() {\n\tconst config = useScorecardConfig();\n\tconst { customHeader, title, subtitle } = config ?? {};\n\n\tconst periodSelection =\n\t\tuseScorecardStateSelectorValue<PeriodSelection>(\"periodSelection\");\n\tconst showTitle = useScorecardStateSelectorValue<boolean>([\n\t\t\"options\",\n\t\t\"title\",\n\t]);\n\n\tconst periods = useMemo(() => periodSelection.periods, [periodSelection]);\n\n\tconst period = useMemo(() => {\n\t\tif (periods.length > 1) {\n\t\t\treturn;\n\t\t}\n\t\treturn PeriodUtility.getPeriodById(head(periods)?.id as string);\n\t}, [periods]);\n\n\tif (!showTitle) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{customHeader ? (\n\t\t\t\t/*\n // @ts-ignore */\n\t\t\t\t<JsxParser\n\t\t\t\t\tautoCloseVoidElements\n\t\t\t\t\tclassName=\"w-100\"\n\t\t\t\t\tonError={console.error}\n\t\t\t\t\tbindings={{\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tsubtitle,\n\t\t\t\t\t\tperiod: periods.length === 1 ? period?.name : \"\",\n\t\t\t\t\t}}\n\t\t\t\t\tjsx={customHeader}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<h1 style={{ margin: 8 }} id={\"data-test-score-card-title\"}>\n\t\t\t\t\t\t{title}{\" \"}\n\t\t\t\t\t\t{`${periods.length === 1 ? ` - ${period?.name}` : \"\"}`}\n\t\t\t\t\t</h1>\n\t\t\t\t\t<h3 style={{ color: colors.grey600, margin: 0 }}>\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</h3>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n"]}
@@ -10,6 +10,7 @@ import * as xlsx from 'xlsx';
10
10
  import { useScorecardMeta } from '../../MetaProvider';
11
11
  import { downloadALMAData, downloadALMAMeta } from '../utils/download';
12
12
  import { useAlert } from '@dhis2/app-runtime';
13
+ import '../print.css';
13
14
 
14
15
  function DownloadMenu({
15
16
  previewRef,
@@ -24,7 +25,6 @@ function DownloadMenu({
24
25
  const meta = useScorecardMeta();
25
26
  const print = useReactToPrint({
26
27
  contentRef: previewRef,
27
- preserveAfterPrint: false,
28
28
  documentTitle: config.title,
29
29
  onPrintError: (errorLocation, error) => {
30
30
  console.error(`Error running ${errorLocation}`);
@@ -96,10 +96,14 @@ function ScorecardDownloadButton() {
96
96
  const [completed, setCompleted] = useState(dataEngine.isDone);
97
97
  const previewRef = useRef(null);
98
98
  useEffect(() => {
99
- return dataEngine.addOnCompleteListener(setCompleted);
99
+ return dataEngine.addOnCompleteListener((completed2) => {
100
+ startTransition(() => {
101
+ setCompleted(completed2);
102
+ });
103
+ });
100
104
  }, [dataEngine]);
101
105
  return /* @__PURE__ */ jsxs(Fragment, { children: [
102
- openMenu && /* @__PURE__ */ jsx(ScorecardPreviewArea, { previewRef }),
106
+ completed && /* @__PURE__ */ jsx(ScorecardPreviewArea, { previewRef }),
103
107
  /* @__PURE__ */ jsx(
104
108
  DropdownButton,
105
109
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n\tDropdownButton,\n\tFlyoutMenu,\n\tIconDownload24,\n\tMenuItem,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport {\n\ttype RefObject,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tuseTransition,\n} 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\";\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\tpreserveAfterPrint: false,\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: dataEngine.data,\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 { data: dataEngine } = useScorecardData();\n\tconst [openMenu, setOpenMenu] = useState<boolean>(false);\n\tconst [completed, setCompleted] = useState<boolean>(dataEngine.isDone);\n\tconst previewRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\treturn dataEngine.addOnCompleteListener(setCompleted);\n\t}, [dataEngine]);\n\n\treturn (\n\t\t<>\n\t\t\t{openMenu && <ScorecardPreviewArea previewRef={previewRef} />}\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}\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"]}
1
+ {"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":["completed"],"mappings":"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","sourcesContent":["import {\n\tDropdownButton,\n\tFlyoutMenu,\n\tIconDownload24,\n\tMenuItem,\n} from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport {\n\ttype RefObject,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\tuseTransition,\n} 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\";\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: dataEngine.data,\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 { data: dataEngine } = useScorecardData();\n\tconst [openMenu, setOpenMenu] = useState<boolean>(false);\n\tconst [completed, setCompleted] = useState<boolean>(dataEngine.isDone);\n\tconst previewRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\treturn dataEngine.addOnCompleteListener((completed) => {\n\t\t\tstartTransition(() => {\n\t\t\t\tsetCompleted(completed);\n\t\t\t});\n\t\t});\n\t}, [dataEngine]);\n\n\treturn (\n\t\t<>\n\t\t\t{completed && <ScorecardPreviewArea previewRef={previewRef} />}\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}\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"]}
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { memo } from 'react';
3
3
  import { TableStateProvider } from '../../TableStateProvider';
4
4
  import { DndProvider } from 'react-dnd';
@@ -26,31 +26,42 @@ const ScorecardPreviewArea = memo(function ScorecardPreviewArea2({
26
26
  printMode: true
27
27
  }
28
28
  };
29
- return /* @__PURE__ */ jsx(ScorecardStateProvider, { initialState: updatedState, config, children: /* @__PURE__ */ jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsxs(
30
- "div",
29
+ return /* @__PURE__ */ jsxs(
30
+ ScorecardStateProvider,
31
31
  {
32
- className: "print-preview",
33
- style: {
34
- height: "100%",
35
- display: "flex",
36
- gap: 16,
37
- flexDirection: "column"
38
- },
39
- ref: previewRef,
32
+ withRecoilRoot: true,
33
+ initialState: updatedState,
34
+ config,
40
35
  children: [
41
- /* @__PURE__ */ jsx(ScorecardHeader, {}),
42
- /* @__PURE__ */ jsx(ScorecardLegendsView, {}),
43
- /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(DndProvider, { backend: HTML5Backend, children: /* @__PURE__ */ jsx(
44
- ScorecardTable,
36
+ /* @__PURE__ */ jsx("style", { type: "text/css", media: "print", children: " @page { size: landscape; margin: 32px; }" }),
37
+ /* @__PURE__ */ jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsxs(
38
+ "div",
45
39
  {
46
- scrollHeight: "100%",
47
- scrollWidth: "100%",
48
- width: "100%"
40
+ className: "print-preview",
41
+ style: {
42
+ height: "100%",
43
+ display: "flex",
44
+ gap: 16,
45
+ flexDirection: "column"
46
+ },
47
+ ref: previewRef,
48
+ children: [
49
+ /* @__PURE__ */ jsx(ScorecardHeader, {}),
50
+ /* @__PURE__ */ jsx(ScorecardLegendsView, {}),
51
+ /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(DndProvider, { backend: HTML5Backend, children: /* @__PURE__ */ jsx(
52
+ ScorecardTable,
53
+ {
54
+ scrollHeight: "100%",
55
+ scrollWidth: "100%",
56
+ width: "100%"
57
+ }
58
+ ) }) })
59
+ ]
49
60
  }
50
- ) }) })
61
+ ) })
51
62
  ]
52
63
  }
53
- ) }) });
64
+ );
54
65
  });
55
66
 
56
67
  export { ScorecardPreviewArea };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"AAmCI,SAUC,KAVD;AAnCJ,SAAgB,YAA4B;AAC5C,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AAEnC,OAAO;AAEA,MAAM,uBAAuB,KAAK,SAASA,sBAAqB;AAAA,EACtE;AACD,GAEG;AACF,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,eAAe;AAAA,IACpB,GAAI,SAAS,CAAC;AAAA,IACd,SAAS;AAAA,MACR,GAAI,OAAO,WAAW,CAAC;AAAA,MACvB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,WAAW;AAAA,IACZ;AAAA,EACD;AAEA,SACC,oBAAC,0BAAuB,cAAc,cAAc,QACnD,8BAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC7B;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,OAAO;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,KAAK;AAAA,QACL,eAAe;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MAEL;AAAA,4BAAC,mBAAgB;AAAA,QACjB,oBAAC,wBAAqB;AAAA,QACtB,oBAAC,sBACA,8BAAC,eAAY,SAAS,cACrB;AAAA,UAAC;AAAA;AAAA,YACA,cAAa;AAAA,YACb,aAAY;AAAA,YACZ,OAAM;AAAA;AAAA,QACP,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD,GACD;AAEF,CAAC","sourcesContent":["import React, { memo, type RefObject } from \"react\";\nimport { TableStateProvider } from \"../../TableStateProvider\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { ScorecardTable } from \"../../ScorecardTable\";\nimport { ScorecardHeader } from \"../../ScorecardHeader\";\nimport { ScorecardLegendsView } from \"../../ScorecardLegendsView\";\nimport { ScorecardStateProvider } from \"../../StateProvider\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useRecoilValue } from \"recoil\";\nimport { scorecardStateAtom } from \"../../../state\";\nimport type { ScorecardState } from \"../../../schemas/config\";\nimport \"../print.css\";\n\nexport const ScorecardPreviewArea = memo(function ScorecardPreviewArea({\n\tpreviewRef,\n}: {\n\tpreviewRef: RefObject<HTMLDivElement>;\n}) {\n\tconst config = useScorecardConfig();\n\tconst state = useRecoilValue(scorecardStateAtom);\n\n\tconst updatedState = {\n\t\t...(state ?? {}),\n\t\toptions: {\n\t\t\t...(state?.options ?? {}),\n\t\t\tdisableExpanding: true,\n\t\t\tdisablePagination: true,\n\t\t\tprintMode: true,\n\t\t},\n\t} as ScorecardState;\n\n\treturn (\n\t\t<ScorecardStateProvider initialState={updatedState} config={config}>\n\t\t\t<div style={{ display: \"none\" }}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"print-preview\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t}}\n\t\t\t\t\tref={previewRef}\n\t\t\t\t>\n\t\t\t\t\t<ScorecardHeader />\n\t\t\t\t\t<ScorecardLegendsView />\n\t\t\t\t\t<TableStateProvider>\n\t\t\t\t\t\t<DndProvider backend={HTML5Backend}>\n\t\t\t\t\t\t\t<ScorecardTable\n\t\t\t\t\t\t\t\tscrollHeight=\"100%\"\n\t\t\t\t\t\t\t\tscrollWidth=\"100%\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DndProvider>\n\t\t\t\t\t</TableStateProvider>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ScorecardStateProvider>\n\t);\n});\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"AAsCG,cAQC,YARD;AAtCH,SAAgB,YAA4B;AAC5C,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AAEnC,OAAO;AAEA,MAAM,uBAAuB,KAAK,SAASA,sBAAqB;AAAA,EACtE;AACD,GAEG;AACF,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,eAAe,kBAAkB;AAE/C,QAAM,eAAe;AAAA,IACpB,GAAI,SAAS,CAAC;AAAA,IACd,SAAS;AAAA,MACR,GAAI,OAAO,WAAW,CAAC;AAAA,MACvB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,WAAW;AAAA,IACZ;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,gBAAc;AAAA,MACd,cAAc;AAAA,MACd;AAAA,MAEA;AAAA,4BAAC,WAAM,MAAK,YAAW,OAAM,SAE3B,wDAIF;AAAA,QACA,oBAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC7B;AAAA,UAAC;AAAA;AAAA,YACA,WAAU;AAAA,YACV,OAAO;AAAA,cACN,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,KAAK;AAAA,cACL,eAAe;AAAA,YAChB;AAAA,YACA,KAAK;AAAA,YAEL;AAAA,kCAAC,mBAAgB;AAAA,cACjB,oBAAC,wBAAqB;AAAA,cACtB,oBAAC,sBACA,8BAAC,eAAY,SAAS,cACrB;AAAA,gBAAC;AAAA;AAAA,kBACA,cAAa;AAAA,kBACb,aAAY;AAAA,kBACZ,OAAM;AAAA;AAAA,cACP,GACD,GACD;AAAA;AAAA;AAAA,QACD,GACD;AAAA;AAAA;AAAA,EACD;AAEF,CAAC","sourcesContent":["import React, { memo, type RefObject } from \"react\";\nimport { TableStateProvider } from \"../../TableStateProvider\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { ScorecardTable } from \"../../ScorecardTable\";\nimport { ScorecardHeader } from \"../../ScorecardHeader\";\nimport { ScorecardLegendsView } from \"../../ScorecardLegendsView\";\nimport { ScorecardStateProvider } from \"../../StateProvider\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useRecoilValue } from \"recoil\";\nimport { scorecardStateAtom } from \"../../../state\";\nimport type { ScorecardState } from \"../../../schemas/config\";\nimport \"../print.css\";\n\nexport const ScorecardPreviewArea = memo(function ScorecardPreviewArea({\n\tpreviewRef,\n}: {\n\tpreviewRef: RefObject<HTMLDivElement>;\n}) {\n\tconst config = useScorecardConfig();\n\tconst state = useRecoilValue(scorecardStateAtom);\n\n\tconst updatedState = {\n\t\t...(state ?? {}),\n\t\toptions: {\n\t\t\t...(state?.options ?? {}),\n\t\t\tdisableExpanding: true,\n\t\t\tdisablePagination: true,\n\t\t\tprintMode: true,\n\t\t},\n\t} as ScorecardState;\n\n\treturn (\n\t\t<ScorecardStateProvider\n\t\t\twithRecoilRoot\n\t\t\tinitialState={updatedState}\n\t\t\tconfig={config}\n\t\t>\n\t\t\t<style type=\"text/css\" media=\"print\">\n\t\t\t\t{\n\t\t\t\t\t\"\\\n @page { size: landscape; margin: 32px; }\\\n\"\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<div style={{ display: \"none\" }}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"print-preview\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t}}\n\t\t\t\t\tref={previewRef}\n\t\t\t\t>\n\t\t\t\t\t<ScorecardHeader />\n\t\t\t\t\t<ScorecardLegendsView />\n\t\t\t\t\t<TableStateProvider>\n\t\t\t\t\t\t<DndProvider backend={HTML5Backend}>\n\t\t\t\t\t\t\t<ScorecardTable\n\t\t\t\t\t\t\t\tscrollHeight=\"100%\"\n\t\t\t\t\t\t\t\tscrollWidth=\"100%\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DndProvider>\n\t\t\t\t\t</TableStateProvider>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ScorecardStateProvider>\n\t);\n});\n"]}
@@ -1,13 +1,5 @@
1
- body {
2
- @media print {
3
- @page {
4
- margin: 32px !important;
5
- }
6
- }
7
- }
8
1
  .print-preview > * {
9
- padding: 32px;
10
- border: 1px solid black;
2
+ margin: 1px;
11
3
  font-size: 1em !important;
12
4
  .print-hide {
13
5
  display: none !important;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\nbody {\n @media print {\n @page {\n margin: 32px !important;\n }\n }\n}\n\n.print-preview > * {\n padding: 32px;\n border: 1px solid black;\n font-size: 1em !important;\n\n .print-hide {\n display: none !important;\n }\n\n table {\n border-color: #A0ADBA !important;\n border-left: 1px solid black !important;\n border-top: 1px solid black !important;\n table-layout: fixed !important;\n }\n\n\n td {\n border-color: black !important;\n }\n\n td > div * {\n font-size: 1em !important;\n }\n\n th {\n border-color: black !important;\n border-right: 1px solid black !important;\n background: transparent !important;\n }\n\n /*tr td:first-child > svg {*/\n /* display: none !important;*/\n /*}*/\n\n button {\n display: none !important;\n }\n\n input {\n display: none !important;\n }\n\n\n @media print {\n border: unset;\n\n }\n\n\n}\n\n"],"mappings":"AACA;AACI,SAAO;AACH;AACI,cAAQ;AACZ;AACJ;AACJ;AAEA,CAAC,cAAc,EAAE;AACb,WAAS;AACT,UAAQ,IAAI,MAAM;AAClB,aAAW;AAEX,GAAC;AACG,aAAS;AACb;AAEA;AACI,kBAAc;AACd,iBAAa,IAAI,MAAM;AACvB,gBAAY,IAAI,MAAM;AACtB,kBAAc;AAClB;AAGA;AACI,kBAAc;AAClB;AAEA,KAAG,EAAE,IAAI;AACL,eAAW;AACf;AAEA;AACI,kBAAc;AACd,kBAAc,IAAI,MAAM;AACxB,gBAAY;AAChB;AAMA;AACI,aAAS;AACb;AAEA;AACI,aAAS;AACb;AAGA,SAAO;AACH,YAAQ;AAEZ;AAGJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\n.print-preview > * {\n margin: 1px;\n font-size: 1em !important;\n\n .print-hide {\n display: none !important;\n }\n\n table {\n border-color: #A0ADBA !important;\n border-left: 1px solid black !important;\n border-top: 1px solid black !important;\n table-layout: fixed !important;\n }\n\n\n td {\n border-color: black !important;\n }\n\n td > div * {\n font-size: 1em !important;\n }\n\n th {\n border-color: black !important;\n border-right: 1px solid black !important;\n background: transparent !important;\n }\n\n /*tr td:first-child > svg {*/\n /* display: none !important;*/\n /*}*/\n\n button {\n display: none !important;\n }\n\n input {\n display: none !important;\n }\n\n\n @media print {\n border: unset;\n\n }\n\n\n}\n\n"],"mappings":"AACA,CAAC,cAAc,EAAE;AACb,UAAQ;AACR,aAAW;AAEX,GAAC;AACG,aAAS;AACb;AAEA;AACI,kBAAc;AACd,iBAAa,IAAI,MAAM;AACvB,gBAAY,IAAI,MAAM;AACtB,kBAAc;AAClB;AAGA;AACI,kBAAc;AAClB;AAEA,KAAG,EAAE,IAAI;AACL,eAAW;AACf;AAEA;AACI,kBAAc;AACd,kBAAc,IAAI,MAAM;AACxB,gBAAY;AAChB;AAMA;AACI,aAAS;AACb;AAEA;AACI,aAAS;AACb;AAGA,SAAO;AACH,YAAQ;AAEZ;AAGJ;","names":[]}
@@ -8,6 +8,9 @@
8
8
  z-index: 1;
9
9
  padding: 10px 12px;
10
10
  }
11
+ .expandCell {
12
+ page-break-inside: avoid !important;
13
+ }
11
14
  .loading-cell {
12
15
  animation: shimmer 2s infinite linear;
13
16
  background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScorecardTable/ScorecardTable.module.css"],"sourcesContent":["\n.expandCell > td:first-child {\n left: 0;\n top: auto;\n text-align: left;\n width: 40px !important;\n background-color: rgb(243, 245, 247);\n position: sticky !important;\n z-index: 1;\n padding: 10px 12px;\n}\n\n\n.loading-cell {\n animation: shimmer 2s infinite linear;\n background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);\n background-size: 500px 100px;\n animation-name: moving-gradient;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n@-webkit-keyframes moving-gradient {\n 0% {\n background-position: -250px 0;\n }\n 100% {\n background-position: 250px 0;\n }\n}\n\n.loader {\n position: sticky !important;\n left: 0;\n}\n\n\n"],"mappings":"AACA,CAAC,WAAW,EAAE,EAAE;AACZ,QAAM;AACN,OAAK;AACL,cAAY;AACZ,SAAO;AACP,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,YAAU;AACV,WAAS;AACT,WAAS,KAAK;AAClB;AAGA,CAAC;AACG,aAAW,QAAQ,GAAG,SAAS;AAC/B,cAAY,gBAAgB,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK;AAC/D,mBAAiB,MAAM;AACvB,kBAAgB;AAChB,sBAAoB;AACpB,6BAA2B;AAC3B,6BAA2B;AAC3B,uBAAqB;AACzB;AAEA,mBAPoB;AAQhB;AACI,yBAAqB,OAAO;AAChC;AACA;AACI,yBAAqB,MAAM;AAC/B;AACJ;AAEA,CAAC;AACG,YAAU;AACV,QAAM;AACV;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ScorecardTable/ScorecardTable.module.css"],"sourcesContent":["\n.expandCell > td:first-child {\n left: 0;\n top: auto;\n text-align: left;\n width: 40px !important;\n background-color: rgb(243, 245, 247);\n position: sticky !important;\n z-index: 1;\n padding: 10px 12px;\n}\n\n.expandCell {\n page-break-inside: avoid !important;\n}\n\n\n.loading-cell {\n animation: shimmer 2s infinite linear;\n background: linear-gradient(to right, #eee 40%, #ddd 50%, #eee 80%);\n background-size: 500px 100px;\n animation-name: moving-gradient;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n@-webkit-keyframes moving-gradient {\n 0% {\n background-position: -250px 0;\n }\n 100% {\n background-position: 250px 0;\n }\n}\n\n.loader {\n position: sticky !important;\n left: 0;\n}\n\n\n"],"mappings":"AACA,CAAC,WAAW,EAAE,EAAE;AACZ,QAAM;AACN,OAAK;AACL,cAAY;AACZ,SAAO;AACP,oBAAkB,IAAI,GAAG,EAAE,GAAG,EAAE;AAChC,YAAU;AACV,WAAS;AACT,WAAS,KAAK;AAClB;AAEA,CAXC;AAYG,qBAAmB;AACvB;AAGA,CAAC;AACG,aAAW,QAAQ,GAAG,SAAS;AAC/B,cAAY,gBAAgB,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK;AAC/D,mBAAiB,MAAM;AACvB,kBAAgB;AAChB,sBAAoB;AACpB,6BAA2B;AAC3B,6BAA2B;AAC3B,uBAAqB;AACzB;AAEA,mBAPoB;AAQhB;AACI,yBAAqB,OAAO;AAChC;AACA;AACI,yBAAqB,MAAM;AAC/B;AACJ;AAEA,CAAC;AACG,YAAU;AACV,QAAM;AACV;","names":[]}
@@ -34,10 +34,6 @@ function DataContainerComponent(props) {
34
34
  }
35
35
  );
36
36
  }
37
- console.log({
38
- cellData,
39
- dataConfig
40
- });
41
37
  return /* @__PURE__ */ jsx(
42
38
  LinkedDataCell,
43
39
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":"AAwBS;AApBT,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAE3B,SAAS,uBACR,OACC;AACD,QAAM,OAAO,MAAM,KAAK,OAAO,QAAQ;AACvC,QAAM,aAAa,MAAM,SAAS;AAClC,QAAM,SAAS,mBAAmB;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,SAAS,SAAS,IAAI,aAAa,MAAM,SAAS,CAAC;AAE3D,MAAI,CAAC,UAAU,CAAC,MAAM;AACrB,WAAO,oBAAC,iBAAc,OAAO,EAAE,OAAO,KAAK,GAAG,UAAQ,MAAC;AAAA,EACxD;AAEA,MAAI,SAAS;AACZ,WAAO,oBAAC,cAAW,MAAY;AAAA,EAChC;AAEA,MAAI,CAAC,YAAY;AAChB,WAAO,oBAAC,iBAAc,UAAQ,MAAC;AAAA,EAChC;AAEA,MAAI,UAAU,WAAW,GAAG;AAC3B,WACC;AAAA,MAAC;AAAA;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,aAAa;AAAA;AAAA,IACd;AAAA,EAEF;AAEA,UAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC;AAAA,IAAC;AAAA;AAAA,MACC,GAAG;AAAA,MACJ;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,aAAa;AAAA;AAAA,EACd;AAEF;AAEO,MAAM,gBAAgB,KAAK,SAASA,eAC1C,OACC;AACD,QAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,CAAC,QAAQ;AACZ,WAAO,oBAAC,iBAAc,UAAQ,MAAC,KAAI,MAAK,OAAM,QAAO;AAAA,EACtD;AAEA,SAAO,oBAAC,0BAAwB,GAAG,OAAO;AAC3C,CAAC","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?.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\tconsole.log({\n\t\tcellData,\n\t\tdataConfig,\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
+ {"version":3,"sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":["DataContainer"],"mappings":"AAwBS;AApBT,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAE3B,SAAS,uBACR,OACC;AACD,QAAM,OAAO,MAAM,KAAK,OAAO,QAAQ;AACvC,QAAM,aAAa,MAAM,SAAS;AAClC,QAAM,SAAS,mBAAmB;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,SAAS,SAAS,IAAI,aAAa,MAAM,SAAS,CAAC;AAE3D,MAAI,CAAC,UAAU,CAAC,MAAM;AACrB,WAAO,oBAAC,iBAAc,OAAO,EAAE,OAAO,KAAK,GAAG,UAAQ,MAAC;AAAA,EACxD;AAEA,MAAI,SAAS;AACZ,WAAO,oBAAC,cAAW,MAAY;AAAA,EAChC;AAEA,MAAI,CAAC,YAAY;AAChB,WAAO,oBAAC,iBAAc,UAAQ,MAAC;AAAA,EAChC;AAEA,MAAI,UAAU,WAAW,GAAG;AAC3B,WACC;AAAA,MAAC;AAAA;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,aAAa;AAAA;AAAA,IACd;AAAA,EAEF;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACC,GAAG;AAAA,MACJ;AAAA,MACA,QAAQ,WAAW;AAAA,MACnB,aAAa;AAAA;AAAA,EACd;AAEF;AAEO,MAAM,gBAAgB,KAAK,SAASA,eAC1C,OACC;AACD,QAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,CAAC,QAAQ;AACZ,WAAO,oBAAC,iBAAc,UAAQ,MAAC,KAAI,MAAK,OAAM,QAAO;AAAA,EACtD;AAEA,SAAO,oBAAC,0BAAwB,GAAG,OAAO;AAC3C,CAAC","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?.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"]}
@@ -25,10 +25,6 @@ function LinkedDataCellComponent({
25
25
  orgUnit,
26
26
  period
27
27
  });
28
- console.log({
29
- top,
30
- bottom
31
- });
32
28
  return /* @__PURE__ */ jsxs(Fragment, { children: [
33
29
  !!furtherAnalysisConfig && /* @__PURE__ */ jsx(
34
30
  FurtherAnalysis,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":"AA+CE,mBAEE,KAFF;AA7CF,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,MAAM,gBAAgB;AAC/B,SAAS,2BAA2B;AACpC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,eAAe;AASxB,SAAS,wBAAwB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwB;AACvB,QAAM,CAAC,uBAAuB,wBAAwB,IACrD,SAAuC,IAAI;AAC5C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,MAAS;AAE9D,QAAM,CAAC,KAAK,MAAM,IAAI,eAAe,CAAC;AACtC,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,YAAY;AAAA,IAC7D,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,EAAE,kBAAkB,uBAAuB,IAAI,YAAY;AAAA,IAChE,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AAED,UAAQ,IAAI;AAAA,IACX;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC,iCACE;AAAA,KAAC,CAAC,yBACF;AAAA,MAAC;AAAA;AAAA,QACA,SAAS,MAAM;AACd,mCAAyB,IAAI;AAAA,QAC9B;AAAA,QACA,MAAM,CAAC;AAAA,QACP,QAAQ;AAAA;AAAA,IACT;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,eAAe,CAAC,MAAW;AAC1B,YAAE,eAAe;AACjB,4BAAkB,EAAE,MAAM;AAAA,QAC3B;AAAA,QACA,SAAS,CAAC,UAAsB;AAC/B,gBAAM,gBAAgB;AACtB,mCAAyB;AAAA,YACxB,iBAAiB;AAAA,cAChB,SAAS;AAAA,gBACR;AAAA,kBACC,IAAI;AAAA,gBACL;AAAA,cACD;AAAA,YACD;AAAA,YACA,kBAAkB;AAAA,cACjB,QAAQ,CAAC;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,UAAU;AAAA,gBACT;AAAA,kBACC,IAAI,QAAQ;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACJ,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,UACP,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,QAAQ,MAAM;AAAA,QACtB;AAAA;AAAA,IACD;AAAA,IACC,kBACA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,IACX;AAAA,KAEF;AAEF;AAEO,MAAM,iBAAiB;AAAA,EAC7B;AAAA,EACA,CAAC,WAAW,aAAa;AACxB,WAAO,QAAQ,WAAW,QAAQ;AAAA,EACnC;AACD","sourcesContent":["import type { ScorecardCellData } from \"../../../schemas/config\";\nimport type { ItemMeta } from \"../../../hooks/metadata\";\nimport { useCellData } from \"../../../hooks/cellData\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport { memo, useState } from \"react\";\nimport { FurtherAnalysisMenu } from \"./FurtherAnalysisMenu\";\nimport {\n\tFurtherAnalysis,\n\ttype FurtherAnalysisConfig,\n} from \"./FurtherAnalysisModal\";\nimport { isEqual } from \"lodash\";\n\nexport interface LinkedDataCellProps {\n\tdataSources: ScorecardCellData[];\n\torgUnit: ItemMeta & { hierarchy: string };\n\tperiod: string;\n\tsize: number;\n}\n\nfunction LinkedDataCellComponent({\n\tdataSources,\n\torgUnit,\n\tperiod,\n\tsize,\n}: LinkedDataCellProps) {\n\tconst [furtherAnalysisConfig, setFurtherAnalysisConfig] =\n\t\tuseState<FurtherAnalysisConfig | null>(null);\n\tconst [stateActionRef, setStateActionRef] = useState(undefined);\n\n\tconst [top, bottom] = dataSources ?? [];\n\tconst { legendDefinition: topLegendDefinition } = useCellData({\n\t\tdataSource: top,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\tconst { legendDefinition: bottomLegendDefinition } = useCellData({\n\t\tdataSource: bottom,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\n\tconsole.log({\n\t\ttop,\n\t\tbottom,\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{!!furtherAnalysisConfig && (\n\t\t\t\t<FurtherAnalysis\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetFurtherAnalysisConfig(null);\n\t\t\t\t\t}}\n\t\t\t\t\thide={!furtherAnalysisConfig}\n\t\t\t\t\tconfig={furtherAnalysisConfig}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<LinkedCell\n\t\t\t\tsize={size}\n\t\t\t\tonContextMenu={(e: any) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetStateActionRef(e.target);\n\t\t\t\t}}\n\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tsetFurtherAnalysisConfig({\n\t\t\t\t\t\tperiodSelection: {\n\t\t\t\t\t\t\tperiods: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: period,\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\torgUnitSelection: {\n\t\t\t\t\t\t\tlevels: [],\n\t\t\t\t\t\t\tgroups: [],\n\t\t\t\t\t\t\torgUnits: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: orgUnit.uid,\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\tdataSources,\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\ttop={{\n\t\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\t\tdataSource: top,\n\t\t\t\t\tvalue: top?.data?.current,\n\t\t\t\t}}\n\t\t\t\tbottom={{\n\t\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\t\tdataSource: bottom,\n\t\t\t\t\tvalue: bottom?.data?.current,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{stateActionRef && (\n\t\t\t\t<FurtherAnalysisMenu\n\t\t\t\t\tdataSources={dataSources}\n\t\t\t\t\tonSelect={setFurtherAnalysisConfig}\n\t\t\t\t\tstateActionRef={stateActionRef}\n\t\t\t\t\tsetStateActionRef={setStateActionRef}\n\t\t\t\t\torgUnit={orgUnit}\n\t\t\t\t\tperiodId={period}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const LinkedDataCell = memo(\n\tLinkedDataCellComponent,\n\t(prevProps, nowProps) => {\n\t\treturn isEqual(prevProps, nowProps);\n\t},\n);\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":"AA0CE,mBAEE,KAFF;AAxCF,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,MAAM,gBAAgB;AAC/B,SAAS,2BAA2B;AACpC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,eAAe;AASxB,SAAS,wBAAwB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwB;AACvB,QAAM,CAAC,uBAAuB,wBAAwB,IACrD,SAAuC,IAAI;AAC5C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,MAAS;AAE9D,QAAM,CAAC,KAAK,MAAM,IAAI,eAAe,CAAC;AACtC,QAAM,EAAE,kBAAkB,oBAAoB,IAAI,YAAY;AAAA,IAC7D,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,EAAE,kBAAkB,uBAAuB,IAAI,YAAY;AAAA,IAChE,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC,iCACE;AAAA,KAAC,CAAC,yBACF;AAAA,MAAC;AAAA;AAAA,QACA,SAAS,MAAM;AACd,mCAAyB,IAAI;AAAA,QAC9B;AAAA,QACA,MAAM,CAAC;AAAA,QACP,QAAQ;AAAA;AAAA,IACT;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,eAAe,CAAC,MAAW;AAC1B,YAAE,eAAe;AACjB,4BAAkB,EAAE,MAAM;AAAA,QAC3B;AAAA,QACA,SAAS,CAAC,UAAsB;AAC/B,gBAAM,gBAAgB;AACtB,mCAAyB;AAAA,YACxB,iBAAiB;AAAA,cAChB,SAAS;AAAA,gBACR;AAAA,kBACC,IAAI;AAAA,gBACL;AAAA,cACD;AAAA,YACD;AAAA,YACA,kBAAkB;AAAA,cACjB,QAAQ,CAAC;AAAA,cACT,QAAQ,CAAC;AAAA,cACT,UAAU;AAAA,gBACT;AAAA,kBACC,IAAI,QAAQ;AAAA,gBACb;AAAA,cACD;AAAA,YACD;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACJ,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,KAAK,MAAM;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,UACP,kBAAkB;AAAA,UAClB,YAAY;AAAA,UACZ,OAAO,QAAQ,MAAM;AAAA,QACtB;AAAA;AAAA,IACD;AAAA,IACC,kBACA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,IACX;AAAA,KAEF;AAEF;AAEO,MAAM,iBAAiB;AAAA,EAC7B;AAAA,EACA,CAAC,WAAW,aAAa;AACxB,WAAO,QAAQ,WAAW,QAAQ;AAAA,EACnC;AACD","sourcesContent":["import type { ScorecardCellData } from \"../../../schemas/config\";\nimport type { ItemMeta } from \"../../../hooks/metadata\";\nimport { useCellData } from \"../../../hooks/cellData\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport { memo, useState } from \"react\";\nimport { FurtherAnalysisMenu } from \"./FurtherAnalysisMenu\";\nimport {\n\tFurtherAnalysis,\n\ttype FurtherAnalysisConfig,\n} from \"./FurtherAnalysisModal\";\nimport { isEqual } from \"lodash\";\n\nexport interface LinkedDataCellProps {\n\tdataSources: ScorecardCellData[];\n\torgUnit: ItemMeta & { hierarchy: string };\n\tperiod: string;\n\tsize: number;\n}\n\nfunction LinkedDataCellComponent({\n\tdataSources,\n\torgUnit,\n\tperiod,\n\tsize,\n}: LinkedDataCellProps) {\n\tconst [furtherAnalysisConfig, setFurtherAnalysisConfig] =\n\t\tuseState<FurtherAnalysisConfig | null>(null);\n\tconst [stateActionRef, setStateActionRef] = useState(undefined);\n\n\tconst [top, bottom] = dataSources ?? [];\n\tconst { legendDefinition: topLegendDefinition } = useCellData({\n\t\tdataSource: top,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\tconst { legendDefinition: bottomLegendDefinition } = useCellData({\n\t\tdataSource: bottom,\n\t\torgUnit,\n\t\tperiod,\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t{!!furtherAnalysisConfig && (\n\t\t\t\t<FurtherAnalysis\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tsetFurtherAnalysisConfig(null);\n\t\t\t\t\t}}\n\t\t\t\t\thide={!furtherAnalysisConfig}\n\t\t\t\t\tconfig={furtherAnalysisConfig}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<LinkedCell\n\t\t\t\tsize={size}\n\t\t\t\tonContextMenu={(e: any) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetStateActionRef(e.target);\n\t\t\t\t}}\n\t\t\t\tonClick={(event: MouseEvent) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tsetFurtherAnalysisConfig({\n\t\t\t\t\t\tperiodSelection: {\n\t\t\t\t\t\t\tperiods: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: period,\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\torgUnitSelection: {\n\t\t\t\t\t\t\tlevels: [],\n\t\t\t\t\t\t\tgroups: [],\n\t\t\t\t\t\t\torgUnits: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: orgUnit.uid,\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\tdataSources,\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t\ttop={{\n\t\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\t\tdataSource: top,\n\t\t\t\t\tvalue: top?.data?.current,\n\t\t\t\t}}\n\t\t\t\tbottom={{\n\t\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\t\tdataSource: bottom,\n\t\t\t\t\tvalue: bottom?.data?.current,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{stateActionRef && (\n\t\t\t\t<FurtherAnalysisMenu\n\t\t\t\t\tdataSources={dataSources}\n\t\t\t\t\tonSelect={setFurtherAnalysisConfig}\n\t\t\t\t\tstateActionRef={stateActionRef}\n\t\t\t\t\tsetStateActionRef={setStateActionRef}\n\t\t\t\t\torgUnit={orgUnit}\n\t\t\t\t\tperiodId={period}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const LinkedDataCell = memo(\n\tLinkedDataCellComponent,\n\t(prevProps, nowProps) => {\n\t\treturn isEqual(prevProps, nowProps);\n\t},\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ScorecardHeader.d.ts","sourceRoot":"","sources":["../../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AASA,wBAAgB,eAAe,mDAoE9B"}
1
+ {"version":3,"file":"ScorecardHeader.d.ts","sourceRoot":"","sources":["../../../src/components/ScorecardHeader.tsx"],"names":[],"mappings":"AASA,wBAAgB,eAAe,mDA8D9B"}
@@ -1,2 +1,3 @@
1
+ import "../print.css";
1
2
  export declare function ScorecardDownloadButton(): import("react/jsx-runtime").JSX.Element;
2
3
  //# sourceMappingURL=ScorecardDownloadButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScorecardDownloadButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"AAyGA,wBAAgB,uBAAuB,4CA4CtC"}
1
+ {"version":3,"file":"ScorecardDownloadButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"AAsBA,OAAO,cAAc,CAAC;AAmFtB,wBAAgB,uBAAuB,4CAgDtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScorecardPreviewArea.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAQ,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYpD,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,oBAAoB;gBAGpB,UAAU,cAAc,CAAC;EA2CpC,CAAC"}
1
+ {"version":3,"file":"ScorecardPreviewArea.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAQ,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAYpD,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,oBAAoB;gBAGpB,UAAU,cAAc,CAAC;EAsDpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAqDzD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUxB,CAAC"}
1
+ {"version":3,"file":"DataContainer.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardTable/components/DataContainer.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAgDzD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkedDataCell.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAWxD,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,iBAAS,uBAAuB,CAAC,EAChC,WAAW,EACX,OAAO,EACP,MAAM,EACN,IAAI,GACJ,EAAE,mBAAmB,2CAoFrB;AAED,eAAO,MAAM,cAAc,qEAK1B,CAAC"}
1
+ {"version":3,"file":"LinkedDataCell.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardTable/components/LinkedDataCell.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAWxD,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,iBAAS,uBAAuB,CAAC,EAChC,WAAW,EACX,OAAO,EACP,MAAM,EACN,IAAI,GACJ,EAAE,mBAAmB,2CA+ErB;AAED,eAAO,MAAM,cAAc,qEAK1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hisptz/dhis2-scorecard",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -46,8 +46,8 @@
46
46
  "tsup": "^8.0.1",
47
47
  "typescript": "^5.3.3",
48
48
  "usehooks-ts": "^2.9.2",
49
- "@repo/eslint-config": "0.0.0",
50
- "@repo/typescript-config": "0.0.0"
49
+ "@repo/typescript-config": "0.0.0",
50
+ "@repo/eslint-config": "0.0.0"
51
51
  },
52
52
  "dependencies": {
53
53
  "@tanstack/react-table": "^8.19.3",
@@ -63,8 +63,8 @@
63
63
  "xlsx": "^0.18.5",
64
64
  "zod": "^3.23.8",
65
65
  "@hisptz/dhis2-analytics": "2.0.46",
66
- "@hisptz/dhis2-utils": "2.0.8",
67
- "@hisptz/dhis2-ui": "2.0.27"
66
+ "@hisptz/dhis2-ui": "2.0.27",
67
+ "@hisptz/dhis2-utils": "2.0.8"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "@dhis2/app-runtime": "^3.10.2",