@bygd/nc-report-ui 0.1.25 → 0.1.27

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.
@@ -28,6 +28,7 @@ import EditIcon from '@mui/icons-material/Edit';
28
28
  import ContentCopyIcon from '@mui/icons-material/ContentCopy';
29
29
  import DeleteIcon from '@mui/icons-material/Delete';
30
30
  import PlayArrowIcon from '@mui/icons-material/PlayArrow';
31
+ import RestoreIcon from '@mui/icons-material/Restore';
31
32
  import ArrowBackIcon from '@mui/icons-material/ArrowBack';
32
33
  import SaveIcon from '@mui/icons-material/Save';
33
34
  import DownloadIcon from '@mui/icons-material/Download';
@@ -1681,11 +1682,13 @@ const ReportDefinitionsList = ({
1681
1682
  };
1682
1683
  const handleConfirmDelete = async () => {
1683
1684
  if (!reportToDelete) return;
1685
+ const isRevert = reportToDelete.source === "user-override";
1686
+ const action = isRevert ? "reverted" : "deleted";
1684
1687
  try {
1685
1688
  await Api.deleteReportDefinition({
1686
1689
  id: reportToDelete.id
1687
1690
  });
1688
- notify.success(`Report "${reportToDelete.title}" deleted successfully!`);
1691
+ notify.success(isRevert ? `Report "${reportToDelete.title}" reverted to system version successfully!` : `Report "${reportToDelete.title}" deleted successfully!`);
1689
1692
 
1690
1693
  // Close dialog and reset state
1691
1694
  setDeleteDialogOpen(false);
@@ -1694,8 +1697,8 @@ const ReportDefinitionsList = ({
1694
1697
  // Reload the report definitions list
1695
1698
  loadReportDefinitions();
1696
1699
  } catch (error) {
1697
- console.error("Error deleting report:", error);
1698
- notify.error("Failed to delete report: " + (error.response?.data?.message || error.message || "Unknown error"));
1700
+ console.error(`Error ${action} report:`, error);
1701
+ notify.error(`Failed to ${action.toLowerCase()} report: ` + (error.response?.data?.message || error.message || "Unknown error"));
1699
1702
  setDeleteDialogOpen(false);
1700
1703
  setReportToDelete(null);
1701
1704
  }
@@ -1714,6 +1717,11 @@ const ReportDefinitionsList = ({
1714
1717
  headerName: "Provider",
1715
1718
  flex: 1,
1716
1719
  minWidth: 200
1720
+ }, {
1721
+ field: "source",
1722
+ headerName: "Source",
1723
+ flex: 1,
1724
+ minWidth: 150
1717
1725
  }, {
1718
1726
  field: "actions",
1719
1727
  headerName: "Actions",
@@ -1721,48 +1729,60 @@ const ReportDefinitionsList = ({
1721
1729
  sortable: false,
1722
1730
  filterable: false,
1723
1731
  disableColumnMenu: true,
1724
- renderCell: params => /*#__PURE__*/React__default.createElement(Box$1, {
1725
- sx: {
1726
- display: "flex",
1727
- gap: 1
1728
- }
1729
- }, /*#__PURE__*/React__default.createElement(Tooltip, {
1730
- title: "Run"
1731
- }, /*#__PURE__*/React__default.createElement(IconButton, {
1732
- size: "small",
1733
- color: "success",
1734
- onClick: e => handleRun(params.row.id, e)
1735
- }, /*#__PURE__*/React__default.createElement(PlayArrowIcon, {
1736
- fontSize: "small"
1737
- }))), /*#__PURE__*/React__default.createElement(Tooltip, {
1738
- title: "Edit"
1739
- }, /*#__PURE__*/React__default.createElement(IconButton, {
1740
- size: "small",
1741
- color: "primary",
1742
- onClick: e => handleEdit(params.row.id, e)
1743
- }, /*#__PURE__*/React__default.createElement(EditIcon, {
1744
- fontSize: "small"
1745
- }))), /*#__PURE__*/React__default.createElement(Tooltip, {
1746
- title: "Clone"
1747
- }, /*#__PURE__*/React__default.createElement(IconButton, {
1748
- size: "small",
1749
- onClick: e => handleClone(params.row.id, e)
1750
- }, /*#__PURE__*/React__default.createElement(ContentCopyIcon, {
1751
- fontSize: "small"
1752
- }))), /*#__PURE__*/React__default.createElement(Tooltip, {
1753
- title: "Delete"
1754
- }, /*#__PURE__*/React__default.createElement(IconButton, {
1755
- size: "small",
1756
- color: "error",
1757
- onClick: e => handleDelete(params.row.id, e)
1758
- }, /*#__PURE__*/React__default.createElement(DeleteIcon, {
1759
- fontSize: "small"
1760
- }))))
1732
+ renderCell: params => {
1733
+ const isUserOverride = params.row.source === "user-override";
1734
+ return /*#__PURE__*/React__default.createElement(Box$1, {
1735
+ sx: {
1736
+ display: "flex",
1737
+ gap: 1
1738
+ }
1739
+ }, /*#__PURE__*/React__default.createElement(Tooltip, {
1740
+ title: "Run"
1741
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
1742
+ size: "small",
1743
+ color: "success",
1744
+ onClick: e => handleRun(params.row.id, e)
1745
+ }, /*#__PURE__*/React__default.createElement(PlayArrowIcon, {
1746
+ fontSize: "small"
1747
+ }))), /*#__PURE__*/React__default.createElement(Tooltip, {
1748
+ title: "Edit"
1749
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
1750
+ size: "small",
1751
+ color: "primary",
1752
+ onClick: e => handleEdit(params.row.id, e)
1753
+ }, /*#__PURE__*/React__default.createElement(EditIcon, {
1754
+ fontSize: "small"
1755
+ }))), /*#__PURE__*/React__default.createElement(Tooltip, {
1756
+ title: "Clone"
1757
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
1758
+ size: "small",
1759
+ onClick: e => handleClone(params.row.id, e)
1760
+ }, /*#__PURE__*/React__default.createElement(ContentCopyIcon, {
1761
+ fontSize: "small"
1762
+ }))), isUserOverride ? /*#__PURE__*/React__default.createElement(Tooltip, {
1763
+ title: "Revert to the system report"
1764
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
1765
+ size: "small",
1766
+ color: "warning",
1767
+ onClick: e => handleDelete(params.row.id, e)
1768
+ }, /*#__PURE__*/React__default.createElement(RestoreIcon, {
1769
+ fontSize: "small"
1770
+ }))) : /*#__PURE__*/React__default.createElement(Tooltip, {
1771
+ title: "Delete"
1772
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
1773
+ size: "small",
1774
+ color: "error",
1775
+ onClick: e => handleDelete(params.row.id, e)
1776
+ }, /*#__PURE__*/React__default.createElement(DeleteIcon, {
1777
+ fontSize: "small"
1778
+ }))));
1779
+ }
1761
1780
  }];
1762
1781
  const rows = reportDefinitions.map(def => ({
1763
1782
  id: def.id,
1764
1783
  title: def.title,
1765
- provider: def.provider
1784
+ provider: def.provider,
1785
+ source: def.source
1766
1786
  }));
1767
1787
  const handleRowClick = params => {
1768
1788
  onSelectReport(params.row.id);
@@ -1862,13 +1882,13 @@ const ReportDefinitionsList = ({
1862
1882
  }
1863
1883
  })), /*#__PURE__*/React__default.createElement(ConfirmDialog, {
1864
1884
  open: deleteDialogOpen,
1865
- title: "Delete Report Definition",
1866
- message: reportToDelete ? `Are you sure you want to delete "${reportToDelete.title}"? This action cannot be undone.` : "",
1885
+ title: reportToDelete?.source === "user-override" ? "Revert Report Definition" : "Delete Report Definition",
1886
+ message: reportToDelete ? reportToDelete.source === "user-override" ? `Are you sure you want to revert "${reportToDelete.title}" to the system version? Your custom changes will be lost.` : `Are you sure you want to delete "${reportToDelete.title}"? This action cannot be undone.` : "",
1867
1887
  onConfirm: handleConfirmDelete,
1868
1888
  onCancel: handleCancelDelete,
1869
- confirmText: "Delete",
1889
+ confirmText: reportToDelete?.source === "user-override" ? "Revert" : "Delete",
1870
1890
  cancelText: "Cancel",
1871
- confirmColor: "error"
1891
+ confirmColor: reportToDelete?.source === "user-override" ? "warning" : "error"
1872
1892
  }));
1873
1893
  };
1874
1894
 
@@ -2280,18 +2300,24 @@ const SortableChip$1 = ({
2280
2300
  }
2281
2301
  })), !isEditing ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Box$1, {
2282
2302
  sx: {
2283
- flex: 1,
2284
2303
  minWidth: 0
2285
2304
  }
2305
+ }, /*#__PURE__*/React__default.createElement(Tooltip, {
2306
+ title: fullLabel || displayLabel,
2307
+ arrow: true,
2308
+ placement: "top"
2286
2309
  }, /*#__PURE__*/React__default.createElement(Typography$1, {
2287
2310
  variant: "h6",
2288
2311
  sx: {
2289
2312
  fontWeight: hasCustomTitle ? 600 : 500,
2290
2313
  fontStyle: hasCustomTitle ? "italic" : "normal",
2291
2314
  color: "#1a1a1a",
2292
- fontSize: "14px"
2315
+ fontSize: "14px",
2316
+ whiteSpace: "nowrap",
2317
+ overflow: "hidden",
2318
+ textOverflow: "ellipsis"
2293
2319
  }
2294
- }, displayLabel)), /*#__PURE__*/React__default.createElement(Box$1, {
2320
+ }, displayLabel))), /*#__PURE__*/React__default.createElement(Box$1, {
2295
2321
  className: "hover-icons",
2296
2322
  sx: {
2297
2323
  display: "flex",
@@ -2318,7 +2344,32 @@ const SortableChip$1 = ({
2318
2344
  onClick: handleSortToggle,
2319
2345
  "aria-label": "toggle sort order",
2320
2346
  color: sortOrder ? "primary" : "default"
2321
- }, getSortIcon())), /*#__PURE__*/React__default.createElement(IconButton, {
2347
+ }, getSortIcon())), /*#__PURE__*/React__default.createElement(Tooltip, {
2348
+ title: "Delete",
2349
+ arrow: true,
2350
+ placement: "top"
2351
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
2352
+ size: "small",
2353
+ onClick: onDelete,
2354
+ "aria-label": "delete",
2355
+ sx: {
2356
+ color: "#ef5350"
2357
+ }
2358
+ }, /*#__PURE__*/React__default.createElement(GridDeleteIcon, {
2359
+ fontSize: "small"
2360
+ })))), /*#__PURE__*/React__default.createElement(Box$1, {
2361
+ sx: {
2362
+ flex: 1
2363
+ }
2364
+ }), /*#__PURE__*/React__default.createElement(Box$1, {
2365
+ className: "hover-icons",
2366
+ sx: {
2367
+ display: "flex",
2368
+ gap: 0.5,
2369
+ opacity: 0,
2370
+ transition: "opacity 0.2s"
2371
+ }
2372
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
2322
2373
  size: "small",
2323
2374
  onClick: onMoveUp,
2324
2375
  disabled: isFirst,
@@ -2332,27 +2383,15 @@ const SortableChip$1 = ({
2332
2383
  "aria-label": "move down"
2333
2384
  }, /*#__PURE__*/React__default.createElement(ArrowDownwardIcon, {
2334
2385
  fontSize: "small"
2335
- })), /*#__PURE__*/React__default.createElement(Tooltip, {
2336
- title: "Delete",
2337
- arrow: true,
2338
- placement: "top"
2339
- }, /*#__PURE__*/React__default.createElement(IconButton, {
2340
- size: "small",
2341
- onClick: onDelete,
2342
- "aria-label": "delete",
2343
- sx: {
2344
- color: "#ef5350"
2345
- }
2346
- }, /*#__PURE__*/React__default.createElement(GridDeleteIcon, {
2347
- fontSize: "small"
2348
- }))))) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TextField, {
2386
+ })))) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TextField, {
2349
2387
  inputRef: inputRef,
2350
2388
  value: editValue,
2351
2389
  onChange: e => setEditValue(e.target.value),
2352
2390
  onKeyDown: handleKeyDown,
2353
2391
  size: "small",
2354
2392
  sx: {
2355
- flex: 1
2393
+ minWidth: '200px',
2394
+ maxWidth: '400px'
2356
2395
  }
2357
2396
  }), /*#__PURE__*/React__default.createElement(Box$1, {
2358
2397
  className: "hover-icons",
@@ -2393,7 +2432,11 @@ const SortableChip$1 = ({
2393
2432
  "aria-label": "reset title"
2394
2433
  }, /*#__PURE__*/React__default.createElement(RestartAltIcon, {
2395
2434
  fontSize: "small"
2396
- })))))));
2435
+ })))), /*#__PURE__*/React__default.createElement(Box$1, {
2436
+ sx: {
2437
+ flex: 1
2438
+ }
2439
+ }))));
2397
2440
  };
2398
2441
  const Dimensions = ({
2399
2442
  providersData,
@@ -2963,18 +3006,24 @@ const SortableChip = ({
2963
3006
  }
2964
3007
  })), !isEditing ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Box$1, {
2965
3008
  sx: {
2966
- flex: 1,
2967
3009
  minWidth: 0
2968
3010
  }
3011
+ }, /*#__PURE__*/React__default.createElement(Tooltip, {
3012
+ title: fullLabel || displayLabel,
3013
+ arrow: true,
3014
+ placement: "top"
2969
3015
  }, /*#__PURE__*/React__default.createElement(Typography$1, {
2970
3016
  variant: "h6",
2971
3017
  sx: {
2972
3018
  fontWeight: hasCustomTitle ? 600 : 500,
2973
3019
  fontStyle: hasCustomTitle ? "italic" : "normal",
2974
3020
  color: "#1a1a1a",
2975
- fontSize: "14px"
3021
+ fontSize: "14px",
3022
+ whiteSpace: "nowrap",
3023
+ overflow: "hidden",
3024
+ textOverflow: "ellipsis"
2976
3025
  }
2977
- }, displayLabel)), /*#__PURE__*/React__default.createElement(Box$1, {
3026
+ }, displayLabel))), /*#__PURE__*/React__default.createElement(Box$1, {
2978
3027
  className: "hover-icons",
2979
3028
  sx: {
2980
3029
  display: "flex",
@@ -2992,7 +3041,32 @@ const SortableChip = ({
2992
3041
  "aria-label": "edit title"
2993
3042
  }, /*#__PURE__*/React__default.createElement(EditIcon, {
2994
3043
  fontSize: "small"
2995
- }))), /*#__PURE__*/React__default.createElement(IconButton, {
3044
+ }))), /*#__PURE__*/React__default.createElement(Tooltip, {
3045
+ title: "Delete",
3046
+ arrow: true,
3047
+ placement: "top"
3048
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
3049
+ size: "small",
3050
+ onClick: onDelete,
3051
+ "aria-label": "delete",
3052
+ sx: {
3053
+ color: "#ef5350"
3054
+ }
3055
+ }, /*#__PURE__*/React__default.createElement(GridDeleteIcon, {
3056
+ fontSize: "small"
3057
+ })))), /*#__PURE__*/React__default.createElement(Box$1, {
3058
+ sx: {
3059
+ flex: 1
3060
+ }
3061
+ }), /*#__PURE__*/React__default.createElement(Box$1, {
3062
+ className: "hover-icons",
3063
+ sx: {
3064
+ display: "flex",
3065
+ gap: 0.5,
3066
+ opacity: 0,
3067
+ transition: "opacity 0.2s"
3068
+ }
3069
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
2996
3070
  size: "small",
2997
3071
  onClick: onMoveUp,
2998
3072
  disabled: isFirst,
@@ -3006,27 +3080,15 @@ const SortableChip = ({
3006
3080
  "aria-label": "move down"
3007
3081
  }, /*#__PURE__*/React__default.createElement(ArrowDownwardIcon, {
3008
3082
  fontSize: "small"
3009
- })), /*#__PURE__*/React__default.createElement(Tooltip, {
3010
- title: "Delete",
3011
- arrow: true,
3012
- placement: "top"
3013
- }, /*#__PURE__*/React__default.createElement(IconButton, {
3014
- size: "small",
3015
- onClick: onDelete,
3016
- "aria-label": "delete",
3017
- sx: {
3018
- color: "#ef5350"
3019
- }
3020
- }, /*#__PURE__*/React__default.createElement(GridDeleteIcon, {
3021
- fontSize: "small"
3022
- }))))) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TextField, {
3083
+ })))) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TextField, {
3023
3084
  inputRef: inputRef,
3024
3085
  value: editValue,
3025
3086
  onChange: e => setEditValue(e.target.value),
3026
3087
  onKeyDown: handleKeyDown,
3027
3088
  size: "small",
3028
3089
  sx: {
3029
- flex: 1
3090
+ minWidth: '200px',
3091
+ maxWidth: '400px'
3030
3092
  }
3031
3093
  }), /*#__PURE__*/React__default.createElement(Box$1, {
3032
3094
  className: "hover-icons",
@@ -3067,7 +3129,11 @@ const SortableChip = ({
3067
3129
  "aria-label": "reset title"
3068
3130
  }, /*#__PURE__*/React__default.createElement(RestartAltIcon, {
3069
3131
  fontSize: "small"
3070
- })))))));
3132
+ })))), /*#__PURE__*/React__default.createElement(Box$1, {
3133
+ sx: {
3134
+ flex: 1
3135
+ }
3136
+ }))));
3071
3137
  };
3072
3138
  const Metrics = ({
3073
3139
  providersData,
@@ -5824,6 +5890,30 @@ const ReportApp = ({
5824
5890
  }
5825
5891
  }
5826
5892
  }
5893
+ },
5894
+ MuiTooltip: {
5895
+ styleOverrides: {
5896
+ tooltip: {
5897
+ fontSize: "0.875rem",
5898
+ backgroundColor: "rgba(97, 97, 97, 0.95)",
5899
+ maxWidth: 500
5900
+ },
5901
+ arrow: {
5902
+ color: "rgba(97, 97, 97, 0.95)"
5903
+ }
5904
+ },
5905
+ defaultProps: {
5906
+ arrow: true,
5907
+ enterDelay: 300,
5908
+ leaveDelay: 200
5909
+ }
5910
+ },
5911
+ MuiPopper: {
5912
+ defaultProps: {
5913
+ style: {
5914
+ zIndex: 1500
5915
+ }
5916
+ }
5827
5917
  }
5828
5918
  }
5829
5919
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bygd/nc-report-ui",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "files": [
5
5
  "dist/*",
6
6
  "fnet/input.yaml",
@@ -25,13 +25,14 @@
25
25
  "@material-ui/core": "^4.12",
26
26
  "@mui/icons-material": "^7.3",
27
27
  "@mui/material": "^7.3",
28
- "@mui/x-data-grid": "^8.19",
29
- "@mui/x-date-pickers": "^8.19",
28
+ "@mui/x-data-grid": "^8.22",
29
+ "@mui/x-date-pickers": "^8.22",
30
30
  "axios": "^1.13",
31
31
  "dayjs": "^1.11",
32
32
  "eventemitter3": "^5.0",
33
33
  "numeral": "^2.0",
34
34
  "nunjucks": "^3.2",
35
+ "preact": "^10",
35
36
  "react": "^18",
36
37
  "react-dom": "^18",
37
38
  "react-google-charts": "^5.2",