@dexteel/mesf-core 4.23.1 → 4.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,9 +1,9 @@
1
1
  export { LicenseManager } from 'ag-grid-enterprise';
2
- import { withStyles, DialogTitle as DialogTitle$1, DialogContent as DialogContent$1, DialogActions as DialogActions$1, createStyles, Grid, Button, alpha, makeStyles, Dialog as Dialog$1, SvgIcon, Collapse, Typography as Typography$1, Checkbox, TextField, InputAdornment, IconButton as IconButton$1, MenuItem, Select, Card, CardContent, CardActions, Snackbar, CircularProgress, Paper, InputLabel, FormHelperText, DialogContentText, FormControlLabel, Badge, useTheme, FormControl, Input, Chip, Tooltip, ListItemIcon, MenuList, Divider, Box, debounce, List, ListItem, ListItemText } from '@material-ui/core';
2
+ import { withStyles, DialogTitle as DialogTitle$1, DialogContent as DialogContent$1, DialogActions as DialogActions$1, createStyles, Grid, Button, alpha, makeStyles, Dialog as Dialog$1, SvgIcon, Collapse, Typography as Typography$1, Checkbox, TextField, InputAdornment, IconButton as IconButton$1, MenuItem, Select, Card, CardContent, CardActions, Snackbar, CircularProgress, Paper, InputLabel, FormHelperText, DialogContentText, FormControlLabel, Badge, useTheme, FormControl, Input, Chip, Tooltip, ListItemIcon, Box, List, ListItem, ListItemText, MenuList, Divider, debounce } from '@material-ui/core';
3
3
  import { get as get$1, isNil as isNil$1, isEmpty, values, round, isNaN, isNumber } from 'lodash-es';
4
4
  import * as React from 'react';
5
5
  import React__default, { useState, useRef, useEffect, useMemo, Component, createContext, useContext, useCallback, lazy, Suspense } from 'react';
6
- import { ArrowRight, ArrowBackRounded, ArrowForwardRounded, SkipNext, ChevronLeft, ChevronRight } from '@material-ui/icons';
6
+ import { ArrowRight, ArrowBackRounded, ArrowForwardRounded, SkipNext, ChevronLeft, ChevronRight, Send } from '@material-ui/icons';
7
7
  import { DatePicker } from '@mui/x-date-pickers/DatePicker';
8
8
  import { Outlet, useParams, useNavigate, useSearchParams, Link, Navigate, Routes, Route, BrowserRouter } from 'react-router-dom';
9
9
  import { Alert as Alert$1, Modal as Modal$1, Navbar, Container, Nav, NavDropdown } from 'react-bootstrap';
@@ -22,15 +22,18 @@ import moment$4 from 'moment';
22
22
  import EditIcon from '@material-ui/icons/Edit';
23
23
  import PlaylistAddIcon from '@material-ui/icons/PlaylistAdd';
24
24
  import { isNil, get } from 'lodash';
25
+ import { HubConnectionBuilder, LogLevel as LogLevel$1 } from '@microsoft/signalr';
26
+ export * from '@microsoft/signalr';
27
+ import { Alert as Alert$3, Autocomplete } from '@material-ui/lab';
28
+ import { useForm, Controller } from 'react-hook-form';
29
+ import 'ag-grid-community/styles/ag-theme-material.min.css';
25
30
  import DeleteIcon from '@material-ui/icons/Delete';
26
31
  import FormatListBulletedSharpIcon from '@material-ui/icons/FormatListBulletedSharp';
27
- import { useForm, Controller } from 'react-hook-form';
28
32
  import axios from 'axios';
29
33
  import { _adapters, Chart, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip as Tooltip$1, Legend, TimeScale } from 'chart.js';
30
34
  import zoomPlugin from 'chartjs-plugin-zoom';
31
35
  import LockIcon from '@material-ui/icons/Lock';
32
36
  import SaveIcon from '@material-ui/icons/Save';
33
- import { Alert as Alert$3, Autocomplete } from '@material-ui/lab';
34
37
  import Button$1 from '@material-ui/core/Button';
35
38
  import Popover from '@material-ui/core/Popover';
36
39
  import CreateIcon from '@material-ui/icons/Create';
@@ -573,7 +576,7 @@ var ModalTreeFilterControl = function (props) {
573
576
  React__default.createElement(Button, { onClick: handleOk, color: "primary" }, "OK"))));
574
577
  };
575
578
 
576
- var useStyles$z = makeStyles(function (theme) { return ({
579
+ var useStyles$B = makeStyles(function (theme) { return ({
577
580
  root: {
578
581
  width: "100%",
579
582
  backgroundColor: theme.palette.background.paper,
@@ -589,7 +592,7 @@ var useStyles$z = makeStyles(function (theme) { return ({
589
592
  }
590
593
  }); });
591
594
  var TreePickerControl = function (props) {
592
- var classes = useStyles$z();
595
+ var classes = useStyles$B();
593
596
  var onSelect = props.onSelect, value = props.value; props.styleLabel; var dataSource = props.dataSource, _a = props.inputTitle, inputTitle = _a === void 0 ? "Asset" : _a; props.showPath; var _c = props.multipleSelectNodes, multipleSelectNodes = _c === void 0 ? false : _c, _d = props.showClearButton, showClearButton = _d === void 0 ? false : _d, showAssetTree = props.showAssetTree, onHide = props.onHide, _e = props.listAssetDrawings, listAssetDrawings = _e === void 0 ? [] : _e, onSuccess = props.onSuccess, isLoading = props.isLoading, other = __rest(props, ["onSelect", "value", "styleLabel", "dataSource", "inputTitle", "showPath", "multipleSelectNodes", "showClearButton", "showAssetTree", "onHide", "listAssetDrawings", "onSuccess", "isLoading"]);
594
597
  var _f = useState(showAssetTree || false), open = _f[0], setOpen = _f[1];
595
598
  var handleClickListItem = function (e) {
@@ -673,7 +676,7 @@ var TreePickerControl = function (props) {
673
676
  }, onHide: onHide, id: "modal-treeview-filter", title: props.title, keepMounted: true, open: open, onClose: handleClose, isLoading: isLoading, value: value, data: dataSource, onBackdropClick: function () { return setOpen(false); }, multipleSelectNodes: multipleSelectNodes, listAssetDrawings: listAssetDrawings, setListAssetDrawings: listAssetDrawings, onSuccess: onSuccess }, other)))));
674
677
  };
675
678
 
676
- var useStyles$y = makeStyles(function (theme) { return ({
679
+ var useStyles$A = makeStyles(function (theme) { return ({
677
680
  root: {
678
681
  width: "100%",
679
682
  backgroundColor: theme.palette.background.paper
@@ -699,7 +702,7 @@ function findNameById(node, id) {
699
702
  return null;
700
703
  }
701
704
  var TreePickerControlV2 = function (props) {
702
- var classes = useStyles$y();
705
+ var classes = useStyles$A();
703
706
  var value = props.value, onSelect = props.onSelect; props.styleLabel; var dataSource = props.dataSource; props.getOptionName; var _a = props.inputTitle, inputTitle = _a === void 0 ? "Asset" : _a; props.showPath; var _c = props.multipleSelectNodes, multipleSelectNodes = _c === void 0 ? false : _c, _d = props.showClearButton, showClearButton = _d === void 0 ? false : _d, showAssetTree = props.showAssetTree, onHide = props.onHide, _e = props.listAssetDrawings, listAssetDrawings = _e === void 0 ? [] : _e, onSuccess = props.onSuccess, isLoading = props.isLoading, _f = props.disabled, disabled = _f === void 0 ? false : _f, other = __rest(props, ["value", "onSelect", "styleLabel", "dataSource", "getOptionName", "inputTitle", "showPath", "multipleSelectNodes", "showClearButton", "showAssetTree", "onHide", "listAssetDrawings", "onSuccess", "isLoading", "disabled"]);
704
707
  var _g = useState(false), open = _g[0], setOpen = _g[1];
705
708
  var handleClickListItem = function (event) {
@@ -1352,7 +1355,7 @@ var useJobsOptionsFunctions = function (_a) {
1352
1355
  };
1353
1356
  };
1354
1357
 
1355
- var useStyles$x = makeStyles(function (theme) { return ({
1358
+ var useStyles$z = makeStyles(function (theme) { return ({
1356
1359
  buttons: {
1357
1360
  opacity: 0,
1358
1361
  transition: "opacity 0.1s ease-in-out",
@@ -1370,7 +1373,7 @@ var useStyles$x = makeStyles(function (theme) { return ({
1370
1373
  var useJobsTableData = function (_a) {
1371
1374
  var setRowSelected = _a.setRowSelected, showContextMenu = _a.showContextMenu;
1372
1375
  var _b = useJobsContext().state, jobsData = _b.jobsData, blockButtons = _b.blockButtons;
1373
- var classes = useStyles$x();
1376
+ var classes = useStyles$z();
1374
1377
  var rows = jobsData.map(function (_a) {
1375
1378
  var JobId = _a.JobId, sProcedure = _a.sProcedure, Running = _a.Running, LastStarted = _a.LastStarted, LastCounter = _a.LastCounter, Enabled = _a.Enabled, RestartAfterFailure = _a.RestartAfterFailure, PeriodTime = _a.PeriodTime, StartTime = _a.StartTime, NextExecutionTime = _a.NextExecutionTime;
1376
1379
  return ({
@@ -1655,7 +1658,7 @@ var useJobsTableData = function (_a) {
1655
1658
  return { rows: rows, columnDefs: columnDefs };
1656
1659
  };
1657
1660
 
1658
- var useStyles$w = makeStyles(function (theme) { return ({
1661
+ var useStyles$y = makeStyles(function (theme) { return ({
1659
1662
  root: {
1660
1663
  "& .MuiDataGrid-row": {
1661
1664
  cursor: "pointer"
@@ -1718,7 +1721,7 @@ var useStyles$w = makeStyles(function (theme) { return ({
1718
1721
  }); });
1719
1722
  var TableJobs = function (_a) {
1720
1723
  var getJobsFromAPI = _a.getJobsFromAPI, isLoading = _a.isLoading;
1721
- var classes = useStyles$w();
1724
+ var classes = useStyles$y();
1722
1725
  var _b = useState(null), rowSelected = _b[0], setRowSelected = _b[1];
1723
1726
  var _c = useState(false), snackbarLoading = _c[0], setSnackbarLoading = _c[1];
1724
1727
  var _d = useState(false), snackbarSuccessfulMessage = _d[0], setSnackbarSuccessfulMessage = _d[1];
@@ -1982,7 +1985,7 @@ var SearchFilter = function (_a) {
1982
1985
  React__default.createElement(FormHelperText, { style: { marginBottom: 10, marginTop: -15 } }, "Search by Source, Message or User")));
1983
1986
  };
1984
1987
 
1985
- var useStyles$v = makeStyles(function (theme) { return ({
1988
+ var useStyles$x = makeStyles(function (theme) { return ({
1986
1989
  title: {
1987
1990
  fontSize: 15
1988
1991
  },
@@ -1999,7 +2002,7 @@ var formatTime = function (nowTime) {
1999
2002
  };
2000
2003
  var ModalLogSelected = function (_a) {
2001
2004
  var show = _a.show, onHide = _a.onHide, selectedLog = _a.selectedLog;
2002
- var classes = useStyles$v();
2005
+ var classes = useStyles$x();
2003
2006
  return (React__default.createElement(Grid, { container: true, justifyContent: "center", alignItems: "center" },
2004
2007
  React__default.createElement(MesfModal, { title: "LOG DETAILS", open: show, handleClose: function () { return onHide(false); }, maxWidth: "md", id: "log-details-modal" },
2005
2008
  React__default.createElement(MesfModal.Content, { style: { padding: "15px 30px" } },
@@ -2055,7 +2058,7 @@ var ModalLogSelected = function (_a) {
2055
2058
  React__default.createElement(Button, { fullWidth: true, variant: "contained", color: "default", onClick: function () { return onHide(true); } }, "Close")))))));
2056
2059
  };
2057
2060
 
2058
- var useStyles$u = makeStyles(function (theme) { return ({
2061
+ var useStyles$w = makeStyles(function (theme) { return ({
2059
2062
  buttons: {
2060
2063
  opacity: 0,
2061
2064
  transition: "opacity 0.1s ease-in-out",
@@ -2073,7 +2076,7 @@ var useStyles$u = makeStyles(function (theme) { return ({
2073
2076
  var useLogTableData = function () {
2074
2077
  var _a;
2075
2078
  var state = useLogsContext().state;
2076
- var classes = useStyles$u();
2079
+ var classes = useStyles$w();
2077
2080
  var formatTime = function (nowTime) {
2078
2081
  return (nowTime.toLocaleDateString("en-US") + " " + nowTime.toLocaleTimeString());
2079
2082
  };
@@ -2194,7 +2197,7 @@ var ButtonWithLoading = function (_a) {
2194
2197
  children));
2195
2198
  };
2196
2199
 
2197
- var useStyles$t = makeStyles(function (theme) { return ({
2200
+ var useStyles$v = makeStyles(function (theme) { return ({
2198
2201
  root: {
2199
2202
  "& .MuiDataGrid-row": {
2200
2203
  cursor: "pointer"
@@ -2288,7 +2291,7 @@ var useLogsOptionsFunctions = function (_a) {
2288
2291
  var TableLogs = function (_a) {
2289
2292
  var isLoading = _a.isLoading; _a.rowData; var refreshData = _a.refreshData;
2290
2293
  var _b = useLogsContext(), _c = _b.state.searchData, Start = _c.Start, End = _c.End, Search = _c.Search, LogTypeCode = _c.LogTypeCode, _d = _b.actions, setLogTypeCodeFilter = _d.setLogTypeCodeFilter, setEndFilter = _d.setEndFilter, setStartFilter = _d.setStartFilter, setSearchFilter = _d.setSearchFilter;
2291
- var classes = useStyles$t();
2294
+ var classes = useStyles$v();
2292
2295
  var gridStyle = useMemo(function () { return ({ height: "100%", width: "100%" }); }, []);
2293
2296
  var _e = useState(null); _e[0]; var setGridAPI = _e[1];
2294
2297
  var _f = useState(false), showLogModal = _f[0], setShowLogModal = _f[1];
@@ -2578,7 +2581,7 @@ var deleteProfile = function (profileId) { return __awaiter(void 0, void 0, void
2578
2581
  });
2579
2582
  }); };
2580
2583
 
2581
- var useStyles$s = makeStyles(function (theme) { return ({
2584
+ var useStyles$u = makeStyles(function (theme) { return ({
2582
2585
  title: {
2583
2586
  fontSize: 15
2584
2587
  },
@@ -2601,7 +2604,7 @@ var CreateProfile = function (_a) {
2601
2604
  var _d = useState(""), message = _d[0], setMessage = _d[1];
2602
2605
  var _e = useState(false), isSubmitLoading = _e[0], setIsSubmitLoading = _e[1];
2603
2606
  var _f = useState(""), error = _f[0], setError = _f[1];
2604
- var classes = useStyles$s();
2607
+ var classes = useStyles$u();
2605
2608
  var _g = useForm({ defaultValues: INITIAL_VALUES$3 }), register = _g.register, handleSubmit = _g.handleSubmit, reset = _g.reset, errors = _g.formState.errors;
2606
2609
  var onSubmit = function (data) { return __awaiter(void 0, void 0, void 0, function () {
2607
2610
  var res;
@@ -2836,7 +2839,7 @@ var DataTable = function (_a) {
2836
2839
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } })));
2837
2840
  };
2838
2841
 
2839
- var useStyles$r = makeStyles(function (theme) { return ({
2842
+ var useStyles$t = makeStyles(function (theme) { return ({
2840
2843
  root: {
2841
2844
  "& .MuiFormLabel-asterisk": {
2842
2845
  display: "none"
@@ -2845,7 +2848,7 @@ var useStyles$r = makeStyles(function (theme) { return ({
2845
2848
  }); });
2846
2849
  var ActionsOfProfile = function (_a) {
2847
2850
  var profileForEdit = _a.profileForEdit, show = _a.show, onHide = _a.onHide;
2848
- var classes = useStyles$r();
2851
+ var classes = useStyles$t();
2849
2852
  var _b = useState(null), actionsOfProfile = _b[0], setActionsOfProfile = _b[1];
2850
2853
  var _c = useState(false), open = _c[0], setOpen = _c[1];
2851
2854
  var _d = useState(true), isLoading = _d[0], setIsLoading = _d[1];
@@ -3033,7 +3036,7 @@ var ProfilesProvider = function (_a) {
3033
3036
  return (React__default.createElement(ProfilesContext.Provider, { value: { state: state, actions: actions } }, children));
3034
3037
  };
3035
3038
 
3036
- var useStyles$q = makeStyles(function (theme) { return ({
3039
+ var useStyles$s = makeStyles(function (theme) { return ({
3037
3040
  buttons: {
3038
3041
  opacity: 0,
3039
3042
  transition: "opacity 0.1s ease-in-out",
@@ -3051,7 +3054,7 @@ var useStyles$q = makeStyles(function (theme) { return ({
3051
3054
  var useTableData$3 = function (_a) {
3052
3055
  var setProfileId = _a.setProfileId, setModalProceduresProfile = _a.setModalProceduresProfile, setModalDeleteProfile = _a.setModalDeleteProfile, showContextMenu = _a.showContextMenu;
3053
3056
  var state = useProfilesContext().state;
3054
- var classes = useStyles$q();
3057
+ var classes = useStyles$s();
3055
3058
  var rows = state.profiles.map(function (_a) {
3056
3059
  var ProfileId = _a.ProfileId, ProfileName = _a.ProfileName;
3057
3060
  return ({
@@ -3123,7 +3126,7 @@ var useTableData$3 = function (_a) {
3123
3126
  return { rows: rows, columnDefs: columnDefs };
3124
3127
  };
3125
3128
 
3126
- var useStyles$p = makeStyles(function (theme) { return ({
3129
+ var useStyles$r = makeStyles(function (theme) { return ({
3127
3130
  root: {
3128
3131
  "& .ag-icon-menu": {
3129
3132
  display: "none"
@@ -3195,7 +3198,7 @@ var TableProfiles = function (_a) {
3195
3198
  var _e = useState(null), profile = _e[0], setProfile = _e[1];
3196
3199
  var gridStyle = useMemo(function () { return ({ height: "100%", width: "100%" }); }, []);
3197
3200
  var _f = useState(null), gridApi = _f[0], setGridApi = _f[1];
3198
- var classes = useStyles$p();
3201
+ var classes = useStyles$r();
3199
3202
  var loadingOverlayComponent = useMemo(function () {
3200
3203
  return LazyLoading;
3201
3204
  }, []);
@@ -3434,7 +3437,7 @@ var DeleteShiftParameters = function (PatternStart) { return __awaiter(void 0, v
3434
3437
  });
3435
3438
  }); };
3436
3439
 
3437
- var useStyles$o = makeStyles(function (theme) { return ({
3440
+ var useStyles$q = makeStyles(function (theme) { return ({
3438
3441
  title: {
3439
3442
  fontSize: 15
3440
3443
  },
@@ -3460,7 +3463,7 @@ var CreateShift = function (_a) {
3460
3463
  var _d = useState(false), open = _d[0], setOpen = _d[1];
3461
3464
  var _e = useState(false), isSubmitLoading = _e[0], setIsSubmitLoading = _e[1];
3462
3465
  var _f = useState(""), error = _f[0], setError = _f[1];
3463
- var classes = useStyles$o();
3466
+ var classes = useStyles$q();
3464
3467
  var shiftTableData = useShiftsCrewsContext().state.shiftTableData;
3465
3468
  var _g = useForm({
3466
3469
  defaultValues: shiftTableData ? shiftTableData : INITIAL_VALUES$2
@@ -3662,7 +3665,7 @@ var CreateShift = function (_a) {
3662
3665
  React.createElement(Alert, { severity: "success", onClose: handleClose }, "The shift was created successfully"))));
3663
3666
  };
3664
3667
 
3665
- var useStyles$n = makeStyles(function (theme) { return ({
3668
+ var useStyles$p = makeStyles(function (theme) { return ({
3666
3669
  title: {
3667
3670
  fontSize: 15
3668
3671
  },
@@ -3688,7 +3691,7 @@ var DeleteShift = function (_a) {
3688
3691
  var _c = useState(false), open = _c[0], setOpen = _c[1];
3689
3692
  var _d = useState(false), isSubmitLoading = _d[0], setIsSubmitLoading = _d[1];
3690
3693
  var _e = useState(false), deleteAlert = _e[0], setDeleteAlert = _e[1];
3691
- var classes = useStyles$n();
3694
+ var classes = useStyles$p();
3692
3695
  var shiftTableData = useShiftsCrewsContext().state.shiftTableData;
3693
3696
  var _f = useState(""), error = _f[0], setError = _f[1];
3694
3697
  var _g = useForm({ defaultValues: INITIAL_VALUES$2 }), control = _g.control, setValue = _g.setValue, reset = _g.reset, watch = _g.watch, errors = _g.formState.errors;
@@ -3827,7 +3830,7 @@ var DeleteShift = function (_a) {
3827
3830
  React.createElement(Alert, { severity: "warning", onClose: handleClose }, "The shift was deleted successfully"))));
3828
3831
  };
3829
3832
 
3830
- var useStyles$m = makeStyles(function (theme) { return ({
3833
+ var useStyles$o = makeStyles(function (theme) { return ({
3831
3834
  title: {
3832
3835
  fontSize: 15
3833
3836
  },
@@ -3854,7 +3857,7 @@ var EditShift = function (_a) {
3854
3857
  var _d = useState(""), error = _d[0], setError = _d[1];
3855
3858
  var _e = useState(false), isSubmitLoading = _e[0], setIsSubmitLoading = _e[1];
3856
3859
  var _f = useState(false), initialShiftPerDayAndCrewsNumber = _f[0], setInitialShiftPerDayAndCrewsNumber = _f[1];
3857
- var classes = useStyles$m();
3860
+ var classes = useStyles$o();
3858
3861
  var shiftTableData = useShiftsCrewsContext().state.shiftTableData;
3859
3862
  var _g = useForm({ defaultValues: INITIAL_VALUES$2 }), control = _g.control, setValue = _g.setValue, handleSubmit = _g.handleSubmit, reset = _g.reset, watch = _g.watch, errors = _g.formState.errors;
3860
3863
  // Progress bar
@@ -4122,7 +4125,7 @@ var useShiftsOptionsFunctions = function (_a) {
4122
4125
  };
4123
4126
  };
4124
4127
 
4125
- var useStyles$l = makeStyles(function (theme) { return ({
4128
+ var useStyles$n = makeStyles(function (theme) { return ({
4126
4129
  root: {
4127
4130
  opacity: 0,
4128
4131
  transition: "opacity 0.1s ease-in-out",
@@ -4141,7 +4144,7 @@ var useTableData$2 = function (_a) {
4141
4144
  var _b;
4142
4145
  var setOpenModalEditShift = _a.setOpenModalEditShift, setOpenModalDeleteShift = _a.setOpenModalDeleteShift, showContextMenu = _a.showContextMenu;
4143
4146
  var _c = useShiftsCrewsContext(), state = _c.state, actions = _c.actions;
4144
- var classes = useStyles$l();
4147
+ var classes = useStyles$n();
4145
4148
  var rows = (_b = state.shifts) === null || _b === void 0 ? void 0 : _b.map(function (_a) {
4146
4149
  var PatternStart = _a.PatternStart, ShiftCodes = _a.ShiftCodes, Crews = _a.Crews, PatternDays = _a.PatternDays, CrewRotation = _a.CrewRotation, Comments = _a.Comments, CanEdit = _a.CanEdit;
4147
4150
  return ({
@@ -4252,7 +4255,7 @@ var useTableData$2 = function (_a) {
4252
4255
  return { rows: rows, columnDefs: columnDefs };
4253
4256
  };
4254
4257
 
4255
- var useStyles$k = makeStyles(function (theme) { return ({
4258
+ var useStyles$m = makeStyles(function (theme) { return ({
4256
4259
  root: {
4257
4260
  "& .ag-icon-menu": {
4258
4261
  display: "none"
@@ -4302,7 +4305,7 @@ var useStyles$k = makeStyles(function (theme) { return ({
4302
4305
  }); });
4303
4306
  var TableShiftsCrews = function (_a) {
4304
4307
  _a.isLoading; var getShiftsCrewsFromAPI = _a.getShiftsCrewsFromAPI;
4305
- var classes = useStyles$k();
4308
+ var classes = useStyles$m();
4306
4309
  var _b = useState(false), openModalNew = _b[0], setOpenModalNew = _b[1];
4307
4310
  var _c = useState(false), openModalEditShift = _c[0], setOpenModalEditShift = _c[1];
4308
4311
  var _d = useState(false), openModalDeleteShift = _d[0], setOpenModalDeleteShift = _d[1];
@@ -4806,7 +4809,7 @@ var useAssetCodes = function () {
4806
4809
  return { loadFilterAssets: loadFilterAssets };
4807
4810
  };
4808
4811
 
4809
- var useStyles$j = makeStyles(function (theme) { return ({
4812
+ var useStyles$l = makeStyles(function (theme) { return ({
4810
4813
  root: {
4811
4814
  "& .input-group-text": {
4812
4815
  display: "none"
@@ -4849,7 +4852,7 @@ var useStyles$j = makeStyles(function (theme) { return ({
4849
4852
  }); });
4850
4853
  var CreateNewAssetDialog = function (_a) {
4851
4854
  var show = _a.show, onHide = _a.onHide;
4852
- var classes = useStyles$j();
4855
+ var classes = useStyles$l();
4853
4856
  var _b = useState(true), fullWidth = _b[0]; _b[1];
4854
4857
  var _c = useState("sm"), maxWidth = _c[0]; _c[1];
4855
4858
  var _d = useState(false), assetCreatedSuccess = _d[0], setAssetCreatedSuccess = _d[1];
@@ -4968,7 +4971,7 @@ var CreateNewAssetDialog = function (_a) {
4968
4971
  React__default.createElement(Alert$2, { severity: "info", onClose: handleClose }, "Document created succesfully"))));
4969
4972
  };
4970
4973
 
4971
- var useStyles$i = makeStyles(function (theme) { return ({
4974
+ var useStyles$k = makeStyles(function (theme) { return ({
4972
4975
  root: {
4973
4976
  "& .input-group-text": {
4974
4977
  display: "none"
@@ -5016,7 +5019,7 @@ var useStyles$i = makeStyles(function (theme) { return ({
5016
5019
  }); });
5017
5020
  var EditAssetDialog = function (_a) {
5018
5021
  var show = _a.show, onHide = _a.onHide;
5019
- var classes = useStyles$i();
5022
+ var classes = useStyles$k();
5020
5023
  var _b = useState(true), fullWidth = _b[0]; _b[1];
5021
5024
  var _c = useState("sm"), maxWidth = _c[0]; _c[1];
5022
5025
  var _d = useState(false), assetEditedSuccess = _d[0], setAssetEditedSuccess = _d[1];
@@ -5136,7 +5139,7 @@ var EditAssetDialog = function (_a) {
5136
5139
  React__default.createElement(Alert$3, { severity: "info", onClose: handleClose }, "Document created succesfully")))))))));
5137
5140
  };
5138
5141
 
5139
- var useStyles$h = makeStyles(function (theme) { return ({
5142
+ var useStyles$j = makeStyles(function (theme) { return ({
5140
5143
  root: {
5141
5144
  "& .input-group-text": {
5142
5145
  display: "none"
@@ -5180,7 +5183,7 @@ var useStyles$h = makeStyles(function (theme) { return ({
5180
5183
  }); });
5181
5184
  var RemoveAssetDialog = function (_a) {
5182
5185
  var show = _a.show, onHide = _a.onHide;
5183
- var classes = useStyles$h();
5186
+ var classes = useStyles$j();
5184
5187
  var _b = useState(true), fullWidth = _b[0]; _b[1];
5185
5188
  var _c = useState("sm"), maxWidth = _c[0]; _c[1];
5186
5189
  var _d = useState(false), assetRemovedSuccess = _d[0], setAssetRemovedSuccess = _d[1];
@@ -5239,7 +5242,7 @@ var RemoveAssetDialog = function (_a) {
5239
5242
  React__default.createElement(Alert$2, { severity: "info", onClose: handleClose }, "Asset removed succesfully"))));
5240
5243
  };
5241
5244
 
5242
- var useStyles$g = makeStyles(function (theme) { return ({
5245
+ var useStyles$i = makeStyles(function (theme) { return ({
5243
5246
  root: {
5244
5247
  "& .input-group-text": {
5245
5248
  display: "none"
@@ -5290,7 +5293,7 @@ var useStyles$g = makeStyles(function (theme) { return ({
5290
5293
  }); });
5291
5294
  var ViewerAssetDialog = function (_a) {
5292
5295
  var show = _a.show, onHide = _a.onHide;
5293
- var classes = useStyles$g();
5296
+ var classes = useStyles$i();
5294
5297
  var _b = useState(true), fullWidth = _b[0]; _b[1];
5295
5298
  var _c = useState("sm"), maxWidth = _c[0]; _c[1];
5296
5299
  var _d = useConfigurationAssetContext().state, dataToCreateAsset = _d.dataToCreateAsset, assetNodeSelectedInTree = _d.assetNodeSelectedInTree;
@@ -5463,7 +5466,7 @@ var TypeIcon = function (props) {
5463
5466
  }
5464
5467
  };
5465
5468
 
5466
- var useStyles$f = makeStyles(function (theme) { return ({
5469
+ var useStyles$h = makeStyles(function (theme) { return ({
5467
5470
  root: {
5468
5471
  alignItems: "center",
5469
5472
  backgroundColor: "#1967d2",
@@ -5488,7 +5491,7 @@ var useStyles$f = makeStyles(function (theme) { return ({
5488
5491
  }); });
5489
5492
  var CustomDragPreview$1 = function (props) {
5490
5493
  var _a;
5491
- var classes = useStyles$f();
5494
+ var classes = useStyles$h();
5492
5495
  var item = props.monitorProps.item;
5493
5496
  return (React__default.createElement("div", { className: classes.root },
5494
5497
  React__default.createElement("div", { className: classes.icon },
@@ -5496,7 +5499,7 @@ var CustomDragPreview$1 = function (props) {
5496
5499
  React__default.createElement("div", { className: classes.label }, item.text)));
5497
5500
  };
5498
5501
 
5499
- var useStyles$e = makeStyles(function (theme) { return ({
5502
+ var useStyles$g = makeStyles(function (theme) { return ({
5500
5503
  root: {
5501
5504
  alignItems: "center",
5502
5505
  display: "flex",
@@ -5543,7 +5546,7 @@ var CustomNode = function (_a) {
5543
5546
  var _c = useConfigurationAssetContext(), openAssets = _c.state.openAssets, setOpenAssets = _c.actions.setOpenAssets;
5544
5547
  var _d = props.node, id = _d.id, droppable = _d.droppable, data = _d.data;
5545
5548
  var indent = props.depth * 24;
5546
- var classes = useStyles$e();
5549
+ var classes = useStyles$g();
5547
5550
  var nodeClasses = "".concat(classes.customNodeRoot, " ").concat(classes.root, " ").concat(isSelected ? classes.selected : "");
5548
5551
  var handleClick = function (e) {
5549
5552
  props.onClick(e, props.node);
@@ -5598,7 +5601,7 @@ var CustomNode = function (_a) {
5598
5601
  React__default.createElement(Typography$1, { variant: "body2" }, props.node.text))));
5599
5602
  };
5600
5603
 
5601
- var useStyles$d = makeStyles(function (theme) { return ({
5604
+ var useStyles$f = makeStyles(function (theme) { return ({
5602
5605
  root: {
5603
5606
  alignItems: "flex-start",
5604
5607
  backgroundColor: "#1967d2",
@@ -5630,7 +5633,7 @@ var useStyles$d = makeStyles(function (theme) { return ({
5630
5633
  }
5631
5634
  }); });
5632
5635
  var MultipleDragPreview = function (props) {
5633
- var classes = useStyles$d();
5636
+ var classes = useStyles$f();
5634
5637
  return (React__default.createElement(Badge, { classes: { badge: classes.badge }, color: "error", badgeContent: props.dragSources.length, anchorOrigin: { vertical: "top", horizontal: "right" } },
5635
5638
  React__default.createElement("div", { className: classes.root, "data-testid": "custom-drag-preview" }, props.dragSources.map(function (node) {
5636
5639
  var _a;
@@ -5641,7 +5644,7 @@ var MultipleDragPreview = function (props) {
5641
5644
  }))));
5642
5645
  };
5643
5646
 
5644
- var useStyles$c = makeStyles(function (theme) { return ({
5647
+ var useStyles$e = makeStyles(function (theme) { return ({
5645
5648
  root: {},
5646
5649
  contextMenu: {
5647
5650
  backgroundColor: "#F8F8F8",
@@ -5687,7 +5690,7 @@ var useStyles$c = makeStyles(function (theme) { return ({
5687
5690
  }); });
5688
5691
  var AssetViewComponent = function () {
5689
5692
  var _a = useState([]), selectedNodes = _a[0], setSelectedNodes = _a[1];
5690
- var classes = useStyles$c();
5693
+ var classes = useStyles$e();
5691
5694
  var _b = useState(false), isDragging = _b[0], setIsDragging = _b[1];
5692
5695
  var _c = useState(false), isCtrlPressing = _c[0], setIsCtrlPressing = _c[1];
5693
5696
  var _d = useState(false), isDoubleClick = _d[0], setIsDoubleClick = _d[1];
@@ -6100,7 +6103,7 @@ var INITIAL_VALUES$1 = {
6100
6103
  Profiles: []
6101
6104
  };
6102
6105
 
6103
- var useStyles$b = makeStyles(function (theme) { return ({
6106
+ var useStyles$d = makeStyles(function (theme) { return ({
6104
6107
  root: {
6105
6108
  "& .MuiSelect-select": {
6106
6109
  minHeight: "40px"
@@ -6133,7 +6136,7 @@ var MenuProps$1 = {
6133
6136
  };
6134
6137
  var AuthTypeSelector = function (_a) {
6135
6138
  var value = _a.value, onChange = _a.onChange, disabled = _a.disabled;
6136
- var classes = useStyles$b();
6139
+ var classes = useStyles$d();
6137
6140
  var _b = useState([]), authTypes = _b[0], setAuthTypes = _b[1];
6138
6141
  var _c = useState(true), isLoading = _c[0], setIsLoading = _c[1];
6139
6142
  var theme = useTheme();
@@ -6169,7 +6172,7 @@ var AuthTypeSelector = function (_a) {
6169
6172
  React.createElement(Chip, { key: "selected-authType-".concat(selected), label: selectedAuthTypeName, className: classes.chip }))); }, MenuProps: MenuProps$1 }, authTypes.map(function (authType) { return (React.createElement(MenuItem, { key: "auth-".concat(authType.AuthTypeId), value: authType.AuthTypeId, style: getStyles(authType.AuthTypeId, authTypes, theme) }, authType.Name)); })))) : (React.createElement(React.Fragment, null))));
6170
6173
  };
6171
6174
 
6172
- var useStyles$a = makeStyles(function (theme) { return ({
6175
+ var useStyles$c = makeStyles(function (theme) { return ({
6173
6176
  root: {
6174
6177
  "& .MuiSelect-select": {
6175
6178
  height: "auto",
@@ -6210,7 +6213,7 @@ var MenuProps = {
6210
6213
  };
6211
6214
  var ProfilesPicker = function (_a) {
6212
6215
  var value = _a.value, onChange = _a.onChange; _a.userIdForDelete; var setprofileError = _a.setprofileError, disabled = _a.disabled;
6213
- var classes = useStyles$a();
6216
+ var classes = useStyles$c();
6214
6217
  var theme = useTheme();
6215
6218
  var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
6216
6219
  var _c = useState([]), profiles = _c[0], setProfiles = _c[1];
@@ -6250,7 +6253,7 @@ var ProfilesPicker = function (_a) {
6250
6253
  React__default.createElement(Select, { autoWidth: true, labelId: "demo-mutiple-chip-label", id: "demo-mutiple-chip", multiple: true, value: value, onChange: onChange, input: React__default.createElement(Input, { id: "select-multiple-chip" }), renderValue: function (selected) { return (React__default.createElement("div", { className: classes.chips }, selected.map(function (profileId) { return (React__default.createElement(Chip, { key: "selected-profile-".concat(profileId), label: getProfileNameById(profileId), className: classes.chip })); }))); }, MenuProps: MenuProps }, profiles.map(function (profile) { return (React__default.createElement(MenuItem, { key: "profile-".concat(profile.ProfileId), value: profile.ProfileId, style: getStyles(profile.ProfileId, profiles, theme) }, profile.ProfileName.replaceAll("Profile", ""))); })))) : (React__default.createElement(React__default.Fragment, null))));
6251
6254
  };
6252
6255
 
6253
- var useStyles$9 = makeStyles(function (theme) { return ({
6256
+ var useStyles$b = makeStyles(function (theme) { return ({
6254
6257
  checkbox: {
6255
6258
  userSelect: "none"
6256
6259
  },
@@ -6272,7 +6275,7 @@ var CreateUser = function (_a) {
6272
6275
  var _f = useState(false), isSubmitLoading = _f[0], setIsSubmitLoading = _f[1];
6273
6276
  var _g = useState(""), error = _g[0], setError = _g[1];
6274
6277
  var _h = useState(""), profileError = _h[0], setprofileError = _h[1];
6275
- var classes = useStyles$9();
6278
+ var classes = useStyles$b();
6276
6279
  var _j = useForm({ defaultValues: INITIAL_VALUES$1 }), register = _j.register, control = _j.control, handleSubmit = _j.handleSubmit, reset = _j.reset, watch = _j.watch, errors = _j.formState.errors;
6277
6280
  var handleClose = function (event, reason) {
6278
6281
  if (reason === "clickaway") {
@@ -6487,7 +6490,7 @@ var DeleteUser = function (_a) {
6487
6490
  React__default.createElement(ErrorModal, { error: profileError, onHide: function () { return setprofileError(""); }, title: "Error Choosing Profile" })));
6488
6491
  };
6489
6492
 
6490
- var useStyles$8 = makeStyles(function (theme) { return ({
6493
+ var useStyles$a = makeStyles(function (theme) { return ({
6491
6494
  checkbox: {
6492
6495
  userSelect: "none"
6493
6496
  },
@@ -6506,7 +6509,7 @@ var useStyles$8 = makeStyles(function (theme) { return ({
6506
6509
  var EditUser = function (_a) {
6507
6510
  var _b, _c, _d;
6508
6511
  var userId = _a.userId, show = _a.show, onHide = _a.onHide;
6509
- var classes = useStyles$8();
6512
+ var classes = useStyles$a();
6510
6513
  var _e = useState(false), open = _e[0], setOpen = _e[1];
6511
6514
  var _f = useState(false), isLoading = _f[0], setIsLoading = _f[1];
6512
6515
  var _g = useState(false), isSubmitLoading = _g[0], setIsSubmitLoading = _g[1];
@@ -6657,7 +6660,7 @@ var UsersProvider = function (_a) {
6657
6660
  return (React__default.createElement(UsersContext.Provider, { value: { state: state, actions: actions } }, children));
6658
6661
  };
6659
6662
 
6660
- var useStyles$7 = makeStyles(function (theme) { return ({
6663
+ var useStyles$9 = makeStyles(function (theme) { return ({
6661
6664
  buttons: {
6662
6665
  opacity: 0,
6663
6666
  transition: "opacity 0.1s ease-in-out",
@@ -6673,7 +6676,7 @@ var useStyles$7 = makeStyles(function (theme) { return ({
6673
6676
  }
6674
6677
  }); });
6675
6678
  var buttonsCellRenderer = function (params) {
6676
- var classes = useStyles$7();
6679
+ var classes = useStyles$9();
6677
6680
  var setUserId = params.setUserId, setOpenModalEditDataUser = params.setOpenModalEditDataUser, setOpenModalDeleteUser = params.setOpenModalDeleteUser, setOpenModalChangePasswordd = params.setOpenModalChangePasswordd, showContextMenu = params.showContextMenu;
6678
6681
  return (React__default.createElement(Grid, { container: true, style: {
6679
6682
  height: "100%",
@@ -6872,7 +6875,7 @@ var useUsersOptionsFunctions = function (_a) {
6872
6875
  };
6873
6876
  };
6874
6877
 
6875
- var useStyles$6 = makeStyles(function (theme) { return ({
6878
+ var useStyles$8 = makeStyles(function (theme) { return ({
6876
6879
  root: {
6877
6880
  "& .ag-icon-menu": {
6878
6881
  display: "none"
@@ -6943,7 +6946,7 @@ var TableUsers = function (_a) {
6943
6946
  var _c = useState(false), openModalEditDataUser = _c[0], setOpenModalEditDataUser = _c[1];
6944
6947
  var _d = useState(false), openModalDeleteUser = _d[0], setOpenModalDeleteUser = _d[1];
6945
6948
  var _e = useState(false), openModalChangePassword = _e[0], setOpenModalChangePasswordd = _e[1];
6946
- var classes = useStyles$6();
6949
+ var classes = useStyles$8();
6947
6950
  var _f = useState(null), userId = _f[0], setUserId = _f[1];
6948
6951
  var _g = useState(null), gridApi = _g[0], setGridApi = _g[1];
6949
6952
  var loadingOverlayComponent = useMemo(function () {
@@ -7583,10 +7586,9 @@ var MESApiService = /** @class */ (function () {
7583
7586
  return [2 /*return*/, { ok: true, data: response.data }];
7584
7587
  case 3:
7585
7588
  err_1 = _a.sent();
7586
- // console.log("fromCatch", err);
7587
7589
  this.hasErrors = true;
7588
7590
  this.error = err_1;
7589
- return [2 /*return*/, { ok: false, message: err_1.toString() }];
7591
+ return [2 /*return*/, { ok: false, message: getError(err_1) }];
7590
7592
  case 4: return [2 /*return*/];
7591
7593
  }
7592
7594
  });
@@ -8283,7 +8285,7 @@ var getShiftsRangeByParameters = function (period, Start, End, StartShiftId, End
8283
8285
  });
8284
8286
  };
8285
8287
 
8286
- var useStyles$5 = makeStyles(function (theme) {
8288
+ var useStyles$7 = makeStyles(function (theme) {
8287
8289
  var _a, _b, _c;
8288
8290
  return ({
8289
8291
  container: {
@@ -8331,7 +8333,7 @@ var moment = getMomentTz();
8331
8333
  var ShiftPeriodNavigatorControl = function (_a) {
8332
8334
  var _b;
8333
8335
  var value = _a.value, onChange = _a.onChange, _c = _a.showShiftAndCrews, showShiftAndCrews = _c === void 0 ? true : _c, _d = _a.dateFormat, dateFormat = _d === void 0 ? "MM/DD/YYYY HH:mm a" : _d, _e = _a.periodOptions, periodOptions = _e === void 0 ? DEFAULT_PERIOD_OPTIONS : _e;
8334
- var classes = useStyles$5();
8336
+ var classes = useStyles$7();
8335
8337
  var _f = useState(((_b = periodOptions[0]) === null || _b === void 0 ? void 0 : _b.value) || "Day"), period = _f[0], setPeriod = _f[1];
8336
8338
  var _g = useState(false), loadingShiftPeriodList = _g[0], setLoadingShiftPeriodList = _g[1];
8337
8339
  var _h = useState(""); _h[0]; var setError = _h[1];
@@ -8546,7 +8548,7 @@ var ShiftPeriodNavigatorControl = function (_a) {
8546
8548
  React__default.createElement(SkipNextIcon, null)))));
8547
8549
  };
8548
8550
 
8549
- var useStyles$4 = makeStyles(function (theme) { return ({
8551
+ var useStyles$6 = makeStyles(function (theme) { return ({
8550
8552
  contextMenu: {
8551
8553
  backgroundColor: "#fff",
8552
8554
  borderRadius: "2px",
@@ -8638,7 +8640,7 @@ var useContextMenuMESF = function () { return useContext(ContextMenuMESFContext)
8638
8640
 
8639
8641
  var ContextMenu$1 = function () {
8640
8642
  var _a = useContextMenuMESF(), show = _a.show, position = _a.position, options = _a.options;
8641
- var classes = useStyles$4();
8643
+ var classes = useStyles$6();
8642
8644
  var menuRef = useRef(null);
8643
8645
  var _b = useState("0"), x = _b[0], setX = _b[1];
8644
8646
  var _c = useState("0"), y = _c[0], setY = _c[1];
@@ -9502,6 +9504,309 @@ function Header$1(_a) {
9502
9504
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } })));
9503
9505
  }
9504
9506
 
9507
+ var useStyles$5 = makeStyles(function (theme) { return ({
9508
+ root: {
9509
+ width: "100%",
9510
+ maxWidth: 800,
9511
+ margin: "0 auto",
9512
+ padding: theme.spacing(3)
9513
+ },
9514
+ messageList: {
9515
+ height: 400,
9516
+ overflow: "auto",
9517
+ marginBottom: theme.spacing(2),
9518
+ padding: theme.spacing(2),
9519
+ backgroundColor: theme.palette.background["default"]
9520
+ },
9521
+ messageForm: {
9522
+ display: "flex",
9523
+ gap: theme.spacing(2)
9524
+ },
9525
+ messageInput: {
9526
+ flexGrow: 1
9527
+ },
9528
+ timestamp: {
9529
+ color: theme.palette.text.secondary,
9530
+ fontSize: "0.8rem"
9531
+ },
9532
+ statusChip: {
9533
+ marginBottom: theme.spacing(2)
9534
+ }
9535
+ }); });
9536
+ var ChatComponent = function () {
9537
+ var classes = useStyles$5();
9538
+ var _a = useState("/ws"), hubUrl = _a[0]; _a[1];
9539
+ var _b = useState(null), connection = _b[0], setConnection = _b[1];
9540
+ var _c = useState({
9541
+ isConnected: false
9542
+ }), connectionState = _c[0], setConnectionState = _c[1];
9543
+ var _d = useState([]), messages = _d[0], setMessages = _d[1];
9544
+ var _e = useState(""), user = _e[0], setUser = _e[1];
9545
+ var _f = useState(""), message = _f[0], setMessage = _f[1];
9546
+ var messageEndRef = useRef(null);
9547
+ var latestMessages = useRef([]);
9548
+ latestMessages.current = messages;
9549
+ var scrollToBottom = function () {
9550
+ var _a;
9551
+ (_a = messageEndRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
9552
+ };
9553
+ useEffect(function () {
9554
+ scrollToBottom();
9555
+ }, [messages]);
9556
+ var startConnection = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
9557
+ var newConnection, err_1;
9558
+ return __generator(this, function (_a) {
9559
+ switch (_a.label) {
9560
+ case 0:
9561
+ _a.trys.push([0, 2, , 3]);
9562
+ newConnection = new HubConnectionBuilder()
9563
+ .withUrl(hubUrl)
9564
+ .withAutomaticReconnect()
9565
+ .configureLogging(LogLevel$1.Information)
9566
+ .build();
9567
+ newConnection.on("ReceiveMessage", function (user, message) {
9568
+ var newMessage = {
9569
+ user: user,
9570
+ message: message,
9571
+ timestamp: new Date()
9572
+ };
9573
+ setMessages(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newMessage], false); });
9574
+ });
9575
+ newConnection.on("UserConnected", function (connectionId) {
9576
+ console.log("User connected: ".concat(connectionId));
9577
+ setConnectionState(function (prev) { return (__assign(__assign({}, prev), { isConnected: true, connectionId: connectionId })); });
9578
+ });
9579
+ newConnection.on("UserDisconnected", function (connectionId) {
9580
+ console.log("User disconnected: ".concat(connectionId));
9581
+ if (connectionId === connectionState.connectionId) {
9582
+ setConnectionState(function (prev) { return (__assign(__assign({}, prev), { isConnected: false, connectionId: undefined })); });
9583
+ }
9584
+ });
9585
+ return [4 /*yield*/, newConnection.start()];
9586
+ case 1:
9587
+ _a.sent();
9588
+ setConnection(newConnection);
9589
+ console.log("SignalR Connected");
9590
+ return [3 /*break*/, 3];
9591
+ case 2:
9592
+ err_1 = _a.sent();
9593
+ console.error("SignalR Connection Error:", err_1);
9594
+ setConnectionState(function (prev) { return (__assign(__assign({}, prev), { isConnected: false, error: err_1 })); });
9595
+ return [3 /*break*/, 3];
9596
+ case 3: return [2 /*return*/];
9597
+ }
9598
+ });
9599
+ }); }, [hubUrl]);
9600
+ useEffect(function () {
9601
+ startConnection();
9602
+ return function () {
9603
+ connection === null || connection === void 0 ? void 0 : connection.stop();
9604
+ };
9605
+ }, [startConnection]);
9606
+ var sendMessage = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9607
+ var err_2;
9608
+ return __generator(this, function (_a) {
9609
+ switch (_a.label) {
9610
+ case 0:
9611
+ e.preventDefault();
9612
+ if (!connection || !message || !user)
9613
+ return [2 /*return*/];
9614
+ _a.label = 1;
9615
+ case 1:
9616
+ _a.trys.push([1, 3, , 4]);
9617
+ return [4 /*yield*/, connection.invoke("SendMessage", user, message)];
9618
+ case 2:
9619
+ _a.sent();
9620
+ setMessage("");
9621
+ return [3 /*break*/, 4];
9622
+ case 3:
9623
+ err_2 = _a.sent();
9624
+ console.error("Error sending message:", err_2);
9625
+ return [3 /*break*/, 4];
9626
+ case 4: return [2 /*return*/];
9627
+ }
9628
+ });
9629
+ }); };
9630
+ return (React__default.createElement(Paper, { className: classes.root, elevation: 3 },
9631
+ React__default.createElement(Box, { mb: 2 },
9632
+ React__default.createElement(Chip, { label: connectionState.isConnected ? "Connected" : "Disconnected", color: connectionState.isConnected ? "primary" : "default", className: classes.statusChip }),
9633
+ connectionState.error && (React__default.createElement(Typography$1, { color: "error" },
9634
+ "Error: ",
9635
+ connectionState.error.message))),
9636
+ React__default.createElement(Paper, { className: classes.messageList, variant: "outlined" },
9637
+ React__default.createElement(List, null,
9638
+ messages.map(function (msg, index) { return (React__default.createElement(ListItem, { key: index },
9639
+ React__default.createElement(ListItemText, { primary: React__default.createElement(Typography$1, null,
9640
+ React__default.createElement("strong", null,
9641
+ msg.user,
9642
+ ":"),
9643
+ " ",
9644
+ msg.message), secondary: React__default.createElement("span", { className: classes.timestamp }, msg.timestamp.toLocaleTimeString()) }))); }),
9645
+ React__default.createElement("div", { ref: messageEndRef }))),
9646
+ React__default.createElement("form", { onSubmit: sendMessage, className: classes.messageForm },
9647
+ React__default.createElement(TextField, { value: user, onChange: function (e) { return setUser(e.target.value); }, label: "Your name", variant: "outlined", size: "small" }),
9648
+ React__default.createElement(TextField, { className: classes.messageInput, value: message, onChange: function (e) { return setMessage(e.target.value); }, label: "Type a message", variant: "outlined", size: "small" }),
9649
+ React__default.createElement(Button, { type: "submit", variant: "contained", color: "primary", disabled: !connectionState.isConnected || !user || !message, endIcon: React__default.createElement(Send, null) }, "Send"))));
9650
+ };
9651
+
9652
+ var useStyles$4 = makeStyles(function (theme) { return ({
9653
+ root: {
9654
+ height: "100vh",
9655
+ padding: theme.spacing(4)
9656
+ },
9657
+ header: {
9658
+ marginBottom: theme.spacing(4),
9659
+ display: "flex",
9660
+ justifyContent: "space-between",
9661
+ alignItems: "center"
9662
+ },
9663
+ gridContainer: {
9664
+ height: "75%",
9665
+ width: "100%"
9666
+ },
9667
+ autocomplete: {
9668
+ marginTop: theme.spacing(2),
9669
+ marginBottom: theme.spacing(2)
9670
+ }
9671
+ }); });
9672
+ var QueryCacheInvalidations = function () {
9673
+ var classes = useStyles$4();
9674
+ var _a = useState([]), rowData = _a[0], setRowData = _a[1];
9675
+ var _b = useState([]), actions = _b[0], setActions = _b[1];
9676
+ var _c = useState(""), modal = _c[0], setModal = _c[1];
9677
+ var _d = useState(null); _d[0]; var setSelectedRow = _d[1];
9678
+ var _e = useState(""); _e[0]; var setNotification = _e[1];
9679
+ var _f = useState(false), isLoading = _f[0], setIsLoading = _f[1];
9680
+ var _g = useForm({
9681
+ defaultValues: {
9682
+ source: null,
9683
+ targets: []
9684
+ }
9685
+ }), control = _g.control, reset = _g.reset, handleSubmit = _g.handleSubmit; _g.setValue;
9686
+ var columnDefs = [
9687
+ { field: "SourceId", headerName: "Source ID" },
9688
+ { field: "Source", headerName: "Source" },
9689
+ { field: "TargetsCSV", headerName: "Targets" },
9690
+ {
9691
+ headerName: "Actions",
9692
+ cellRenderer: function (params) { return (React__default.createElement(Box, null,
9693
+ React__default.createElement(Button, { variant: "contained", color: "primary", onClick: function () { return handleEdit(params.data); } }, "Edit"))); }
9694
+ },
9695
+ ];
9696
+ var fetchData = function () { return __awaiter(void 0, void 0, void 0, function () {
9697
+ var api, resp, error_1;
9698
+ return __generator(this, function (_a) {
9699
+ switch (_a.label) {
9700
+ case 0:
9701
+ _a.trys.push([0, 2, , 3]);
9702
+ api = new MESApiService();
9703
+ return [4 /*yield*/, api.callV2("[SYSTEM].[GetQueryCacheInvalidations]", [])];
9704
+ case 1:
9705
+ resp = _a.sent();
9706
+ if (resp.ok && resp.data) {
9707
+ setRowData(resp.data.tables[0].rows);
9708
+ setActions(resp.data.tables[1].rows);
9709
+ }
9710
+ else {
9711
+ setNotification("Failed to fetch data");
9712
+ }
9713
+ return [3 /*break*/, 3];
9714
+ case 2:
9715
+ error_1 = _a.sent();
9716
+ setNotification("Failed to fetch data");
9717
+ console.error("Fetch error:", error_1);
9718
+ return [3 /*break*/, 3];
9719
+ case 3: return [2 /*return*/];
9720
+ }
9721
+ });
9722
+ }); };
9723
+ useEffect(function () {
9724
+ fetchData();
9725
+ }, []);
9726
+ var handleAdd = function () {
9727
+ reset({
9728
+ source: null,
9729
+ targets: []
9730
+ });
9731
+ setModal("add");
9732
+ };
9733
+ var handleEdit = function (row) {
9734
+ setSelectedRow(row);
9735
+ var targetsIds = row.TargetsCSV.split(",").map(Number);
9736
+ reset({
9737
+ source: actions.find(function (a) { return a.ActionId === row.SourceId; }) || null,
9738
+ targets: actions.filter(function (a) { return targetsIds.includes(a.ActionId); })
9739
+ });
9740
+ setModal("edit");
9741
+ };
9742
+ var onSubmit = function (data) { return __awaiter(void 0, void 0, void 0, function () {
9743
+ var api, resp, error_2;
9744
+ return __generator(this, function (_a) {
9745
+ switch (_a.label) {
9746
+ case 0:
9747
+ if (!data.source)
9748
+ return [2 /*return*/];
9749
+ setIsLoading(true);
9750
+ _a.label = 1;
9751
+ case 1:
9752
+ _a.trys.push([1, 3, , 4]);
9753
+ api = new MESApiService();
9754
+ return [4 /*yield*/, api.callV2("[SYSTEM].[UpsertQueryCacheInvalidations]", [
9755
+ {
9756
+ name: "SourceId",
9757
+ value: data.source.ActionId
9758
+ },
9759
+ {
9760
+ name: "TargetsCSV",
9761
+ value: data.targets.map(function (t) { return t.ActionId; }).join(",")
9762
+ },
9763
+ ])];
9764
+ case 2:
9765
+ resp = _a.sent();
9766
+ if (resp.ok) {
9767
+ setNotification("Operation successful");
9768
+ setModal("");
9769
+ fetchData();
9770
+ }
9771
+ else {
9772
+ setNotification("Operation failed");
9773
+ }
9774
+ return [3 /*break*/, 4];
9775
+ case 3:
9776
+ error_2 = _a.sent();
9777
+ setNotification("Failed to perform operation");
9778
+ console.error("Operation error:", error_2);
9779
+ return [3 /*break*/, 4];
9780
+ case 4:
9781
+ setIsLoading(false);
9782
+ return [2 /*return*/];
9783
+ }
9784
+ });
9785
+ }); };
9786
+ return (React__default.createElement(Box, { className: classes.root },
9787
+ React__default.createElement(Box, { className: classes.header },
9788
+ React__default.createElement(Typography$1, { variant: "h4", component: "h2" }, "Query Cache Invalidations"),
9789
+ React__default.createElement(Button, { variant: "contained", color: "primary", onClick: handleAdd }, "Add New")),
9790
+ React__default.createElement(Box, { className: "".concat(classes.gridContainer, " ag-theme-material") },
9791
+ React__default.createElement(AgGridReact, { rowData: rowData, columnDefs: columnDefs, defaultColDef: { flex: 1 } })),
9792
+ React__default.createElement(MesfModal, { title: modal === "add" ? "Add Cache Invalidation" : "Edit Cache Invalidation", open: ["add", "edit"].includes(modal), handleClose: function () { return setModal(""); } },
9793
+ React__default.createElement("form", { onSubmit: handleSubmit(onSubmit) },
9794
+ React__default.createElement(MesfModal.Content, { dividers: true },
9795
+ React__default.createElement(Grid, { container: true, spacing: 3 },
9796
+ React__default.createElement(Grid, { item: true, xs: 12 },
9797
+ React__default.createElement(Controller, { control: control, name: "source", render: function (params) { return (React__default.createElement(Autocomplete, { options: actions, getOptionLabel: function (option) { return "".concat(option.ActionName); }, value: params.field.value, onChange: function (_, value) { return params.field.onChange(value); }, renderInput: function (params) { return (React__default.createElement(TextField, __assign({}, params, { label: "Select Source Action", variant: "outlined" }))); }, className: classes.autocomplete, disabled: modal === "edit" })); } })),
9798
+ React__default.createElement(Grid, { item: true, xs: 12 },
9799
+ React__default.createElement(Controller, { control: control, name: "targets", render: function (params) { return (React__default.createElement(Autocomplete, { multiple: true, options: actions.filter(function (a) { var _a; return a.ActionId !== ((_a = control._formValues.source) === null || _a === void 0 ? void 0 : _a.ActionId); }), getOptionLabel: function (option) { return option.ActionName; }, value: params.field.value, onChange: function (_, value) {
9800
+ params.field.onChange(value);
9801
+ }, renderInput: function (params) { return (React__default.createElement(TextField, __assign({}, params, { label: "Select Target Actions", variant: "outlined" }))); }, className: classes.autocomplete })); } })))),
9802
+ React__default.createElement(MesfModal.Actions, null,
9803
+ React__default.createElement(Grid, { container: true, spacing: 2, justifyContent: "flex-end" },
9804
+ React__default.createElement(Grid, { item: true, md: 3, xs: 12, style: { margin: 0 } },
9805
+ React__default.createElement(Button, { fullWidth: true, variant: "contained", color: "default", onClick: function () { return setModal(""); } }, "Cancel")),
9806
+ React__default.createElement(Grid, { item: true, md: 3, xs: 12, style: { margin: 0 } },
9807
+ React__default.createElement(Button, { fullWidth: true, startIcon: isLoading && React__default.createElement(CircularProgress, { size: "1rem" }), disabled: isLoading, variant: "contained", color: "primary", type: "submit" }, "Save"))))))));
9808
+ };
9809
+
9505
9810
  var SettingsInitialState = {
9506
9811
  settings: [],
9507
9812
  settingSelected: null
@@ -10282,6 +10587,16 @@ function Configuration() {
10282
10587
  path: "settings",
10283
10588
  sidebar: function () { return React__default.createElement("div", null, "Settings"); },
10284
10589
  main: function () { return React__default.createElement(Settings, null); }
10590
+ },
10591
+ {
10592
+ path: "real-time/client",
10593
+ sidebar: function () { return React__default.createElement("div", null, "Client"); },
10594
+ main: function () { return React__default.createElement(ChatComponent, null); }
10595
+ },
10596
+ {
10597
+ path: "real-time/config",
10598
+ sidebar: function () { return React__default.createElement("div", null, "Config"); },
10599
+ main: function () { return React__default.createElement(QueryCacheInvalidations, null); }
10285
10600
  }
10286
10601
  ], customConfiguration, true);
10287
10602
  return (React__default.createElement(GenericPanel, { title: "Configuration", description: "" },
@@ -10300,6 +10615,12 @@ function Configuration() {
10300
10615
  React__default.createElement(MenuItem, { selected: option === "profiles", className: "p-0" },
10301
10616
  React__default.createElement(Link, { to: "/configuration/profiles", className: "nav-link" }, "Profiles"))),
10302
10617
  React__default.createElement(CustomSidebar, { option: option }),
10618
+ React__default.createElement("h3", { className: "mes-menu-group" }, "Real Time"),
10619
+ React__default.createElement(MenuList, { className: "mes-submenu" },
10620
+ React__default.createElement(MenuItem, { selected: option === "real-time", className: "p-0" },
10621
+ React__default.createElement(Link, { to: "/configuration/real-time/client", className: "nav-link" }, "Client")),
10622
+ React__default.createElement(MenuItem, { selected: option === "real-time", className: "p-0" },
10623
+ React__default.createElement(Link, { to: "/configuration/real-time/config", className: "nav-link" }, "Config"))),
10303
10624
  React__default.createElement("h3", { className: "mes-menu-group" }, "Maintenance"),
10304
10625
  React__default.createElement(MenuList, { className: "mes-submenu" },
10305
10626
  React__default.createElement(MenuItem, { selected: option === "logs", className: "p-0" },
@@ -13449,5 +13770,5 @@ var areaSelector = /*#__PURE__*/Object.freeze({
13449
13770
  AreaSelector: AreaSelector
13450
13771
  });
13451
13772
 
13452
- export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, ContextMenu$1 as ContextMenu, ContextMenuMESFProvider, CurrencyFormatter, DataGridControl, DateFormatter, DateTimeFormatter, ErrorModal, FetchError, FilterPanel, GenericPanel, GenericTable, GetCrewColor, GetShiftColor, HorizontalTextControl, IntegerFormatter, Login, Logout, LongFilterPanel, MESApiService, MESFMain, MESSAGE_API, MESSAGE_ERRORS, MasterDetailPanel, MesfModal, ModalTreeFilterControl, MultipleSelectorControl, NumberFormatter, NumericTextControl, ShiftDayNavigatorControl, ShiftNavigatorProvider, ShiftPeriodNavigatorControl, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TimeService, TreePickerControl, TreePickerControlV2, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, dxtServerTimeZone, dxtToLocalServerTime, dxtToUTC, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getMomentTz, getProfiles, getShiftByParameters, getShiftStyle, getShiftsRangeByParameters, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useContextMenuMESF, useShiftNavigator, useShiftNavigatorManager, useStyles$4 as useStyles, useToken, useUTLSettingsContext, useUserContext };
13773
+ export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, ContextMenu$1 as ContextMenu, ContextMenuMESFProvider, CurrencyFormatter, DataGridControl, DateFormatter, DateTimeFormatter, ErrorModal, FetchError, FilterPanel, GenericPanel, GenericTable, GetCrewColor, GetShiftColor, HorizontalTextControl, IntegerFormatter, Login, Logout, LongFilterPanel, MESApiService, MESFMain, MESSAGE_API, MESSAGE_ERRORS, MasterDetailPanel, MesfModal, ModalTreeFilterControl, MultipleSelectorControl, NumberFormatter, NumericTextControl, ShiftDayNavigatorControl, ShiftNavigatorProvider, ShiftPeriodNavigatorControl, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TimeService, TreePickerControl, TreePickerControlV2, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, dxtServerTimeZone, dxtToLocalServerTime, dxtToUTC, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getMomentTz, getProfiles, getShiftByParameters, getShiftStyle, getShiftsRangeByParameters, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useContextMenuMESF, useShiftNavigator, useShiftNavigatorManager, useStyles$6 as useStyles, useToken, useUTLSettingsContext, useUserContext };
13453
13774
  //# sourceMappingURL=index.esm.js.map