@dexteel/mesf-core 4.8.6 → 4.9.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
@@ -26,19 +26,20 @@ import { AgGridReact } from 'ag-grid-react';
26
26
  import { withStyles, alpha, makeStyles, createStyles, useTheme } from '@material-ui/core/styles';
27
27
  import Typography$1 from '@material-ui/core/Typography';
28
28
  import { useForm, Controller, get as get$2 } from 'react-hook-form';
29
- import { Alert as Alert$3, TreeView as TreeView$1, TreeItem as TreeItem$1, Autocomplete } from '@material-ui/lab';
29
+ import { Alert as Alert$3, Autocomplete } from '@material-ui/lab';
30
30
  import moment from 'moment';
31
31
  import axios from 'axios';
32
32
  import { _adapters, Chart, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip as Tooltip$1, Legend, TimeScale } from 'chart.js';
33
33
  import zoomPlugin from 'chartjs-plugin-zoom';
34
34
  import Popover from '@material-ui/core/Popover';
35
- import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
35
+ import { isAncestor, Tree, DndProvider as DndProvider$1 } from '@minoru/react-dnd-treeview';
36
36
  import FolderIcon from '@material-ui/icons/Folder';
37
- import InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';
37
+ import InsertChartIcon from '@material-ui/icons/InsertChart';
38
+ import { ArrowRight, ChevronLeft, ChevronRight } from '@material-ui/icons';
39
+ import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
38
40
  import CreateIcon from '@material-ui/icons/Create';
39
41
  import DeleteIcon from '@material-ui/icons/Delete';
40
42
  import LockIcon from '@material-ui/icons/Lock';
41
- import { ArrowRight, ChevronLeft, ChevronRight } from '@material-ui/icons';
42
43
  import SkipNextIcon from '@material-ui/icons/SkipNext';
43
44
  import { Line } from 'react-chartjs-2';
44
45
  import PersonPinCircleIcon from '@material-ui/icons/PersonPinCircle';
@@ -72,7 +73,6 @@ import 'ag-grid-enterprise/styles/ag-grid.css';
72
73
  import 'ag-grid-enterprise/styles/ag-theme-balham.min.css';
73
74
  import 'ag-grid-community/styles/ag-grid.css';
74
75
  import 'ag-grid-community/styles/ag-theme-alpine.css';
75
- import { isAncestor, Tree } from '@minoru/react-dnd-treeview';
76
76
  import ImageIcon from '@material-ui/icons/Image';
77
77
  import ListAltIcon from '@material-ui/icons/ListAlt';
78
78
  import DescriptionIcon from '@material-ui/icons/Description';
@@ -4305,7 +4305,7 @@ var useStyles$l = makeStyles$1(function (theme) { return ({
4305
4305
  opacity: 0.5
4306
4306
  }
4307
4307
  }); });
4308
- var customStyles = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
4308
+ var customStyles$1 = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
4309
4309
  var CustomNode = function (_a) {
4310
4310
  var setContextMenuOver = _a.setContextMenuOver, onDoubleClick = _a.onDoubleClick; _a.testIdPrefix; var isSelected = _a.isSelected, props = __rest(_a, ["setContextMenuOver", "onDoubleClick", "testIdPrefix", "isSelected"]);
4311
4311
  var _c = useConfigurationAssetContext(), openAssets = _c.state.openAssets, setOpenAssets = _c.actions.setOpenAssets;
@@ -4356,7 +4356,7 @@ var CustomNode = function (_a) {
4356
4356
  };
4357
4357
  }, []);
4358
4358
  return (React__default.createElement("div", { className: nodeClasses, style: { paddingInlineStart: indent }, "data-node-id": id, onClick: handleClick, title: "".concat(props.node.id, " - ").concat(props.node.text) },
4359
- React__default.createElement("style", null, customStyles),
4359
+ React__default.createElement("style", null, customStyles$1),
4360
4360
  props.node.droppable ? (React__default.createElement("div", { className: "".concat(classes.arrow, " ").concat(props.isOpen ? classes["arrow.is-open"] : "") },
4361
4361
  React__default.createElement("div", { onClick: handleToggle },
4362
4362
  React__default.createElement(ArrowRight, { "data-testid": "arrow-right-icon-".concat(id) })))) : null,
@@ -4432,7 +4432,7 @@ var useStyles$j = makeStyles$1(function (theme) { return ({
4432
4432
  display: "flex"
4433
4433
  }
4434
4434
  }); });
4435
- var CustomDragPreview = function (props) {
4435
+ var CustomDragPreview$1 = function (props) {
4436
4436
  var _a;
4437
4437
  var classes = useStyles$j();
4438
4438
  var item = props.monitorProps.item;
@@ -5455,7 +5455,7 @@ var AssetViewComponent = function () {
5455
5455
  if (selectedNodes.length > 1) {
5456
5456
  return (React__default.createElement(MultipleDragPreview, { dragSources: selectedNodes }));
5457
5457
  }
5458
- return (React__default.createElement(CustomDragPreview, { monitorProps: monitorProps }));
5458
+ return (React__default.createElement(CustomDragPreview$1, { monitorProps: monitorProps }));
5459
5459
  } })))))),
5460
5460
  React__default.createElement(CreateNewAssetDialog, { show: showCreateNewAssetDialog, onHide: function (shouldUpdate) {
5461
5461
  setShowCreateNewAssetDialog(false);
@@ -9983,275 +9983,42 @@ var ColorPicker = function (_a) {
9983
9983
  } })); })))));
9984
9984
  };
9985
9985
 
9986
- var useTagsTableStyles = makeStyles$1(function (theme) { return ({
9987
- checkbox: {
9988
- '& input[type="checkbox"]': {
9989
- zoom: 1.5
9990
- },
9991
- textAlign: 'center'
9992
- },
9993
- rowHover: {
9994
- '&:hover': {
9995
- backgroundColor: "#f2f2f2"
9996
- }
9997
- },
9998
- topTitles: {
9999
- border: "0.0625rem black solid",
10000
- borderBottom: "none",
10001
- backgroundColor: "#e9ecef"
10002
- },
10003
- bottomTitlesRow: {
10004
- '& th': {
10005
- border: "1px black solid"
10006
- },
10007
- backgroundColor: "#e9ecef"
10008
- },
10009
- doubleInput: {
10010
- padding: "0",
10011
- '& input[type="text"] ': {
10012
- width: "100%",
10013
- height: "17px",
10014
- display: "block",
10015
- margin: "0",
10016
- padding: "0"
10017
- }
10018
- },
10019
- inputCol: {
10020
- width: "11.25rem",
10021
- overflow: 'hidden',
10022
- textOverflow: 'ellipsis',
10023
- whiteSpace: 'nowrap'
10024
- },
10025
- aliasCol: {
10026
- width: "18rem",
10027
- overflow: 'hidden',
10028
- textOverflow: 'ellipsis',
10029
- whiteSpace: 'nowrap'
10030
- },
10031
- autoScale: {
10032
- width: '7.5rem'
10033
- },
10034
- scale: {
10035
- width: '37.5rem',
10036
- padding: "0"
10037
- },
10038
- visible: {
10039
- width: '3.75rem'
10040
- },
10041
- color: {
10042
- width: '4.375rem'
10043
- },
10044
- unit: {
10045
- width: '7.5rem'
10046
- },
10047
- numberInput: {
10048
- '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': {
10049
- '-webkit-appearance': 'none',
10050
- margin: 0
10051
- },
10052
- '&': {
10053
- '-moz-appearance': 'textfield'
9986
+ var getIhPath = function () { return localStorage.getItem('ihPath') || "[mssql2022].[IH_100020].[ih]"; };
9987
+ //tags
9988
+ var getTagsTree = function () { return __awaiter(void 0, void 0, void 0, function () {
9989
+ var apiService, parameters, resp;
9990
+ return __generator(this, function (_a) {
9991
+ switch (_a.label) {
9992
+ case 0:
9993
+ apiService = new MESApiService();
9994
+ parameters = [];
9995
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[GetTagsTree]", parameters)];
9996
+ case 1:
9997
+ resp = _a.sent();
9998
+ return [2 /*return*/, resp];
10054
9999
  }
10055
- },
10056
- xStats: {
10057
- // ...
10058
- },
10059
- dataType: {
10060
- width: '30px',
10061
- height: '30px',
10062
- color: "white",
10063
- display: 'flex',
10064
- justifyContent: 'center',
10065
- alignItems: 'center',
10066
- cursor: 'pointer',
10067
- border: "1px black solid"
10068
- }
10069
- }); });
10070
-
10071
- var TagSelectionModal = function (_a) {
10072
- var isOpen = _a.isOpen; _a.onClose; var onTagSelect = _a.onTagSelect;
10073
- var classes = useTagsTableStyles();
10074
- var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
10075
- var _c = useState(''), error = _c[0], setError = _c[1];
10076
- var _d = useState([]), treeData = _d[0], setTreeData = _d[1];
10077
- var _e = useState([]), expanded = _e[0], setExpanded = _e[1];
10078
- var viewTags = useTrendingContext().state.viewTags;
10079
- var currentColorIndex = useRef(0);
10080
- useEffect(function () {
10081
- var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
10082
- var children;
10083
- return __generator(this, function (_a) {
10084
- switch (_a.label) {
10085
- case 0:
10086
- if (!isOpen) return [3 /*break*/, 2];
10087
- setIsLoading(true);
10088
- return [4 /*yield*/, fetchChildren("root")];
10089
- case 1:
10090
- children = _a.sent();
10091
- setTreeData([
10092
- {
10093
- TagId: null,
10094
- TagName: "root",
10095
- children: children,
10096
- isLoaded: true,
10097
- shortName: "Tags",
10098
- tag: null
10099
- },
10100
- ]);
10101
- setIsLoading(false);
10102
- _a.label = 2;
10103
- case 2: return [2 /*return*/];
10104
- }
10105
- });
10106
- }); };
10107
- loadData();
10108
- }, [isOpen]);
10109
- var getColor = function () {
10110
- var color = tagColors[currentColorIndex.current];
10111
- currentColorIndex.current =
10112
- (currentColorIndex.current + 1) % tagColors.length;
10113
- return color;
10114
- };
10115
- var fetchChildren = function (tagName, depth, maxDepth) {
10116
- if (depth === void 0) { depth = 0; }
10117
- if (maxDepth === void 0) { maxDepth = 3; }
10118
- return __awaiter(void 0, void 0, void 0, function () {
10119
- var response, childrenData, error_1;
10120
- return __generator(this, function (_a) {
10121
- switch (_a.label) {
10122
- case 0:
10123
- // Limiting the recursion depth for safety
10124
- if (depth > maxDepth) {
10125
- return [2 /*return*/, []];
10126
- }
10127
- _a.label = 1;
10128
- case 1:
10129
- _a.trys.push([1, 4, , 5]);
10130
- return [4 /*yield*/, axios.get("/Tag/".concat(tagName, "/children"))];
10131
- case 2:
10132
- response = _a.sent();
10133
- return [4 /*yield*/, Promise.all(response.data.map(function (dbTag) { return __awaiter(void 0, void 0, void 0, function () {
10134
- var children, childTagName;
10135
- return __generator(this, function (_a) {
10136
- switch (_a.label) {
10137
- case 0:
10138
- children = null;
10139
- childTagName = tagName !== "root" ? tagName + "." + dbTag.tagName : dbTag.tagName;
10140
- if (!isNil$1(dbTag.tagType)) return [3 /*break*/, 2];
10141
- return [4 /*yield*/, fetchChildren(childTagName, depth + 1, maxDepth)];
10142
- case 1:
10143
- children = _a.sent();
10144
- _a.label = 2;
10145
- case 2: return [2 /*return*/, {
10146
- TagId: dbTag.tagId,
10147
- TagName: childTagName,
10148
- shortName: dbTag.tagName,
10149
- children: children,
10150
- isLoaded: true,
10151
- tag: {
10152
- TagId: dbTag.tagId,
10153
- TagName: dbTag.tagName,
10154
- Color: dbTag.color || getColor(),
10155
- IsAutoScale: (dbTag.minValue || dbTag.maxValue) ? false : true,
10156
- MinScale: dbTag.minValue,
10157
- MaxScale: dbTag.maxValue,
10158
- IsVisible: true,
10159
- TagType: dbTag.tagType,
10160
- Alias: dbTag.alias,
10161
- Unit: dbTag.unit
10162
- }
10163
- }];
10164
- }
10165
- });
10166
- }); }))];
10167
- case 3:
10168
- childrenData = _a.sent();
10169
- // Flatten the structure if needed or perform other transformations
10170
- // ...
10171
- return [2 /*return*/, childrenData];
10172
- case 4:
10173
- error_1 = _a.sent();
10174
- setError(error_1.message);
10175
- return [2 /*return*/, []];
10176
- case 5: return [2 /*return*/];
10177
- }
10178
- });
10179
- });
10180
- };
10181
- /* I have to get the grandchildren because the toggle action would not be triggered if no children */
10182
- var handleNodeToggle = function (event, nodeIds) { return __awaiter(void 0, void 0, void 0, function () {
10183
- return __generator(this, function (_a) {
10184
- setExpanded(nodeIds);
10185
- return [2 /*return*/];
10186
- });
10187
- }); };
10188
- var handleNodeSelect = function (event, nodeId) { return __awaiter(void 0, void 0, void 0, function () {
10189
- var node, alreadySelected;
10190
- return __generator(this, function (_a) {
10191
- node = findNode(treeData, nodeId);
10192
- if (node === null || node === void 0 ? void 0 : node.TagId) {
10193
- alreadySelected = viewTags.find(function (vt) { return vt.TagId === node.TagId; });
10194
- if (!alreadySelected) {
10195
- onTagSelect(node.tag);
10196
- }
10197
- else {
10198
- setError("".concat(node.TagName, " is already added to the view"));
10000
+ });
10001
+ }); };
10002
+ var changeTagFolderToTag = function (TagId, TagFolderId) { return __awaiter(void 0, void 0, void 0, function () {
10003
+ var apiService, parameters, backendOffset, resp;
10004
+ return __generator(this, function (_a) {
10005
+ switch (_a.label) {
10006
+ case 0:
10007
+ apiService = new MESApiService();
10008
+ parameters = [];
10009
+ backendOffset = 1000000;
10010
+ if (TagFolderId && TagFolderId > backendOffset) {
10011
+ TagFolderId = TagFolderId - backendOffset;
10199
10012
  }
10200
- }
10201
- return [2 /*return*/];
10202
- });
10203
- }); };
10204
- var findNode = function (nodes, tagName) {
10205
- for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
10206
- var node = nodes_1[_i];
10207
- if (node.TagName === tagName) {
10208
- return node;
10209
- }
10210
- else if (node.children) {
10211
- var found = findNode(node.children, tagName);
10212
- if (found)
10213
- return found;
10214
- }
10013
+ parameters.push({ name: "TagId", value: TagId });
10014
+ parameters.push({ name: "TagFolderId", value: TagFolderId });
10015
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[ChangeTagFolderToTag]", parameters)];
10016
+ case 1:
10017
+ resp = _a.sent();
10018
+ return [2 /*return*/, resp];
10215
10019
  }
10216
- return null;
10217
- };
10218
- var renderTree = function (node) {
10219
- var _a;
10220
- return (React__default.createElement(TreeItem$1, { key: node.TagName, nodeId: node.TagName, label: React__default.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
10221
- ((_a = node.tag) === null || _a === void 0 ? void 0 : _a.TagType) && (React__default.createElement("div", { className: classes.dataType, style: {
10222
- backgroundColor: node.tag.TagType === 'A' ? 'blue' : 'red'
10223
- } }, node.tag.TagType)),
10224
- React__default.createElement("div", { style: { paddingLeft: "5px" } }, node.shortName)), endIcon: React__default.createElement(ArrowDropDownIcon, null), icon: node.children && node.children.length > 0 ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertDriveFileIcon, null)) }, node.children && node.children.map(function (child) { return renderTree(child); })));
10225
- };
10226
- return (React__default.createElement(React__default.Fragment, null,
10227
- React__default.createElement("div", { style: {
10228
- display: isOpen ? "block" : "none",
10229
- minHeight: "400px",
10230
- minWidth: "600px"
10231
- } },
10232
- React__default.createElement("div", null, isLoading ? (React__default.createElement(Grid$1, { container: true, justifyContent: "center", alignItems: "center", style: { minHeight: "100px" } },
10233
- React__default.createElement(CircularProgress$1, { size: "2rem" }))) : (React__default.createElement(TreeView$1, { expanded: expanded, onNodeSelect: handleNodeSelect, onNodeToggle: handleNodeToggle }, treeData.map(function (tree) { return renderTree(tree); }))))),
10234
- React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
10235
- };
10236
-
10237
- var AddTagModal = function (_a) {
10238
- var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
10239
- return (React__default.createElement(React__default.Fragment, null,
10240
- React__default.createElement(MesfModal, { open: open, handleClose: handleClose, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Tags' },
10241
- React__default.createElement(MesfModal.Content, null,
10242
- React__default.createElement(Box, null,
10243
- React__default.createElement(Typography, { id: "modal-modal-description" },
10244
- React__default.createElement(TagSelectionModal, { isOpen: open, onClose: function () { return handleClose; }, onTagSelect: onTagSelect })))))));
10245
- };
10246
-
10247
- var ButtonWithLoading = function (_a) {
10248
- var children = _a.children, isLoading = _a.isLoading, props = __rest(_a, ["children", "isLoading"]);
10249
- return (React__default.createElement(Button$1, __assign({}, props, { disabled: isLoading }),
10250
- isLoading && React__default.createElement(CircularProgress$1, { size: "1rem" }),
10251
- children));
10252
- };
10253
-
10254
- var ihPath = localStorage.getItem('ihPath') || "[mssql2022].[IH_100020].[ih]";
10020
+ });
10021
+ }); };
10255
10022
  var saveTagDefaults = function (TagId, Alias, Color, MinScale, MaxScale, Unit) { return __awaiter(void 0, void 0, void 0, function () {
10256
10023
  var apiService, parameters, resp;
10257
10024
  return __generator(this, function (_a) {
@@ -10265,7 +10032,7 @@ var saveTagDefaults = function (TagId, Alias, Color, MinScale, MaxScale, Unit) {
10265
10032
  parameters.push({ name: "MinScale", value: MinScale });
10266
10033
  parameters.push({ name: "MaxScale", value: MaxScale });
10267
10034
  parameters.push({ name: "Unit", value: Unit });
10268
- return [4 /*yield*/, apiService.callV2(ihPath + ".[SaveTagDefaults]", parameters)];
10035
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[SaveTagDefaults]", parameters)];
10269
10036
  case 1:
10270
10037
  resp = _a.sent();
10271
10038
  return [2 /*return*/, resp];
@@ -10281,7 +10048,7 @@ var getViews = function (Search) { return __awaiter(void 0, void 0, void 0, func
10281
10048
  apiService = new MESApiService();
10282
10049
  parameters = [];
10283
10050
  parameters.push({ name: "Search", value: Search });
10284
- return [4 /*yield*/, apiService.callV2(ihPath + ".[GetViews]", parameters)];
10051
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[GetViews]", parameters)];
10285
10052
  case 1:
10286
10053
  resp = _a.sent();
10287
10054
  return [2 /*return*/, resp];
@@ -10298,7 +10065,7 @@ var upsertView = function (ViewId, ViewName, isPublic) { return __awaiter(void 0
10298
10065
  parameters.push({ name: "ViewId", value: ViewId });
10299
10066
  parameters.push({ name: "ViewName", value: ViewName });
10300
10067
  parameters.push({ name: "isPublic", value: isPublic });
10301
- return [4 /*yield*/, apiService.callV2(ihPath + ".[UpsertView]", parameters)];
10068
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[UpsertView]", parameters)];
10302
10069
  case 1:
10303
10070
  resp = _a.sent();
10304
10071
  return [2 /*return*/, resp];
@@ -10313,7 +10080,7 @@ var deleteView = function (ViewId) { return __awaiter(void 0, void 0, void 0, fu
10313
10080
  apiService = new MESApiService();
10314
10081
  parameters = [];
10315
10082
  parameters.push({ name: "ViewId", value: ViewId });
10316
- return [4 /*yield*/, apiService.callV2(ihPath + ".[DeleteView]", parameters)];
10083
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[DeleteView]", parameters)];
10317
10084
  case 1:
10318
10085
  resp = _a.sent();
10319
10086
  return [2 /*return*/, resp];
@@ -10329,7 +10096,7 @@ var getViewTags = function (ViewId) { return __awaiter(void 0, void 0, void 0, f
10329
10096
  apiService = new MESApiService();
10330
10097
  parameters = [];
10331
10098
  parameters.push({ name: "ViewId", value: ViewId });
10332
- return [4 /*yield*/, apiService.callV2(ihPath + ".[GetViewTags]", parameters)];
10099
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[GetViewTags]", parameters)];
10333
10100
  case 1:
10334
10101
  resp = _a.sent();
10335
10102
  return [2 /*return*/, resp];
@@ -10351,7 +10118,7 @@ var upsertViewTag = function (ViewId, TagId, Color, MinScale, MaxScale, IsVisibl
10351
10118
  parameters.push({ name: "IsVisible", value: IsVisible });
10352
10119
  parameters.push({ name: "IsAutoScale", value: IsAutoScale });
10353
10120
  parameters.push({ name: "Unit", value: Unit });
10354
- return [4 /*yield*/, apiService.callV2(ihPath + ".[UpsertViewTag]", parameters)];
10121
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[UpsertViewTag]", parameters)];
10355
10122
  case 1:
10356
10123
  resp = _a.sent();
10357
10124
  return [2 /*return*/, resp];
@@ -10366,7 +10133,7 @@ var deleteAllViewTagsFromView = function (ViewId) { return __awaiter(void 0, voi
10366
10133
  apiService = new MESApiService();
10367
10134
  parameters = [];
10368
10135
  parameters.push({ name: "ViewId", value: ViewId });
10369
- return [4 /*yield*/, apiService.callV2(ihPath + ".[DeleteAllViewTagsFromView]", parameters)];
10136
+ return [4 /*yield*/, apiService.callV2(getIhPath() + ".[DeleteAllViewTagsFromView]", parameters)];
10370
10137
  case 1:
10371
10138
  resp = _a.sent();
10372
10139
  return [2 /*return*/, resp];
@@ -10374,6 +10141,279 @@ var deleteAllViewTagsFromView = function (ViewId) { return __awaiter(void 0, voi
10374
10141
  });
10375
10142
  }); };
10376
10143
 
10144
+ var useTagsTreeModalStyles = makeStyles$1(function (theme) { return ({
10145
+ dataTypeOfTree: {
10146
+ width: '25px',
10147
+ height: '25px',
10148
+ color: "white",
10149
+ display: 'flex',
10150
+ justifyContent: 'center',
10151
+ alignItems: 'center',
10152
+ cursor: 'pointer',
10153
+ border: "1px black solid"
10154
+ },
10155
+ root: {
10156
+ alignItems: "center",
10157
+ display: "flex",
10158
+ height: "32px"
10159
+ },
10160
+ customNodeRoot: {
10161
+ listStyleType: "none",
10162
+ margin: 0,
10163
+ padding: 0,
10164
+ '&:hover': {
10165
+ backgroundColor: "#f2f2f2"
10166
+ }
10167
+ },
10168
+ arrow: {
10169
+ alignItems: "center",
10170
+ cursor: "pointer",
10171
+ display: "flex",
10172
+ height: "24px",
10173
+ justifyContent: "center",
10174
+ width: "24px",
10175
+ transition: "transform linear 0.1s",
10176
+ transform: "rotate(0deg)"
10177
+ },
10178
+ "arrow > div": {
10179
+ alignItems: "center",
10180
+ display: "flex"
10181
+ },
10182
+ "arrow.is-open": {
10183
+ transform: "rotate(90deg)"
10184
+ },
10185
+ filetype: {
10186
+ display: "flex"
10187
+ },
10188
+ label: {
10189
+ paddingInlineStart: "8px"
10190
+ },
10191
+ selected: {
10192
+ backgroundColor: "#e8f0fe"
10193
+ },
10194
+ dragging: {
10195
+ opacity: 0.5
10196
+ },
10197
+ contextMenu: {
10198
+ fontSize: "14px",
10199
+ backgroundColor: "#fff",
10200
+ borderRadius: "2px",
10201
+ padding: "5px 0 5px 0",
10202
+ width: "150px",
10203
+ height: "auto",
10204
+ margin: "0",
10205
+ position: "fixed",
10206
+ listStyle: "none",
10207
+ boxShadow: "0 0 20px 0 #ccc"
10208
+ },
10209
+ storyRoot: {
10210
+ display: "grid",
10211
+ height: "100%",
10212
+ gridTemplateRows: "auto 1fr",
10213
+ listStyleType: "none !important"
10214
+ },
10215
+ assetRoot: {
10216
+ boxSizing: "border-box",
10217
+ height: "100%",
10218
+ padding: "32px"
10219
+ },
10220
+ dropTarget: {
10221
+ boxShadow: "0 0 0 1px #1967d2 inset",
10222
+ borderRadius: '1px',
10223
+ backgroundColor: '#DAE4F2'
10224
+ },
10225
+ customDragRoot: {
10226
+ alignItems: "center",
10227
+ backgroundColor: "#1967d2",
10228
+ borderRadius: "4px",
10229
+ boxShadow: " 0 12px 24px -6px rgba(0, 0, 0, .25); 0 0 0 1px rgba(0, 0, 0, .08)",
10230
+ color: "#fff",
10231
+ display: "inline-grid",
10232
+ fontSize: "14px",
10233
+ gap: "8px",
10234
+ gridTemplateColumns: "auto auto",
10235
+ padding: "4px 8px",
10236
+ pointerEvents: "none"
10237
+ },
10238
+ icon: {
10239
+ alignItems: "center",
10240
+ display: "flex"
10241
+ },
10242
+ customDragLabel: {
10243
+ alignItems: "center",
10244
+ display: "flex"
10245
+ }
10246
+ }); });
10247
+
10248
+ function buildTagsTreeV2(data) {
10249
+ var tagsForTree = [];
10250
+ data.forEach(function (el) {
10251
+ var tagForTree = {
10252
+ id: el.TagId,
10253
+ parent: (el.ParentTagId || 0),
10254
+ text: el.TagName,
10255
+ data: el,
10256
+ droppable: el.TagTypeCode === 'F'
10257
+ };
10258
+ return tagsForTree.push(tagForTree);
10259
+ });
10260
+ return tagsForTree;
10261
+ }
10262
+
10263
+ var CustomDragPreview = function (props) {
10264
+ var _a, _b, _c;
10265
+ var classes = useTagsTreeModalStyles();
10266
+ var item = props.monitorProps.item;
10267
+ var isFolder = ((_a = item.data) === null || _a === void 0 ? void 0 : _a.TagTypeCode) === 'F' ? true : false;
10268
+ return (React__default.createElement("div", { className: classes.customDragRoot },
10269
+ React__default.createElement("div", { className: classes.icon }, isFolder ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' }))),
10270
+ 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))));
10271
+ };
10272
+
10273
+ var customStyles = "\n ul, ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n";
10274
+ var TagFolderCustomNode = function (_a) {
10275
+ var _b, _c, _d, _e, _f, _g, _h;
10276
+ var node = _a.node, _j = _a.options, depth = _j.depth, isOpen = _j.isOpen, onToggle = _j.onToggle, options = _a.options, setOpenTagFolders = _a.setOpenTagFolders, openTagFolders = _a.openTagFolders, handleSelect = _a.handleSelect, isSelected = _a.isSelected;
10277
+ var classes = useTagsTreeModalStyles();
10278
+ var nodeClasses = "".concat(classes.customNodeRoot, " ").concat(classes.root, " ").concat(isSelected ? classes.selected : "");
10279
+ var onClickHandler = function () {
10280
+ var _a;
10281
+ if (options.hasChild) {
10282
+ if (openTagFolders[node.id]) {
10283
+ var newOpenTagFolders = __assign({}, openTagFolders);
10284
+ delete newOpenTagFolders[node.id];
10285
+ setOpenTagFolders(newOpenTagFolders);
10286
+ }
10287
+ else {
10288
+ setOpenTagFolders(__assign(__assign({}, openTagFolders), (_a = {}, _a[node.id] = node.id, _a)));
10289
+ }
10290
+ onToggle();
10291
+ return;
10292
+ }
10293
+ if (!options.hasChild) {
10294
+ handleSelect(node);
10295
+ }
10296
+ };
10297
+ return (React__default.createElement("div", { className: nodeClasses, onClick: onClickHandler, style: { paddingLeft: depth * 20, cursor: "pointer" } },
10298
+ React__default.createElement("style", null, customStyles),
10299
+ React__default.createElement(React__default.Fragment, null,
10300
+ options.hasChild ? (React__default.createElement("div", null, isOpen ? React__default.createElement(ArrowDropDownIcon, null) : React__default.createElement(ArrowRight, null)))
10301
+ : null,
10302
+ React__default.createElement("div", null, options.hasChild ? (React__default.createElement(FolderIcon, null)) : (React__default.createElement(InsertChartIcon, { fontSize: 'small' })))),
10303
+ ((_b = node.data) === null || _b === void 0 ? void 0 : _b.TagName) &&
10304
+ React__default.createElement(React__default.Fragment, null,
10305
+ ((_c = node.data) === null || _c === void 0 ? void 0 : _c.TagTypeCode) && ((_d = node.data) === null || _d === void 0 ? void 0 : _d.TagTypeCode) !== 'F' && (React__default.createElement("div", { className: classes.dataTypeOfTree, style: {
10306
+ backgroundColor: ((_e = node.data) === null || _e === void 0 ? void 0 : _e.TagTypeCode) === 'A' ? 'blue' : 'red',
10307
+ margin: "0 5px"
10308
+ } }, (_f = node.data) === null || _f === void 0 ? void 0 : _f.TagTypeCode)),
10309
+ React__default.createElement(Tooltip, { title: node.data.TagName, placement: "top", arrow: true },
10310
+ React__default.createElement(Typography, { variant: "body2" }, ((_g = node.data) === null || _g === void 0 ? void 0 : _g.Alias) || ((_h = node.data) === null || _h === void 0 ? void 0 : _h.TagName))))));
10311
+ };
10312
+
10313
+ var NewTagSelectionModal = function (_a) {
10314
+ var isOpen = _a.isOpen; _a.onClose; var onTagSelect = _a.onTagSelect;
10315
+ var classes = useTagsTreeModalStyles();
10316
+ var _b = useState(true), isLoading = _b[0], setIsLoading = _b[1];
10317
+ var _c = useState(''), error = _c[0], setError = _c[1];
10318
+ var _d = useState([]), tagsTreeData = _d[0], setTagsTreeData = _d[1];
10319
+ var _e = useState({}), openTagFolders = _e[0], setOpenTagFolders = _e[1];
10320
+ var _f = useState([]), selectedNodes = _f[0]; _f[1];
10321
+ useTrendingContext().state.viewTags;
10322
+ var expanded = useMemo(function () {
10323
+ return Object.keys(openTagFolders).map(function (el) { return parseInt(el); });
10324
+ }, [openTagFolders]);
10325
+ useEffect(function () {
10326
+ var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
10327
+ var tagsTree, rows, tree;
10328
+ return __generator(this, function (_a) {
10329
+ switch (_a.label) {
10330
+ case 0:
10331
+ if (!isOpen) return [3 /*break*/, 2];
10332
+ setIsLoading(true);
10333
+ return [4 /*yield*/, getTagsTree()];
10334
+ case 1:
10335
+ tagsTree = _a.sent();
10336
+ if (tagsTree.ok) {
10337
+ rows = tagsTree.data.tables[0].rows;
10338
+ tree = buildTagsTreeV2(rows);
10339
+ setTagsTreeData(tree);
10340
+ }
10341
+ setIsLoading(false);
10342
+ _a.label = 2;
10343
+ case 2: return [2 /*return*/];
10344
+ }
10345
+ });
10346
+ }); };
10347
+ loadData();
10348
+ }, [isOpen]);
10349
+ var handleDrop = function (tree, options) { return __awaiter(void 0, void 0, void 0, function () {
10350
+ var tagId, newFolderId, newTree;
10351
+ return __generator(this, function (_a) {
10352
+ switch (_a.label) {
10353
+ case 0:
10354
+ if (!(options.dragSource && options.dropTarget)) return [3 /*break*/, 2];
10355
+ setIsLoading(true);
10356
+ tagId = Number(options.dragSource.id);
10357
+ newFolderId = Number(options.dropTarget.id);
10358
+ if (tagId === newFolderId) {
10359
+ setIsLoading(false);
10360
+ return [2 /*return*/];
10361
+ }
10362
+ return [4 /*yield*/, changeTagFolderToTag(tagId, newFolderId)];
10363
+ case 1:
10364
+ newTree = _a.sent();
10365
+ setTagsTreeData(tree);
10366
+ setIsLoading(false);
10367
+ if (!newTree.ok) {
10368
+ setError(newTree.message);
10369
+ }
10370
+ _a.label = 2;
10371
+ case 2: return [2 /*return*/];
10372
+ }
10373
+ });
10374
+ }); };
10375
+ var handleClick = function (node) {
10376
+ if (node.data) {
10377
+ onTagSelect(node.data);
10378
+ }
10379
+ };
10380
+ return (React__default.createElement(React__default.Fragment, null,
10381
+ React__default.createElement("div", { style: { display: isOpen ? "block" : "none", minHeight: "700px", minWidth: "800px" } },
10382
+ React__default.createElement("div", { style: { overflowY: 'auto', maxHeight: '700px' } }, isLoading ? (React__default.createElement(Grid$1, { container: true, justifyContent: "center", alignItems: "center", style: { minHeight: "100px" } },
10383
+ React__default.createElement(CircularProgress$1, { size: "2rem" }))) : (React__default.createElement(DndProvider$1, { backend: HTML5Backend },
10384
+ React__default.createElement(Tree, { classes: {
10385
+ root: classes.assetRoot,
10386
+ dropTarget: classes.dropTarget
10387
+ }, initialOpen: expanded, tree: tagsTreeData, rootId: 0, onDrop: handleDrop, canDrop: function (tag, options) {
10388
+ return !selectedNodes.some(function (selectedNode) {
10389
+ return Number(selectedNode.id) === Number(options.dropTargetId);
10390
+ });
10391
+ }, render: function (node, options) {
10392
+ var selected = selectedNodes.some(function (selectedNode) { return Number(selectedNode.id) === Number(node.id); });
10393
+ return (React__default.createElement(TagFolderCustomNode, { node: node, options: options, isSelected: selected, openTagFolders: openTagFolders, setOpenTagFolders: setOpenTagFolders, handleSelect: handleClick }));
10394
+ }, dragPreviewRender: function (monitorProps) { return (React__default.createElement(CustomDragPreview, { monitorProps: monitorProps })
10395
+ // <div>{monitorProps.item.data?.TagName}</div>
10396
+ ); } }))))),
10397
+ React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(''); } })));
10398
+ };
10399
+
10400
+ var TagsTreeModal = function (_a) {
10401
+ var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
10402
+ return (React__default.createElement(React__default.Fragment, null,
10403
+ React__default.createElement(MesfModal, { open: open, handleClose: handleClose, maxWidth: "lg", "aria-labelledby": "modal-modal-title", "aria-describedby": "modal-modal-description", title: 'Tags' },
10404
+ React__default.createElement(MesfModal.Content, null,
10405
+ React__default.createElement(Box, null,
10406
+ React__default.createElement(Typography, { id: "modal-modal-description" },
10407
+ React__default.createElement(NewTagSelectionModal, { isOpen: open, onClose: function () { return handleClose; }, onTagSelect: onTagSelect })))))));
10408
+ };
10409
+
10410
+ var ButtonWithLoading = function (_a) {
10411
+ var children = _a.children, isLoading = _a.isLoading, props = __rest(_a, ["children", "isLoading"]);
10412
+ return (React__default.createElement(Button$1, __assign({}, props, { disabled: isLoading }),
10413
+ isLoading && React__default.createElement(CircularProgress$1, { size: "1rem" }),
10414
+ children));
10415
+ };
10416
+
10377
10417
  var useTrendingStyles = makeStyles$1(function (theme) { return ({
10378
10418
  datetimePicker: {
10379
10419
  alignItems: "center",
@@ -10831,6 +10871,91 @@ var useTagsDataTable = function (_a) {
10831
10871
  }, [viewTags, chartData, cursorData]);
10832
10872
  };
10833
10873
 
10874
+ var useTagsTableStyles = makeStyles$1(function (theme) { return ({
10875
+ checkbox: {
10876
+ '& input[type="checkbox"]': {
10877
+ zoom: 1.5
10878
+ },
10879
+ textAlign: 'center'
10880
+ },
10881
+ rowHover: {
10882
+ '&:hover': {
10883
+ backgroundColor: "#f2f2f2"
10884
+ }
10885
+ },
10886
+ topTitles: {
10887
+ border: "0.0625rem black solid",
10888
+ borderBottom: "none",
10889
+ backgroundColor: "#e9ecef"
10890
+ },
10891
+ bottomTitlesRow: {
10892
+ '& th': {
10893
+ border: "1px black solid"
10894
+ },
10895
+ backgroundColor: "#e9ecef"
10896
+ },
10897
+ doubleInput: {
10898
+ padding: "0",
10899
+ '& input[type="text"] ': {
10900
+ width: "100%",
10901
+ height: "17px",
10902
+ display: "block",
10903
+ margin: "0",
10904
+ padding: "0"
10905
+ }
10906
+ },
10907
+ inputCol: {
10908
+ width: "11.25rem",
10909
+ overflow: 'hidden',
10910
+ textOverflow: 'ellipsis',
10911
+ whiteSpace: 'nowrap'
10912
+ },
10913
+ aliasCol: {
10914
+ width: "18rem",
10915
+ overflow: 'hidden',
10916
+ textOverflow: 'ellipsis',
10917
+ whiteSpace: 'nowrap'
10918
+ },
10919
+ autoScale: {
10920
+ width: '7.5rem'
10921
+ },
10922
+ scale: {
10923
+ width: '37.5rem',
10924
+ padding: "0"
10925
+ },
10926
+ visible: {
10927
+ width: '3.75rem'
10928
+ },
10929
+ color: {
10930
+ width: '4.375rem'
10931
+ },
10932
+ unit: {
10933
+ width: '7.5rem'
10934
+ },
10935
+ numberInput: {
10936
+ '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': {
10937
+ '-webkit-appearance': 'none',
10938
+ margin: 0
10939
+ },
10940
+ '&': {
10941
+ '-moz-appearance': 'textfield'
10942
+ }
10943
+ },
10944
+ xStats: {
10945
+ // ...
10946
+ },
10947
+ dataType: {
10948
+ width: '30px',
10949
+ height: '30px',
10950
+ color: "white",
10951
+ display: 'flex',
10952
+ justifyContent: 'center',
10953
+ alignItems: 'center',
10954
+ cursor: 'pointer',
10955
+ border: "1px black solid"
10956
+ }
10957
+ }); });
10958
+
10834
10959
  var formatTimeDiffWithMs = function (start, end) {
10835
10960
  // Calculate total difference in milliseconds
10836
10961
  var totalMilliseconds = end - start;
@@ -10876,7 +11001,7 @@ var TableComponent = function (_a) {
10876
11001
  var _g = useState(false); _g[0]; var setIsLoading = _g[1];
10877
11002
  var _h = useState(null), viewTagForDelete = _h[0], setViewTagForDelete = _h[1];
10878
11003
  var _j = useState(null), selectedRowIndex = _j[0], setSelectedRowIndex = _j[1];
10879
- var _k = useState(false), addTagModalOpen = _k[0], setAddTagModalOpen = _k[1];
11004
+ var _k = useState(false), tagsTreeModalOpen = _k[0], setTagsTreeModalOpen = _k[1];
10880
11005
  var _l = useState(false), saveAsViewModalOpen = _l[0], setSaveAsViewModalOpen = _l[1];
10881
11006
  var _m = useState(false), loadViewOpen = _m[0], setLoadViewOpen = _m[1];
10882
11007
  var _o = useState(''), snackbarMessage = _o[0], setSnackbarMessage = _o[1];
@@ -10915,7 +11040,7 @@ var TableComponent = function (_a) {
10915
11040
  var handleAddTag = function (newTag) {
10916
11041
  var newArr = __spreadArray([], viewTags, true);
10917
11042
  if (newTag) {
10918
- newArr.push(newTag);
11043
+ newArr.push(__assign(__assign({}, newTag), { IsVisible: true }));
10919
11044
  setViewTagsAndRefetch(newArr);
10920
11045
  }
10921
11046
  };
@@ -10924,7 +11049,7 @@ var TableComponent = function (_a) {
10924
11049
  handleAutoScaleChange(tagId, checked);
10925
11050
  }
10926
11051
  };
10927
- var handleClose = function () { return setAddTagModalOpen(false); };
11052
+ var handleClose = function () { return setTagsTreeModalOpen(false); };
10928
11053
  var ContextMenu = function (_a) {
10929
11054
  var x = _a.x, y = _a.y, options = _a.options;
10930
11055
  var handleContextMenuClick = function (e) {
@@ -10937,7 +11062,7 @@ var TableComponent = function (_a) {
10937
11062
  var _p = useState({ x: 0, y: 0 }), contextMenuPosition = _p[0], setContextMenuPosition = _p[1];
10938
11063
  var contextMenuOptions = [
10939
11064
  { id: 'delete', label: 'Remove Tag', onClick: function () { return handleDelete(); } },
10940
- { id: 'add', label: 'Add Tag', onClick: function () { return setAddTagModalOpen(true); } },
11065
+ { id: 'add', label: 'Tags Tree', onClick: function () { return setTagsTreeModalOpen(true); } },
10941
11066
  { id: 'saveDefault', label: 'Save Default To Tag', onClick: function () { return handleSaveDefaultToTag(); } },
10942
11067
  { id: 'saveView', label: 'Save View', onClick: function () { return handleSaveView(); } },
10943
11068
  { id: 'saveViewAs', label: 'Save View as', onClick: function () { return setSaveAsViewModalOpen(true); } },
@@ -11163,7 +11288,7 @@ var TableComponent = function (_a) {
11163
11288
  React__default.createElement("td", { className: classes.aliasCol },
11164
11289
  React__default.createElement(Tooltip, { title: tag.TagName, placement: "top", arrow: true, interactive: true, enterDelay: 500 },
11165
11290
  React__default.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
11166
- React__default.createElement("div", { className: classes.dataType, style: { backgroundColor: tag.TagType === "Real" || tag.TagType === "A" ? "blue" : "red" } }, tag.TagType === "Real" || tag.TagType === "A" ? "A" : "D"),
11291
+ React__default.createElement("div", { className: classes.dataType, style: { backgroundColor: tag.TagTypeCode === "Real" || tag.TagTypeCode === "A" ? "blue" : ("red") } }, tag.TagTypeCode === "Real" || tag.TagTypeCode === "A" ? "A" : "D"),
11167
11292
  React__default.createElement("input", { type: "text", style: { width: '100%' }, value: tag.Alias || tag.TagName, onFocus: function (e) { return e.target.select(); }, onChange: function (e) {
11168
11293
  var newAlias = e.target.value;
11169
11294
  handleChangeAlias(tag.TagId, newAlias);
@@ -11215,11 +11340,11 @@ var TableComponent = function (_a) {
11215
11340
  }) : React__default.createElement("div", { style: { padding: '2rem' } },
11216
11341
  React__default.createElement("div", { style: { padding: "1rem" } }, "No tag view detected. "),
11217
11342
  React__default.createElement("div", { style: { padding: "1rem" } },
11218
- React__default.createElement(Button$1, { onClick: function () { return setAddTagModalOpen(true); }, variant: 'contained', color: 'primary' }, " Add tag")),
11343
+ React__default.createElement(Button$1, { onClick: function () { return setTagsTreeModalOpen(true); }, variant: 'contained', color: 'primary' }, " Add tag")),
11219
11344
  React__default.createElement("div", null,
11220
11345
  React__default.createElement(Button$1, { onClick: function () { return setLoadViewOpen(true); }, variant: 'outlined', color: 'primary' }, " Load view"))))))),
11221
11346
  selectedRowIndex !== null && (React__default.createElement(ContextMenu, { x: contextMenuPosition.x, y: contextMenuPosition.y, options: contextMenuOptions })),
11222
- React__default.createElement(AddTagModal, { open: addTagModalOpen, handleClose: handleClose, onTagSelect: handleTagSelect }),
11347
+ React__default.createElement(TagsTreeModal, { open: tagsTreeModalOpen, handleClose: handleClose, onTagSelect: handleTagSelect }),
11223
11348
  React__default.createElement(SaveAsViewModal, { open: saveAsViewModalOpen, handleClose: function (shouldUpdate) {
11224
11349
  setSaveAsViewModalOpen(false);
11225
11350
  if (shouldUpdate)