@topconsultnpm/sdkui-react 6.20.0-dev1.39 → 6.20.0-dev1.40
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/lib/components/NewComponents/ContextMenu/TMContextMenu.js +46 -3
- package/lib/components/NewComponents/ContextMenu/styles.js +1 -1
- package/lib/components/NewComponents/ContextMenu/types.d.ts +1 -0
- package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +34 -27
- package/lib/components/NewComponents/FloatingMenuBar/styles.js +4 -4
- package/lib/components/features/search/TMSearchResult.js +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { useState, useRef, useEffect } from 'react';
|
|
|
3
3
|
import * as S from './styles';
|
|
4
4
|
import { useIsMobile, useMenuPosition } from './hooks';
|
|
5
5
|
import { IconArrowLeft } from '../../../helper';
|
|
6
|
-
const TMContextMenu = ({ items, trigger = 'right', children, externalControl }) => {
|
|
6
|
+
const TMContextMenu = ({ items, trigger = 'right', children, externalControl, keepOpenOnClick = false }) => {
|
|
7
7
|
const [menuState, setMenuState] = useState({
|
|
8
8
|
visible: false,
|
|
9
9
|
position: { x: 0, y: 0 },
|
|
@@ -42,6 +42,47 @@ const TMContextMenu = ({ items, trigger = 'right', children, externalControl })
|
|
|
42
42
|
}));
|
|
43
43
|
}
|
|
44
44
|
}, [externalControl, items]);
|
|
45
|
+
// Update items when they change while menu is visible (for keepOpenOnClick behavior)
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!keepOpenOnClick)
|
|
48
|
+
return;
|
|
49
|
+
if (!externalControl && menuState.visible) {
|
|
50
|
+
setMenuState(prev => ({
|
|
51
|
+
...prev,
|
|
52
|
+
submenuStack: [items],
|
|
53
|
+
}));
|
|
54
|
+
// Update hoveredSubmenus with fresh items while keeping them open
|
|
55
|
+
setHoveredSubmenus(prev => {
|
|
56
|
+
if (prev.length === 0)
|
|
57
|
+
return prev;
|
|
58
|
+
// Rebuild hoveredSubmenus with updated items from the new items structure
|
|
59
|
+
return prev.map(submenu => {
|
|
60
|
+
// Find the matching submenu in the new items structure
|
|
61
|
+
const findSubmenuInItems = (searchItems) => {
|
|
62
|
+
for (const item of searchItems) {
|
|
63
|
+
if (item.submenu && item.submenu.length > 0) {
|
|
64
|
+
// Check if this submenu matches (compare first item name as identifier)
|
|
65
|
+
if (submenu.items.length > 0 && item.submenu.length > 0 &&
|
|
66
|
+
item.submenu[0].name === submenu.items[0].name) {
|
|
67
|
+
return item.submenu;
|
|
68
|
+
}
|
|
69
|
+
// Recursively search in nested submenus
|
|
70
|
+
const found = findSubmenuInItems(item.submenu);
|
|
71
|
+
if (found)
|
|
72
|
+
return found;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
};
|
|
77
|
+
const updatedItems = findSubmenuInItems(items);
|
|
78
|
+
return {
|
|
79
|
+
...submenu,
|
|
80
|
+
items: updatedItems || submenu.items, // Use updated items if found, otherwise keep old
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, [items, menuState.visible, externalControl, keepOpenOnClick]);
|
|
45
86
|
useEffect(() => {
|
|
46
87
|
if (!menuState.visible)
|
|
47
88
|
return;
|
|
@@ -109,8 +150,10 @@ const TMContextMenu = ({ items, trigger = 'right', children, externalControl })
|
|
|
109
150
|
// Desktop: Submenus are handled by hover, don't close menu
|
|
110
151
|
}
|
|
111
152
|
else {
|
|
112
|
-
// No submenu: close menu after executing action
|
|
113
|
-
|
|
153
|
+
// No submenu: close menu after executing action (unless keepOpenOnClick is true)
|
|
154
|
+
if (!keepOpenOnClick) {
|
|
155
|
+
handleClose();
|
|
156
|
+
}
|
|
114
157
|
}
|
|
115
158
|
};
|
|
116
159
|
const handleBack = () => {
|
|
@@ -70,7 +70,7 @@ export const MenuItem = styled.div `
|
|
|
70
70
|
align-items: center;
|
|
71
71
|
justify-content: space-between;
|
|
72
72
|
padding: 4px 12px;
|
|
73
|
-
cursor: ${props => props.$disabled ? '
|
|
73
|
+
cursor: ${props => props.$disabled ? 'default' : 'pointer'};
|
|
74
74
|
transition: all 0.15s ease;
|
|
75
75
|
position: relative;
|
|
76
76
|
user-select: none;
|
|
@@ -4,9 +4,9 @@ import { ContextMenu } from '../ContextMenu';
|
|
|
4
4
|
import ShowAlert from '../../base/TMAlert';
|
|
5
5
|
import TMTooltip from '../../base/TMTooltip';
|
|
6
6
|
import * as S from './styles';
|
|
7
|
-
import { IconAdd, IconApply, IconMenuVertical,
|
|
7
|
+
import { IconAdd, IconApply, IconMenuVertical, IconPin, IconUndo, SDKUI_Globals, SDKUI_Localizator } from '../../../helper';
|
|
8
8
|
const IconDraggableDots = (props) => (_jsx("svg", { fontSize: 18, viewBox: "0 0 24 24", fill: "currentColor", height: "1em", width: "1em", ...props, children: _jsx("path", { d: "M9 3a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm10-18a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0z" }) }));
|
|
9
|
-
const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained = false, defaultPosition = { x: 100, y: 100 }, maxItems =
|
|
9
|
+
const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained = false, defaultPosition = { x: 100, y: 100 }, maxItems = 100, }) => {
|
|
10
10
|
const getDefaultConfig = () => ({
|
|
11
11
|
orientation: 'horizontal',
|
|
12
12
|
savedItemIds: [],
|
|
@@ -57,10 +57,6 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
57
57
|
: 'horizontal';
|
|
58
58
|
// Validate itemIds
|
|
59
59
|
const validItemIds = Array.isArray(settings.itemIds) ? settings.itemIds : [];
|
|
60
|
-
// IMPORTANT: Detect old name-based configurations and reset them
|
|
61
|
-
// Old configs would have saved items, but those items don't have proper IDs from menu items
|
|
62
|
-
// New IDs are short like 'fav', 'dl', 'open-form', etc.
|
|
63
|
-
// If we detect old-style data (no items have valid IDs), reset to empty
|
|
64
60
|
if (validItemIds.length > 0) {
|
|
65
61
|
// Check if any ID looks like the old format (contains language-specific text or is too long)
|
|
66
62
|
const hasOldFormatIds = validItemIds.some(id => typeof id === 'string' && (id.length > 20 || id.includes(' ')));
|
|
@@ -103,23 +99,17 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
103
99
|
const dragOffset = useRef({ x: 0, y: 0 });
|
|
104
100
|
const [dragOverIndex, setDragOverIndex] = useState(null);
|
|
105
101
|
const stateSnapshot = useRef(null);
|
|
106
|
-
// Use refs to track item IDs without causing re-renders
|
|
107
102
|
const floatingBarItemIds = useRef(new Set());
|
|
108
103
|
const floatingBarItemNames = useRef(new Set());
|
|
109
|
-
// Update refs when items change, but don't trigger re-renders
|
|
110
104
|
useEffect(() => {
|
|
111
105
|
floatingBarItemIds.current = new Set(state.items.map(i => i.id));
|
|
112
106
|
floatingBarItemNames.current = new Set(state.items.map(i => i.name));
|
|
113
107
|
}, [state.items]);
|
|
114
|
-
// Convert menu items to flat list with pinned status
|
|
115
108
|
const flattenMenuItems = useCallback((items, parentPath = '') => {
|
|
116
109
|
const result = [];
|
|
117
110
|
items.forEach((item, index) => {
|
|
118
|
-
// Use the actual item.id if available, otherwise fall back to generating from name
|
|
119
111
|
const itemId = item.id || `${parentPath}${item.name}-${index}`;
|
|
120
|
-
// Only add items that have onClick (final actions, not submenu parents)
|
|
121
112
|
if (item.onClick && !item.submenu) {
|
|
122
|
-
// Check if item is currently in the floating bar by ID only
|
|
123
113
|
const isPinned = state.items.some(i => i.id === itemId);
|
|
124
114
|
result.push({
|
|
125
115
|
id: itemId,
|
|
@@ -197,7 +187,6 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
197
187
|
onClick: foundItem?.onClick
|
|
198
188
|
};
|
|
199
189
|
}, [contextMenuItems]);
|
|
200
|
-
// Create context menu items for pinning (used by + button in edit mode)
|
|
201
190
|
const getPinContextMenuItems = useCallback(() => {
|
|
202
191
|
const flatItems = flattenMenuItems(contextMenuItems);
|
|
203
192
|
const currentItemIds = new Set(state.items.map(i => i.id));
|
|
@@ -208,13 +197,11 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
208
197
|
const isAlreadyPinned = currentItemIds.has(itemId);
|
|
209
198
|
const pinItem = {
|
|
210
199
|
...item,
|
|
211
|
-
// Override onClick to pin instead of executing the action
|
|
212
200
|
onClick: item.onClick && !item.submenu ? () => {
|
|
213
201
|
if (flatItem && !isAlreadyPinned) {
|
|
214
202
|
togglePin(flatItem);
|
|
215
203
|
}
|
|
216
204
|
} : undefined,
|
|
217
|
-
// Remove original disabled state - only disable already pinned items
|
|
218
205
|
disabled: isAlreadyPinned,
|
|
219
206
|
};
|
|
220
207
|
if (item.submenu) {
|
|
@@ -348,12 +335,25 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
348
335
|
};
|
|
349
336
|
const toggleOrientation = () => {
|
|
350
337
|
const newOrientation = state.orientation === 'horizontal' ? 'vertical' : 'horizontal';
|
|
351
|
-
|
|
338
|
+
if (state.orientation === 'horizontal' && newOrientation === 'vertical') {
|
|
339
|
+
if (floatingRef.current) {
|
|
340
|
+
const floating = floatingRef.current.getBoundingClientRect();
|
|
341
|
+
const screenHeight = window.innerHeight;
|
|
342
|
+
if (floating.width > screenHeight - 70) {
|
|
343
|
+
ShowAlert({
|
|
344
|
+
mode: 'warning',
|
|
345
|
+
title: 'Troppi elementi',
|
|
346
|
+
message: 'Ci sono troppi elementi nella barra mobile per la modalità verticale.',
|
|
347
|
+
duration: 4000,
|
|
348
|
+
});
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
352
353
|
setState(s => ({
|
|
353
354
|
...s,
|
|
354
355
|
orientation: newOrientation,
|
|
355
356
|
}));
|
|
356
|
-
// Then, after DOM updates, adjust position to stay in bounds
|
|
357
357
|
requestAnimationFrame(() => {
|
|
358
358
|
requestAnimationFrame(() => {
|
|
359
359
|
if (containerRef.current && floatingRef.current) {
|
|
@@ -441,24 +441,31 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
|
|
|
441
441
|
setState(s => ({ ...s, draggedItemIndex: null }));
|
|
442
442
|
setDragOverIndex(null);
|
|
443
443
|
};
|
|
444
|
-
return (_jsxs(_Fragment, { children: [_jsx(S.Overlay, { "$visible": state.isConfigMode }), _jsxs(S.FloatingContainer, { ref: floatingRef, "$x": state.position.x, "$y": state.position.y, "$orientation": state.orientation, "$isDragging": state.isDragging, "$isConfigMode": state.isConfigMode, "$isConstrained": isConstrained,
|
|
444
|
+
return (_jsxs(_Fragment, { children: [_jsx(S.Overlay, { "$visible": state.isConfigMode }), _jsxs(S.FloatingContainer, { ref: floatingRef, "$x": state.position.x, "$y": state.position.y, "$orientation": state.orientation, "$isDragging": state.isDragging, "$isConfigMode": state.isConfigMode, "$isConstrained": isConstrained, onContextMenu: (e) => e.preventDefault(), children: [!state.isConfigMode ? (_jsx(ContextMenu, { items: [
|
|
445
|
+
{
|
|
446
|
+
name: SDKUI_Localizator.Configure,
|
|
447
|
+
onClick: () => {
|
|
448
|
+
if (!state.isConfigMode) {
|
|
449
|
+
toggleConfigMode();
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
name: state.orientation === 'horizontal' ? 'Floating bar verticale' : 'Floating bar orizzontale',
|
|
455
|
+
onClick: toggleOrientation,
|
|
456
|
+
},
|
|
457
|
+
], trigger: "right", children: _jsx(S.GripHandle, { "$orientation": state.orientation, onMouseDown: handleMouseDown, onDoubleClick: handleGripDoubleClick, children: _jsx(IconDraggableDots, {}) }) })) : (_jsx(S.GripHandle, { "$orientation": state.orientation, onMouseDown: handleMouseDown, onDoubleClick: handleGripDoubleClick, children: _jsx(IconDraggableDots, {}) })), _jsx(S.Separator, { "$orientation": state.orientation }), state.items.map((item, index) => {
|
|
445
458
|
// Get current state (disabled and onClick) from contextMenuItems
|
|
446
459
|
const currentState = getCurrentItemState(item.id);
|
|
447
460
|
const isDisabled = currentState.disabled || false;
|
|
448
461
|
const currentOnClick = currentState.onClick || item.onClick; // Fallback to stored onClick if not found
|
|
449
|
-
return (_jsxs(S.DraggableItem, { "$isDragging": state.draggedItemIndex === index, "$isDragOver": dragOverIndex === index && state.draggedItemIndex !== index, draggable: state.isConfigMode, onDragStart: (e) => handleDragStart(e, index), onDragEnter: (e) => handleDragEnter(e, index), onDragOver: handleDragOver, onDragLeave: (e) => handleDragLeave(e, index), onDrop: (e) => handleDrop(e, index), onDragEnd: handleDragEnd, children: [
|
|
450
|
-
if (state.isConfigMode || isDisabled)
|
|
451
|
-
return;
|
|
452
|
-
if (currentOnClick) {
|
|
453
|
-
currentOnClick();
|
|
454
|
-
}
|
|
455
|
-
}, disabled: isDisabled && !state.isConfigMode, children: item.icon })) : (_jsx(TMTooltip, { content: item.name, position: "top", children: _jsx(S.MenuButton, { onClick: () => {
|
|
462
|
+
return (_jsxs(S.DraggableItem, { "$isDragging": state.draggedItemIndex === index, "$isDragOver": dragOverIndex === index && state.draggedItemIndex !== index, draggable: state.isConfigMode, onDragStart: (e) => handleDragStart(e, index), onDragEnter: (e) => handleDragEnter(e, index), onDragOver: handleDragOver, onDragLeave: (e) => handleDragLeave(e, index), onDrop: (e) => handleDrop(e, index), onDragEnd: handleDragEnd, children: [_jsx(TMTooltip, { content: item.name, position: "bottom", children: _jsx(S.MenuButton, { onClick: () => {
|
|
456
463
|
if (state.isConfigMode || isDisabled)
|
|
457
464
|
return;
|
|
458
465
|
if (currentOnClick) {
|
|
459
466
|
currentOnClick();
|
|
460
467
|
}
|
|
461
|
-
}, disabled: isDisabled, children: item.icon }) })
|
|
462
|
-
}), !state.isConfigMode && contextMenuItems.length > 0 && (_jsx(ContextMenu, { items: contextMenuItems, trigger: "left", children: _jsx(S.ContextMenuButton, { children: _jsx(IconMenuVertical, {}) }) })), state.isConfigMode && state.items.length < maxItems && contextMenuItems.length > 0 && (_jsx(ContextMenu, { items: getPinContextMenuItems(), trigger: "left", children: _jsx(TMTooltip, { content: SDKUI_Localizator.Add, children: _jsx(S.AddButton, { children: _jsx(IconAdd, {}) }) }) })), _jsx(S.Separator, { "$orientation": state.orientation }), _jsxs(S.ButtonGroup, { "$orientation": state.orientation, children: [
|
|
468
|
+
}, disabled: state.isConfigMode ? isDisabled && !state.isConfigMode : isDisabled, children: item.icon }) }), state.isConfigMode && (_jsx(S.RemoveButton, { onClick: () => removeItem(item.id), children: "\u00D7" }))] }, item.id));
|
|
469
|
+
}), !state.isConfigMode && contextMenuItems.length > 0 && (_jsx(ContextMenu, { items: contextMenuItems, trigger: "left", children: _jsx(S.ContextMenuButton, { children: _jsx(IconMenuVertical, {}) }) })), state.isConfigMode && state.items.length < maxItems && contextMenuItems.length > 0 && (_jsx(ContextMenu, { items: getPinContextMenuItems(), trigger: "left", keepOpenOnClick: true, children: _jsx(TMTooltip, { content: SDKUI_Localizator.Add, children: _jsx(S.AddButton, { children: _jsx(IconAdd, {}) }) }) })), state.isConfigMode && (_jsxs(_Fragment, { children: [_jsx(S.Separator, { "$orientation": state.orientation }), _jsxs(S.ButtonGroup, { "$orientation": state.orientation, children: [_jsx(TMTooltip, { content: SDKUI_Localizator.Undo, position: state.orientation === 'horizontal' ? 'right' : 'top', children: _jsx(S.UndoButton, { onClick: handleUndo, disabled: !hasChanges(), children: _jsx(IconUndo, { fontSize: 18 }) }) }), _jsx(TMTooltip, { content: state.items.length === 0 ? 'Devi aggiungere almeno un item' : SDKUI_Localizator.ApplyAndClose, position: state.orientation === 'horizontal' ? 'right' : 'top', children: _jsx(S.ApplyButton, { onClick: toggleConfigMode, disabled: state.items.length === 0, children: _jsx(IconApply, { fontSize: 20 }) }) })] })] }))] })] }));
|
|
463
470
|
};
|
|
464
471
|
export default TMFloatingMenuBar;
|
|
@@ -127,7 +127,7 @@ export const MenuButton = styled.button `
|
|
|
127
127
|
|
|
128
128
|
&:disabled {
|
|
129
129
|
opacity: 0.5;
|
|
130
|
-
cursor:
|
|
130
|
+
cursor: default;
|
|
131
131
|
color: rgba(255, 255, 255, 0.6);
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -196,7 +196,7 @@ export const ApplyButton = styled.button `
|
|
|
196
196
|
|
|
197
197
|
&:disabled {
|
|
198
198
|
opacity: 0.3;
|
|
199
|
-
cursor:
|
|
199
|
+
cursor: default;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
svg {
|
|
@@ -293,7 +293,7 @@ export const UndoButton = styled.button `
|
|
|
293
293
|
|
|
294
294
|
&:disabled {
|
|
295
295
|
opacity: 0.3;
|
|
296
|
-
cursor:
|
|
296
|
+
cursor: default;
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
svg {
|
|
@@ -340,7 +340,7 @@ export const ContextMenuWrapper = styled.div `
|
|
|
340
340
|
`;
|
|
341
341
|
export const ButtonGroup = styled.div `
|
|
342
342
|
display: flex;
|
|
343
|
-
flex-direction: row;
|
|
343
|
+
flex-direction: ${props => props.$orientation === 'vertical' ? 'column' : 'row'};
|
|
344
344
|
align-items: center;
|
|
345
345
|
gap: 0;
|
|
346
346
|
`;
|
|
@@ -600,7 +600,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
600
600
|
_jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, disableAccordionIfSingleCategory: disableAccordionIfSingleCategory, selectedTID: selectedSearchResultTID, selectedSearchResult: selectedSearchResult, autoSelectFirst: !isMobile || currentSearchResults.length === 1, onSelectionChanged: onSearchResultSelectionChanged }) })
|
|
601
601
|
:
|
|
602
602
|
_jsx(_Fragment, {}), _jsx(TMLayoutItem, { children: _jsxs("div", { ref: floatingBarContainerRef, style: { position: 'relative', height: '100%', width: '100%' }, children: [_jsx(TMSearchResultGrid, { showSearch: showSearch, fromDTD: fromDTD, allUsers: allUsers, inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, openInOffice: openInOffice, onDblClick: () => openFormHandler(LayoutModes.Update), floatingMenuItems: floatingMenuItems, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem, onDownloadDcmtsAsync: async (inputDcmts, downloadType, downloadMode, _y, confirmAttachments) => await downloadDcmtsAsync(inputDcmts, downloadType, downloadMode, onFileOpened, confirmAttachments), showExportForm: showExportForm, onCloseExportForm: onCloseExportForm }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
|
|
603
|
-
_jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 10, y: window.innerHeight - 215 }
|
|
603
|
+
_jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 10, y: window.innerHeight - 215 } })] }) })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
|
|
604
604
|
setIsOpenBatchUpdate(false);
|
|
605
605
|
}, onSavedCallbackAsync: async () => {
|
|
606
606
|
setIsOpenBatchUpdate(false);
|