@dexteel/mesf-core 4.12.0 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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, Checkbox, 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, 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';
@@ -275,6 +276,20 @@ BarChartControl.propTypes = {
275
276
  keys: PropTypes.array
276
277
  };
277
278
 
279
+ var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
280
+
281
+ var css$2 = ".lds-ring {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 64px;\n height: 64px;\n margin: 8px;\n border: 5px solid rgb(63,81,181);\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: rgb(63,81,181) transparent transparent transparent;\n}\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n";
282
+ n(css$2,{});
283
+
284
+ var LazyLoading = function () {
285
+ return (React__default.createElement(React__default.Fragment, null,
286
+ React__default.createElement("div", { className: "lds-ring" },
287
+ React__default.createElement("div", null),
288
+ React__default.createElement("div", null),
289
+ React__default.createElement("div", null),
290
+ React__default.createElement("div", null))));
291
+ };
292
+
278
293
  /**********************MATERIAL UI STYLES********************** */
279
294
  /*************************************************************** */
280
295
  function MinusSquare(props) {
@@ -312,13 +327,17 @@ var StyledTreeItem = withStyles(function (theme) { return ({
312
327
  marginLeft: 7,
313
328
  paddingLeft: 18,
314
329
  borderLeft: "1px dashed ".concat(alpha(theme.palette.text.primary, 0.4))
330
+ },
331
+ label: {
332
+ backgroundColor: function (props) {
333
+ return props.isChecked ? "lightblue !important" : "inherit";
334
+ }
315
335
  }
316
336
  }); })(function (props) { return (React__default.createElement(TreeItem, __assign({}, props, { TransitionComponent: TransitionComponent }))); });
317
337
  var useTreviewStyle = makeStyles(function (theme) { return ({
318
338
  root: {
319
339
  "min-height": 264,
320
- flexGrow: 1,
321
- maxWidth: 400
340
+ flexGrow: 1
322
341
  },
323
342
  treLabelIcon: {
324
343
  marginRight: theme.spacing(1)
@@ -335,13 +354,17 @@ var useTreviewStyle = makeStyles(function (theme) { return ({
335
354
  treeLabelInactive: {
336
355
  textDecoration: "line-through",
337
356
  textDecorationColor: "red"
357
+ },
358
+ smallCheckbox: {
359
+ transform: 'scale(0.8)'
338
360
  }
339
361
  }); });
340
362
  var ModalTreeFilterControl = function (props) {
341
- var onClose = props.onClose, valueProp = props.value, open = props.open, title = props.title, data = props.data, selectBranch = props.selectBranch, selectActive = props.selectActive, selectInternal = props.selectInternal, other = __rest(props, ["onClose", "value", "open", "title", "data", "selectBranch", "selectActive", "selectInternal"]);
363
+ var onClose = props.onClose, valueProp = props.value, open = props.open, title = props.title, data = props.data, selectBranch = props.selectBranch, selectActive = props.selectActive, selectInternal = props.selectInternal, multipleSelectNodes = props.multipleSelectNodes, onHide = props.onHide, listAssetDrawings = props.listAssetDrawings, setListAssetDrawings = props.setListAssetDrawings, onSuccess = props.onSuccess, isLoading = props.isLoading, other = __rest(props, ["onClose", "value", "open", "title", "data", "selectBranch", "selectActive", "selectInternal", "multipleSelectNodes", "onHide", "listAssetDrawings", "setListAssetDrawings", "onSuccess", "isLoading"]);
342
364
  var _a = useState(valueProp), value = _a[0], setValue = _a[1];
343
365
  var _b = useState([]), expanded = _b[0], setExpanded = _b[1];
344
366
  var treeRef = useRef(null);
367
+ var _c = useState([]), selectedNodes = _c[0], setSelectedNodes = _c[1];
345
368
  useEffect(function () {
346
369
  if (!open) {
347
370
  setValue(valueProp);
@@ -358,6 +381,7 @@ var ModalTreeFilterControl = function (props) {
358
381
  };
359
382
  var handleCancel = function () {
360
383
  onClose();
384
+ onHide(false);
361
385
  };
362
386
  var handleOk = function () {
363
387
  var findNode = getNodeData(data, parseInt(value));
@@ -367,12 +391,16 @@ var ModalTreeFilterControl = function (props) {
367
391
  var internalFilter = (selectInternal && findNode.isInternal) || selectInternal !== true;
368
392
  var branchFilter = selectBranch && !findNode.isLeaf;
369
393
  if (findNode.isLeaf) {
370
- if (activeFilter && internalFilter)
394
+ if (activeFilter && internalFilter) {
371
395
  onClose(value, findNode.name, findNode);
396
+ onSuccess(true);
397
+ }
372
398
  }
373
399
  else {
374
- if (branchFilter)
400
+ if (branchFilter) {
375
401
  onClose(value, findNode.name, findNode);
402
+ onSuccess(true);
403
+ }
376
404
  }
377
405
  };
378
406
  var handleKeyDown = function (event) {
@@ -380,6 +408,9 @@ var ModalTreeFilterControl = function (props) {
380
408
  onClose();
381
409
  }
382
410
  };
411
+ var handleCheckboxClick = function (event) {
412
+ event.stopPropagation();
413
+ };
383
414
  var getNodeParent = function (node, id, chain) {
384
415
  if (chain === void 0) { chain = []; }
385
416
  if (!node || node.id === undefined) {
@@ -427,9 +458,32 @@ var ModalTreeFilterControl = function (props) {
427
458
  return null;
428
459
  };
429
460
  var classes = useTreviewStyle();
461
+ var handleCheckboxChange = function (node) {
462
+ if (node) {
463
+ var isSelected = selectedNodes.includes(node.id);
464
+ var updatedSelectedNodes = void 0;
465
+ if (isSelected) {
466
+ updatedSelectedNodes = selectedNodes.filter(function (id) { return id !== node.id; });
467
+ }
468
+ else {
469
+ updatedSelectedNodes = __spreadArray(__spreadArray([], selectedNodes, true), [node.id], false);
470
+ }
471
+ setSelectedNodes(updatedSelectedNodes);
472
+ }
473
+ };
474
+ useEffect(function () {
475
+ if ((selectedNodes === null || selectedNodes === void 0 ? void 0 : selectedNodes.length) >= 1 && setListAssetDrawings) {
476
+ setListAssetDrawings(selectedNodes);
477
+ }
478
+ }, [selectedNodes]);
479
+ useEffect(function () {
480
+ if ((listAssetDrawings === null || listAssetDrawings === void 0 ? void 0 : listAssetDrawings.length) >= 1) {
481
+ setSelectedNodes(listAssetDrawings);
482
+ }
483
+ }, [listAssetDrawings]);
430
484
  var renderTree = function (nodes) { return (
431
485
  /* @ts-ignore */
432
- React__default.createElement(StyledTreeItem, { key: nodes.id, nodeId: nodes.id.toString(), label: React__default.createElement("div", { className: classes.treeLabelRoot },
486
+ React__default.createElement(StyledTreeItem, { isChecked: selectedNodes.includes(nodes.id), key: nodes.id, nodeId: nodes.id.toString(), label: React__default.createElement("div", { className: classes.treeLabelRoot },
433
487
  nodes.isCode === true && (React__default.createElement(Code, { className: classes.treeLabelIcon, htmlColor: "#1ABC9C" })),
434
488
  nodes.isCode === false && (React__default.createElement(FolderIcon, { className: classes.treeLabelIcon, htmlColor: "#F1C40F" })),
435
489
  React__default.createElement(Typography, { variant: "body2", className: [
@@ -438,22 +492,24 @@ var ModalTreeFilterControl = function (props) {
438
492
  ].join(" ") },
439
493
  React__default.createElement("span", null,
440
494
  nodes.isCode && (React__default.createElement("i", { className: "fas fa-square mr-2", style: { color: nodes.delayCategoryColor || "#FFFFFF" } })),
441
- nodes.name))), className: "delay-item-node", id: nodes.id, "data-isbranch": !nodes.isCode }, Array.isArray(nodes.children)
495
+ nodes.name)),
496
+ multipleSelectNodes &&
497
+ React__default.createElement(Checkbox, { className: classes.smallCheckbox, size: "small", color: "primary", checked: selectedNodes.includes(nodes.id), onChange: function () {
498
+ handleCheckboxChange(nodes);
499
+ }, onClick: handleCheckboxClick })), className: "delay-item-node", id: nodes.id, "data-isbranch": !nodes.isCode }, Array.isArray(nodes.children)
442
500
  ? nodes.children.map(function (node) { return renderTree(node); })
443
501
  : null)); };
444
- return (React__default.createElement(Dialog, __assign({ onClose: function (event, reason) { return null; }, "aria-label": title, maxWidth: "xs", TransitionProps: { onEntering: handleEntering }, "aria-labelledby": "confirmation-dialog-title", open: open }, other, { onKeyDown: handleKeyDown }),
502
+ return (React__default.createElement(Dialog, __assign({ onClose: function (event, reason) { return onHide(false); }, "aria-label": title, maxWidth: "sm", TransitionProps: { onEntering: handleEntering }, "aria-labelledby": "confirmation-dialog-title", open: open }, other, { onKeyDown: handleKeyDown }),
445
503
  React__default.createElement(DialogTitle$1, { id: "confirmation-dialog-title" }, title),
446
- React__default.createElement(DialogContent$1, { dividers: true },
447
- React__default.createElement(TreeView, { className: classes.root, defaultCollapseIcon: React__default.createElement(MinusSquare, null), defaultExpandIcon: React__default.createElement(PlusSquare, null), ref: treeRef, selected: value === undefined ? "" : value.toString(), expanded: expanded, onNodeSelect: handleChange, onNodeToggle: handleToogle }, data && data.id !== undefined && renderTree(data))),
504
+ isLoading
505
+ ?
506
+ React__default.createElement("div", { style: { width: 600, minHeight: 416, display: "flex", justifyContent: "center", alignItems: "center" } },
507
+ React__default.createElement(LazyLoading, null))
508
+ : (React__default.createElement(DialogContent$1, { dividers: true },
509
+ React__default.createElement(TreeView, { className: classes.root, defaultCollapseIcon: React__default.createElement(MinusSquare, null), defaultExpandIcon: React__default.createElement(PlusSquare, null), ref: treeRef, selected: value === undefined ? "" : value.toString(), expanded: expanded, onNodeSelect: handleChange, onNodeToggle: handleToogle }, data && data.id !== undefined && renderTree(data)))),
448
510
  React__default.createElement(DialogActions$1, null,
449
511
  React__default.createElement(Button, { autoFocus: true, onClick: handleCancel, color: "primary" }, "Cancel"),
450
512
  React__default.createElement(Button, { onClick: handleOk, color: "primary" }, "Ok"))));
451
- };
452
- ModalTreeFilterControl.propTypes = {
453
- onClose: PropTypes.func.isRequired,
454
- open: PropTypes.bool.isRequired,
455
- title: PropTypes.string.isRequired,
456
- data: PropTypes.object.isRequired
457
513
  };
458
514
 
459
515
  var useStyles$t = makeStyles(function (theme) { return ({
@@ -468,14 +524,13 @@ var useStyles$t = makeStyles(function (theme) { return ({
468
524
  },
469
525
  paper: {
470
526
  width: "100%",
471
- maxWidth: 600,
472
527
  maxHeight: 600
473
528
  }
474
529
  }); });
475
530
  var TreePickerControl = function (props) {
476
531
  var classes = useStyles$t();
477
- var onSelect = props.onSelect, value = props.value; props.styleLabel; var dataSource = props.dataSource, _a = props.inputTitle, inputTitle = _a === void 0 ? "Asset" : _a; props.showPath; var other = __rest(props, ["onSelect", "value", "styleLabel", "dataSource", "inputTitle", "showPath"]);
478
- var _c = React__default.useState(false), open = _c[0], setOpen = _c[1];
532
+ var onSelect = props.onSelect, value = props.value; props.styleLabel; var dataSource = props.dataSource, _a = props.inputTitle, inputTitle = _a === void 0 ? "Asset" : _a; props.showPath; var _c = props.multipleSelectNodes, multipleSelectNodes = _c === void 0 ? false : _c, showAssetTree = props.showAssetTree, onHide = props.onHide, _d = props.listAssetDrawings, listAssetDrawings = _d === void 0 ? [] : _d, onSuccess = props.onSuccess, isLoading = props.isLoading, other = __rest(props, ["onSelect", "value", "styleLabel", "dataSource", "inputTitle", "showPath", "multipleSelectNodes", "showAssetTree", "onHide", "listAssetDrawings", "onSuccess", "isLoading"]);
533
+ var _e = useState(false), open = _e[0], setOpen = _e[1];
479
534
  var handleClickListItem = function (e) {
480
535
  e.stopPropagation();
481
536
  setOpen(true);
@@ -483,8 +538,9 @@ var TreePickerControl = function (props) {
483
538
  var handleClose = function (newValue, newDescription, findNode) {
484
539
  setOpen(false);
485
540
  if (newValue) {
486
- if (onSelect !== undefined)
541
+ if (onSelect !== undefined) {
487
542
  onSelect(newValue, newDescription, findNode);
543
+ }
488
544
  }
489
545
  };
490
546
  var formatDescription = function (description) {
@@ -517,27 +573,35 @@ var TreePickerControl = function (props) {
517
573
  }
518
574
  };
519
575
  var description = useMemo(function () { return formatDescription(props.description); }, [props.description]);
576
+ useEffect(function () {
577
+ if (showAssetTree) {
578
+ setOpen(showAssetTree);
579
+ }
580
+ }, []);
520
581
  return (React__default.createElement(Grid, { container: true, className: classes.root },
521
- React__default.createElement(Grid, { container: true, item: true, md: 12, xs: 12, style: { position: "relative" }, title: props.description },
522
- React__default.createElement(Grid, { item: true, style: { position: "relative", width: "100%" } },
523
- React__default.createElement(TextField, { id: "treePickerTextField", label: inputTitle, variant: "outlined", value: description, margin: "dense", autoComplete: "off", fullWidth: true, disabled: true }),
524
- React__default.createElement(AccountTreeIcon, { style: {
582
+ !showAssetTree ?
583
+ React__default.createElement(Grid, { container: true, item: true, md: 12, xs: 12, style: { position: "relative" }, title: props.description },
584
+ React__default.createElement(Grid, { item: true, style: { position: "relative", width: "100%" } },
585
+ React__default.createElement(TextField, { id: "treePickerTextField", label: inputTitle, variant: "outlined", value: description, margin: "dense", autoComplete: "off", fullWidth: true, disabled: true }),
586
+ React__default.createElement(AccountTreeIcon, { style: {
587
+ position: "absolute",
588
+ right: 15,
589
+ top: 16,
590
+ cursor: "pointer"
591
+ } })),
592
+ React__default.createElement("div", { style: {
525
593
  position: "absolute",
526
- right: 15,
527
- top: 16,
594
+ top: 0,
595
+ bottom: 0,
596
+ left: 0,
597
+ right: 0,
528
598
  cursor: "pointer"
529
- } })),
530
- React__default.createElement("div", { style: {
531
- position: "absolute",
532
- top: 0,
533
- bottom: 0,
534
- left: 0,
535
- right: 0,
536
- cursor: "pointer"
537
- }, onClick: handleClickListItem })),
538
- React__default.createElement(ModalTreeFilterControl, __assign({ classes: {
539
- paper: classes.paper
540
- }, id: "modal-treeview-filter", title: props.title, keepMounted: true, open: open, onClose: handleClose, value: value, data: dataSource, onBackdropClick: function () { return setOpen(false); } }, other))));
599
+ }, onClick: handleClickListItem }))
600
+ : React__default.createElement("div", null),
601
+ React__default.createElement(Grid, { item: true, xs: 12, md: 12 },
602
+ React__default.createElement(ModalTreeFilterControl, __assign({ classes: {
603
+ paper: classes.paper
604
+ }, onHide: onHide, id: "modal-treeview-filter", title: props.title, keepMounted: true, open: open, onClose: handleClose, isLoading: isLoading, value: value, data: dataSource, onBackdropClick: function () { return setOpen(false); }, multipleSelectNodes: multipleSelectNodes, listAssetDrawings: listAssetDrawings, setListAssetDrawings: listAssetDrawings, onSuccess: onSuccess }, other)))));
541
605
  };
542
606
  var SimpleTextControl = /** @class */ (function (_super) {
543
607
  __extends(SimpleTextControl, _super);
@@ -1051,20 +1115,6 @@ var Alert = function (props) {
1051
1115
  return React__default.createElement(Alert$2, __assign({ elevation: 6, variant: "filled" }, props));
1052
1116
  };
1053
1117
 
1054
- var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
1055
-
1056
- var css$2 = ".lds-ring {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n.lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 64px;\n height: 64px;\n margin: 8px;\n border: 5px solid rgb(63,81,181);\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: rgb(63,81,181) transparent transparent transparent;\n}\n.lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n}\n.lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n}\n.lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n}\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n";
1057
- n(css$2,{});
1058
-
1059
- var LazyLoading = function () {
1060
- return (React__default.createElement(React__default.Fragment, null,
1061
- React__default.createElement("div", { className: "lds-ring" },
1062
- React__default.createElement("div", null),
1063
- React__default.createElement("div", null),
1064
- React__default.createElement("div", null),
1065
- React__default.createElement("div", null))));
1066
- };
1067
-
1068
1118
  var useStyles$s = makeStyles$1(function (theme) { return ({
1069
1119
  buttons: {
1070
1120
  opacity: 0,
@@ -4622,7 +4672,6 @@ var AssetReducer = createSlice({
4622
4672
  var payload = _a.payload;
4623
4673
  state.areasList = payload;
4624
4674
  },
4625
- // ===========================
4626
4675
  setAllAssets: function (state, _a) {
4627
4676
  var payload = _a.payload;
4628
4677
  state.allAssets = payload;
@@ -4704,28 +4753,29 @@ var useAssetCodes = function () {
4704
4753
  }
4705
4754
  // Use our mapping to locate the parent element in our data array
4706
4755
  var parentEl = nodes[idMapping[el.parentId]];
4756
+ // Handle the case where the element has no parent
4757
+ if (!parentEl) {
4758
+ console.log(el);
4759
+ return;
4760
+ }
4707
4761
  // Add our current el to its parent's `children` array
4708
- parentEl.children = __spreadArray(__spreadArray([], (parentEl.children || []), true), [el], false);
4762
+ if (!parentEl['children']) {
4763
+ parentEl['children'] = [];
4764
+ }
4765
+ parentEl['children'] = __spreadArray(__spreadArray([], (parentEl['children'] || []), true), [el], false);
4709
4766
  });
4710
4767
  setAssetCodes(root);
4711
4768
  };
4712
4769
  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;
4770
+ var nodes = allAssets.map(function (el) { return ({
4771
+ id: el.AssetId,
4772
+ parentId: el.ParentAssetId,
4773
+ name: el.AssetName,
4774
+ isLeaf: !!el.IsLeaf,
4775
+ isActive: true,
4776
+ children: []
4777
+ }); });
4778
+ buildTreeAssets(nodes);
4729
4779
  };
4730
4780
  return { loadFilterAssets: loadFilterAssets };
4731
4781
  };
@@ -7317,6 +7367,7 @@ var TimeService = /** @class */ (function () {
7317
7367
  else {
7318
7368
  this.timeZone = timeZone;
7319
7369
  }
7370
+ moment$1.tz.setDefault(this.timeZone);
7320
7371
  };
7321
7372
  TimeService.prototype.toUTC = function (datetime, format$1) {
7322
7373
  try {
@@ -7355,6 +7406,7 @@ var TimeService = /** @class */ (function () {
7355
7406
  };
7356
7407
  return TimeService;
7357
7408
  }());
7409
+ var getMomentTz = function () { return moment$1; };
7358
7410
  var dxtServerTimeZone = function () { return TimeService.getInstance().getServerTimeZone; };
7359
7411
  var dxtToUTC = TimeService.getInstance().toUTC;
7360
7412
  var dxtToLocalServerTime = TimeService.getInstance().toLocalServerTime;
@@ -8428,7 +8480,7 @@ var TrendingsInitialState = {
8428
8480
  }
8429
8481
  ],
8430
8482
  viewSelected: null,
8431
- viewTags: [],
8483
+ viewTags: {},
8432
8484
  shouldRefetchSeries: 1
8433
8485
  };
8434
8486
  var TrendingsReducer = createSlice({
@@ -8589,7 +8641,12 @@ var TrendingsReducer = createSlice({
8589
8641
  },
8590
8642
  setViewTagsAndRefetch: function (state, _a) {
8591
8643
  var payload = _a.payload;
8592
- state.viewTags = payload;
8644
+ var newTags = structuredClone(payload);
8645
+ __spreadArray([], Object.values(payload), true).sort(function (a, b) { return b.order - a.order; })
8646
+ .forEach(function (vtMap, idx) {
8647
+ newTags[vtMap.viewTag.TagId]['order'] = idx;
8648
+ });
8649
+ state.viewTags = newTags;
8593
8650
  state.shouldRefetchSeries += 1;
8594
8651
  },
8595
8652
  setGraphShouldUpdate: function (state) {
@@ -8763,6 +8820,13 @@ var ColorPicker = function (_a) {
8763
8820
  } })); })))));
8764
8821
  };
8765
8822
 
8823
+ var ButtonWithLoading = function (_a) {
8824
+ var children = _a.children, isLoading = _a.isLoading, props = __rest(_a, ["children", "isLoading"]);
8825
+ return (React__default.createElement(Button$1, __assign({}, props, { disabled: isLoading }),
8826
+ isLoading && React__default.createElement(CircularProgress$1, { size: "1rem" }),
8827
+ children));
8828
+ };
8829
+
8766
8830
  var getIhPath = function () { return localStorage.getItem('ihPath') || "[mssql2022].[IH_100020].[ih]"; };
8767
8831
  //tags
8768
8832
  var getTagsTree = function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -8965,861 +9029,863 @@ var deleteAllViewTagsFromView = function (ViewId) { return __awaiter(void 0, voi
8965
9029
  });
8966
9030
  }); };
8967
9031
 
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": {
9032
+ var useTrendingStyles = makeStyles$1(function (theme) { return ({
9033
+ datetimePicker: {
9003
9034
  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"
9035
+ "& .MuiInputBase-root": {
9036
+ color: "black",
9037
+ backgroundColor: "white",
9038
+ borderRadius: theme.shape.borderRadius,
9039
+ width: "90%",
9040
+ minWidth: "90%",
9041
+ maxWidth: "90%"
9042
+ },
9043
+ "& .MuiInputBase-input": {
9044
+ fontSize: "13px !important",
9045
+ height: "15px !important",
9046
+ paddingRight: "3px",
9047
+ paddingLeft: "3px"
9048
+ },
9049
+ "& .MuiInput-underline:before": {
9050
+ borderBottomColor: "rgba(0, 0, 0, 0.42)"
9051
+ },
9052
+ padding: 0
9017
9053
  },
9018
- dragging: {
9019
- opacity: 0.5
9054
+ select: {
9055
+ "& .MuiInput-root": {
9056
+ width: "100%"
9057
+ },
9058
+ "& .MuiInputBase-root": {
9059
+ color: "black",
9060
+ backgroundColor: "white",
9061
+ borderRadius: theme.shape.borderRadius,
9062
+ minWidth: "100%"
9063
+ },
9064
+ "& .MuiInputBase-input": {
9065
+ fontSize: "14px !important",
9066
+ height: "15px !important"
9067
+ },
9068
+ "& .MuiInput-underline:before": {
9069
+ borderBottomColor: "rgba(0, 0, 0, 0.42)"
9070
+ },
9071
+ padding: 0
9020
9072
  },
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"
9073
+ labelOptions: {
9074
+ paddingLeft: "2rem",
9075
+ userSelect: "none",
9076
+ "& > label": {
9077
+ display: "flex",
9078
+ alignItems: "center",
9079
+ gap: "5px"
9080
+ },
9081
+ '& input[type="checkbox"]': {
9082
+ zoom: 1.5
9083
+ }
9033
9084
  },
9034
- storyRoot: {
9035
- display: "grid",
9036
- height: "100%",
9037
- gridTemplateRows: "auto 1fr",
9038
- listStyleType: "none !important"
9085
+ isPublicCheckbox: {
9086
+ userSelect: "none",
9087
+ paddingLeft: '1rem',
9088
+ "& > label": {
9089
+ display: "flex",
9090
+ alignItems: "center",
9091
+ gap: "15px"
9092
+ },
9093
+ '& input[type="checkbox"]': {
9094
+ zoom: 1.5
9095
+ }
9039
9096
  },
9040
- assetRoot: {
9041
- boxSizing: "border-box",
9042
- height: "100%",
9043
- padding: "32px"
9097
+ navigatorButton: {
9098
+ "& .MuiSvgIcon-root": {
9099
+ cursor: "pointer !important",
9100
+ height: '24px',
9101
+ width: '24px',
9102
+ '& svg': {
9103
+ // Adjust the icon size as well
9104
+ fontSize: '1.5rem'
9105
+ }
9106
+ },
9107
+ color: 'black'
9044
9108
  },
9045
- dropTarget: {
9046
- boxShadow: "0 0 0 1px #1967d2 inset",
9047
- borderRadius: '1px',
9048
- backgroundColor: '#DAE4F2'
9109
+ iconContainer: {
9110
+ display: 'flex',
9111
+ justifyContent: 'flex-end',
9112
+ alignItems: 'center',
9113
+ flex: 1
9049
9114
  },
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"
9115
+ optionContainer: {
9116
+ display: 'flex',
9117
+ justifyContent: 'flex-start',
9118
+ alignItems: 'center',
9119
+ width: '100%'
9062
9120
  },
9063
- icon: {
9064
- alignItems: "center",
9065
- display: "flex"
9121
+ optionLabel: {
9122
+ flexGrow: 1
9066
9123
  },
9067
- customDragLabel: {
9068
- alignItems: "center",
9069
- display: "flex"
9124
+ inputCustom: {
9125
+ color: 'rgba(0, 0, 0, 0.87)',
9126
+ cursor: 'text',
9127
+ fontSize: '0.7rem',
9128
+ boxSizing: 'border-box',
9129
+ fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
9130
+ fontWeight: 400,
9131
+ lineHeight: 1.1876,
9132
+ letterSpacing: '0.00938em',
9133
+ '& .MuiOutlinedInput-input': {
9134
+ padding: '10px 10px'
9135
+ }
9070
9136
  }
9071
9137
  }); });
9072
9138
 
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];
9139
+ var DeleteViewModal = function (_a) {
9140
+ var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9141
+ var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9162
9142
  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) {
9143
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9144
+ var resp;
9145
+ return __generator(this, function (_a) {
9146
+ switch (_a.label) {
9169
9147
  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
9148
  setIsLoading(true);
9174
- if (!name) return [3 /*break*/, 2];
9175
- return [4 /*yield*/, upsertTagFolder(null, parentTagId, name, true)];
9149
+ if (!!isNil$1(view)) return [3 /*break*/, 2];
9150
+ return [4 /*yield*/, deleteView(view.ViewId)];
9176
9151
  case 1:
9177
- resp = _b.sent();
9152
+ resp = _a.sent();
9178
9153
  if (!resp.ok) {
9179
9154
  setError(resp.message);
9180
9155
  }
9181
- _b.label = 2;
9156
+ else {
9157
+ handleClose(true);
9158
+ }
9159
+ _a.label = 2;
9182
9160
  case 2:
9183
- handleClose(true);
9184
- setName('');
9185
9161
  setIsLoading(false);
9186
9162
  return [2 /*return*/];
9187
9163
  }
9188
9164
  });
9189
9165
  }); };
9190
9166
  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); }) }))),
9167
+ 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' },
9168
+ React__default.createElement(Divider, null),
9169
+ React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9170
+ (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9171
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9172
+ React__default.createElement(Typography, null,
9173
+ "Are yu sure you want to delete ",
9174
+ React__default.createElement("strong", null, view === null || view === void 0 ? void 0 : view.ViewName),
9175
+ " ?")))) :
9176
+ (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9177
+ React__default.createElement(Divider, null),
9195
9178
  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")))),
9179
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9180
+ React__default.createElement(Grid$1, { item: true },
9181
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9182
+ React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9183
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'secondary', onClick: handleSubmit, isLoading: isLoading }, "Delete")
9184
+ : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9200
9185
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9201
9186
  };
9202
9187
 
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;
9188
+ var EditViewModal = function (_a) {
9189
+ var open = _a.open, handleClose = _a.handleClose, view = _a.view;
9190
+ var classes = useTrendingStyles();
9191
+ var _b = useState(''), newName = _b[0], setNewName = _b[1];
9192
+ var _c = useState(true), isPublic = _c[0], setIsPublic = _c[1];
9193
+ var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9194
+ var _e = useState(''), error = _e[0], setError = _e[1];
9195
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9196
+ var resp;
9209
9197
  return __generator(this, function (_a) {
9210
9198
  switch (_a.label) {
9211
9199
  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
9200
  setIsLoading(true);
9219
- if (!parentId) return [3 /*break*/, 2];
9220
- return [4 /*yield*/, deleteTagFolder(id)];
9201
+ if (!!isNil$1(view)) return [3 /*break*/, 2];
9202
+ return [4 /*yield*/, upsertView(view.ViewId, newName, isPublic)];
9221
9203
  case 1:
9222
9204
  resp = _a.sent();
9223
9205
  if (!resp.ok) {
9224
9206
  setError(resp.message);
9225
9207
  }
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);
9208
+ else {
9209
+ handleClose(true);
9234
9210
  }
9235
- _a.label = 5;
9236
- case 5:
9237
- handleClose(true);
9211
+ _a.label = 2;
9212
+ case 2:
9238
9213
  setIsLoading(false);
9239
9214
  return [2 /*return*/];
9240
9215
  }
9241
9216
  });
9242
9217
  }); };
9218
+ var handleChangeInput = function (e) {
9219
+ e.preventDefault();
9220
+ var name = e.target.value;
9221
+ setNewName(name);
9222
+ };
9223
+ var handleCheck = function () { return setIsPublic(!isPublic); };
9224
+ useEffect(function () {
9225
+ if (view) {
9226
+ setIsPublic(view.IsPublic);
9227
+ setNewName(view.ViewName);
9228
+ }
9229
+ }, [view]);
9243
9230
  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?"))),
9231
+ 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' },
9232
+ React__default.createElement(Divider, null),
9233
+ React__default.createElement(MesfModal.Content, null, !isNil$1(view) ?
9234
+ (React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "2rem" } },
9235
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { padding: "10px", width: "100%" } },
9236
+ React__default.createElement(TextField, { required: true, className: classes.inputCustom, id: "viewName", label: "Name", variant: "outlined", onChange: handleChangeInput, value: newName })),
9237
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9238
+ React__default.createElement("label", null,
9239
+ React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck }),
9240
+ React__default.createElement(Typography, null, "Public"))))) :
9241
+ (React__default.createElement(Typography, null, "ERROR: No view detected, please select one"))),
9242
+ React__default.createElement(Divider, null),
9251
9243
  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")))),
9244
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9245
+ React__default.createElement(Grid$1, { item: true },
9246
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9247
+ React__default.createElement(Grid$1, { item: true }, !isNil$1(view) ?
9248
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Update")
9249
+ : (React__default.createElement(Button$1, { variant: 'contained', style: { marginRight: "1rem" }, color: 'primary', onClick: function () { return handleClose(false); } }, "Ok")))))),
9256
9250
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9257
9251
  };
9258
9252
 
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;
9253
+ var LoadViewModal = function (_a) {
9254
+ var open = _a.open, handleClose = _a.handleClose, getTagsFromAPI = _a.getTagsFromAPI;
9255
+ var _b = useTrendingContext(), _c = _b.state, views = _c.views, viewSelected = _c.viewSelected, _d = _b.actions; _d.setViews; var setViewTagsAndRefetch = _d.setViewTagsAndRefetch, setViewSelected = _d.setViewSelected;
9256
+ var classes = useTrendingStyles();
9257
+ var _e = useState(null), viewForDelete = _e[0], setViewForDelete = _e[1];
9258
+ var _f = useState(null), viewForEdit = _f[0], setViewForEdit = _f[1];
9259
+ var _g = useState(false), deleteViewModalOpen = _g[0], setDeleteViewModalOpen = _g[1];
9260
+ var _h = useState(false), editViewModalOpen = _h[0], setEditViewModalOpen = _h[1];
9261
+ var _j = useState(false), allViewsChecked = _j[0], setAllViewsChecked = _j[1];
9262
+ var _k = useState(false), isLoading = _k[0], setIsLoading = _k[1];
9263
+ var _l = useState(''), error = _l[0], setError = _l[1];
9264
+ var handleSelect = function () { return __awaiter(void 0, void 0, void 0, function () {
9265
+ var viewTagsResp;
9313
9266
  return __generator(this, function (_a) {
9314
9267
  switch (_a.label) {
9315
9268
  case 0:
9316
- if (!isOpen) return [3 /*break*/, 2];
9269
+ if (!viewSelected) return [3 /*break*/, 2];
9317
9270
  setIsLoading(true);
9318
- return [4 /*yield*/, getTagsTree()];
9271
+ return [4 /*yield*/, getViewTags(viewSelected.ViewId)];
9319
9272
  case 1:
9320
- tagsTree = _a.sent();
9321
- if (tagsTree.ok) {
9322
- rows = tagsTree.data.tables[0].rows;
9323
- tree = buildTagsTreeV2(rows);
9324
- setTagsTreeData(tree);
9273
+ viewTagsResp = _a.sent();
9274
+ if (viewTagsResp.ok) {
9275
+ setViewTagsAndRefetch(viewTagsResp.data.tables[0].rows.reduce(function (carr, curr, idx) {
9276
+ if (isNil$1(curr.Color)) {
9277
+ curr.Color = getRandomColor();
9278
+ }
9279
+ carr[curr.TagId] = {
9280
+ viewTag: curr,
9281
+ order: idx
9282
+ };
9283
+ return carr;
9284
+ }, {}));
9285
+ }
9286
+ else {
9287
+ setError(viewTagsResp.message);
9325
9288
  }
9326
9289
  setIsLoading(false);
9290
+ handleClose(false);
9327
9291
  _a.label = 2;
9328
9292
  case 2: return [2 /*return*/];
9329
9293
  }
9330
9294
  });
9331
9295
  }); };
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) {
9296
+ var handleDeleteView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9297
+ return __generator(this, function (_a) {
9298
+ e.stopPropagation();
9299
+ if (view.ViewId === (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId)) {
9300
+ setError('Can not delete current view');
9301
+ }
9302
+ else {
9303
+ setViewForDelete(view);
9304
+ setDeleteViewModalOpen(true);
9305
+ }
9306
+ return [2 /*return*/];
9307
+ });
9308
+ }); };
9309
+ var handleEditView = function (view, e) { return __awaiter(void 0, void 0, void 0, function () {
9310
+ return __generator(this, function (_a) {
9311
+ setViewForEdit(view);
9312
+ setEditViewModalOpen(true);
9313
+ return [2 /*return*/];
9314
+ });
9315
+ }); };
9316
+ var handleAllViewsCheckbox = function () {
9317
+ setAllViewsChecked(function (prev) { return !prev; });
9318
+ };
9319
+ var publicViews = useMemo(function () {
9320
+ return views.filter(function (v) { return v.IsPublic === true; });
9321
+ }, [views, allViewsChecked]);
9322
+ return (React__default.createElement("div", null,
9323
+ 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' },
9324
+ React__default.createElement(MesfModal.Content, null,
9325
+ React__default.createElement(Grid$1, { container: true }, views.length ? (React__default.createElement(React__default.Fragment, null,
9326
+ React__default.createElement(Grid$1, { item: true, md: 12 },
9327
+ React__default.createElement("div", { className: classes.isPublicCheckbox, style: { paddingBottom: '1rem' } },
9328
+ React__default.createElement("label", { htmlFor: "" },
9329
+ React__default.createElement("input", { type: "checkbox", checked: allViewsChecked, onChange: handleAllViewsCheckbox }),
9330
+ React__default.createElement(Typography, null, "All Views")))),
9331
+ React__default.createElement(Grid$1, { item: true, md: 12 },
9332
+ 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 },
9333
+ React__default.createElement("div", { className: classes.optionLabel }, option.ViewName),
9334
+ React__default.createElement("div", { className: classes.iconContainer },
9335
+ option.IsPublic ? '' :
9336
+ React__default.createElement(React__default.Fragment, null,
9337
+ React__default.createElement(Tooltip, { title: "Private", arrow: true },
9338
+ React__default.createElement(LockIcon, { fontSize: 'small', style: { color: 'black', height: "18px", width: '18px', cursor: 'auto' } }))),
9339
+ React__default.createElement(IconButton$1, { onClick: function (e) { return handleEditView(option); } },
9340
+ React__default.createElement(CreateIcon, { fontSize: 'small', color: 'primary', style: { height: "18px", width: '18px', cursor: 'pointer' } })),
9341
+ React__default.createElement(IconButton$1, { onClick: function (e) { return handleDeleteView(option, e); } },
9342
+ 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" })); } })))) :
9343
+ (React__default.createElement(Typography, null, "No views detected, please add one")))),
9344
+ React__default.createElement(MesfModal.Actions, null,
9345
+ React__default.createElement("div", { style: { paddingTop: "1rem" } },
9346
+ React__default.createElement(Button$1, { variant: 'outlined', style: { marginRight: "1rem" }, color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel"),
9347
+ 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"))))),
9348
+ React__default.createElement(DeleteViewModal, { open: deleteViewModalOpen, view: viewForDelete, handleClose: function (shouldUpdate) {
9349
+ setDeleteViewModalOpen(false);
9350
+ if (shouldUpdate)
9351
+ getTagsFromAPI().then(function () { });
9352
+ } }),
9353
+ React__default.createElement(EditViewModal, { open: editViewModalOpen, view: viewForEdit, handleClose: function (shouldUpdate) {
9354
+ setEditViewModalOpen(false);
9355
+ if (shouldUpdate)
9356
+ getTagsFromAPI().then(function () { });
9357
+ } }),
9358
+ React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9359
+ };
9360
+
9361
+ var SaveAsViewModal = function (_a) {
9362
+ var open = _a.open, handleClose = _a.handleClose;
9363
+ var classes = useTrendingStyles();
9364
+ var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
9365
+ var _c = useState(''), error = _c[0], setError = _c[1];
9366
+ var _d = useTrendingContext(), _e = _d.state, viewTags = _e.viewTags, views = _e.views, viewSelected = _e.viewSelected, _f = _d.actions, setViewSelected = _f.setViewSelected; _f.setViewTags;
9367
+ var _g = useState(true), isPublic = _g[0], setIsPublic = _g[1];
9368
+ var _h = useState(''), newView = _h[0], setNewView = _h[1];
9369
+ var handleCheck = function () { return setIsPublic(!isPublic); };
9370
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
9371
+ var resp, ViewId_1, shouldClose_1;
9372
+ return __generator(this, function (_a) {
9373
+ switch (_a.label) {
9343
9374
  case 0:
9344
9375
  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)];
9376
+ return [4 /*yield*/, upsertView(null, newView, isPublic)];
9354
9377
  case 1:
9355
- newTree = _c.sent();
9356
- if (!newTree.ok) {
9357
- setError(newTree.message);
9358
- }
9378
+ resp = _a.sent();
9379
+ if (!resp.ok) return [3 /*break*/, 3];
9380
+ ViewId_1 = resp.data.returnValue;
9381
+ shouldClose_1 = true;
9382
+ return [4 /*yield*/, Promise.allSettled(Object.values(viewTags).map(function (_a) {
9383
+ 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;
9384
+ upsertViewTag(ViewId_1, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
9385
+ .then(function (r) {
9386
+ if (!r.ok) {
9387
+ setError(function (prevErr) { return "".concat(prevErr, ". ").concat(r.message); });
9388
+ if (shouldClose_1) {
9389
+ shouldClose_1 = false;
9390
+ }
9391
+ }
9392
+ });
9393
+ }))];
9394
+ case 2:
9395
+ _a.sent();
9396
+ handleClose(shouldClose_1);
9359
9397
  return [3 /*break*/, 4];
9360
- case 2: return [4 /*yield*/, changeTagFolderToTag(tagId, newFolderId)];
9361
9398
  case 3:
9362
- newTree = _c.sent();
9363
- if (!newTree.ok) {
9364
- setError(newTree.message);
9365
- }
9366
- _c.label = 4;
9399
+ setError(resp.message);
9400
+ _a.label = 4;
9367
9401
  case 4:
9368
- setTagsTreeData(tree);
9369
- _c.label = 5;
9370
- case 5:
9371
9402
  setIsLoading(false);
9372
9403
  return [2 /*return*/];
9373
9404
  }
9374
9405
  });
9375
9406
  }); };
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
- 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
9407
  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' },
9408
+ 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' },
9409
+ React__default.createElement(Divider, null),
9411
9410
  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 })))))));
9411
+ React__default.createElement(Grid$1, { container: true, spacing: 5, style: { padding: "1rem" } },
9412
+ 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) {
9413
+ setViewSelected(val);
9414
+ if (val) {
9415
+ setNewView("");
9416
+ }
9417
+ }, onInputChange: function (event, newInputValue) {
9418
+ var isValueInViews = views.some(function (view) { return view.ViewName === newInputValue; });
9419
+ if (!isValueInViews) {
9420
+ setNewView(newInputValue);
9421
+ }
9422
+ }, style: { width: "100%" }, renderInput: function (params) { return React__default.createElement(TextField, __assign({}, params, { label: "Views", variant: "outlined" })); } })) :
9423
+ (React__default.createElement(Box, null,
9424
+ 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); }) }))))),
9425
+ React__default.createElement(Grid$1, { item: true, md: 12, xs: 12, style: { paddingTop: "2rem" }, className: classes.isPublicCheckbox },
9426
+ React__default.createElement("label", null,
9427
+ "Public",
9428
+ React__default.createElement("input", { type: "checkbox", checked: isPublic, onChange: handleCheck })))),
9429
+ React__default.createElement(Divider, null),
9430
+ React__default.createElement(MesfModal.Actions, null,
9431
+ React__default.createElement(Grid$1, { container: true, spacing: 1, style: { display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-end' } },
9432
+ React__default.createElement(Grid$1, { item: true },
9433
+ React__default.createElement(Button$1, { variant: 'outlined', color: 'secondary', onClick: function () { return handleClose(false); } }, "Cancel")),
9434
+ React__default.createElement(Grid$1, { item: true },
9435
+ React__default.createElement(ButtonWithLoading, { variant: 'contained', color: 'primary', onClick: handleSubmit, isLoading: isLoading }, "Save"))))),
9436
+ React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9415
9437
  };
9416
9438
 
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
9439
+ var useTagsTreeModalStyles = makeStyles$1(function (theme) { return ({
9440
+ dataTypeOfTree: {
9441
+ width: '25px',
9442
+ height: '25px',
9443
+ color: "white",
9444
+ display: 'flex',
9445
+ justifyContent: 'center',
9446
+ alignItems: 'center',
9447
+ cursor: 'pointer',
9448
+ border: "1px black solid"
9438
9449
  },
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
9450
+ root: {
9451
+ alignItems: "center",
9452
+ display: "flex",
9453
+ height: "32px"
9457
9454
  },
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
9455
+ customNodeRoot: {
9456
+ listStyleType: "none",
9457
+ margin: 0,
9458
+ padding: 0,
9459
+ '&:hover': {
9460
+ backgroundColor: "#f2f2f2"
9468
9461
  }
9469
9462
  },
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
- }
9463
+ arrow: {
9464
+ alignItems: "center",
9465
+ cursor: "pointer",
9466
+ display: "flex",
9467
+ height: "24px",
9468
+ justifyContent: "center",
9469
+ width: "24px",
9470
+ transition: "transform linear 0.1s",
9471
+ transform: "rotate(0deg)"
9481
9472
  },
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'
9473
+ "arrow > div": {
9474
+ alignItems: "center",
9475
+ display: "flex"
9476
+ },
9477
+ "arrow.is-open": {
9478
+ transform: "rotate(90deg)"
9479
+ },
9480
+ filetype: {
9481
+ display: "flex"
9482
+ },
9483
+ label: {
9484
+ paddingInlineStart: "8px"
9485
+ },
9486
+ selected: {
9487
+ backgroundColor: "#e8f0fe"
9488
+ },
9489
+ dragging: {
9490
+ opacity: 0.5
9491
+ },
9492
+ contextMenu: {
9493
+ fontSize: "14px",
9494
+ backgroundColor: "#fff",
9495
+ borderRadius: "2px",
9496
+ padding: "5px 10px;",
9497
+ width: "140px",
9498
+ height: "auto",
9499
+ margin: "0",
9500
+ position: "fixed",
9501
+ boxShadow: "0 0 20px 0 #ccc",
9502
+ display: "flex",
9503
+ flexDirection: "column"
9504
+ },
9505
+ storyRoot: {
9506
+ display: "grid",
9507
+ height: "100%",
9508
+ gridTemplateRows: "auto 1fr",
9509
+ listStyleType: "none !important"
9510
+ },
9511
+ assetRoot: {
9512
+ boxSizing: "border-box",
9513
+ height: "100%",
9514
+ padding: "32px"
9515
+ },
9516
+ dropTarget: {
9517
+ boxShadow: "0 0 0 1px #1967d2 inset",
9518
+ borderRadius: '1px',
9519
+ backgroundColor: '#DAE4F2'
9520
+ },
9521
+ customDragRoot: {
9522
+ alignItems: "center",
9523
+ backgroundColor: "#1967d2",
9524
+ borderRadius: "4px",
9525
+ boxShadow: " 0 12px 24px -6px rgba(0, 0, 0, .25); 0 0 0 1px rgba(0, 0, 0, .08)",
9526
+ color: "#fff",
9527
+ display: "inline-grid",
9528
+ fontSize: "14px",
9529
+ gap: "8px",
9530
+ gridTemplateColumns: "auto auto",
9531
+ padding: "4px 8px",
9532
+ pointerEvents: "none"
9533
+ },
9534
+ icon: {
9535
+ alignItems: "center",
9536
+ display: "flex"
9537
+ },
9538
+ customDragLabel: {
9539
+ alignItems: "center",
9540
+ display: "flex"
9541
+ }
9542
+ }); });
9543
+
9544
+ function buildTagsTreeV2(data) {
9545
+ var tagsForTree = [];
9546
+ data.forEach(function (el) {
9547
+ var tagForTree = {
9548
+ id: el.TagId,
9549
+ parent: (el.ParentTagId || 0),
9550
+ text: el.TagName,
9551
+ data: el,
9552
+ droppable: el.TagTypeCode === 'F'
9553
+ };
9554
+ return tagsForTree.push(tagForTree);
9555
+ });
9556
+ return tagsForTree;
9557
+ }
9558
+
9559
+ var CustomDragPreview = function (props) {
9560
+ var _a, _b, _c;
9561
+ var classes = useTagsTreeModalStyles();
9562
+ var item = props.monitorProps.item;
9563
+ var isFolder = ((_a = item.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === 'F' ? true : false;
9564
+ return (React__default.createElement("div", { className: classes.customDragRoot },
9565
+ React__default.createElement("div", { className: classes.icon }, isFolder ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' }))),
9566
+ 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))));
9567
+ };
9568
+
9569
+ var customStyles = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
9570
+ var TagFolderCustomNode = function (_a) {
9571
+ var _b, _c, _d, _e, _f, _g, _h, _j;
9572
+ 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;
9573
+ var classes = useTagsTreeModalStyles();
9574
+ var nodeClasses = "".concat(classes.customNodeRoot, " ").concat(classes.root, " ").concat(isSelected ? classes.selected : "");
9575
+ var onClickHandler = function () {
9576
+ var _a;
9577
+ var _b;
9578
+ if (options.hasChild || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === 'F') {
9579
+ if (openTagFolders[node.id]) {
9580
+ var newOpenTagFolders = __assign({}, openTagFolders);
9581
+ delete newOpenTagFolders[node.id];
9582
+ setOpenTagFolders(newOpenTagFolders);
9583
+ }
9584
+ else {
9585
+ setOpenTagFolders(__assign(__assign({}, openTagFolders), (_a = {}, _a[node.id] = node.id, _a)));
9490
9586
  }
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'
9587
+ onToggle();
9588
+ return;
9520
9589
  }
9521
- }
9522
- }); });
9590
+ if (!options.hasChild) {
9591
+ handleSelect(node);
9592
+ }
9593
+ };
9594
+ var handleContextMenu = useCallback(function (ev) {
9595
+ ev.stopPropagation();
9596
+ ev.preventDefault();
9597
+ setContextMenuOver(node, ev);
9598
+ }, [node.id, setContextMenuOver]);
9599
+ useEffect(function () {
9600
+ var _a;
9601
+ (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener("contextmenu", handleContextMenu);
9602
+ return function () {
9603
+ var _a;
9604
+ (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener("contextmenu", handleContextMenu);
9605
+ };
9606
+ }, []);
9607
+ return (React__default.createElement("div", { className: nodeClasses, onClick: onClickHandler, style: { paddingLeft: depth * 20, cursor: "pointer" } },
9608
+ React__default.createElement("style", null, customStyles),
9609
+ React__default.createElement(React__default.Fragment, null,
9610
+ options.hasChild ? (React__default.createElement("div", null, isOpen ? React__default.createElement(ArrowDropDownIcon, null) : React__default.createElement(ArrowRight, null)))
9611
+ : null,
9612
+ 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' })))),
9613
+ ((_c = node.data) === null || _c === void 0 ? void 0 : _c.TagName) &&
9614
+ React__default.createElement(React__default.Fragment, null,
9615
+ ((_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: {
9616
+ backgroundColor: ((_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode) === 'A' ? "#AD48C4" : "#C46F48",
9617
+ margin: "0 5px"
9618
+ } }, (_g = node.data) === null || _g === void 0 ? void 0 : _g.TagTypeCode)),
9619
+ React__default.createElement(Tooltip, { title: node.data.TagName, placement: "top", arrow: true },
9620
+ 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))))));
9621
+ };
9523
9622
 
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];
9623
+ var NewFolderModal = function (_a) {
9624
+ var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9625
+ var _b = useState(), name = _b[0], setName = _b[1];
9527
9626
  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) {
9627
+ var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
9628
+ var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9629
+ var parentId, parentTagId, resp;
9630
+ var _a;
9631
+ return __generator(this, function (_b) {
9632
+ switch (_b.label) {
9532
9633
  case 0:
9634
+ e.preventDefault();
9635
+ parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9636
+ 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
9637
  setIsLoading(true);
9534
- if (!!isNil$1(view)) return [3 /*break*/, 2];
9535
- return [4 /*yield*/, deleteView(view.ViewId)];
9638
+ if (!name) return [3 /*break*/, 2];
9639
+ return [4 /*yield*/, upsertTagFolder(null, parentTagId, name, true)];
9536
9640
  case 1:
9537
- resp = _a.sent();
9641
+ resp = _b.sent();
9538
9642
  if (!resp.ok) {
9539
9643
  setError(resp.message);
9540
9644
  }
9541
- else {
9542
- handleClose(true);
9543
- }
9544
- _a.label = 2;
9645
+ _b.label = 2;
9545
9646
  case 2:
9647
+ handleClose(true);
9648
+ setName('');
9546
9649
  setIsLoading(false);
9547
9650
  return [2 /*return*/];
9548
9651
  }
9549
9652
  });
9550
9653
  }); };
9551
9654
  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),
9655
+ 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' },
9656
+ React__default.createElement(MesfModal.Content, null,
9657
+ React__default.createElement(Box, null,
9658
+ 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
9659
  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")))))),
9660
+ React__default.createElement("div", null,
9661
+ React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9662
+ React__default.createElement("div", null,
9663
+ React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Save")))),
9570
9664
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9571
9665
  };
9572
9666
 
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;
9667
+ var RemoveFolderModal = function (_a) {
9668
+ var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
9669
+ var _b = useState(''), error = _b[0], setError = _b[1];
9670
+ var _c = useState(false), isLoading = _c[0], setIsLoading = _c[1];
9671
+ var onSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
9672
+ var parentId, name_1, id, resp;
9582
9673
  return __generator(this, function (_a) {
9583
9674
  switch (_a.label) {
9584
9675
  case 0:
9676
+ e.preventDefault();
9677
+ if (!tagNodeSelectedInTree) return [3 /*break*/, 5];
9678
+ parentId = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.parent) || null;
9679
+ name_1 = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text;
9680
+ id = Number(tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.id);
9681
+ resp = void 0;
9585
9682
  setIsLoading(true);
9586
- if (!!isNil$1(view)) return [3 /*break*/, 2];
9587
- return [4 /*yield*/, upsertView(view.ViewId, newName, isPublic)];
9683
+ if (!parentId) return [3 /*break*/, 2];
9684
+ return [4 /*yield*/, deleteTagFolder(id)];
9588
9685
  case 1:
9589
9686
  resp = _a.sent();
9590
9687
  if (!resp.ok) {
9591
9688
  setError(resp.message);
9592
9689
  }
9593
- else {
9594
- handleClose(true);
9690
+ return [3 /*break*/, 4];
9691
+ case 2: return [4 /*yield*/, upsertTagFolder(id, parentId, name_1, false)];
9692
+ case 3:
9693
+ resp = _a.sent();
9694
+ _a.label = 4;
9695
+ case 4:
9696
+ if (!resp.ok) {
9697
+ setError(resp.message);
9595
9698
  }
9596
- _a.label = 2;
9597
- case 2:
9699
+ _a.label = 5;
9700
+ case 5:
9701
+ handleClose(true);
9598
9702
  setIsLoading(false);
9599
9703
  return [2 /*return*/];
9600
9704
  }
9601
9705
  });
9602
9706
  }); };
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
9707
  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),
9708
+ 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' },
9709
+ React__default.createElement(MesfModal.Content, null,
9710
+ React__default.createElement(Box, null,
9711
+ React__default.createElement(Typography, null,
9712
+ "Are you sure you want to remove ",
9713
+ React__default.createElement("strong", null, tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.text),
9714
+ " folder?"))),
9628
9715
  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")))))),
9716
+ React__default.createElement("div", null,
9717
+ React__default.createElement(Button$1, { color: 'secondary', variant: 'outlined', onClick: function () { return handleClose(false); } }, "Cancel")),
9718
+ React__default.createElement("div", null,
9719
+ React__default.createElement(ButtonWithLoading, { isLoading: isLoading, onClick: onSubmit, color: 'primary', variant: 'contained' }, "Remove")))),
9635
9720
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9636
9721
  };
9637
9722
 
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;
9723
+ var ContextMenu = function (_a) {
9724
+ var _b;
9725
+ var isOpen = _a.isOpen, anchorPoint = _a.anchorPoint, tagNodeSelectedInTree = _a.tagNodeSelectedInTree, getTagsTreeData = _a.getTagsTreeData, setShowContextMenu = _a.setShowContextMenu;
9726
+ var classes = useTagsTreeModalStyles();
9727
+ var _c = useState(false), showNewTagModal = _c[0], setShowNewTagModal = _c[1];
9728
+ var _d = useState(false), showRemoveTagModal = _d[0], setShowRemoveTagModal = _d[1];
9729
+ var isFolder = ((_b = tagNodeSelectedInTree === null || tagNodeSelectedInTree === void 0 ? void 0 : tagNodeSelectedInTree.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F";
9730
+ return (React__default.createElement(React__default.Fragment, null,
9731
+ isOpen && anchorPoint ? (React__default.createElement("ul", { className: classes.contextMenu, style: { top: anchorPoint.y, left: anchorPoint.x } },
9732
+ React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowNewTagModal(true); } }, "New Folder"),
9733
+ tagNodeSelectedInTree && isFolder && (React__default.createElement(MenuItem$1, { style: { width: "100%", justifyContent: "left" }, onClick: function () { return setShowRemoveTagModal(true); } }, "Remove Folder")))) : (null),
9734
+ React__default.createElement(NewFolderModal, { open: showNewTagModal, handleClose: function (shouldUpdate) {
9735
+ if (shouldUpdate) {
9736
+ getTagsTreeData();
9737
+ }
9738
+ setShowContextMenu(false);
9739
+ setShowNewTagModal(false);
9740
+ }, tagNodeSelectedInTree: tagNodeSelectedInTree }),
9741
+ React__default.createElement(RemoveFolderModal, { open: showRemoveTagModal, handleClose: function (shouldUpdate) {
9742
+ if (shouldUpdate) {
9743
+ getTagsTreeData();
9744
+ }
9745
+ setShowContextMenu(false);
9746
+ setShowRemoveTagModal(false);
9747
+ }, tagNodeSelectedInTree: tagNodeSelectedInTree })));
9748
+ };
9749
+
9750
+ var TagSelectionModal = function (_a) {
9751
+ var isOpen = _a.isOpen; _a.onClose; var onTagSelect = _a.onTagSelect;
9752
+ var classes = useTagsTreeModalStyles();
9753
+ var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
9754
+ var _c = useState(''), error = _c[0], setError = _c[1];
9755
+ var _d = useState([]), tagsTreeData = _d[0], setTagsTreeData = _d[1];
9756
+ var _e = useState(null), tagNodeSelectedInTree = _e[0], setTagNodeSelectedInTree = _e[1];
9757
+ var _f = useState(null), anchorPoint = _f[0], setAnchorPoint = _f[1];
9758
+ var _g = useState(false), showContextMenu = _g[0], setShowContextMenu = _g[1];
9759
+ var backendOffset = 1000000;
9760
+ var _h = useState({}), openTagFolders = _h[0], setOpenTagFolders = _h[1];
9761
+ var _j = useState([]), selectedNodes = _j[0], setSelectedNodes = _j[1];
9762
+ useTrendingContext().state.viewTags;
9763
+ var handleContextMenu = function (data, e) {
9764
+ e.preventDefault();
9765
+ var top = e.clientY;
9766
+ var left = e.clientX;
9767
+ setAnchorPoint({ x: left, y: top });
9768
+ setSelectedNodes([data]);
9769
+ setShowContextMenu(true);
9770
+ var selectedNode = tagsTreeData.find(function (node) { var _a; return ((_a = node.data) === null || _a === void 0 ? void 0 : _a.TagId) === data.id; });
9771
+ if (selectedNode) {
9772
+ setTagNodeSelectedInTree(selectedNode);
9773
+ }
9774
+ };
9775
+ var getTagsTreeData = function () { return __awaiter(void 0, void 0, void 0, function () {
9776
+ var tagsTree, rows, tree;
9651
9777
  return __generator(this, function (_a) {
9652
9778
  switch (_a.label) {
9653
9779
  case 0:
9654
- if (!viewSelected) return [3 /*break*/, 2];
9780
+ if (!isOpen) return [3 /*break*/, 2];
9655
9781
  setIsLoading(true);
9656
- return [4 /*yield*/, getViewTags(viewSelected.ViewId)];
9782
+ return [4 /*yield*/, getTagsTree()];
9657
9783
  case 1:
9658
- viewTagsResp = _a.sent();
9659
- if (viewTagsResp.ok) {
9660
- setViewTags(viewTagsResp.data.tables[0].rows);
9661
- }
9662
- else {
9663
- setError(viewTagsResp.message);
9784
+ tagsTree = _a.sent();
9785
+ if (tagsTree.ok) {
9786
+ rows = tagsTree.data.tables[0].rows;
9787
+ tree = buildTagsTreeV2(rows);
9788
+ setTagsTreeData(tree);
9664
9789
  }
9665
9790
  setIsLoading(false);
9666
- handleClose(true);
9667
9791
  _a.label = 2;
9668
9792
  case 2: return [2 /*return*/];
9669
9793
  }
9670
9794
  });
9671
9795
  }); };
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) {
9796
+ var expanded = useMemo(function () {
9797
+ return Object.keys(openTagFolders).map(function (el) { return parseInt(el); });
9798
+ }, [openTagFolders]);
9799
+ useEffect(function () {
9800
+ getTagsTreeData();
9801
+ }, [isOpen]);
9802
+ var handleDrop = function (tree, options) { return __awaiter(void 0, void 0, void 0, function () {
9803
+ var tagId, newFolderId, newTree, newTree;
9804
+ var _a, _b;
9805
+ return __generator(this, function (_c) {
9806
+ switch (_c.label) {
9750
9807
  case 0:
9751
9808
  setIsLoading(true);
9752
- return [4 /*yield*/, upsertView(null, newView, isPublic)];
9809
+ if (!options.dragSource) return [3 /*break*/, 5];
9810
+ tagId = Number(options.dragSource.id);
9811
+ newFolderId = Number((_a = options.dropTarget) === null || _a === void 0 ? void 0 : _a.id) || null;
9812
+ if (tagId === newFolderId) {
9813
+ setIsLoading(false);
9814
+ return [2 /*return*/];
9815
+ }
9816
+ if (!(((_b = options.dragSource.data) === null || _b === void 0 ? void 0 : _b.TagTypeCode) === "F")) return [3 /*break*/, 2];
9817
+ return [4 /*yield*/, upsertTagFolder(tagId, newFolderId, options.dragSource.text, true)];
9753
9818
  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);
9819
+ newTree = _c.sent();
9820
+ if (!newTree.ok) {
9821
+ setError(newTree.message);
9822
+ }
9773
9823
  return [3 /*break*/, 4];
9824
+ case 2: return [4 /*yield*/, changeTagFolderToTag(tagId, newFolderId)];
9774
9825
  case 3:
9775
- setError(resp.message);
9776
- _a.label = 4;
9826
+ newTree = _c.sent();
9827
+ if (!newTree.ok) {
9828
+ setError(newTree.message);
9829
+ }
9830
+ _c.label = 4;
9777
9831
  case 4:
9832
+ setTagsTreeData(tree);
9833
+ _c.label = 5;
9834
+ case 5:
9778
9835
  setIsLoading(false);
9779
9836
  return [2 /*return*/];
9780
9837
  }
9781
9838
  });
9782
9839
  }); };
9840
+ var handleClick = function (node) {
9841
+ if (node.data) {
9842
+ onTagSelect(node.data);
9843
+ }
9844
+ };
9845
+ var handleCloseContextMenu = function (e) {
9846
+ if (showContextMenu) {
9847
+ setShowContextMenu(false);
9848
+ }
9849
+ };
9783
9850
  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"))))),
9851
+ React__default.createElement("div", { style: { display: isOpen ? "block" : "none", minHeight: "700px", minWidth: "800px" }, onClick: handleCloseContextMenu },
9852
+ React__default.createElement("div", { style: { overflowY: 'auto', maxHeight: '700px' } }, isLoading ? (React__default.createElement(Grid$1, { container: true, justifyContent: "center", alignItems: "center", style: { minHeight: "100px" } },
9853
+ React__default.createElement(CircularProgress$1, { size: "2rem" }))) : (React__default.createElement(DndProvider$1, { backend: HTML5Backend },
9854
+ React__default.createElement(Tree, { classes: {
9855
+ root: classes.assetRoot,
9856
+ dropTarget: classes.dropTarget
9857
+ }, initialOpen: expanded, tree: tagsTreeData, rootId: backendOffset, onDrop: handleDrop, canDrop: function (tag, options) {
9858
+ return !selectedNodes.some(function (selectedNode) {
9859
+ return Number(selectedNode.id) === Number(options.dropTargetId);
9860
+ });
9861
+ }, render: function (node, options) {
9862
+ var selected = selectedNodes.some(function (selectedNode) { return Number(selectedNode.id) === Number(node.id); });
9863
+ return (React__default.createElement(TagFolderCustomNode, { setContextMenuOver: handleContextMenu, node: node, options: options, isSelected: selected, openTagFolders: openTagFolders, setOpenTagFolders: setOpenTagFolders, handleSelect: handleClick }));
9864
+ }, dragPreviewRender: function (monitorProps) { return (React__default.createElement(CustomDragPreview, { monitorProps: monitorProps })
9865
+ // <div>{monitorProps.item.data?.TagName}</div>
9866
+ ); } }))))),
9867
+ React__default.createElement(ContextMenu, { anchorPoint: anchorPoint, isOpen: showContextMenu, setShowContextMenu: setShowContextMenu, tagNodeSelectedInTree: tagNodeSelectedInTree, getTagsTreeData: getTagsTreeData }),
9812
9868
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
9813
9869
  };
9814
9870
 
9871
+ var TagsTreeModal = function (_a) {
9872
+ var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
9873
+ return (React__default.createElement(React__default.Fragment, null,
9874
+ React__default.createElement(MesfModal, { open: open, handleClose: handleClose, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Tags' },
9875
+ React__default.createElement(MesfModal.Content, null,
9876
+ React__default.createElement(Box, null,
9877
+ React__default.createElement(Typography, { id: "modal-modal-description" },
9878
+ React__default.createElement(TagSelectionModal, { isOpen: open, onClose: function () { return handleClose; }, onTagSelect: onTagSelect })))))));
9879
+ };
9880
+
9815
9881
  var useTagsDataTable = function (_a) {
9816
- var cursorData = _a.cursorData, viewTags = _a.viewTags, chartData = _a.chartData;
9882
+ var cursorData = _a.cursorData, viewTagsMap = _a.viewTagsMap, chartData = _a.chartData;
9817
9883
  return useMemo(function () {
9818
9884
  var _a;
9819
9885
  var dataTable = {};
9820
9886
  if (cursorData) {
9821
- var _loop_1 = function (idx) {
9822
- var tag = viewTags[idx];
9887
+ var _loop_1 = function (viewTagEntry) {
9888
+ var tag = viewTagsMap[viewTagEntry].viewTag;
9823
9889
  var datasetForTag = ((_a = chartData.datasets.find(function (ds) {
9824
9890
  return ds.tagId === (tag === null || tag === void 0 ? void 0 : tag.TagId);
9825
9891
  })) === null || _a === void 0 ? void 0 : _a.data) || [];
@@ -9828,8 +9894,8 @@ var useTagsDataTable = function (_a) {
9828
9894
  var p1Found = false;
9829
9895
  var pmin = { x: 0, y: Number.POSITIVE_INFINITY };
9830
9896
  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];
9897
+ for (var idx = 0; idx < datasetForTag.length; idx++) {
9898
+ var curr = datasetForTag[idx];
9833
9899
  var currentVal = curr.x;
9834
9900
  if (!p1Found) {
9835
9901
  if (currentVal < cursorData.x1) {
@@ -9866,12 +9932,12 @@ var useTagsDataTable = function (_a) {
9866
9932
  pmax: pmax
9867
9933
  };
9868
9934
  };
9869
- for (var idx = 0; idx < viewTags.length; idx++) {
9870
- _loop_1(idx);
9935
+ for (var viewTagEntry in viewTagsMap) {
9936
+ _loop_1(viewTagEntry);
9871
9937
  }
9872
9938
  }
9873
9939
  return dataTable;
9874
- }, [viewTags, chartData, cursorData]);
9940
+ }, [viewTagsMap, chartData, cursorData]);
9875
9941
  };
9876
9942
 
9877
9943
  var useTagsTableStyles = makeStyles$1(function (theme) { return ({
@@ -10009,7 +10075,7 @@ var formatTimeDiffWithMs = function (start, end) {
10009
10075
  };
10010
10076
 
10011
10077
  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;
10078
+ 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
10079
  var classes = useTagsTableStyles();
10014
10080
  var _b = useTrendingContext(), _c = _b.state, viewTags = _c.viewTags, viewSelected = _c.viewSelected, _d = _b.actions, setViewTags = _d.setViewTags, setViewTagsAndRefetch = _d.setViewTagsAndRefetch;
10015
10081
  var _e = useState({}); _e[0]; _e[1];
@@ -10019,44 +10085,53 @@ var TableComponent = function (_a) {
10019
10085
  var _j = useState(false), saveAsViewModalOpen = _j[0], setSaveAsViewModalOpen = _j[1];
10020
10086
  var _k = useState(false), loadViewOpen = _k[0], setLoadViewOpen = _k[1];
10021
10087
  var _l = useState(''), snackbarMessage = _l[0], setSnackbarMessage = _l[1];
10022
- var dataTable = useTagsDataTable({ viewTags: viewTags, chartData: chartData, cursorData: cursorData });
10088
+ var dataTable = useTagsDataTable({ viewTagsMap: viewTags, chartData: chartData, cursorData: cursorData });
10023
10089
  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
- });
10090
+ var newTags = structuredClone(viewTags);
10091
+ newTags[tagId]['viewTag'][property] = value;
10092
+ newTags[tagId]['viewTag']['IsAutoScale'] = false;
10028
10093
  setViewTags(newTags);
10029
10094
  };
10095
+ var handleChangeScale = function (value, scale, tagId) {
10096
+ handleChange(tagId, value, scale);
10097
+ };
10030
10098
  var handleChangeAlias = function (tagId, newName) {
10031
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { Alias: newName }) : tag; });
10099
+ var newTags = structuredClone(viewTags);
10100
+ newTags[tagId]['viewTag']['Alias'] = newName;
10032
10101
  setViewTags(newTags);
10033
10102
  };
10034
10103
  var handleVisibilityChange = function (tagId, value) {
10035
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { IsVisible: value }) : tag; });
10104
+ var newTags = structuredClone(viewTags);
10105
+ newTags[tagId]['viewTag']['IsVisible'] = value;
10036
10106
  setViewTags(newTags);
10037
10107
  };
10038
10108
  var handleUnitChange = function (tagId, newUnit) {
10039
- var newTags = viewTags.map(function (tag) { return (tag.TagId === tagId ? __assign(__assign({}, tag), { Unit: newUnit }) : tag); });
10109
+ var newTags = structuredClone(viewTags);
10110
+ newTags[tagId]['viewTag']['Unit'] = newUnit;
10040
10111
  setViewTags(newTags);
10041
10112
  };
10042
10113
  var handleAutoScaleChange = function (tagId, checked) {
10043
- var newTags = viewTags.map(function (t) { return t.TagId == tagId ? __assign(__assign({}, t), { IsAutoScale: !checked }) : t; });
10114
+ var newTags = structuredClone(viewTags);
10115
+ newTags[tagId]['viewTag']['IsAutoScale'] = !checked;
10044
10116
  setViewTags(newTags);
10045
10117
  };
10046
10118
  var handleColorChange = function (tagId, value) {
10047
- var newTags = viewTags.map(function (tag) { return tag.TagId === tagId ? __assign(__assign({}, tag), { Color: value }) : tag; });
10119
+ var newTags = structuredClone(viewTags);
10120
+ newTags[tagId]['viewTag']['Color'] = value;
10048
10121
  setViewTags(newTags);
10049
10122
  };
10050
10123
  var handleDeleteTag = function (tagId) {
10051
- var newTags = viewTags.filter(function (tag) { return tag.TagId !== tagId; });
10124
+ var newTags = structuredClone(viewTags);
10125
+ delete newTags[tagId];
10052
10126
  setViewTagsAndRefetch(newTags);
10053
10127
  };
10054
10128
  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
- }
10129
+ var newTags = structuredClone(viewTags);
10130
+ newTags[newTag.TagId] = {
10131
+ viewTag: __assign(__assign({}, newTag), { IsVisible: true, TagType: newTag.TagTypeCode, Color: newTag.Color || getRandomColor(), IsAutoScale: newTag.MinScale || newTag.MaxScale ? false : true }),
10132
+ order: Object.keys(viewTags).length
10133
+ };
10134
+ setViewTagsAndRefetch(newTags);
10060
10135
  };
10061
10136
  var handleAbleScales = function (tagId, checked) {
10062
10137
  if (checked) {
@@ -10114,7 +10189,7 @@ var TableComponent = function (_a) {
10114
10189
  },
10115
10190
  ]);
10116
10191
  var handleTagSelect = function (selectedTag) {
10117
- var alreadySelected = viewTags.find(function (vt) { return vt.TagId === selectedTag.TagId; });
10192
+ var alreadySelected = viewTags[selectedTag.TagId];
10118
10193
  if (!alreadySelected) {
10119
10194
  handleAddTag(selectedTag);
10120
10195
  }
@@ -10122,13 +10197,13 @@ var TableComponent = function (_a) {
10122
10197
  setError("".concat(selectedTag.TagName, " is already selected"));
10123
10198
  }
10124
10199
  };
10125
- var handleDelete = function (index) { return __awaiter(void 0, void 0, void 0, function () {
10200
+ var handleDelete = function () { return __awaiter(void 0, void 0, void 0, function () {
10126
10201
  return __generator(this, function (_a) {
10127
10202
  if (!isNil$1(viewTagForDelete)) {
10128
10203
  if (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) {
10129
10204
  handleDeleteTag(viewTagForDelete.TagId);
10130
10205
  }
10131
- setSelectedRowIndex(null); // Reset the selected row index
10206
+ setSelectedRowTagId(null); // Reset the selected row index
10132
10207
  setViewTagForDelete(null);
10133
10208
  }
10134
10209
  return [2 /*return*/];
@@ -10155,8 +10230,8 @@ var TableComponent = function (_a) {
10155
10230
  if (!deleteResp.ok) {
10156
10231
  setError(deleteResp.message);
10157
10232
  }
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;
10233
+ return [4 /*yield*/, Promise.allSettled(Object.values(viewTags).sort(function (a, b) { return b.order - a.order; }).map(function (_a) {
10234
+ 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
10235
  upsertViewTag(viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId, TagId, Color, MinScale, MaxScale, IsVisible, IsAutoScale, Unit)
10161
10236
  .then(function (r) {
10162
10237
  if (!r.ok) {
@@ -10171,7 +10246,7 @@ var TableComponent = function (_a) {
10171
10246
  setError("Tag ".concat(index, " failed with reason: ").concat(result.reason));
10172
10247
  }
10173
10248
  else {
10174
- setSelectedRowIndex(null);
10249
+ setSelectedRowTagId(null);
10175
10250
  setSnackbarMessage('View saved successfully');
10176
10251
  }
10177
10252
  });
@@ -10194,13 +10269,13 @@ var TableComponent = function (_a) {
10194
10269
  };
10195
10270
  useEffect(function () {
10196
10271
  var handleGlobalClick = function (e) {
10197
- if (selectedRowIndex !== null) {
10198
- setSelectedRowIndex(null);
10272
+ if (selectedRowTagId !== null) {
10273
+ setSelectedRowTagId(null);
10199
10274
  }
10200
10275
  };
10201
10276
  var handleKeyDown = function (e) {
10202
- if (e.key === "Escape" && selectedRowIndex !== null) {
10203
- setSelectedRowIndex(null);
10277
+ if (e.key === "Escape" && selectedRowTagId !== null) {
10278
+ setSelectedRowTagId(null);
10204
10279
  }
10205
10280
  };
10206
10281
  // Attach event listeners
@@ -10211,14 +10286,14 @@ var TableComponent = function (_a) {
10211
10286
  document.removeEventListener("click", handleGlobalClick);
10212
10287
  document.removeEventListener("keydown", handleKeyDown);
10213
10288
  };
10214
- }, [selectedRowIndex]);
10289
+ }, [selectedRowTagId]);
10215
10290
  var handleSaveDefaultToTag = function () { return __awaiter(void 0, void 0, void 0, function () {
10216
10291
  var _a, TagId, Alias, Color, MinScale, MaxScale, Unit, IsVisible, IsAutoScale, saveTagDefaultsResp, upsertViewTagResp;
10217
10292
  return __generator(this, function (_b) {
10218
10293
  switch (_b.label) {
10219
10294
  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;
10295
+ if (!(viewSelected && selectedRowTagId !== null)) return [3 /*break*/, 3];
10296
+ _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
10297
  return [4 /*yield*/, saveTagDefaults(TagId, Alias, Color, MinScale, MaxScale, Unit)];
10223
10298
  case 1:
10224
10299
  saveTagDefaultsResp = _b.sent();
@@ -10231,7 +10306,7 @@ var TableComponent = function (_a) {
10231
10306
  if (!upsertViewTagResp.ok) {
10232
10307
  setError(upsertViewTagResp.message);
10233
10308
  }
10234
- setSelectedRowIndex(null);
10309
+ setSelectedRowTagId(null);
10235
10310
  _b.label = 3;
10236
10311
  case 3: return [2 /*return*/];
10237
10312
  }
@@ -10255,7 +10330,7 @@ var TableComponent = function (_a) {
10255
10330
  React__default.createElement("thead", null,
10256
10331
  React__default.createElement("tr", null,
10257
10332
  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); } },
10333
+ (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
10334
  React__default.createElement("i", null,
10260
10335
  React__default.createElement(SaveIcon, null),
10261
10336
  "(Save view as)")))),
@@ -10339,11 +10414,12 @@ var TableComponent = function (_a) {
10339
10414
  React__default.createElement(Grid$1, { item: true, xs: 12 },
10340
10415
  React__default.createElement("div", { style: { width: '100%', height: '100%', maxHeight: '100%' } },
10341
10416
  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;
10417
+ React__default.createElement("tbody", null, Object.values(viewTags).length ? Object.values(viewTags).map(function (_a) {
10418
+ var _b, _c, _d, _e, _f, _g, _h;
10419
+ var tag = _a.viewTag;
10344
10420
  return (React__default.createElement("tr", { key: tag.TagName,
10345
10421
  // onClick={() => handleRowClick(index)}
10346
- onContextMenu: function (e) { return handleRightClick(e, index); }, className: classes.rowHover },
10422
+ onContextMenu: function (e) { return handleRightClick(e, tag.TagId); }, className: classes.rowHover },
10347
10423
  React__default.createElement("td", { className: "".concat(classes.visible, " ").concat(classes.checkbox) },
10348
10424
  React__default.createElement("input", { type: "checkbox", checked: tag.IsVisible, onChange: function (e) { return handleVisibilityChange(tag.TagId, e.target.checked); } })),
10349
10425
  React__default.createElement("td", { className: classes.aliasCol },
@@ -10362,24 +10438,14 @@ var TableComponent = function (_a) {
10362
10438
  backgroundColor: 'rgba(239, 239, 239, 0.3)',
10363
10439
  color: 'rgba(84, 84, 84, 1)',
10364
10440
  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
- } })),
10441
+ } : {})), 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
10442
  React__default.createElement("td", { className: classes.inputCol },
10373
10443
  React__default.createElement("input", { type: "number", className: classes.numberInput, style: __assign({ width: '100%', WebkitAppearance: 'none' }, (tag.IsAutoScale ? {
10374
10444
  backgroundColor: 'rgba(239, 239, 239, 0.3)',
10375
10445
  color: 'rgba(84, 84, 84, 1)',
10376
10446
  border: '1px solid rgba(118, 118, 118, 0.3)'
10377
10447
  } : {})), 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
- }
10448
+ handleChangeScale((e.target).value, "MaxScale", tag.TagId);
10383
10449
  } })),
10384
10450
  React__default.createElement("td", { className: "".concat(classes.autoScale, " ").concat(classes.checkbox) },
10385
10451
  React__default.createElement("input", { type: "checkbox", checked: !!tag.IsAutoScale, onChange: function (e) { return handleAutoScaleChange(tag.TagId, tag.IsAutoScale); } })),
@@ -10390,14 +10456,14 @@ var TableComponent = function (_a) {
10390
10456
  var value = e.target.value;
10391
10457
  handleUnitChange(tag.TagId, value);
10392
10458
  }, 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),
10459
+ React__default.createElement("td", null, round((_b = dataTable[tag.TagName]) === null || _b === void 0 ? void 0 : _b.y1, 3) || 0),
10460
+ React__default.createElement("td", { className: classes.doubleInput }, round((_c = dataTable[tag.TagName]) === null || _c === void 0 ? void 0 : _c.y2, 3) || 0),
10461
+ React__default.createElement("td", null, round((_d = dataTable[tag.TagName]) === null || _d === void 0 ? void 0 : _d.y2y1, 3) || 0),
10396
10462
  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,
10463
+ !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
10464
  " "),
10399
10465
  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,
10466
+ !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
10467
  " ")));
10402
10468
  }) : React__default.createElement("div", { style: { padding: '1rem' } },
10403
10469
  React__default.createElement("div", { style: { padding: "1rem" } }, "No tag view detected. "),
@@ -10844,23 +10910,32 @@ var TrendingChart = function (_a) {
10844
10910
  var _c = useState(null), lineTabCoords = _c[0], setLineTabCoords = _c[1];
10845
10911
  var _d = useState(null), chartArea = _d[0], setChartArea = _d[1];
10846
10912
  var chartRef = useRef(null);
10913
+ var forDebounce = useRef({
10914
+ viewTags: viewTags,
10915
+ series: series,
10916
+ setChartOptions: setChartOptions,
10917
+ setChartData: setChartData
10918
+ });
10847
10919
  var debouncedUpdateChart = useRef(debounce(function () {
10848
10920
  if (chartRef.current) {
10849
10921
  updateCursorData(chartRef.current, setCursorData);
10850
10922
  chartRef.current.update();
10851
10923
  }
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 () {
10924
+ }, 250));
10925
+ forDebounce.current = {
10926
+ viewTags: viewTags,
10927
+ series: series,
10928
+ setChartOptions: setChartOptions,
10929
+ setChartData: setChartData
10930
+ };
10931
+ var debouncedUpdateChartBasedOnData = useRef(debounce(function () {
10932
+ var _a = forDebounce.current, viewTags = _a.viewTags, series = _a.series, setChartOptions = _a.setChartOptions, setChartData = _a.setChartData;
10859
10933
  var axes = [];
10860
10934
  if (!series.length) {
10861
10935
  return;
10862
10936
  }
10863
- viewTags.forEach(function (tag, index) {
10937
+ Object.values(viewTags).forEach(function (_a, index) {
10938
+ var tag = _a.viewTag;
10864
10939
  var existingAxis = axes.findIndex(function (existingTag) {
10865
10940
  return areRangesSimilar(existingTag, tag);
10866
10941
  });
@@ -10874,6 +10949,11 @@ var TrendingChart = function (_a) {
10874
10949
  });
10875
10950
  // Configure yAxes based on grouped axes
10876
10951
  var yAxesConfig = axes.map(function (axis) {
10952
+ var min = Number(axis.MinScale);
10953
+ var max = Number(axis.MaxScale);
10954
+ if (!min && !max) {
10955
+ max = 1;
10956
+ }
10877
10957
  return {
10878
10958
  id: "y-axis-".concat(axis.TagId),
10879
10959
  type: "linear",
@@ -10882,10 +10962,10 @@ var TrendingChart = function (_a) {
10882
10962
  display: true,
10883
10963
  labelString: axis.TagName
10884
10964
  },
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,
10965
+ min: axis.IsAutoScale ? undefined : min,
10966
+ max: axis.IsAutoScale ? undefined : max,
10967
+ suggestedMin: axis.IsAutoScale ? undefined : min,
10968
+ suggestedMax: axis.IsAutoScale ? undefined : max,
10889
10969
  stepSize: 10,
10890
10970
  grid: {
10891
10971
  display: true
@@ -10923,7 +11003,9 @@ var TrendingChart = function (_a) {
10923
11003
  return newResp;
10924
11004
  });
10925
11005
  var updatedSeries = series.map(function (serie, index) {
10926
- var tag = viewTags[index];
11006
+ var _a;
11007
+ var tagsSortedArray = Object.values(viewTags).sort(function (a, b) { return b.order - a.order; });
11008
+ var tag = (_a = tagsSortedArray[index]) === null || _a === void 0 ? void 0 : _a.viewTag;
10927
11009
  var yAxisTagId = seriesVsTags.current[tag === null || tag === void 0 ? void 0 : tag.TagId];
10928
11010
  return {
10929
11011
  yAxisID: "y-axis-".concat(yAxisTagId),
@@ -10942,6 +11024,14 @@ var TrendingChart = function (_a) {
10942
11024
  labels: [],
10943
11025
  datasets: updatedSeries
10944
11026
  });
11027
+ }, 1000));
11028
+ var _e = useState(false), chartShouldInitCursors = _e[0], setChartShouldInitCursors = _e[1];
11029
+ var verticalLinePlugin = useGetVerticalLinePlugin(setChartArea, setLineTabCoords);
11030
+ var xAxisDatePlugin = useXAxisDatePlugin();
11031
+ var yAxisPlugin = useYAxisPlugin();
11032
+ var seriesVsTags = useRef({});
11033
+ useEffect(function () {
11034
+ debouncedUpdateChartBasedOnData.current();
10945
11035
  }, [state.graphShouldUpdate, series]);
10946
11036
  useEffect(function () {
10947
11037
  if (chartShouldInitCursors) {
@@ -10959,7 +11049,7 @@ var TrendingChart = function (_a) {
10959
11049
  });
10960
11050
  // @ts-ignore
10961
11051
  chartRef.current.mouseX = newLeft;
10962
- debouncedUpdateChart();
11052
+ debouncedUpdateChart.current();
10963
11053
  } })) : null,
10964
11054
  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
11055
  setLineTabCoords(function (prevCoords) {
@@ -10968,7 +11058,7 @@ var TrendingChart = function (_a) {
10968
11058
  });
10969
11059
  // @ts-ignore
10970
11060
  chartRef.current.secondLineX = newLeft;
10971
- debouncedUpdateChart();
11061
+ debouncedUpdateChart.current();
10972
11062
  } })) : null,
10973
11063
  React__default.createElement(Line, { ref: chartRef, data: chartData, options: chartOptions, plugins: [verticalLinePlugin, xAxisDatePlugin, yAxisPlugin] })));
10974
11064
  };
@@ -10980,7 +11070,7 @@ var Trending = function (_a) {
10980
11070
  var _d = useState(''), error = _d[0], setError = _d[1];
10981
11071
  var _e = useState(true), loading = _e[0], setLoading = _e[1];
10982
11072
  var _f = useState([]), series = _f[0], setSeries = _f[1];
10983
- var _g = useState(null), selectedRowIndex = _g[0], setSelectedRowIndex = _g[1];
11073
+ var _g = useState(null), selectedRowTagId = _g[0], setSelectedRowTagId = _g[1];
10984
11074
  var _h = useState(null), viewTagForDelete = _h[0], setViewTagForDelete = _h[1];
10985
11075
  var _j = useChartOptions(), chartOptions = _j[0], setChartOptions = _j[1];
10986
11076
  var _k = useState({
@@ -10991,16 +11081,16 @@ var Trending = function (_a) {
10991
11081
  var debounceForFetchingData = useRef(null);
10992
11082
  var _m = useState({ x: 0, y: 0 }), contextMenuPosition = _m[0], setContextMenuPosition = _m[1];
10993
11083
  var _o = useState(false), openContextMenu = _o[0], setOpenContextMenu = _o[1];
10994
- var handleRightClick = function (event, index) {
11084
+ var handleRightClick = function (event, tagId) {
10995
11085
  event.preventDefault();
10996
11086
  event.stopPropagation(); // Prevent the click event from propagating to the document
10997
- if (isNumber(index)) {
10998
- setViewTagForDelete(viewTags[index]);
11087
+ if (isNumber(tagId)) {
11088
+ setViewTagForDelete(viewTags[tagId].viewTag);
10999
11089
  }
11000
11090
  else {
11001
11091
  setViewTagForDelete(null);
11002
11092
  }
11003
- setSelectedRowIndex(index);
11093
+ setSelectedRowTagId(tagId);
11004
11094
  setOpenContextMenu(true);
11005
11095
  setContextMenuPosition({ x: event.clientX, y: event.clientY });
11006
11096
  };
@@ -11010,14 +11100,15 @@ var Trending = function (_a) {
11010
11100
  }
11011
11101
  debounceForFetchingData.current = setTimeout(function () {
11012
11102
  var fetchData = function () { return __awaiter(void 0, void 0, void 0, function () {
11013
- var tagIds, response, error_1;
11103
+ var viewTagsArr, tagIds, response, error_1;
11014
11104
  return __generator(this, function (_a) {
11015
11105
  switch (_a.label) {
11016
11106
  case 0:
11017
11107
  _a.trys.push([0, 3, , 4]);
11018
11108
  setLoading(true);
11019
- if (!(Array.isArray(viewTags) && viewTags.length)) return [3 /*break*/, 2];
11020
- tagIds = viewTags.map(function (tag) { return tag.TagId; });
11109
+ viewTagsArr = Object.values(viewTags).sort(function (a, b) { return b.order - a.order; });
11110
+ tagIds = viewTagsArr.map(function (tag) { return tag.viewTag.TagId; });
11111
+ if (!tagIds.length) return [3 /*break*/, 2];
11021
11112
  return [4 /*yield*/, axios.post("/series?nodeName=null", {
11022
11113
  start: state.timeScopeStart.getTime(),
11023
11114
  end: state.timeScopeEnd.getTime(),
@@ -11042,6 +11133,11 @@ var Trending = function (_a) {
11042
11133
  }); };
11043
11134
  fetchData();
11044
11135
  }, 800);
11136
+ return function () {
11137
+ if (debounceForFetchingData.current) {
11138
+ clearTimeout(debounceForFetchingData.current);
11139
+ }
11140
+ };
11045
11141
  }, [shouldRefetchSeries]);
11046
11142
  return (React__default.createElement(React__default.Fragment, null,
11047
11143
  React__default.createElement(Grid$1, { container: true, style: { width: "95svw", height: "88svh", margin: 0 }, onClick: function () { return setOpenContextMenu(false); } },
@@ -11072,7 +11168,7 @@ var Trending = function (_a) {
11072
11168
  zIndex: 2
11073
11169
  } },
11074
11170
  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 }))),
11171
+ 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
11172
  React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); }, title: "ERROR" })));
11077
11173
  };
11078
11174
 
@@ -11104,12 +11200,16 @@ var TrendingsPage = function (props) {
11104
11200
  case 2:
11105
11201
  viewTagsResp = _a.sent();
11106
11202
  if (viewTagsResp.ok) {
11107
- viewTags = viewTagsResp.data.tables[0].rows.map(function (e) {
11108
- if (isNil$1(e.Color)) {
11109
- e.Color = getRandomColor();
11203
+ viewTags = viewTagsResp.data.tables[0].rows.reduce(function (carr, curr, idx) {
11204
+ if (isNil$1(curr.Color)) {
11205
+ curr.Color = getRandomColor();
11110
11206
  }
11111
- return e;
11112
- });
11207
+ carr[curr.TagId] = {
11208
+ viewTag: curr,
11209
+ order: idx
11210
+ };
11211
+ return carr;
11212
+ }, {});
11113
11213
  setViewTagsAndRefetch(viewTags);
11114
11214
  }
11115
11215
  else {
@@ -11358,5 +11458,5 @@ var areaSelector = /*#__PURE__*/Object.freeze({
11358
11458
  AreaSelector: AreaSelector
11359
11459
  });
11360
11460
 
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 };
11461
+ 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
11462
  //# sourceMappingURL=index.esm.js.map