@topconsultnpm/sdkui-react 6.21.0-dev1.2 → 6.21.0-dev1.4
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/TMDcmtForm.js +1 -1
- package/lib/components/features/documents/TMFileUploader.d.ts +1 -1
- package/lib/components/features/documents/TMFileUploader.js +3 -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/components/features/search/TMSearch.d.ts +1 -0
- package/lib/components/features/search/TMSearch.js +2 -2
- package/lib/components/features/search/TMSearchResult.d.ts +1 -0
- package/lib/components/features/search/TMSearchResult.js +2 -1
- package/lib/hooks/useDocumentOperations.d.ts +1 -0
- package/lib/hooks/useDocumentOperations.js +44 -10
- 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;
|
|
@@ -1541,7 +1541,7 @@ const TMDcmtPreviewWrapper = ({ refreshPreviewTrigger, fromDTD, currentDcmt, lay
|
|
|
1541
1541
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
1542
1542
|
return (layoutMode === LayoutModes.Update ?
|
|
1543
1543
|
_jsx(TMDcmtPreview, { dcmtData: currentDcmt, isVisible: isVisible, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, isResizingActive: isResizingActive }, refreshPreviewTrigger) :
|
|
1544
|
-
_jsx(TMFileUploader, { fromDTD: fromDTD, onFileUpload: onFileUpload,
|
|
1544
|
+
_jsx(TMFileUploader, { fromDTD: fromDTD, onFileUpload: onFileUpload, openFileUploaderPdfEditor: openFileUploaderPdfEditor, onClose: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, isRequired: fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && dcmtFile === null, defaultBlob: dcmtFile, deviceType: deviceType, isResizingActive: isResizingActive, enableDragDropOverlay: panelVisibility['tmDcmtPreview'] && enableDragDropOverlay, onScanRequest: onScanRequest }));
|
|
1545
1545
|
};
|
|
1546
1546
|
const Ribbon = styled.div `
|
|
1547
1547
|
font-size: 0.85rem;
|
|
@@ -4,7 +4,7 @@ import { DcmtTypeDescriptor } from '@topconsultnpm/sdk-ts';
|
|
|
4
4
|
interface ITMFileUploader {
|
|
5
5
|
fromDTD?: DcmtTypeDescriptor;
|
|
6
6
|
onFileUpload?: (file: File | null) => void;
|
|
7
|
-
|
|
7
|
+
openFileUploaderPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void) => void;
|
|
8
8
|
onClose?: () => void;
|
|
9
9
|
onScanRequest?: (onFileScanned: (file: File) => void) => void;
|
|
10
10
|
isRequired?: boolean;
|
|
@@ -23,7 +23,7 @@ const isScannerLicenseConfigured = () => {
|
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
|
-
const TMFileUploader = ({ fromDTD, deviceType = DeviceType.DESKTOP, onClose, onFileUpload,
|
|
26
|
+
const TMFileUploader = ({ fromDTD, deviceType = DeviceType.DESKTOP, onClose, onFileUpload, openFileUploaderPdfEditor, onScanRequest, isRequired = false, defaultBlob = null, isResizingActive, showTMPanel = true, enableDragDropOverlay = false, showScannerIcon = true }) => {
|
|
27
27
|
const isBetaFeaturesEnabled = useBetaFeatures();
|
|
28
28
|
const [dragOver, setDragOver] = useState(false);
|
|
29
29
|
const [uploadedFile, setUploadedFile] = useState(defaultBlob);
|
|
@@ -101,11 +101,11 @@ const TMFileUploader = ({ fromDTD, deviceType = DeviceType.DESKTOP, onClose, onF
|
|
|
101
101
|
_jsx("div", { style: { backgroundColor: '#f6dbdb', padding: '5px 10px', borderRadius: 8, display: 'flex', alignItems: 'center', justifyContent: 'space-between', color: TMColors.error }, children: _jsxs("div", { children: [" ", 'Anteprima non disponibile.', fileExt && _jsx("b", { children: ` (*.${fileExt})` })] }) })] });
|
|
102
102
|
const innerContent = (_jsxs("div", { style: { width: '100%', height: '100%', padding: '2px', display: 'flex', flexDirection: 'column', gap: 10 }, children: [enableDragDropOverlay && _jsx(TMDragDropOverlay, { handleFile: handleFile, refocusAfterFileInput: refocusAfterFileInput }), content] }));
|
|
103
103
|
const toolbar = useMemo(() => {
|
|
104
|
-
return (_jsxs(_Fragment, { children: [(isPdfEditorAvailable(fromDTD, fileExt) &&
|
|
104
|
+
return (_jsxs(_Fragment, { children: [(isPdfEditorAvailable(fromDTD, fileExt) && openFileUploaderPdfEditor) && (_jsx(TMCommandsContextMenu, { target: "#TMPanel-FileUploader-Commands-Header", menuItems: [
|
|
105
105
|
{
|
|
106
106
|
icon: _jsx(IconEdit, {}),
|
|
107
107
|
text: 'PDF Editor',
|
|
108
|
-
onClick: () =>
|
|
108
|
+
onClick: () => openFileUploaderPdfEditor(fromDTD, uploadedFile, handleFile)
|
|
109
109
|
}
|
|
110
110
|
], showEvent: "click", children: _jsx(IconMenuVertical, { id: "TMPanel-FileUploader-Commands-Header", color: "white", cursor: "pointer" }) })), deviceType !== DeviceType.MOBILE && (_jsx(StyledHeaderIcon, { onClick: onClose, "$color": "white", children: _jsx(TMTooltip, { content: SDKUI_Localizator.Close, children: _jsx(IconCloseOutline, {}) }) }))] }));
|
|
111
111
|
}, [deviceType, fromDTD, onClose]);
|
|
@@ -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);
|
|
@@ -27,6 +27,7 @@ interface ITMSearchProps {
|
|
|
27
27
|
openS4TViewer?: boolean;
|
|
28
28
|
onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: (() => Promise<void>)) => void;
|
|
29
29
|
onOpenPdfEditorRequest?: ((dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void);
|
|
30
|
+
openFileUploaderPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void) => void;
|
|
30
31
|
showTodoDcmtForm?: boolean;
|
|
31
32
|
showToppyDraggableHelpCenter?: boolean;
|
|
32
33
|
toppyHelpCenterUsePortal?: boolean;
|
|
@@ -19,7 +19,7 @@ var TMSearchViews;
|
|
|
19
19
|
TMSearchViews[TMSearchViews["Search"] = 0] = "Search";
|
|
20
20
|
TMSearchViews[TMSearchViews["Result"] = 1] = "Result";
|
|
21
21
|
})(TMSearchViews || (TMSearchViews = {}));
|
|
22
|
-
const TMSearch = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, openInOffice, isVisible, inputTID, inputSqdID, inputMids, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, floatingActionConfig, onFileOpened, onRefreshAfterAddDcmtToFavs, onTaskCreateRequest, openWGsCopyMoveForm, editPdfForm = false, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, showTodoDcmtForm, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, passToArchiveCallback, onCurrentTIDChangedCallback, onlyShowSearchQueryPanel, onReferenceClick }) => {
|
|
22
|
+
const TMSearch = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, openInOffice, isVisible, inputTID, inputSqdID, inputMids, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, floatingActionConfig, onFileOpened, onRefreshAfterAddDcmtToFavs, onTaskCreateRequest, openWGsCopyMoveForm, editPdfForm = false, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, openFileUploaderPdfEditor, showTodoDcmtForm, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, passToArchiveCallback, onCurrentTIDChangedCallback, onlyShowSearchQueryPanel, onReferenceClick }) => {
|
|
23
23
|
const [allSQDs, setAllSQDs] = useState([]);
|
|
24
24
|
const [filteredByTIDSQDs, setFilteredByTIDSQDs] = useState([]);
|
|
25
25
|
const [currentSQD, setCurrentSQD] = useState();
|
|
@@ -258,7 +258,7 @@ const TMSearch = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTask
|
|
|
258
258
|
toolbarOptions: { icon: _jsx(IconSavedQuery, { fontSize: 24 }), visible: true, orderNumber: 4, isActive: allInitialPanelVisibility['TMSavedQuerySelector'] }
|
|
259
259
|
}
|
|
260
260
|
], [tmTreeSelectorElement, showSearchResults, tmRecentsManagerElement, tmSearchQueryPanelElement, tmSavedQuerySelectorElement, fromDTD, mruTIDs]);
|
|
261
|
-
return (_jsxs(_Fragment, { children: [showSearchResults ? _jsx(StyledMultiViewPanel, { "$isVisible": currentSearchView === TMSearchViews.Search, children: _jsx(TMPanelManagerWithPersistenceProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'TMRecentsManager', isPersistenceEnabled: !isMobile ? hasSavedLayout() : false, persistPanelStates: !isMobile ? (state) => persistPanelStates(state) : undefined, persistedPanelStates: getPersistedPanelStates(), children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", showToolbar: true, minPanelSizePx: !isMobile ? 250 : 150 }) }) }) : tmSearchQueryPanelElement, showSearchResults && _jsx(TMSearchResult, { isVisible: isVisible && currentSearchView === TMSearchViews.Result, context: SearchResultContext.METADATA_SEARCH, searchResults: searchResult, floatingActionConfig: floatingActionConfig, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, openInOffice: openInOffice, onRefreshSearchAsyncDatagrid: onRefreshSearchAsyncDatagrid, onClose: () => { onlyShowSearchQueryPanel ? setShowSearchResults(false) : setCurrentSearchView(TMSearchViews.Search); }, onFileOpened: onFileOpened, onTaskCreateRequest: onTaskCreateRequest, openWGsCopyMoveForm: openWGsCopyMoveForm, editPdfForm: editPdfForm, onOpenPdfEditorRequest: onOpenPdfEditorRequest, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, passToArchiveCallback: passToArchiveCallback, onSelectedTIDChanged: onCurrentTIDChangedCallback, showTodoDcmtForm: showTodoDcmtForm, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal, onReferenceClick: onReferenceClick, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers })] }));
|
|
261
|
+
return (_jsxs(_Fragment, { children: [showSearchResults ? _jsx(StyledMultiViewPanel, { "$isVisible": currentSearchView === TMSearchViews.Search, children: _jsx(TMPanelManagerWithPersistenceProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'TMRecentsManager', isPersistenceEnabled: !isMobile ? hasSavedLayout() : false, persistPanelStates: !isMobile ? (state) => persistPanelStates(state) : undefined, persistedPanelStates: getPersistedPanelStates(), children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", showToolbar: true, minPanelSizePx: !isMobile ? 250 : 150 }) }) }) : tmSearchQueryPanelElement, showSearchResults && _jsx(TMSearchResult, { isVisible: isVisible && currentSearchView === TMSearchViews.Result, context: SearchResultContext.METADATA_SEARCH, searchResults: searchResult, floatingActionConfig: floatingActionConfig, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, openInOffice: openInOffice, onRefreshSearchAsyncDatagrid: onRefreshSearchAsyncDatagrid, onClose: () => { onlyShowSearchQueryPanel ? setShowSearchResults(false) : setCurrentSearchView(TMSearchViews.Search); }, onFileOpened: onFileOpened, onTaskCreateRequest: onTaskCreateRequest, openWGsCopyMoveForm: openWGsCopyMoveForm, editPdfForm: editPdfForm, onOpenPdfEditorRequest: onOpenPdfEditorRequest, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, openFileUploaderPdfEditor: openFileUploaderPdfEditor, passToArchiveCallback: passToArchiveCallback, onSelectedTIDChanged: onCurrentTIDChangedCallback, showTodoDcmtForm: showTodoDcmtForm, showToppyDraggableHelpCenter: showToppyDraggableHelpCenter, toppyHelpCenterUsePortal: toppyHelpCenterUsePortal, onReferenceClick: onReferenceClick, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers })] }));
|
|
262
262
|
};
|
|
263
263
|
export default TMSearch;
|
|
264
264
|
const TMTreeSelectorWrapper = ({ isMobile, onSelectedTIDChanged }) => {
|
|
@@ -45,6 +45,7 @@ interface ITMSearchResultProps {
|
|
|
45
45
|
}>, tid?: number) => void;
|
|
46
46
|
onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
|
|
47
47
|
onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
|
|
48
|
+
openFileUploaderPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void) => void;
|
|
48
49
|
openCommentFormCallback?: (documents: Array<DcmtInfo>) => void;
|
|
49
50
|
openAddDocumentForm?: () => void;
|
|
50
51
|
allTasks?: Array<TaskDescriptor>;
|
|
@@ -56,7 +56,7 @@ groupId, searchResults = [], context = SearchResultContext.METADATA_SEARCH, titl
|
|
|
56
56
|
// Boolean flags to enable/disable features
|
|
57
57
|
isVisible = true, allowRelations = true, openDcmtFormAsModal = false, showSearchResultSidebar = true, showDcmtFormSidebar = true, showSelector = false, isClosable = false, allowFloatingBar = true, showToolbarHeader = true, showBackButton = true, disableAccordionIfSingleCategory = false, editPdfForm = false, openS4TViewer = false, showTodoDcmtForm = false, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, showNoDcmtFoundMessage = true, enablePinIcons = true,
|
|
58
58
|
// Callbacks (optional)
|
|
59
|
-
openInOffice, onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid, onSelectedTIDChanged, onWFOperationCompleted, onClose, onFileOpened, onTaskCreateRequest, openWGsCopyMoveForm, openCommentFormCallback, openAddDocumentForm, onOpenS4TViewerRequest, onOpenPdfEditorRequest, passToArchiveCallback, onReferenceClick,
|
|
59
|
+
openInOffice, onRefreshAfterAddDcmtToFavs, onRefreshSearchAsyncDatagrid, onSelectedTIDChanged, onWFOperationCompleted, onClose, onFileOpened, onTaskCreateRequest, openWGsCopyMoveForm, openCommentFormCallback, openAddDocumentForm, onOpenS4TViewerRequest, onOpenPdfEditorRequest, openFileUploaderPdfEditor, passToArchiveCallback, onReferenceClick,
|
|
60
60
|
// Tasks
|
|
61
61
|
allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback,
|
|
62
62
|
// Navigation
|
|
@@ -346,6 +346,7 @@ handleNavigateToWGs, handleNavigateToDossiers, }) => {
|
|
|
346
346
|
openWGsCopyMoveForm,
|
|
347
347
|
onOpenS4TViewerRequest,
|
|
348
348
|
onOpenPdfEditorRequest,
|
|
349
|
+
openFileUploaderPdfEditor,
|
|
349
350
|
// Task related
|
|
350
351
|
onTaskCreateRequest,
|
|
351
352
|
openTaskFormHandler,
|
|
@@ -86,6 +86,7 @@ export interface OperationCallbacks {
|
|
|
86
86
|
openWGsCopyMoveForm?: (mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void;
|
|
87
87
|
onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
|
|
88
88
|
onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: () => Promise<void>) => void;
|
|
89
|
+
openFileUploaderPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void) => void;
|
|
89
90
|
onTaskCreateRequest?: (taskContext: TaskContext, onTaskCreated?: (task?: TaskDescriptor) => void) => void;
|
|
90
91
|
openTaskFormHandler?: (onTaskCreated?: (task?: TaskDescriptor) => void) => void;
|
|
91
92
|
}
|
|
@@ -93,7 +93,7 @@ export const useDocumentOperations = (props) => {
|
|
|
93
93
|
// Navigation
|
|
94
94
|
canNavigateHandler, onNavigateHandler, handleNavigateToWGs, handleNavigateToDossiers, onReferenceClick,
|
|
95
95
|
// Document forms/operations
|
|
96
|
-
openAddDocumentForm, openCommentFormCallback, onFileOpened, passToArchiveCallback, openWGsCopyMoveForm, onOpenS4TViewerRequest, onOpenPdfEditorRequest,
|
|
96
|
+
openAddDocumentForm, openCommentFormCallback, onFileOpened, passToArchiveCallback, openWGsCopyMoveForm, onOpenS4TViewerRequest, onOpenPdfEditorRequest, openFileUploaderPdfEditor,
|
|
97
97
|
// Task related
|
|
98
98
|
onTaskCreateRequest, openTaskFormHandler, } = callbacks;
|
|
99
99
|
// Force recalculation of selectedDcmtInfos when refreshOperationsTrigger changes (e.g., after file substitution where FILEEXT may change)
|
|
@@ -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);
|
|
@@ -1104,7 +1138,7 @@ export const useDocumentOperations = (props) => {
|
|
|
1104
1138
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
1105
1139
|
setArchiveRelatedDcmtFormMids([]);
|
|
1106
1140
|
await onRefreshSearchAsyncDatagrid?.();
|
|
1107
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar }), showRelatedDcmtsChooser &&
|
|
1141
|
+
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar, openFileUploaderPdfEditor: openFileUploaderPdfEditor }), showRelatedDcmtsChooser &&
|
|
1108
1142
|
_jsx(TMChooserForm, { dataSource: relatedDcmtsChooserDataSource, onChoose: async (selectedRelation) => {
|
|
1109
1143
|
try {
|
|
1110
1144
|
setShowRelatedDcmtsChooser(false);
|