@topconsultnpm/sdkui-react 6.21.0-dev1.2 → 6.21.0-dev1.3
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/base/TMTreeView.d.ts +2 -1
- package/lib/components/base/TMTreeView.js +8 -3
- package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +27 -2
- package/lib/components/features/documents/TMMasterDetailDcmts.js +160 -18
- package/lib/components/features/documents/TMRelationViewer.d.ts +6 -0
- package/lib/components/features/documents/TMRelationViewer.js +7 -5
- package/lib/hooks/useDocumentOperations.js +42 -8
- package/package.json +1 -1
|
@@ -23,11 +23,12 @@ interface ITMTreeViewProps<T extends ITMTreeItem> {
|
|
|
23
23
|
onNodeUpdate?: (updatedNode: T) => void;
|
|
24
24
|
onDataChanged?: (items: T[]) => void;
|
|
25
25
|
shouldDelayFocusOnEvent?: (node: T, event: React.MouseEvent) => boolean;
|
|
26
|
+
onItemContextMenu?: (item: T, e: React.MouseEvent) => void;
|
|
26
27
|
autoSelectChildren?: boolean;
|
|
27
28
|
itemsPerPage?: number;
|
|
28
29
|
showLoadMoreButton?: boolean;
|
|
29
30
|
}
|
|
30
|
-
declare const TMTreeView: <T extends ITMTreeItem>({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, autoSelectChildren, itemsPerPage, showLoadMoreButton }: ITMTreeViewProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
declare const TMTreeView: <T extends ITMTreeItem>({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, onItemContextMenu, autoSelectChildren, itemsPerPage, showLoadMoreButton }: ITMTreeViewProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
31
32
|
export default TMTreeView;
|
|
32
33
|
export declare const StyledTreeNode: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
33
34
|
$isSelected?: boolean;
|
|
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useRef } from 'react';
|
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import { IconArrowLeft, IconArrowRight, IconChevronDown, IconChevronRight, SDKUI_Localizator } from '../../helper';
|
|
5
5
|
import TMButton from './TMButton';
|
|
6
|
-
const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, autoSelectChildren = true, itemsPerPage = 100, showLoadMoreButton = true }) => {
|
|
6
|
+
const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, onItemContextMenu, autoSelectChildren = true, itemsPerPage = 100, showLoadMoreButton = true }) => {
|
|
7
7
|
useEffect(() => {
|
|
8
8
|
const handleKeyDown = (event) => {
|
|
9
9
|
if (!focusedItem)
|
|
@@ -350,8 +350,13 @@ const TMTreeView = ({ dataSource = [], focusedItem, selectedItems = [], allowMul
|
|
|
350
350
|
if (input) {
|
|
351
351
|
input.indeterminate = isIndeterminate(node);
|
|
352
352
|
}
|
|
353
|
-
} })), _jsx("div", { style: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0 }, onClick: (e) => { handleNodeClick(node, e); },
|
|
354
|
-
|
|
353
|
+
} })), _jsx("div", { style: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0 }, onClick: (e) => { handleNodeClick(node, e); }, onContextMenu: (e) => {
|
|
354
|
+
if (onItemContextMenu) {
|
|
355
|
+
e.preventDefault();
|
|
356
|
+
onItemContextMenu(node, e);
|
|
357
|
+
}
|
|
358
|
+
}, children: itemRender(node) })] }), node.expanded && node.items && (_jsxs("div", { style: { paddingLeft: 20, width: '100%' }, children: [renderTree(getVisibleItems(node)), needsPagination(node) && (_jsxs(StyledStickyPaginator, { children: [_jsx(TMButton, { btnStyle: 'icon', onClick: () => handlePageChange(node.key, (node.currentPage ?? 0) - 1), showTooltip: false, caption: "\u25C4", icon: _jsx(IconArrowLeft, { color: 'white' }), disabled: (node.currentPage ?? 0) <= 0 }), _jsx("span", { style: { fontSize: '11px', whiteSpace: 'nowrap', fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', minWidth: 0, color: 'white' }, children: SDKUI_Localizator.PaginationInfo.replaceParams((node.currentPage ?? 0) + 1, getTotalPages(node), node.items?.length ?? 0) }), _jsx(TMButton, { btnStyle: 'icon', onClick: () => handlePageChange(node.key, (node.currentPage ?? 0) + 1), showTooltip: false, caption: "\u25BA", icon: _jsx(IconArrowRight, { color: 'white' }), disabled: (node.currentPage ?? 0) >= getTotalPages(node) - 1 })] }))] }))] }, node.key)));
|
|
359
|
+
}, [handleNodeClick, handleNodeToggle, handleCheckboxChange, focusedItem, selectedItems, allowMultipleSelection, getVisibleItems, needsPagination, handlePageChange, getTotalPages, onItemContextMenu]);
|
|
355
360
|
return (_jsx("div", { style: { height: '100%', width: '100%', overflowY: 'auto', overflowX: 'hidden', padding: '0px 5px 2px 2px' }, children: renderTree(dataSource) }));
|
|
356
361
|
};
|
|
357
362
|
export default TMTreeView;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { HomeBlogPost, TaskDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
|
-
import { DcmtInfo, TaskContext } from '../../../ts';
|
|
2
|
+
import { HomeBlogPost, SearchResultDescriptor, TaskDescriptor } from '@topconsultnpm/sdk-ts';
|
|
3
|
+
import { DcmtInfo, TaskContext, MetadataValueDescriptorEx } from '../../../ts';
|
|
4
4
|
import { DeviceContextProps } from '../../base/TMDeviceProvider';
|
|
5
5
|
interface ITMMasterDetailDcmtsProps extends DeviceContextProps {
|
|
6
6
|
allTasks?: Array<TaskDescriptor>;
|
|
@@ -21,6 +21,31 @@ interface ITMMasterDetailDcmtsProps extends DeviceContextProps {
|
|
|
21
21
|
onBack?: () => void;
|
|
22
22
|
appendMasterDcmts?: (tid: number | undefined, did: number | undefined) => void;
|
|
23
23
|
onTaskCreateRequest?: (taskContext: TaskContext, onTaskCreated?: (task?: TaskDescriptor) => void) => void;
|
|
24
|
+
onRefreshAfterAddDcmtToFavs?: () => void;
|
|
25
|
+
editPdfForm?: boolean;
|
|
26
|
+
openS4TViewer?: boolean;
|
|
27
|
+
onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: (() => Promise<void>)) => void;
|
|
28
|
+
onOpenPdfEditorRequest?: ((dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void);
|
|
29
|
+
datagridUtility?: {
|
|
30
|
+
onRefreshSearchAsyncDatagrid?: () => Promise<void>;
|
|
31
|
+
onRefreshDataRowsAsync?: (() => Promise<void>);
|
|
32
|
+
refreshFocusedDataRowAsync?: (tid: number | undefined, did: number | undefined, refreshUI?: boolean, metadataResult?: SearchResultDescriptor | null) => Promise<void>;
|
|
33
|
+
onRefreshBlogDatagrid?: () => Promise<void>;
|
|
34
|
+
onRefreshPreviewDatagrid?: () => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
dcmtUtility?: {
|
|
37
|
+
approvalVID?: number;
|
|
38
|
+
dcmtDataRowForCicoStatus?: Array<MetadataValueDescriptorEx> | any;
|
|
39
|
+
selectedDcmtSearchResultRelations?: SearchResultDescriptor;
|
|
40
|
+
dcmtTIDHasDetailRelations?: boolean;
|
|
41
|
+
dcmtTIDHasMasterRelations?: boolean;
|
|
42
|
+
updateCurrentDcmt?: () => Promise<void>;
|
|
43
|
+
onCloseDcmtForm?: () => void;
|
|
44
|
+
onRefreshBlogForm?: () => Promise<void>;
|
|
45
|
+
onRefreshPreviewForm?: () => Promise<void>;
|
|
46
|
+
taskFormDialogComponent?: React.ReactNode;
|
|
47
|
+
s4TViewerDialogComponent?: React.ReactNode;
|
|
48
|
+
};
|
|
24
49
|
}
|
|
25
50
|
declare const TMMasterDetailDcmts: React.FC<ITMMasterDetailDcmtsProps>;
|
|
26
51
|
export default TMMasterDetailDcmts;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import { DcmtTypeListCacheService, SDK_Localizator } from '@topconsultnpm/sdk-ts';
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { DcmtTypeListCacheService, LayoutModes, SDK_Localizator } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import TMRelationViewer from './TMRelationViewer';
|
|
5
5
|
import TMContextMenu from '../../NewComponents/ContextMenu/TMContextMenu';
|
|
6
|
-
import { IconMultipleSelection, IconCheckFile, IconDetailDcmts, SDKUI_Localizator, IconMenuVertical, IconDataList, IconPreview, IconSearchCheck, IconBoard, IconDcmtTypeSys, IconShow, getMoreInfoTasksForDocument } from '../../../helper';
|
|
6
|
+
import { IconMultipleSelection, IconCheckFile, IconDetailDcmts, SDKUI_Localizator, IconMenuVertical, IconDataList, IconPreview, IconSearchCheck, IconBoard, IconDcmtTypeSys, IconShow, getMoreInfoTasksForDocument, isApprovalWorkflowView } from '../../../helper';
|
|
7
7
|
import { FormModes, SearchResultContext } from '../../../ts';
|
|
8
8
|
import { TMColors } from '../../../utils/theme';
|
|
9
9
|
import ShowAlert from '../../base/TMAlert';
|
|
@@ -15,7 +15,9 @@ import TMSearchResult from '../search/TMSearchResult';
|
|
|
15
15
|
import TMDcmtForm from './TMDcmtForm';
|
|
16
16
|
import { TMNothingToShow } from './TMDcmtPreview';
|
|
17
17
|
import { Spinner } from '../..';
|
|
18
|
-
|
|
18
|
+
import { useDocumentOperations } from '../../../hooks/useDocumentOperations';
|
|
19
|
+
const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, deviceType, inputDcmts, isForMaster, showCurrentDcmtIndicator = true, allowNavigation, canNext, canPrev, onNext, onPrev, onBack, appendMasterDcmts, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, datagridUtility, dcmtUtility }) => {
|
|
20
|
+
const floatingBarContainerRef = useRef(null);
|
|
19
21
|
const [focusedItem, setFocusedItem] = useState();
|
|
20
22
|
const [selectedItems, setSelectedItems] = useState([]);
|
|
21
23
|
const [showZeroDcmts, setShowZeroDcmts] = useState(false);
|
|
@@ -23,6 +25,121 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
|
|
|
23
25
|
const [dtdMaster, setDtdMaster] = useState();
|
|
24
26
|
const [noRelationsOnFirstLoad, setNoRelationsOnFirstLoad] = useState(false);
|
|
25
27
|
const [isCheckingFirstLoad, setIsCheckingFirstLoad] = useState(true);
|
|
28
|
+
const [contextMenuVisible, setContextMenuVisible] = useState(false);
|
|
29
|
+
const [contextMenuPosition, setContextMenuPosition] = useState({ x: 0, y: 0 });
|
|
30
|
+
const [dtdFocused, setDtdFocused] = useState();
|
|
31
|
+
const [refreshKey, setRefreshKey] = useState(0);
|
|
32
|
+
const onRefreshSearch = async () => {
|
|
33
|
+
await dcmtUtility?.onRefreshPreviewForm?.();
|
|
34
|
+
// forza il refresh del form di dettaglio al salvataggio
|
|
35
|
+
setRefreshKey(prev => prev + 1);
|
|
36
|
+
};
|
|
37
|
+
// Load dtdFocused when focusedItem changes
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const loadDtdFocused = async () => {
|
|
40
|
+
if (!focusedItem?.tid) {
|
|
41
|
+
setDtdFocused(undefined);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const dtd = await DcmtTypeListCacheService.GetAsync(focusedItem.tid);
|
|
45
|
+
setDtdFocused(dtd);
|
|
46
|
+
};
|
|
47
|
+
loadDtdFocused();
|
|
48
|
+
}, [focusedItem?.tid]);
|
|
49
|
+
const openTaskFormHandler = (onTaskCreated) => {
|
|
50
|
+
if (selectedItems.length > 1)
|
|
51
|
+
return;
|
|
52
|
+
const item = selectedItems.length === 1 ? selectedItems[0] : focusedItem;
|
|
53
|
+
if (item && item.tid && item.did) {
|
|
54
|
+
const createTaskFromDocumentOrWorkItem = async () => {
|
|
55
|
+
try {
|
|
56
|
+
const dtd = await DcmtTypeListCacheService.GetWithNotGrantedAsync(item.tid, item?.did);
|
|
57
|
+
if (dtd) {
|
|
58
|
+
const isWorkItem = isApprovalWorkflowView(dtd);
|
|
59
|
+
if (item.tid === undefined || item.did === undefined) {
|
|
60
|
+
console.error("TID or DID is undefined for the selected item.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const name = `${dtd.name ?? '-'} (DID: ${item.did})`;
|
|
64
|
+
onTaskCreateRequest?.(isWorkItem
|
|
65
|
+
? { workItem: { tid: item.tid, did: item.did, name } }
|
|
66
|
+
: { document: { tid: item.tid, did: item.did, name } }, onTaskCreated);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error("Error fetching data:", error);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
createTaskFromDocumentOrWorkItem();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const { operationItems, renderFloatingBar, renderDcmtOperations, features } = useDocumentOperations({
|
|
77
|
+
context: SearchResultContext.MASTER_DETAIL,
|
|
78
|
+
documentData: {
|
|
79
|
+
dtd: dtdFocused,
|
|
80
|
+
selectedItems: selectedItems ? selectedItems.map(item => ({ TID: item.tid, DID: item.did, FILEEXT: item.fileExt })) : [],
|
|
81
|
+
focusedItem: focusedItem ? { TID: focusedItem.tid, DID: focusedItem.did, FILEEXT: focusedItem.fileExt } : undefined,
|
|
82
|
+
currentSearchResults: [],
|
|
83
|
+
currentMetadataValues: [],
|
|
84
|
+
allUsers: [],
|
|
85
|
+
// searchResult: selectedSearchResult,
|
|
86
|
+
datagridUtility,
|
|
87
|
+
dcmtUtility: {
|
|
88
|
+
approvalVID: dcmtUtility?.approvalVID,
|
|
89
|
+
dcmtDataRowForCicoStatus: dcmtUtility?.dcmtDataRowForCicoStatus,
|
|
90
|
+
selectedDcmtSearchResultRelations: dcmtUtility?.selectedDcmtSearchResultRelations,
|
|
91
|
+
dcmtTIDHasDetailRelations: dcmtUtility?.dcmtTIDHasDetailRelations,
|
|
92
|
+
dcmtTIDHasMasterRelations: dcmtUtility?.dcmtTIDHasMasterRelations,
|
|
93
|
+
updateCurrentDcmt: dcmtUtility?.updateCurrentDcmt,
|
|
94
|
+
onCloseDcmtForm: dcmtUtility?.onCloseDcmtForm,
|
|
95
|
+
onRefreshBlogForm: dcmtUtility?.onRefreshBlogForm,
|
|
96
|
+
onRefreshPreviewForm: onRefreshSearch,
|
|
97
|
+
taskFormDialogComponent: dcmtUtility?.taskFormDialogComponent,
|
|
98
|
+
s4TViewerDialogComponent: dcmtUtility?.s4TViewerDialogComponent
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
uiConfig: {
|
|
102
|
+
floatingBarContainerRef,
|
|
103
|
+
openS4TViewer,
|
|
104
|
+
showDcmtFormSidebar: true,
|
|
105
|
+
openDcmtFormAsModal: true,
|
|
106
|
+
allowFloatingBar: false,
|
|
107
|
+
enablePinIcons: false,
|
|
108
|
+
allowRelations: true,
|
|
109
|
+
inputDcmtFormLayoutMode: LayoutModes.Update,
|
|
110
|
+
},
|
|
111
|
+
tasks: {
|
|
112
|
+
allTasks: allTasks,
|
|
113
|
+
getAllTasks: getAllTasks,
|
|
114
|
+
deleteTaskByIdsCallback: deleteTaskByIdsCallback,
|
|
115
|
+
addTaskCallback: addTaskCallback,
|
|
116
|
+
editTaskCallback: editTaskCallback
|
|
117
|
+
},
|
|
118
|
+
callbacks: {
|
|
119
|
+
// Refresh operations (data consistency)
|
|
120
|
+
/* onSavedAsyncCallback, */
|
|
121
|
+
// Workflow operations
|
|
122
|
+
/* onWFOperationCompleted, */
|
|
123
|
+
// Navigation
|
|
124
|
+
/* canNavigateHandler,
|
|
125
|
+
onNavigateHandler, */
|
|
126
|
+
handleNavigateToWGs,
|
|
127
|
+
handleNavigateToDossiers,
|
|
128
|
+
/* onReferenceClick, */
|
|
129
|
+
// Document forms/operations
|
|
130
|
+
/* openAddDocumentForm,
|
|
131
|
+
openCommentFormCallback,
|
|
132
|
+
onFileOpened,
|
|
133
|
+
passToArchiveCallback,
|
|
134
|
+
openWGsCopyMoveForm, */
|
|
135
|
+
onOpenS4TViewerRequest,
|
|
136
|
+
onOpenPdfEditorRequest,
|
|
137
|
+
// Task related
|
|
138
|
+
onTaskCreateRequest,
|
|
139
|
+
openTaskFormHandler,
|
|
140
|
+
onRefreshAfterAddDcmtToFavs,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
26
143
|
// Load dtdMaster when inputDcmts changes
|
|
27
144
|
useEffect(() => {
|
|
28
145
|
const loadDtdMaster = async () => {
|
|
@@ -53,6 +170,12 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
|
|
|
53
170
|
setNoRelationsOnFirstLoad(true);
|
|
54
171
|
}
|
|
55
172
|
}, [isCheckingFirstLoad]);
|
|
173
|
+
const onItemContextMenu = useCallback((item, e) => {
|
|
174
|
+
if (!item.isDcmt)
|
|
175
|
+
return; // Show context menu only for document items
|
|
176
|
+
setContextMenuPosition({ x: e.clientX, y: e.clientY });
|
|
177
|
+
setContextMenuVisible(true);
|
|
178
|
+
}, []);
|
|
56
179
|
// Show warning alert and navigate back when no relations found on first load
|
|
57
180
|
useEffect(() => {
|
|
58
181
|
if (noRelationsOnFirstLoad) {
|
|
@@ -97,10 +220,19 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
|
|
|
97
220
|
?
|
|
98
221
|
_jsx(TMNothingToShow, { text: getTitle(), secondText: SDKUI_Localizator.NoDataToDisplay, icon: isForMaster ? _jsx(IconDetailDcmts, { fontSize: 96, transform: 'scale(-1, 1)' }) : _jsx(IconDetailDcmts, { fontSize: 96 }) })
|
|
99
222
|
:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
223
|
+
_jsxs("div", { ref: floatingBarContainerRef, style: { width: "100%", height: "100%" }, onContextMenu: (e) => {
|
|
224
|
+
// Mostra context menu anche sullo spazio bianco (quando non si clicca su un item)
|
|
225
|
+
e.preventDefault();
|
|
226
|
+
setContextMenuPosition({ x: e.clientX, y: e.clientY });
|
|
227
|
+
setContextMenuVisible(true);
|
|
228
|
+
}, children: [_jsx(TMRelationViewerWrapper, { inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, showZeroDcmts: showZeroDcmts,
|
|
229
|
+
// customItemRender={customItemRender}
|
|
230
|
+
allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: handleSelectedItemsChanged, onNoRelationsFound: handleNoRelationsFound, onItemContextMenu: onItemContextMenu }, refreshKey), _jsx(TMContextMenu, { items: operationItems, externalControl: {
|
|
231
|
+
visible: contextMenuVisible,
|
|
232
|
+
position: contextMenuPosition,
|
|
233
|
+
onClose: () => setContextMenuVisible(false)
|
|
234
|
+
} })] }) }), [inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, allowMultipleSelection, focusedItem, selectedItems, handleFocusedItemChanged, handleSelectedItemsChanged, handleNoRelationsFound, onItemContextMenu, contextMenuVisible, contextMenuPosition, refreshKey]);
|
|
235
|
+
const tmFormOrResult = useMemo(() => _jsx(TMFormOrResultWrapper, { deviceType: deviceType, focusedItem: focusedItem, onTaskCreateRequest: onTaskCreateRequest, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest }, refreshKey), [focusedItem, deviceType, allTasks, handleNavigateToWGs, handleNavigateToDossiers, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs, refreshKey]);
|
|
104
236
|
const initialPanelDimensions = {
|
|
105
237
|
'tmTreeView': { width: '50%', height: '100%' },
|
|
106
238
|
'tmFormOrResult': { width: '50%', height: '100%' },
|
|
@@ -177,7 +309,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
|
|
|
177
309
|
toolbarOptions: { icon: _jsx(IconSearchCheck, { fontSize: 24 }), visible: false, orderNumber: 2, isActive: allInitialPanelVisibility['tmFormOrResult'] }
|
|
178
310
|
}
|
|
179
311
|
], [tmTreeView, tmFormOrResult, focusedItem?.isDcmt, dtdMaster]);
|
|
180
|
-
return (_jsxs("div", { style: { width: '100%', height: '100%', position: 'relative' }, children: [isCheckingFirstLoad && (_jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: true })),
|
|
312
|
+
return (_jsxs("div", { style: { width: '100%', height: '100%', position: 'relative' }, children: [isCheckingFirstLoad && (_jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: true })), _jsxs("div", { style: isCheckingFirstLoad ? { position: 'absolute', width: 0, height: 0, overflow: 'hidden', opacity: 0, pointerEvents: 'none' } : { width: '100%', height: '100%' }, children: [_jsx(TMPanelManagerProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'tmTreeView', children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", showToolbar: true }) }), renderDcmtOperations, renderFloatingBar] })] }));
|
|
181
313
|
};
|
|
182
314
|
export default TMMasterDetailDcmts;
|
|
183
315
|
/**
|
|
@@ -186,7 +318,7 @@ export default TMMasterDetailDcmts;
|
|
|
186
318
|
* - Panel visibility toggling
|
|
187
319
|
* - Focus delay handling
|
|
188
320
|
*/
|
|
189
|
-
const TMRelationViewerWrapper = ({ inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, customItemRender, allowMultipleSelection, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onNoRelationsFound }) => {
|
|
321
|
+
const TMRelationViewerWrapper = ({ inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, customItemRender, allowMultipleSelection, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onNoRelationsFound, onItemContextMenu }) => {
|
|
190
322
|
const { setPanelVisibilityById, setToolbarButtonVisibility } = useTMPanelManagerContext();
|
|
191
323
|
// Handle focused item changes with panel visibility management
|
|
192
324
|
const handleFocusedItemChanged = useCallback((item) => {
|
|
@@ -205,15 +337,25 @@ const TMRelationViewerWrapper = ({ inputDcmts, isForMaster, showCurrentDcmtIndic
|
|
|
205
337
|
setToolbarButtonVisibility('tmDcmtForm', false);
|
|
206
338
|
}
|
|
207
339
|
}, [onFocusedItemChanged, setPanelVisibilityById, setToolbarButtonVisibility]);
|
|
208
|
-
|
|
340
|
+
const onContextMenu = useCallback((item, e) => {
|
|
341
|
+
// Ferma la propagazione per evitare che l'evento arrivi al div contenitore
|
|
342
|
+
// (che ha il suo handler per il context menu sullo spazio bianco)
|
|
343
|
+
e.stopPropagation();
|
|
344
|
+
handleFocusedItemChanged(item);
|
|
345
|
+
// Il setTimeout è necessario per permettere a React di completare il re-render
|
|
346
|
+
// dopo il cambio di focus (handleFocusedItemChanged aggiorna stato e visibilità pannelli).
|
|
347
|
+
// Senza il delay, il context menu potrebbe mostrare opzioni basate sul vecchio stato.
|
|
348
|
+
setTimeout(() => {
|
|
349
|
+
onItemContextMenu?.(item, e);
|
|
350
|
+
}, 100);
|
|
351
|
+
}, [onItemContextMenu, handleFocusedItemChanged]);
|
|
352
|
+
return (_jsx(TMRelationViewer, { inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, initialShowZeroDcmts: showZeroDcmts, customItemRender: customItemRender, allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: onSelectedItemsChanged, maxDepthLevel: 1, invertMasterNavigation: false, onNoRelationsFound: onNoRelationsFound, onItemContextMenu: onContextMenu }));
|
|
209
353
|
};
|
|
210
|
-
const TMFormOrResultWrapper = ({ deviceType, focusedItem, onTaskCreateRequest, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
|
|
354
|
+
const TMFormOrResultWrapper = ({ deviceType, focusedItem, onTaskCreateRequest, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onRefreshSearchAsyncDatagrid }) => {
|
|
211
355
|
const { setPanelVisibilityById } = useTMPanelManagerContext();
|
|
212
356
|
return (_jsx(_Fragment, { children: focusedItem?.isDcmt ?
|
|
213
|
-
_jsx(TMDcmtForm, { groupId: 'tmFormOrResult', TID: focusedItem?.tid, DID: focusedItem.did, allowButtonsRefs: true, isClosable: deviceType !== DeviceType.MOBILE, allowNavigation: false, allowRelations: deviceType !== DeviceType.MOBILE, showDcmtFormSidebar: false, onClose: () => {
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
_jsx(TMSearchResult, { groupId: 'tmFormOrResult', isClosable: deviceType !== DeviceType.MOBILE, context: SearchResultContext.METADATA_SEARCH, allowFloatingBar: false, allowRelations: false, openDcmtFormAsModal: true, searchResults: focusedItem?.searchResult ?? [], showSearchResultSidebar: false, showDcmtFormSidebar: false, onTaskCreateRequest: onTaskCreateRequest, onClose: () => {
|
|
217
|
-
setPanelVisibilityById('tmTreeView', true);
|
|
218
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }));
|
|
357
|
+
_jsx(TMDcmtForm, { groupId: 'tmFormOrResult', TID: focusedItem?.tid, DID: focusedItem.did, allowButtonsRefs: true, isClosable: deviceType !== DeviceType.MOBILE, allowNavigation: false, allowRelations: deviceType !== DeviceType.MOBILE, showDcmtFormSidebar: false, onClose: () => { setPanelVisibilityById('tmTreeView', true); }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, focusedItem?.tid, focusedItem?.did), openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, datagridUtility: {
|
|
358
|
+
onRefreshSearchAsyncDatagrid,
|
|
359
|
+
} }) :
|
|
360
|
+
_jsx(TMSearchResult, { groupId: 'tmFormOrResult', isClosable: deviceType !== DeviceType.MOBILE, context: SearchResultContext.METADATA_SEARCH, allowFloatingBar: false, allowRelations: false, openDcmtFormAsModal: true, searchResults: focusedItem?.searchResult ?? [], showSearchResultSidebar: false, showDcmtFormSidebar: false, onTaskCreateRequest: onTaskCreateRequest, onClose: () => { setPanelVisibilityById('tmTreeView', true); }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, onOpenPdfEditorRequest: onOpenPdfEditorRequest, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, enablePinIcons: false, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs }) }));
|
|
219
361
|
};
|
|
@@ -22,6 +22,7 @@ export interface RelationTreeItem extends ITMTreeItem {
|
|
|
22
22
|
values?: any;
|
|
23
23
|
searchResult?: SearchResultDescriptor[];
|
|
24
24
|
itemsCount?: number;
|
|
25
|
+
fileExt?: string;
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Props for TMRelationViewer component
|
|
@@ -98,6 +99,11 @@ export interface TMRelationViewerProps {
|
|
|
98
99
|
* Useful to notify parent component that there are no correlated documents to display.
|
|
99
100
|
*/
|
|
100
101
|
onNoRelationsFound?: () => void;
|
|
102
|
+
/**
|
|
103
|
+
* Callback invoked when user right-clicks on a tree item.
|
|
104
|
+
* Use to show a context menu.
|
|
105
|
+
*/
|
|
106
|
+
onItemContextMenu?: (item: RelationTreeItem, e: React.MouseEvent) => void;
|
|
101
107
|
}
|
|
102
108
|
/**
|
|
103
109
|
* Check if document type has detail relations
|
|
@@ -136,7 +136,7 @@ export const searchResultToDataSource = async (searchResult, hideSysMetadata) =>
|
|
|
136
136
|
}
|
|
137
137
|
return output;
|
|
138
138
|
};
|
|
139
|
-
const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndicator = true, allowShowZeroDcmts = true, initialShowZeroDcmts = false, allowedTIDs, allowMultipleSelection = false, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onDocumentDoubleClick, customItemRender, customDocumentStyle, customMainContainerContent, customDocumentContent, showMetadataNames = false, maxDepthLevel = 2, invertMasterNavigation = true, additionalStaticItems, showMainDocument = true, labelMainContainer, onNoRelationsFound, }) => {
|
|
139
|
+
const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndicator = true, allowShowZeroDcmts = true, initialShowZeroDcmts = false, allowedTIDs, allowMultipleSelection = false, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onDocumentDoubleClick, customItemRender, customDocumentStyle, customMainContainerContent, customDocumentContent, showMetadataNames = false, maxDepthLevel = 2, invertMasterNavigation = true, additionalStaticItems, showMainDocument = true, labelMainContainer, onNoRelationsFound, onItemContextMenu, }) => {
|
|
140
140
|
// State
|
|
141
141
|
const [dcmtTypes, setDcmtTypes] = useState([]);
|
|
142
142
|
const [treeData, setTreeData] = useState([]);
|
|
@@ -246,7 +246,8 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
246
246
|
// Children will be loaded lazily by calculateItemsForNode when expanded
|
|
247
247
|
expanded: false,
|
|
248
248
|
hidden: false,
|
|
249
|
-
name: row?.SYS_Abstract?.value || row?.SYS_SUBJECT?.value || `Documento ${did}
|
|
249
|
+
name: row?.SYS_Abstract?.value || row?.SYS_SUBJECT?.value || `Documento ${did}`,
|
|
250
|
+
fileExt: row?.FILEEXT?.value
|
|
250
251
|
// Note: Recursive loading on expansion is handled by calculateItemsForNode
|
|
251
252
|
});
|
|
252
253
|
}
|
|
@@ -375,7 +376,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
375
376
|
isContainer: false,
|
|
376
377
|
isDcmt: false,
|
|
377
378
|
isInfoMessage: true,
|
|
378
|
-
isExpandible: false
|
|
379
|
+
isExpandible: false,
|
|
379
380
|
},
|
|
380
381
|
...filteredChildren
|
|
381
382
|
];
|
|
@@ -618,7 +619,8 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
618
619
|
values: docRow,
|
|
619
620
|
searchResult: result ? [result] : [],
|
|
620
621
|
items: relatedDocs,
|
|
621
|
-
itemsCount: relatedDocs.length
|
|
622
|
+
itemsCount: relatedDocs.length,
|
|
623
|
+
fileExt: docRow?.FILEEXT?.value
|
|
622
624
|
};
|
|
623
625
|
// Check if a type container for this TID already exists in the tree
|
|
624
626
|
const existingContainer = tree.find(c => c.tid === dcmt.TID && c.isContainer);
|
|
@@ -1130,7 +1132,7 @@ const TMRelationViewer = ({ inputDcmts, isForMaster = false, showCurrentDcmtIndi
|
|
|
1130
1132
|
return null;
|
|
1131
1133
|
return _jsx("div", { style: { padding: '20px', textAlign: 'center', color: '#666' }, children: "Nessuna relazione disponibile." });
|
|
1132
1134
|
}
|
|
1133
|
-
return (_jsxs(_Fragment, { children: [_jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged }), showExpansionWaitPanel && (_jsx(TMWaitPanel, { title: isForMaster ? 'Caricamento documenti master' : 'Caricamento documenti dettaglio', showPrimary: true, textPrimary: expansionWaitPanelText, valuePrimary: expansionWaitPanelValue, maxValuePrimary: expansionWaitPanelMaxValue, isCancelable: true, abortController: expansionAbortController, onAbortClick: (abortController) => {
|
|
1135
|
+
return (_jsxs(_Fragment, { children: [_jsx(TMTreeView, { dataSource: mergedTreeData, itemRender: finalItemRender, calculateItemsForNode: calculateItemsForNode, onDataChanged: handleDataChanged, focusedItem: focusedItem, onFocusedItemChanged: handleFocusedItemChanged, allowMultipleSelection: allowMultipleSelection, selectedItems: selectedItems, itemsPerPage: 100, onSelectionChanged: handleSelectedItemsChanged, onItemContextMenu: onItemContextMenu }), showExpansionWaitPanel && (_jsx(TMWaitPanel, { title: isForMaster ? 'Caricamento documenti master' : 'Caricamento documenti dettaglio', showPrimary: true, textPrimary: expansionWaitPanelText, valuePrimary: expansionWaitPanelValue, maxValuePrimary: expansionWaitPanelMaxValue, isCancelable: true, abortController: expansionAbortController, onAbortClick: (abortController) => {
|
|
1134
1136
|
setTimeout(() => {
|
|
1135
1137
|
abortController?.abort();
|
|
1136
1138
|
}, 100);
|
|
@@ -820,7 +820,14 @@ export const useDocumentOperations = (props) => {
|
|
|
820
820
|
try {
|
|
821
821
|
TMSpinner.show({ description: `${SDKUI_Localizator.Loading}...` });
|
|
822
822
|
const msg = await SDK_Globals.tmSession?.NewSearchEngine().FreeSearchGetDcmtInfoAsync(dcmt.TID, dcmt.DID);
|
|
823
|
-
TMMessageBoxManager.show({
|
|
823
|
+
TMMessageBoxManager.show({
|
|
824
|
+
buttons: [ButtonNames.OK],
|
|
825
|
+
showToppy: false,
|
|
826
|
+
resizable: true,
|
|
827
|
+
initialWidth: !isMobile ? '700px' : undefined,
|
|
828
|
+
message: msg,
|
|
829
|
+
title: SDKUI_Localizator.IndexingInformation
|
|
830
|
+
});
|
|
824
831
|
}
|
|
825
832
|
catch (e) {
|
|
826
833
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -1047,15 +1054,14 @@ export const useDocumentOperations = (props) => {
|
|
|
1047
1054
|
return [
|
|
1048
1055
|
{
|
|
1049
1056
|
id: 'doc',
|
|
1050
|
-
icon: _jsx(
|
|
1057
|
+
icon: _jsx(IconFileDots, {}),
|
|
1051
1058
|
name: !isMobile ? SDKUI_Localizator.DocumentOperations : SDKUI_Localizator.Documents,
|
|
1052
1059
|
disabled: isDisabledForSingleRow() && isDisabledForMultiRow(),
|
|
1053
1060
|
submenu: [
|
|
1054
|
-
|
|
1055
|
-
|
|
1061
|
+
addToFavoriteOperation(),
|
|
1062
|
+
openFormOperation(),
|
|
1056
1063
|
downloadFileMenuItem(),
|
|
1057
1064
|
downloadXMLAttachmentsMenuItem(),
|
|
1058
|
-
...(selectedDcmtInfos.length > 0 && isPdfEditorAvailable(dtd, selectedDcmtInfos[0]?.FILEEXT) && onOpenPdfEditorRequest ? [pdfEditorMenuItem(onOpenPdfEditorRequest)] : []),
|
|
1059
1065
|
]
|
|
1060
1066
|
},
|
|
1061
1067
|
signatureMenuItem(),
|
|
@@ -1064,6 +1070,29 @@ export const useDocumentOperations = (props) => {
|
|
|
1064
1070
|
...((inputDcmtFormLayoutMode === LayoutModes.Update) ? [fullTextSearchMenuItem()] : []),
|
|
1065
1071
|
];
|
|
1066
1072
|
};
|
|
1073
|
+
const getMasterDetailMenuItems = () => {
|
|
1074
|
+
return [
|
|
1075
|
+
{
|
|
1076
|
+
id: 'doc',
|
|
1077
|
+
icon: _jsx(IconCheck, {}),
|
|
1078
|
+
name: !isMobile ? SDKUI_Localizator.DocumentOperations : SDKUI_Localizator.Documents,
|
|
1079
|
+
disabled: isDisabledForSingleRow() && isDisabledForMultiRow(),
|
|
1080
|
+
submenu: [
|
|
1081
|
+
...(inputDcmtFormLayoutMode === LayoutModes.Update ? [addToFavoriteOperation()] : []),
|
|
1082
|
+
addReplaceFileOperation(),
|
|
1083
|
+
openFormOperation(),
|
|
1084
|
+
fileCheckMenuItem(),
|
|
1085
|
+
fileConversionsMenuItem(),
|
|
1086
|
+
...(SDK_Globals.tmSession?.SessionDescr?.appModuleID === AppModules.SURFER ? [createContextualTaskMenuItem()] : []),
|
|
1087
|
+
downloadFileMenuItem(),
|
|
1088
|
+
downloadXMLAttachmentsMenuItem(),
|
|
1089
|
+
...(selectedDcmtInfos.length > 0 && isPdfEditorAvailable(dtd, selectedDcmtInfos[0]?.FILEEXT) && onOpenPdfEditorRequest ? [pdfEditorMenuItem(onOpenPdfEditorRequest)] : [])
|
|
1090
|
+
]
|
|
1091
|
+
},
|
|
1092
|
+
signatureMenuItem(),
|
|
1093
|
+
...((inputDcmtFormLayoutMode === LayoutModes.Update) ? [fullTextSearchMenuItem()] : []),
|
|
1094
|
+
];
|
|
1095
|
+
};
|
|
1067
1096
|
const getOperationMenuItems = () => {
|
|
1068
1097
|
const getMenuItemsByContext = () => {
|
|
1069
1098
|
switch (context) {
|
|
@@ -1071,6 +1100,8 @@ export const useDocumentOperations = (props) => {
|
|
|
1071
1100
|
return getDcmtFormMenuItems();
|
|
1072
1101
|
case SearchResultContext.ARCHIVED_WORKGROUP:
|
|
1073
1102
|
return getArchivedWorkgroupMenuItems();
|
|
1103
|
+
case SearchResultContext.MASTER_DETAIL:
|
|
1104
|
+
return getMasterDetailMenuItems();
|
|
1074
1105
|
default:
|
|
1075
1106
|
return getDefaultMenuItems();
|
|
1076
1107
|
}
|
|
@@ -1084,15 +1115,18 @@ export const useDocumentOperations = (props) => {
|
|
|
1084
1115
|
};
|
|
1085
1116
|
const renderFloatingBar = (floatingBarContainerRef && floatingBarContainerRef.current && allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE) ? (_jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: operationItems(), isConstrained: true, defaultPosition: { x: 1, y: 88 }, defaultPinnedItems: ['rel-det', 'rel-mst', 'dl'], defaultOrientation: 'horizontal', hasContextMenu: false, pinnedItemIds: pinnedItemIds, onPinChange: setPinnedItemIds })) : null;
|
|
1086
1117
|
const renderDcmtOperations = (_jsxs(_Fragment, { children: [(showExportForm && searchResult && dataColumns && dataSource && selectedRowKeys) && (_jsx(TMDataGridExportForm, { dataColumns: dataColumns, dataSource: dataSource, selectedRowKeys: selectedRowKeys, onCloseExportForm: () => setShowExportForm(false), searchResult: searchResult })), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDcmtForm, children: ((isOpenDcmtForm && focusedItem?.TID !== undefined && focusedItem?.DID !== undefined) &&
|
|
1087
|
-
_jsx(TMDcmtForm, { isModal: openDcmtFormAsModal || (dcmtFormLayoutMode === LayoutModes.Ark && focusedItem?.DID !== undefined), titleModal: dtd?.name ?? '', TID: focusedItem.TID, DID: focusedItem.DID, allowButtonsRefs: true, layoutMode: dcmtFormLayoutMode, count: visibleItems?.length, itemIndex: visibleItems ? visibleItems.findIndex(o => o.rowIndex === focusedItem?.rowIndex) + 1 : undefined, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onClose: () => {
|
|
1118
|
+
_jsx(TMDcmtForm, { isModal: openDcmtFormAsModal || (dcmtFormLayoutMode === LayoutModes.Ark && focusedItem?.DID !== undefined), titleModal: dtd?.name ?? '', TID: focusedItem.TID, DID: focusedItem.DID, allowButtonsRefs: true, layoutMode: dcmtFormLayoutMode, count: visibleItems?.length, itemIndex: visibleItems ? visibleItems.findIndex(o => o.rowIndex === focusedItem?.rowIndex) + 1 : undefined, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onClose: () => {
|
|
1119
|
+
(false);
|
|
1120
|
+
onDcmtFormOpenChange(false, LayoutModes.Update);
|
|
1121
|
+
}, onWFOperationCompleted: onWFOperationCompleted, onTaskCreateRequest: onTaskCreateRequest, onSavedAsyncCallback: onSavedAsyncCallback, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onReferenceClick: onReferenceClick, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, focusedItem?.TID, focusedItem?.DID), showDcmtFormSidebar: showDcmtFormSidebar, datagridUtility: {
|
|
1088
1122
|
onRefreshSearchAsyncDatagrid,
|
|
1089
1123
|
onRefreshDataRowsAsync,
|
|
1090
1124
|
refreshFocusedDataRowAsync,
|
|
1091
1125
|
onRefreshBlogDatagrid,
|
|
1092
1126
|
onRefreshPreviewDatagrid
|
|
1093
1127
|
} })) }), (showHistory && dtd && selectedDcmtInfos.length > 0) && _jsx(TMViewHistoryDcmt, { fromDTD: dtd, deviceType: deviceType, inputDcmt: selectedDcmtInfos[0], onClose: hideHistoryCallback, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (commentFormState.show && selectedDcmtInfos.length > 0) && _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: selectedDcmtInfos[0].TID, did: selectedDcmtInfos[0].DID } }, onClose: hideCommentFormCallback, refreshCallback: onRefreshBlog, participants: [], showAttachmentsSection: true, allArchivedDocumentsFileItems: convertSearchResultDescriptorToFileItems(currentSearchResults ?? []), isCommentRequired: commentFormState.isRequired, removeAndEditAttachment: commentFormState.removeAndEditAttachment, selectedAttachmentDid: [Number(selectedDcmtInfos[0].DID)] }), (showCheckoutInformationForm && dtd && selectedDcmtInfos.length > 0) &&
|
|
1094
|
-
_jsx(TMDcmtCheckoutInfoForm, { dtdName: dtd.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: selectedDcmtInfos[0], onClose: hideCheckoutInformationFormCallback }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: selectedDcmtInfos, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: selectedDcmtInfos, isForMaster: true, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
|
|
1095
|
-
return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }, `${index}-${dcmt.DID}`));
|
|
1128
|
+
_jsx(TMDcmtCheckoutInfoForm, { dtdName: dtd.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: selectedDcmtInfos[0], onClose: hideCheckoutInformationFormCallback }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: selectedDcmtInfos, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: selectedDcmtInfos, isForMaster: true, allowNavigation: selectedDcmtInfos.length === 1, canNext: canNavigateHandler ? canNavigateHandler('next') : false, canPrev: canNavigateHandler ? canNavigateHandler('prev') : false, onNext: () => onNavigateHandler && onNavigateHandler('next'), onPrev: () => onNavigateHandler && onNavigateHandler('prev'), onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
|
|
1129
|
+
return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onTaskCreateRequest: onTaskCreateRequest, datagridUtility: datagridUtility, dcmtUtility: dcmtUtility }) }, `${index}-${dcmt.DID}`));
|
|
1096
1130
|
})] }), isOpenArchiveRelationForm && _jsx(TMDcmtForm, { isModal: true, titleModal: SDKUI_Localizator.Archive + ' - ' + (archiveType === 'detail' ? SDKUI_Localizator.DcmtsDetail : SDKUI_Localizator.DcmtsMaster), TID: archiveRelatedDcmtFormTID, layoutMode: LayoutModes.Ark, inputMids: archiveRelatedDcmtFormMids, showBackButton: false, allowButtonsRefs: false, onClose: () => {
|
|
1097
1131
|
setIsOpenArchiveRelationForm(false);
|
|
1098
1132
|
setArchiveType(undefined);
|