@hisptz/dhis2-scorecard 1.0.12 → 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.
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js +6 -2
- package/dist/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/components/ScorecardPrint/components/ScorecardPreviewArea.js +29 -26
- package/dist/components/ScorecardPrint/components/ScorecardPreviewArea.js.map +1 -1
- package/dist/components/ScorecardPrint/print.css +1 -9
- package/dist/components/ScorecardPrint/print.css.map +1 -1
- package/dist/components/ScorecardTable/ScorecardTable.module.css +3 -0
- package/dist/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js +6 -2
- package/dist/esm/components/ScorecardPrint/components/ScorecardDownloadButton.js.map +1 -1
- package/dist/esm/components/ScorecardPrint/components/ScorecardPreviewArea.js +30 -27
- package/dist/esm/components/ScorecardPrint/components/ScorecardPreviewArea.js.map +1 -1
- package/dist/esm/components/ScorecardPrint/print.css +1 -9
- package/dist/esm/components/ScorecardPrint/print.css.map +1 -1
- package/dist/esm/components/ScorecardTable/ScorecardTable.module.css +3 -0
- package/dist/esm/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
- package/dist/types/components/ScorecardPrint/components/ScorecardDownloadButton.d.ts.map +1 -1
- package/dist/types/components/ScorecardPrint/components/ScorecardPreviewArea.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -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(
|
|
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
|
-
|
|
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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
|
|
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,37 +28,40 @@ const ScorecardPreviewArea = react.memo(function ScorecardPreviewArea2({
|
|
|
28
28
|
printMode: true
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
32
32
|
StateProvider.ScorecardStateProvider,
|
|
33
33
|
{
|
|
34
34
|
withRecoilRoot: true,
|
|
35
35
|
initialState: updatedState,
|
|
36
36
|
config,
|
|
37
|
-
children:
|
|
38
|
-
"
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
37
|
+
children: [
|
|
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",
|
|
41
|
+
{
|
|
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
|
+
]
|
|
62
|
+
}
|
|
63
|
+
) })
|
|
64
|
+
]
|
|
62
65
|
}
|
|
63
66
|
);
|
|
64
67
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\
|
|
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":[]}
|
|
@@ -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":[]}
|
|
@@ -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(
|
|
99
|
+
return dataEngine.addOnCompleteListener((completed2) => {
|
|
100
|
+
startTransition(() => {
|
|
101
|
+
setCompleted(completed2);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
100
104
|
}, [dataEngine]);
|
|
101
105
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
102
|
-
|
|
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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
|
|
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 {
|
|
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,37 +26,40 @@ const ScorecardPreviewArea = memo(function ScorecardPreviewArea2({
|
|
|
26
26
|
printMode: true
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ jsxs(
|
|
30
30
|
ScorecardStateProvider,
|
|
31
31
|
{
|
|
32
32
|
withRecoilRoot: true,
|
|
33
33
|
initialState: updatedState,
|
|
34
34
|
config,
|
|
35
|
-
children:
|
|
36
|
-
"
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
{
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
35
|
+
children: [
|
|
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",
|
|
39
|
+
{
|
|
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
|
+
]
|
|
60
|
+
}
|
|
61
|
+
) })
|
|
62
|
+
]
|
|
60
63
|
}
|
|
61
64
|
);
|
|
62
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/ScorecardPrint/components/ScorecardPreviewArea.tsx"],"names":["ScorecardPreviewArea"],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ScorecardPrint/print.css"],"sourcesContent":["\
|
|
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":[]}
|
|
@@ -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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScorecardDownloadButton.d.ts","sourceRoot":"","sources":["../../../../../src/components/ScorecardPrint/components/ScorecardDownloadButton.tsx"],"names":[],"mappings":"AAsBA,OAAO,cAAc,CAAC;AAmFtB,wBAAgB,uBAAuB,
|
|
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;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hisptz/dhis2-scorecard",
|
|
3
|
-
"version": "1.0.
|
|
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/
|
|
50
|
-
"@repo/
|
|
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",
|
|
@@ -62,9 +62,9 @@
|
|
|
62
62
|
"recoil": "^0.7.7",
|
|
63
63
|
"xlsx": "^0.18.5",
|
|
64
64
|
"zod": "^3.23.8",
|
|
65
|
+
"@hisptz/dhis2-analytics": "2.0.46",
|
|
65
66
|
"@hisptz/dhis2-ui": "2.0.27",
|
|
66
|
-
"@hisptz/dhis2-utils": "2.0.8"
|
|
67
|
-
"@hisptz/dhis2-analytics": "2.0.46"
|
|
67
|
+
"@hisptz/dhis2-utils": "2.0.8"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
70
|
"@dhis2/app-runtime": "^3.10.2",
|