@dexteel/mesf-core 7.1.0 → 7.2.0

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.
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "7.1.0"
2
+ ".": "7.2.0"
3
3
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [7.2.0](https://github.com/dexteel/mesf-core-frontend/compare/@dexteel/mesf-core-v7.1.0...@dexteel/mesf-core-v7.2.0) (2025-11-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * **MESFModal:** Add subtitle prop to Modal for enhanced title display ([e64b4f2](https://github.com/dexteel/mesf-core-frontend/commit/e64b4f2a7833cc470e7e9cd5d2bc7c21bdd92905))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **Alert:** Import Alert for `mui/material` and use forwardRef for improved ref handling ([34868c8](https://github.com/dexteel/mesf-core-frontend/commit/34868c8e0b95d601aaabd60d35434695c64b2401))
14
+ * **Context Menu:** Change width of context menu to auto for better responsiveness ([287b20a](https://github.com/dexteel/mesf-core-frontend/commit/287b20ab377a03bbfd5668edbb9f3d97baff153a))
15
+ * **Trending:** Replace TextFields for DateTimePickers, Fix style of TagTree & Fix save of views ([0bfb906](https://github.com/dexteel/mesf-core-frontend/commit/0bfb9064ebcce0ee0336afc594743d344d78b09d))
16
+
3
17
  ## [7.1.0](https://github.com/dexteel/mesf-core-frontend/compare/@dexteel/mesf-core-v7.0.2...@dexteel/mesf-core-v7.1.0) (2025-10-31)
4
18
 
5
19
 
@@ -1,14 +1,16 @@
1
1
  import { DialogActionsProps, DialogContentProps } from "@mui/material";
2
+ import { DialogProps } from "@mui/material/Dialog";
2
3
  import React, { ComponentType, ReactNode } from "react";
3
- interface MESFModalProps {
4
+ interface MESFModalProps extends Omit<DialogProps, "onClose" | "open"> {
4
5
  handleClose: (shouldUpdate?: boolean) => void;
5
6
  open: boolean;
6
7
  id?: string;
7
8
  maxWidth?: "xs" | "sm" | "md" | "lg" | "xl" | false;
8
9
  children: ReactNode;
9
10
  title?: string;
11
+ subtitle?: string;
10
12
  }
11
- declare function Modal({ children, title, handleClose, open, id, maxWidth, }: MESFModalProps): React.JSX.Element;
13
+ declare function Modal({ children, title, subtitle, handleClose, open, id, maxWidth, }: MESFModalProps): React.JSX.Element;
12
14
  export declare const MesfModal: typeof Modal & {
13
15
  Content: ComponentType<DialogContentProps>;
14
16
  Actions: ComponentType<DialogActionsProps>;
@@ -1,3 +1,3 @@
1
1
  import { type AlertProps } from "@mui/lab/Alert";
2
2
  import React from "react";
3
- export declare const Alert: (props: AlertProps) => React.JSX.Element;
3
+ export declare const Alert: React.ForwardRefExoticComponent<Omit<AlertProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
package/dist/index.esm.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
2
2
  export * from '@microsoft/signalr';
3
3
  export { LicenseManager } from 'ag-grid-enterprise';
4
- import { styled, DialogTitle as DialogTitle$1, DialogContent as DialogContent$1, DialogActions as DialogActions$1, Grid2, Button, alpha, Dialog as Dialog$1, TextField, Paper, List, ListItem, ListItemIcon, ListItemText, Box, Chip, SvgIcon, Typography as Typography$1, Checkbox, InputAdornment, IconButton as IconButton$1, MenuItem, Card, CardContent, CardActions, Collapse, createTheme, CircularProgress, Snackbar, FormControlLabel, Switch, InputLabel, Select, DialogContentText, useTheme, Popover, MenuList, FormControl, FormHelperText, Badge, Tooltip, Input, Divider, CssBaseline, AppBar, Toolbar, Container, Menu, Hidden, Drawer, useMediaQuery, ListSubheader, ListItemButton, Autocomplete as Autocomplete$1, Alert as Alert$4, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, debounce, StyledEngineProvider, ThemeProvider, ListItemSecondaryAction } from '@mui/material';
4
+ import { styled, DialogTitle as DialogTitle$1, DialogContent as DialogContent$1, DialogActions as DialogActions$1, Grid2, Button, alpha, Dialog as Dialog$1, TextField, Paper, List, ListItem, ListItemIcon, ListItemText, Box, Chip, SvgIcon, Typography as Typography$1, Checkbox, InputAdornment, IconButton as IconButton$1, MenuItem, Card, CardContent, CardActions, Collapse, createTheme, CircularProgress, Snackbar, FormControlLabel, Switch, InputLabel, Select, Alert as Alert$3, DialogContentText, useTheme, Popover, MenuList, FormControl, FormHelperText, Badge, Tooltip, Input, Divider, CssBaseline, AppBar, Toolbar, Container, Menu, Hidden, Drawer, useMediaQuery, ListSubheader, ListItemButton, Autocomplete as Autocomplete$1, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, debounce, StyledEngineProvider, ThemeProvider, ListItemSecondaryAction } from '@mui/material';
5
5
  import { useMutation, useQueryClient, useQuery, QueryClient, QueryClientProvider } from '@tanstack/react-query';
6
6
  import * as React from 'react';
7
7
  import React__default, { createContext, useContext, useState, useRef, useEffect, useMemo, Component, useCallback, lazy, Suspense } from 'react';
8
8
  import CloseIcon from '@mui/icons-material/Close';
9
- import Alert$3 from '@mui/lab/Alert';
9
+ import Alert$4 from '@mui/lab/Alert';
10
10
  import IconButton from '@mui/material/IconButton';
11
11
  import GetAppIcon from '@mui/icons-material/GetApp';
12
12
  import { ArrowRight, ArrowBackRounded, ArrowForwardRounded, SkipNext, ChevronLeft, ChevronRight, Cloud, Timeline, Send, Menu as Menu$1, People, Storage, Group, Assignment, Chat, ViewList, Build, Settings as Settings$2, FastRewind, FastForward, ZoomIn, Restore, Lock, Create, Delete, Folder, InsertChart, Search, PlaylistAdd, DragIndicator, Save, AttachFile, CloudUpload, GetApp } from '@mui/icons-material';
@@ -47,6 +47,7 @@ import MenuIcon from '@mui/icons-material/Menu';
47
47
  import Settings$1 from '@mui/icons-material/Settings';
48
48
  import ShowChartIcon from '@mui/icons-material/ShowChart';
49
49
  import axios from 'axios';
50
+ import { LocalizationProvider as LocalizationProvider$1 } from '@mui/x-date-pickers/LocalizationProvider';
50
51
  import { DataGrid, GridOverlay } from '@mui/x-data-grid';
51
52
  import { isAncestor, Tree, DndProvider as DndProvider$1 } from '@minoru/react-dnd-treeview';
52
53
  import FolderIcon from '@mui/icons-material/Folder';
@@ -230,9 +231,11 @@ var DialogActions = styled(DialogActions$1)(function (_a) {
230
231
  });
231
232
  });
232
233
  function Modal(_a) {
233
- var children = _a.children, title = _a.title, handleClose = _a.handleClose, open = _a.open, _b = _a.id, id = _b === void 0 ? "mesf-modal" : _b, _c = _a.maxWidth, maxWidth = _c === void 0 ? "lg" : _c;
234
+ var children = _a.children, title = _a.title, subtitle = _a.subtitle, handleClose = _a.handleClose, open = _a.open, _b = _a.id, id = _b === void 0 ? "mesf-modal" : _b, _c = _a.maxWidth, maxWidth = _c === void 0 ? "lg" : _c;
234
235
  return (React__default.createElement(Dialog, { onClose: function () { return handleClose(); }, "aria-labelledby": id, open: open, maxWidth: maxWidth, style: { minWidth: 320 } },
235
- React__default.createElement(DialogTitle, { id: id, onClose: function () { return handleClose(); } }, title),
236
+ React__default.createElement(DialogTitle, { id: id, onClose: function () { return handleClose(); } },
237
+ title,
238
+ subtitle ? (React__default.createElement(Typography, { variant: "caption", color: "text.secondary", display: "block" }, subtitle)) : null),
236
239
  children));
237
240
  }
238
241
  var MesfModal = Object.assign(Modal, {
@@ -2633,9 +2636,9 @@ var LogsPage = function (props) {
2633
2636
  return React.createElement(Logs, null);
2634
2637
  };
2635
2638
 
2636
- var Alert = function (props) {
2637
- return React__default.createElement(Alert$3, __assign({ elevation: 6, variant: "filled" }, props));
2638
- };
2639
+ var Alert = React__default.forwardRef(function Alert(props, ref) {
2640
+ return React__default.createElement(Alert$3, __assign({ elevation: 6, variant: "filled", ref: ref }, props));
2641
+ });
2639
2642
 
2640
2643
  var INITIAL_VALUES$3 = {
2641
2644
  ProfileId: null,
@@ -4872,7 +4875,6 @@ var AssetSearchInput = function (_a) {
4872
4875
  };
4873
4876
 
4874
4877
  var buildTreeAssets$1 = function (nodes) {
4875
- debugger;
4876
4878
  //tree build functions
4877
4879
  var idMapping = nodes.reduce(function (acc, el, i) {
4878
4880
  // console.log(acc)
@@ -5058,7 +5060,7 @@ var CreateNewAssetDialog = function (_a) {
5058
5060
  React__default.createElement(Button, { fullWidth: true, startIcon: isSubmitLoading && React__default.createElement(CircularProgress, { size: "1rem" }), disabled: isSubmitLoading, variant: "contained", color: "primary", type: "submit" }, "Save")))))))),
5059
5061
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } }),
5060
5062
  React__default.createElement(Snackbar, { open: assetCreatedSuccess, autoHideDuration: 2500, onClose: handleClose },
5061
- React__default.createElement(Alert$3, { severity: "info", onClose: handleClose }, "Document created successfully"))));
5063
+ React__default.createElement(Alert$4, { severity: "info", onClose: handleClose }, "Document created successfully"))));
5062
5064
  };
5063
5065
 
5064
5066
  var EditAssetDialog = function (_a) {
@@ -5250,7 +5252,7 @@ var RemoveAssetDialog = function (_a) {
5250
5252
  React__default.createElement(Button, { autoFocus: true, color: "secondary", startIcon: isSubmitLoading && React__default.createElement(CircularProgress, { size: "1rem" }), onClick: handleRemoveAsset }, "Delete"))),
5251
5253
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } }),
5252
5254
  React__default.createElement(Snackbar, { open: assetRemovedSuccess, autoHideDuration: 2500, onClose: handleClose },
5253
- React__default.createElement(Alert$3, { severity: "info", onClose: handleClose }, "Asset removed succesfully"))));
5255
+ React__default.createElement(Alert$4, { severity: "info", onClose: handleClose }, "Asset removed succesfully"))));
5254
5256
  };
5255
5257
 
5256
5258
  var ViewerAssetDialog = function (_a) {
@@ -7490,7 +7492,7 @@ var ContextMenu$1 = function () {
7490
7492
  backgroundColor: "#fff",
7491
7493
  borderRadius: "2px",
7492
7494
  padding: "5px 0",
7493
- width: "180px",
7495
+ width: "auto",
7494
7496
  height: "auto",
7495
7497
  margin: "0",
7496
7498
  zIndex: 1,
@@ -9143,7 +9145,7 @@ function ChangePassword(props) {
9143
9145
  React__default.createElement(DialogTitle$1, { id: "confirmation-dialog-title" }, "Change Password"),
9144
9146
  React__default.createElement(DialogContent$1, { dividers: true },
9145
9147
  React__default.createElement(Collapse, { in: showError },
9146
- React__default.createElement(Alert$3, { severity: "error", action: React__default.createElement(IconButton, { "aria-label": "close", color: "inherit", size: "small", onClick: function () {
9148
+ React__default.createElement(Alert$4, { severity: "error", action: React__default.createElement(IconButton, { "aria-label": "close", color: "inherit", size: "small", onClick: function () {
9147
9149
  setShowError(false);
9148
9150
  setError(undefined);
9149
9151
  } },
@@ -11908,7 +11910,7 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
11908
11910
  : "Save")))))),
11909
11911
  React__default.createElement(ConfirmationDialogRaw, { title: "Confirmation", message: "Are you sure you want to delete permanently the view: ".concat((_d = (view || viewSelected)) === null || _d === void 0 ? void 0 : _d.ViewName, "?"), open: openDeleteDialog, onClose: deleteViewAction }),
11910
11912
  React__default.createElement(Snackbar, { open: snackbarOpen, autoHideDuration: 2500, onClose: handleSnackbarClose },
11911
- React__default.createElement(Alert$3, { elevation: 6, variant: "filled", severity: "success", onClose: handleSnackbarClose }, snackbarMessage)),
11913
+ React__default.createElement(Alert$4, { elevation: 6, variant: "filled", severity: "success", onClose: handleSnackbarClose }, snackbarMessage)),
11912
11914
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } })));
11913
11915
  };
11914
11916
 
@@ -12119,13 +12121,18 @@ var HeaderSectionV2 = React__default.memo(function (_a) {
12119
12121
  React__default.createElement(IconButton$1, { onClick: function () { return handlePartialDateNavigator("subtract"); }, size: "small" },
12120
12122
  React__default.createElement(FastRewind, { fontSize: "medium", sx: { color: "black" } })))),
12121
12123
  React__default.createElement(Grid2, { size: { md: 3.5 } },
12122
- React__default.createElement(TextField, { label: "Start", variant: "outlined", fullWidth: true, value: moment$8(timeScopeStart).format("MM-DD-YY HH:mm:ss"), onChange: function (e) { return handleDateChange(e.target.value, "start"); }, InputLabelProps: {
12123
- shrink: true,
12124
- }, InputProps: {
12125
- max: timeScopeEnd,
12126
- endAdornment: (React__default.createElement(InputAdornment, { position: "end" },
12127
- React__default.createElement(CalendarIcon, { fontSize: "small" }))),
12128
- } })),
12124
+ React__default.createElement(LocalizationProvider$1, { dateAdapter: AdapterMoment },
12125
+ React__default.createElement(DateTimePicker, { label: "Start", format: "MM/DD/YYYY HH:mm:ss", value: moment$8(timeScopeStart), onChange: function (newValue) {
12126
+ if (newValue) {
12127
+ handleDateChange(newValue.toDate(), "start");
12128
+ }
12129
+ }, minutesStep: 1, slotProps: {
12130
+ textField: {
12131
+ size: "small",
12132
+ variant: "outlined",
12133
+ fullWidth: true,
12134
+ },
12135
+ } }))),
12129
12136
  React__default.createElement(Grid2, { size: { md: 2 }, marginTop: 0.5 },
12130
12137
  React__default.createElement(FormControl, { variant: "outlined", fullWidth: true, size: "small" },
12131
12138
  React__default.createElement(Select, { value: scope, onChange: function (e) {
@@ -12139,14 +12146,18 @@ var HeaderSectionV2 = React__default.memo(function (_a) {
12139
12146
  React__default.createElement(MenuItem, { value: "10 days" }, "10 days"),
12140
12147
  React__default.createElement(MenuItem, { value: "custom" }, "Custom")))),
12141
12148
  React__default.createElement(Grid2, { size: { md: 3.5 } },
12142
- React__default.createElement(TextField, { label: "End", variant: "outlined", fullWidth: true, value: autoRefresh
12143
- ? ""
12144
- : moment$8(timeScopeEnd).format("MM-DD-YY HH:mm:ss"), onChange: function (e) { return handleDateChange(e.target.value, "end"); }, InputLabelProps: {
12145
- shrink: true,
12146
- }, InputProps: {
12147
- endAdornment: (React__default.createElement(InputAdornment, { position: "end" },
12148
- React__default.createElement(CalendarIcon, { fontSize: "small" }))),
12149
- } })),
12149
+ React__default.createElement(LocalizationProvider$1, { dateAdapter: AdapterMoment },
12150
+ React__default.createElement(DateTimePicker, { label: "End", format: "MM/DD/YYYY HH:mm:ss", value: autoRefresh ? null : moment$8(timeScopeEnd), onChange: function (newValue) {
12151
+ if (newValue) {
12152
+ handleDateChange(newValue.toDate(), "end");
12153
+ }
12154
+ }, minutesStep: 1, slotProps: {
12155
+ textField: {
12156
+ size: "small",
12157
+ variant: "outlined",
12158
+ fullWidth: true,
12159
+ },
12160
+ }, disabled: autoRefresh }))),
12150
12161
  React__default.createElement(Grid2, null,
12151
12162
  React__default.createElement(Tooltip, { title: "Navigate forward 20%", arrow: true },
12152
12163
  React__default.createElement(IconButton$1, { onClick: function () { return handlePartialDateNavigator("add"); }, size: "small" },
@@ -12235,7 +12246,9 @@ var HeaderSectionV2 = React__default.memo(function (_a) {
12235
12246
  backgroundColor: "white",
12236
12247
  width: "100%",
12237
12248
  } },
12238
- React__default.createElement(Autocomplete$1, { size: "small", id: "view-selector", options: views, getOptionLabel: function (option) { return option.ViewName; }, value: viewSelected, onChange: handleViewChange, noOptionsText: "No views available", renderOption: function (props, option) { return (React__default.createElement(Box, __assign({}, props, { component: "li", style: {
12249
+ React__default.createElement(Autocomplete$1, { size: "small", id: "view-selector", options: views, getOptionLabel: function (option) { return option.ViewName; }, value: viewSelected, isOptionEqualToValue: function (option, value) {
12250
+ return option.ViewId === (value === null || value === void 0 ? void 0 : value.ViewId);
12251
+ }, onChange: handleViewChange, noOptionsText: "No views available", renderOption: function (props, option) { return (React__default.createElement(Box, __assign({}, props, { component: "li", style: {
12239
12252
  display: "flex",
12240
12253
  justifyContent: "space-between",
12241
12254
  width: "100%",
@@ -12588,11 +12601,8 @@ var TagFolderCustomNodeV2 = function (_a) {
12588
12601
  };
12589
12602
  }, []);
12590
12603
  return (React__default.createElement(Box, { onClick: onClickHandler, sx: {
12591
- paddingLeft: depth * 20,
12604
+ paddingInlineStart: depth * 2,
12592
12605
  cursor: "pointer",
12593
- listStyleType: "none",
12594
- margin: 0,
12595
- padding: 0,
12596
12606
  alignItems: "center",
12597
12607
  display: "flex",
12598
12608
  height: "32px",
@@ -12615,7 +12625,6 @@ var TagFolderCustomNodeV2 = function (_a) {
12615
12625
  alignItems: "center",
12616
12626
  fontSize: "10px",
12617
12627
  fontWeight: "bold",
12618
- margin: "0 5px",
12619
12628
  borderRadius: "3px",
12620
12629
  border: "1px solid rgba(0, 0, 0, 0.2)",
12621
12630
  backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === "A" ? "#AD48C4" : "#C46F48",
@@ -13511,7 +13520,7 @@ var TagsTableV2 = function () {
13511
13520
  key: "saveView",
13512
13521
  name: "Save View",
13513
13522
  onClick: function () {
13514
- handleSaveView();
13523
+ handleSaveViewRef.current();
13515
13524
  },
13516
13525
  },
13517
13526
  {
@@ -13652,12 +13661,16 @@ var TagsTableV2 = function () {
13652
13661
  // This prevents closure issues with the context menu registration
13653
13662
  var viewTagsRef = React__default.useRef(viewTags);
13654
13663
  var handleDeleteTagRef = React__default.useRef(handleDeleteTag);
13655
- React__default.useEffect(function () {
13664
+ var handleSaveViewRef = React__default.useRef(handleSaveView);
13665
+ useEffect(function () {
13656
13666
  viewTagsRef.current = viewTags;
13657
13667
  }, [viewTags]);
13658
- React__default.useEffect(function () {
13668
+ useEffect(function () {
13659
13669
  handleDeleteTagRef.current = handleDeleteTag;
13660
13670
  }, [handleDeleteTag]);
13671
+ useEffect(function () {
13672
+ handleSaveViewRef.current = handleSaveView;
13673
+ }, [handleSaveView, viewSelected]);
13661
13674
  var handleColorChange = useCallback(function (tagId, newColor) {
13662
13675
  var _a;
13663
13676
  var currentViewTags = viewTagsRef.current;
@@ -14043,7 +14056,7 @@ var TagsTableV2 = function () {
14043
14056
  React__default.createElement(LoadViewModalV2, { open: loadViewOpen, handleClose: function () { return setLoadViewOpen(false); } }),
14044
14057
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } }),
14045
14058
  React__default.createElement(Snackbar, { open: !!snackbarMessage, autoHideDuration: 3000, onClose: handleCloseSnackbar, anchorOrigin: { vertical: "bottom", horizontal: "center" } },
14046
- React__default.createElement(Alert$4, { onClose: handleCloseSnackbar, severity: "success" }, snackbarMessage))));
14059
+ React__default.createElement(Alert$3, { onClose: handleCloseSnackbar, severity: "success" }, snackbarMessage))));
14047
14060
  };
14048
14061
 
14049
14062
  /**
@@ -19173,7 +19186,7 @@ var NotificationSnackBar = function (_a) {
19173
19186
  setOpen(!!message);
19174
19187
  }, [message]);
19175
19188
  return (React__default.createElement(Snackbar, { open: open, autoHideDuration: 2500, onClose: handleClose },
19176
- React__default.createElement(Alert$3, { elevation: 6, variant: "filled", severity: severity, onClose: handleClose }, message)));
19189
+ React__default.createElement(Alert$4, { elevation: 6, variant: "filled", severity: severity, onClose: handleClose }, message)));
19177
19190
  };
19178
19191
 
19179
19192
  var useEntrySubmission = function (_a) {