@dexteel/mesf-core 4.10.3 → 4.10.5

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/CHANGELOG.md CHANGED
@@ -1,4 +1,16 @@
1
- # CHANGELOG
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+ ### [4.10.5](https://github.com/dexteel/mesf-core-frontend/compare/v4.10.4...v4.10.5) (2024-05-02)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **trending:** Load view bug when you add and remove a view tag ([eb8a155](https://github.com/dexteel/mesf-core-frontend/commit/eb8a1553cad19fa9be106716f8958728fc1507dc))
11
+
12
+ ### [4.10.4](https://github.com/dexteel/mesf-core-frontend/compare/v4.10.2...v4.10.4) (2024-04-29)
13
+
2
14
  ## 4.10.3
3
15
  - Trending: Fix first view
4
16
  ## 4.10.2
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { LicenseManager } from 'ag-grid-enterprise';
2
2
  import { Typography, TextField, makeStyles as makeStyles$1, Button as Button$1, Grid as Grid$1, Dialog as Dialog$1, DialogTitle as DialogTitle$2, DialogContent as DialogContent$2, DialogContentText, DialogActions as DialogActions$2, FormHelperText, CircularProgress as CircularProgress$1, Badge, FormControlLabel, Checkbox, Snackbar as Snackbar$1, Paper as Paper$1, MenuItem as MenuItem$1, useTheme as useTheme$1, Tooltip, Box, Divider, IconButton as IconButton$1, FormControl as FormControl$1, Select as Select$1, debounce, createStyles as createStyles$1, List, ListItem, ListItemText } from '@material-ui/core';
3
- import { values, get, isNil as isNil$1, isEmpty, isNaN, round } from 'lodash-es';
3
+ import { values, get, isNil as isNil$1, isEmpty, isNaN, round, 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
6
  import { Alert as Alert$1, Modal as Modal$1, Navbar, Container, Nav, NavDropdown } from 'react-bootstrap';
@@ -9,7 +9,7 @@ import DialogContent$1 from '@material-ui/core/DialogContent';
9
9
  import DialogActions$1 from '@material-ui/core/DialogActions';
10
10
  import Dialog from '@material-ui/core/Dialog';
11
11
  import Button from '@material-ui/core/Button';
12
- import { Outlet, useNavigate, useSearchParams, Link, useParams, Routes, Route, Navigate, BrowserRouter } from 'react-router-dom';
12
+ import { Outlet, useNavigate, useSearchParams, Link, useParams, Navigate, Routes, Route, BrowserRouter } from 'react-router-dom';
13
13
  import { useMsal, MsalProvider } from '@azure/msal-react';
14
14
  import { LogLevel, PublicClientApplication } from '@azure/msal-browser';
15
15
  import { useComplexState } from 'use-complex-state';
@@ -36,6 +36,7 @@ import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
36
36
  import CreateIcon from '@material-ui/icons/Create';
37
37
  import DeleteIcon from '@material-ui/icons/Delete';
38
38
  import LockIcon from '@material-ui/icons/Lock';
39
+ import SaveIcon from '@material-ui/icons/Save';
39
40
  import SkipNextIcon from '@material-ui/icons/SkipNext';
40
41
  import { Line } from 'react-chartjs-2';
41
42
  import PersonPinCircleIcon from '@material-ui/icons/PersonPinCircle';
@@ -8620,7 +8621,22 @@ var tagColors = [
8620
8621
  "#e74b3c",
8621
8622
  "red",
8622
8623
  "#bf3b2c", // dark red
8623
- ];
8624
+ ];
8625
+ var availableColors = __spreadArray([], tagColors, true);
8626
+ var lastColor = null;
8627
+ var getRandomColor = function () {
8628
+ if (availableColors.length === 0) {
8629
+ availableColors = __spreadArray([], tagColors, true);
8630
+ if (lastColor && availableColors.length > 1) {
8631
+ availableColors.splice(availableColors.indexOf(lastColor), 1);
8632
+ }
8633
+ }
8634
+ var randomIndex = Math.floor(Math.random() * availableColors.length);
8635
+ var color = availableColors[randomIndex];
8636
+ availableColors.splice(randomIndex, 1);
8637
+ lastColor = color;
8638
+ return color;
8639
+ };
8624
8640
 
8625
8641
  var Swatch = function (_a) {
8626
8642
  var color = _a.color, onSelect = _a.onSelect;
@@ -9037,7 +9053,7 @@ var TagFolderCustomNode = function (_a) {
9037
9053
  ((_c = node.data) === null || _c === void 0 ? void 0 : _c.TagName) &&
9038
9054
  React__default.createElement(React__default.Fragment, null,
9039
9055
  ((_d = node.data) === null || _d === void 0 ? void 0 : _d.TagTypeCode) && ((_e = node.data) === null || _e === void 0 ? void 0 : _e.TagTypeCode) !== 'F' && (React__default.createElement("div", { className: classes.dataTypeOfTree, style: {
9040
- backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === 'A' ? 'blue' : 'red',
9056
+ backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === 'A' ? "#AD48C4" : "#C46F48",
9041
9057
  margin: "0 5px"
9042
9058
  } }, (_g = node.data) === null || _g === void 0 ? void 0 : _g.TagTypeCode)),
9043
9059
  React__default.createElement(Tooltip, { title: node.data.TagName, placement: "top", arrow: true },
@@ -9567,8 +9583,13 @@ var LoadViewModal = function (_a) {
9567
9583
  var handleDeleteView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9568
9584
  return __generator(this, function (_a) {
9569
9585
  e.stopPropagation();
9570
- setViewForDelete(view);
9571
- setDeleteViewModalOpen(true);
9586
+ if (view.ViewId === (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId)) {
9587
+ setError('Can not delete current view');
9588
+ }
9589
+ else {
9590
+ setViewForDelete(view);
9591
+ setDeleteViewModalOpen(true);
9592
+ }
9572
9593
  return [2 /*return*/];
9573
9594
  });
9574
9595
  }); };
@@ -9582,8 +9603,8 @@ var LoadViewModal = function (_a) {
9582
9603
  var handleAllViewsCheckbox = function () {
9583
9604
  setAllViewsChecked(function (prev) { return !prev; });
9584
9605
  };
9585
- var privateViews = useMemo(function () {
9586
- return views.filter(function (v) { return v.IsPublic === false; });
9606
+ var publicViews = useMemo(function () {
9607
+ return views.filter(function (v) { return v.IsPublic === true; });
9587
9608
  }, [views, allViewsChecked]);
9588
9609
  return (React__default.createElement("div", null,
9589
9610
  React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Views' },
@@ -9595,7 +9616,7 @@ var LoadViewModal = function (_a) {
9595
9616
  React__default.createElement("input", { type: "checkbox", checked: allViewsChecked, onChange: handleAllViewsCheckbox }),
9596
9617
  React__default.createElement(Typography, null, "All Views")))),
9597
9618
  React__default.createElement(Grid$1, { item: true, md: 12 },
9598
- React__default.createElement(Autocomplete, { size: 'small', id: "list-of-views", options: allViewsChecked ? views : privateViews, getOptionLabel: function (option) { return option.ViewName; }, onChange: function (ev, val) { return setViewSelected(val); }, style: { width: "100%" }, renderOption: function (option) { return (React__default.createElement("div", { className: classes.optionContainer },
9619
+ React__default.createElement(Autocomplete, { size: 'small', id: "list-of-views", noOptionsText: allViewsChecked ? "No views detected, please create a new view" : "No private views detected, please create a new view .", options: allViewsChecked ? views : publicViews, getOptionLabel: function (option) { return option.ViewName; }, onChange: function (ev, val) { return setViewSelected(val); }, defaultValue: viewSelected, style: { width: "100%" }, renderOption: function (option) { return (React__default.createElement("div", { className: classes.optionContainer },
9599
9620
  React__default.createElement("div", { className: classes.optionLabel }, option.ViewName),
9600
9621
  React__default.createElement("div", { className: classes.iconContainer },
9601
9622
  option.IsPublic ? '' :
@@ -9606,7 +9627,7 @@ var LoadViewModal = function (_a) {
9606
9627
  React__default.createElement(CreateIcon, { fontSize: 'small', color: 'primary', style: { height: "18px", width: '18px', cursor: 'pointer' } })),
9607
9628
  React__default.createElement(IconButton$1, { onClick: function (e) { return handleDeleteView(option, e); } },
9608
9629
  React__default.createElement(DeleteIcon, { fontSize: 'small', color: 'secondary', style: { height: "18px", width: '18px', cursor: 'pointer' } }))))); }, renderInput: function (params) { return React__default.createElement(TextField, __assign({}, params, { label: "Views", variant: "outlined" })); } })))) :
9609
- (React__default.createElement(Typography, null, "No tag views detected, please add one")))),
9630
+ (React__default.createElement(Typography, null, "No views detected, please add one")))),
9610
9631
  React__default.createElement(MesfModal.Actions, null,
9611
9632
  React__default.createElement("div", { style: { paddingTop: "1rem" } },
9612
9633
  React__default.createElement(Button$1, { variant: 'outlined', style: { marginRight: "1rem" }, color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel"),
@@ -9634,7 +9655,7 @@ var SaveAsViewModal = function (_a) {
9634
9655
  var _h = useState(''), newView = _h[0], setNewView = _h[1];
9635
9656
  var handleCheck = function () { return setIsPublic(!isPublic); };
9636
9657
  var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9637
- var resp, ViewId_1, results;
9658
+ var resp, ViewId_1, shouldClose_1;
9638
9659
  return __generator(this, function (_a) {
9639
9660
  switch (_a.label) {
9640
9661
  case 0:
@@ -9644,25 +9665,22 @@ var SaveAsViewModal = function (_a) {
9644
9665
  resp = _a.sent();
9645
9666
  if (!resp.ok) return [3 /*break*/, 3];
9646
9667
  ViewId_1 = resp.data.returnValue;
9668
+ shouldClose_1 = true;
9647
9669
  return [4 /*yield*/, Promise.allSettled(viewTags.map(function (_a) {
9648
9670
  var TagId = _a.TagId, Color = _a.Color, MinScale = _a.MinScale, MaxScale = _a.MaxScale, IsAutoScale = _a.IsAutoScale, IsVisible = _a.IsVisible, Unit = _a.Unit;
9649
9671
  upsertViewTag(ViewId_1, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
9650
9672
  .then(function (r) {
9651
9673
  if (!r.ok) {
9652
- setError(r.message);
9674
+ setError(function (prevErr) { return "".concat(prevErr, ". ").concat(r.message); });
9675
+ if (shouldClose_1) {
9676
+ shouldClose_1 = false;
9677
+ }
9653
9678
  }
9654
9679
  });
9655
9680
  }))];
9656
9681
  case 2:
9657
- results = _a.sent();
9658
- results.forEach(function (result, index) {
9659
- if (result.status === "rejected") {
9660
- setError("Tag ".concat(index, " failed with reason: ").concat(result.reason));
9661
- }
9662
- else {
9663
- handleClose(true);
9664
- }
9665
- });
9682
+ _a.sent();
9683
+ handleClose(shouldClose_1);
9666
9684
  return [3 /*break*/, 4];
9667
9685
  case 3:
9668
9686
  setError(resp.message);
@@ -9768,6 +9786,25 @@ var useTagsDataTable = function (_a) {
9768
9786
  };
9769
9787
 
9770
9788
  var useTagsTableStyles = makeStyles$1(function (theme) { return ({
9789
+ topTitles: {
9790
+ border: "0.0625rem solid black",
9791
+ borderBottom: "none",
9792
+ backgroundColor: "#f5f7f7",
9793
+ color: "#333",
9794
+ fontWeight: "normal",
9795
+ textAlign: "center",
9796
+ padding: "6px 0"
9797
+ },
9798
+ bottomTitlesRow: {
9799
+ '& th': {
9800
+ border: "0.0625rem solid black",
9801
+ backgroundColor: "#f5f7f7",
9802
+ color: "#333",
9803
+ fontWeight: "normal",
9804
+ textAlign: "center",
9805
+ padding: "6px 0"
9806
+ }
9807
+ },
9771
9808
  checkbox: {
9772
9809
  '& input[type="checkbox"]': {
9773
9810
  zoom: 1.5
@@ -9779,17 +9816,6 @@ var useTagsTableStyles = makeStyles$1(function (theme) { return ({
9779
9816
  backgroundColor: "#f2f2f2"
9780
9817
  }
9781
9818
  },
9782
- topTitles: {
9783
- border: "0.0625rem black solid",
9784
- borderBottom: "none",
9785
- backgroundColor: "#e9ecef"
9786
- },
9787
- bottomTitlesRow: {
9788
- '& th': {
9789
- border: "1px black solid"
9790
- },
9791
- backgroundColor: "#e9ecef"
9792
- },
9793
9819
  doubleInput: {
9794
9820
  padding: "0",
9795
9821
  '& input[type="text"] ': {
@@ -9812,6 +9838,10 @@ var useTagsTableStyles = makeStyles$1(function (theme) { return ({
9812
9838
  textOverflow: 'ellipsis',
9813
9839
  whiteSpace: 'nowrap'
9814
9840
  },
9841
+ viewSelected: {
9842
+ width: '26.125rem',
9843
+ padding: "0"
9844
+ },
9815
9845
  autoScale: {
9816
9846
  width: '7.5rem'
9817
9847
  },
@@ -9820,7 +9850,8 @@ var useTagsTableStyles = makeStyles$1(function (theme) { return ({
9820
9850
  padding: "0"
9821
9851
  },
9822
9852
  visible: {
9823
- width: '3.75rem'
9853
+ width: '3.75rem',
9854
+ fontSize: "12px"
9824
9855
  },
9825
9856
  color: {
9826
9857
  width: '4.375rem'
@@ -9889,18 +9920,16 @@ var formatTimeDiffWithMs = function (start, end) {
9889
9920
  };
9890
9921
 
9891
9922
  var TableComponent = function (_a) {
9892
- var chartData = _a.chartData, cursorData = _a.cursorData, getTagsFromAPI = _a.getTagsFromAPI;
9923
+ var chartData = _a.chartData, cursorData = _a.cursorData, getTagsFromAPI = _a.getTagsFromAPI, viewTagForDelete = _a.viewTagForDelete, setViewTagForDelete = _a.setViewTagForDelete, selectedRowIndex = _a.selectedRowIndex, setSelectedRowIndex = _a.setSelectedRowIndex, handleRightClick = _a.handleRightClick; _a.setContextMenuPosition; var contextMenuPosition = _a.contextMenuPosition, openContextMenu = _a.openContextMenu, setOpenContextMenu = _a.setOpenContextMenu;
9893
9924
  var classes = useTagsTableStyles();
9894
9925
  var _b = useTrendingContext(), _c = _b.state, viewTags = _c.viewTags, viewSelected = _c.viewSelected, _d = _b.actions, setViewTags = _d.setViewTags, setViewTagsAndRefetch = _d.setViewTagsAndRefetch;
9895
9926
  var _e = useState({}); _e[0]; _e[1];
9896
9927
  var _f = useState(''), error = _f[0], setError = _f[1];
9897
9928
  var _g = useState(false); _g[0]; var setIsLoading = _g[1];
9898
- var _h = useState(null), viewTagForDelete = _h[0], setViewTagForDelete = _h[1];
9899
- var _j = useState(null), selectedRowIndex = _j[0], setSelectedRowIndex = _j[1];
9900
- var _k = useState(false), tagsTreeModalOpen = _k[0], setTagsTreeModalOpen = _k[1];
9901
- var _l = useState(false), saveAsViewModalOpen = _l[0], setSaveAsViewModalOpen = _l[1];
9902
- var _m = useState(false), loadViewOpen = _m[0], setLoadViewOpen = _m[1];
9903
- var _o = useState(''), snackbarMessage = _o[0], setSnackbarMessage = _o[1];
9929
+ var _h = useState(false), tagsTreeModalOpen = _h[0], setTagsTreeModalOpen = _h[1];
9930
+ var _j = useState(false), saveAsViewModalOpen = _j[0], setSaveAsViewModalOpen = _j[1];
9931
+ var _k = useState(false), loadViewOpen = _k[0], setLoadViewOpen = _k[1];
9932
+ var _l = useState(''), snackbarMessage = _l[0], setSnackbarMessage = _l[1];
9904
9933
  var dataTable = useTagsDataTable({ viewTags: viewTags, chartData: chartData, cursorData: cursorData });
9905
9934
  var handleChange = function (tagId, value, property) {
9906
9935
  var newTags = viewTags.map(function (tag) {
@@ -9936,7 +9965,7 @@ var TableComponent = function (_a) {
9936
9965
  var handleAddTag = function (newTag) {
9937
9966
  var newArr = __spreadArray([], viewTags, true);
9938
9967
  if (newTag) {
9939
- newArr.push(__assign(__assign({}, newTag), { IsVisible: true, TagType: newTag.TagTypeCode }));
9968
+ newArr.push(__assign(__assign({}, newTag), { IsVisible: true, TagType: newTag.TagTypeCode, Color: newTag.Color || getRandomColor() }));
9940
9969
  setViewTagsAndRefetch(newArr);
9941
9970
  }
9942
9971
  };
@@ -9954,16 +9983,47 @@ var TableComponent = function (_a) {
9954
9983
  return (React__default.createElement("div", { className: "context-menu", style: { top: y, left: x }, onClick: handleContextMenuClick },
9955
9984
  React__default.createElement("ul", null, options.map(function (option) { return (React__default.createElement("li", { key: option.id, onClick: option.onClick }, option.label)); }))));
9956
9985
  };
9957
- // Position state for the context menu
9958
- var _p = useState({ x: 0, y: 0 }), contextMenuPosition = _p[0], setContextMenuPosition = _p[1];
9959
- var contextMenuOptions = [
9960
- { id: 'delete', label: 'Remove Tag', onClick: function () { return handleDelete(); } },
9961
- { id: 'add', label: 'Tags Tree', onClick: function () { return setTagsTreeModalOpen(true); } },
9962
- { id: 'saveDefault', label: 'Save Default To Tag', onClick: function () { return handleSaveDefaultToTag(); } },
9963
- { id: 'saveView', label: 'Save View', onClick: function () { return handleSaveView(); } },
9964
- { id: 'saveViewAs', label: 'Save View as', onClick: function () { return setSaveAsViewModalOpen(true); } },
9965
- { id: 'loadView', label: 'Load View', onClick: function () { return setLoadViewOpen(true); } },
9966
- ];
9986
+ var contextMenuOptions = [];
9987
+ if (viewTagForDelete) {
9988
+ contextMenuOptions.push({
9989
+ id: 'delete', label: 'Remove Tag', onClick: function () {
9990
+ handleDelete();
9991
+ setOpenContextMenu(false);
9992
+ }
9993
+ });
9994
+ }
9995
+ contextMenuOptions.push.apply(contextMenuOptions, [
9996
+ {
9997
+ id: 'add', label: 'Tags Tree', onClick: function () {
9998
+ setTagsTreeModalOpen(true);
9999
+ setOpenContextMenu(false);
10000
+ }
10001
+ },
10002
+ {
10003
+ id: 'saveDefault', label: 'Save Default To Tag', onClick: function () {
10004
+ handleSaveDefaultToTag();
10005
+ setOpenContextMenu(false);
10006
+ }
10007
+ },
10008
+ {
10009
+ id: 'saveView', label: 'Save View', onClick: function () {
10010
+ handleSaveView();
10011
+ setOpenContextMenu(false);
10012
+ }
10013
+ },
10014
+ {
10015
+ id: 'saveViewAs', label: 'Save View as', onClick: function () {
10016
+ setSaveAsViewModalOpen(true);
10017
+ setOpenContextMenu(false);
10018
+ }
10019
+ },
10020
+ {
10021
+ id: 'loadView', label: 'Load View', onClick: function () {
10022
+ setLoadViewOpen(true);
10023
+ setOpenContextMenu(false);
10024
+ }
10025
+ },
10026
+ ]);
9967
10027
  var handleTagSelect = function (selectedTag) {
9968
10028
  var alreadySelected = viewTags.find(function (vt) { return vt.TagId === selectedTag.TagId; });
9969
10029
  if (!alreadySelected) {
@@ -10063,13 +10123,6 @@ var TableComponent = function (_a) {
10063
10123
  document.removeEventListener("keydown", handleKeyDown);
10064
10124
  };
10065
10125
  }, [selectedRowIndex]);
10066
- var handleRightClick = function (event, index) {
10067
- event.preventDefault();
10068
- event.stopPropagation(); // Prevent the click event from propagating to the document
10069
- setSelectedRowIndex(index);
10070
- setViewTagForDelete(viewTags[index]);
10071
- setContextMenuPosition({ x: event.clientX, y: event.clientY });
10072
- };
10073
10126
  var handleSaveDefaultToTag = function () { return __awaiter(void 0, void 0, void 0, function () {
10074
10127
  var _a, TagId, Alias, Color, MinScale, MaxScale, Unit, IsVisible, IsAutoScale, saveTagDefaultsResp, upsertViewTagResp;
10075
10128
  return __generator(this, function (_b) {
@@ -10096,15 +10149,27 @@ var TableComponent = function (_a) {
10096
10149
  });
10097
10150
  }); };
10098
10151
  return (React__default.createElement(React__default.Fragment, null,
10099
- React__default.createElement(Grid$1, { container: true, spacing: 1 },
10100
- React__default.createElement(Grid$1, { item: true, xs: 12 },
10152
+ React__default.createElement(Grid$1, { container: true, spacing: 1, alignContent: 'flex-start', style: {
10153
+ height: '100%',
10154
+ maxHeight: '100%',
10155
+ overflowY: 'auto'
10156
+ } },
10157
+ React__default.createElement(Grid$1, { item: true, xs: 12, style: {
10158
+ position: 'sticky',
10159
+ background: 'white',
10160
+ top: 0,
10161
+ left: 0,
10162
+ zIndex: 1000
10163
+ } },
10101
10164
  React__default.createElement("div", { style: { overflowX: 'auto', width: '100%' } },
10102
10165
  React__default.createElement("table", { style: { width: '100%', tableLayout: 'fixed', textAlign: "center" } },
10103
10166
  React__default.createElement("thead", null,
10104
10167
  React__default.createElement("tr", null,
10105
- React__default.createElement("th", { className: classes.visible }, (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewName) && "View:"),
10106
- React__default.createElement("th", { className: classes.aliasCol }, viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewName),
10107
- React__default.createElement("th", { className: classes.color }),
10168
+ React__default.createElement("th", { className: "".concat(classes.topTitles, " ").concat(classes.viewSelected) }, viewSelected ?
10169
+ (React__default.createElement(Button$1, { variant: 'text', style: { color: "#0075ff" }, className: classes.viewSelected, onClick: function () { return setLoadViewOpen(true); } }, (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewName) || '')) : (React__default.createElement(Button$1, { variant: 'text', style: { color: "#0075ff" }, className: classes.viewSelected, onClick: function () { return setSaveAsViewModalOpen(true); } },
10170
+ React__default.createElement("i", null,
10171
+ React__default.createElement(SaveIcon, null),
10172
+ "(Save view as)")))),
10108
10173
  React__default.createElement("th", { colSpan: 4, className: "".concat(classes.topTitles, " ").concat(classes.scale) }, "Scale"),
10109
10174
  React__default.createElement("th", { className: "".concat(classes.topTitles, " ").concat(classes.xStats) }, cursorData ? (function () {
10110
10175
  var dateX1 = new Date(cursorData.x1);
@@ -10183,7 +10248,7 @@ var TableComponent = function (_a) {
10183
10248
  React__default.createElement("th", null, "Min"),
10184
10249
  React__default.createElement("th", null, "Max")))))),
10185
10250
  React__default.createElement(Grid$1, { item: true, xs: 12 },
10186
- React__default.createElement("div", { style: { width: '100%', overflowY: 'auto', maxHeight: ' 20svh' } },
10251
+ React__default.createElement("div", { style: { width: '100%', height: '100%', maxHeight: '100%' } },
10187
10252
  React__default.createElement("table", { cellPadding: '4px', style: { width: '100%', tableLayout: 'fixed', textAlign: "center" } },
10188
10253
  React__default.createElement("tbody", null, viewTags && viewTags.length && Array.isArray(viewTags) ? viewTags.map(function (tag, index) {
10189
10254
  var _a, _b, _c, _d, _e, _f, _g;
@@ -10196,7 +10261,7 @@ var TableComponent = function (_a) {
10196
10261
  React__default.createElement(Tooltip, { title: tag.TagName, placement: "top", arrow: true, interactive: true, enterDelay: 500 },
10197
10262
  React__default.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
10198
10263
  tag.TagType &&
10199
- (React__default.createElement("div", { className: classes.dataType, style: { backgroundColor: tag.TagType === "A" ? "blue" : "red" } }, tag.TagType)),
10264
+ (React__default.createElement("div", { className: classes.dataType, style: { backgroundColor: tag.TagType === "A" ? "#AD48C4" : "#C46F48" } }, tag.TagType)),
10200
10265
  React__default.createElement("input", { type: "text", style: { width: '100%' }, value: tag.Alias || tag.TagName, onFocus: function (e) { return e.target.select(); }, onChange: function (e) {
10201
10266
  var newAlias = e.target.value;
10202
10267
  handleChangeAlias(tag.TagId, newAlias);
@@ -10236,9 +10301,9 @@ var TableComponent = function (_a) {
10236
10301
  var value = e.target.value;
10237
10302
  handleUnitChange(tag.TagId, value);
10238
10303
  }, value: tag.Unit === "-" ? '' : tag.Unit, onFocus: function (e) { return e.target.select(); } })),
10239
- React__default.createElement("td", null, round((_a = dataTable[tag.TagName]) === null || _a === void 0 ? void 0 : _a.y1, 3)),
10240
- React__default.createElement("td", { className: classes.doubleInput }, round((_b = dataTable[tag.TagName]) === null || _b === void 0 ? void 0 : _b.y2, 3)),
10241
- React__default.createElement("td", null, round((_c = dataTable[tag.TagName]) === null || _c === void 0 ? void 0 : _c.y2y1, 3)),
10304
+ React__default.createElement("td", null, round((_a = dataTable[tag.TagName]) === null || _a === void 0 ? void 0 : _a.y1, 3) || 0),
10305
+ React__default.createElement("td", { className: classes.doubleInput }, round((_b = dataTable[tag.TagName]) === null || _b === void 0 ? void 0 : _b.y2, 3) || 0),
10306
+ React__default.createElement("td", null, round((_c = dataTable[tag.TagName]) === null || _c === void 0 ? void 0 : _c.y2y1, 3) || 0),
10242
10307
  React__default.createElement("td", null,
10243
10308
  !isNaN(((_d = dataTable[tag.TagName]) === null || _d === void 0 ? void 0 : _d.pmin.y) * 0) ? round((_e = dataTable[tag.TagName]) === null || _e === void 0 ? void 0 : _e.pmin.y, 3) : 0,
10244
10309
  " "),
@@ -10251,7 +10316,8 @@ var TableComponent = function (_a) {
10251
10316
  React__default.createElement(Button$1, { onClick: function () { return setTagsTreeModalOpen(true); }, variant: 'contained', color: 'primary' }, " Add tag")),
10252
10317
  React__default.createElement("div", null,
10253
10318
  React__default.createElement(Button$1, { onClick: function () { return setLoadViewOpen(true); }, variant: 'outlined', color: 'primary' }, " Load view"))))))),
10254
- selectedRowIndex !== null && (React__default.createElement(ContextMenu, { x: contextMenuPosition.x, y: contextMenuPosition.y, options: contextMenuOptions })),
10319
+ openContextMenu &&
10320
+ React__default.createElement(ContextMenu, { x: contextMenuPosition.x, y: contextMenuPosition.y, options: contextMenuOptions }),
10255
10321
  React__default.createElement(TagsTreeModal, { open: tagsTreeModalOpen, handleClose: handleClose, onTagSelect: handleTagSelect }),
10256
10322
  React__default.createElement(SaveAsViewModal, { open: saveAsViewModalOpen, handleClose: function (shouldUpdate) {
10257
10323
  setSaveAsViewModalOpen(false);
@@ -10769,7 +10835,7 @@ var TrendingChart = function (_a) {
10769
10835
  });
10770
10836
  var updatedSeries = series.map(function (serie, index) {
10771
10837
  var tag = viewTags[index];
10772
- var yAxisTagId = seriesVsTags.current[tag.TagId];
10838
+ var yAxisTagId = seriesVsTags.current[tag === null || tag === void 0 ? void 0 : tag.TagId];
10773
10839
  return {
10774
10840
  yAxisID: "y-axis-".concat(yAxisTagId),
10775
10841
  data: serie.map(function (sample) { return ({
@@ -10825,13 +10891,30 @@ var Trending = function (_a) {
10825
10891
  var _d = useState(''), error = _d[0], setError = _d[1];
10826
10892
  var _e = useState(true), loading = _e[0], setLoading = _e[1];
10827
10893
  var _f = useState([]), series = _f[0], setSeries = _f[1];
10828
- var _g = useChartOptions(), chartOptions = _g[0], setChartOptions = _g[1];
10829
- var _h = useState({
10894
+ var _g = useState(null), selectedRowIndex = _g[0], setSelectedRowIndex = _g[1];
10895
+ var _h = useState(null), viewTagForDelete = _h[0], setViewTagForDelete = _h[1];
10896
+ var _j = useChartOptions(), chartOptions = _j[0], setChartOptions = _j[1];
10897
+ var _k = useState({
10830
10898
  labels: [],
10831
10899
  datasets: []
10832
- }), chartData = _h[0], setChartData = _h[1];
10833
- var _j = useState(null), cursorData = _j[0], setCursorData = _j[1];
10900
+ }), chartData = _k[0], setChartData = _k[1];
10901
+ var _l = useState(null), cursorData = _l[0], setCursorData = _l[1];
10834
10902
  var debounceForFetchingData = useRef(null);
10903
+ var _m = useState({ x: 0, y: 0 }), contextMenuPosition = _m[0], setContextMenuPosition = _m[1];
10904
+ var _o = useState(false), openContextMenu = _o[0], setOpenContextMenu = _o[1];
10905
+ var handleRightClick = function (event, index) {
10906
+ event.preventDefault();
10907
+ event.stopPropagation(); // Prevent the click event from propagating to the document
10908
+ if (isNumber(index)) {
10909
+ setViewTagForDelete(viewTags[index]);
10910
+ }
10911
+ else {
10912
+ setViewTagForDelete(null);
10913
+ }
10914
+ setSelectedRowIndex(index);
10915
+ setOpenContextMenu(true);
10916
+ setContextMenuPosition({ x: event.clientX, y: event.clientY });
10917
+ };
10835
10918
  useEffect(function () {
10836
10919
  if (debounceForFetchingData.current) {
10837
10920
  clearTimeout(debounceForFetchingData.current);
@@ -10872,14 +10955,35 @@ var Trending = function (_a) {
10872
10955
  }, 800);
10873
10956
  }, [shouldRefetchSeries]);
10874
10957
  return (React__default.createElement(React__default.Fragment, null,
10875
- React__default.createElement(Grid$1, { container: true, style: { width: "95svw", height: "81svh", margin: 0 } },
10958
+ React__default.createElement(Grid$1, { container: true, style: { width: "95svw", height: "88svh", margin: 0 }, onClick: function () { return setOpenContextMenu(false); } },
10876
10959
  React__default.createElement(Header, { setChartOptions: setChartOptions }),
10877
10960
  React__default.createElement(Grid$1, { item: true, xs: 12, style: { height: '45%' } },
10878
10961
  React__default.createElement(TrendingChart, { series: series, chartData: chartData, setChartData: setChartData, chartOptions: chartOptions, setChartOptions: setChartOptions, setCursorData: setCursorData })),
10879
- React__default.createElement(Grid$1, { item: true, xs: 12, style: { height: '40%', minWidth: "100%", paddingTop: "3rem" } },
10880
- React__default.createElement(TableComponent, { chartData: chartData, cursorData: cursorData, getTagsFromAPI: getTagsFromAPI })),
10881
- loading && (React__default.createElement(Grid$1, { item: true, xs: 12, style: { textAlign: 'center' } },
10882
- React__default.createElement("p", null, "Loading...")))),
10962
+ React__default.createElement(Grid$1, { item: true, container: true, xs: 12, onContextMenu: function (e) { return handleRightClick(e, null); }, style: {
10963
+ height: '40%',
10964
+ minWidth: "100%",
10965
+ paddingTop: "3rem",
10966
+ border: "4px solid #ccc",
10967
+ borderRadius: 10,
10968
+ padding: 10,
10969
+ margin: "20px 0 10px",
10970
+ position: loading ? "relative" : "inherit"
10971
+ } },
10972
+ loading &&
10973
+ (React__default.createElement("div", { style: {
10974
+ position: 'absolute',
10975
+ top: 0,
10976
+ left: 0,
10977
+ width: '100%',
10978
+ height: '100%',
10979
+ background: 'rgba(255, 255, 255, 0.7)',
10980
+ display: 'flex',
10981
+ justifyContent: 'center',
10982
+ alignItems: 'center',
10983
+ zIndex: 2
10984
+ } },
10985
+ React__default.createElement(CircularProgress$1, { size: "2rem" }))),
10986
+ React__default.createElement(TableComponent, { chartData: chartData, cursorData: cursorData, getTagsFromAPI: getTagsFromAPI, openContextMenu: openContextMenu, setOpenContextMenu: setOpenContextMenu, viewTagForDelete: viewTagForDelete, setViewTagForDelete: setViewTagForDelete, selectedRowIndex: selectedRowIndex, setSelectedRowIndex: setSelectedRowIndex, handleRightClick: handleRightClick, contextMenuPosition: contextMenuPosition, setContextMenuPosition: setContextMenuPosition }))),
10883
10987
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); }, title: "ERROR" })));
10884
10988
  };
10885
10989
 
@@ -10889,13 +10993,13 @@ var TrendingsPage = function (props) {
10889
10993
  var getTagsFromAPI = function (forceReload) {
10890
10994
  if (forceReload === void 0) { forceReload = false; }
10891
10995
  return __awaiter(void 0, void 0, void 0, function () {
10892
- var viewsResp, lastCreated, viewTagsResp;
10996
+ var viewsResp, lastCreated, viewTagsResp, viewTags;
10893
10997
  return __generator(this, function (_a) {
10894
10998
  switch (_a.label) {
10895
10999
  case 0: return [4 /*yield*/, getViews(null)];
10896
11000
  case 1:
10897
11001
  viewsResp = _a.sent();
10898
- if (!viewsResp.ok) return [3 /*break*/, 3];
11002
+ if (!viewsResp.ok) return [3 /*break*/, 4];
10899
11003
  setViews(viewsResp.data.tables[0].rows);
10900
11004
  lastCreated = void 0;
10901
11005
  if (!viewSelected || forceReload) {
@@ -10906,21 +11010,28 @@ var TrendingsPage = function (props) {
10906
11010
  else {
10907
11011
  lastCreated = viewSelected;
10908
11012
  }
10909
- console.log(lastCreated);
11013
+ if (!lastCreated) return [3 /*break*/, 3];
10910
11014
  return [4 /*yield*/, getViewTags(lastCreated.ViewId)];
10911
11015
  case 2:
10912
11016
  viewTagsResp = _a.sent();
10913
11017
  if (viewTagsResp.ok) {
10914
- setViewTagsAndRefetch(viewTagsResp.data.tables[0].rows);
11018
+ viewTags = viewTagsResp.data.tables[0].rows.map(function (e) {
11019
+ if (isNil$1(e.Color)) {
11020
+ e.Color = getRandomColor();
11021
+ }
11022
+ return e;
11023
+ });
11024
+ setViewTagsAndRefetch(viewTags);
10915
11025
  }
10916
11026
  else {
10917
11027
  setError(viewTagsResp.message);
10918
11028
  }
10919
- return [3 /*break*/, 4];
10920
- case 3:
11029
+ _a.label = 3;
11030
+ case 3: return [3 /*break*/, 5];
11031
+ case 4:
10921
11032
  setError(viewsResp.message);
10922
- _a.label = 4;
10923
- case 4: return [2 /*return*/];
11033
+ _a.label = 5;
11034
+ case 5: return [2 /*return*/];
10924
11035
  }
10925
11036
  });
10926
11037
  });