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