@dexteel/mesf-core 7.7.0 → 7.8.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/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/index.esm.js +195 -70
- package/dist/index.esm.js.map +1 -1
- package/dist/pages/trendings/components/chart/repository/TrendingRepository.d.ts +6 -1
- package/dist/pages/trendings-v2/components/chart/utils/LocalStorageUtils.d.ts +4 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [7.8.0](https://github.com/dexteel/mesf-core-frontend/compare/@dexteel/mesf-core-v7.7.0...@dexteel/mesf-core-v7.8.0) (2025-12-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **Trendings V2:** auto-scroll, select, and toast on tag search result click in Tags Tree V2 ([5b869fb](https://github.com/dexteel/mesf-core-frontend/commit/5b869fb6ef38b7f4f7ad8e9b8c101db774970b52))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **Trendings V2:** Fix wiping of views when saving ([33ca2d4](https://github.com/dexteel/mesf-core-frontend/commit/33ca2d413b4adddc48692f93eb1f3804339a9bc3))
|
|
14
|
+
|
|
3
15
|
## [7.7.0](https://github.com/dexteel/mesf-core-frontend/compare/@dexteel/mesf-core-v7.6.0...@dexteel/mesf-core-v7.7.0) (2025-12-22)
|
|
4
16
|
|
|
5
17
|
|
package/dist/index.esm.js
CHANGED
|
@@ -12062,7 +12062,7 @@ var getViewTags = function (ViewId) { return __awaiter(void 0, void 0, void 0, f
|
|
|
12062
12062
|
}); };
|
|
12063
12063
|
var upsertViewTag = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
12064
12064
|
var apiService, parameters, resp;
|
|
12065
|
-
var viewId = _b.viewId, tagId = _b.tagId, color = _b.color, minScale = _b.minScale, maxScale = _b.maxScale, isVisible = _b.isVisible, isAutoScale = _b.isAutoScale, unit = _b.unit;
|
|
12065
|
+
var viewId = _b.viewId, tagId = _b.tagId, color = _b.color, minScale = _b.minScale, maxScale = _b.maxScale, isVisible = _b.isVisible, isAutoScale = _b.isAutoScale, unit = _b.unit; _b.order; _b.alias; _b.tagType; _b.sourceTagId; _b.bitIndex;
|
|
12066
12066
|
return __generator(this, function (_c) {
|
|
12067
12067
|
switch (_c.label) {
|
|
12068
12068
|
case 0:
|
|
@@ -12158,6 +12158,37 @@ var ConfirmationDialogRaw = function (_a) {
|
|
|
12158
12158
|
React__default.createElement(Button, { variant: "contained", size: "small", color: "primary", onClick: handleOk }, "Ok")))));
|
|
12159
12159
|
};
|
|
12160
12160
|
|
|
12161
|
+
var STORAGE_PREFIX = "mesf_trending_view_v2_";
|
|
12162
|
+
var saveViewToLocal = function (viewId, viewTags) {
|
|
12163
|
+
try {
|
|
12164
|
+
var key = "".concat(STORAGE_PREFIX).concat(viewId);
|
|
12165
|
+
localStorage.setItem(key, JSON.stringify(viewTags));
|
|
12166
|
+
}
|
|
12167
|
+
catch (e) {
|
|
12168
|
+
console.error("Failed to save view to local storage", e);
|
|
12169
|
+
}
|
|
12170
|
+
};
|
|
12171
|
+
var getViewFromLocal = function (viewId) {
|
|
12172
|
+
try {
|
|
12173
|
+
var key = "".concat(STORAGE_PREFIX).concat(viewId);
|
|
12174
|
+
var data = localStorage.getItem(key);
|
|
12175
|
+
return data ? JSON.parse(data) : null;
|
|
12176
|
+
}
|
|
12177
|
+
catch (e) {
|
|
12178
|
+
console.error("Failed to load view from local storage", e);
|
|
12179
|
+
return null;
|
|
12180
|
+
}
|
|
12181
|
+
};
|
|
12182
|
+
var removeViewFromLocal = function (viewId) {
|
|
12183
|
+
try {
|
|
12184
|
+
var key = "".concat(STORAGE_PREFIX).concat(viewId);
|
|
12185
|
+
localStorage.removeItem(key);
|
|
12186
|
+
}
|
|
12187
|
+
catch (e) {
|
|
12188
|
+
console.error("Failed to remove view from local storage", e);
|
|
12189
|
+
}
|
|
12190
|
+
};
|
|
12191
|
+
|
|
12161
12192
|
var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
12162
12193
|
var _b, _c, _d;
|
|
12163
12194
|
var open = _a.open, mode = _a.mode, handleClose = _a.handleClose, view = _a.view;
|
|
@@ -12195,7 +12226,7 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
|
12195
12226
|
};
|
|
12196
12227
|
var updateViewTag = useMutation({
|
|
12197
12228
|
mutationFn: function (_a) {
|
|
12198
|
-
var viewId = _a.viewId, tagId = _a.tagId, color = _a.color, minScale = _a.minScale, maxScale = _a.maxScale, isVisible = _a.isVisible, isAutoScale = _a.isAutoScale, unit = _a.unit;
|
|
12229
|
+
var viewId = _a.viewId, tagId = _a.tagId, color = _a.color, minScale = _a.minScale, maxScale = _a.maxScale, isVisible = _a.isVisible, isAutoScale = _a.isAutoScale, unit = _a.unit, order = _a.order, alias = _a.alias, tagType = _a.tagType, sourceTagId = _a.sourceTagId, bitIndex = _a.bitIndex;
|
|
12199
12230
|
return upsertViewTag({
|
|
12200
12231
|
viewId: viewId,
|
|
12201
12232
|
tagId: tagId,
|
|
@@ -12205,6 +12236,11 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
|
12205
12236
|
isVisible: isVisible,
|
|
12206
12237
|
isAutoScale: isAutoScale,
|
|
12207
12238
|
unit: unit,
|
|
12239
|
+
order: order,
|
|
12240
|
+
alias: alias,
|
|
12241
|
+
tagType: tagType,
|
|
12242
|
+
sourceTagId: sourceTagId,
|
|
12243
|
+
bitIndex: bitIndex,
|
|
12208
12244
|
});
|
|
12209
12245
|
},
|
|
12210
12246
|
onError: function (error) {
|
|
@@ -12217,6 +12253,12 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
|
12217
12253
|
return __generator(this, function (_a) {
|
|
12218
12254
|
switch (_a.label) {
|
|
12219
12255
|
case 0:
|
|
12256
|
+
if (view === null || view === void 0 ? void 0 : view.ViewId) {
|
|
12257
|
+
removeViewFromLocal(view.ViewId);
|
|
12258
|
+
}
|
|
12259
|
+
else if (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) {
|
|
12260
|
+
removeViewFromLocal(viewSelected.ViewId);
|
|
12261
|
+
}
|
|
12220
12262
|
setSnackbarMessage("The view was deleted successfully");
|
|
12221
12263
|
setSnackbarOpen(true);
|
|
12222
12264
|
return [4 /*yield*/, queryClient.invalidateQueries({ queryKey: ["views-v2"] })];
|
|
@@ -12239,31 +12281,43 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
|
12239
12281
|
});
|
|
12240
12282
|
}); },
|
|
12241
12283
|
onSuccess: function (viewId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
12242
|
-
var results, failed;
|
|
12284
|
+
var backendTags, results, failed;
|
|
12243
12285
|
return __generator(this, function (_a) {
|
|
12244
12286
|
switch (_a.label) {
|
|
12245
|
-
case 0:
|
|
12246
|
-
|
|
12247
|
-
|
|
12248
|
-
|
|
12249
|
-
|
|
12250
|
-
|
|
12251
|
-
|
|
12252
|
-
|
|
12253
|
-
|
|
12254
|
-
|
|
12255
|
-
|
|
12256
|
-
|
|
12257
|
-
|
|
12258
|
-
|
|
12259
|
-
|
|
12260
|
-
|
|
12261
|
-
|
|
12262
|
-
|
|
12263
|
-
|
|
12264
|
-
|
|
12265
|
-
|
|
12266
|
-
|
|
12287
|
+
case 0:
|
|
12288
|
+
// Save complete state to local storage (metadata + virtual tags)
|
|
12289
|
+
saveViewToLocal(viewId, viewTags);
|
|
12290
|
+
backendTags = Object.values(viewTags).filter(function (_a) {
|
|
12291
|
+
var viewTag = _a.viewTag;
|
|
12292
|
+
return !viewTag.IsBitExtracted;
|
|
12293
|
+
});
|
|
12294
|
+
return [4 /*yield*/, Promise.allSettled(backendTags
|
|
12295
|
+
.sort(function (a, b) { return a.order - b.order; })
|
|
12296
|
+
.map(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
12297
|
+
var viewTag = _b.viewTag, order = _b.order;
|
|
12298
|
+
return __generator(this, function (_c) {
|
|
12299
|
+
switch (_c.label) {
|
|
12300
|
+
case 0: return [4 /*yield*/, updateViewTag.mutateAsync({
|
|
12301
|
+
viewId: viewId,
|
|
12302
|
+
tagId: viewTag.TagId,
|
|
12303
|
+
color: viewTag.Color,
|
|
12304
|
+
minScale: viewTag.MinScale,
|
|
12305
|
+
maxScale: viewTag.MaxScale,
|
|
12306
|
+
isVisible: viewTag.IsVisible,
|
|
12307
|
+
isAutoScale: viewTag.IsAutoScale,
|
|
12308
|
+
unit: viewTag.Unit,
|
|
12309
|
+
order: order,
|
|
12310
|
+
alias: viewTag.Alias,
|
|
12311
|
+
tagType: viewTag.TagType,
|
|
12312
|
+
sourceTagId: viewTag.SourceTagId,
|
|
12313
|
+
bitIndex: viewTag.BitIndex,
|
|
12314
|
+
})];
|
|
12315
|
+
case 1:
|
|
12316
|
+
_c.sent();
|
|
12317
|
+
return [2 /*return*/];
|
|
12318
|
+
}
|
|
12319
|
+
});
|
|
12320
|
+
}); }))];
|
|
12267
12321
|
case 1:
|
|
12268
12322
|
results = _a.sent();
|
|
12269
12323
|
failed = results.filter(function (r) { return r.status === "rejected"; });
|
|
@@ -12301,7 +12355,7 @@ var SaveUpdateDeleteViewModalV2 = function (_a) {
|
|
|
12301
12355
|
setIsSubmitLoading(true);
|
|
12302
12356
|
viewToDelete = view || viewSelected;
|
|
12303
12357
|
if (!!isNil(viewToDelete)) return [3 /*break*/, 2];
|
|
12304
|
-
return [4 /*yield*/, removeView.
|
|
12358
|
+
return [4 /*yield*/, removeView.mutateAsync(viewToDelete.ViewId)];
|
|
12305
12359
|
case 1:
|
|
12306
12360
|
_a.sent();
|
|
12307
12361
|
_a.label = 2;
|
|
@@ -12892,6 +12946,22 @@ var ColorPickerV2 = function (_a) {
|
|
|
12892
12946
|
} }, tagColors.map(function (tagColor) { return (React__default.createElement(ColorSwatch, { key: tagColor, color: tagColor, onSelect: handleColorSelect })); })))));
|
|
12893
12947
|
};
|
|
12894
12948
|
|
|
12949
|
+
var NotificationSnackBar = function (_a) {
|
|
12950
|
+
var message = _a.message, _b = _a.onHide, onHide = _b === void 0 ? function () { } : _b, _c = _a.severity, severity = _c === void 0 ? "success" : _c;
|
|
12951
|
+
var handleClose = function (event, reason) {
|
|
12952
|
+
if (reason === "clickaway") {
|
|
12953
|
+
return;
|
|
12954
|
+
}
|
|
12955
|
+
onHide();
|
|
12956
|
+
};
|
|
12957
|
+
var _d = useState(true), open = _d[0], setOpen = _d[1];
|
|
12958
|
+
useEffect(function () {
|
|
12959
|
+
setOpen(!!message);
|
|
12960
|
+
}, [message]);
|
|
12961
|
+
return (React__default.createElement(Snackbar, { open: open, autoHideDuration: 2500, onClose: handleClose, anchorOrigin: { vertical: "bottom", horizontal: "center" } },
|
|
12962
|
+
React__default.createElement(Alert$3, { elevation: 6, variant: "filled", severity: severity, onClose: handleClose }, message)));
|
|
12963
|
+
};
|
|
12964
|
+
|
|
12895
12965
|
var NewFolderModal = function (_a) {
|
|
12896
12966
|
var open = _a.open, handleClose = _a.handleClose, tagNodeSelectedInTree = _a.tagNodeSelectedInTree;
|
|
12897
12967
|
var _b = useState(), name = _b[0], setName = _b[1];
|
|
@@ -13129,7 +13199,7 @@ var TagFolderCustomNodeV2 = function (_a) {
|
|
|
13129
13199
|
(_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener("contextmenu", handleContextMenu);
|
|
13130
13200
|
};
|
|
13131
13201
|
}, []);
|
|
13132
|
-
return (React__default.createElement(Box, { onClick: onClickHandler, sx: {
|
|
13202
|
+
return (React__default.createElement(Box, { "data-node-id": node.id, onClick: onClickHandler, sx: {
|
|
13133
13203
|
paddingInlineStart: depth * 2,
|
|
13134
13204
|
cursor: "pointer",
|
|
13135
13205
|
alignItems: "center",
|
|
@@ -13410,13 +13480,14 @@ var TagsTreeModalV2 = function (_a) {
|
|
|
13410
13480
|
var open = _a.open, handleClose = _a.handleClose, onTagSelect = _a.onTagSelect;
|
|
13411
13481
|
var _b = useState(false), isLoading = _b[0], setIsLoading = _b[1];
|
|
13412
13482
|
var _c = useState(""), error = _c[0], setError = _c[1];
|
|
13413
|
-
var _d = useState(
|
|
13414
|
-
var _e = useState(
|
|
13415
|
-
var _f = useState(null),
|
|
13416
|
-
var _g = useState(
|
|
13483
|
+
var _d = useState(null), snackbarMessage = _d[0], setSnackbarMessage = _d[1];
|
|
13484
|
+
var _e = useState([]), tagsTreeData = _e[0], setTagsTreeData = _e[1];
|
|
13485
|
+
var _f = useState(null), tagNodeSelectedInTree = _f[0], setTagNodeSelectedInTree = _f[1];
|
|
13486
|
+
var _g = useState(null), anchorPoint = _g[0], setAnchorPoint = _g[1];
|
|
13487
|
+
var _h = useState(false), showContextMenu = _h[0], setShowContextMenu = _h[1];
|
|
13417
13488
|
var backendOffset = 1000000;
|
|
13418
|
-
var
|
|
13419
|
-
var
|
|
13489
|
+
var _j = useState({}), openTagFolders = _j[0], setOpenTagFolders = _j[1];
|
|
13490
|
+
var _k = useState([]), selectedNodes = _k[0], setSelectedNodes = _k[1];
|
|
13420
13491
|
var handleContextMenu = function (data, e) {
|
|
13421
13492
|
e.preventDefault();
|
|
13422
13493
|
var top = e.clientY;
|
|
@@ -13429,7 +13500,7 @@ var TagsTreeModalV2 = function (_a) {
|
|
|
13429
13500
|
setTagNodeSelectedInTree(selectedNode);
|
|
13430
13501
|
}
|
|
13431
13502
|
};
|
|
13432
|
-
var
|
|
13503
|
+
var _l = useSearchTagsTree$1(), tagsTree = _l.data, tagsTreeLoading = _l.isLoading, tagsTreeIsError = _l.isError, tagsTreeError = _l.error, tagsTreeIsSuccess = _l.isSuccess, tagsTreeIsFetched = _l.isFetched, refetch = _l.refetch;
|
|
13433
13504
|
var updateTagFolder = useMutation({
|
|
13434
13505
|
mutationFn: function (_a) {
|
|
13435
13506
|
var tagFolderId = _a.tagFolderId, parentTagFolderId = _a.parentTagFolderId, tagFolderName = _a.tagFolderName, isActive = _a.isActive;
|
|
@@ -13528,6 +13599,10 @@ var TagsTreeModalV2 = function (_a) {
|
|
|
13528
13599
|
});
|
|
13529
13600
|
setOpenTagFolders(newOpenTagFolders);
|
|
13530
13601
|
setSelectedNodes([result.node]);
|
|
13602
|
+
if (result.node.data && result.node.data.TagTypeCode !== "F") {
|
|
13603
|
+
onTagSelect(result.node.data);
|
|
13604
|
+
setSnackbarMessage("Tag \"".concat(result.node.data.TagName, "\" added"));
|
|
13605
|
+
}
|
|
13531
13606
|
// Scroll to the node after expansion
|
|
13532
13607
|
setTimeout(function () {
|
|
13533
13608
|
var nodeElement = document.querySelector("[data-node-id=\"".concat(result.id, "\"]"));
|
|
@@ -13615,7 +13690,8 @@ var TagsTreeModalV2 = function (_a) {
|
|
|
13615
13690
|
return (React__default.createElement(TagFolderCustomNodeV2, { setContextMenuOver: handleContextMenu, node: node, options: options, isSelected: selected, openTagFolders: openTagFolders, setOpenTagFolders: setOpenTagFolders, handleSelect: handleClick }));
|
|
13616
13691
|
}, dragPreviewRender: function (monitorProps) { return React__default.createElement(CustomDragPreview, { monitorProps: monitorProps }); } })))))),
|
|
13617
13692
|
React__default.createElement(ContextMenu, { anchorPoint: anchorPoint, isOpen: showContextMenu, setShowContextMenu: setShowContextMenu, tagNodeSelectedInTree: tagNodeSelectedInTree, getTagsTreeData: function () { return refetch(); } }),
|
|
13618
|
-
React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } })
|
|
13693
|
+
React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); } }),
|
|
13694
|
+
React__default.createElement(NotificationSnackBar, { message: snackbarMessage, onHide: function () { return setSnackbarMessage(null); } })))));
|
|
13619
13695
|
};
|
|
13620
13696
|
|
|
13621
13697
|
var BitSelectorModal = function (_a) {
|
|
@@ -13962,20 +14038,31 @@ var TagsTableV2 = function () {
|
|
|
13962
14038
|
var viewId = _a.viewId, viewName = _a.viewName, isPublic = _a.isPublic;
|
|
13963
14039
|
return upsertView({ viewId: viewId, viewName: viewName, isPublic: isPublic });
|
|
13964
14040
|
},
|
|
13965
|
-
onSuccess: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
13966
|
-
var results, failed;
|
|
14041
|
+
onSuccess: function (viewId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
14042
|
+
var backendTags, results, failed;
|
|
13967
14043
|
var _a;
|
|
13968
14044
|
return __generator(this, function (_b) {
|
|
13969
14045
|
switch (_b.label) {
|
|
13970
|
-
case 0:
|
|
14046
|
+
case 0:
|
|
14047
|
+
// Save complete state to local storage (metadata + virtual tags)
|
|
14048
|
+
if (viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) {
|
|
14049
|
+
saveViewToLocal(viewSelected.ViewId, viewTags);
|
|
14050
|
+
}
|
|
14051
|
+
// Wait for delete to finish before inserting new tags
|
|
14052
|
+
return [4 /*yield*/, deleteAllViewTags.mutateAsync((_a = viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) !== null && _a !== void 0 ? _a : 0)];
|
|
13971
14053
|
case 1:
|
|
14054
|
+
// Wait for delete to finish before inserting new tags
|
|
13972
14055
|
_b.sent();
|
|
13973
|
-
|
|
14056
|
+
backendTags = Object.values(viewTags).filter(function (_a) {
|
|
14057
|
+
var viewTag = _a.viewTag;
|
|
14058
|
+
return !viewTag.IsBitExtracted;
|
|
14059
|
+
});
|
|
14060
|
+
return [4 /*yield*/, Promise.allSettled(backendTags
|
|
13974
14061
|
.sort(function (a, b) { return b.order - a.order; })
|
|
13975
14062
|
.map(function (_a) {
|
|
13976
14063
|
var _b;
|
|
13977
|
-
var viewTag = _a.viewTag;
|
|
13978
|
-
return
|
|
14064
|
+
var viewTag = _a.viewTag, order = _a.order;
|
|
14065
|
+
return updateViewTag.mutateAsync({
|
|
13979
14066
|
viewId: (_b = viewSelected === null || viewSelected === void 0 ? void 0 : viewSelected.ViewId) !== null && _b !== void 0 ? _b : 0,
|
|
13980
14067
|
tagId: viewTag.TagId,
|
|
13981
14068
|
color: viewTag.Color,
|
|
@@ -13984,6 +14071,11 @@ var TagsTableV2 = function () {
|
|
|
13984
14071
|
isVisible: viewTag.IsVisible,
|
|
13985
14072
|
isAutoScale: viewTag.IsAutoScale,
|
|
13986
14073
|
unit: viewTag.Unit,
|
|
14074
|
+
order: order,
|
|
14075
|
+
alias: viewTag.Alias,
|
|
14076
|
+
tagType: viewTag.TagType,
|
|
14077
|
+
sourceTagId: viewTag.SourceTagId,
|
|
14078
|
+
bitIndex: viewTag.BitIndex,
|
|
13987
14079
|
});
|
|
13988
14080
|
}))];
|
|
13989
14081
|
case 2:
|
|
@@ -14005,7 +14097,7 @@ var TagsTableV2 = function () {
|
|
|
14005
14097
|
});
|
|
14006
14098
|
var updateViewTag = useMutation({
|
|
14007
14099
|
mutationFn: function (_a) {
|
|
14008
|
-
var viewId = _a.viewId, tagId = _a.tagId, color = _a.color, minScale = _a.minScale, maxScale = _a.maxScale, isVisible = _a.isVisible, isAutoScale = _a.isAutoScale, unit = _a.unit;
|
|
14100
|
+
var viewId = _a.viewId, tagId = _a.tagId, color = _a.color, minScale = _a.minScale, maxScale = _a.maxScale, isVisible = _a.isVisible, isAutoScale = _a.isAutoScale, unit = _a.unit, order = _a.order, alias = _a.alias, tagType = _a.tagType, sourceTagId = _a.sourceTagId, bitIndex = _a.bitIndex;
|
|
14009
14101
|
return upsertViewTag({
|
|
14010
14102
|
viewId: viewId,
|
|
14011
14103
|
tagId: tagId,
|
|
@@ -14015,6 +14107,11 @@ var TagsTableV2 = function () {
|
|
|
14015
14107
|
isVisible: isVisible,
|
|
14016
14108
|
isAutoScale: isAutoScale,
|
|
14017
14109
|
unit: unit,
|
|
14110
|
+
order: order,
|
|
14111
|
+
alias: alias,
|
|
14112
|
+
tagType: tagType,
|
|
14113
|
+
sourceTagId: sourceTagId,
|
|
14114
|
+
bitIndex: bitIndex,
|
|
14018
14115
|
});
|
|
14019
14116
|
},
|
|
14020
14117
|
onError: function (error) {
|
|
@@ -16313,26 +16410,70 @@ var TrendingsPageV2 = function () {
|
|
|
16313
16410
|
// This preserves local order changes (from drag-and-drop) until a new view is loaded
|
|
16314
16411
|
var loadedViewIdRef = useRef(null);
|
|
16315
16412
|
useEffect(function () {
|
|
16316
|
-
if (!viewTagsSuccess ||
|
|
16413
|
+
if (!viewTagsSuccess ||
|
|
16414
|
+
!viewTagsData ||
|
|
16415
|
+
!Array.isArray(viewTagsData) ||
|
|
16416
|
+
viewId === null)
|
|
16317
16417
|
return;
|
|
16318
16418
|
// Only reset viewTags when viewId actually changes (loading a different view)
|
|
16319
16419
|
// Do NOT reset if viewId is the same (data is just refetching)
|
|
16320
16420
|
if (viewId === loadedViewIdRef.current)
|
|
16321
16421
|
return;
|
|
16322
16422
|
loadedViewIdRef.current = viewId;
|
|
16323
|
-
var
|
|
16324
|
-
|
|
16325
|
-
|
|
16326
|
-
|
|
16327
|
-
|
|
16328
|
-
|
|
16329
|
-
|
|
16330
|
-
|
|
16331
|
-
|
|
16332
|
-
|
|
16423
|
+
var backendTags = viewTagsData;
|
|
16424
|
+
var localViewTags = getViewFromLocal(viewId);
|
|
16425
|
+
var mergedTags = {};
|
|
16426
|
+
if (localViewTags) {
|
|
16427
|
+
// If local storage exists, use it as the source of truth for metadata (Order, Alias)
|
|
16428
|
+
// and for virtual tags (Bit Extracted)
|
|
16429
|
+
var backendTagIds_1 = new Set(backendTags.map(function (t) { return t.TagId; }));
|
|
16430
|
+
// 1. Process local tags
|
|
16431
|
+
Object.values(localViewTags).forEach(function (entry) {
|
|
16432
|
+
var viewTag = entry.viewTag;
|
|
16433
|
+
// If it's a backend tag, check if it still exists in the backend response
|
|
16434
|
+
// (Permission check or tag deletion check)
|
|
16435
|
+
if (!viewTag.IsBitExtracted) {
|
|
16436
|
+
if (backendTagIds_1.has(viewTag.TagId)) {
|
|
16437
|
+
mergedTags[viewTag.TagId] = entry;
|
|
16438
|
+
}
|
|
16439
|
+
}
|
|
16440
|
+
else {
|
|
16441
|
+
// Virtual tags are always added from local storage
|
|
16442
|
+
mergedTags[viewTag.TagId] = entry;
|
|
16443
|
+
}
|
|
16444
|
+
});
|
|
16445
|
+
// 2. Add any new backend tags that might be missing from local storage
|
|
16446
|
+
// (Rare case, but possible if added by another user/session)
|
|
16447
|
+
backendTags.forEach(function (backendTag) {
|
|
16448
|
+
if (!mergedTags[backendTag.TagId]) {
|
|
16449
|
+
// Add with default order at the end
|
|
16450
|
+
var maxOrder = Math.max.apply(Math, __spreadArray(__spreadArray([], Object.values(mergedTags).map(function (t) { return t.order; }), false), [0], false));
|
|
16451
|
+
if (isNil(backendTag.Color)) {
|
|
16452
|
+
backendTag.Color = getRandomColor();
|
|
16453
|
+
}
|
|
16454
|
+
mergedTags[backendTag.TagId] = {
|
|
16455
|
+
viewTag: backendTag,
|
|
16456
|
+
order: maxOrder + 1,
|
|
16457
|
+
};
|
|
16458
|
+
}
|
|
16459
|
+
});
|
|
16460
|
+
}
|
|
16461
|
+
else {
|
|
16462
|
+
// No local storage -> Use backend tags with default ordering
|
|
16463
|
+
mergedTags = backendTags.reduce(function (carr, curr, idx) {
|
|
16464
|
+
if (isNil(curr.Color)) {
|
|
16465
|
+
curr.Color = getRandomColor();
|
|
16466
|
+
}
|
|
16467
|
+
carr[curr.TagId] = {
|
|
16468
|
+
viewTag: curr,
|
|
16469
|
+
order: idx,
|
|
16470
|
+
};
|
|
16471
|
+
return carr;
|
|
16472
|
+
}, {});
|
|
16473
|
+
}
|
|
16333
16474
|
// Reset stable ref when loading new view
|
|
16334
16475
|
stableTagIdsRef.current = [];
|
|
16335
|
-
setViewTagsAndRefetch(
|
|
16476
|
+
setViewTagsAndRefetch(mergedTags);
|
|
16336
16477
|
}, [viewTagsSuccess, viewTagsData, setViewTagsAndRefetch, viewId]);
|
|
16337
16478
|
// Update context with calculated min/max values
|
|
16338
16479
|
// Use ref to prevent infinite loop from object reference changes
|
|
@@ -19984,22 +20125,6 @@ var ShiftSelector = function (_a) {
|
|
|
19984
20125
|
React__default.createElement(ErrorModal, { error: error, onHide: function () { return setError(""); }, title: "Error loading shifts" })));
|
|
19985
20126
|
};
|
|
19986
20127
|
|
|
19987
|
-
var NotificationSnackBar = function (_a) {
|
|
19988
|
-
var message = _a.message, _b = _a.onHide, onHide = _b === void 0 ? function () { } : _b, _c = _a.severity, severity = _c === void 0 ? "success" : _c;
|
|
19989
|
-
var handleClose = function (event, reason) {
|
|
19990
|
-
if (reason === "clickaway") {
|
|
19991
|
-
return;
|
|
19992
|
-
}
|
|
19993
|
-
onHide();
|
|
19994
|
-
};
|
|
19995
|
-
var _d = useState(true), open = _d[0], setOpen = _d[1];
|
|
19996
|
-
useEffect(function () {
|
|
19997
|
-
setOpen(!!message);
|
|
19998
|
-
}, [message]);
|
|
19999
|
-
return (React__default.createElement(Snackbar, { open: open, autoHideDuration: 2500, onClose: handleClose, anchorOrigin: { vertical: "bottom", horizontal: "center" } },
|
|
20000
|
-
React__default.createElement(Alert$3, { elevation: 6, variant: "filled", severity: severity, onClose: handleClose }, message)));
|
|
20001
|
-
};
|
|
20002
|
-
|
|
20003
20128
|
var useEntrySubmission = function (_a) {
|
|
20004
20129
|
var _b = _a === void 0 ? {} : _a, onSuccess = _b.onSuccess, onError = _b.onError, _c = _b.isNewEntry, isNewEntry = _c === void 0 ? false : _c, _d = _b.onHide, onHide = _d === void 0 ? function () { } : _d;
|
|
20005
20130
|
var _e = useState(false), isSubmitLoading = _e[0], setIsSubmitLoading = _e[1];
|