@hisptz/dhis2-analytics 2.0.38 → 2.0.39

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 (76) hide show
  1. package/dist/components/Scorecard/Scorecard.js +3 -1
  2. package/dist/components/Scorecard/Scorecard.js.map +1 -1
  3. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js +38 -37
  4. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  5. package/dist/components/Scorecard/components/ScorecardTable/components/AverageCell.js +1 -1
  6. package/dist/components/Scorecard/components/ScorecardTable/components/AverageCell.js.map +1 -1
  7. package/dist/components/Scorecard/components/ScorecardTable/components/DraggableCell.js +29 -30
  8. package/dist/components/Scorecard/components/ScorecardTable/components/DraggableCell.js.map +1 -1
  9. package/dist/components/Scorecard/components/ScorecardTable/components/DroppableCell.js +28 -16
  10. package/dist/components/Scorecard/components/ScorecardTable/components/DroppableCell.js.map +1 -1
  11. package/dist/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.js +1 -1
  12. package/dist/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.js.map +1 -1
  13. package/dist/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js +1 -0
  14. package/dist/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js.map +1 -1
  15. package/dist/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.js +51 -0
  16. package/dist/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.js.map +1 -0
  17. package/dist/components/Scorecard/components/ScorecardTable/components/TableBody.js +2 -1
  18. package/dist/components/Scorecard/components/ScorecardTable/components/TableBody.js.map +1 -1
  19. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +1 -0
  20. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  21. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js +1 -0
  22. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js.map +1 -1
  23. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/NumberCell.js +1 -0
  24. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/NumberCell.js.map +1 -1
  25. package/dist/components/Scorecard/components/TableStateProvider.js +20 -1
  26. package/dist/components/Scorecard/components/TableStateProvider.js.map +1 -1
  27. package/dist/components/Scorecard/hooks/table.js +11 -2
  28. package/dist/components/Scorecard/hooks/table.js.map +1 -1
  29. package/dist/components/Visualization/components/VisualizationDimensionSelector/index.js +1 -1
  30. package/dist/components/Visualization/components/VisualizationDimensionSelector/index.js.map +1 -1
  31. package/dist/esm/components/Scorecard/Scorecard.js +3 -1
  32. package/dist/esm/components/Scorecard/Scorecard.js.map +1 -1
  33. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js +39 -38
  34. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  35. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageCell.js +1 -1
  36. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageCell.js.map +1 -1
  37. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DraggableCell.js +29 -30
  38. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DraggableCell.js.map +1 -1
  39. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DroppableCell.js +28 -16
  40. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DroppableCell.js.map +1 -1
  41. package/dist/esm/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.js +1 -1
  42. package/dist/esm/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.js.map +1 -1
  43. package/dist/esm/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js +1 -0
  44. package/dist/esm/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js.map +1 -1
  45. package/dist/esm/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.js +49 -0
  46. package/dist/esm/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.js.map +1 -0
  47. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableBody.js +3 -2
  48. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableBody.js.map +1 -1
  49. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +1 -0
  50. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  51. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js +1 -0
  52. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js.map +1 -1
  53. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/NumberCell.js +1 -0
  54. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/NumberCell.js.map +1 -1
  55. package/dist/esm/components/Scorecard/components/TableStateProvider.js +18 -2
  56. package/dist/esm/components/Scorecard/components/TableStateProvider.js.map +1 -1
  57. package/dist/esm/components/Scorecard/hooks/table.js +12 -3
  58. package/dist/esm/components/Scorecard/hooks/table.js.map +1 -1
  59. package/dist/esm/components/Visualization/components/VisualizationDimensionSelector/index.js +1 -1
  60. package/dist/esm/components/Visualization/components/VisualizationDimensionSelector/index.js.map +1 -1
  61. package/dist/types/components/Scorecard/Scorecard.d.ts.map +1 -1
  62. package/dist/types/components/Scorecard/components/ScorecardTable/ScorecardTable.d.ts.map +1 -1
  63. package/dist/types/components/Scorecard/components/ScorecardTable/components/DraggableCell.d.ts +2 -1
  64. package/dist/types/components/Scorecard/components/ScorecardTable/components/DraggableCell.d.ts.map +1 -1
  65. package/dist/types/components/Scorecard/components/ScorecardTable/components/DroppableCell.d.ts.map +1 -1
  66. package/dist/types/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.d.ts.map +1 -1
  67. package/dist/types/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.d.ts +2 -0
  68. package/dist/types/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.d.ts.map +1 -0
  69. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableBody.d.ts.map +1 -1
  70. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts.map +1 -1
  71. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.d.ts.map +1 -1
  72. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/NumberCell.d.ts.map +1 -1
  73. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts +5 -0
  74. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts.map +1 -1
  75. package/dist/types/components/Scorecard/hooks/table.d.ts.map +1 -1
  76. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/components/TableStateProvider.tsx"],"names":[],"mappings":"AAwBE;AAxBF,SAAS,eAA+B,kBAAkB;AAC1D;AAAA,EACC;AAAA,EAEA;AAAA,OACM;AACP,SAAS,qBAAqB;AAG9B,MAAM,oBAAoB,cAAgD;AAAA,EACzE,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AAAA,EACV,iBAAiB,gBAAgB;AAAA,EACjC,MAAM,CAAC;AACR,CAAC;AAEM,SAAS,gBAAgB;AAC/B,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,cAAkC,OAAO;AACjD;AAEO,SAAS,mBAAmB,EAAE,SAAS,GAA4B;AACzE,QAAM,UAAU,cAAc;AAC9B,SACC,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,SACjC,UACF;AAEF","sourcesContent":["import { createContext, type ReactNode, useContext } from \"react\";\nimport {\n\tgetCoreRowModel,\n\ttype TableOptions,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useTableSetup } from \"../hooks/table\";\nimport type { ScorecardTableData } from \"../schemas/config\";\n\nconst TableStateContext = createContext<TableOptions<ScorecardTableData>>({\n\tstate: {},\n\tcolumns: [],\n\tgetCoreRowModel: getCoreRowModel(),\n\tdata: [],\n});\n\nexport function useTableState() {\n\tconst context = useContext(TableStateContext);\n\treturn useReactTable<ScorecardTableData>(context);\n}\n\nexport function TableStateProvider({ children }: { children: ReactNode }) {\n\tconst options = useTableSetup();\n\treturn (\n\t\t<TableStateContext.Provider value={options}>\n\t\t\t{children}\n\t\t</TableStateContext.Provider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/components/TableStateProvider.tsx"],"names":[],"mappings":"AA0CG;AA1CH,SAAS,eAA+B,kBAAkB;AAC1D;AAAA,EACC;AAAA,EAEA;AAAA,OACM;AACP,SAAS,qBAAqB;AAE9B,SAAS,kBAAkB;AAE3B,MAAM,oBAAoB,cAAgD;AAAA,EACzE,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AAAA,EACV,iBAAiB,gBAAgB;AAAA,EACjC,MAAM,CAAC;AACR,CAAC;AAED,MAAM,2BAA2B,cAAuB,KAAK;AAC7D,MAAM,iCAAiC,cAA0B,MAAM;AAAC,CAAC;AAElE,SAAS,gBAAgB;AAC/B,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,cAAkC,OAAO;AACjD;AAEO,SAAS,6BAA6B;AAC5C,SAAO,WAAW,8BAA8B;AACjD;AAEO,SAAS,uBAAuB;AACtC,SAAO,WAAW,wBAAwB;AAC3C;AAEO,SAAS,0BAA0B;AAAA,EACzC;AACD,GAEG;AACF,QAAM,EAAE,OAAO,SAAS,OAAO,IAAI,WAAW,KAAK;AAEnD,SACC,oBAAC,+BAA+B,UAA/B,EAAwC,OAAO,QAC/C,8BAAC,yBAAyB,UAAzB,EAAkC,OAAO,SACxC,UACF,GACD;AAEF;AAEO,SAAS,mBAAmB,EAAE,SAAS,GAA4B;AACzE,QAAM,UAAU,cAAc;AAC9B,SACC,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,SAClC,8BAAC,6BAA2B,UAAS,GACtC;AAEF","sourcesContent":["import { createContext, type ReactNode, useContext } from \"react\";\nimport {\n\tgetCoreRowModel,\n\ttype TableOptions,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useTableSetup } from \"../hooks/table\";\nimport type { ScorecardTableData } from \"../schemas/config\";\nimport { useBoolean } from \"usehooks-ts\";\n\nconst TableStateContext = createContext<TableOptions<ScorecardTableData>>({\n\tstate: {},\n\tcolumns: [],\n\tgetCoreRowModel: getCoreRowModel(),\n\tdata: [],\n});\n\nconst TableLoadingStateContext = createContext<boolean>(false);\nconst TableLoadingStateToggleContext = createContext<() => void>(() => {});\n\nexport function useTableState() {\n\tconst context = useContext(TableStateContext);\n\treturn useReactTable<ScorecardTableData>(context);\n}\n\nexport function useToggleTableLoadingState() {\n\treturn useContext(TableLoadingStateToggleContext);\n}\n\nexport function useTableLoadingState() {\n\treturn useContext(TableLoadingStateContext);\n}\n\nexport function TableLoadingStateProvider({\n\tchildren,\n}: {\n\tchildren: ReactNode;\n}) {\n\tconst { value: loading, toggle } = useBoolean(false);\n\n\treturn (\n\t\t<TableLoadingStateToggleContext.Provider value={toggle}>\n\t\t\t<TableLoadingStateContext.Provider value={loading}>\n\t\t\t\t{children}\n\t\t\t</TableLoadingStateContext.Provider>\n\t\t</TableLoadingStateToggleContext.Provider>\n\t);\n}\n\nexport function TableStateProvider({ children }: { children: ReactNode }) {\n\tconst options = useTableSetup();\n\treturn (\n\t\t<TableStateContext.Provider value={options}>\n\t\t\t<TableLoadingStateProvider>{children}</TableLoadingStateProvider>\n\t\t</TableStateContext.Provider>\n\t);\n}\n"]}
@@ -147,6 +147,10 @@ function useTableSetup() {
147
147
  average: showAverageColumn,
148
148
  count: showItemNumber
149
149
  });
150
+ const [pagination, setPagination] = react.useState({
151
+ pageSize: 50,
152
+ pageIndex: 0
153
+ });
150
154
  const [sorting, setSorting] = react.useState([]);
151
155
  const columns$1 = columns.useTableColumns();
152
156
  const data = useTableRows();
@@ -156,14 +160,19 @@ function useTableSetup() {
156
160
  state: {
157
161
  columnFilters,
158
162
  sorting,
159
- columnVisibility
163
+ columnVisibility,
164
+ pagination
160
165
  },
166
+ autoResetPageIndex: true,
167
+ rowCount: data.length,
161
168
  onColumnFiltersChange: setColumnFilters,
162
169
  onSortingChange: setSorting,
163
170
  getCoreRowModel: reactTable.getCoreRowModel(),
164
171
  getFilteredRowModel: reactTable.getFilteredRowModel(),
172
+ getPaginationRowModel: reactTable.getPaginationRowModel(),
165
173
  getSortedRowModel: reactTable.getSortedRowModel(),
166
- onColumnVisibilityChange: setColumnVisibility
174
+ onColumnVisibilityChange: setColumnVisibility,
175
+ onPaginationChange: setPagination
167
176
  };
168
177
  }
169
178
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/hooks/table.ts"],"names":["emptyRows","rows"],"mappings":"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","sourcesContent":["import {\n\ttype ColumnFiltersState,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetSortedRowModel,\n\ttype SortingState,\n\ttype TableOptions,\n\ttype VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useTableColumns } from \"./columns\";\nimport type {\n\tScorecardTableData,\n\tScorecardViewOptions,\n} from \"../schemas/config\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n\ttype ScorecardMeta,\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardStateSelector,\n} from \"../components\";\nimport { type AnalyticsData, getRowsFromMeta } from \"../utils/data\";\nimport { isEmpty, meanBy } from \"lodash\";\nimport type { ScorecardDataEngine } from \"../utils/dataEngine\";\nimport { getAverageValue } from \"../utils/columns\";\nimport { useScorecardData } from \"../components/DataProvider\";\n\nfunction getRowValues({\n\tdata,\n\tshowDataInRows,\n\trow,\n}: {\n\trow: ScorecardTableData;\n\tdata: AnalyticsData[];\n\tshowDataInRows: boolean;\n}): AnalyticsData[] {\n\treturn data.filter((datum) => {\n\t\tif (showDataInRows) {\n\t\t\treturn row\n\t\t\t\t.dataHolder!.dataSources.map(({ id }) => id)\n\t\t\t\t.includes(datum.dx!);\n\t\t}\n\t\treturn datum.ou === row.orgUnit!.uid;\n\t});\n}\n\nfunction filterRows({\n\trows,\n\temptyRows,\n\tdataEngine,\n\tshowDataInRows,\n\taverageDisplayType,\n\tmeta,\n}: {\n\temptyRows: ScorecardViewOptions[\"emptyRows\"];\n\tshowDataInRows: boolean;\n\taverageDisplayType: ScorecardViewOptions[\"averageDisplayType\"];\n\tdataEngine: ScorecardDataEngine;\n\trows: ScorecardTableData[];\n\tmeta: ScorecardMeta;\n}) {\n\tif (!dataEngine.isDone) {\n\t\treturn [];\n\t}\n\tconst hiddenRows: number[] = [];\n\tconst rowsWithDataValues = rows.map((row, index) => {\n\t\tconst values = getRowValues({\n\t\t\trow,\n\t\t\tdata: dataEngine.data,\n\t\t\tshowDataInRows,\n\t\t});\n\t\tconst average = meanBy(values, ({ value }) => parseFloat(value!));\n\t\treturn {\n\t\t\trow,\n\t\t\tindex,\n\t\t\tvalues,\n\t\t\taverage,\n\t\t};\n\t});\n\tif (!emptyRows) {\n\t\t//Filter out all e\n\t\tconst emptyRows = rowsWithDataValues\n\t\t\t.filter(({ values }) => isEmpty(values))\n\t\t\t.map(({ index }) => index);\n\t\thiddenRows.push(...emptyRows);\n\t}\n\n\tif (averageDisplayType !== \"ALL\") {\n\t\tconst average = getAverageValue({\n\t\t\tdataValues: dataEngine.data,\n\t\t\tmeta,\n\t\t});\n\t\tif (averageDisplayType === \"BELOW_AVERAGE\") {\n\t\t\tconst aboveAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage > average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...aboveAverageRows);\n\t\t} else {\n\t\t\tconst belowAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage < average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...belowAverageRows);\n\t\t}\n\t}\n\n\treturn hiddenRows;\n}\n\nfunction useTableRows(): ScorecardTableData[] {\n\tconst meta = useScorecardMeta();\n\tconst { data: dataEngine } = useScorecardData();\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\tconst showHierarchy = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showHierarchy\",\n\t]);\n\tconst emptyRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"emptyRows\",\n\t]);\n\tconst averageDisplayType = useScorecardStateSelector<\n\t\tScorecardViewOptions[\"averageDisplayType\"]\n\t>([\"options\", \"averageDisplayType\"]);\n\n\tconst config = useScorecardConfig();\n\n\tconst [hiddenRowIndexes, setHiddenRowIndexes] = useState<number[]>([]);\n\n\tif (meta == null) return [];\n\n\tconst rows = useMemo(() => {\n\t\tconst rows = getRowsFromMeta({\n\t\t\tmeta,\n\t\t\tshowDataInRows,\n\t\t\tshowHierarchy,\n\t\t\tconfig,\n\t\t});\n\n\t\tif (isEmpty(hiddenRowIndexes)) {\n\t\t\treturn rows;\n\t\t}\n\n\t\treturn rows.filter((_, index) => !hiddenRowIndexes.includes(index));\n\t}, [meta, showDataInRows, showHierarchy, config, hiddenRowIndexes]);\n\n\tuseEffect(() => {\n\t\tconst listener = (data: AnalyticsData[] | \"done\") => {\n\t\t\tif (data === \"done\") {\n\t\t\t\tsetHiddenRowIndexes(\n\t\t\t\t\tfilterRows({\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t\tshowDataInRows,\n\t\t\t\t\t\trows,\n\t\t\t\t\t\taverageDisplayType,\n\t\t\t\t\t\temptyRows,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tif (dataEngine.isDone) {\n\t\t\tsetHiddenRowIndexes(\n\t\t\t\tfilterRows({\n\t\t\t\t\tmeta,\n\t\t\t\t\tdataEngine,\n\t\t\t\t\tshowDataInRows,\n\t\t\t\t\trows,\n\t\t\t\t\taverageDisplayType,\n\t\t\t\t\temptyRows,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tdataEngine.addListener(listener);\n\t\t}\n\t\treturn () => {\n\t\t\tdataEngine.removeListener(listener);\n\t\t};\n\t}, [averageDisplayType, emptyRows, showDataInRows]);\n\n\treturn rows;\n}\n\nexport function useTableSetup(): TableOptions<ScorecardTableData> {\n\tconst showAverageColumn = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"averageColumn\",\n\t]);\n\tconst showItemNumber = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"itemNumber\",\n\t]);\n\tconst [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>({\n\t\taverage: showAverageColumn,\n\t\tcount: showItemNumber,\n\t});\n\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst columns = useTableColumns();\n\tconst data = useTableRows();\n\n\treturn {\n\t\tcolumns,\n\t\tdata,\n\t\tstate: {\n\t\t\tcolumnFilters,\n\t\t\tsorting,\n\t\t\tcolumnVisibility,\n\t\t},\n\t\tonColumnFiltersChange: setColumnFilters,\n\t\tonSortingChange: setSorting,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tonColumnVisibilityChange: setColumnVisibility,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/hooks/table.ts"],"names":["emptyRows","rows"],"mappings":"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","sourcesContent":["import {\n\ttype ColumnFiltersState,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetPaginationRowModel,\n\tgetSortedRowModel,\n\ttype PaginationState,\n\ttype SortingState,\n\ttype TableOptions,\n\ttype VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useTableColumns } from \"./columns\";\nimport type {\n\tScorecardTableData,\n\tScorecardViewOptions,\n} from \"../schemas/config\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n\ttype ScorecardMeta,\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardStateSelector,\n} from \"../components\";\nimport { type AnalyticsData, getRowsFromMeta } from \"../utils/data\";\nimport { isEmpty, meanBy } from \"lodash\";\nimport type { ScorecardDataEngine } from \"../utils/dataEngine\";\nimport { getAverageValue } from \"../utils/columns\";\nimport { useScorecardData } from \"../components/DataProvider\";\n\nfunction getRowValues({\n\tdata,\n\tshowDataInRows,\n\trow,\n}: {\n\trow: ScorecardTableData;\n\tdata: AnalyticsData[];\n\tshowDataInRows: boolean;\n}): AnalyticsData[] {\n\treturn data.filter((datum) => {\n\t\tif (showDataInRows) {\n\t\t\treturn row\n\t\t\t\t.dataHolder!.dataSources.map(({ id }) => id)\n\t\t\t\t.includes(datum.dx!);\n\t\t}\n\t\treturn datum.ou === row.orgUnit!.uid;\n\t});\n}\n\nfunction filterRows({\n\trows,\n\temptyRows,\n\tdataEngine,\n\tshowDataInRows,\n\taverageDisplayType,\n\tmeta,\n}: {\n\temptyRows: ScorecardViewOptions[\"emptyRows\"];\n\tshowDataInRows: boolean;\n\taverageDisplayType: ScorecardViewOptions[\"averageDisplayType\"];\n\tdataEngine: ScorecardDataEngine;\n\trows: ScorecardTableData[];\n\tmeta: ScorecardMeta;\n}) {\n\tif (!dataEngine.isDone) {\n\t\treturn [];\n\t}\n\tconst hiddenRows: number[] = [];\n\tconst rowsWithDataValues = rows.map((row, index) => {\n\t\tconst values = getRowValues({\n\t\t\trow,\n\t\t\tdata: dataEngine.data,\n\t\t\tshowDataInRows,\n\t\t});\n\t\tconst average = meanBy(values, ({ value }) => parseFloat(value!));\n\t\treturn {\n\t\t\trow,\n\t\t\tindex,\n\t\t\tvalues,\n\t\t\taverage,\n\t\t};\n\t});\n\tif (!emptyRows) {\n\t\t//Filter out all e\n\t\tconst emptyRows = rowsWithDataValues\n\t\t\t.filter(({ values }) => isEmpty(values))\n\t\t\t.map(({ index }) => index);\n\t\thiddenRows.push(...emptyRows);\n\t}\n\n\tif (averageDisplayType !== \"ALL\") {\n\t\tconst average = getAverageValue({\n\t\t\tdataValues: dataEngine.data,\n\t\t\tmeta,\n\t\t});\n\t\tif (averageDisplayType === \"BELOW_AVERAGE\") {\n\t\t\tconst aboveAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage > average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...aboveAverageRows);\n\t\t} else {\n\t\t\tconst belowAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage < average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...belowAverageRows);\n\t\t}\n\t}\n\n\treturn hiddenRows;\n}\n\nfunction useTableRows(): ScorecardTableData[] {\n\tconst meta = useScorecardMeta();\n\tconst { data: dataEngine } = useScorecardData();\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\tconst showHierarchy = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showHierarchy\",\n\t]);\n\tconst emptyRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"emptyRows\",\n\t]);\n\tconst averageDisplayType = useScorecardStateSelector<\n\t\tScorecardViewOptions[\"averageDisplayType\"]\n\t>([\"options\", \"averageDisplayType\"]);\n\n\tconst config = useScorecardConfig();\n\n\tconst [hiddenRowIndexes, setHiddenRowIndexes] = useState<number[]>([]);\n\n\tif (meta == null) return [];\n\n\tconst rows = useMemo(() => {\n\t\tconst rows = getRowsFromMeta({\n\t\t\tmeta,\n\t\t\tshowDataInRows,\n\t\t\tshowHierarchy,\n\t\t\tconfig,\n\t\t});\n\n\t\tif (isEmpty(hiddenRowIndexes)) {\n\t\t\treturn rows;\n\t\t}\n\n\t\treturn rows.filter((_, index) => !hiddenRowIndexes.includes(index));\n\t}, [meta, showDataInRows, showHierarchy, config, hiddenRowIndexes]);\n\n\tuseEffect(() => {\n\t\tconst listener = (data: AnalyticsData[] | \"done\") => {\n\t\t\tif (data === \"done\") {\n\t\t\t\tsetHiddenRowIndexes(\n\t\t\t\t\tfilterRows({\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t\tshowDataInRows,\n\t\t\t\t\t\trows,\n\t\t\t\t\t\taverageDisplayType,\n\t\t\t\t\t\temptyRows,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tif (dataEngine.isDone) {\n\t\t\tsetHiddenRowIndexes(\n\t\t\t\tfilterRows({\n\t\t\t\t\tmeta,\n\t\t\t\t\tdataEngine,\n\t\t\t\t\tshowDataInRows,\n\t\t\t\t\trows,\n\t\t\t\t\taverageDisplayType,\n\t\t\t\t\temptyRows,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tdataEngine.addListener(listener);\n\t\t}\n\t\treturn () => {\n\t\t\tdataEngine.removeListener(listener);\n\t\t};\n\t}, [averageDisplayType, emptyRows, showDataInRows]);\n\n\treturn rows;\n}\n\nexport function useTableSetup(): TableOptions<ScorecardTableData> {\n\tconst showAverageColumn = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"averageColumn\",\n\t]);\n\tconst showItemNumber = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"itemNumber\",\n\t]);\n\tconst [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>({\n\t\taverage: showAverageColumn,\n\t\tcount: showItemNumber,\n\t});\n\tconst [pagination, setPagination] = useState<PaginationState>({\n\t\tpageSize: 50,\n\t\tpageIndex: 0,\n\t});\n\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst columns = useTableColumns();\n\tconst data = useTableRows();\n\n\treturn {\n\t\tcolumns,\n\t\tdata,\n\t\tstate: {\n\t\t\tcolumnFilters,\n\t\t\tsorting,\n\t\t\tcolumnVisibility,\n\t\t\tpagination,\n\t\t},\n\t\tautoResetPageIndex: true,\n\t\trowCount: data.length,\n\t\tonColumnFiltersChange: setColumnFilters,\n\t\tonSortingChange: setSorting,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tonColumnVisibilityChange: setColumnVisibility,\n\t\tonPaginationChange: setPagination,\n\t};\n}\n"]}
@@ -5,9 +5,9 @@ var react = require('react');
5
5
  var ui = require('@dhis2/ui');
6
6
  var i18n = require('@dhis2/d2-i18n');
7
7
  var index_js = require('../DimensionsProvider/index.js');
8
+ var dhis2Ui = require('@hisptz/dhis2-ui');
8
9
  var index_js$1 = require('../VisualizationSelector/index.js');
9
10
  var map_js = require('../../../Map/utils/map.js');
10
- var dhis2Ui = require('@hisptz/dhis2-ui');
11
11
 
12
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
13
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Visualization/components/VisualizationDimensionSelector/index.tsx"],"names":[],"mappings":"AA+CM,mBACC,KADD;AA/CN,SAAgB,aAAa,SAAS,gBAAgB;AACtD,SAAS,QAAQ,aAAa,gBAAgB,eAAe;AAC7D,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,SAAS,kCAAkC;AAC3C,SAAS,4BAA4B;AACrC,SAAS,sBAAsB,2BAA2B;AAEnD,SAAS,+BAA+B;AAAA,EAC9C;AAAA,EACA;AACD,GAGG;AACF,QAAM,CAAC,YAAY,aAAa,IAAI,cAAc;AAClD,QAAM,UAAU,QAAQ,MAAM,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5D,QAAM,mBAAmB;AAAA,IACxB,MAAM,2BAA2B,WAAW,MAAM,CAAC,CAAC;AAAA,IACpD,CAAC,WAAW,EAAE;AAAA,EACf;AACA,QAAM,CAAC,YAAY,aAAa,IAAI,SAAkC;AAEtE,QAAM,iBAAiB;AAAA,IACtB,CAAC,SAAsB,CAAC,SAAiC;AACxD,oBAAc,MAAS;AACvB,UAAI,SAAS,MAAM;AAClB,sBAAc;AAAA,UACb,WAAW;AAAA,UACX,OAAO,qBAAqB,IAAI;AAAA,QACjC,CAAC;AACD;AAAA,MACD;AACA,UAAI,SAAS,MAAM;AAClB,sBAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC9C;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAC,aAAa;AAAA,EACf;AAEA,SACC,gCACC,+BAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACpC;AAAA,0BACA,oBAAC,WAAQ,SAAS,KAAK,EAAE,QAAQ,GAChC,2CACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,UAAS;AAAA,UACT,sBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,SAAS,MAAM,cAAc,MAAS;AAAA,UACtC,MAAM,eAAe;AAAA,UACrB,UAAU,eAAe,IAAI;AAAA;AAAA,MAC9B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,SAAS,MAAM,cAAc,IAAI;AAAA,UACjC,MAAM,oBAAC,eAAY;AAAA;AAAA,MACpB;AAAA,OACD,GACD;AAAA,IAEA,uBACA,oBAAC,WAAQ,SAAS,KAAK,EAAE,UAAU,GAClC,2CACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,iBAAe;AAAA,UACf,YAAU;AAAA,UACV,OAAO,KAAK,EAAE,oBAAoB;AAAA,UAClC,OAAO;AAAA,UACP,SAAS,MAAM,cAAc,MAAS;AAAA,UACtC,MAAM,eAAe;AAAA,UACrB,UAAU,eAAe,IAAI;AAAA;AAAA,MAC9B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,SAAS,MAAM,cAAc,IAAI;AAAA,UACjC,MAAM,oBAAC,kBAAe;AAAA;AAAA,MACvB;AAAA,OACD,GACD;AAAA,KAEF,GACD;AAEF","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { Button, IconClock24, IconLocation24, Tooltip } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { useDimensions } from \"../DimensionsProvider/index.js\";\nimport { OrgUnitSelection } from \"@hisptz/dhis2-utils\";\nimport { getOrgUnitSelectionFromIds } from \"../VisualizationSelector/index.js\";\nimport { getOrgUnitsSelection } from \"../../../Map/utils/map.js\";\nimport { OrgUnitSelectorModal, PeriodSelectorModal } from \"@hisptz/dhis2-ui\";\n\nexport function VisualizationDimensionSelector({\n\tshowPeriodSelector,\n\tshowOrgUnitSelector,\n}: {\n\tshowPeriodSelector?: boolean;\n\tshowOrgUnitSelector?: boolean;\n}) {\n\tconst [dimensions, setDimensions] = useDimensions();\n\tconst periods = useMemo(() => dimensions.pe, [dimensions.pe]);\n\tconst orgUnitSelection = useMemo(\n\t\t() => getOrgUnitSelectionFromIds(dimensions.ou ?? []),\n\t\t[dimensions.ou],\n\t);\n\tconst [openFilter, setOpenFilter] = useState<\"pe\" | \"ou\" | undefined>();\n\n\tconst onFilterUpdate = useCallback(\n\t\t(type: \"ou\" | \"pe\") => (data: OrgUnitSelection | any) => {\n\t\t\tsetOpenFilter(undefined);\n\t\t\tif (type === \"ou\") {\n\t\t\t\tsetDimensions({\n\t\t\t\t\tdimension: \"ou\",\n\t\t\t\t\tvalue: getOrgUnitsSelection(data),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (type === \"pe\") {\n\t\t\t\tsetDimensions({ dimension: \"pe\", value: data });\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t[setDimensions],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<div style={{ display: \"flex\", gap: 8 }}>\n\t\t\t\t{showPeriodSelector && (\n\t\t\t\t\t<Tooltip content={i18n.t(\"Period\")}>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PeriodSelectorModal\n\t\t\t\t\t\t\t\tposition=\"middle\"\n\t\t\t\t\t\t\t\tenablePeriodSelector\n\t\t\t\t\t\t\t\tselectedPeriods={periods}\n\t\t\t\t\t\t\t\tonClose={() => setOpenFilter(undefined)}\n\t\t\t\t\t\t\t\thide={openFilter !== \"pe\"}\n\t\t\t\t\t\t\t\tonUpdate={onFilterUpdate(\"pe\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={() => setOpenFilter(\"pe\")}\n\t\t\t\t\t\t\t\ticon={<IconClock24 />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t\t{showOrgUnitSelector && (\n\t\t\t\t\t<Tooltip content={i18n.t(\"Location\")}>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<OrgUnitSelectorModal\n\t\t\t\t\t\t\t\tshowUserOptions\n\t\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\ttitle={i18n.t(\"Select location(s)\")}\n\t\t\t\t\t\t\t\tvalue={orgUnitSelection}\n\t\t\t\t\t\t\t\tonClose={() => setOpenFilter(undefined)}\n\t\t\t\t\t\t\t\thide={openFilter !== \"ou\"}\n\t\t\t\t\t\t\t\tonUpdate={onFilterUpdate(\"ou\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={() => setOpenFilter(\"ou\")}\n\t\t\t\t\t\t\t\ticon={<IconLocation24 />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/Visualization/components/VisualizationDimensionSelector/index.tsx"],"names":[],"mappings":"AA+CM,mBACC,KADD;AA/CN,SAAgB,aAAa,SAAS,gBAAgB;AACtD,SAAS,QAAQ,aAAa,gBAAgB,eAAe;AAC7D,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB,2BAA2B;AAE1D,SAAS,kCAAkC;AAC3C,SAAS,4BAA4B;AAE9B,SAAS,+BAA+B;AAAA,EAC9C;AAAA,EACA;AACD,GAGG;AACF,QAAM,CAAC,YAAY,aAAa,IAAI,cAAc;AAClD,QAAM,UAAU,QAAQ,MAAM,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5D,QAAM,mBAAmB;AAAA,IACxB,MAAM,2BAA2B,WAAW,MAAM,CAAC,CAAC;AAAA,IACpD,CAAC,WAAW,EAAE;AAAA,EACf;AACA,QAAM,CAAC,YAAY,aAAa,IAAI,SAAkC;AAEtE,QAAM,iBAAiB;AAAA,IACtB,CAAC,SAAsB,CAAC,SAAiC;AACxD,oBAAc,MAAS;AACvB,UAAI,SAAS,MAAM;AAClB,sBAAc;AAAA,UACb,WAAW;AAAA,UACX,OAAO,qBAAqB,IAAI;AAAA,QACjC,CAAC;AACD;AAAA,MACD;AACA,UAAI,SAAS,MAAM;AAClB,sBAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC9C;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAC,aAAa;AAAA,EACf;AAEA,SACC,gCACC,+BAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACpC;AAAA,0BACA,oBAAC,WAAQ,SAAS,KAAK,EAAE,QAAQ,GAChC,2CACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,UAAS;AAAA,UACT,sBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,SAAS,MAAM,cAAc,MAAS;AAAA,UACtC,MAAM,eAAe;AAAA,UACrB,UAAU,eAAe,IAAI;AAAA;AAAA,MAC9B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,SAAS,MAAM,cAAc,IAAI;AAAA,UACjC,MAAM,oBAAC,eAAY;AAAA;AAAA,MACpB;AAAA,OACD,GACD;AAAA,IAEA,uBACA,oBAAC,WAAQ,SAAS,KAAK,EAAE,UAAU,GAClC,2CACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,iBAAe;AAAA,UACf,YAAU;AAAA,UACV,OAAO,KAAK,EAAE,oBAAoB;AAAA,UAClC,OAAO;AAAA,UACP,SAAS,MAAM,cAAc,MAAS;AAAA,UACtC,MAAM,eAAe;AAAA,UACrB,UAAU,eAAe,IAAI;AAAA;AAAA,MAC9B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,SAAS,MAAM,cAAc,IAAI;AAAA,UACjC,MAAM,oBAAC,kBAAe;AAAA;AAAA,MACvB;AAAA,OACD,GACD;AAAA,KAEF,GACD;AAEF","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { Button, IconClock24, IconLocation24, Tooltip } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { useDimensions } from \"../DimensionsProvider/index.js\";\nimport { OrgUnitSelectorModal, PeriodSelectorModal } from \"@hisptz/dhis2-ui\";\nimport { OrgUnitSelection } from \"@hisptz/dhis2-utils\";\nimport { getOrgUnitSelectionFromIds } from \"../VisualizationSelector/index.js\";\nimport { getOrgUnitsSelection } from \"../../../Map/utils/map.js\";\n\nexport function VisualizationDimensionSelector({\n\tshowPeriodSelector,\n\tshowOrgUnitSelector,\n}: {\n\tshowPeriodSelector?: boolean;\n\tshowOrgUnitSelector?: boolean;\n}) {\n\tconst [dimensions, setDimensions] = useDimensions();\n\tconst periods = useMemo(() => dimensions.pe, [dimensions.pe]);\n\tconst orgUnitSelection = useMemo(\n\t\t() => getOrgUnitSelectionFromIds(dimensions.ou ?? []),\n\t\t[dimensions.ou],\n\t);\n\tconst [openFilter, setOpenFilter] = useState<\"pe\" | \"ou\" | undefined>();\n\n\tconst onFilterUpdate = useCallback(\n\t\t(type: \"ou\" | \"pe\") => (data: OrgUnitSelection | any) => {\n\t\t\tsetOpenFilter(undefined);\n\t\t\tif (type === \"ou\") {\n\t\t\t\tsetDimensions({\n\t\t\t\t\tdimension: \"ou\",\n\t\t\t\t\tvalue: getOrgUnitsSelection(data),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (type === \"pe\") {\n\t\t\t\tsetDimensions({ dimension: \"pe\", value: data });\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t[setDimensions],\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<div style={{ display: \"flex\", gap: 8 }}>\n\t\t\t\t{showPeriodSelector && (\n\t\t\t\t\t<Tooltip content={i18n.t(\"Period\")}>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<PeriodSelectorModal\n\t\t\t\t\t\t\t\tposition=\"middle\"\n\t\t\t\t\t\t\t\tenablePeriodSelector\n\t\t\t\t\t\t\t\tselectedPeriods={periods}\n\t\t\t\t\t\t\t\tonClose={() => setOpenFilter(undefined)}\n\t\t\t\t\t\t\t\thide={openFilter !== \"pe\"}\n\t\t\t\t\t\t\t\tonUpdate={onFilterUpdate(\"pe\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={() => setOpenFilter(\"pe\")}\n\t\t\t\t\t\t\t\ticon={<IconClock24 />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t\t{showOrgUnitSelector && (\n\t\t\t\t\t<Tooltip content={i18n.t(\"Location\")}>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<OrgUnitSelectorModal\n\t\t\t\t\t\t\t\tshowUserOptions\n\t\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\ttitle={i18n.t(\"Select location(s)\")}\n\t\t\t\t\t\t\t\tvalue={orgUnitSelection}\n\t\t\t\t\t\t\t\tonClose={() => setOpenFilter(undefined)}\n\t\t\t\t\t\t\t\thide={openFilter !== \"ou\"}\n\t\t\t\t\t\t\t\tonUpdate={onFilterUpdate(\"ou\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={() => setOpenFilter(\"ou\")}\n\t\t\t\t\t\t\t\ticon={<IconLocation24 />}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
@@ -2,9 +2,11 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { TableStateProvider } from './components/TableStateProvider';
3
3
  import { ScorecardTable } from './components/ScorecardTable';
4
4
  import { ScorecardDataProvider } from './components/DataProvider';
5
+ import { HTML5Backend } from 'react-dnd-html5-backend';
6
+ import { DndProvider } from 'react-dnd';
5
7
 
6
8
  function Scorecard({ tableProps }) {
7
- return /* @__PURE__ */ jsx(ScorecardDataProvider, { children: /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(ScorecardTable, { ...tableProps ?? {} }) }) });
9
+ return /* @__PURE__ */ jsx(ScorecardDataProvider, { children: /* @__PURE__ */ jsx(TableStateProvider, { children: /* @__PURE__ */ jsx(DndProvider, { backend: HTML5Backend, children: /* @__PURE__ */ jsx(ScorecardTable, { ...tableProps ?? {} }) }) }) });
8
10
  }
9
11
 
10
12
  export { Scorecard };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Scorecard/Scorecard.tsx"],"names":[],"mappings":"AAgBI;AAfJ,SAAS,0BAA0B;AACnC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,6BAA6B;AAM/B,SAAS,UAAU,EAAE,WAAW,GAAuC;AAC7E,SACC,oBAAC,yBACA,8BAAC,sBACA,8BAAC,kBAAgB,GAAI,cAAc,CAAC,GAAI,GACzC,GACD;AAEF","sourcesContent":["import React from \"react\";\nimport { TableStateProvider } from \"./components/TableStateProvider\";\nimport {\n\tScorecardTable,\n\ttype ScorecardTableProps,\n} from \"./components/ScorecardTable\";\nimport { ScorecardDataProvider } from \"./components/DataProvider\";\n\nexport interface ScorecardProps {\n\ttableProps?: ScorecardTableProps;\n}\n\nexport function Scorecard({ tableProps }: ScorecardProps): React.ReactElement {\n\treturn (\n\t\t<ScorecardDataProvider>\n\t\t\t<TableStateProvider>\n\t\t\t\t<ScorecardTable {...(tableProps ?? {})} />\n\t\t\t</TableStateProvider>\n\t\t</ScorecardDataProvider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/components/Scorecard/Scorecard.tsx"],"names":[],"mappings":"AAmBK;AAlBL,SAAS,0BAA0B;AACnC;AAAA,EACC;AAAA,OAEM;AACP,SAAS,6BAA6B;AACtC,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAMrB,SAAS,UAAU,EAAE,WAAW,GAAuC;AAC7E,SACC,oBAAC,yBACA,8BAAC,sBACA,8BAAC,eAAY,SAAS,cACrB,8BAAC,kBAAgB,GAAI,cAAc,CAAC,GAAI,GACzC,GACD,GACD;AAEF","sourcesContent":["import React from \"react\";\nimport { TableStateProvider } from \"./components/TableStateProvider\";\nimport {\n\tScorecardTable,\n\ttype ScorecardTableProps,\n} from \"./components/ScorecardTable\";\nimport { ScorecardDataProvider } from \"./components/DataProvider\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\n\nexport interface ScorecardProps {\n\ttableProps?: ScorecardTableProps;\n}\n\nexport function Scorecard({ tableProps }: ScorecardProps): React.ReactElement {\n\treturn (\n\t\t<ScorecardDataProvider>\n\t\t\t<TableStateProvider>\n\t\t\t\t<DndProvider backend={HTML5Backend}>\n\t\t\t\t\t<ScorecardTable {...(tableProps ?? {})} />\n\t\t\t\t</DndProvider>\n\t\t\t</TableStateProvider>\n\t\t</ScorecardDataProvider>\n\t);\n}\n"]}
@@ -1,16 +1,36 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { CircularLoader, DataTable } from '@dhis2/ui';
3
3
  import { TableHeader } from './components/TableHeader';
4
4
  import { TableBody } from './components/TableBody';
5
5
  import { TableFoot } from './components/TableFoot';
6
- import { DndContext } from '@dnd-kit/core';
6
+ import { memo, useRef, useTransition, useEffect } from 'react';
7
+ import { PaginatedToolbar } from './components/PaginatedToolbar';
8
+ import { useDragDropManager } from 'react-dnd';
7
9
  import { useScorecardSetState } from '../StateProvider';
8
- import { memo, useRef, useTransition } from 'react';
9
10
 
10
11
  const ScorecardTable = memo(function TableComponent(props) {
11
12
  const tableRef = useRef(null);
13
+ const manager = useDragDropManager();
12
14
  const [isPending, startTransition] = useTransition();
13
15
  const updateState = useScorecardSetState();
16
+ useEffect(() => {
17
+ return manager.getMonitor().subscribeToStateChange(() => {
18
+ const dropResult = manager.getMonitor().getDropResult();
19
+ if (dropResult) {
20
+ startTransition(() => {
21
+ updateState((prevState) => {
22
+ return {
23
+ ...prevState,
24
+ options: {
25
+ ...prevState.options,
26
+ showDataInRows: !prevState.options.showDataInRows
27
+ }
28
+ };
29
+ });
30
+ });
31
+ }
32
+ });
33
+ }, [manager]);
14
34
  if (isPending) {
15
35
  return /* @__PURE__ */ jsx(
16
36
  "div",
@@ -26,41 +46,22 @@ const ScorecardTable = memo(function TableComponent(props) {
26
46
  }
27
47
  );
28
48
  }
29
- return /* @__PURE__ */ jsx(
30
- DndContext,
31
- {
32
- onDragEnd: (event) => {
33
- startTransition(() => {
34
- if (updateState) {
35
- if (!event.over || event.over.id === event.active.id) {
36
- updateState((prevState) => {
37
- return {
38
- ...prevState,
39
- options: {
40
- ...prevState.options,
41
- showDataInRows: !prevState.options.showDataInRows
42
- }
43
- };
44
- });
45
- }
46
- }
47
- });
48
- },
49
- children: /* @__PURE__ */ jsxs(
50
- DataTable,
51
- {
52
- layout: "auto",
53
- ...props,
54
- ref: tableRef,
55
- children: [
56
- /* @__PURE__ */ jsx(TableHeader, {}),
57
- /* @__PURE__ */ jsx(TableBody, { tableRef }),
58
- /* @__PURE__ */ jsx(TableFoot, {})
59
- ]
60
- }
61
- )
62
- }
63
- );
49
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
50
+ /* @__PURE__ */ jsxs(
51
+ DataTable,
52
+ {
53
+ layout: "auto",
54
+ ...props,
55
+ ref: tableRef,
56
+ children: [
57
+ /* @__PURE__ */ jsx(TableHeader, {}),
58
+ /* @__PURE__ */ jsx(TableBody, { tableRef }),
59
+ /* @__PURE__ */ jsx(TableFoot, {})
60
+ ]
61
+ }
62
+ ),
63
+ /* @__PURE__ */ jsx(PaginatedToolbar, {})
64
+ ] });
64
65
  });
65
66
 
66
67
  export { ScorecardTable };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/Scorecard/components/ScorecardTable/ScorecardTable.tsx"],"names":[],"mappings":"AA4BI,cA0BD,YA1BC;AA5BJ,SAAS,gBAAgB,iBAAsC;AAC/D,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B;AACrC,SAAS,MAAM,QAAQ,qBAAqB;AAIrC,MAAM,iBAAiB,KAAK,SAAS,eAC3C,OACC;AACD,QAAM,WAAW,OAAyB,IAAI;AAC9C,QAAM,CAAC,WAAW,eAAe,IAAI,cAAc;AACnD,QAAM,cAAc,qBAAqB;AAEzC,MAAI,WAAW;AACd,WACC;AAAA,MAAC;AAAA;AAAA,QACA,OAAO;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,QACjB;AAAA,QAEA,8BAAC,kBAAe,OAAK,MAAC;AAAA;AAAA,IACvB;AAAA,EAEF;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW,CAAC,UAAU;AACrB,wBAAgB,MAAM;AACrB,cAAI,aAAa;AAChB,gBAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,MAAM,OAAO,IAAI;AACrD,0BAAY,CAAC,cAAc;AAC1B,uBAAO;AAAA,kBACN,GAAG;AAAA,kBACH,SAAS;AAAA,oBACR,GAAG,UAAU;AAAA,oBACb,gBACC,CAAC,UAAU,QAAQ;AAAA,kBACrB;AAAA,gBACD;AAAA,cACD,CAAC;AAAA,YACF;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACA,QAAO;AAAA,UACN,GAAG;AAAA,UAEJ,KAAK;AAAA,UAEL;AAAA,gCAAC,eAAY;AAAA,YACb,oBAAC,aAAU,UAAoB;AAAA,YAC/B,oBAAC,aAAU;AAAA;AAAA;AAAA,MACZ;AAAA;AAAA,EACD;AAEF,CAAC","sourcesContent":["import { CircularLoader, DataTable, type DataTableProps } from \"@dhis2/ui\";\nimport { TableHeader } from \"./components/TableHeader\";\nimport { TableBody } from \"./components/TableBody\";\nimport { TableFoot } from \"./components/TableFoot\";\nimport { DndContext } from \"@dnd-kit/core\";\nimport { useScorecardSetState } from \"../StateProvider\";\nimport { memo, useRef, useTransition } from \"react\";\n\nexport interface ScorecardTableProps extends Omit<DataTableProps, \"children\"> {}\n\nexport const ScorecardTable = memo(function TableComponent(\n\tprops: ScorecardTableProps,\n) {\n\tconst tableRef = useRef<HTMLTableElement>(null);\n\tconst [isPending, startTransition] = useTransition();\n\tconst updateState = useScorecardSetState();\n\n\tif (isPending) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<CircularLoader small />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<DndContext\n\t\t\tonDragEnd={(event) => {\n\t\t\t\tstartTransition(() => {\n\t\t\t\t\tif (updateState) {\n\t\t\t\t\t\tif (!event.over || event.over.id === event.active.id) {\n\t\t\t\t\t\t\tupdateState((prevState) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...prevState,\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t...prevState.options,\n\t\t\t\t\t\t\t\t\t\tshowDataInRows:\n\t\t\t\t\t\t\t\t\t\t\t!prevState.options.showDataInRows,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}}\n\t\t>\n\t\t\t<DataTable\n\t\t\t\tlayout=\"auto\"\n\t\t\t\t{...props} /*\n // @ts-ignore */\n\t\t\t\tref={tableRef}\n\t\t\t>\n\t\t\t\t<TableHeader />\n\t\t\t\t<TableBody tableRef={tableRef} />\n\t\t\t\t<TableFoot />\n\t\t\t</DataTable>\n\t\t</DndContext>\n\t);\n});\n"]}
1
+ {"version":3,"sources":["../../../../../../src/components/Scorecard/components/ScorecardTable/ScorecardTable.tsx"],"names":[],"mappings":"AAkDI,SAMF,UANE,KAOD,YAPC;AAlDJ,SAAS,gBAAgB,iBAAsC;AAC/D,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,MAAM,WAAW,QAAQ,qBAAqB;AACvD,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AAI9B,MAAM,iBAAiB,KAAK,SAAS,eAC3C,OACC;AACD,QAAM,WAAW,OAAyB,IAAI;AAC9C,QAAM,UAAU,mBAAmB;AACnC,QAAM,CAAC,WAAW,eAAe,IAAI,cAAc;AACnD,QAAM,cAAc,qBAAqB;AAEzC,YAAU,MAAM;AACf,WAAO,QAAQ,WAAW,EAAE,uBAAuB,MAAM;AACxD,YAAM,aAAa,QAAQ,WAAW,EAAE,cAAc;AACtD,UAAI,YAAY;AACf,wBAAgB,MAAM;AACrB,sBAAY,CAAC,cAAc;AAC1B,mBAAO;AAAA,cACN,GAAG;AAAA,cACH,SAAS;AAAA,gBACR,GAAG,UAAU;AAAA,gBACb,gBACC,CAAC,UAAU,QAAQ;AAAA,cACrB;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,MAAI,WAAW;AACd,WACC;AAAA,MAAC;AAAA;AAAA,QACA,OAAO;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,QACjB;AAAA,QAEA,8BAAC,kBAAe,OAAK,MAAC;AAAA;AAAA,IACvB;AAAA,EAEF;AAEA,SACC,iCACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,QAAO;AAAA,QACN,GAAG;AAAA,QAEJ,KAAK;AAAA,QAEL;AAAA,8BAAC,eAAY;AAAA,UACb,oBAAC,aAAU,UAAoB;AAAA,UAC/B,oBAAC,aAAU;AAAA;AAAA;AAAA,IACZ;AAAA,IACA,oBAAC,oBAAiB;AAAA,KACnB;AAEF,CAAC","sourcesContent":["import { CircularLoader, DataTable, type DataTableProps } from \"@dhis2/ui\";\nimport { TableHeader } from \"./components/TableHeader\";\nimport { TableBody } from \"./components/TableBody\";\nimport { TableFoot } from \"./components/TableFoot\";\nimport { memo, useEffect, useRef, useTransition } from \"react\";\nimport { PaginatedToolbar } from \"./components/PaginatedToolbar\";\nimport { useDragDropManager } from \"react-dnd\";\nimport { useScorecardSetState } from \"../StateProvider\";\n\nexport interface ScorecardTableProps extends Omit<DataTableProps, \"children\"> {}\n\nexport const ScorecardTable = memo(function TableComponent(\n\tprops: ScorecardTableProps,\n) {\n\tconst tableRef = useRef<HTMLTableElement>(null);\n\tconst manager = useDragDropManager();\n\tconst [isPending, startTransition] = useTransition();\n\tconst updateState = useScorecardSetState();\n\n\tuseEffect(() => {\n\t\treturn manager.getMonitor().subscribeToStateChange(() => {\n\t\t\tconst dropResult = manager.getMonitor().getDropResult();\n\t\t\tif (dropResult) {\n\t\t\t\tstartTransition(() => {\n\t\t\t\t\tupdateState((prevState) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...prevState,\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t...prevState.options,\n\t\t\t\t\t\t\t\tshowDataInRows:\n\t\t\t\t\t\t\t\t\t!prevState.options.showDataInRows,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}, [manager]);\n\n\tif (isPending) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<CircularLoader small />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DataTable\n\t\t\t\tlayout=\"auto\"\n\t\t\t\t{...props} /*\n // @ts-ignore */\n\t\t\t\tref={tableRef}\n\t\t\t>\n\t\t\t\t<TableHeader />\n\t\t\t\t<TableBody tableRef={tableRef} />\n\t\t\t\t<TableFoot />\n\t\t\t</DataTable>\n\t\t\t<PaginatedToolbar />\n\t\t</>\n\t);\n});\n"]}
@@ -117,7 +117,7 @@ function DataSourceAverageCell(props) {
117
117
  return /* @__PURE__ */ jsx(LinkedAverageCell, { size, dataSources });
118
118
  }
119
119
  }
120
- return /* @__PURE__ */ jsx(DataTableCell, { style: { width: size } });
120
+ return /* @__PURE__ */ jsx(DataTableCell, { bordered: true, style: { width: size } });
121
121
  }
122
122
  function OrgUnitAverageCell(props) {
123
123
  const size = props.cell.column.getSize();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/AverageCell.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { CellContext } from \"@tanstack/react-table\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableData,\n} from \"../../../schemas/config\";\nimport { DataTableCell } from \"@dhis2/ui\";\nimport { head, isEmpty } from \"lodash\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useMemo } from \"react\";\nimport {\n\tgetLegend,\n\tgetTextColorFromBackgroundColor,\n} from \"../../../utils/legends\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport {\n\tuseDataHolderAverageCellValue,\n\tuseOrgUnitAverageCellValue,\n} from \"../../../hooks/value\";\nimport { useScorecardStateSelector } from \"../../StateProvider\";\nimport { CellLoader } from \"./CellLoader\";\n\nexport function SingleAverageCell({\n\tdataSource,\n\tsize,\n}: {\n\tdataSource: ScorecardAverageCellData;\n\tsize: number;\n}) {\n\tconst config = useScorecardConfig();\n\tconst legendDefinition = useMemo(() => {\n\t\tif (!dataSource) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource,\n\t\t\tconfig: config!,\n\t\t\tvalue: dataSource.data.average,\n\t\t});\n\t}, [dataSource]);\n\n\tif (!dataSource.data.average || isNaN(dataSource.data.average)) {\n\t\treturn <DataTableCell bordered />;\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tbordered\n\t\t\tstyle={{\n\t\t\t\tbackground: legendDefinition?.color,\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tminWidth: 100,\n\t\t\t\twidth: size,\n\t\t\t\theight: 48,\n\t\t\t\tcolor: legendDefinition\n\t\t\t\t\t? getTextColorFromBackgroundColor(legendDefinition?.color)\n\t\t\t\t\t: undefined,\n\t\t\t}}\n\t\t\talign=\"center\"\n\t\t>\n\t\t\t<b>{dataSource.data.average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function LinkedAverageCell({\n\tdataSources,\n\tsize,\n}: {\n\tdataSources: Array<ScorecardAverageCellData>;\n\tsize: number;\n}) {\n\tconst [top, bottom] = dataSources ?? [];\n\tconst config = useScorecardConfig();\n\tconst topLegendDefinition = useMemo(() => {\n\t\tif (!top) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: top,\n\t\t\tconfig: config!,\n\t\t\tvalue: top.data.average,\n\t\t});\n\t}, [top]);\n\tconst bottomLegendDefinition = useMemo(() => {\n\t\tif (!bottom) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: bottom,\n\t\t\tconfig: config!,\n\t\t\tvalue: bottom.data.average,\n\t\t});\n\t}, [bottom]);\n\n\treturn (\n\t\t<LinkedCell\n\t\t\tsize={size}\n\t\t\ttop={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...top,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: top.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\tvalue: top.data.average,\n\t\t\t}}\n\t\t\tbottom={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...bottom,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: bottom.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\tvalue: bottom.data.average,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction DataSourceAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props.getValue()]);\n\tconst { cellData: dataSources, loading } =\n\t\tuseDataHolderAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\tif (!isEmpty(dataSources)) {\n\t\tif (dataSources?.length === 1) {\n\t\t\treturn (\n\t\t\t\t<SingleAverageCell\n\t\t\t\t\tsize={size}\n\t\t\t\t\tdataSource={head(dataSources)!}\n\t\t\t\t/>\n\t\t\t);\n\t\t} else {\n\t\t\treturn <LinkedAverageCell size={size} dataSources={dataSources!} />;\n\t\t}\n\t}\n\n\treturn <DataTableCell style={{ width: size }} />;\n}\n\nfunction OrgUnitAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props.getValue()]);\n\tconst { loading, average } = useOrgUnitAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tstyle={{ width: size }}\n\t\t\tbordered\n\t\t\talign=\"center\"\n\t\t\tkey={props.row.id}\n\t\t>\n\t\t\t<b>{average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function AverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\n\tif (showDataInRows) {\n\t\treturn <DataSourceAverageCell {...props} />;\n\t}\n\n\treturn <OrgUnitAverageCell {...props} />;\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/AverageCell.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { CellContext } from \"@tanstack/react-table\";\nimport type {\n\tScorecardAverageCellData,\n\tScorecardTableAverageCellConfig,\n\tScorecardTableData,\n} from \"../../../schemas/config\";\nimport { DataTableCell } from \"@dhis2/ui\";\nimport { head, isEmpty } from \"lodash\";\nimport { useScorecardConfig } from \"../../ConfigProvider\";\nimport { useMemo } from \"react\";\nimport {\n\tgetLegend,\n\tgetTextColorFromBackgroundColor,\n} from \"../../../utils/legends\";\nimport { LinkedCell } from \"./LinkedCell\";\nimport {\n\tuseDataHolderAverageCellValue,\n\tuseOrgUnitAverageCellValue,\n} from \"../../../hooks/value\";\nimport { useScorecardStateSelector } from \"../../StateProvider\";\nimport { CellLoader } from \"./CellLoader\";\n\nexport function SingleAverageCell({\n\tdataSource,\n\tsize,\n}: {\n\tdataSource: ScorecardAverageCellData;\n\tsize: number;\n}) {\n\tconst config = useScorecardConfig();\n\tconst legendDefinition = useMemo(() => {\n\t\tif (!dataSource) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource,\n\t\t\tconfig: config!,\n\t\t\tvalue: dataSource.data.average,\n\t\t});\n\t}, [dataSource]);\n\n\tif (!dataSource.data.average || isNaN(dataSource.data.average)) {\n\t\treturn <DataTableCell bordered />;\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tbordered\n\t\t\tstyle={{\n\t\t\t\tbackground: legendDefinition?.color,\n\t\t\t\ttextAlign: \"center\",\n\t\t\t\tminWidth: 100,\n\t\t\t\twidth: size,\n\t\t\t\theight: 48,\n\t\t\t\tcolor: legendDefinition\n\t\t\t\t\t? getTextColorFromBackgroundColor(legendDefinition?.color)\n\t\t\t\t\t: undefined,\n\t\t\t}}\n\t\t\talign=\"center\"\n\t\t>\n\t\t\t<b>{dataSource.data.average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function LinkedAverageCell({\n\tdataSources,\n\tsize,\n}: {\n\tdataSources: Array<ScorecardAverageCellData>;\n\tsize: number;\n}) {\n\tconst [top, bottom] = dataSources ?? [];\n\tconst config = useScorecardConfig();\n\tconst topLegendDefinition = useMemo(() => {\n\t\tif (!top) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: top,\n\t\t\tconfig: config!,\n\t\t\tvalue: top.data.average,\n\t\t});\n\t}, [top]);\n\tconst bottomLegendDefinition = useMemo(() => {\n\t\tif (!bottom) {\n\t\t\treturn;\n\t\t}\n\t\treturn getLegend({\n\t\t\tdataSource: bottom,\n\t\t\tconfig: config!,\n\t\t\tvalue: bottom.data.average,\n\t\t});\n\t}, [bottom]);\n\n\treturn (\n\t\t<LinkedCell\n\t\t\tsize={size}\n\t\t\ttop={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...top,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: top.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: topLegendDefinition,\n\t\t\t\tvalue: top.data.average,\n\t\t\t}}\n\t\t\tbottom={{\n\t\t\t\tdataSource: {\n\t\t\t\t\t...bottom,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcurrent: bottom.data.average,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlegendDefinition: bottomLegendDefinition,\n\t\t\t\tvalue: bottom.data.average,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nfunction DataSourceAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props.getValue()]);\n\tconst { cellData: dataSources, loading } =\n\t\tuseDataHolderAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\tif (!isEmpty(dataSources)) {\n\t\tif (dataSources?.length === 1) {\n\t\t\treturn (\n\t\t\t\t<SingleAverageCell\n\t\t\t\t\tsize={size}\n\t\t\t\t\tdataSource={head(dataSources)!}\n\t\t\t\t/>\n\t\t\t);\n\t\t} else {\n\t\t\treturn <LinkedAverageCell size={size} dataSources={dataSources!} />;\n\t\t}\n\t}\n\n\treturn <DataTableCell bordered style={{ width: size }} />;\n}\n\nfunction OrgUnitAverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst size = props.cell.column.getSize();\n\tconst dataConfig = useMemo(() => props.getValue(), [props.getValue()]);\n\tconst { loading, average } = useOrgUnitAverageCellValue(dataConfig);\n\n\tif (loading) {\n\t\treturn <CellLoader size={size} />;\n\t}\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tstyle={{ width: size }}\n\t\t\tbordered\n\t\t\talign=\"center\"\n\t\t\tkey={props.row.id}\n\t\t>\n\t\t\t<b>{average?.toFixed(2).toString()}</b>\n\t\t</DataTableCell>\n\t);\n}\n\nexport function AverageCell(\n\tprops: CellContext<ScorecardTableData, ScorecardTableAverageCellConfig>,\n) {\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\n\tif (showDataInRows) {\n\t\treturn <DataSourceAverageCell {...props} />;\n\t}\n\n\treturn <OrgUnitAverageCell {...props} />;\n}\n"]}
@@ -1,43 +1,42 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { colors } from '@dhis2/ui';
3
- import { useDraggable } from '@dnd-kit/core';
4
- import { CSS } from '@dnd-kit/utilities';
3
+ import { useDrag } from 'react-dnd';
5
4
 
6
5
  function DraggableCell({
7
6
  children,
8
7
  type,
9
8
  style,
9
+ id,
10
10
  ...props
11
11
  }) {
12
- const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({
13
- id: type
14
- });
15
- const transformStyle = transform ? {
16
- transform: CSS.Translate.toString(transform)
17
- } : void 0;
18
- return /* @__PURE__ */ jsx(
19
- "div",
20
- {
21
- id: type,
22
- ...props,
23
- ...attributes,
24
- ...listeners,
25
- className: "column center",
26
- style: {
27
- ...style ?? {},
28
- ...transformStyle,
29
- background: isDragging ? colors?.grey400 : void 0,
30
- cursor: "move",
31
- opacity: isDragging ? 0.5 : 1,
32
- height: "100%",
33
- width: "100%",
34
- padding: "0 12px",
35
- zIndex: isDragging ? 3 : void 0
12
+ const [collected, drag, dragPreview] = useDrag(() => {
13
+ return {
14
+ type,
15
+ item: {
16
+ id
36
17
  },
37
- ref: setNodeRef,
38
- children
39
- }
40
- );
18
+ collect: (monitor) => {
19
+ return {
20
+ isDragging: monitor.isDragging()
21
+ };
22
+ }
23
+ };
24
+ });
25
+ if (collected.isDragging) {
26
+ return /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ ref: dragPreview,
30
+ style: {
31
+ backgroundColor: colors.grey400,
32
+ opacity: 0.5,
33
+ cursor: "move"
34
+ },
35
+ children
36
+ }
37
+ );
38
+ }
39
+ return /* @__PURE__ */ jsx("div", { style: { cursor: "move" }, id: type, ref: drag, children });
41
40
  }
42
41
 
43
42
  export { DraggableCell };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/DraggableCell.tsx"],"names":[],"mappings":"AA4BE;AA5BF,SAAS,cAAc;AAGvB,SAAS,oBAAoB;AAC7B,SAAS,WAAW;AAEb,SAAS,cAAc;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,GAIG;AACF,QAAM,EAAE,YAAY,WAAW,YAAY,WAAW,WAAW,IAChE,aAAa;AAAA,IACZ,IAAI;AAAA,EACL,CAAC;AAEF,QAAM,iBAAiB,YACpB;AAAA,IACA,WAAW,IAAI,UAAU,SAAS,SAAS;AAAA,EAC5C,IACC;AAEH,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,WAAU;AAAA,MACV,OAAO;AAAA,QACN,GAAI,SAAS,CAAC;AAAA,QACd,GAAG;AAAA,QACH,YAAY,aAAa,QAAQ,UAAU;AAAA,QAC3C,QAAQ;AAAA,QACR,SAAS,aAAa,MAAM;AAAA,QAC5B,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,QAAQ,aAAa,IAAI;AAAA,MAC1B;AAAA,MACA,KAAK;AAAA,MAEJ;AAAA;AAAA,EACF;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport React from \"react\";\nimport type { ScorecardDraggableItems } from \"../../../schemas/config\";\nimport { useDraggable } from \"@dnd-kit/core\";\nimport { CSS } from \"@dnd-kit/utilities\";\n\nexport function DraggableCell({\n\tchildren,\n\ttype,\n\tstyle,\n\t...props\n}: {\n\tchildren: React.ReactNode;\n\ttype: ScorecardDraggableItems;\n\tstyle?: React.CSSProperties;\n}) {\n\tconst { attributes, listeners, setNodeRef, transform, isDragging } =\n\t\tuseDraggable({\n\t\t\tid: type,\n\t\t});\n\n\tconst transformStyle = transform\n\t\t? {\n\t\t\t\ttransform: CSS.Translate.toString(transform),\n\t\t\t}\n\t\t: undefined;\n\n\treturn (\n\t\t<div\n\t\t\tid={type}\n\t\t\t{...props}\n\t\t\t{...attributes}\n\t\t\t{...listeners}\n\t\t\tclassName=\"column center\"\n\t\t\tstyle={{\n\t\t\t\t...(style ?? {}),\n\t\t\t\t...transformStyle,\n\t\t\t\tbackground: isDragging ? colors?.grey400 : undefined,\n\t\t\t\tcursor: \"move\",\n\t\t\t\topacity: isDragging ? 0.5 : 1,\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: \"100%\",\n\t\t\t\tpadding: \"0 12px\",\n\t\t\t\tzIndex: isDragging ? 3 : undefined,\n\t\t\t}}\n\t\t\tref={setNodeRef}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/DraggableCell.tsx"],"names":[],"mappings":"AAiCG;AAjCH,SAAS,cAAc;AAGvB,SAAS,eAAe;AAEjB,SAAS,cAAc;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,GAKG;AACF,QAAM,CAAC,WAAW,MAAM,WAAW,IAAI,QAAQ,MAAM;AACpD,WAAO;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL;AAAA,MACD;AAAA,MACA,SAAS,CAAC,YAAY;AACrB,eAAO;AAAA,UACN,YAAY,QAAQ,WAAW;AAAA,QAChC;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AAED,MAAI,UAAU,YAAY;AACzB,WACC;AAAA,MAAC;AAAA;AAAA,QACA,KAAK;AAAA,QACL,OAAO;AAAA,UACN,iBAAiB,OAAO;AAAA,UACxB,SAAS;AAAA,UACT,QAAQ;AAAA,QACT;AAAA,QAEC;AAAA;AAAA,IACF;AAAA,EAEF;AAEA,SACC,oBAAC,SAAI,OAAO,EAAE,QAAQ,OAAO,GAAG,IAAI,MAAM,KAAK,MAC7C,UACF;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport React from \"react\";\nimport type { ScorecardDraggableItems } from \"../../../schemas/config\";\nimport { useDrag } from \"react-dnd\";\n\nexport function DraggableCell({\n\tchildren,\n\ttype,\n\tstyle,\n\tid,\n\t...props\n}: {\n\tchildren: React.ReactNode;\n\ttype: ScorecardDraggableItems;\n\tid: string;\n\tstyle?: React.CSSProperties;\n}) {\n\tconst [collected, drag, dragPreview] = useDrag(() => {\n\t\treturn {\n\t\t\ttype,\n\t\t\titem: {\n\t\t\t\tid,\n\t\t\t},\n\t\t\tcollect: (monitor) => {\n\t\t\t\treturn {\n\t\t\t\t\tisDragging: monitor.isDragging(),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t});\n\n\tif (collected.isDragging) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={dragPreview}\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundColor: colors.grey400,\n\t\t\t\t\topacity: 0.5,\n\t\t\t\t\tcursor: \"move\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div style={{ cursor: \"move\" }} id={type} ref={drag}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n"]}
@@ -1,31 +1,43 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { colors } from '@dhis2/ui';
3
- import { useMemo } from 'react';
4
- import { useDroppable } from '@dnd-kit/core';
5
- import { head } from 'lodash';
3
+ import { useDrop } from 'react-dnd';
6
4
 
7
5
  function DroppableCell({
8
6
  accept,
9
7
  children
10
8
  }) {
11
- const { setNodeRef, active } = useDroppable({
12
- id: head(accept)
9
+ const [collectedProps, drop] = useDrop(() => {
10
+ return {
11
+ accept,
12
+ collect: (monitor) => {
13
+ if (monitor.canDrop()) {
14
+ return {
15
+ style: {
16
+ border: `2px dashed ${colors.grey700}`,
17
+ background: `${colors.grey100}`,
18
+ width: "100%"
19
+ }
20
+ };
21
+ } else {
22
+ return {
23
+ style: {
24
+ width: "100%",
25
+ border: `2px solid transparent`
26
+ }
27
+ };
28
+ }
29
+ },
30
+ drop: (results) => {
31
+ return results;
32
+ }
33
+ };
13
34
  });
14
- const canDrop = useMemo(() => {
15
- if (!active)
16
- return false;
17
- return accept.includes(active.id);
18
- }, [accept, active]);
19
35
  return /* @__PURE__ */ jsx(
20
36
  "div",
21
37
  {
22
- ref: setNodeRef,
38
+ ref: drop,
23
39
  className: "column center align-items-center",
24
- style: {
25
- border: canDrop ? `2px dashed ${colors.grey700}` : void 0,
26
- background: canDrop ? `${colors.grey100}` : void 0,
27
- width: "100%"
28
- },
40
+ ...collectedProps,
29
41
  children
30
42
  }
31
43
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/DroppableCell.tsx"],"names":[],"mappings":"AAuBE;AAvBF,SAAS,cAAc;AACvB,SAAgB,eAAe;AAE/B,SAAS,oBAAoB;AAC7B,SAAS,YAAY;AAEN,SAAR,cAA+B;AAAA,EACrC;AAAA,EACA;AACD,GAGG;AACF,QAAM,EAAE,YAAY,OAAO,IAAI,aAAa;AAAA,IAC3C,IAAI,KAAK,MAAM;AAAA,EAChB,CAAC;AAED,QAAM,UAAU,QAAQ,MAAM;AAC7B,QAAI,CAAC;AAAQ,aAAO;AACpB,WAAO,OAAO,SAAS,OAAO,EAA6B;AAAA,EAC5D,GAAG,CAAC,QAAQ,MAAM,CAAC;AAEnB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,KAAK;AAAA,MACL,WAAU;AAAA,MACV,OAAO;AAAA,QACN,QAAQ,UAAU,cAAc,OAAO,OAAO,KAAK;AAAA,QACnD,YAAY,UAAU,GAAG,OAAO,OAAO,KAAK;AAAA,QAC5C,OAAO;AAAA,MACR;AAAA,MAEC;AAAA;AAAA,EACF;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport React, { useMemo } from \"react\";\nimport type { ScorecardDraggableItems } from \"../../../schemas/config\";\nimport { useDroppable } from \"@dnd-kit/core\";\nimport { head } from \"lodash\";\n\nexport default function DroppableCell({\n\taccept,\n\tchildren,\n}: {\n\taccept: ScorecardDraggableItems[];\n\tchildren: React.ReactNode;\n}) {\n\tconst { setNodeRef, active } = useDroppable({\n\t\tid: head(accept) as string,\n\t});\n\n\tconst canDrop = useMemo(() => {\n\t\tif (!active) return false;\n\t\treturn accept.includes(active.id as ScorecardDraggableItems);\n\t}, [accept, active]);\n\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tclassName=\"column center align-items-center\"\n\t\t\tstyle={{\n\t\t\t\tborder: canDrop ? `2px dashed ${colors.grey700}` : undefined,\n\t\t\t\tbackground: canDrop ? `${colors.grey100}` : undefined,\n\t\t\t\twidth: \"100%\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/DroppableCell.tsx"],"names":[],"mappings":"AAwCE;AAxCF,SAAS,cAAc;AAGvB,SAAS,eAAe;AAET,SAAR,cAA+B;AAAA,EACrC;AAAA,EACA;AACD,GAGG;AACF,QAAM,CAAC,gBAAgB,IAAI,IAAI,QAAQ,MAAM;AAC5C,WAAO;AAAA,MACN;AAAA,MACA,SAAS,CAAC,YAAY;AACrB,YAAI,QAAQ,QAAQ,GAAG;AACtB,iBAAO;AAAA,YACN,OAAO;AAAA,cACN,QAAQ,cAAc,OAAO,OAAO;AAAA,cACpC,YAAY,GAAG,OAAO,OAAO;AAAA,cAC7B,OAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,OAAO;AACN,iBAAO;AAAA,YACN,OAAO;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,YACT;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,MAAM,CAAC,YAA4B;AAClC,eAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD,CAAC;AAED,SACC;AAAA,IAAC;AAAA;AAAA,MACA,KAAK;AAAA,MACL,WAAU;AAAA,MACT,GAAG;AAAA,MAEH;AAAA;AAAA,EACF;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport React from \"react\";\nimport type { ScorecardDraggableItems } from \"../../../schemas/config\";\nimport { useDrop } from \"react-dnd\";\n\nexport default function DroppableCell({\n\taccept,\n\tchildren,\n}: {\n\taccept: ScorecardDraggableItems[];\n\tchildren: React.ReactNode;\n}) {\n\tconst [collectedProps, drop] = useDrop(() => {\n\t\treturn {\n\t\t\taccept,\n\t\t\tcollect: (monitor) => {\n\t\t\t\tif (monitor.canDrop()) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tborder: `2px dashed ${colors.grey700}`,\n\t\t\t\t\t\t\tbackground: `${colors.grey100}`,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tborder: `2px solid transparent`,\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\tdrop: (results: { id: string }) => {\n\t\t\t\treturn results;\n\t\t\t},\n\t\t};\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={drop}\n\t\t\tclassName=\"column center align-items-center\"\n\t\t\t{...collectedProps}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n"]}
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { DataTableCell } from '@dhis2/ui';
3
3
 
4
4
  function EmptyFooterCell(props) {
5
- return /* @__PURE__ */ jsx(DataTableCell, {});
5
+ return /* @__PURE__ */ jsx(DataTableCell, { bordered: true });
6
6
  }
7
7
 
8
8
  export { EmptyFooterCell };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.tsx"],"names":[],"mappings":"AAOQ;AAPR,SAAS,qBAAqB;AAIvB,SAAS,gBACf,OACC;AACD,SAAO,oBAAC,iBAAc;AACvB","sourcesContent":["import { DataTableCell } from \"@dhis2/ui\";\nimport type { HeaderContext } from \"@tanstack/react-table\";\nimport type { ScorecardTableData } from \"../../../schemas/config\";\n\nexport function EmptyFooterCell(\n\tprops: HeaderContext<ScorecardTableData, unknown>,\n) {\n\treturn <DataTableCell />;\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/EmptyFooterCell.tsx"],"names":[],"mappings":"AAOQ;AAPR,SAAS,qBAAqB;AAIvB,SAAS,gBACf,OACC;AACD,SAAO,oBAAC,iBAAc,UAAQ,MAAC;AAChC","sourcesContent":["import { DataTableCell } from \"@dhis2/ui\";\nimport type { HeaderContext } from \"@tanstack/react-table\";\nimport type { ScorecardTableData } from \"../../../schemas/config\";\n\nexport function EmptyFooterCell(\n\tprops: HeaderContext<ScorecardTableData, unknown>,\n) {\n\treturn <DataTableCell bordered />;\n}\n"]}
@@ -11,6 +11,7 @@ function MetaFooterCell() {
11
11
  return /* @__PURE__ */ jsx(
12
12
  DataTableCell,
13
13
  {
14
+ bordered: true,
14
15
  width: "300px",
15
16
  style: {
16
17
  width: "fit-content",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.tsx"],"names":[],"mappings":"AAwBG;AAxBH,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AACjB,SAAS,iCAAiC;AAEnC,SAAS,iBAAiB;AAChC,QAAM,aAAa,0BAAmC;AAAA,IACrD;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAM;AAAA,MACN,OAAO;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MACX;AAAA,MACA,OAAM;AAAA,MACN,SAAS,aAAa,MAAM;AAAA,MAC5B,OAAK;AAAA,MAGL,MAAK;AAAA,MAEL,8BAAC,OAAE,OAAO,EAAE,SAAS,QAAQ,GAAI,eAAK,EAAE,SAAS,GAAE;AAAA;AAAA,EACpD;AAEF","sourcesContent":["import { DataTableCell } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { useScorecardStateSelector } from \"../../StateProvider\";\n\nexport function MetaFooterCell() {\n\tconst itemNumber = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"itemNumber\",\n\t]);\n\n\treturn (\n\t\t<DataTableCell\n\t\t\twidth=\"300px\"\n\t\t\tstyle={{\n\t\t\t\twidth: \"fit-content\",\n\t\t\t\tminWidth: 300,\n\t\t\t}}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={itemNumber ? \"3\" : \"2\"}\n\t\t\tfixed\n\t\t\t/*\n // @ts-ignore */\n\t\t\tleft=\"0\"\n\t\t>\n\t\t\t<b style={{ padding: \"8px 0\" }}>{i18n.t(\"Average\")}</b>\n\t\t</DataTableCell>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.tsx"],"names":[],"mappings":"AAyBG;AAzBH,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AACjB,SAAS,iCAAiC;AAEnC,SAAS,iBAAiB;AAChC,QAAM,aAAa,0BAAmC;AAAA,IACrD;AAAA,IACA;AAAA,EACD,CAAC;AAED,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAQ;AAAA,MACR,OAAM;AAAA,MACN,OAAO;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MACX;AAAA,MACA,OAAM;AAAA,MACN,SAAS,aAAa,MAAM;AAAA,MAC5B,OAAK;AAAA,MAGL,MAAK;AAAA,MAEL,8BAAC,OAAE,OAAO,EAAE,SAAS,QAAQ,GAAI,eAAK,EAAE,SAAS,GAAE;AAAA;AAAA,EACpD;AAEF","sourcesContent":["import { DataTableCell } from \"@dhis2/ui\";\nimport i18n from \"@dhis2/d2-i18n\";\nimport { useScorecardStateSelector } from \"../../StateProvider\";\n\nexport function MetaFooterCell() {\n\tconst itemNumber = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"itemNumber\",\n\t]);\n\n\treturn (\n\t\t<DataTableCell\n\t\t\tbordered\n\t\t\twidth=\"300px\"\n\t\t\tstyle={{\n\t\t\t\twidth: \"fit-content\",\n\t\t\t\tminWidth: 300,\n\t\t\t}}\n\t\t\talign=\"center\"\n\t\t\tcolSpan={itemNumber ? \"3\" : \"2\"}\n\t\t\tfixed\n\t\t\t/*\n // @ts-ignore */\n\t\t\tleft=\"0\"\n\t\t>\n\t\t\t<b style={{ padding: \"8px 0\" }}>{i18n.t(\"Average\")}</b>\n\t\t</DataTableCell>\n\t);\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { DataTableToolbar, Pagination } from '@dhis2/ui';
3
+ import { useTableState, useToggleTableLoadingState } from '../../TableStateProvider';
4
+ import { useTransition } from 'react';
5
+ import { useUpdateEffect } from 'usehooks-ts';
6
+
7
+ function PaginatedToolbar() {
8
+ const [isPending, startTransition] = useTransition();
9
+ const table = useTableState();
10
+ const rowCount = table.getRowCount();
11
+ const page = table.getState().pagination.pageIndex + 1;
12
+ const pageSize = table.getState().pagination.pageSize;
13
+ const pageCount = table.getPageCount();
14
+ const toggleTableLoading = useToggleTableLoadingState();
15
+ const onPageChange = (page2) => {
16
+ startTransition(() => {
17
+ table.setPageIndex(page2 - 1);
18
+ });
19
+ };
20
+ const onPageSizeChange = (pageSize2) => {
21
+ startTransition(() => {
22
+ table.setPageSize(pageSize2);
23
+ });
24
+ };
25
+ useUpdateEffect(() => {
26
+ toggleTableLoading();
27
+ }, [isPending]);
28
+ if (rowCount <= 50) {
29
+ return null;
30
+ }
31
+ return /* @__PURE__ */ jsx(DataTableToolbar, { position: "bottom", children: /* @__PURE__ */ jsx("div", { style: { width: "100%" }, children: /* @__PURE__ */ jsx(
32
+ Pagination,
33
+ {
34
+ total: rowCount,
35
+ pageCount,
36
+ pageSizes: [10, 20, 30, 40, 50, 100].map(
37
+ (size) => size.toString()
38
+ ),
39
+ page,
40
+ pageSize,
41
+ onPageChange,
42
+ onPageSizeChange
43
+ }
44
+ ) }) });
45
+ }
46
+
47
+ export { PaginatedToolbar };
48
+ //# sourceMappingURL=out.js.map
49
+ //# sourceMappingURL=PaginatedToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/components/Scorecard/components/ScorecardTable/components/PaginatedToolbar.tsx"],"names":["page","pageSize"],"mappings":"AAuCI;AAvCJ,SAAS,kBAAkB,kBAAkB;AAC7C;AAAA,EACC;AAAA,EACA;AAAA,OACM;AACP,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAEzB,SAAS,mBAAmB;AAClC,QAAM,CAAC,WAAW,eAAe,IAAI,cAAc;AACnD,QAAM,QAAQ,cAAc;AAC5B,QAAM,WAAW,MAAM,YAAY;AACnC,QAAM,OAAO,MAAM,SAAS,EAAE,WAAW,YAAY;AACrD,QAAM,WAAW,MAAM,SAAS,EAAE,WAAW;AAC7C,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,qBAAqB,2BAA2B;AAEtD,QAAM,eAAe,CAACA,UAAiB;AACtC,oBAAgB,MAAM;AACrB,YAAM,aAAaA,QAAO,CAAC;AAAA,IAC5B,CAAC;AAAA,EACF;AACA,QAAM,mBAAmB,CAACC,cAAqB;AAC9C,oBAAgB,MAAM;AACrB,YAAM,YAAYA,SAAQ;AAAA,IAC3B,CAAC;AAAA,EACF;AAEA,kBAAgB,MAAM;AACrB,uBAAmB;AAAA,EACpB,GAAG,CAAC,SAAS,CAAC;AAEd,MAAI,YAAY,IAAI;AACnB,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,oBAAiB,UAAS,UAC1B,8BAAC,SAAI,OAAO,EAAE,OAAO,OAAO,GAC3B;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,WAAW,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;AAAA,QAAI,CAAC,SACzC,KAAK,SAAS;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACD,GACD,GACD;AAEF","sourcesContent":["import { DataTableToolbar, Pagination } from \"@dhis2/ui\";\nimport {\n\tuseTableState,\n\tuseToggleTableLoadingState,\n} from \"../../TableStateProvider\";\nimport { useTransition } from \"react\";\nimport { useUpdateEffect } from \"usehooks-ts\";\n\nexport function PaginatedToolbar() {\n\tconst [isPending, startTransition] = useTransition();\n\tconst table = useTableState();\n\tconst rowCount = table.getRowCount();\n\tconst page = table.getState().pagination.pageIndex + 1;\n\tconst pageSize = table.getState().pagination.pageSize;\n\tconst pageCount = table.getPageCount();\n\tconst toggleTableLoading = useToggleTableLoadingState();\n\n\tconst onPageChange = (page: number) => {\n\t\tstartTransition(() => {\n\t\t\ttable.setPageIndex(page - 1);\n\t\t});\n\t};\n\tconst onPageSizeChange = (pageSize: number) => {\n\t\tstartTransition(() => {\n\t\t\ttable.setPageSize(pageSize);\n\t\t});\n\t};\n\n\tuseUpdateEffect(() => {\n\t\ttoggleTableLoading();\n\t}, [isPending]);\n\n\tif (rowCount <= 50) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DataTableToolbar position=\"bottom\">\n\t\t\t<div style={{ width: \"100%\" }}>\n\t\t\t\t<Pagination\n\t\t\t\t\ttotal={rowCount}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tpageSizes={[10, 20, 30, 40, 50, 100].map((size) =>\n\t\t\t\t\t\tsize.toString(),\n\t\t\t\t\t)}\n\t\t\t\t\tpage={page}\n\t\t\t\t\tpageSize={pageSize}\n\t\t\t\t\tonPageChange={onPageChange}\n\t\t\t\t\tonPageSizeChange={onPageSizeChange}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</DataTableToolbar>\n\t);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { DataTableBody } from '@dhis2/ui';
3
- import { useTableState } from '../../TableStateProvider';
3
+ import { useTableState, useTableLoadingState } from '../../TableStateProvider';
4
4
  import { TableRow } from './DataRow';
5
5
  import { memo, useMemo } from 'react';
6
6
  import { LoadingIndicator } from '../../LoadingIndicator';
@@ -10,13 +10,14 @@ const TableBody = memo(function TableBody2({
10
10
  tableRef
11
11
  }) {
12
12
  const table = useTableState();
13
+ const loading = useTableLoadingState();
13
14
  const rows = useMemo(
14
15
  () => table.getRowModel().rows,
15
16
  [table.getRowModel().rows]
16
17
  );
17
18
  return /* @__PURE__ */ jsxs(Fragment, { children: [
18
19
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx(ScorecardDataFetchProgressProvider, { children: /* @__PURE__ */ jsx(LoadingIndicator, { tableRef }) }) }),
19
- /* @__PURE__ */ jsx(DataTableBody, { children: rows.map((row) => /* @__PURE__ */ jsx(TableRow, { row }, row.id)) })
20
+ /* @__PURE__ */ jsx(DataTableBody, { loading, children: rows.map((row) => /* @__PURE__ */ jsx(TableRow, { row }, row.id)) })
20
21
  ] });
21
22
  });
22
23