@dexteel/mesf-core 4.11.2 → 4.13.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/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { LicenseManager } from 'ag-grid-enterprise';
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, isNumber } from 'lodash-es';
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, Divider, IconButton as IconButton$1, Box, 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, 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
6
  import { Alert as Alert$1, Modal as Modal$1, Navbar, Container, Nav, NavDropdown } from 'react-bootstrap';
@@ -26,17 +26,17 @@ import moment from 'moment';
26
26
  import axios from 'axios';
27
27
  import { _adapters, Chart, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip as Tooltip$1, Legend, TimeScale } from 'chart.js';
28
28
  import zoomPlugin from 'chartjs-plugin-zoom';
29
+ import SaveIcon from '@material-ui/icons/Save';
30
+ import LockIcon from '@material-ui/icons/Lock';
29
31
  import { Alert as Alert$3, Autocomplete } from '@material-ui/lab';
30
32
  import Popover from '@material-ui/core/Popover';
33
+ import CreateIcon from '@material-ui/icons/Create';
34
+ import DeleteIcon from '@material-ui/icons/Delete';
31
35
  import { isAncestor, Tree, DndProvider as DndProvider$1 } from '@minoru/react-dnd-treeview';
32
36
  import FolderIcon from '@material-ui/icons/Folder';
33
37
  import InsertChartIcon from '@material-ui/icons/InsertChart';
34
38
  import { ArrowRight, ChevronLeft, ChevronRight } from '@material-ui/icons';
35
39
  import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
36
- import CreateIcon from '@material-ui/icons/Create';
37
- import DeleteIcon from '@material-ui/icons/Delete';
38
- import LockIcon from '@material-ui/icons/Lock';
39
- import SaveIcon from '@material-ui/icons/Save';
40
40
  import SkipNextIcon from '@material-ui/icons/SkipNext';
41
41
  import { Line } from 'react-chartjs-2';
42
42
  import PersonPinCircleIcon from '@material-ui/icons/PersonPinCircle';
@@ -79,6 +79,7 @@ import ListAltIcon from '@material-ui/icons/ListAlt';
79
79
  import DescriptionIcon from '@material-ui/icons/Description';
80
80
  import { format, fromZonedTime, formatInTimeZone } from 'date-fns-tz';
81
81
  import { findIana } from 'windows-iana';
82
+ import moment$1 from 'moment-timezone';
82
83
  import FormControlLabel$1 from '@material-ui/core/FormControlLabel';
83
84
  import Checkbox$1 from '@material-ui/core/Checkbox';
84
85
  import Input from '@material-ui/core/Input';
@@ -4622,7 +4623,6 @@ var AssetReducer = createSlice({
4622
4623
  var payload = _a.payload;
4623
4624
  state.areasList = payload;
4624
4625
  },
4625
- // ===========================
4626
4626
  setAllAssets: function (state, _a) {
4627
4627
  var payload = _a.payload;
4628
4628
  state.allAssets = payload;
@@ -7318,6 +7318,7 @@ var TimeService = /** @class */ (function () {
7318
7318
  else {
7319
7319
  this.timeZone = timeZone;
7320
7320
  }
7321
+ moment$1.tz.setDefault(this.timeZone);
7321
7322
  };
7322
7323
  TimeService.prototype.toUTC = function (datetime, format$1) {
7323
7324
  try {
@@ -7351,8 +7352,13 @@ var TimeService = /** @class */ (function () {
7351
7352
  return '';
7352
7353
  }
7353
7354
  };
7355
+ TimeService.prototype.getServerTimeZone = function () {
7356
+ return this.timeZone;
7357
+ };
7354
7358
  return TimeService;
7355
7359
  }());
7360
+ var getMomentTz = function () { return moment$1; };
7361
+ var dxtServerTimeZone = function () { return TimeService.getInstance().getServerTimeZone; };
7356
7362
  var dxtToUTC = TimeService.getInstance().toUTC;
7357
7363
  var dxtToLocalServerTime = TimeService.getInstance().toLocalServerTime;
7358
7364
 
@@ -8425,7 +8431,7 @@ var TrendingsInitialState = {
8425
8431
  }
8426
8432
  ],
8427
8433
  viewSelected: null,
8428
- viewTags: [],
8434
+ viewTags: {},
8429
8435
  shouldRefetchSeries: 1
8430
8436
  };
8431
8437
  var TrendingsReducer = createSlice({
@@ -8586,7 +8592,12 @@ var TrendingsReducer = createSlice({
8586
8592
  },
8587
8593
  setViewTagsAndRefetch: function (state, _a) {
8588
8594
  var payload = _a.payload;
8589
- state.viewTags = payload;
8595
+ var newTags = structuredClone(payload);
8596
+ __spreadArray([], Object.values(payload), true).sort(function (a, b) { return b.order - a.order; })
8597
+ .forEach(function (vtMap, idx) {
8598
+ newTags[vtMap.viewTag.TagId]['order'] = idx;
8599
+ });
8600
+ state.viewTags = newTags;
8590
8601
  state.shouldRefetchSeries += 1;
8591
8602
  },
8592
8603
  setGraphShouldUpdate: function (state) {
@@ -8760,6 +8771,13 @@ var ColorPicker = function (_a) {
8760
8771
  } })); })))));
8761
8772
  };
8762
8773
 
8774
+ var ButtonWithLoading = function (_a) {
8775
+ var children = _a.children, isLoading = _a.isLoading, props = __rest(_a, ["children", "isLoading"]);
8776
+ return (React__default.createElement(Button$1, __assign({}, props, { disabled: isLoading }),
8777
+ isLoading && React__default.createElement(CircularProgress$1, { size: "1rem" }),
8778
+ children));
8779
+ };
8780
+
8763
8781
  var getIhPath = function () { return localStorage.getItem('ihPath') || "[mssql2022].[IH_100020].[ih]"; };
8764
8782
  //tags
8765
8783
  var getTagsTree = function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -8962,861 +8980,863 @@ var deleteAllViewTagsFromView = function (ViewId) { return __awaiter(void 0, voi
8962
8980
  });
8963
8981
  }); };
8964
8982
 
8965
- var useTagsTreeModalStyles = makeStyles$1(function (theme) { return ({
8966
- dataTypeOfTree: {
8967
- width: '25px',
8968
- height: '25px',
8969
- color: "white",
8970
- display: 'flex',
8971
- justifyContent: 'center',
8972
- alignItems: 'center',
8973
- cursor: 'pointer',
8974
- border: "1px black solid"
8975
- },
8976
- root: {
8977
- alignItems: "center",
8978
- display: "flex",
8979
- height: "32px"
8980
- },
8981
- customNodeRoot: {
8982
- listStyleType: "none",
8983
- margin: 0,
8984
- padding: 0,
8985
- '&:hover': {
8986
- backgroundColor: "#f2f2f2"
8987
- }
8988
- },
8989
- arrow: {
8990
- alignItems: "center",
8991
- cursor: "pointer",
8992
- display: "flex",
8993
- height: "24px",
8994
- justifyContent: "center",
8995
- width: "24px",
8996
- transition: "transform linear 0.1s",
8997
- transform: "rotate(0deg)"
8998
- },
8999
- "arrow > div": {
8983
+ var useTrendingStyles = makeStyles$1(function (theme) { return ({
8984
+ datetimePicker: {
9000
8985
  alignItems: "center",
9001
- display: "flex"
9002
- },
9003
- "arrow.is-open": {
9004
- transform: "rotate(90deg)"
9005
- },
9006
- filetype: {
9007
- display: "flex"
9008
- },
9009
- label: {
9010
- paddingInlineStart: "8px"
9011
- },
9012
- selected: {
9013
- backgroundColor: "#e8f0fe"
8986
+ "& .MuiInputBase-root": {
8987
+ color: "black",
8988
+ backgroundColor: "white",
8989
+ borderRadius: theme.shape.borderRadius,
8990
+ width: "90%",
8991
+ minWidth: "90%",
8992
+ maxWidth: "90%"
8993
+ },
8994
+ "& .MuiInputBase-input": {
8995
+ fontSize: "13px !important",
8996
+ height: "15px !important",
8997
+ paddingRight: "3px",
8998
+ paddingLeft: "3px"
8999
+ },
9000
+ "& .MuiInput-underline:before": {
9001
+ borderBottomColor: "rgba(0, 0, 0, 0.42)"
9002
+ },
9003
+ padding: 0
9014
9004
  },
9015
- dragging: {
9016
- opacity: 0.5
9005
+ select: {
9006
+ "& .MuiInput-root": {
9007
+ width: "100%"
9008
+ },
9009
+ "& .MuiInputBase-root": {
9010
+ color: "black",
9011
+ backgroundColor: "white",
9012
+ borderRadius: theme.shape.borderRadius,
9013
+ minWidth: "100%"
9014
+ },
9015
+ "& .MuiInputBase-input": {
9016
+ fontSize: "14px !important",
9017
+ height: "15px !important"
9018
+ },
9019
+ "& .MuiInput-underline:before": {
9020
+ borderBottomColor: "rgba(0, 0, 0, 0.42)"
9021
+ },
9022
+ padding: 0
9017
9023
  },
9018
- contextMenu: {
9019
- fontSize: "14px",
9020
- backgroundColor: "#fff",
9021
- borderRadius: "2px",
9022
- padding: "5px 10px;",
9023
- width: "140px",
9024
- height: "auto",
9025
- margin: "0",
9026
- position: "fixed",
9027
- boxShadow: "0 0 20px 0 #ccc",
9028
- display: "flex",
9029
- flexDirection: "column"
9024
+ labelOptions: {
9025
+ paddingLeft: "2rem",
9026
+ userSelect: "none",
9027
+ "& > label": {
9028
+ display: "flex",
9029
+ alignItems: "center",
9030
+ gap: "5px"
9031
+ },
9032
+ '& input[type="checkbox"]': {
9033
+ zoom: 1.5
9034
+ }
9030
9035
  },
9031
- storyRoot: {
9032
- display: "grid",
9033
- height: "100%",
9034
- gridTemplateRows: "auto 1fr",
9035
- listStyleType: "none !important"
9036
+ isPublicCheckbox: {
9037
+ userSelect: "none",
9038
+ paddingLeft: '1rem',
9039
+ "& > label": {
9040
+ display: "flex",
9041
+ alignItems: "center",
9042
+ gap: "15px"
9043
+ },
9044
+ '& input[type="checkbox"]': {
9045
+ zoom: 1.5
9046
+ }
9036
9047
  },
9037
- assetRoot: {
9038
- boxSizing: "border-box",
9039
- height: "100%",
9040
- padding: "32px"
9048
+ navigatorButton: {
9049
+ "& .MuiSvgIcon-root": {
9050
+ cursor: "pointer !important",
9051
+ height: '24px',
9052
+ width: '24px',
9053
+ '& svg': {
9054
+ // Adjust the icon size as well
9055
+ fontSize: '1.5rem'
9056
+ }
9057
+ },
9058
+ color: 'black'
9041
9059
  },
9042
- dropTarget: {
9043
- boxShadow: "0 0 0 1px #1967d2 inset",
9044
- borderRadius: '1px',
9045
- backgroundColor: '#DAE4F2'
9060
+ iconContainer: {
9061
+ display: 'flex',
9062
+ justifyContent: 'flex-end',
9063
+ alignItems: 'center',
9064
+ flex: 1
9046
9065
  },
9047
- customDragRoot: {
9048
- alignItems: "center",
9049
- backgroundColor: "#1967d2",
9050
- borderRadius: "4px",
9051
- boxShadow: " 0 12px 24px -6px rgba(0, 0, 0, .25); 0 0 0 1px rgba(0, 0, 0, .08)",
9052
- color: "#fff",
9053
- display: "inline-grid",
9054
- fontSize: "14px",
9055
- gap: "8px",
9056
- gridTemplateColumns: "auto auto",
9057
- padding: "4px 8px",
9058
- pointerEvents: "none"
9066
+ optionContainer: {
9067
+ display: 'flex',
9068
+ justifyContent: 'flex-start',
9069
+ alignItems: 'center',
9070
+ width: '100%'
9059
9071
  },
9060
- icon: {
9061
- alignItems: "center",
9062
- display: "flex"
9072
+ optionLabel: {
9073
+ flexGrow: 1
9063
9074
  },
9064
- customDragLabel: {
9065
- alignItems: "center",
9066
- display: "flex"
9075
+ inputCustom: {
9076
+ color: 'rgba(0, 0, 0, 0.87)',
9077
+ cursor: 'text',
9078
+ fontSize: '0.7rem',
9079
+ boxSizing: 'border-box',
9080
+ fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
9081
+ fontWeight: 400,
9082
+ lineHeight: 1.1876,
9083
+ letterSpacing: '0.00938em',
9084
+ '& .MuiOutlinedInput-input': {
9085
+ padding: '10px 10px'
9086
+ }
9067
9087
  }
9068
9088
  }); });
9069
9089
 
9070
- function buildTagsTreeV2(data) {
9071
- var tagsForTree = [];
9072
- data.forEach(function (el) {
9073
- var tagForTree = {
9074
- id: el.TagId,
9075
- parent: (el.ParentTagId || 0),
9076
- text: el.TagName,
9077
- data: el,
9078
- droppable: el.TagTypeCode === 'F'
9079
- };
9080
- return tagsForTree.push(tagForTree);
9081
- });
9082
- return tagsForTree;
9083
- }
9084
-
9085
- var CustomDragPreview = function (props) {
9086
- var _a, _b, _c;
9087
- var classes = useTagsTreeModalStyles();
9088
- var item = props.monitorProps.item;
9089
- var isFolder = ((_a = item.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === 'F' ? true : false;
9090
- return (React__default.createElement("div", { className: classes.customDragRoot },
9091
- React__default.createElement("div", { className: classes.icon }, isFolder ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' }))),
9092
- React__default.createElement("div", { className: classes.customDragLabel }, ((_b = item.data) === null || _b === void 0 ? void 0 : _b.Alias) || ((_c = item.data) === null || _c === void 0 ? void 0 : _c.TagName))));
9093
- };
9094
-
9095
- var customStyles = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
9096
- var TagFolderCustomNode = function (_a) {
9097
- var _b, _c, _d, _e, _f, _g, _h, _j;
9098
- var node = _a.node, _k = _a.options, depth = _k.depth, isOpen = _k.isOpen, onToggle = _k.onToggle, containerRef = _k.containerRef, options = _a.options, setOpenTagFolders = _a.setOpenTagFolders, openTagFolders = _a.openTagFolders, handleSelect = _a.handleSelect, setContextMenuOver = _a.setContextMenuOver, isSelected = _a.isSelected;
9099
- var classes = useTagsTreeModalStyles();
9100
- var nodeClasses = "".concat(classes.customNodeRoot, " ").concat(classes.root, " ").concat(isSelected ? classes.selected : "");
9101
- var onClickHandler = function () {
9102
- var _a;
9103
- var _b;
9104
- if (options.hasChild || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === 'F') {
9105
- if (openTagFolders[node.id]) {
9106
- var newOpenTagFolders = __assign({}, openTagFolders);
9107
- delete newOpenTagFolders[node.id];
9108
- setOpenTagFolders(newOpenTagFolders);
9109
- }
9110
- else {
9111
- setOpenTagFolders(__assign(__assign({}, openTagFolders), (_a = {}, _a[node.id] = node.id, _a)));
9112
- }
9113
- onToggle();
9114
- return;
9115
- }
9116
- if (!options.hasChild) {
9117
- handleSelect(node);
9118
- }
9119
- };
9120
- var handleContextMenu = useCallback(function (ev) {
9121
- ev.stopPropagation();
9122
- ev.preventDefault();
9123
- setContextMenuOver(node, ev);
9124
- }, [node.id, setContextMenuOver]);
9125
- useEffect(function () {
9126
- var _a;
9127
- (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener("contextmenu", handleContextMenu);
9128
- return function () {
9129
- var _a;
9130
- (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener("contextmenu", handleContextMenu);
9131
- };
9132
- }, []);
9133
- return (React__default.createElement("div", { className: nodeClasses, onClick: onClickHandler, style: { paddingLeft: depth * 20, cursor: "pointer" } },
9134
- React__default.createElement("style", null, customStyles),
9135
- React__default.createElement(React__default.Fragment, null,
9136
- options.hasChild ? (React__default.createElement("div", null, isOpen ? React__default.createElement(ArrowDropDownIcon, null) : React__default.createElement(ArrowRight, null)))
9137
- : null,
9138
- React__default.createElement("div", null, options.hasChild || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === 'F' ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' })))),
9139
- ((_c = node.data) === null || _c === void 0 ? void 0 : _c.TagName) &&
9140
- React__default.createElement(React__default.Fragment, null,
9141
- ((_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: {
9142
- backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === 'A' ? "#AD48C4" : "#C46F48",
9143
- margin: "0 5px"
9144
- } }, (_g = node.data) === null || _g === void 0 ? void 0 : _g.TagTypeCode)),
9145
- React__default.createElement(Tooltip, { title: node.data.TagName, placement: "top", arrow: true },
9146
- React__default.createElement(Typography, { variant: "body2" }, ((_h = node.data) === null || _h === void 0 ? void 0 : _h.Alias) || ((_j = node.data) === null || _j === void 0 ? void 0 : _j.TagName))))));
9147
- };
9148
-
9149
- var ButtonWithLoading = function (_a) {
9150
- var children = _a.children, isLoading = _a.isLoading, props = __rest(_a, ["children", "isLoading"]);
9151
- return (React__default.createElement(Button$1, __assign({}, props, { disabled: isLoading }),
9152
- isLoading && React__default.createElement(CircularProgress$1, { size: "1rem" }),
9153
- children));
9154
- };
9155
-
9156
- var NewFolderModal = function (_a) {
9157
- var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9158
- var _b = useState(), name = _b[0], setName = _b[1];
9090
+ var DeleteViewModal = function (_a) {
9091
+ var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9092
+ var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9159
9093
  var _c = useState(''), error = _c[0], setError = _c[1];
9160
- var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9161
- var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9162
- var parentId, parentTagId, resp;
9163
- var _a;
9164
- return __generator(this, function (_b) {
9165
- switch (_b.label) {
9094
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9095
+ var resp;
9096
+ return __generator(this, function (_a) {
9097
+ switch (_a.label) {
9166
9098
  case 0:
9167
- e.preventDefault();
9168
- parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9169
- parentTagId = ((_a = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === "F" ? Number(tagNodeSelectedInTree.id) : parentId;
9170
9099
  setIsLoading(true);
9171
- if (!name) return [3 /*break*/, 2];
9172
- return [4 /*yield*/, upsertTagFolder(null, parentTagId, name, true)];
9100
+ if (!!isNil$1(view)) return [3 /*break*/, 2];
9101
+ return [4 /*yield*/, deleteView(view.ViewId)];
9173
9102
  case 1:
9174
- resp = _b.sent();
9103
+ resp = _a.sent();
9175
9104
  if (!resp.ok) {
9176
9105
  setError(resp.message);
9177
9106
  }
9178
- _b.label = 2;
9107
+ else {
9108
+ handleClose(true);
9109
+ }
9110
+ _a.label = 2;
9179
9111
  case 2:
9180
- handleClose(true);
9181
- setName('');
9182
9112
  setIsLoading(false);
9183
9113
  return [2 /*return*/];
9184
9114
  }
9185
9115
  });
9186
9116
  }); };
9187
9117
  return (React__default.createElement(React__default.Fragment, null,
9188
- React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'New folder' },
9189
- React__default.createElement(MesfModal.Content, null,
9190
- React__default.createElement(Box, null,
9191
- React__default.createElement(TextField, { style: { minWidth: "600px" }, id: "outlined-basic", label: "Folder name", variant: "outlined", value: name, onChange: (function (e) { return setName(e.target.value); }) }))),
9118
+ React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Delete View' },
9119
+ React__default.createElement(Divider, null),
9120
+ React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9121
+ (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9122
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9123
+ React__default.createElement(Typography, null,
9124
+ "Are yu sure you want to delete ",
9125
+ React__default.createElement("strong", null, view === null || view === void 0 ? void 0 : view.ViewName),
9126
+ " ?")))) :
9127
+ (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9128
+ React__default.createElement(Divider, null),
9192
9129
  React__default.createElement(MesfModal.Actions, null,
9193
- React__default.createElement("div", null,
9194
- React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9195
- React__default.createElement("div", null,
9196
- React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Save")))),
9130
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9131
+ React__default.createElement(Grid$1, { item: true },
9132
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9133
+ React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9134
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'secondary', onClick: handleSubmit, isLoading: isLoading }, "Delete")
9135
+ : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9197
9136
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9198
9137
  };
9199
9138
 
9200
- var RemoveFolderModal = function (_a) {
9201
- var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9202
- var _b = useState(''), error = _b[0], setError = _b[1];
9203
- var _c = useState(false), isLoading = _c[0], setIsLoading = _c[1];
9204
- var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9205
- var parentId, name_1, id, resp;
9139
+ var EditViewModal = function (_a) {
9140
+ var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9141
+ var classes = useTrendingStyles();
9142
+ var _b = useState(''), newName = _b[0], setNewName = _b[1];
9143
+ var _c = useState(true), isPublic = _c[0], setIsPublic = _c[1];
9144
+ var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9145
+ var _e = useState(''), error = _e[0], setError = _e[1];
9146
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9147
+ var resp;
9206
9148
  return __generator(this, function (_a) {
9207
9149
  switch (_a.label) {
9208
9150
  case 0:
9209
- e.preventDefault();
9210
- if (!tagNodeSelectedInTree) return [3 /*break*/, 5];
9211
- parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9212
- name_1 = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text;
9213
- id = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.id);
9214
- resp = void 0;
9215
9151
  setIsLoading(true);
9216
- if (!parentId) return [3 /*break*/, 2];
9217
- return [4 /*yield*/, deleteTagFolder(id)];
9152
+ if (!!isNil$1(view)) return [3 /*break*/, 2];
9153
+ return [4 /*yield*/, upsertView(view.ViewId, newName, isPublic)];
9218
9154
  case 1:
9219
9155
  resp = _a.sent();
9220
9156
  if (!resp.ok) {
9221
9157
  setError(resp.message);
9222
9158
  }
9223
- return [3 /*break*/, 4];
9224
- case 2: return [4 /*yield*/, upsertTagFolder(id, parentId, name_1, false)];
9225
- case 3:
9226
- resp = _a.sent();
9227
- _a.label = 4;
9228
- case 4:
9229
- if (!resp.ok) {
9230
- setError(resp.message);
9159
+ else {
9160
+ handleClose(true);
9231
9161
  }
9232
- _a.label = 5;
9233
- case 5:
9234
- handleClose(true);
9162
+ _a.label = 2;
9163
+ case 2:
9235
9164
  setIsLoading(false);
9236
9165
  return [2 /*return*/];
9237
9166
  }
9238
9167
  });
9239
9168
  }); };
9169
+ var handleChangeInput = function (e) {
9170
+ e.preventDefault();
9171
+ var name = e.target.value;
9172
+ setNewName(name);
9173
+ };
9174
+ var handleCheck = function () { return setIsPublic(!isPublic); };
9175
+ useEffect(function () {
9176
+ if (view) {
9177
+ setIsPublic(view.IsPublic);
9178
+ setNewName(view.ViewName);
9179
+ }
9180
+ }, [view]);
9240
9181
  return (React__default.createElement(React__default.Fragment, null,
9241
- React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Remove Folder' },
9242
- React__default.createElement(MesfModal.Content, null,
9243
- React__default.createElement(Box, null,
9244
- React__default.createElement(Typography, null,
9245
- "Are you sure you want to remove ",
9246
- React__default.createElement("strong", null, tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text),
9247
- " folder?"))),
9182
+ React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Update View' },
9183
+ React__default.createElement(Divider, null),
9184
+ React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9185
+ (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9186
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9187
+ React__default.createElement(TextField, { required: true, className: classes.inputCustom, id: "viewName", label: "Name", variant: "outlined", onChange: handleChangeInput, value: newName })),
9188
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9189
+ React__default.createElement("label", null,
9190
+ React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck }),
9191
+ React__default.createElement(Typography, null, "Public"))))) :
9192
+ (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9193
+ React__default.createElement(Divider, null),
9248
9194
  React__default.createElement(MesfModal.Actions, null,
9249
- React__default.createElement("div", null,
9250
- React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9251
- React__default.createElement("div", null,
9252
- React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Remove")))),
9195
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9196
+ React__default.createElement(Grid$1, { item: true },
9197
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9198
+ React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9199
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Update")
9200
+ : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9253
9201
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9254
9202
  };
9255
9203
 
9256
- var ContextMenu = function (_a) {
9257
- var _b;
9258
- var isOpen = _a.isOpen, anchorPoint = _a.anchorPoint, tagNodeSelectedInTree = _a.tagNodeSelectedInTree, getTagsTreeData = _a.getTagsTreeData, setShowContextMenu = _a.setShowContextMenu;
9259
- var classes = useTagsTreeModalStyles();
9260
- var _c = useState(false), showNewTagModal = _c[0], setShowNewTagModal = _c[1];
9261
- var _d = useState(false), showRemoveTagModal = _d[0], setShowRemoveTagModal = _d[1];
9262
- var isFolder = ((_b = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F";
9263
- return (React__default.createElement(React__default.Fragment, null,
9264
- isOpen && anchorPoint ? (React__default.createElement("ul", { className: classes.contextMenu, style: { top: anchorPoint.y, left: anchorPoint.x } },
9265
- React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowNewTagModal(true); } }, "New Folder"),
9266
- tagNodeSelectedInTree && isFolder && (React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowRemoveTagModal(true); } }, "Remove Folder")))) : (null),
9267
- React__default.createElement(NewFolderModal, { open: showNewTagModal, handleClose: function (shouldUpdate) {
9268
- if (shouldUpdate) {
9269
- getTagsTreeData();
9270
- }
9271
- setShowContextMenu(false);
9272
- setShowNewTagModal(false);
9273
- }, tagNodeSelectedInTree: tagNodeSelectedInTree }),
9274
- React__default.createElement(RemoveFolderModal, { open: showRemoveTagModal, handleClose: function (shouldUpdate) {
9275
- if (shouldUpdate) {
9276
- getTagsTreeData();
9277
- }
9278
- setShowContextMenu(false);
9279
- setShowRemoveTagModal(false);
9280
- }, tagNodeSelectedInTree: tagNodeSelectedInTree })));
9281
- };
9282
-
9283
- var TagSelectionModal = function (_a) {
9284
- var isOpen = _a.isOpen; _a.onClose; var onTagSelect = _a.onTagSelect;
9285
- var classes = useTagsTreeModalStyles();
9286
- var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
9287
- var _c = useState(''), error = _c[0], setError = _c[1];
9288
- var _d = useState([]), tagsTreeData = _d[0], setTagsTreeData = _d[1];
9289
- var _e = useState(null), tagNodeSelectedInTree = _e[0], setTagNodeSelectedInTree = _e[1];
9290
- var _f = useState(null), anchorPoint = _f[0], setAnchorPoint = _f[1];
9291
- var _g = useState(false), showContextMenu = _g[0], setShowContextMenu = _g[1];
9292
- var backendOffset = 1000000;
9293
- var _h = useState({}), openTagFolders = _h[0], setOpenTagFolders = _h[1];
9294
- var _j = useState([]), selectedNodes = _j[0], setSelectedNodes = _j[1];
9295
- useTrendingContext().state.viewTags;
9296
- var handleContextMenu = function (data, e) {
9297
- e.preventDefault();
9298
- var top = e.clientY;
9299
- var left = e.clientX;
9300
- setAnchorPoint({ x: left, y: top });
9301
- setSelectedNodes([data]);
9302
- setShowContextMenu(true);
9303
- var selectedNode = tagsTreeData.find(function (node) { var _a; return ((_a = node.data) === null || _a === void 0 ? void 0 : _a.TagId) === data.id; });
9304
- if (selectedNode) {
9305
- setTagNodeSelectedInTree(selectedNode);
9306
- }
9307
- };
9308
- var getTagsTreeData = function () { return __awaiter(void 0, void 0, void 0, function () {
9309
- var tagsTree, rows, tree;
9204
+ var LoadViewModal = function (_a) {
9205
+ var open = _a.open, handleClose = _a.handleClose, getTagsFromAPI = _a.getTagsFromAPI;
9206
+ var _b = useTrendingContext(), _c = _b.state, views = _c.views, viewSelected = _c.viewSelected, _d = _b.actions; _d.setViews; var setViewTagsAndRefetch = _d.setViewTagsAndRefetch, setViewSelected = _d.setViewSelected;
9207
+ var classes = useTrendingStyles();
9208
+ var _e = useState(null), viewForDelete = _e[0], setViewForDelete = _e[1];
9209
+ var _f = useState(null), viewForEdit = _f[0], setViewForEdit = _f[1];
9210
+ var _g = useState(false), deleteViewModalOpen = _g[0], setDeleteViewModalOpen = _g[1];
9211
+ var _h = useState(false), editViewModalOpen = _h[0], setEditViewModalOpen = _h[1];
9212
+ var _j = useState(false), allViewsChecked = _j[0], setAllViewsChecked = _j[1];
9213
+ var _k = useState(false), isLoading = _k[0], setIsLoading = _k[1];
9214
+ var _l = useState(''), error = _l[0], setError = _l[1];
9215
+ var handleSelect = function () { return __awaiter(void 0, void 0, void 0, function () {
9216
+ var viewTagsResp;
9310
9217
  return __generator(this, function (_a) {
9311
9218
  switch (_a.label) {
9312
9219
  case 0:
9313
- if (!isOpen) return [3 /*break*/, 2];
9220
+ if (!viewSelected) return [3 /*break*/, 2];
9314
9221
  setIsLoading(true);
9315
- return [4 /*yield*/, getTagsTree()];
9222
+ return [4 /*yield*/, getViewTags(viewSelected.ViewId)];
9316
9223
  case 1:
9317
- tagsTree = _a.sent();
9318
- if (tagsTree.ok) {
9319
- rows = tagsTree.data.tables[0].rows;
9320
- tree = buildTagsTreeV2(rows);
9321
- setTagsTreeData(tree);
9224
+ viewTagsResp = _a.sent();
9225
+ if (viewTagsResp.ok) {
9226
+ setViewTagsAndRefetch(viewTagsResp.data.tables[0].rows.reduce(function (carr, curr, idx) {
9227
+ if (isNil$1(curr.Color)) {
9228
+ curr.Color = getRandomColor();
9229
+ }
9230
+ carr[curr.TagId] = {
9231
+ viewTag: curr,
9232
+ order: idx
9233
+ };
9234
+ return carr;
9235
+ }, {}));
9236
+ }
9237
+ else {
9238
+ setError(viewTagsResp.message);
9322
9239
  }
9323
9240
  setIsLoading(false);
9241
+ handleClose(false);
9324
9242
  _a.label = 2;
9325
9243
  case 2: return [2 /*return*/];
9326
9244
  }
9327
9245
  });
9328
9246
  }); };
9329
- var expanded = useMemo(function () {
9330
- return Object.keys(openTagFolders).map(function (el) { return parseInt(el); });
9331
- }, [openTagFolders]);
9332
- useEffect(function () {
9333
- getTagsTreeData();
9334
- }, [isOpen]);
9335
- var handleDrop = function (tree, options) { return __awaiter(void 0, void 0, void 0, function () {
9336
- var tagId, newFolderId, newTree, newTree;
9337
- var _a, _b;
9338
- return __generator(this, function (_c) {
9339
- switch (_c.label) {
9247
+ var handleDeleteView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9248
+ return __generator(this, function (_a) {
9249
+ e.stopPropagation();
9250
+ if (view.ViewId === (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId)) {
9251
+ setError('Can not delete current view');
9252
+ }
9253
+ else {
9254
+ setViewForDelete(view);
9255
+ setDeleteViewModalOpen(true);
9256
+ }
9257
+ return [2 /*return*/];
9258
+ });
9259
+ }); };
9260
+ var handleEditView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9261
+ return __generator(this, function (_a) {
9262
+ setViewForEdit(view);
9263
+ setEditViewModalOpen(true);
9264
+ return [2 /*return*/];
9265
+ });
9266
+ }); };
9267
+ var handleAllViewsCheckbox = function () {
9268
+ setAllViewsChecked(function (prev) { return !prev; });
9269
+ };
9270
+ var publicViews = useMemo(function () {
9271
+ return views.filter(function (v) { return v.IsPublic === true; });
9272
+ }, [views, allViewsChecked]);
9273
+ return (React__default.createElement("div", null,
9274
+ 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' },
9275
+ React__default.createElement(MesfModal.Content, null,
9276
+ React__default.createElement(Grid$1, { container: true }, views.length ? (React__default.createElement(React__default.Fragment, null,
9277
+ React__default.createElement(Grid$1, { item: true, md: 12 },
9278
+ React__default.createElement("div", { className: classes.isPublicCheckbox, style: { paddingBottom: '1rem' } },
9279
+ React__default.createElement("label", { htmlFor: "" },
9280
+ React__default.createElement("input", { type: "checkbox", checked: allViewsChecked, onChange: handleAllViewsCheckbox }),
9281
+ React__default.createElement(Typography, null, "All Views")))),
9282
+ React__default.createElement(Grid$1, { item: true, md: 12 },
9283
+ 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 },
9284
+ React__default.createElement("div", { className: classes.optionLabel }, option.ViewName),
9285
+ React__default.createElement("div", { className: classes.iconContainer },
9286
+ option.IsPublic ? '' :
9287
+ React__default.createElement(React__default.Fragment, null,
9288
+ React__default.createElement(Tooltip, { title: "Private", arrow: true },
9289
+ React__default.createElement(LockIcon, { fontSize: 'small', style: { color: 'black', height: "18px", width: '18px', cursor: 'auto' } }))),
9290
+ React__default.createElement(IconButton$1, { onClick: function (e) { return handleEditView(option); } },
9291
+ React__default.createElement(CreateIcon, { fontSize: 'small', color: 'primary', style: { height: "18px", width: '18px', cursor: 'pointer' } })),
9292
+ React__default.createElement(IconButton$1, { onClick: function (e) { return handleDeleteView(option, e); } },
9293
+ 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" })); } })))) :
9294
+ (React__default.createElement(Typography, null, "No views detected, please add one")))),
9295
+ React__default.createElement(MesfModal.Actions, null,
9296
+ React__default.createElement("div", { style: { paddingTop: "1rem" } },
9297
+ React__default.createElement(Button$1, { variant: 'outlined', style: { marginRight: "1rem" }, color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel"),
9298
+ views.length ? (React__default.createElement(ButtonWithLoading, { onClick: handleSelect, variant: 'contained', color: 'primary', isLoading: isLoading, style: { marginRight: "1rem" } }, "Apply")) : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok"))))),
9299
+ React__default.createElement(DeleteViewModal, { open: deleteViewModalOpen, view: viewForDelete, handleClose: function (shouldUpdate) {
9300
+ setDeleteViewModalOpen(false);
9301
+ if (shouldUpdate)
9302
+ getTagsFromAPI().then(function () { });
9303
+ } }),
9304
+ React__default.createElement(EditViewModal, { open: editViewModalOpen, view: viewForEdit, handleClose: function (shouldUpdate) {
9305
+ setEditViewModalOpen(false);
9306
+ if (shouldUpdate)
9307
+ getTagsFromAPI().then(function () { });
9308
+ } }),
9309
+ React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9310
+ };
9311
+
9312
+ var SaveAsViewModal = function (_a) {
9313
+ var open = _a.open, handleClose = _a.handleClose;
9314
+ var classes = useTrendingStyles();
9315
+ var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9316
+ var _c = useState(''), error = _c[0], setError = _c[1];
9317
+ var _d = useTrendingContext(), _e = _d.state, viewTags = _e.viewTags, views = _e.views, viewSelected = _e.viewSelected, _f = _d.actions, setViewSelected = _f.setViewSelected; _f.setViewTags;
9318
+ var _g = useState(true), isPublic = _g[0], setIsPublic = _g[1];
9319
+ var _h = useState(''), newView = _h[0], setNewView = _h[1];
9320
+ var handleCheck = function () { return setIsPublic(!isPublic); };
9321
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9322
+ var resp, ViewId_1, shouldClose_1;
9323
+ return __generator(this, function (_a) {
9324
+ switch (_a.label) {
9340
9325
  case 0:
9341
9326
  setIsLoading(true);
9342
- if (!options.dragSource) return [3 /*break*/, 5];
9343
- tagId = Number(options.dragSource.id);
9344
- newFolderId = Number((_a = options.dropTarget) === null || _a === void 0 ? void 0 : _a.id) || null;
9345
- if (tagId === newFolderId) {
9346
- setIsLoading(false);
9347
- return [2 /*return*/];
9348
- }
9349
- if (!(((_b = options.dragSource.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F")) return [3 /*break*/, 2];
9350
- return [4 /*yield*/, upsertTagFolder(tagId, newFolderId, options.dragSource.text, true)];
9327
+ return [4 /*yield*/, upsertView(null, newView, isPublic)];
9351
9328
  case 1:
9352
- newTree = _c.sent();
9353
- if (!newTree.ok) {
9354
- setError(newTree.message);
9355
- }
9329
+ resp = _a.sent();
9330
+ if (!resp.ok) return [3 /*break*/, 3];
9331
+ ViewId_1 = resp.data.returnValue;
9332
+ shouldClose_1 = true;
9333
+ return [4 /*yield*/, Promise.allSettled(Object.values(viewTags).map(function (_a) {
9334
+ var _b = _a.viewTag, TagId = _b.TagId, Color = _b.Color, MinScale = _b.MinScale, MaxScale = _b.MaxScale, IsAutoScale = _b.IsAutoScale, IsVisible = _b.IsVisible, Unit = _b.Unit;
9335
+ upsertViewTag(ViewId_1, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
9336
+ .then(function (r) {
9337
+ if (!r.ok) {
9338
+ setError(function (prevErr) { return "".concat(prevErr, ". ").concat(r.message); });
9339
+ if (shouldClose_1) {
9340
+ shouldClose_1 = false;
9341
+ }
9342
+ }
9343
+ });
9344
+ }))];
9345
+ case 2:
9346
+ _a.sent();
9347
+ handleClose(shouldClose_1);
9356
9348
  return [3 /*break*/, 4];
9357
- case 2: return [4 /*yield*/, changeTagFolderToTag(tagId, newFolderId)];
9358
9349
  case 3:
9359
- newTree = _c.sent();
9360
- if (!newTree.ok) {
9361
- setError(newTree.message);
9362
- }
9363
- _c.label = 4;
9350
+ setError(resp.message);
9351
+ _a.label = 4;
9364
9352
  case 4:
9365
- setTagsTreeData(tree);
9366
- _c.label = 5;
9367
- case 5:
9368
9353
  setIsLoading(false);
9369
9354
  return [2 /*return*/];
9370
9355
  }
9371
9356
  });
9372
9357
  }); };
9373
- var handleClick = function (node) {
9374
- if (node.data) {
9375
- onTagSelect(node.data);
9376
- }
9377
- };
9378
- var handleCloseContextMenu = function (e) {
9379
- if (showContextMenu) {
9380
- setShowContextMenu(false);
9381
- }
9382
- };
9383
9358
  return (React__default.createElement(React__default.Fragment, null,
9384
- React__default.createElement("div", { style: { display: isOpen ? "block" : "none", minHeight: "700px", minWidth: "800px" }, onClick: handleCloseContextMenu },
9385
- React__default.createElement("div", { style: { overflowY: 'auto', maxHeight: '700px' } }, isLoading ? (React__default.createElement(Grid$1, { container: true, justifyContent: "center", alignItems: "center", style: { minHeight: "100px" } },
9386
- React__default.createElement(CircularProgress$1, { size: "2rem" }))) : (React__default.createElement(DndProvider$1, { backend: HTML5Backend },
9387
- React__default.createElement(Tree, { classes: {
9388
- root: classes.assetRoot,
9389
- dropTarget: classes.dropTarget
9390
- }, initialOpen: expanded, tree: tagsTreeData, rootId: backendOffset, onDrop: handleDrop, canDrop: function (tag, options) {
9391
- return !selectedNodes.some(function (selectedNode) {
9392
- return Number(selectedNode.id) === Number(options.dropTargetId);
9393
- });
9394
- }, render: function (node, options) {
9395
- var selected = selectedNodes.some(function (selectedNode) { return Number(selectedNode.id) === Number(node.id); });
9396
- return (React__default.createElement(TagFolderCustomNode, { setContextMenuOver: handleContextMenu, node: node, options: options, isSelected: selected, openTagFolders: openTagFolders, setOpenTagFolders: setOpenTagFolders, handleSelect: handleClick }));
9397
- }, dragPreviewRender: function (monitorProps) { return (React__default.createElement(CustomDragPreview, { monitorProps: monitorProps })
9398
- // <div>{monitorProps.item.data?.TagName}</div>
9399
- ); } }))))),
9400
- React__default.createElement(ContextMenu, { anchorPoint: anchorPoint, isOpen: showContextMenu, setShowContextMenu: setShowContextMenu, tagNodeSelectedInTree: tagNodeSelectedInTree, getTagsTreeData: getTagsTreeData }),
9401
- React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9402
- };
9403
-
9404
- var TagsTreeModal = function (_a) {
9405
- var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
9406
- return (React__default.createElement(React__default.Fragment, null,
9407
- React__default.createElement(MesfModal, { open: open, handleClose: handleClose, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Tags' },
9359
+ React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Save View As' },
9360
+ React__default.createElement(Divider, null),
9408
9361
  React__default.createElement(MesfModal.Content, null,
9409
- React__default.createElement(Box, null,
9410
- React__default.createElement(Typography, { id: "modal-modal-description" },
9411
- React__default.createElement(TagSelectionModal, { isOpen: open, onClose: function () { return handleClose; }, onTagSelect: onTagSelect })))))));
9362
+ React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "1rem" } },
9363
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } }, views.length && viewSelected ? (React__default.createElement(Autocomplete, { size: 'small', id: "list-of-views", options: views, defaultValue: viewSelected, getOptionLabel: function (option) { return option.ViewName; }, freeSolo: true, onChange: function (ev, val) {
9364
+ setViewSelected(val);
9365
+ if (val) {
9366
+ setNewView("");
9367
+ }
9368
+ }, onInputChange: function (event, newInputValue) {
9369
+ var isValueInViews = views.some(function (view) { return view.ViewName === newInputValue; });
9370
+ if (!isValueInViews) {
9371
+ setNewView(newInputValue);
9372
+ }
9373
+ }, style: { width: "100%" }, renderInput: function (params) { return React__default.createElement(TextField, __assign({}, params, { label: "Views", variant: "outlined" })); } })) :
9374
+ (React__default.createElement(Box, null,
9375
+ React__default.createElement(TextField, { style: { minWidth: "600px" }, size: 'small', id: "outlined-basic", label: "View name", variant: "outlined", value: newView, onChange: (function (e) { return setNewView(e.target.value); }) }))))),
9376
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9377
+ React__default.createElement("label", null,
9378
+ "Public",
9379
+ React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck })))),
9380
+ React__default.createElement(Divider, null),
9381
+ React__default.createElement(MesfModal.Actions, null,
9382
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9383
+ React__default.createElement(Grid$1, { item: true },
9384
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9385
+ React__default.createElement(Grid$1, { item: true },
9386
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Save"))))),
9387
+ React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9412
9388
  };
9413
9389
 
9414
- var useTrendingStyles = makeStyles$1(function (theme) { return ({
9415
- datetimePicker: {
9416
- alignItems: "center",
9417
- "& .MuiInputBase-root": {
9418
- color: "black",
9419
- backgroundColor: "white",
9420
- borderRadius: theme.shape.borderRadius,
9421
- width: "90%",
9422
- minWidth: "90%",
9423
- maxWidth: "90%"
9424
- },
9425
- "& .MuiInputBase-input": {
9426
- fontSize: "13px !important",
9427
- height: "15px !important",
9428
- paddingRight: "3px",
9429
- paddingLeft: "3px"
9430
- },
9431
- "& .MuiInput-underline:before": {
9432
- borderBottomColor: "rgba(0, 0, 0, 0.42)"
9433
- },
9434
- padding: 0
9390
+ var useTagsTreeModalStyles = makeStyles$1(function (theme) { return ({
9391
+ dataTypeOfTree: {
9392
+ width: '25px',
9393
+ height: '25px',
9394
+ color: "white",
9395
+ display: 'flex',
9396
+ justifyContent: 'center',
9397
+ alignItems: 'center',
9398
+ cursor: 'pointer',
9399
+ border: "1px black solid"
9435
9400
  },
9436
- select: {
9437
- "& .MuiInput-root": {
9438
- width: "100%"
9439
- },
9440
- "& .MuiInputBase-root": {
9441
- color: "black",
9442
- backgroundColor: "white",
9443
- borderRadius: theme.shape.borderRadius,
9444
- minWidth: "100%"
9445
- },
9446
- "& .MuiInputBase-input": {
9447
- fontSize: "14px !important",
9448
- height: "15px !important"
9449
- },
9450
- "& .MuiInput-underline:before": {
9451
- borderBottomColor: "rgba(0, 0, 0, 0.42)"
9452
- },
9453
- padding: 0
9401
+ root: {
9402
+ alignItems: "center",
9403
+ display: "flex",
9404
+ height: "32px"
9454
9405
  },
9455
- labelOptions: {
9456
- paddingLeft: "2rem",
9457
- userSelect: "none",
9458
- "& > label": {
9459
- display: "flex",
9460
- alignItems: "center",
9461
- gap: "5px"
9462
- },
9463
- '& input[type="checkbox"]': {
9464
- zoom: 1.5
9406
+ customNodeRoot: {
9407
+ listStyleType: "none",
9408
+ margin: 0,
9409
+ padding: 0,
9410
+ '&:hover': {
9411
+ backgroundColor: "#f2f2f2"
9465
9412
  }
9466
9413
  },
9467
- isPublicCheckbox: {
9468
- userSelect: "none",
9469
- paddingLeft: '1rem',
9470
- "& > label": {
9471
- display: "flex",
9472
- alignItems: "center",
9473
- gap: "15px"
9474
- },
9475
- '& input[type="checkbox"]': {
9476
- zoom: 1.5
9477
- }
9414
+ arrow: {
9415
+ alignItems: "center",
9416
+ cursor: "pointer",
9417
+ display: "flex",
9418
+ height: "24px",
9419
+ justifyContent: "center",
9420
+ width: "24px",
9421
+ transition: "transform linear 0.1s",
9422
+ transform: "rotate(0deg)"
9478
9423
  },
9479
- navigatorButton: {
9480
- "& .MuiSvgIcon-root": {
9481
- cursor: "pointer !important",
9482
- height: '24px',
9483
- width: '24px',
9484
- '& svg': {
9485
- // Adjust the icon size as well
9486
- fontSize: '1.5rem'
9424
+ "arrow > div": {
9425
+ alignItems: "center",
9426
+ display: "flex"
9427
+ },
9428
+ "arrow.is-open": {
9429
+ transform: "rotate(90deg)"
9430
+ },
9431
+ filetype: {
9432
+ display: "flex"
9433
+ },
9434
+ label: {
9435
+ paddingInlineStart: "8px"
9436
+ },
9437
+ selected: {
9438
+ backgroundColor: "#e8f0fe"
9439
+ },
9440
+ dragging: {
9441
+ opacity: 0.5
9442
+ },
9443
+ contextMenu: {
9444
+ fontSize: "14px",
9445
+ backgroundColor: "#fff",
9446
+ borderRadius: "2px",
9447
+ padding: "5px 10px;",
9448
+ width: "140px",
9449
+ height: "auto",
9450
+ margin: "0",
9451
+ position: "fixed",
9452
+ boxShadow: "0 0 20px 0 #ccc",
9453
+ display: "flex",
9454
+ flexDirection: "column"
9455
+ },
9456
+ storyRoot: {
9457
+ display: "grid",
9458
+ height: "100%",
9459
+ gridTemplateRows: "auto 1fr",
9460
+ listStyleType: "none !important"
9461
+ },
9462
+ assetRoot: {
9463
+ boxSizing: "border-box",
9464
+ height: "100%",
9465
+ padding: "32px"
9466
+ },
9467
+ dropTarget: {
9468
+ boxShadow: "0 0 0 1px #1967d2 inset",
9469
+ borderRadius: '1px',
9470
+ backgroundColor: '#DAE4F2'
9471
+ },
9472
+ customDragRoot: {
9473
+ alignItems: "center",
9474
+ backgroundColor: "#1967d2",
9475
+ borderRadius: "4px",
9476
+ boxShadow: " 0 12px 24px -6px rgba(0, 0, 0, .25); 0 0 0 1px rgba(0, 0, 0, .08)",
9477
+ color: "#fff",
9478
+ display: "inline-grid",
9479
+ fontSize: "14px",
9480
+ gap: "8px",
9481
+ gridTemplateColumns: "auto auto",
9482
+ padding: "4px 8px",
9483
+ pointerEvents: "none"
9484
+ },
9485
+ icon: {
9486
+ alignItems: "center",
9487
+ display: "flex"
9488
+ },
9489
+ customDragLabel: {
9490
+ alignItems: "center",
9491
+ display: "flex"
9492
+ }
9493
+ }); });
9494
+
9495
+ function buildTagsTreeV2(data) {
9496
+ var tagsForTree = [];
9497
+ data.forEach(function (el) {
9498
+ var tagForTree = {
9499
+ id: el.TagId,
9500
+ parent: (el.ParentTagId || 0),
9501
+ text: el.TagName,
9502
+ data: el,
9503
+ droppable: el.TagTypeCode === 'F'
9504
+ };
9505
+ return tagsForTree.push(tagForTree);
9506
+ });
9507
+ return tagsForTree;
9508
+ }
9509
+
9510
+ var CustomDragPreview = function (props) {
9511
+ var _a, _b, _c;
9512
+ var classes = useTagsTreeModalStyles();
9513
+ var item = props.monitorProps.item;
9514
+ var isFolder = ((_a = item.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === 'F' ? true : false;
9515
+ return (React__default.createElement("div", { className: classes.customDragRoot },
9516
+ React__default.createElement("div", { className: classes.icon }, isFolder ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' }))),
9517
+ React__default.createElement("div", { className: classes.customDragLabel }, ((_b = item.data) === null || _b === void 0 ? void 0 : _b.Alias) || ((_c = item.data) === null || _c === void 0 ? void 0 : _c.TagName))));
9518
+ };
9519
+
9520
+ var customStyles = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
9521
+ var TagFolderCustomNode = function (_a) {
9522
+ var _b, _c, _d, _e, _f, _g, _h, _j;
9523
+ var node = _a.node, _k = _a.options, depth = _k.depth, isOpen = _k.isOpen, onToggle = _k.onToggle, containerRef = _k.containerRef, options = _a.options, setOpenTagFolders = _a.setOpenTagFolders, openTagFolders = _a.openTagFolders, handleSelect = _a.handleSelect, setContextMenuOver = _a.setContextMenuOver, isSelected = _a.isSelected;
9524
+ var classes = useTagsTreeModalStyles();
9525
+ var nodeClasses = "".concat(classes.customNodeRoot, " ").concat(classes.root, " ").concat(isSelected ? classes.selected : "");
9526
+ var onClickHandler = function () {
9527
+ var _a;
9528
+ var _b;
9529
+ if (options.hasChild || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === 'F') {
9530
+ if (openTagFolders[node.id]) {
9531
+ var newOpenTagFolders = __assign({}, openTagFolders);
9532
+ delete newOpenTagFolders[node.id];
9533
+ setOpenTagFolders(newOpenTagFolders);
9534
+ }
9535
+ else {
9536
+ setOpenTagFolders(__assign(__assign({}, openTagFolders), (_a = {}, _a[node.id] = node.id, _a)));
9487
9537
  }
9488
- },
9489
- color: 'black'
9490
- },
9491
- iconContainer: {
9492
- display: 'flex',
9493
- justifyContent: 'flex-end',
9494
- alignItems: 'center',
9495
- flex: 1
9496
- },
9497
- optionContainer: {
9498
- display: 'flex',
9499
- justifyContent: 'flex-start',
9500
- alignItems: 'center',
9501
- width: '100%'
9502
- },
9503
- optionLabel: {
9504
- flexGrow: 1
9505
- },
9506
- inputCustom: {
9507
- color: 'rgba(0, 0, 0, 0.87)',
9508
- cursor: 'text',
9509
- fontSize: '0.7rem',
9510
- boxSizing: 'border-box',
9511
- fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
9512
- fontWeight: 400,
9513
- lineHeight: 1.1876,
9514
- letterSpacing: '0.00938em',
9515
- '& .MuiOutlinedInput-input': {
9516
- padding: '10px 10px'
9538
+ onToggle();
9539
+ return;
9517
9540
  }
9518
- }
9519
- }); });
9541
+ if (!options.hasChild) {
9542
+ handleSelect(node);
9543
+ }
9544
+ };
9545
+ var handleContextMenu = useCallback(function (ev) {
9546
+ ev.stopPropagation();
9547
+ ev.preventDefault();
9548
+ setContextMenuOver(node, ev);
9549
+ }, [node.id, setContextMenuOver]);
9550
+ useEffect(function () {
9551
+ var _a;
9552
+ (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener("contextmenu", handleContextMenu);
9553
+ return function () {
9554
+ var _a;
9555
+ (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener("contextmenu", handleContextMenu);
9556
+ };
9557
+ }, []);
9558
+ return (React__default.createElement("div", { className: nodeClasses, onClick: onClickHandler, style: { paddingLeft: depth * 20, cursor: "pointer" } },
9559
+ React__default.createElement("style", null, customStyles),
9560
+ React__default.createElement(React__default.Fragment, null,
9561
+ options.hasChild ? (React__default.createElement("div", null, isOpen ? React__default.createElement(ArrowDropDownIcon, null) : React__default.createElement(ArrowRight, null)))
9562
+ : null,
9563
+ React__default.createElement("div", null, options.hasChild || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === 'F' ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' })))),
9564
+ ((_c = node.data) === null || _c === void 0 ? void 0 : _c.TagName) &&
9565
+ React__default.createElement(React__default.Fragment, null,
9566
+ ((_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: {
9567
+ backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === 'A' ? "#AD48C4" : "#C46F48",
9568
+ margin: "0 5px"
9569
+ } }, (_g = node.data) === null || _g === void 0 ? void 0 : _g.TagTypeCode)),
9570
+ React__default.createElement(Tooltip, { title: node.data.TagName, placement: "top", arrow: true },
9571
+ React__default.createElement(Typography, { variant: "body2" }, ((_h = node.data) === null || _h === void 0 ? void 0 : _h.Alias) || ((_j = node.data) === null || _j === void 0 ? void 0 : _j.TagName))))));
9572
+ };
9520
9573
 
9521
- var DeleteViewModal = function (_a) {
9522
- var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9523
- var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9574
+ var NewFolderModal = function (_a) {
9575
+ var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9576
+ var _b = useState(), name = _b[0], setName = _b[1];
9524
9577
  var _c = useState(''), error = _c[0], setError = _c[1];
9525
- var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9526
- var resp;
9527
- return __generator(this, function (_a) {
9528
- switch (_a.label) {
9578
+ var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9579
+ var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9580
+ var parentId, parentTagId, resp;
9581
+ var _a;
9582
+ return __generator(this, function (_b) {
9583
+ switch (_b.label) {
9529
9584
  case 0:
9585
+ e.preventDefault();
9586
+ parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9587
+ parentTagId = ((_a = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === "F" ? Number(tagNodeSelectedInTree.id) : parentId;
9530
9588
  setIsLoading(true);
9531
- if (!!isNil$1(view)) return [3 /*break*/, 2];
9532
- return [4 /*yield*/, deleteView(view.ViewId)];
9589
+ if (!name) return [3 /*break*/, 2];
9590
+ return [4 /*yield*/, upsertTagFolder(null, parentTagId, name, true)];
9533
9591
  case 1:
9534
- resp = _a.sent();
9592
+ resp = _b.sent();
9535
9593
  if (!resp.ok) {
9536
9594
  setError(resp.message);
9537
9595
  }
9538
- else {
9539
- handleClose(true);
9540
- }
9541
- _a.label = 2;
9596
+ _b.label = 2;
9542
9597
  case 2:
9598
+ handleClose(true);
9599
+ setName('');
9543
9600
  setIsLoading(false);
9544
9601
  return [2 /*return*/];
9545
9602
  }
9546
9603
  });
9547
9604
  }); };
9548
9605
  return (React__default.createElement(React__default.Fragment, null,
9549
- React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Delete View' },
9550
- React__default.createElement(Divider, null),
9551
- React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9552
- (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9553
- React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9554
- React__default.createElement(Typography, null,
9555
- "Are yu sure you want to delete ",
9556
- React__default.createElement("strong", null, view === null || view === void 0 ? void 0 : view.ViewName),
9557
- " ?")))) :
9558
- (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9559
- React__default.createElement(Divider, null),
9606
+ React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'New folder' },
9607
+ React__default.createElement(MesfModal.Content, null,
9608
+ React__default.createElement(Box, null,
9609
+ React__default.createElement(TextField, { style: { minWidth: "600px" }, id: "outlined-basic", label: "Folder name", variant: "outlined", value: name, onChange: (function (e) { return setName(e.target.value); }) }))),
9560
9610
  React__default.createElement(MesfModal.Actions, null,
9561
- React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9562
- React__default.createElement(Grid$1, { item: true },
9563
- React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9564
- React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9565
- React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'secondary', onClick: handleSubmit, isLoading: isLoading }, "Delete")
9566
- : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9611
+ React__default.createElement("div", null,
9612
+ React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9613
+ React__default.createElement("div", null,
9614
+ React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Save")))),
9567
9615
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9568
9616
  };
9569
9617
 
9570
- var EditViewModal = function (_a) {
9571
- var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9572
- var classes = useTrendingStyles();
9573
- var _b = useState(''), newName = _b[0], setNewName = _b[1];
9574
- var _c = useState(true), isPublic = _c[0], setIsPublic = _c[1];
9575
- var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9576
- var _e = useState(''), error = _e[0], setError = _e[1];
9577
- var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9578
- var resp;
9618
+ var RemoveFolderModal = function (_a) {
9619
+ var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9620
+ var _b = useState(''), error = _b[0], setError = _b[1];
9621
+ var _c = useState(false), isLoading = _c[0], setIsLoading = _c[1];
9622
+ var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9623
+ var parentId, name_1, id, resp;
9579
9624
  return __generator(this, function (_a) {
9580
9625
  switch (_a.label) {
9581
9626
  case 0:
9627
+ e.preventDefault();
9628
+ if (!tagNodeSelectedInTree) return [3 /*break*/, 5];
9629
+ parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9630
+ name_1 = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text;
9631
+ id = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.id);
9632
+ resp = void 0;
9582
9633
  setIsLoading(true);
9583
- if (!!isNil$1(view)) return [3 /*break*/, 2];
9584
- return [4 /*yield*/, upsertView(view.ViewId, newName, isPublic)];
9634
+ if (!parentId) return [3 /*break*/, 2];
9635
+ return [4 /*yield*/, deleteTagFolder(id)];
9585
9636
  case 1:
9586
9637
  resp = _a.sent();
9587
9638
  if (!resp.ok) {
9588
9639
  setError(resp.message);
9589
9640
  }
9590
- else {
9591
- handleClose(true);
9641
+ return [3 /*break*/, 4];
9642
+ case 2: return [4 /*yield*/, upsertTagFolder(id, parentId, name_1, false)];
9643
+ case 3:
9644
+ resp = _a.sent();
9645
+ _a.label = 4;
9646
+ case 4:
9647
+ if (!resp.ok) {
9648
+ setError(resp.message);
9592
9649
  }
9593
- _a.label = 2;
9594
- case 2:
9650
+ _a.label = 5;
9651
+ case 5:
9652
+ handleClose(true);
9595
9653
  setIsLoading(false);
9596
9654
  return [2 /*return*/];
9597
9655
  }
9598
9656
  });
9599
9657
  }); };
9600
- var handleChangeInput = function (e) {
9601
- e.preventDefault();
9602
- var name = e.target.value;
9603
- setNewName(name);
9604
- };
9605
- var handleCheck = function () { return setIsPublic(!isPublic); };
9606
- useEffect(function () {
9607
- if (view) {
9608
- setIsPublic(view.IsPublic);
9609
- setNewName(view.ViewName);
9610
- }
9611
- }, [view]);
9612
9658
  return (React__default.createElement(React__default.Fragment, null,
9613
- React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Update View' },
9614
- React__default.createElement(Divider, null),
9615
- React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9616
- (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9617
- React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9618
- React__default.createElement(TextField, { required: true, className: classes.inputCustom, id: "viewName", label: "Name", variant: "outlined", onChange: handleChangeInput, value: newName })),
9619
- React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9620
- React__default.createElement("label", null,
9621
- React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck }),
9622
- React__default.createElement(Typography, null, "Public"))))) :
9623
- (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9624
- React__default.createElement(Divider, null),
9659
+ React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Remove Folder' },
9660
+ React__default.createElement(MesfModal.Content, null,
9661
+ React__default.createElement(Box, null,
9662
+ React__default.createElement(Typography, null,
9663
+ "Are you sure you want to remove ",
9664
+ React__default.createElement("strong", null, tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text),
9665
+ " folder?"))),
9625
9666
  React__default.createElement(MesfModal.Actions, null,
9626
- React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9627
- React__default.createElement(Grid$1, { item: true },
9628
- React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9629
- React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9630
- React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Update")
9631
- : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9667
+ React__default.createElement("div", null,
9668
+ React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9669
+ React__default.createElement("div", null,
9670
+ React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Remove")))),
9632
9671
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9633
9672
  };
9634
9673
 
9635
- var LoadViewModal = function (_a) {
9636
- var open = _a.open, handleClose = _a.handleClose, getTagsFromAPI = _a.getTagsFromAPI;
9637
- var _b = useTrendingContext(), _c = _b.state, views = _c.views, viewSelected = _c.viewSelected, _d = _b.actions; _d.setViews; var setViewTags = _d.setViewTags, setViewSelected = _d.setViewSelected;
9638
- var classes = useTrendingStyles();
9639
- var _e = useState(null), viewForDelete = _e[0], setViewForDelete = _e[1];
9640
- var _f = useState(null), viewForEdit = _f[0], setViewForEdit = _f[1];
9641
- var _g = useState(false), deleteViewModalOpen = _g[0], setDeleteViewModalOpen = _g[1];
9642
- var _h = useState(false), editViewModalOpen = _h[0], setEditViewModalOpen = _h[1];
9643
- var _j = useState(false), allViewsChecked = _j[0], setAllViewsChecked = _j[1];
9644
- var _k = useState(false), isLoading = _k[0], setIsLoading = _k[1];
9645
- var _l = useState(''), error = _l[0], setError = _l[1];
9646
- var handleSelect = function () { return __awaiter(void 0, void 0, void 0, function () {
9647
- var viewTagsResp;
9674
+ var ContextMenu = function (_a) {
9675
+ var _b;
9676
+ var isOpen = _a.isOpen, anchorPoint = _a.anchorPoint, tagNodeSelectedInTree = _a.tagNodeSelectedInTree, getTagsTreeData = _a.getTagsTreeData, setShowContextMenu = _a.setShowContextMenu;
9677
+ var classes = useTagsTreeModalStyles();
9678
+ var _c = useState(false), showNewTagModal = _c[0], setShowNewTagModal = _c[1];
9679
+ var _d = useState(false), showRemoveTagModal = _d[0], setShowRemoveTagModal = _d[1];
9680
+ var isFolder = ((_b = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F";
9681
+ return (React__default.createElement(React__default.Fragment, null,
9682
+ isOpen && anchorPoint ? (React__default.createElement("ul", { className: classes.contextMenu, style: { top: anchorPoint.y, left: anchorPoint.x } },
9683
+ React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowNewTagModal(true); } }, "New Folder"),
9684
+ tagNodeSelectedInTree && isFolder && (React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowRemoveTagModal(true); } }, "Remove Folder")))) : (null),
9685
+ React__default.createElement(NewFolderModal, { open: showNewTagModal, handleClose: function (shouldUpdate) {
9686
+ if (shouldUpdate) {
9687
+ getTagsTreeData();
9688
+ }
9689
+ setShowContextMenu(false);
9690
+ setShowNewTagModal(false);
9691
+ }, tagNodeSelectedInTree: tagNodeSelectedInTree }),
9692
+ React__default.createElement(RemoveFolderModal, { open: showRemoveTagModal, handleClose: function (shouldUpdate) {
9693
+ if (shouldUpdate) {
9694
+ getTagsTreeData();
9695
+ }
9696
+ setShowContextMenu(false);
9697
+ setShowRemoveTagModal(false);
9698
+ }, tagNodeSelectedInTree: tagNodeSelectedInTree })));
9699
+ };
9700
+
9701
+ var TagSelectionModal = function (_a) {
9702
+ var isOpen = _a.isOpen; _a.onClose; var onTagSelect = _a.onTagSelect;
9703
+ var classes = useTagsTreeModalStyles();
9704
+ var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
9705
+ var _c = useState(''), error = _c[0], setError = _c[1];
9706
+ var _d = useState([]), tagsTreeData = _d[0], setTagsTreeData = _d[1];
9707
+ var _e = useState(null), tagNodeSelectedInTree = _e[0], setTagNodeSelectedInTree = _e[1];
9708
+ var _f = useState(null), anchorPoint = _f[0], setAnchorPoint = _f[1];
9709
+ var _g = useState(false), showContextMenu = _g[0], setShowContextMenu = _g[1];
9710
+ var backendOffset = 1000000;
9711
+ var _h = useState({}), openTagFolders = _h[0], setOpenTagFolders = _h[1];
9712
+ var _j = useState([]), selectedNodes = _j[0], setSelectedNodes = _j[1];
9713
+ useTrendingContext().state.viewTags;
9714
+ var handleContextMenu = function (data, e) {
9715
+ e.preventDefault();
9716
+ var top = e.clientY;
9717
+ var left = e.clientX;
9718
+ setAnchorPoint({ x: left, y: top });
9719
+ setSelectedNodes([data]);
9720
+ setShowContextMenu(true);
9721
+ var selectedNode = tagsTreeData.find(function (node) { var _a; return ((_a = node.data) === null || _a === void 0 ? void 0 : _a.TagId) === data.id; });
9722
+ if (selectedNode) {
9723
+ setTagNodeSelectedInTree(selectedNode);
9724
+ }
9725
+ };
9726
+ var getTagsTreeData = function () { return __awaiter(void 0, void 0, void 0, function () {
9727
+ var tagsTree, rows, tree;
9648
9728
  return __generator(this, function (_a) {
9649
9729
  switch (_a.label) {
9650
9730
  case 0:
9651
- if (!viewSelected) return [3 /*break*/, 2];
9731
+ if (!isOpen) return [3 /*break*/, 2];
9652
9732
  setIsLoading(true);
9653
- return [4 /*yield*/, getViewTags(viewSelected.ViewId)];
9733
+ return [4 /*yield*/, getTagsTree()];
9654
9734
  case 1:
9655
- viewTagsResp = _a.sent();
9656
- if (viewTagsResp.ok) {
9657
- setViewTags(viewTagsResp.data.tables[0].rows);
9658
- }
9659
- else {
9660
- setError(viewTagsResp.message);
9735
+ tagsTree = _a.sent();
9736
+ if (tagsTree.ok) {
9737
+ rows = tagsTree.data.tables[0].rows;
9738
+ tree = buildTagsTreeV2(rows);
9739
+ setTagsTreeData(tree);
9661
9740
  }
9662
9741
  setIsLoading(false);
9663
- handleClose(true);
9664
9742
  _a.label = 2;
9665
9743
  case 2: return [2 /*return*/];
9666
9744
  }
9667
9745
  });
9668
9746
  }); };
9669
- var handleDeleteView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9670
- return __generator(this, function (_a) {
9671
- e.stopPropagation();
9672
- if (view.ViewId === (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId)) {
9673
- setError('Can not delete current view');
9674
- }
9675
- else {
9676
- setViewForDelete(view);
9677
- setDeleteViewModalOpen(true);
9678
- }
9679
- return [2 /*return*/];
9680
- });
9681
- }); };
9682
- var handleEditView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9683
- return __generator(this, function (_a) {
9684
- setViewForEdit(view);
9685
- setEditViewModalOpen(true);
9686
- return [2 /*return*/];
9687
- });
9688
- }); };
9689
- var handleAllViewsCheckbox = function () {
9690
- setAllViewsChecked(function (prev) { return !prev; });
9691
- };
9692
- var publicViews = useMemo(function () {
9693
- return views.filter(function (v) { return v.IsPublic === true; });
9694
- }, [views, allViewsChecked]);
9695
- return (React__default.createElement("div", null,
9696
- 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' },
9697
- React__default.createElement(MesfModal.Content, null,
9698
- React__default.createElement(Grid$1, { container: true }, views.length ? (React__default.createElement(React__default.Fragment, null,
9699
- React__default.createElement(Grid$1, { item: true, md: 12 },
9700
- React__default.createElement("div", { className: classes.isPublicCheckbox, style: { paddingBottom: '1rem' } },
9701
- React__default.createElement("label", { htmlFor: "" },
9702
- React__default.createElement("input", { type: "checkbox", checked: allViewsChecked, onChange: handleAllViewsCheckbox }),
9703
- React__default.createElement(Typography, null, "All Views")))),
9704
- React__default.createElement(Grid$1, { item: true, md: 12 },
9705
- 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 },
9706
- React__default.createElement("div", { className: classes.optionLabel }, option.ViewName),
9707
- React__default.createElement("div", { className: classes.iconContainer },
9708
- option.IsPublic ? '' :
9709
- React__default.createElement(React__default.Fragment, null,
9710
- React__default.createElement(Tooltip, { title: "Private", arrow: true },
9711
- React__default.createElement(LockIcon, { fontSize: 'small', style: { color: 'black', height: "18px", width: '18px', cursor: 'auto' } }))),
9712
- React__default.createElement(IconButton$1, { onClick: function (e) { return handleEditView(option); } },
9713
- React__default.createElement(CreateIcon, { fontSize: 'small', color: 'primary', style: { height: "18px", width: '18px', cursor: 'pointer' } })),
9714
- React__default.createElement(IconButton$1, { onClick: function (e) { return handleDeleteView(option, e); } },
9715
- 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" })); } })))) :
9716
- (React__default.createElement(Typography, null, "No views detected, please add one")))),
9717
- React__default.createElement(MesfModal.Actions, null,
9718
- React__default.createElement("div", { style: { paddingTop: "1rem" } },
9719
- React__default.createElement(Button$1, { variant: 'outlined', style: { marginRight: "1rem" }, color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel"),
9720
- views.length ? (React__default.createElement(ButtonWithLoading, { onClick: handleSelect, variant: 'contained', color: 'primary', isLoading: isLoading, style: { marginRight: "1rem" } }, "Apply")) : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok"))))),
9721
- React__default.createElement(DeleteViewModal, { open: deleteViewModalOpen, view: viewForDelete, handleClose: function (shouldUpdate) {
9722
- setDeleteViewModalOpen(false);
9723
- if (shouldUpdate)
9724
- getTagsFromAPI().then(function () { });
9725
- } }),
9726
- React__default.createElement(EditViewModal, { open: editViewModalOpen, view: viewForEdit, handleClose: function (shouldUpdate) {
9727
- setEditViewModalOpen(false);
9728
- if (shouldUpdate)
9729
- getTagsFromAPI().then(function () { });
9730
- } }),
9731
- React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9732
- };
9733
-
9734
- var SaveAsViewModal = function (_a) {
9735
- var open = _a.open, handleClose = _a.handleClose;
9736
- var classes = useTrendingStyles();
9737
- var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9738
- var _c = useState(''), error = _c[0], setError = _c[1];
9739
- var _d = useTrendingContext(), _e = _d.state, viewTags = _e.viewTags, views = _e.views, viewSelected = _e.viewSelected, _f = _d.actions, setViewSelected = _f.setViewSelected; _f.setViewTags;
9740
- var _g = useState(true), isPublic = _g[0], setIsPublic = _g[1];
9741
- var _h = useState(''), newView = _h[0], setNewView = _h[1];
9742
- var handleCheck = function () { return setIsPublic(!isPublic); };
9743
- var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9744
- var resp, ViewId_1, shouldClose_1;
9745
- return __generator(this, function (_a) {
9746
- switch (_a.label) {
9747
+ var expanded = useMemo(function () {
9748
+ return Object.keys(openTagFolders).map(function (el) { return parseInt(el); });
9749
+ }, [openTagFolders]);
9750
+ useEffect(function () {
9751
+ getTagsTreeData();
9752
+ }, [isOpen]);
9753
+ var handleDrop = function (tree, options) { return __awaiter(void 0, void 0, void 0, function () {
9754
+ var tagId, newFolderId, newTree, newTree;
9755
+ var _a, _b;
9756
+ return __generator(this, function (_c) {
9757
+ switch (_c.label) {
9747
9758
  case 0:
9748
9759
  setIsLoading(true);
9749
- return [4 /*yield*/, upsertView(null, newView, isPublic)];
9760
+ if (!options.dragSource) return [3 /*break*/, 5];
9761
+ tagId = Number(options.dragSource.id);
9762
+ newFolderId = Number((_a = options.dropTarget) === null || _a === void 0 ? void 0 : _a.id) || null;
9763
+ if (tagId === newFolderId) {
9764
+ setIsLoading(false);
9765
+ return [2 /*return*/];
9766
+ }
9767
+ if (!(((_b = options.dragSource.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F")) return [3 /*break*/, 2];
9768
+ return [4 /*yield*/, upsertTagFolder(tagId, newFolderId, options.dragSource.text, true)];
9750
9769
  case 1:
9751
- resp = _a.sent();
9752
- if (!resp.ok) return [3 /*break*/, 3];
9753
- ViewId_1 = resp.data.returnValue;
9754
- shouldClose_1 = true;
9755
- return [4 /*yield*/, Promise.allSettled(viewTags.map(function (_a) {
9756
- var TagId = _a.TagId, Color = _a.Color, MinScale = _a.MinScale, MaxScale = _a.MaxScale, IsAutoScale = _a.IsAutoScale, IsVisible = _a.IsVisible, Unit = _a.Unit;
9757
- upsertViewTag(ViewId_1, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
9758
- .then(function (r) {
9759
- if (!r.ok) {
9760
- setError(function (prevErr) { return "".concat(prevErr, ". ").concat(r.message); });
9761
- if (shouldClose_1) {
9762
- shouldClose_1 = false;
9763
- }
9764
- }
9765
- });
9766
- }))];
9767
- case 2:
9768
- _a.sent();
9769
- handleClose(shouldClose_1);
9770
+ newTree = _c.sent();
9771
+ if (!newTree.ok) {
9772
+ setError(newTree.message);
9773
+ }
9770
9774
  return [3 /*break*/, 4];
9775
+ case 2: return [4 /*yield*/, changeTagFolderToTag(tagId, newFolderId)];
9771
9776
  case 3:
9772
- setError(resp.message);
9773
- _a.label = 4;
9777
+ newTree = _c.sent();
9778
+ if (!newTree.ok) {
9779
+ setError(newTree.message);
9780
+ }
9781
+ _c.label = 4;
9774
9782
  case 4:
9783
+ setTagsTreeData(tree);
9784
+ _c.label = 5;
9785
+ case 5:
9775
9786
  setIsLoading(false);
9776
9787
  return [2 /*return*/];
9777
9788
  }
9778
9789
  });
9779
9790
  }); };
9791
+ var handleClick = function (node) {
9792
+ if (node.data) {
9793
+ onTagSelect(node.data);
9794
+ }
9795
+ };
9796
+ var handleCloseContextMenu = function (e) {
9797
+ if (showContextMenu) {
9798
+ setShowContextMenu(false);
9799
+ }
9800
+ };
9780
9801
  return (React__default.createElement(React__default.Fragment, null,
9781
- React__default.createElement(MesfModal, { open: open, handleClose: function () { return handleClose(false); }, maxWidth: "xl", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Save View As' },
9782
- React__default.createElement(Divider, null),
9783
- React__default.createElement(MesfModal.Content, null,
9784
- React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "1rem" } },
9785
- React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } }, views.length && viewSelected ? (React__default.createElement(Autocomplete, { size: 'small', id: "list-of-views", options: views, defaultValue: viewSelected, getOptionLabel: function (option) { return option.ViewName; }, freeSolo: true, onChange: function (ev, val) {
9786
- setViewSelected(val);
9787
- if (val) {
9788
- setNewView("");
9789
- }
9790
- }, onInputChange: function (event, newInputValue) {
9791
- var isValueInViews = views.some(function (view) { return view.ViewName === newInputValue; });
9792
- if (!isValueInViews) {
9793
- setNewView(newInputValue);
9794
- }
9795
- }, style: { width: "100%" }, renderInput: function (params) { return React__default.createElement(TextField, __assign({}, params, { label: "Views", variant: "outlined" })); } })) :
9796
- (React__default.createElement(Box, null,
9797
- React__default.createElement(TextField, { style: { minWidth: "600px" }, size: 'small', id: "outlined-basic", label: "View name", variant: "outlined", value: newView, onChange: (function (e) { return setNewView(e.target.value); }) }))))),
9798
- React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9799
- React__default.createElement("label", null,
9800
- "Public",
9801
- React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck })))),
9802
- React__default.createElement(Divider, null),
9803
- React__default.createElement(MesfModal.Actions, null,
9804
- React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9805
- React__default.createElement(Grid$1, { item: true },
9806
- React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9807
- React__default.createElement(Grid$1, { item: true },
9808
- React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Save"))))),
9802
+ React__default.createElement("div", { style: { display: isOpen ? "block" : "none", minHeight: "700px", minWidth: "800px" }, onClick: handleCloseContextMenu },
9803
+ React__default.createElement("div", { style: { overflowY: 'auto', maxHeight: '700px' } }, isLoading ? (React__default.createElement(Grid$1, { container: true, justifyContent: "center", alignItems: "center", style: { minHeight: "100px" } },
9804
+ React__default.createElement(CircularProgress$1, { size: "2rem" }))) : (React__default.createElement(DndProvider$1, { backend: HTML5Backend },
9805
+ React__default.createElement(Tree, { classes: {
9806
+ root: classes.assetRoot,
9807
+ dropTarget: classes.dropTarget
9808
+ }, initialOpen: expanded, tree: tagsTreeData, rootId: backendOffset, onDrop: handleDrop, canDrop: function (tag, options) {
9809
+ return !selectedNodes.some(function (selectedNode) {
9810
+ return Number(selectedNode.id) === Number(options.dropTargetId);
9811
+ });
9812
+ }, render: function (node, options) {
9813
+ var selected = selectedNodes.some(function (selectedNode) { return Number(selectedNode.id) === Number(node.id); });
9814
+ return (React__default.createElement(TagFolderCustomNode, { setContextMenuOver: handleContextMenu, node: node, options: options, isSelected: selected, openTagFolders: openTagFolders, setOpenTagFolders: setOpenTagFolders, handleSelect: handleClick }));
9815
+ }, dragPreviewRender: function (monitorProps) { return (React__default.createElement(CustomDragPreview, { monitorProps: monitorProps })
9816
+ // <div>{monitorProps.item.data?.TagName}</div>
9817
+ ); } }))))),
9818
+ React__default.createElement(ContextMenu, { anchorPoint: anchorPoint, isOpen: showContextMenu, setShowContextMenu: setShowContextMenu, tagNodeSelectedInTree: tagNodeSelectedInTree, getTagsTreeData: getTagsTreeData }),
9809
9819
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9810
9820
  };
9811
9821
 
9822
+ var TagsTreeModal = function (_a) {
9823
+ var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
9824
+ return (React__default.createElement(React__default.Fragment, null,
9825
+ React__default.createElement(MesfModal, { open: open, handleClose: handleClose, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Tags' },
9826
+ React__default.createElement(MesfModal.Content, null,
9827
+ React__default.createElement(Box, null,
9828
+ React__default.createElement(Typography, { id: "modal-modal-description" },
9829
+ React__default.createElement(TagSelectionModal, { isOpen: open, onClose: function () { return handleClose; }, onTagSelect: onTagSelect })))))));
9830
+ };
9831
+
9812
9832
  var useTagsDataTable = function (_a) {
9813
- var cursorData = _a.cursorData, viewTags = _a.viewTags, chartData = _a.chartData;
9833
+ var cursorData = _a.cursorData, viewTagsMap = _a.viewTagsMap, chartData = _a.chartData;
9814
9834
  return useMemo(function () {
9815
9835
  var _a;
9816
9836
  var dataTable = {};
9817
9837
  if (cursorData) {
9818
- var _loop_1 = function (idx) {
9819
- var tag = viewTags[idx];
9838
+ var _loop_1 = function (viewTagEntry) {
9839
+ var tag = viewTagsMap[viewTagEntry].viewTag;
9820
9840
  var datasetForTag = ((_a = chartData.datasets.find(function (ds) {
9821
9841
  return ds.tagId === (tag === null || tag === void 0 ? void 0 : tag.TagId);
9822
9842
  })) === null || _a === void 0 ? void 0 : _a.data) || [];
@@ -9825,8 +9845,8 @@ var useTagsDataTable = function (_a) {
9825
9845
  var p1Found = false;
9826
9846
  var pmin = { x: 0, y: Number.POSITIVE_INFINITY };
9827
9847
  var pmax = { x: 0, y: Number.NEGATIVE_INFINITY };
9828
- for (var idx_1 = 0; idx_1 < datasetForTag.length; idx_1++) {
9829
- var curr = datasetForTag[idx_1];
9848
+ for (var idx = 0; idx < datasetForTag.length; idx++) {
9849
+ var curr = datasetForTag[idx];
9830
9850
  var currentVal = curr.x;
9831
9851
  if (!p1Found) {
9832
9852
  if (currentVal < cursorData.x1) {
@@ -9863,12 +9883,12 @@ var useTagsDataTable = function (_a) {
9863
9883
  pmax: pmax
9864
9884
  };
9865
9885
  };
9866
- for (var idx = 0; idx < viewTags.length; idx++) {
9867
- _loop_1(idx);
9886
+ for (var viewTagEntry in viewTagsMap) {
9887
+ _loop_1(viewTagEntry);
9868
9888
  }
9869
9889
  }
9870
9890
  return dataTable;
9871
- }, [viewTags, chartData, cursorData]);
9891
+ }, [viewTagsMap, chartData, cursorData]);
9872
9892
  };
9873
9893
 
9874
9894
  var useTagsTableStyles = makeStyles$1(function (theme) { return ({
@@ -10006,7 +10026,7 @@ var formatTimeDiffWithMs = function (start, end) {
10006
10026
  };
10007
10027
 
10008
10028
  var TableComponent = function (_a) {
10009
- 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;
10029
+ var chartData = _a.chartData, cursorData = _a.cursorData, getTagsFromAPI = _a.getTagsFromAPI, viewTagForDelete = _a.viewTagForDelete, setViewTagForDelete = _a.setViewTagForDelete, selectedRowTagId = _a.selectedRowTagId, setSelectedRowTagId = _a.setSelectedRowTagId, handleRightClick = _a.handleRightClick; _a.setContextMenuPosition; var contextMenuPosition = _a.contextMenuPosition, openContextMenu = _a.openContextMenu, setOpenContextMenu = _a.setOpenContextMenu;
10010
10030
  var classes = useTagsTableStyles();
10011
10031
  var _b = useTrendingContext(), _c = _b.state, viewTags = _c.viewTags, viewSelected = _c.viewSelected, _d = _b.actions, setViewTags = _d.setViewTags, setViewTagsAndRefetch = _d.setViewTagsAndRefetch;
10012
10032
  var _e = useState({}); _e[0]; _e[1];
@@ -10016,44 +10036,53 @@ var TableComponent = function (_a) {
10016
10036
  var _j = useState(false), saveAsViewModalOpen = _j[0], setSaveAsViewModalOpen = _j[1];
10017
10037
  var _k = useState(false), loadViewOpen = _k[0], setLoadViewOpen = _k[1];
10018
10038
  var _l = useState(''), snackbarMessage = _l[0], setSnackbarMessage = _l[1];
10019
- var dataTable = useTagsDataTable({ viewTags: viewTags, chartData: chartData, cursorData: cursorData });
10039
+ var dataTable = useTagsDataTable({ viewTagsMap: viewTags, chartData: chartData, cursorData: cursorData });
10020
10040
  var handleChange = function (tagId, value, property) {
10021
- var newTags = viewTags.map(function (tag) {
10022
- var _a;
10023
- return tag.TagId === tagId ? __assign(__assign({}, tag), (_a = {}, _a[property] = value, _a.IsAutoScale = false, _a)) : tag;
10024
- });
10041
+ var newTags = structuredClone(viewTags);
10042
+ newTags[tagId]['viewTag'][property] = value;
10043
+ newTags[tagId]['viewTag']['IsAutoScale'] = false;
10025
10044
  setViewTags(newTags);
10026
10045
  };
10046
+ var handleChangeScale = function (value, scale, tagId) {
10047
+ handleChange(tagId, value, scale);
10048
+ };
10027
10049
  var handleChangeAlias = function (tagId, newName) {
10028
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { Alias: newName }) : tag; });
10050
+ var newTags = structuredClone(viewTags);
10051
+ newTags[tagId]['viewTag']['Alias'] = newName;
10029
10052
  setViewTags(newTags);
10030
10053
  };
10031
10054
  var handleVisibilityChange = function (tagId, value) {
10032
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { IsVisible: value }) : tag; });
10055
+ var newTags = structuredClone(viewTags);
10056
+ newTags[tagId]['viewTag']['IsVisible'] = value;
10033
10057
  setViewTags(newTags);
10034
10058
  };
10035
10059
  var handleUnitChange = function (tagId, newUnit) {
10036
- var newTags = viewTags.map(function (tag) { return (tag.TagId === tagId ? __assign(__assign({}, tag), { Unit: newUnit }) : tag); });
10060
+ var newTags = structuredClone(viewTags);
10061
+ newTags[tagId]['viewTag']['Unit'] = newUnit;
10037
10062
  setViewTags(newTags);
10038
10063
  };
10039
10064
  var handleAutoScaleChange = function (tagId, checked) {
10040
- var newTags = viewTags.map(function (t) { return t.TagId == tagId ? __assign(__assign({}, t), { IsAutoScale: !checked }) : t; });
10065
+ var newTags = structuredClone(viewTags);
10066
+ newTags[tagId]['viewTag']['IsAutoScale'] = !checked;
10041
10067
  setViewTags(newTags);
10042
10068
  };
10043
10069
  var handleColorChange = function (tagId, value) {
10044
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { Color: value }) : tag; });
10070
+ var newTags = structuredClone(viewTags);
10071
+ newTags[tagId]['viewTag']['Color'] = value;
10045
10072
  setViewTags(newTags);
10046
10073
  };
10047
10074
  var handleDeleteTag = function (tagId) {
10048
- var newTags = viewTags.filter(function (tag) { return tag.TagId !== tagId; });
10075
+ var newTags = structuredClone(viewTags);
10076
+ delete newTags[tagId];
10049
10077
  setViewTagsAndRefetch(newTags);
10050
10078
  };
10051
10079
  var handleAddTag = function (newTag) {
10052
- var newArr = __spreadArray([], viewTags, true);
10053
- if (newTag) {
10054
- newArr.push(__assign(__assign({}, newTag), { IsVisible: true, TagType: newTag.TagTypeCode, Color: newTag.Color || getRandomColor() }));
10055
- setViewTagsAndRefetch(newArr);
10056
- }
10080
+ var newTags = structuredClone(viewTags);
10081
+ newTags[newTag.TagId] = {
10082
+ viewTag: __assign(__assign({}, newTag), { IsVisible: true, TagType: newTag.TagTypeCode, Color: newTag.Color || getRandomColor(), IsAutoScale: newTag.MinScale || newTag.MaxScale ? false : true }),
10083
+ order: Object.keys(viewTags).length
10084
+ };
10085
+ setViewTagsAndRefetch(newTags);
10057
10086
  };
10058
10087
  var handleAbleScales = function (tagId, checked) {
10059
10088
  if (checked) {
@@ -10111,7 +10140,7 @@ var TableComponent = function (_a) {
10111
10140
  },
10112
10141
  ]);
10113
10142
  var handleTagSelect = function (selectedTag) {
10114
- var alreadySelected = viewTags.find(function (vt) { return vt.TagId === selectedTag.TagId; });
10143
+ var alreadySelected = viewTags[selectedTag.TagId];
10115
10144
  if (!alreadySelected) {
10116
10145
  handleAddTag(selectedTag);
10117
10146
  }
@@ -10119,13 +10148,13 @@ var TableComponent = function (_a) {
10119
10148
  setError("".concat(selectedTag.TagName, " is already selected"));
10120
10149
  }
10121
10150
  };
10122
- var handleDelete = function (index) { return __awaiter(void 0, void 0, void 0, function () {
10151
+ var handleDelete = function () { return __awaiter(void 0, void 0, void 0, function () {
10123
10152
  return __generator(this, function (_a) {
10124
10153
  if (!isNil$1(viewTagForDelete)) {
10125
10154
  if (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) {
10126
10155
  handleDeleteTag(viewTagForDelete.TagId);
10127
10156
  }
10128
- setSelectedRowIndex(null); // Reset the selected row index
10157
+ setSelectedRowTagId(null); // Reset the selected row index
10129
10158
  setViewTagForDelete(null);
10130
10159
  }
10131
10160
  return [2 /*return*/];
@@ -10152,8 +10181,8 @@ var TableComponent = function (_a) {
10152
10181
  if (!deleteResp.ok) {
10153
10182
  setError(deleteResp.message);
10154
10183
  }
10155
- return [4 /*yield*/, Promise.allSettled(viewTags.map(function (_a) {
10156
- var TagId = _a.TagId, Color = _a.Color, MinScale = _a.MinScale, MaxScale = _a.MaxScale, IsAutoScale = _a.IsAutoScale, IsVisible = _a.IsVisible, Unit = _a.Unit;
10184
+ return [4 /*yield*/, Promise.allSettled(Object.values(viewTags).sort(function (a, b) { return b.order - a.order; }).map(function (_a) {
10185
+ var _b = _a.viewTag, TagId = _b.TagId, Color = _b.Color, MinScale = _b.MinScale, MaxScale = _b.MaxScale, IsAutoScale = _b.IsAutoScale, IsVisible = _b.IsVisible, Unit = _b.Unit;
10157
10186
  upsertViewTag(viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
10158
10187
  .then(function (r) {
10159
10188
  if (!r.ok) {
@@ -10168,7 +10197,7 @@ var TableComponent = function (_a) {
10168
10197
  setError("Tag ".concat(index, " failed with reason: ").concat(result.reason));
10169
10198
  }
10170
10199
  else {
10171
- setSelectedRowIndex(null);
10200
+ setSelectedRowTagId(null);
10172
10201
  setSnackbarMessage('View saved successfully');
10173
10202
  }
10174
10203
  });
@@ -10191,13 +10220,13 @@ var TableComponent = function (_a) {
10191
10220
  };
10192
10221
  useEffect(function () {
10193
10222
  var handleGlobalClick = function (e) {
10194
- if (selectedRowIndex !== null) {
10195
- setSelectedRowIndex(null);
10223
+ if (selectedRowTagId !== null) {
10224
+ setSelectedRowTagId(null);
10196
10225
  }
10197
10226
  };
10198
10227
  var handleKeyDown = function (e) {
10199
- if (e.key === "Escape" && selectedRowIndex !== null) {
10200
- setSelectedRowIndex(null);
10228
+ if (e.key === "Escape" && selectedRowTagId !== null) {
10229
+ setSelectedRowTagId(null);
10201
10230
  }
10202
10231
  };
10203
10232
  // Attach event listeners
@@ -10208,14 +10237,14 @@ var TableComponent = function (_a) {
10208
10237
  document.removeEventListener("click", handleGlobalClick);
10209
10238
  document.removeEventListener("keydown", handleKeyDown);
10210
10239
  };
10211
- }, [selectedRowIndex]);
10240
+ }, [selectedRowTagId]);
10212
10241
  var handleSaveDefaultToTag = function () { return __awaiter(void 0, void 0, void 0, function () {
10213
10242
  var _a, TagId, Alias, Color, MinScale, MaxScale, Unit, IsVisible, IsAutoScale, saveTagDefaultsResp, upsertViewTagResp;
10214
10243
  return __generator(this, function (_b) {
10215
10244
  switch (_b.label) {
10216
10245
  case 0:
10217
- if (!(viewSelected && selectedRowIndex !== null)) return [3 /*break*/, 3];
10218
- _a = viewTags[selectedRowIndex], TagId = _a.TagId, Alias = _a.Alias, Color = _a.Color, MinScale = _a.MinScale, MaxScale = _a.MaxScale, Unit = _a.Unit, IsVisible = _a.IsVisible, IsAutoScale = _a.IsAutoScale;
10246
+ if (!(viewSelected && selectedRowTagId !== null)) return [3 /*break*/, 3];
10247
+ _a = viewTags[selectedRowTagId].viewTag, TagId = _a.TagId, Alias = _a.Alias, Color = _a.Color, MinScale = _a.MinScale, MaxScale = _a.MaxScale, Unit = _a.Unit, IsVisible = _a.IsVisible, IsAutoScale = _a.IsAutoScale;
10219
10248
  return [4 /*yield*/, saveTagDefaults(TagId, Alias, Color, MinScale, MaxScale, Unit)];
10220
10249
  case 1:
10221
10250
  saveTagDefaultsResp = _b.sent();
@@ -10228,7 +10257,7 @@ var TableComponent = function (_a) {
10228
10257
  if (!upsertViewTagResp.ok) {
10229
10258
  setError(upsertViewTagResp.message);
10230
10259
  }
10231
- setSelectedRowIndex(null);
10260
+ setSelectedRowTagId(null);
10232
10261
  _b.label = 3;
10233
10262
  case 3: return [2 /*return*/];
10234
10263
  }
@@ -10252,7 +10281,7 @@ var TableComponent = function (_a) {
10252
10281
  React__default.createElement("thead", null,
10253
10282
  React__default.createElement("tr", null,
10254
10283
  React__default.createElement("th", { className: "".concat(classes.topTitles, " ").concat(classes.viewSelected) }, viewSelected ?
10255
- (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); } },
10284
+ (React__default.createElement(Button$1, { variant: 'text', style: { color: "#0075ff" }, className: classes.viewSelected, onClick: function () { return setLoadViewOpen(true); }, startIcon: viewSelected.IsPublic ? React__default.createElement(React__default.Fragment, null) : React__default.createElement(LockIcon, { fontSize: 'small' }) }, (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); } },
10256
10285
  React__default.createElement("i", null,
10257
10286
  React__default.createElement(SaveIcon, null),
10258
10287
  "(Save view as)")))),
@@ -10336,11 +10365,12 @@ var TableComponent = function (_a) {
10336
10365
  React__default.createElement(Grid$1, { item: true, xs: 12 },
10337
10366
  React__default.createElement("div", { style: { width: '100%', height: '100%', maxHeight: '100%' } },
10338
10367
  React__default.createElement("table", { cellPadding: '4px', style: { width: '100%', tableLayout: 'fixed', textAlign: "center" } },
10339
- React__default.createElement("tbody", null, viewTags && viewTags.length && Array.isArray(viewTags) ? viewTags.map(function (tag, index) {
10340
- var _a, _b, _c, _d, _e, _f, _g;
10368
+ React__default.createElement("tbody", null, Object.values(viewTags).length ? Object.values(viewTags).map(function (_a) {
10369
+ var _b, _c, _d, _e, _f, _g, _h;
10370
+ var tag = _a.viewTag;
10341
10371
  return (React__default.createElement("tr", { key: tag.TagName,
10342
10372
  // onClick={() => handleRowClick(index)}
10343
- onContextMenu: function (e) { return handleRightClick(e, index); }, className: classes.rowHover },
10373
+ onContextMenu: function (e) { return handleRightClick(e, tag.TagId); }, className: classes.rowHover },
10344
10374
  React__default.createElement("td", { className: "".concat(classes.visible, " ").concat(classes.checkbox) },
10345
10375
  React__default.createElement("input", { type: "checkbox", checked: tag.IsVisible, onChange: function (e) { return handleVisibilityChange(tag.TagId, e.target.checked); } })),
10346
10376
  React__default.createElement("td", { className: classes.aliasCol },
@@ -10359,24 +10389,14 @@ var TableComponent = function (_a) {
10359
10389
  backgroundColor: 'rgba(239, 239, 239, 0.3)',
10360
10390
  color: 'rgba(84, 84, 84, 1)',
10361
10391
  border: '1px solid rgba(118, 118, 118, 0.3)'
10362
- } : {})), value: tag.MinScale, onClick: function () { return handleAbleScales(tag.TagId, tag.IsAutoScale); }, onFocus: function (e) { return e.target.select(); }, onChange: function (e) {
10363
- var value = e.target.value;
10364
- var numericValue = Number(value);
10365
- if (!isNaN(numericValue) && value.trim() !== '') {
10366
- handleChange(tag.TagId, numericValue, 'MinScale');
10367
- }
10368
- } })),
10392
+ } : {})), value: tag.MinScale, onClick: function () { return handleAbleScales(tag.TagId, tag.IsAutoScale); }, onFocus: function (e) { return e.target.select(); }, onChange: function (e) { return handleChangeScale((e.target).value, "MinScale", tag.TagId); } })),
10369
10393
  React__default.createElement("td", { className: classes.inputCol },
10370
10394
  React__default.createElement("input", { type: "number", className: classes.numberInput, style: __assign({ width: '100%', WebkitAppearance: 'none' }, (tag.IsAutoScale ? {
10371
10395
  backgroundColor: 'rgba(239, 239, 239, 0.3)',
10372
10396
  color: 'rgba(84, 84, 84, 1)',
10373
10397
  border: '1px solid rgba(118, 118, 118, 0.3)'
10374
10398
  } : {})), value: tag.MaxScale, onClick: function () { return handleAbleScales(tag.TagId, tag.IsAutoScale); }, onFocus: function (e) { return e.target.select(); }, onChange: function (e) {
10375
- var value = e.target.value;
10376
- var numericValue = Number(value);
10377
- if (!isNaN(numericValue) && value.trim() !== '') {
10378
- handleChange(tag.TagId, numericValue, 'MaxScale');
10379
- }
10399
+ handleChangeScale((e.target).value, "MaxScale", tag.TagId);
10380
10400
  } })),
10381
10401
  React__default.createElement("td", { className: "".concat(classes.autoScale, " ").concat(classes.checkbox) },
10382
10402
  React__default.createElement("input", { type: "checkbox", checked: !!tag.IsAutoScale, onChange: function (e) { return handleAutoScaleChange(tag.TagId, tag.IsAutoScale); } })),
@@ -10387,14 +10407,14 @@ var TableComponent = function (_a) {
10387
10407
  var value = e.target.value;
10388
10408
  handleUnitChange(tag.TagId, value);
10389
10409
  }, value: tag.Unit === "-" ? '' : tag.Unit, onFocus: function (e) { return e.target.select(); } })),
10390
- React__default.createElement("td", null, round((_a = dataTable[tag.TagName]) === null || _a === void 0 ? void 0 : _a.y1, 3) || 0),
10391
- React__default.createElement("td", { className: classes.doubleInput }, round((_b = dataTable[tag.TagName]) === null || _b === void 0 ? void 0 : _b.y2, 3) || 0),
10392
- React__default.createElement("td", null, round((_c = dataTable[tag.TagName]) === null || _c === void 0 ? void 0 : _c.y2y1, 3) || 0),
10410
+ React__default.createElement("td", null, round((_b = dataTable[tag.TagName]) === null || _b === void 0 ? void 0 : _b.y1, 3) || 0),
10411
+ React__default.createElement("td", { className: classes.doubleInput }, round((_c = dataTable[tag.TagName]) === null || _c === void 0 ? void 0 : _c.y2, 3) || 0),
10412
+ React__default.createElement("td", null, round((_d = dataTable[tag.TagName]) === null || _d === void 0 ? void 0 : _d.y2y1, 3) || 0),
10393
10413
  React__default.createElement("td", null,
10394
- !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,
10414
+ !isNaN(((_e = dataTable[tag.TagName]) === null || _e === void 0 ? void 0 : _e.pmin.y) * 0) ? round((_f = dataTable[tag.TagName]) === null || _f === void 0 ? void 0 : _f.pmin.y, 3) : 0,
10395
10415
  " "),
10396
10416
  React__default.createElement("td", null,
10397
- !isNaN(((_f = dataTable[tag.TagName]) === null || _f === void 0 ? void 0 : _f.pmax.y) * 0) ? round((_g = dataTable[tag.TagName]) === null || _g === void 0 ? void 0 : _g.pmax.y) : 0,
10417
+ !isNaN(((_g = dataTable[tag.TagName]) === null || _g === void 0 ? void 0 : _g.pmax.y) * 0) ? round((_h = dataTable[tag.TagName]) === null || _h === void 0 ? void 0 : _h.pmax.y) : 0,
10398
10418
  " ")));
10399
10419
  }) : React__default.createElement("div", { style: { padding: '1rem' } },
10400
10420
  React__default.createElement("div", { style: { padding: "1rem" } }, "No tag view detected. "),
@@ -10841,23 +10861,32 @@ var TrendingChart = function (_a) {
10841
10861
  var _c = useState(null), lineTabCoords = _c[0], setLineTabCoords = _c[1];
10842
10862
  var _d = useState(null), chartArea = _d[0], setChartArea = _d[1];
10843
10863
  var chartRef = useRef(null);
10864
+ var forDebounce = useRef({
10865
+ viewTags: viewTags,
10866
+ series: series,
10867
+ setChartOptions: setChartOptions,
10868
+ setChartData: setChartData
10869
+ });
10844
10870
  var debouncedUpdateChart = useRef(debounce(function () {
10845
10871
  if (chartRef.current) {
10846
10872
  updateCursorData(chartRef.current, setCursorData);
10847
10873
  chartRef.current.update();
10848
10874
  }
10849
- }, 250)).current;
10850
- var _e = useState(false), chartShouldInitCursors = _e[0], setChartShouldInitCursors = _e[1];
10851
- var verticalLinePlugin = useGetVerticalLinePlugin(setChartArea, setLineTabCoords);
10852
- var xAxisDatePlugin = useXAxisDatePlugin();
10853
- var yAxisPlugin = useYAxisPlugin();
10854
- var seriesVsTags = useRef({});
10855
- useEffect(function () {
10875
+ }, 250));
10876
+ forDebounce.current = {
10877
+ viewTags: viewTags,
10878
+ series: series,
10879
+ setChartOptions: setChartOptions,
10880
+ setChartData: setChartData
10881
+ };
10882
+ var debouncedUpdateChartBasedOnData = useRef(debounce(function () {
10883
+ var _a = forDebounce.current, viewTags = _a.viewTags, series = _a.series, setChartOptions = _a.setChartOptions, setChartData = _a.setChartData;
10856
10884
  var axes = [];
10857
10885
  if (!series.length) {
10858
10886
  return;
10859
10887
  }
10860
- viewTags.forEach(function (tag, index) {
10888
+ Object.values(viewTags).forEach(function (_a, index) {
10889
+ var tag = _a.viewTag;
10861
10890
  var existingAxis = axes.findIndex(function (existingTag) {
10862
10891
  return areRangesSimilar(existingTag, tag);
10863
10892
  });
@@ -10871,6 +10900,11 @@ var TrendingChart = function (_a) {
10871
10900
  });
10872
10901
  // Configure yAxes based on grouped axes
10873
10902
  var yAxesConfig = axes.map(function (axis) {
10903
+ var min = Number(axis.MinScale);
10904
+ var max = Number(axis.MaxScale);
10905
+ if (!min && !max) {
10906
+ max = 1;
10907
+ }
10874
10908
  return {
10875
10909
  id: "y-axis-".concat(axis.TagId),
10876
10910
  type: "linear",
@@ -10879,10 +10913,10 @@ var TrendingChart = function (_a) {
10879
10913
  display: true,
10880
10914
  labelString: axis.TagName
10881
10915
  },
10882
- min: axis.IsAutoScale ? undefined : axis.MinScale,
10883
- max: axis.IsAutoScale ? undefined : axis.MaxScale,
10884
- suggestedMin: axis.IsAutoScale ? undefined : axis.MinScale,
10885
- suggestedMax: axis.IsAutoScale ? undefined : axis.MaxScale,
10916
+ min: axis.IsAutoScale ? undefined : min,
10917
+ max: axis.IsAutoScale ? undefined : max,
10918
+ suggestedMin: axis.IsAutoScale ? undefined : min,
10919
+ suggestedMax: axis.IsAutoScale ? undefined : max,
10886
10920
  stepSize: 10,
10887
10921
  grid: {
10888
10922
  display: true
@@ -10920,7 +10954,9 @@ var TrendingChart = function (_a) {
10920
10954
  return newResp;
10921
10955
  });
10922
10956
  var updatedSeries = series.map(function (serie, index) {
10923
- var tag = viewTags[index];
10957
+ var _a;
10958
+ var tagsSortedArray = Object.values(viewTags).sort(function (a, b) { return b.order - a.order; });
10959
+ var tag = (_a = tagsSortedArray[index]) === null || _a === void 0 ? void 0 : _a.viewTag;
10924
10960
  var yAxisTagId = seriesVsTags.current[tag === null || tag === void 0 ? void 0 : tag.TagId];
10925
10961
  return {
10926
10962
  yAxisID: "y-axis-".concat(yAxisTagId),
@@ -10939,6 +10975,14 @@ var TrendingChart = function (_a) {
10939
10975
  labels: [],
10940
10976
  datasets: updatedSeries
10941
10977
  });
10978
+ }, 1000));
10979
+ var _e = useState(false), chartShouldInitCursors = _e[0], setChartShouldInitCursors = _e[1];
10980
+ var verticalLinePlugin = useGetVerticalLinePlugin(setChartArea, setLineTabCoords);
10981
+ var xAxisDatePlugin = useXAxisDatePlugin();
10982
+ var yAxisPlugin = useYAxisPlugin();
10983
+ var seriesVsTags = useRef({});
10984
+ useEffect(function () {
10985
+ debouncedUpdateChartBasedOnData.current();
10942
10986
  }, [state.graphShouldUpdate, series]);
10943
10987
  useEffect(function () {
10944
10988
  if (chartShouldInitCursors) {
@@ -10956,7 +11000,7 @@ var TrendingChart = function (_a) {
10956
11000
  });
10957
11001
  // @ts-ignore
10958
11002
  chartRef.current.mouseX = newLeft;
10959
- debouncedUpdateChart();
11003
+ debouncedUpdateChart.current();
10960
11004
  } })) : null,
10961
11005
  lineTabCoords && chartArea ? (React__default.createElement(DraggableLineControl, { color: 'blue', initialLeft: lineTabCoords === null || lineTabCoords === void 0 ? void 0 : lineTabCoords.x2, otherLineCoord: lineTabCoords === null || lineTabCoords === void 0 ? void 0 : lineTabCoords.x1, chartArea: chartArea, onUpdate: function (newLeft) {
10962
11006
  setLineTabCoords(function (prevCoords) {
@@ -10965,7 +11009,7 @@ var TrendingChart = function (_a) {
10965
11009
  });
10966
11010
  // @ts-ignore
10967
11011
  chartRef.current.secondLineX = newLeft;
10968
- debouncedUpdateChart();
11012
+ debouncedUpdateChart.current();
10969
11013
  } })) : null,
10970
11014
  React__default.createElement(Line, { ref: chartRef, data: chartData, options: chartOptions, plugins: [verticalLinePlugin, xAxisDatePlugin, yAxisPlugin] })));
10971
11015
  };
@@ -10977,7 +11021,7 @@ var Trending = function (_a) {
10977
11021
  var _d = useState(''), error = _d[0], setError = _d[1];
10978
11022
  var _e = useState(true), loading = _e[0], setLoading = _e[1];
10979
11023
  var _f = useState([]), series = _f[0], setSeries = _f[1];
10980
- var _g = useState(null), selectedRowIndex = _g[0], setSelectedRowIndex = _g[1];
11024
+ var _g = useState(null), selectedRowTagId = _g[0], setSelectedRowTagId = _g[1];
10981
11025
  var _h = useState(null), viewTagForDelete = _h[0], setViewTagForDelete = _h[1];
10982
11026
  var _j = useChartOptions(), chartOptions = _j[0], setChartOptions = _j[1];
10983
11027
  var _k = useState({
@@ -10988,16 +11032,16 @@ var Trending = function (_a) {
10988
11032
  var debounceForFetchingData = useRef(null);
10989
11033
  var _m = useState({ x: 0, y: 0 }), contextMenuPosition = _m[0], setContextMenuPosition = _m[1];
10990
11034
  var _o = useState(false), openContextMenu = _o[0], setOpenContextMenu = _o[1];
10991
- var handleRightClick = function (event, index) {
11035
+ var handleRightClick = function (event, tagId) {
10992
11036
  event.preventDefault();
10993
11037
  event.stopPropagation(); // Prevent the click event from propagating to the document
10994
- if (isNumber(index)) {
10995
- setViewTagForDelete(viewTags[index]);
11038
+ if (isNumber(tagId)) {
11039
+ setViewTagForDelete(viewTags[tagId].viewTag);
10996
11040
  }
10997
11041
  else {
10998
11042
  setViewTagForDelete(null);
10999
11043
  }
11000
- setSelectedRowIndex(index);
11044
+ setSelectedRowTagId(tagId);
11001
11045
  setOpenContextMenu(true);
11002
11046
  setContextMenuPosition({ x: event.clientX, y: event.clientY });
11003
11047
  };
@@ -11007,14 +11051,15 @@ var Trending = function (_a) {
11007
11051
  }
11008
11052
  debounceForFetchingData.current = setTimeout(function () {
11009
11053
  var fetchData = function () { return __awaiter(void 0, void 0, void 0, function () {
11010
- var tagIds, response, error_1;
11054
+ var viewTagsArr, tagIds, response, error_1;
11011
11055
  return __generator(this, function (_a) {
11012
11056
  switch (_a.label) {
11013
11057
  case 0:
11014
11058
  _a.trys.push([0, 3, , 4]);
11015
11059
  setLoading(true);
11016
- if (!(Array.isArray(viewTags) && viewTags.length)) return [3 /*break*/, 2];
11017
- tagIds = viewTags.map(function (tag) { return tag.TagId; });
11060
+ viewTagsArr = Object.values(viewTags).sort(function (a, b) { return b.order - a.order; });
11061
+ tagIds = viewTagsArr.map(function (tag) { return tag.viewTag.TagId; });
11062
+ if (!tagIds.length) return [3 /*break*/, 2];
11018
11063
  return [4 /*yield*/, axios.post("/series?nodeName=null", {
11019
11064
  start: state.timeScopeStart.getTime(),
11020
11065
  end: state.timeScopeEnd.getTime(),
@@ -11039,6 +11084,11 @@ var Trending = function (_a) {
11039
11084
  }); };
11040
11085
  fetchData();
11041
11086
  }, 800);
11087
+ return function () {
11088
+ if (debounceForFetchingData.current) {
11089
+ clearTimeout(debounceForFetchingData.current);
11090
+ }
11091
+ };
11042
11092
  }, [shouldRefetchSeries]);
11043
11093
  return (React__default.createElement(React__default.Fragment, null,
11044
11094
  React__default.createElement(Grid$1, { container: true, style: { width: "95svw", height: "88svh", margin: 0 }, onClick: function () { return setOpenContextMenu(false); } },
@@ -11069,7 +11119,7 @@ var Trending = function (_a) {
11069
11119
  zIndex: 2
11070
11120
  } },
11071
11121
  React__default.createElement(CircularProgress$1, { size: "2rem" }))),
11072
- 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 }))),
11122
+ React__default.createElement(TableComponent, { chartData: chartData, cursorData: cursorData, getTagsFromAPI: getTagsFromAPI, openContextMenu: openContextMenu, setOpenContextMenu: setOpenContextMenu, viewTagForDelete: viewTagForDelete, setViewTagForDelete: setViewTagForDelete, selectedRowTagId: selectedRowTagId, setSelectedRowTagId: setSelectedRowTagId, handleRightClick: handleRightClick, contextMenuPosition: contextMenuPosition, setContextMenuPosition: setContextMenuPosition }))),
11073
11123
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); }, title: "ERROR" })));
11074
11124
  };
11075
11125
 
@@ -11101,12 +11151,16 @@ var TrendingsPage = function (props) {
11101
11151
  case 2:
11102
11152
  viewTagsResp = _a.sent();
11103
11153
  if (viewTagsResp.ok) {
11104
- viewTags = viewTagsResp.data.tables[0].rows.map(function (e) {
11105
- if (isNil$1(e.Color)) {
11106
- e.Color = getRandomColor();
11154
+ viewTags = viewTagsResp.data.tables[0].rows.reduce(function (carr, curr, idx) {
11155
+ if (isNil$1(curr.Color)) {
11156
+ curr.Color = getRandomColor();
11107
11157
  }
11108
- return e;
11109
- });
11158
+ carr[curr.TagId] = {
11159
+ viewTag: curr,
11160
+ order: idx
11161
+ };
11162
+ return carr;
11163
+ }, {});
11110
11164
  setViewTagsAndRefetch(viewTags);
11111
11165
  }
11112
11166
  else {
@@ -11355,5 +11409,5 @@ var areaSelector = /*#__PURE__*/Object.freeze({
11355
11409
  AreaSelector: AreaSelector
11356
11410
  });
11357
11411
 
11358
- export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, 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, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TimeService, TreePickerControl, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, dxtToLocalServerTime, dxtToUTC, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getProfiles, getShiftStyle, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useToken, useUTLSettingsContext, useUserContext };
11412
+ export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, 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, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TimeService, TreePickerControl, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, dxtServerTimeZone, dxtToLocalServerTime, dxtToUTC, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getMomentTz, getProfiles, getShiftStyle, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useToken, useUTLSettingsContext, useUserContext };
11359
11413
  //# sourceMappingURL=index.esm.js.map