@topconsultnpm/sdkui-react 6.20.0-dev1.11 → 6.20.0-dev1.111
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/assets/Toppy-help-center.png +0 -0
- package/lib/assets/headergradient.svg +87 -0
- package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +285 -28
- package/lib/components/NewComponents/ContextMenu/hooks.d.ts +8 -1
- package/lib/components/NewComponents/ContextMenu/hooks.js +80 -8
- package/lib/components/NewComponents/ContextMenu/index.d.ts +3 -0
- package/lib/components/NewComponents/ContextMenu/index.js +2 -0
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +9 -1
- package/lib/components/NewComponents/ContextMenu/styles.js +157 -37
- package/lib/components/NewComponents/ContextMenu/types.d.ts +14 -1
- package/lib/components/NewComponents/ContextMenu/useLongPress.d.ts +21 -0
- package/lib/components/NewComponents/ContextMenu/useLongPress.js +112 -0
- package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +563 -112
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +21 -5
- package/lib/components/NewComponents/FloatingMenuBar/styles.js +210 -58
- package/lib/components/NewComponents/FloatingMenuBar/types.d.ts +8 -2
- package/lib/components/base/TMAccordionNew.js +35 -14
- package/lib/components/base/TMCustomButton.js +61 -17
- package/lib/components/base/TMDataGrid.d.ts +7 -4
- package/lib/components/base/TMDataGrid.js +153 -11
- package/lib/components/base/TMDropDownMenu.js +19 -18
- package/lib/components/base/TMFileManager.d.ts +4 -3
- package/lib/components/base/TMFileManager.js +32 -24
- package/lib/components/base/TMFileManagerDataGridView.d.ts +3 -2
- package/lib/components/base/TMFileManagerDataGridView.js +1 -11
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +7 -1
- package/lib/components/base/TMFileManagerThumbnailItems.js +5 -2
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +17 -4
- package/lib/components/base/TMFileManagerThumbnailsView.js +18 -6
- package/lib/components/base/TMFileManagerUtils.d.ts +0 -12
- package/lib/components/base/TMListView.js +33 -15
- package/lib/components/base/TMPanel.d.ts +1 -1
- package/lib/components/base/TMPanel.js +1 -1
- package/lib/components/base/TMTreeView.d.ts +2 -1
- package/lib/components/base/TMTreeView.js +33 -26
- package/lib/components/choosers/TMDistinctValues.js +2 -2
- package/lib/components/choosers/TMInvoiceRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMMetadataChooser.js +8 -1
- package/lib/components/choosers/TMOrderRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMUserChooser.d.ts +0 -5
- package/lib/components/choosers/TMUserChooser.js +25 -45
- package/lib/components/editors/TMDateBox.js +18 -9
- package/lib/components/editors/TMLocalizedTextBox.d.ts +3 -1
- package/lib/components/editors/TMLocalizedTextBox.js +16 -14
- package/lib/components/editors/TMMetadataTextBox.d.ts +9 -0
- package/lib/components/editors/TMMetadataTextBox.js +92 -0
- package/lib/components/editors/TMMetadataValues.js +23 -5
- package/lib/components/editors/TMTextArea.js +18 -30
- package/lib/components/editors/TMTextBox.d.ts +1 -1
- package/lib/components/editors/TMTextBox.js +6 -3
- package/lib/components/editors/TMTextExpression.js +6 -91
- package/lib/components/features/archive/TMArchive.js +2 -2
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +15 -0
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.js +460 -0
- package/lib/components/features/assistant/TMToppySpeechBubble.d.ts +11 -0
- package/lib/components/features/assistant/TMToppySpeechBubble.js +126 -0
- package/lib/components/features/documents/TMDcmtForm.d.ts +14 -2
- package/lib/components/features/documents/TMDcmtForm.js +457 -206
- package/lib/components/features/documents/TMDcmtPreview.js +44 -110
- package/lib/components/features/documents/TMDcmtTasks.js +9 -9
- package/lib/components/features/documents/TMMasterDetailDcmts.js +38 -53
- package/lib/components/features/documents/TMRelationViewer.d.ts +1 -1
- package/lib/components/features/documents/TMRelationViewer.js +2 -2
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +8 -0
- package/lib/components/features/search/{TMSearchResultCheckoutInfoForm.js → TMDcmtCheckoutInfoForm.js} +2 -2
- package/lib/components/features/search/TMSavedQuerySelector.js +72 -67
- package/lib/components/features/search/TMSearch.d.ts +3 -0
- package/lib/components/features/search/TMSearch.js +50 -11
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryPanel.js +29 -21
- package/lib/components/features/search/TMSearchResult.d.ts +3 -0
- package/lib/components/features/search/TMSearchResult.js +208 -250
- package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +3 -3
- package/lib/components/features/search/TMSearchResultsMenuItems.js +205 -169
- package/lib/components/features/search/TMSignSettingsForm.js +1 -1
- package/lib/components/features/search/TMSignatureInfoContent.d.ts +6 -0
- package/lib/components/features/search/TMSignatureInfoContent.js +140 -0
- package/lib/components/features/search/TMViewHistoryDcmt.js +2 -2
- package/lib/components/features/tasks/TMTaskForm.js +20 -1
- package/lib/components/features/tasks/TMTasksAgenda.d.ts +3 -1
- package/lib/components/features/tasks/TMTasksAgenda.js +48 -9
- package/lib/components/features/tasks/TMTasksCalendar.d.ts +2 -0
- package/lib/components/features/tasks/TMTasksCalendar.js +19 -7
- package/lib/components/features/tasks/TMTasksUtils.d.ts +2 -2
- package/lib/components/features/tasks/TMTasksUtils.js +43 -36
- package/lib/components/features/tasks/TMTasksView.js +28 -19
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +33 -2
- package/lib/components/features/workflow/TMWorkflowPopup.js +139 -34
- package/lib/components/features/workflow/diagram/DiagramItemComponent.d.ts +2 -0
- package/lib/components/features/workflow/diagram/DiagramItemComponent.js +12 -7
- package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
- package/lib/components/features/workflow/diagram/RecipientList.js +3 -2
- package/lib/components/features/workflow/diagram/WFDiagram.d.ts +4 -0
- package/lib/components/features/workflow/diagram/WFDiagram.js +164 -13
- package/lib/components/forms/Login/LoginValidatorService.d.ts +2 -0
- package/lib/components/forms/Login/LoginValidatorService.js +7 -2
- package/lib/components/forms/Login/TMLoginForm.js +34 -6
- package/lib/components/forms/TMChooserForm.js +1 -1
- package/lib/components/grids/TMBlogsPost.js +56 -31
- package/lib/components/grids/TMRecentsManager.js +20 -10
- package/lib/components/index.d.ts +6 -3
- package/lib/components/index.js +6 -3
- package/lib/components/query/TMQueryEditor.d.ts +2 -1
- package/lib/components/query/TMQueryEditor.js +92 -92
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/settings/SettingsAppearance.js +99 -30
- package/lib/components/sidebar/TMHeader.js +7 -7
- package/lib/components/sidebar/TMSidebar.d.ts +0 -1
- package/lib/components/sidebar/TMSidebar.js +16 -44
- package/lib/components/sidebar/TMSidebarItem.js +34 -17
- package/lib/components/viewers/TMDataListItemViewer.d.ts +2 -1
- package/lib/components/viewers/TMDataListItemViewer.js +35 -71
- package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +8 -0
- package/lib/components/viewers/TMDataUserIdItemViewer.js +39 -0
- package/lib/css/tm-sdkui.css +1 -1
- package/lib/helper/SDKUI_Globals.d.ts +22 -0
- package/lib/helper/SDKUI_Globals.js +10 -1
- package/lib/helper/SDKUI_Localizator.d.ts +17 -1
- package/lib/helper/SDKUI_Localizator.js +167 -1
- package/lib/helper/TMCommandsContextMenu.d.ts +4 -2
- package/lib/helper/TMCommandsContextMenu.js +15 -4
- package/lib/helper/TMIcons.d.ts +4 -0
- package/lib/helper/TMIcons.js +13 -3
- package/lib/helper/TMPdfViewer.d.ts +8 -0
- package/lib/helper/TMPdfViewer.js +373 -0
- package/lib/helper/checkinCheckoutManager.d.ts +31 -1
- package/lib/helper/checkinCheckoutManager.js +112 -30
- package/lib/helper/devextremeCustomMessages.d.ts +30 -0
- package/lib/helper/devextremeCustomMessages.js +30 -0
- package/lib/helper/helpers.d.ts +28 -1
- package/lib/helper/helpers.js +130 -3
- package/lib/helper/index.d.ts +2 -0
- package/lib/helper/index.js +2 -0
- package/lib/helper/queryHelper.d.ts +1 -1
- package/lib/helper/queryHelper.js +33 -3
- package/lib/helper/workItemsHelper.d.ts +6 -0
- package/lib/helper/workItemsHelper.js +230 -0
- package/lib/hooks/useCheckInOutOperations.d.ts +28 -0
- package/lib/hooks/useCheckInOutOperations.js +223 -0
- package/lib/hooks/useDataListItem.d.ts +12 -0
- package/lib/hooks/useDataListItem.js +132 -0
- package/lib/hooks/useDataUserIdItem.d.ts +10 -0
- package/lib/hooks/useDataUserIdItem.js +96 -0
- package/lib/hooks/useMetadataExpression.d.ts +19 -0
- package/lib/hooks/useMetadataExpression.js +99 -0
- package/lib/hooks/useSettingsFeedback.d.ts +11 -0
- package/lib/hooks/useSettingsFeedback.js +38 -0
- package/lib/hooks/useWorkflowApprove.d.ts +4 -0
- package/lib/hooks/useWorkflowApprove.js +14 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -2
- package/lib/services/platform_services.d.ts +3 -3
- package/lib/ts/types.d.ts +61 -1
- package/lib/utils/theme.d.ts +1 -1
- package/lib/utils/theme.js +1 -1
- package/package.json +7 -4
- package/lib/components/NewComponents/Notification/Notification.d.ts +0 -4
- package/lib/components/NewComponents/Notification/Notification.js +0 -60
- package/lib/components/NewComponents/Notification/NotificationContainer.d.ts +0 -8
- package/lib/components/NewComponents/Notification/NotificationContainer.js +0 -33
- package/lib/components/NewComponents/Notification/index.d.ts +0 -2
- package/lib/components/NewComponents/Notification/index.js +0 -2
- package/lib/components/NewComponents/Notification/styles.d.ts +0 -21
- package/lib/components/NewComponents/Notification/styles.js +0 -180
- package/lib/components/NewComponents/Notification/types.d.ts +0 -18
- package/lib/components/NewComponents/Notification/types.js +0 -1
- package/lib/components/base/TMContextMenu.d.ts +0 -25
- package/lib/components/base/TMContextMenu.js +0 -109
- package/lib/components/base/TMContextMenuOLD.d.ts +0 -26
- package/lib/components/base/TMContextMenuOLD.js +0 -56
- package/lib/components/base/TMFloatingToolbar.d.ts +0 -9
- package/lib/components/base/TMFloatingToolbar.js +0 -101
- package/lib/components/features/assistant/ToppyDraggableHelpCenter.d.ts +0 -30
- package/lib/components/features/assistant/ToppyDraggableHelpCenter.js +0 -482
- package/lib/components/features/assistant/ToppySpeechBubble.d.ts +0 -9
- package/lib/components/features/assistant/ToppySpeechBubble.js +0 -117
- package/lib/components/features/search/TMSearchResultCheckoutInfoForm.d.ts +0 -8
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import TMDcmtPreview from './TMDcmtPreview';
|
|
4
|
-
import { AccessLevels, ArchiveConstraints, ArchiveEngineByID, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataTypes, ObjectClasses, ResultTypes, SDK_Globals, SDK_Localizator, SystemMIDsAsNumber, SystemTIDs, Task_States,
|
|
5
|
-
import { ContextMenu } from 'devextreme-react';
|
|
4
|
+
import { AccessLevels, ArchiveConstraints, ArchiveEngineByID, DcmtTypeListCacheService, LayoutCacheService, LayoutModes, MetadataDataTypes, ObjectClasses, ResultTypes, SDK_Globals, SDK_Localizator, SystemMIDsAsNumber, SystemTIDs, Task_States, TID_DID, UpdateEngineByID, UserListCacheService, ValidationItem, WorkflowCacheService, WorkItemMetadataNames } from '@topconsultnpm/sdk-ts';
|
|
6
5
|
import { WorkFlowApproveRejectPopUp, WorkFlowMoreInfoPopUp, WorkFlowOperationButtons, WorkFlowReAssignPopUp } from '../workflow/TMWorkflowPopup';
|
|
7
6
|
import { DownloadTypes, FormModes, DcmtOperationTypes } from '../../../ts';
|
|
8
7
|
import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
9
8
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
10
9
|
import { useRelatedDocuments } from '../../../hooks/useRelatedDocuments';
|
|
11
10
|
import { getWorkItemSetIDAsync, handleArchiveVisibility, searchResultToMetadataValues } from '../../../helper/queryHelper';
|
|
12
|
-
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts,
|
|
11
|
+
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare, IconCheck, IconActivity, TMImageLibrary, IconStar, IconRelation, IconInfo, IconArchiveDoc, IconDelete, IconPair, IconUnpair, IconArchiveMaster, IconArchiveDetail, getExceptionMessage, isApprovalWorkflowView, getDcmtCicoStatus, IconFileDots, IconCustom, buildWorkItemsFromWFCtrl } from '../../../helper';
|
|
13
12
|
import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
|
|
14
13
|
import { Gutters, TMColors } from '../../../utils/theme';
|
|
15
14
|
import { StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
|
|
@@ -41,10 +40,31 @@ import TMDcmtTasks from './TMDcmtTasks';
|
|
|
41
40
|
import TMToppyMessage from '../../../helper/TMToppyMessage';
|
|
42
41
|
import { getTaskAssignedToMe } from '../tasks/TMTasksUtils';
|
|
43
42
|
import TMCustomButton from '../../base/TMCustomButton';
|
|
44
|
-
import
|
|
43
|
+
import { useCheckInOutOperations } from '../../../hooks/useCheckInOutOperations';
|
|
44
|
+
import TMViewHistoryDcmt from '../search/TMViewHistoryDcmt';
|
|
45
|
+
import TMDcmtCheckoutInfoForm from '../search/TMDcmtCheckoutInfoForm';
|
|
46
|
+
import styled from 'styled-components';
|
|
47
|
+
import { ContextMenu } from '../../NewComponents/ContextMenu';
|
|
48
|
+
import TMToppyDraggableHelpCenter from '../assistant/TMToppyDraggableHelpCenter';
|
|
49
|
+
//#region Interfaces, Types and Enums
|
|
50
|
+
/**
|
|
51
|
+
* Definisce il contesto da cui è stato invocato il TMDcmtForm.
|
|
52
|
+
* Permette di gestire logiche diverse in base alla provenienza.
|
|
53
|
+
*/
|
|
54
|
+
export var InvocationContext;
|
|
55
|
+
(function (InvocationContext) {
|
|
56
|
+
/** Invocazione standard */
|
|
57
|
+
InvocationContext["Default"] = "default";
|
|
58
|
+
/** Invocato dalla pagina Todo/Task */
|
|
59
|
+
InvocationContext["Todo"] = "todo";
|
|
60
|
+
/** Invocato dalla pagina WorkflowCtrl */
|
|
61
|
+
InvocationContext["WorkflowCtrl"] = "workflowCtrl";
|
|
62
|
+
// Aggiungi qui altri contesti futuri secondo necessità
|
|
63
|
+
})(InvocationContext || (InvocationContext = {}));
|
|
45
64
|
let abortControllerLocal = new AbortController();
|
|
46
65
|
//#endregion
|
|
47
|
-
const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, showBackButton = true, onClose, onSavedAsyncCallback, TID, DID, formMode = FormModes.Update, canNext, canPrev, count, itemIndex, onNext, onPrev, allowNavigation = true, allowRelations = true, isClosable = false, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, showDcmtFormSidebar = true,
|
|
66
|
+
const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, showHeader = true, onSaveRecents, layoutMode = LayoutModes.Update, showBackButton = true, onClose, onSavedAsyncCallback, TID, DID, formMode = FormModes.Update, canNext, canPrev, count, itemIndex, onNext, onPrev, allowNavigation = true, allowRelations = true, isClosable = false, isExpertMode = SDKUI_Globals.userSettings.advancedSettings.expertMode === 1, showDcmtFormSidebar = true, invocationContext = InvocationContext.Default, titleModal, isModal = false, widthModal = "100%", heightModal = "100%", groupId, onWFOperationCompleted, onTaskCompleted, onTaskCreateRequest, inputFile = null, taskFormDialogComponent, moreInfoTasks, connectorFileSave = undefined, inputMids = [], openS4TViewer = false, onOpenS4TViewerRequest, s4TViewerDialogComponent, enableDragDropOverlay = false, passToSearch, isSharedDcmt = false, sharedSourceTID, sharedSourceDID, allowButtonsRefs = false, onReferenceClick, }) => {
|
|
67
|
+
const { showHistory, showHistoryCallback, hideHistoryCallback, showCheckoutInformationForm, commentFormState, hideCommentFormCallback, showCheckoutInformationFormCallback, hideCheckoutInformationFormCallback, copyCheckoutPathToClipboardCallback, handleCheckOutCallback, handleCheckInCallback, refreshPreviewTrigger, showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, } = useCheckInOutOperations();
|
|
48
68
|
const [id, setID] = useState('');
|
|
49
69
|
const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
|
|
50
70
|
const [waitPanelTitleLocal, setWaitPanelTitleLocal] = useState('');
|
|
@@ -68,6 +88,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
68
88
|
const [layout, setLayout] = useState();
|
|
69
89
|
const [customButtonsLayout, setCustomButtonsLayout] = useState();
|
|
70
90
|
const [customButton, setCustomButton] = useState();
|
|
91
|
+
const [allUsers, setAllUsers] = useState([]);
|
|
71
92
|
const appliedInputMidsRef = useRef(null);
|
|
72
93
|
// Refs per evitare stale closure nei callback
|
|
73
94
|
// I useCallback catturano i valori delle dipendenze al momento della creazione.
|
|
@@ -91,6 +112,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
91
112
|
const [fetchError, setFetchError] = useState(false);
|
|
92
113
|
const [isWFDataLoading, setIsWFDataLoading] = useState(false);
|
|
93
114
|
const [workItems, setWorkItems] = useState([]);
|
|
115
|
+
const [workItemsForDiagram, setWorkItemsForDiagram] = useState([]);
|
|
94
116
|
const [workflows, setWorkflows] = useState([]);
|
|
95
117
|
const [showCommentForm, setShowCommentForm] = useState(false);
|
|
96
118
|
const [isInitialLoading, setIsInitialLoading] = useState(true);
|
|
@@ -98,16 +120,24 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
98
120
|
const [dcmtReferences, setDcmtReferences] = useState(undefined);
|
|
99
121
|
// Stato per triggerare il refresh del blog dall'esterno
|
|
100
122
|
const [refreshBlogTrigger, setRefreshBlogTrigger] = useState(0);
|
|
123
|
+
const [wfError, setWfError] = useState(null);
|
|
101
124
|
const triggerBlogRefresh = useCallback(async () => {
|
|
102
125
|
setRefreshBlogTrigger(prev => prev + 1);
|
|
103
126
|
}, []);
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
const fetchAllUsers = async () => {
|
|
129
|
+
const users = await UserListCacheService.GetAllAsync();
|
|
130
|
+
setAllUsers(users ?? []);
|
|
131
|
+
};
|
|
132
|
+
fetchAllUsers();
|
|
133
|
+
}, []);
|
|
104
134
|
useEffect(() => {
|
|
105
135
|
if (!allowButtonsRefs)
|
|
106
136
|
setDcmtReferences(undefined);
|
|
107
137
|
}, [allowButtonsRefs]);
|
|
108
138
|
const { openConfirmAttachmentsDialog, ConfirmAttachmentsDialog } = useInputAttachmentsDialog();
|
|
109
139
|
const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, runOperationAsync } = useDcmtOperations();
|
|
110
|
-
const { workflowApproveData } = useWorkflowApprove();
|
|
140
|
+
const { workflowApproveData, getWorkItemsByDID } = useWorkflowApprove();
|
|
111
141
|
const currentSearchResults = useMemo(() => {
|
|
112
142
|
if (!formData || formData.length === 0 || !TID || !DID)
|
|
113
143
|
return [];
|
|
@@ -124,7 +154,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
124
154
|
selectMIDs: selectMIDs,
|
|
125
155
|
dtdResult: {
|
|
126
156
|
rows: [rowValues],
|
|
127
|
-
columns: selectMIDs.map(mid => ({ name: `MID_${mid}
|
|
157
|
+
columns: selectMIDs.map(mid => ({ name: `MID_${mid}`, }))
|
|
128
158
|
},
|
|
129
159
|
dcmtsFound: 1,
|
|
130
160
|
dcmtsReturned: 1
|
|
@@ -242,7 +272,6 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
242
272
|
}
|
|
243
273
|
// Carica DTD e metadata
|
|
244
274
|
let dtd = await DcmtTypeListCacheService.GetWithNotGrantedAsync(TID, DID, getMetadataResult);
|
|
245
|
-
console.log('GetWithNotGrantedAsync DTD:', dtd);
|
|
246
275
|
setFromDTD(dtd);
|
|
247
276
|
if (layoutMode === LayoutModes.Update || (layoutMode === LayoutModes.Ark && DID)) {
|
|
248
277
|
await setMetadataList(dtd?.metadata ?? [], getMetadataResult);
|
|
@@ -411,74 +440,173 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
411
440
|
const workItemSetIDValue = useMemo(() => formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [formData]);
|
|
412
441
|
// Valore derivato: true se formData ha elementi validi
|
|
413
442
|
const hasFormData = useMemo(() => formData.length > 0 && formData.some(md => md.mid && md.mid > 99), [formData]);
|
|
443
|
+
const handleCheckOutOperationCallback = async (checkout) => {
|
|
444
|
+
if (!currentDcmt)
|
|
445
|
+
return;
|
|
446
|
+
await handleCheckOutCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt }, checkout, fromDTD?.name ?? SDKUI_Localizator.SearchResult, downloadDcmtsAsync, updateCurrentDcmt);
|
|
447
|
+
};
|
|
448
|
+
const handleCheckInOperationCallback = async () => {
|
|
449
|
+
if (!currentDcmt)
|
|
450
|
+
return;
|
|
451
|
+
await handleCheckInCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt, fileName: fromDTD?.name ?? SDKUI_Localizator.SearchResult }, updateCurrentDcmt, undefined);
|
|
452
|
+
};
|
|
453
|
+
const copyCheckoutPathToClipboardOperationCallback = () => {
|
|
454
|
+
if (!currentDcmt)
|
|
455
|
+
return;
|
|
456
|
+
copyCheckoutPathToClipboardCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt }, fromDTD?.name ?? SDKUI_Localizator.SearchResult);
|
|
457
|
+
};
|
|
458
|
+
// useEffect per il caricamento dei dati del workflow
|
|
414
459
|
useEffect(() => {
|
|
460
|
+
// Funzione helper per caricare le informazioni del workflow
|
|
461
|
+
const loadWorkflowInfo = async (tid) => {
|
|
462
|
+
await WorkflowCacheService.GetWFInfoAsync(tid)
|
|
463
|
+
.then((result) => {
|
|
464
|
+
if (result) {
|
|
465
|
+
setWorkflows([result]);
|
|
466
|
+
setWfError(null);
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
setWorkflows([]);
|
|
470
|
+
setWfError("Workflow info not found");
|
|
471
|
+
}
|
|
472
|
+
})
|
|
473
|
+
.catch(error => {
|
|
474
|
+
setWorkflows([]);
|
|
475
|
+
console.log("Error fetching workflow info:", error);
|
|
476
|
+
setWfError(getExceptionMessage(error));
|
|
477
|
+
});
|
|
478
|
+
};
|
|
415
479
|
const loadAllWfData = async () => {
|
|
416
|
-
|
|
480
|
+
// FASE 1: Validazione prerequisiti
|
|
481
|
+
if (layoutMode !== LayoutModes.Update || !DID) {
|
|
417
482
|
setWorkItems([]);
|
|
418
483
|
setWorkflows([]);
|
|
419
484
|
return;
|
|
420
485
|
}
|
|
421
486
|
setIsWFDataLoading(true);
|
|
422
487
|
try {
|
|
423
|
-
//
|
|
424
|
-
const itemsToProcess =
|
|
425
|
-
|
|
426
|
-
for (const dataRow of workflow.dtdResult?.rows ?? []) {
|
|
427
|
-
const did = Number(dataRow?.[1]);
|
|
428
|
-
if (did === Number(DID)) {
|
|
429
|
-
const tid = Number(dataRow?.[0]);
|
|
430
|
-
itemsToProcess.push({ tid, did });
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
}
|
|
488
|
+
// FASE 2: Raccolta work items: array di tutti i possibili work items che matchano il DID corrente
|
|
489
|
+
const itemsToProcess = getWorkItemsByDID(Number(DID));
|
|
490
|
+
// Se non ci sono work items per questo DID, resetta e esci
|
|
434
491
|
if (itemsToProcess.length === 0) {
|
|
435
492
|
setWorkItems([]);
|
|
436
493
|
setWorkflows([]);
|
|
437
494
|
setIsWFDataLoading(false);
|
|
438
495
|
return;
|
|
439
496
|
}
|
|
440
|
-
//
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
497
|
+
// FASE 3: Ricerca work item specifico
|
|
498
|
+
// Cerca prima un match esatto con TID e DID correnti
|
|
499
|
+
const foundItem = itemsToProcess.find(item => item.tid === Number(TID) && item.did === Number(DID));
|
|
500
|
+
if (foundItem) {
|
|
501
|
+
// SCENARIO A: Match esatto trovato (TID e DID corrispondono)
|
|
502
|
+
// Il documento corrente è esattamente il work item nel workflow
|
|
503
|
+
let setID = undefined;
|
|
504
|
+
// Prova a usare il setID già presente nei metadati (più veloce)
|
|
505
|
+
if (workItemSetIDValue !== undefined) {
|
|
506
|
+
setID = workItemSetIDValue;
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
// Altrimenti caricalo dal server
|
|
510
|
+
setID = await getWorkItemSetIDAsync(foundItem.tid, foundItem.did);
|
|
511
|
+
}
|
|
512
|
+
// Imposta un singolo work item con il setID caricato
|
|
513
|
+
setWorkItems([{
|
|
514
|
+
wid: `${foundItem.tid}_${foundItem.did}`,
|
|
515
|
+
tid: foundItem.tid,
|
|
516
|
+
did: foundItem.did,
|
|
517
|
+
setID: setID,
|
|
518
|
+
details: []
|
|
519
|
+
}]);
|
|
520
|
+
// Carica le informazioni complete del workflow
|
|
521
|
+
await loadWorkflowInfo(foundItem.tid);
|
|
445
522
|
}
|
|
446
523
|
else {
|
|
447
|
-
//
|
|
448
|
-
|
|
524
|
+
// SCENARIO B: Nessun match esatto, cerca solo per DID
|
|
525
|
+
const itemsByDID = itemsToProcess.filter(item => item.did === Number(DID));
|
|
526
|
+
if (itemsByDID.length === 1) {
|
|
527
|
+
// SCENARIO B.1: Un solo item trovato per DID
|
|
528
|
+
// Situazione sicura: sappiamo esattamente quale work item usare
|
|
529
|
+
const singleItem = itemsByDID[0];
|
|
530
|
+
let setID;
|
|
531
|
+
// Carica il setID (da cache o da server)
|
|
532
|
+
if (workItemSetIDValue !== undefined) {
|
|
533
|
+
setID = workItemSetIDValue;
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
setID = await getWorkItemSetIDAsync(singleItem.tid, singleItem.did);
|
|
537
|
+
}
|
|
538
|
+
setWorkItems([{
|
|
539
|
+
wid: `${singleItem.tid}_${singleItem.did}`,
|
|
540
|
+
tid: singleItem.tid,
|
|
541
|
+
did: singleItem.did,
|
|
542
|
+
setID: setID,
|
|
543
|
+
details: []
|
|
544
|
+
}]);
|
|
545
|
+
// Carica le informazioni del workflow
|
|
546
|
+
await loadWorkflowInfo(singleItem.tid);
|
|
547
|
+
}
|
|
548
|
+
else if (itemsByDID.length > 1) {
|
|
549
|
+
// SCENARIO B.2: Più item trovati per lo stesso DID
|
|
550
|
+
// Ambiguità: lo stesso documento appare in più workflow diversi
|
|
551
|
+
const finalWorkItems = itemsByDID.map((item, index) => ({
|
|
552
|
+
wid: `${item.tid}_${item.did}_${index}`,
|
|
553
|
+
tid: item.tid,
|
|
554
|
+
did: item.did,
|
|
555
|
+
setID: undefined,
|
|
556
|
+
details: []
|
|
557
|
+
}));
|
|
558
|
+
setWorkItems(finalWorkItems);
|
|
559
|
+
setWorkflows([]); // Non carichiamo il workflow in caso di ambiguità
|
|
560
|
+
}
|
|
449
561
|
}
|
|
450
|
-
// Crea un array di Promise per tutte le chiamate a GetWFInfoAsync
|
|
451
|
-
const workflowInfoPromises = itemsToProcess.map(item => WorkflowCacheService.GetWFInfoAsync(item.tid));
|
|
452
|
-
// Esegui tutte le chiamate in parallelo e attendi i risultati
|
|
453
|
-
const setIDResults = await Promise.all(setIDPromises);
|
|
454
|
-
const workflowInfoResults = await Promise.all(workflowInfoPromises);
|
|
455
|
-
// Combina i risultati
|
|
456
|
-
const finalWorkItems = itemsToProcess.map((item, index) => ({
|
|
457
|
-
...item,
|
|
458
|
-
setID: setIDResults[index],
|
|
459
|
-
}));
|
|
460
|
-
const validWorkflows = workflowInfoResults.filter(Boolean);
|
|
461
|
-
// Aggiorna lo stato una sola volta con i dati finali
|
|
462
|
-
setWorkItems(finalWorkItems);
|
|
463
|
-
setWorkflows(validWorkflows);
|
|
464
562
|
}
|
|
465
563
|
catch (error) {
|
|
564
|
+
// FASE 4: Gestione errori
|
|
466
565
|
TMExceptionBoxManager.show({ exception: error });
|
|
467
566
|
setWorkItems([]);
|
|
468
567
|
setWorkflows([]);
|
|
469
568
|
}
|
|
470
569
|
finally {
|
|
570
|
+
// Garantisce sempre il reset del flag di loading
|
|
471
571
|
setIsWFDataLoading(false);
|
|
472
572
|
}
|
|
473
573
|
};
|
|
474
|
-
// Usa hasFormData invece di formDataRef.current
|
|
475
574
|
if (!hasFormData || !fromDTD?.id) {
|
|
476
|
-
// console.log("formData is empty or fromDTD not loaded, skipping loadAllWfData");
|
|
477
575
|
return;
|
|
478
576
|
}
|
|
479
577
|
if (workItemSetIDValue !== undefined || workflowApproveData.length > 0)
|
|
480
578
|
loadAllWfData();
|
|
481
|
-
}, [hasFormData, workItemSetIDValue, workflowApproveData, DID, layoutMode, fromDTD?.templateTID, fromDTD?.id]);
|
|
579
|
+
}, [hasFormData, workItemSetIDValue, workflowApproveData, getWorkItemsByDID, TID, DID, layoutMode, fromDTD?.templateTID, fromDTD?.id]);
|
|
580
|
+
// useEffect per costruire workItemsForDiagram quando l'utente è autorizzato a vedere il diagramma
|
|
581
|
+
useEffect(() => {
|
|
582
|
+
const buildWorkItemsForDiagram = async () => {
|
|
583
|
+
// Verifica se l'utente è autorizzato (ha accesso al diagramma)
|
|
584
|
+
const isAuthorized = !!workflows?.[0]?.diagram;
|
|
585
|
+
if (!isAuthorized || workItems.length === 0) {
|
|
586
|
+
setWorkItemsForDiagram([]);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
try {
|
|
590
|
+
// Costruisci WFInstanceDescriptor dai dati disponibili
|
|
591
|
+
const wfInstance = {
|
|
592
|
+
wfid: workflows[0].id,
|
|
593
|
+
tid: workflows[0].mtid,
|
|
594
|
+
did: DID ? Number(DID) : 0,
|
|
595
|
+
instanceId: undefined,
|
|
596
|
+
rowIndex: 0,
|
|
597
|
+
values: []
|
|
598
|
+
};
|
|
599
|
+
// Chiama buildWorkItemsFromWFCtrl per ottenere i workItems completi
|
|
600
|
+
const detailedWorkItems = await buildWorkItemsFromWFCtrl(wfInstance);
|
|
601
|
+
setWorkItemsForDiagram(detailedWorkItems);
|
|
602
|
+
}
|
|
603
|
+
catch (error) {
|
|
604
|
+
console.error('Errore durante la costruzione dei work items per il diagramma:', error);
|
|
605
|
+
setWorkItemsForDiagram([]);
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
buildWorkItemsForDiagram();
|
|
609
|
+
}, [workflows, workItems]);
|
|
482
610
|
const getSelectionDcmtInfo = useCallback(() => {
|
|
483
611
|
let dcmts = [];
|
|
484
612
|
dcmts.push({ TID: TID ?? 0, DID: DID ?? 0 });
|
|
@@ -504,12 +632,30 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
504
632
|
const isSysMetadataDisabled = useMemo(() => layoutMode !== LayoutModes.Update, [layoutMode]);
|
|
505
633
|
const isDetailsDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
|
|
506
634
|
const isMasterDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
|
|
507
|
-
const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || workItems.length <= 0, [layoutMode, fetchError, workItems.length]);
|
|
635
|
+
const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || (workItems.length <= 0 && workItemsForDiagram.length <= 0), [layoutMode, fetchError, workItems.length, workItemsForDiagram.length]);
|
|
508
636
|
const showToppyForApprove = useMemo(() => layoutMode === LayoutModes.Update && !fetchError && workItems.length > 0 && !isOpenDetails && !isOpenMaster, [layoutMode, fetchError, workItems.length, isOpenDetails, isOpenMaster]);
|
|
509
|
-
const showToppyForCompleteMoreInfo = useMemo(() =>
|
|
510
|
-
|
|
637
|
+
const showToppyForCompleteMoreInfo = useMemo(() => {
|
|
638
|
+
if (layoutMode !== LayoutModes.Update || !moreInfoTasks) {
|
|
639
|
+
return false;
|
|
640
|
+
}
|
|
641
|
+
return moreInfoTasks.some(task => isTaskMoreInfo(task.name) &&
|
|
642
|
+
task.state !== Task_States.Completed);
|
|
643
|
+
}, [layoutMode, moreInfoTasks]);
|
|
644
|
+
const showToppyForReferences = useMemo(() => {
|
|
645
|
+
if (!allowButtonsRefs || layoutMode !== LayoutModes.Update || isOpenDetails || isOpenMaster)
|
|
646
|
+
return false;
|
|
647
|
+
if (!dcmtReferences || dcmtReferences.length === 0)
|
|
648
|
+
return false;
|
|
649
|
+
// Verifica che ci siano riferimenti renderizzabili (solo Dossier o WorkingGroup)
|
|
650
|
+
return dcmtReferences.some(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup);
|
|
651
|
+
}, [allowButtonsRefs, layoutMode, dcmtReferences, isOpenDetails, isOpenMaster]);
|
|
652
|
+
const isToppyVisible = useMemo(() => Boolean((showToppyForApprove || showToppyForCompleteMoreInfo || showToppyForReferences) && !openS4TViewer), [showToppyForApprove, showToppyForCompleteMoreInfo, showToppyForReferences, openS4TViewer]);
|
|
511
653
|
const isMobile = useMemo(() => deviceType === DeviceType.MOBILE, [deviceType]);
|
|
512
|
-
const isApprView = useMemo(() =>
|
|
654
|
+
const isApprView = useMemo(() => {
|
|
655
|
+
if (!fromDTD)
|
|
656
|
+
return false;
|
|
657
|
+
return isApprovalWorkflowView(fromDTD);
|
|
658
|
+
}, [fromDTD?.id]);
|
|
513
659
|
const workitemSetID = useMemo(() => workItems.find(o => o.did === Number(DID))?.setID || formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [workItems, DID, formData]);
|
|
514
660
|
const approvalVID = useMemo(() => workItems.length > 0 ? Number(workItems[0].tid) : -1, [workItems]);
|
|
515
661
|
//here
|
|
@@ -517,23 +663,20 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
517
663
|
const items = [];
|
|
518
664
|
const operationsItems = [];
|
|
519
665
|
operationsItems.push({
|
|
520
|
-
icon:
|
|
521
|
-
operationType: 'singleRow',
|
|
666
|
+
icon: _jsx(IconDownload, {}),
|
|
522
667
|
disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes,
|
|
523
|
-
|
|
668
|
+
name: SDKUI_Localizator.DownloadFile,
|
|
524
669
|
onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Dcmt, "download", undefined, undefined, true)
|
|
525
670
|
}, {
|
|
526
|
-
icon:
|
|
527
|
-
operationType: 'singleRow',
|
|
671
|
+
icon: _jsx(IconDownload, {}),
|
|
528
672
|
disabled: !isXMLFileExt(currentDcmt?.fileExt),
|
|
529
|
-
|
|
673
|
+
name: SDKUI_Localizator.DownloadXMLAttachments,
|
|
530
674
|
onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Attachment, "download", undefined, openConfirmAttachmentsDialog, true)
|
|
531
675
|
});
|
|
532
676
|
if (layoutMode === LayoutModes.Update && DID) {
|
|
533
677
|
operationsItems.push({
|
|
534
|
-
icon:
|
|
535
|
-
|
|
536
|
-
operationType: 'singleRow',
|
|
678
|
+
icon: _jsx(IconStar, {}),
|
|
679
|
+
name: SDKUI_Localizator.AddTo + ' ' + SDKUI_Localizator.Favorites,
|
|
537
680
|
disabled: false,
|
|
538
681
|
onClick: async () => {
|
|
539
682
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.AddToFavs);
|
|
@@ -542,17 +685,17 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
542
685
|
}
|
|
543
686
|
if (onTaskCreateRequest && layoutMode === LayoutModes.Update && DID) {
|
|
544
687
|
operationsItems.push({
|
|
545
|
-
icon:
|
|
546
|
-
|
|
547
|
-
operationType: 'singleRow',
|
|
688
|
+
icon: _jsx(IconActivity, {}),
|
|
689
|
+
name: SDKUI_Localizator.CreateContextualTask,
|
|
548
690
|
disabled: false,
|
|
549
691
|
onClick: () => {
|
|
550
692
|
const dcmt = getDcmts()[0];
|
|
693
|
+
const name = `${fromDTD?.name ?? '-'} (DID: ${dcmt.DID})`;
|
|
551
694
|
const taskContext = {
|
|
552
695
|
document: {
|
|
553
696
|
tid: dcmt.TID,
|
|
554
697
|
did: dcmt.DID,
|
|
555
|
-
name:
|
|
698
|
+
name: name
|
|
556
699
|
}
|
|
557
700
|
};
|
|
558
701
|
onTaskCreateRequest(taskContext);
|
|
@@ -561,76 +704,106 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
561
704
|
}
|
|
562
705
|
if (operationsItems.length > 0) {
|
|
563
706
|
items.push({
|
|
564
|
-
icon:
|
|
565
|
-
|
|
566
|
-
|
|
707
|
+
icon: _jsx(IconCheck, {}),
|
|
708
|
+
name: SDKUI_Localizator.DocumentOperations,
|
|
709
|
+
submenu: operationsItems
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
if (fromDTD?.id !== SystemTIDs.Drafts) {
|
|
713
|
+
// Check in/Check out menu
|
|
714
|
+
const { cicoEnabled, checkoutStatus } = getDcmtCicoStatus(formData, allUsers, fromDTD);
|
|
715
|
+
items.push({
|
|
716
|
+
icon: _jsx(IconFileDots, {}),
|
|
717
|
+
name: "Check in/Check out",
|
|
718
|
+
disabled: false,
|
|
719
|
+
submenu: [
|
|
720
|
+
{
|
|
721
|
+
name: 'Check out',
|
|
722
|
+
disabled: !cicoEnabled || checkoutStatus.isCheckedOut,
|
|
723
|
+
onClick: () => handleCheckOutOperationCallback(true),
|
|
724
|
+
},
|
|
725
|
+
{
|
|
726
|
+
name: 'Check in',
|
|
727
|
+
onClick: () => handleCheckInOperationCallback(),
|
|
728
|
+
disabled: !cicoEnabled || !checkoutStatus.isCheckedOut || checkoutStatus.mode === 'lockMode'
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
name: SDKUI_Localizator.CancelCheckOut,
|
|
732
|
+
disabled: !cicoEnabled || !checkoutStatus.isCheckedOut || checkoutStatus.mode === 'lockMode',
|
|
733
|
+
onClick: () => handleCheckOutOperationCallback(false),
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
name: SDKUI_Localizator.CheckoutInfo,
|
|
737
|
+
onClick: showCheckoutInformationFormCallback,
|
|
738
|
+
disabled: !checkoutStatus.isCheckedOut
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
name: SDKUI_Localizator.CopyCheckoutPath,
|
|
742
|
+
onClick: copyCheckoutPathToClipboardOperationCallback,
|
|
743
|
+
disabled: !checkoutStatus.isCheckedOut
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
name: SDKUI_Localizator.History,
|
|
747
|
+
disabled: !cicoEnabled,
|
|
748
|
+
onClick: showHistoryCallback,
|
|
749
|
+
},
|
|
750
|
+
]
|
|
567
751
|
});
|
|
568
752
|
}
|
|
569
753
|
if (allowRelations && layoutMode === LayoutModes.Update && DID) {
|
|
570
754
|
const relationsItems = [
|
|
571
755
|
{
|
|
572
|
-
icon:
|
|
573
|
-
|
|
574
|
-
operationType: 'singleRow',
|
|
756
|
+
icon: _jsx(IconPair, {}),
|
|
757
|
+
name: SDKUI_Localizator.MatchManyDocumentsManyToMany,
|
|
575
758
|
disabled: !hasManyToManyRelation,
|
|
576
759
|
onClick: async () => await pairManyToMany?.(true)
|
|
577
760
|
},
|
|
578
761
|
{
|
|
579
|
-
icon:
|
|
580
|
-
|
|
581
|
-
operationType: 'singleRow',
|
|
762
|
+
icon: _jsx(IconUnpair, {}),
|
|
763
|
+
name: SDKUI_Localizator.UnmatchManyDocumentsManyToMany,
|
|
582
764
|
disabled: !hasManyToManyRelation,
|
|
583
765
|
onClick: async () => await pairManyToMany?.(false)
|
|
584
766
|
},
|
|
585
767
|
{
|
|
586
|
-
icon:
|
|
587
|
-
|
|
588
|
-
operationType: 'singleRow',
|
|
589
|
-
beginGroup: true,
|
|
768
|
+
icon: _jsx(IconArchiveMaster, {}),
|
|
769
|
+
name: SDKUI_Localizator.ArchiveMasterDocument,
|
|
590
770
|
disabled: canArchiveMasterRelation !== true,
|
|
591
771
|
onClick: async () => { if (TID)
|
|
592
772
|
await archiveMasterDocuments?.(TID); }
|
|
593
773
|
},
|
|
594
774
|
{
|
|
595
|
-
icon:
|
|
596
|
-
|
|
597
|
-
operationType: 'singleRow',
|
|
775
|
+
icon: _jsx(IconArchiveDetail, {}),
|
|
776
|
+
name: SDKUI_Localizator.ArchiveDetailDocument,
|
|
598
777
|
disabled: canArchiveDetailRelation !== true,
|
|
599
778
|
onClick: async () => { if (TID)
|
|
600
779
|
await archiveDetailDocuments?.(TID); }
|
|
601
780
|
},
|
|
602
781
|
{
|
|
603
|
-
icon:
|
|
604
|
-
|
|
605
|
-
operationType: 'singleRow',
|
|
606
|
-
visible: true,
|
|
607
|
-
beginGroup: true,
|
|
782
|
+
icon: _jsx(IconDetailDcmts, { transform: 'scale(-1, 1)' }),
|
|
783
|
+
name: SDKUI_Localizator.DcmtsMaster,
|
|
608
784
|
disabled: !currentTIDHasMasterRelations || isMasterDisabled,
|
|
609
785
|
onClick: () => { if (!isMasterDisabled)
|
|
610
786
|
setIsOpenMaster(!isOpenMaster); }
|
|
611
787
|
},
|
|
612
788
|
{
|
|
613
|
-
icon:
|
|
614
|
-
|
|
615
|
-
operationType: 'singleRow',
|
|
789
|
+
icon: _jsx(IconDetailDcmts, {}),
|
|
790
|
+
name: SDKUI_Localizator.DcmtsDetail,
|
|
616
791
|
disabled: !currentTIDHasDetailRelations || isDetailsDisabled,
|
|
617
|
-
visible: true,
|
|
618
792
|
onClick: () => { if (!isDetailsDisabled)
|
|
619
793
|
setIsOpenDetails(!isOpenDetails); }
|
|
620
794
|
}
|
|
621
795
|
];
|
|
622
796
|
items.push({
|
|
623
|
-
icon:
|
|
624
|
-
|
|
625
|
-
|
|
797
|
+
icon: _jsx(IconRelation, {}),
|
|
798
|
+
name: SDKUI_Localizator.Relations,
|
|
799
|
+
submenu: relationsItems
|
|
626
800
|
});
|
|
627
801
|
}
|
|
628
802
|
if (layoutMode === LayoutModes.Update && DID) {
|
|
629
803
|
const fullTextItems = [
|
|
630
804
|
{
|
|
631
|
-
icon:
|
|
632
|
-
|
|
633
|
-
operationType: 'singleRow',
|
|
805
|
+
icon: _jsx(IconInfo, {}),
|
|
806
|
+
name: SDKUI_Localizator.IndexingInformation,
|
|
634
807
|
disabled: false,
|
|
635
808
|
onClick: async () => {
|
|
636
809
|
try {
|
|
@@ -648,18 +821,16 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
648
821
|
}
|
|
649
822
|
},
|
|
650
823
|
{
|
|
651
|
-
icon:
|
|
652
|
-
|
|
653
|
-
operationType: 'singleRow',
|
|
824
|
+
icon: _jsx(IconArchiveDoc, {}),
|
|
825
|
+
name: SDKUI_Localizator.IndexOrReindex,
|
|
654
826
|
disabled: false,
|
|
655
827
|
onClick: async () => {
|
|
656
828
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.FreeSearchReindex);
|
|
657
829
|
}
|
|
658
830
|
},
|
|
659
831
|
{
|
|
660
|
-
icon:
|
|
661
|
-
|
|
662
|
-
operationType: 'singleRow',
|
|
832
|
+
icon: _jsx(IconDelete, {}),
|
|
833
|
+
name: SDKUI_Localizator.IndexingDelete,
|
|
663
834
|
disabled: false,
|
|
664
835
|
onClick: async () => {
|
|
665
836
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.FreeSearchPurge);
|
|
@@ -667,9 +838,9 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
667
838
|
}
|
|
668
839
|
];
|
|
669
840
|
items.push({
|
|
670
|
-
icon:
|
|
671
|
-
|
|
672
|
-
|
|
841
|
+
icon: _jsx(IconSearch, {}),
|
|
842
|
+
name: SDKUI_Localizator.FullTextSearch,
|
|
843
|
+
submenu: fullTextItems
|
|
673
844
|
});
|
|
674
845
|
}
|
|
675
846
|
// Aggiungi submenu "Bottoni personalizzati" se esistono customButtons
|
|
@@ -677,18 +848,19 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
677
848
|
const customButtonsItems = customButtonsLayout.customButtons
|
|
678
849
|
.filter((customButton) => customButton.isForUpdate && customButton.isForUpdate > 0)
|
|
679
850
|
.map((customButton) => ({
|
|
680
|
-
icon:
|
|
681
|
-
|
|
851
|
+
icon: TMImageLibrary({ imageID: customButton.glyphID }),
|
|
852
|
+
name: customButton.title || 'Bottone personalizzato',
|
|
682
853
|
onClick: () => setCustomButton(customButton)
|
|
683
854
|
}));
|
|
684
|
-
items.push({
|
|
685
|
-
icon:
|
|
686
|
-
|
|
687
|
-
|
|
855
|
+
customButtonsItems && customButtonsItems.length > 0 && items.push({
|
|
856
|
+
icon: _jsx(IconCustom, {}),
|
|
857
|
+
name: SDKUI_Localizator.CustomButtons,
|
|
858
|
+
submenu: customButtonsItems
|
|
688
859
|
});
|
|
689
860
|
}
|
|
690
861
|
return items;
|
|
691
862
|
}, [
|
|
863
|
+
fromDTD?.id,
|
|
692
864
|
fromDTD?.perm?.canRetrieveFile,
|
|
693
865
|
fromDTD?.description,
|
|
694
866
|
currentDcmt?.fileExt,
|
|
@@ -714,8 +886,9 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
714
886
|
openConfirmAttachmentsDialog
|
|
715
887
|
]);
|
|
716
888
|
const isModified = useMemo(() => calcIsModified(formData, formDataOrig), [formData, formDataOrig]);
|
|
717
|
-
const formToolbar = useMemo(() => _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [allowNavigation && canPrev != undefined && _jsx("p", { style: { textAlign: 'center', padding: '1px 4px', display: 'flex' }, children: `${itemIndex}/${count}` }), allowNavigation && canPrev != undefined && _jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canPrev: canPrev, onPrev: onPrev }), allowNavigation && canNext != undefined && _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canNext: canNext, onNext: onNext }), layoutMode === LayoutModes.Update &&
|
|
718
|
-
_jsx(
|
|
889
|
+
const formToolbar = useMemo(() => _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [allowNavigation && canPrev != undefined && _jsx("p", { style: { textAlign: 'center', padding: '1px 4px', display: 'flex' }, children: `${itemIndex}/${count}` }), allowNavigation && canPrev != undefined && _jsx(TMSaveFormButtonPrevious, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canPrev: canPrev, onPrev: onPrev }), allowNavigation && canNext != undefined && _jsx(TMSaveFormButtonNext, { btnStyle: 'icon', iconColor: 'white', isModified: isModified, formMode: formMode, canNext: canNext, onNext: onNext }), layoutMode === LayoutModes.Update &&
|
|
890
|
+
_jsx(ContextMenu, { items: commandsMenuItems, trigger: "left", children: _jsx(IconMenuVertical, { color: 'white', cursor: 'pointer' }) }), layoutMode === LayoutModes.Ark &&
|
|
891
|
+
_jsx(TMTooltip, { content: SDKUI_Localizator.PassToSearch, position: 'bottom', children: _jsx(IconSearch, { style: { cursor: 'pointer' }, onClick: handlePassToSearch }) })] }), [allowNavigation, canPrev, canNext, itemIndex, count, isModified, formMode, onPrev, onNext, layoutMode, commandsMenuItems, handlePassToSearch]);
|
|
719
892
|
const handleUndo = useCallback(() => {
|
|
720
893
|
setFormData(structuredClone(formDataOrig));
|
|
721
894
|
}, [formDataOrig]);
|
|
@@ -731,6 +904,60 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
731
904
|
},
|
|
732
905
|
});
|
|
733
906
|
}, [isModal, id, layoutMode]);
|
|
907
|
+
// Funzione helper per ottenere e aggiornare i metadati con gestione errori centralizzata
|
|
908
|
+
const refreshMetadataAsync = useCallback(async () => {
|
|
909
|
+
let metadataResult = undefined;
|
|
910
|
+
let hasGetMetadataError = false;
|
|
911
|
+
try {
|
|
912
|
+
metadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
|
|
913
|
+
}
|
|
914
|
+
catch (metadataError) {
|
|
915
|
+
hasGetMetadataError = true;
|
|
916
|
+
// Estrai ErrorCode dal campo detail se disponibile
|
|
917
|
+
let errorCode = undefined;
|
|
918
|
+
if (metadataError?.isApiException && metadataError?.response?.detail) {
|
|
919
|
+
try {
|
|
920
|
+
const detailObj = JSON.parse(metadataError.response.detail);
|
|
921
|
+
errorCode = detailObj?.ErrorCode;
|
|
922
|
+
}
|
|
923
|
+
catch (parseError) {
|
|
924
|
+
console.log("Impossibile parsare il detail dell'eccezione:", parseError);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
// Se ErrorCode è -5, mostra messaggio personalizzato, altrimenti mostra l'eccezione originale
|
|
928
|
+
if (errorCode === -5) {
|
|
929
|
+
TMMessageBoxManager.show({
|
|
930
|
+
message: SDKUI_Localizator.DcmtOutOfView,
|
|
931
|
+
buttons: [ButtonNames.OK],
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
else {
|
|
935
|
+
TMExceptionBoxManager.show({ exception: metadataError });
|
|
936
|
+
}
|
|
937
|
+
// Usa null per indicare al callback che c'è stato un errore e non deve ritentare
|
|
938
|
+
metadataResult = null;
|
|
939
|
+
}
|
|
940
|
+
// Aggiorna i metadati locali solo se non ci sono stati errori
|
|
941
|
+
if (!hasGetMetadataError && metadataResult && metadataResult !== null) {
|
|
942
|
+
await setMetadataList(fromDTDRef.current?.metadata ?? [], metadataResult);
|
|
943
|
+
}
|
|
944
|
+
return { success: !hasGetMetadataError, result: metadataResult };
|
|
945
|
+
}, [TID, DID, setMetadataList]);
|
|
946
|
+
const updateCurrentDcmt = useCallback(async () => {
|
|
947
|
+
try {
|
|
948
|
+
TMSpinner.show({ description: 'Aggiornamento in corso...' });
|
|
949
|
+
const { success, result: metadataResult } = await refreshMetadataAsync();
|
|
950
|
+
if (!success)
|
|
951
|
+
onClose?.();
|
|
952
|
+
await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
|
|
953
|
+
}
|
|
954
|
+
catch (e) {
|
|
955
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
956
|
+
}
|
|
957
|
+
finally {
|
|
958
|
+
TMSpinner.hide();
|
|
959
|
+
}
|
|
960
|
+
}, [refreshMetadataAsync, onClose]);
|
|
734
961
|
const handleSave = useCallback(async () => {
|
|
735
962
|
const ue = new UpdateEngineByID(SDK_Globals.tmSession);
|
|
736
963
|
ue.DID = DID;
|
|
@@ -767,55 +994,20 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
767
994
|
const savedFormData = structuredClone(formDataRef.current);
|
|
768
995
|
setFormDataOrig(savedFormData);
|
|
769
996
|
formDataOrigRef.current = savedFormData;
|
|
770
|
-
//
|
|
771
|
-
|
|
772
|
-
let hasGetMetadataError = false;
|
|
773
|
-
try {
|
|
774
|
-
metadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
|
|
775
|
-
}
|
|
776
|
-
catch (metadataError) {
|
|
777
|
-
hasGetMetadataError = true;
|
|
778
|
-
// Estrai ErrorCode dal campo detail se disponibile
|
|
779
|
-
let errorCode = undefined;
|
|
780
|
-
if (metadataError?.isApiException && metadataError?.response?.detail) {
|
|
781
|
-
try {
|
|
782
|
-
const detailObj = JSON.parse(metadataError.response.detail);
|
|
783
|
-
errorCode = detailObj?.ErrorCode;
|
|
784
|
-
}
|
|
785
|
-
catch (parseError) {
|
|
786
|
-
console.log("Impossibile parsare il detail dell'eccezione:", parseError);
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
// Se ErrorCode è -5, mostra messaggio personalizzato, altrimenti mostra l'eccezione originale
|
|
790
|
-
if (errorCode === -5) {
|
|
791
|
-
TMMessageBoxManager.show({
|
|
792
|
-
message: SDKUI_Localizator.DcmtOutOfView,
|
|
793
|
-
buttons: [ButtonNames.OK],
|
|
794
|
-
});
|
|
795
|
-
}
|
|
796
|
-
else {
|
|
797
|
-
TMExceptionBoxManager.show({ exception: metadataError });
|
|
798
|
-
}
|
|
799
|
-
// Usa null per indicare al callback che c'è stato un errore e non deve ritentare
|
|
800
|
-
metadataResult = null;
|
|
801
|
-
}
|
|
997
|
+
// Usa la funzione helper per ottenere i metadati aggiornati
|
|
998
|
+
const { success, result: metadataResult } = await refreshMetadataAsync();
|
|
802
999
|
// Esegui sempre il callback:
|
|
803
1000
|
// - Se metadataResult è un oggetto: refresh normale
|
|
804
1001
|
// - Se metadataResult è null: GetMetadataAsync fallito, rimuove il documento dalla griglia senza ritentare
|
|
805
1002
|
// - Se metadataResult è undefined: nessun parametro passato, il callback può decidere cosa fare
|
|
806
1003
|
await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
|
|
807
1004
|
// Mostra messaggio di successo solo se non ci sono stati errori critici
|
|
808
|
-
if (
|
|
809
|
-
if (metadataResult && metadataResult !== null) {
|
|
810
|
-
// Usa fromDTDRef.current invece di fromDTD per evitare stale closure.
|
|
811
|
-
// fromDTD potrebbe essere undefined/vuoto nel callback se lo stato è cambiato,
|
|
812
|
-
// mentre fromDTDRef.current contiene sempre il valore corrente sincronizzato tramite useEffect.
|
|
813
|
-
await setMetadataList(fromDTDRef.current?.metadata ?? [], metadataResult);
|
|
814
|
-
}
|
|
1005
|
+
if (success) {
|
|
815
1006
|
ShowAlert({ mode: 'success', title: 'Form di documento', message: 'Le modifiche sono state salvate con successo', duration: 3000 });
|
|
816
1007
|
}
|
|
817
|
-
else
|
|
1008
|
+
else {
|
|
818
1009
|
onClose?.();
|
|
1010
|
+
}
|
|
819
1011
|
}
|
|
820
1012
|
catch (e) {
|
|
821
1013
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -823,7 +1015,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
823
1015
|
finally {
|
|
824
1016
|
TMSpinner.hide();
|
|
825
1017
|
}
|
|
826
|
-
}, [DID, TID, getSpecificChangedKeysWithValues, onSavedAsyncCallback, onClose
|
|
1018
|
+
}, [DID, TID, getSpecificChangedKeysWithValues, refreshMetadataAsync, onSavedAsyncCallback, onClose]);
|
|
827
1019
|
const handleArchiveCompleted = useCallback(async () => {
|
|
828
1020
|
let firstBlock = true;
|
|
829
1021
|
let maxFileSize = 0;
|
|
@@ -1012,28 +1204,34 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1012
1204
|
await triggerBlogRefresh();
|
|
1013
1205
|
}
|
|
1014
1206
|
}, [TID, DID, triggerBlogRefresh]);
|
|
1207
|
+
const checkoutBadge = useMemo(() => {
|
|
1208
|
+
const { cicoEnabled, checkoutStatus } = getDcmtCicoStatus(formData, allUsers, fromDTD);
|
|
1209
|
+
if (!cicoEnabled || !checkoutStatus.isCheckedOut)
|
|
1210
|
+
return null;
|
|
1211
|
+
return (_jsx(Ribbon, { "$isMobile": isMobile, children: _jsx(TMTooltip, { content: checkoutStatus.editLockTooltipText, position: "right", children: _jsx("span", { children: checkoutStatus.mode === 'editMode' ? SDKUI_Localizator.CheckOut : 'Locked' }) }) }));
|
|
1212
|
+
}, [formData, fromDTD, isMobile]);
|
|
1015
1213
|
const tmDcmtForm = useMemo(() => {
|
|
1016
|
-
return
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1214
|
+
return _jsxs(_Fragment, { children: [checkoutBadge && _jsx("div", { style: { padding: '10px', display: 'flex', justifyContent: 'center' }, children: checkoutBadge }), metadataValuesSource.length > 0 &&
|
|
1215
|
+
_jsxs(StyledToolbarCardContainer, { children: [_jsx(TMMetadataValues, { TID: TID, metadataValues: metadataValuesSource, metadataValuesOrig: metadataValuesSourceOrig, isExpertMode: isExpertMode, isOpenDistinctValues: isOpenDistinctValues, openChooserBySingleClick: !isOpenDistinctValues, selectedMID: focusedMetadataValue?.mid, isReadOnly: formMode === FormModes.ReadOnly, layoutMode: layoutMode, deviceType: deviceType, validationItems: validationItems, inputMids: inputMids, layout: layout, onFocusedItemChanged: (item) => { (item?.mid !== focusedMetadataValue?.mid) && setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
|
|
1216
|
+
setFormData((prevItems) => prevItems.map((item) => {
|
|
1217
|
+
const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
|
|
1218
|
+
return newItem ? { ...item, ...newItem } : item;
|
|
1219
|
+
}));
|
|
1220
|
+
}, onAdvancedMenuClick: (e) => {
|
|
1221
|
+
switch (e.button) {
|
|
1222
|
+
case AdvancedMenuButtons.DistinctValues:
|
|
1223
|
+
setIsOpenDistinctValues(!isOpenDistinctValues);
|
|
1224
|
+
break;
|
|
1225
|
+
case AdvancedMenuButtons.FormulaEditor:
|
|
1226
|
+
setIsOpenFormulaEditor(!isOpenFormulaEditor);
|
|
1227
|
+
break;
|
|
1228
|
+
}
|
|
1229
|
+
} }), _jsxs(StyledFormButtonsContainer, { children: [_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', gap: '8px' }, children: layoutMode === LayoutModes.Update ? _jsxs(_Fragment, { children: [_jsx(TMSaveFormButtonSave, { showTooltip: false, btnStyle: 'advanced', advancedColor: '#f09c0a', isModified: isModified, formMode: formMode, errorsCount: validationItems.filter(o => o.ResultType == ResultTypes.ERROR).length, onSaveAsync: handleConfirmAction }), _jsx(TMSaveFormButtonUndo, { btnStyle: 'toolbar', showTooltip: true, color: 'primary', isModified: isModified, formMode: formMode, onUndo: handleUndo })] }) :
|
|
1230
|
+
_jsxs(_Fragment, { children: [_jsx(TMButton, { disabled: archiveBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconBoxArchiveIn, {}), width: 'auto', showTooltip: false, caption: SDKUI_Localizator.Archive, advancedColor: TMColors.success, onClick: handleConfirmAction }), _jsx(TMButton, { disabled: !clearFormBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconClear, {}), width: 'auto', showTooltip: false, caption: SDKUI_Localizator.Clear, advancedColor: TMColors.tertiary, onClick: handleClearForm }), DID && _jsx(TMButton, { disabled: undoBtnDisabled, btnStyle: 'advanced', icon: _jsx(IconUndo, {}), width: '150px', showTooltip: false, caption: SDKUI_Localizator.Undo, advancedColor: TMColors.tertiary, onClick: handleUndo })] }) }) }), customButton && _jsx(TMCustomButton, { button: customButton, formData: formData, selectedItems: [], onClose: () => setCustomButton(undefined) }), totalItems > listMaxItems &&
|
|
1231
|
+
!isApprView &&
|
|
1232
|
+
TID !== SystemTIDs.Drafts &&
|
|
1233
|
+
!shouldShowAll &&
|
|
1234
|
+
_jsx(TMShowAllOrMaxItemsButton, { showAll: showAll, dataSourceLength: totalItems, onClick: () => { setShowAll(!showAll); } })] }), _jsx(ConfirmAttachmentsDialog, {})] })] });
|
|
1037
1235
|
}, [
|
|
1038
1236
|
TID,
|
|
1039
1237
|
DID,
|
|
@@ -1061,11 +1259,11 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1061
1259
|
handleUndo,
|
|
1062
1260
|
handleClearForm
|
|
1063
1261
|
]);
|
|
1064
|
-
const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { tid: TID, did: DID, allTasks: allTasks, fetchBlogDataTrigger: refreshBlogTrigger, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), [TID, DID, allTasks, refreshBlogTrigger]);
|
|
1262
|
+
const tmBlog = useMemo(() => _jsx(TMDcmtBlog, { tid: TID, did: DID, allTasks: allTasks, fetchBlogDataTrigger: refreshBlogTrigger, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), [TID, DID, allTasks, refreshBlogTrigger, handleNavigateToWGs, handleNavigateToDossiers]);
|
|
1065
1263
|
const tmSysMetadata = useMemo(() => _jsx(TMMetadataValues, { layoutMode: layoutMode, openChooserBySingleClick: !isOpenDistinctValues, TID: TID, isReadOnly: true, deviceType: deviceType, metadataValues: formData.filter(o => (o.mid != undefined && o.mid <= 100)), metadataValuesOrig: formData.filter(o => (o.mid != undefined && o.mid <= 100)), validationItems: [], inputMids: inputMids }), [TID, layoutMode, formData, deviceType, inputMids]);
|
|
1066
1264
|
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (file) => {
|
|
1067
1265
|
setDcmtFile(file);
|
|
1068
|
-
}, enableDragDropOverlay: enableDragDropOverlay }), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
|
|
1266
|
+
}, enableDragDropOverlay: enableDragDropOverlay }, refreshPreviewTrigger), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
|
|
1069
1267
|
const tmWF = useMemo(() => {
|
|
1070
1268
|
if (isWFDataLoading) {
|
|
1071
1269
|
return (_jsx("div", { style: {
|
|
@@ -1080,7 +1278,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1080
1278
|
const isAuthorized = !!workflows?.[0]?.diagram;
|
|
1081
1279
|
return (_jsxs("div", { style: { position: 'relative', width: '100%', height: '100%', display: 'flex', flexDirection: 'column', gap: 3 }, children: [workItems.length > 0
|
|
1082
1280
|
? (isAuthorized
|
|
1083
|
-
? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID })
|
|
1281
|
+
? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID, defaultAutoZoom: true, workitems: workItemsForDiagram })
|
|
1084
1282
|
: _jsx("div", { style: {
|
|
1085
1283
|
position: 'absolute',
|
|
1086
1284
|
top: '50%',
|
|
@@ -1089,7 +1287,27 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1089
1287
|
fontSize: '1.1rem',
|
|
1090
1288
|
color: TMColors.primaryColor,
|
|
1091
1289
|
textAlign: 'center',
|
|
1092
|
-
|
|
1290
|
+
display: 'flex',
|
|
1291
|
+
flexDirection: 'column',
|
|
1292
|
+
alignItems: 'center',
|
|
1293
|
+
gap: '12px',
|
|
1294
|
+
}, children: _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("span", { children: SDKUI_Localizator.WorkflowDiagramNotAuthorized }), wfError && (_jsx(TMTooltip, { content: 'Visualizza errore', children: _jsx("i", { className: "dx-icon-info", style: { fontSize: 20, cursor: 'pointer', color: '#dc3545' }, onClick: () => {
|
|
1295
|
+
TMMessageBoxManager.show({
|
|
1296
|
+
title: 'Dettagli Errore Workflow',
|
|
1297
|
+
initialWidth: !isMobile ? '700px' : undefined,
|
|
1298
|
+
message: (_jsx("pre", { style: {
|
|
1299
|
+
whiteSpace: 'pre-wrap',
|
|
1300
|
+
background: '#f5f5f5',
|
|
1301
|
+
padding: '12px',
|
|
1302
|
+
borderRadius: '6px',
|
|
1303
|
+
userSelect: 'text',
|
|
1304
|
+
cursor: 'text',
|
|
1305
|
+
}, children: wfError })),
|
|
1306
|
+
resizable: true,
|
|
1307
|
+
showToppy: false,
|
|
1308
|
+
buttons: [ButtonNames.OK],
|
|
1309
|
+
});
|
|
1310
|
+
} }) }))] }) }))
|
|
1093
1311
|
: _jsx("div", { style: {
|
|
1094
1312
|
position: 'absolute',
|
|
1095
1313
|
top: '50%',
|
|
@@ -1104,7 +1322,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1104
1322
|
backgroundColor: 'khaki',
|
|
1105
1323
|
borderRadius: 8
|
|
1106
1324
|
}, children: SDKUI_Localizator.WorkItemTechnicalNote_SetID })] }));
|
|
1107
|
-
}, [workflows, formData, workitemSetID, workItems, isWFDataLoading]);
|
|
1325
|
+
}, [workflows, formData, workitemSetID, workItems, workItemsForDiagram, isWFDataLoading, wfError, isMobile]);
|
|
1108
1326
|
const tmDcmtTasks = useMemo(() => {
|
|
1109
1327
|
const isReady = TID && DID && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback;
|
|
1110
1328
|
if (!isReady) {
|
|
@@ -1229,7 +1447,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1229
1447
|
// Checks if there's a saved panel layout for the current context (ToDo or general)
|
|
1230
1448
|
const hasSavedLayout = () => {
|
|
1231
1449
|
const { setting } = getCurrentDcmtFormSetting();
|
|
1232
|
-
if (
|
|
1450
|
+
if (invocationContext === InvocationContext.Todo) {
|
|
1233
1451
|
// If invoked by ToDo, check for existence of layoutToDo and that it has keys
|
|
1234
1452
|
return setting.layoutToDo !== undefined && Object.keys(setting.layoutToDo).length > 0;
|
|
1235
1453
|
}
|
|
@@ -1248,8 +1466,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1248
1466
|
// Prepare the new setting object with updated layout depending on context
|
|
1249
1467
|
const newSetting = {
|
|
1250
1468
|
TID: normalizedTID,
|
|
1251
|
-
layout:
|
|
1252
|
-
layoutToDo:
|
|
1469
|
+
layout: invocationContext === InvocationContext.Todo ? (existingSetting.layout ?? {}) : state,
|
|
1470
|
+
layoutToDo: invocationContext === InvocationContext.Todo ? state : (existingSetting.layoutToDo ?? {}),
|
|
1253
1471
|
};
|
|
1254
1472
|
// Replace existing setting if found, otherwise push a new one
|
|
1255
1473
|
if (idx >= 0) {
|
|
@@ -1268,12 +1486,12 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1268
1486
|
return undefined;
|
|
1269
1487
|
const settings = getCurrentDcmtFormSetting()?.setting;
|
|
1270
1488
|
// Return the appropriate layout based on context
|
|
1271
|
-
return
|
|
1489
|
+
return invocationContext === InvocationContext.Todo ? settings?.layoutToDo : settings?.layout;
|
|
1272
1490
|
};
|
|
1273
1491
|
const handleCompleteMoreInfo = useCallback(async () => {
|
|
1274
1492
|
try {
|
|
1275
1493
|
TMSpinner.show();
|
|
1276
|
-
let newTask = { ...
|
|
1494
|
+
let newTask = { ...moreInfoTasks, state: Task_States.Completed };
|
|
1277
1495
|
await SDK_Globals.tmSession?.NewTaskEngine().UpdateAsync(newTask);
|
|
1278
1496
|
onTaskCompleted?.(newTask);
|
|
1279
1497
|
onClose?.();
|
|
@@ -1286,7 +1504,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1286
1504
|
finally {
|
|
1287
1505
|
TMSpinner.hide();
|
|
1288
1506
|
}
|
|
1289
|
-
}, [
|
|
1507
|
+
}, [moreInfoTasks, onTaskCompleted, onClose]);
|
|
1290
1508
|
const handleSignApprove = useCallback(() => {
|
|
1291
1509
|
if (onOpenS4TViewerRequest && TID && DID) {
|
|
1292
1510
|
onOpenS4TViewerRequest([{ TID, DID }]);
|
|
@@ -1330,29 +1548,26 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1330
1548
|
height: '100%',
|
|
1331
1549
|
position: 'relative',
|
|
1332
1550
|
overflow: 'hidden'
|
|
1333
|
-
}, children: [_jsxs("div", { style: { width: '100%', height: '100%', display: isOpenDetails || isOpenMaster ? 'none' : 'flex' }, children: [isNavigating && _jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: false }), (fromDTD) &&
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1551
|
+
}, children: [_jsxs("div", { style: { width: '100%', height: '100%', display: isOpenDetails || isOpenMaster ? 'none' : 'flex' }, children: [isNavigating && _jsx(Spinner, { description: SDKUI_Localizator.Loading, flat: false }), (fromDTD) && _jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: useWaitPanelLocalState ? showWaitPanelLocal : showWaitPanel, showWaitPanelPrimary: useWaitPanelLocalState ? showPrimaryLocal : showPrimary, showWaitPanelSecondary: useWaitPanelLocalState ? showSecondaryLocal : showSecondary, waitPanelTitle: useWaitPanelLocalState ? waitPanelTitleLocal : waitPanelTitle, waitPanelTextPrimary: useWaitPanelLocalState ? waitPanelTextPrimaryLocal : waitPanelTextPrimary, waitPanelValuePrimary: useWaitPanelLocalState ? waitPanelValuePrimaryLocal : waitPanelValuePrimary, waitPanelMaxValuePrimary: useWaitPanelLocalState ? waitPanelMaxValuePrimaryLocal : waitPanelMaxValuePrimary, waitPanelTextSecondary: useWaitPanelLocalState ? waitPanelTextSecondaryLocal : waitPanelTextSecondary, waitPanelValueSecondary: useWaitPanelLocalState ? waitPanelValueSecondaryLocal : waitPanelValueSecondary, waitPanelMaxValueSecondary: useWaitPanelLocalState ? waitPanelMaxValueSecondaryLocal : waitPanelMaxValueSecondary, isCancelable: useWaitPanelLocalState ? dcmtFile ? dcmtFile.size >= 1000000 : false : true, abortController: useWaitPanelLocalState ? abortControllerLocal : abortController, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showCicoWaitPanel, showWaitPanelPrimary: showCicoPrimaryProgress, waitPanelTitle: cicoWaitPanelTitle, waitPanelTextPrimary: cicoPrimaryProgressText, waitPanelValuePrimary: cicoPrimaryProgressValue, waitPanelMaxValuePrimary: cicoPrimaryProgressMax, isCancelable: true, abortController: abortControllerLocal, children: [(groupId && groupId.length > 0)
|
|
1552
|
+
? _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })
|
|
1553
|
+
: _jsxs(TMPanelManagerWithPersistenceProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: defaultPanelDimensions, initialDimensions: defaultPanelDimensions, initialMobilePanelId: 'tmDcmtForm', isPersistenceEnabled: !isMobile ? hasSavedLayout() : false, persistPanelStates: !isMobile ? (state) => persistPanelStates(state) : undefined, persistedPanelStates: getPersistedPanelStates(), children: [_jsx(WfButtonStateHandler, { isWFDisabled: isWFDisabled }), _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })] }), isOpenDistinctValues &&
|
|
1554
|
+
_jsx(TMDistinctValues, { tid: TID, mid: focusedMetadataValue?.mid, isModal: true, showHeader: false, layoutMode: layoutMode, onClosePanelCallback: () => setIsOpenDistinctValues(false), onSelectionChanged: (e) => {
|
|
1555
|
+
if (!e)
|
|
1556
|
+
return;
|
|
1557
|
+
setFormData((prevItems) => prevItems.map((item) => item.tid == e.tid && item.mid === e.mid ? { ...item, value: e.newValue } : item));
|
|
1558
|
+
} }), isOpenFormulaEditor &&
|
|
1559
|
+
_jsx(TMFormulaEditor, { isModal: true, formMode: FormModes.Update, inputData: getFormula(), showBack: false, onClose: () => setIsOpenFormulaEditor(false), onApplied: (newFormula) => {
|
|
1560
|
+
setFormData((prevItems) => prevItems.map((item) => item.tid == newFormula.tid && item.mid === newFormula.mid ? { ...item, value: FormulaHelper.addFormulaTag(newFormula.expression), isSelected: true, isEditable: true } : item));
|
|
1561
|
+
setFocusedMetadataValue(prevState => ({
|
|
1562
|
+
...prevState,
|
|
1563
|
+
isSelected: true,
|
|
1564
|
+
isEditable: true,
|
|
1565
|
+
value: FormulaHelper.addFormulaTag(newFormula.expression)
|
|
1566
|
+
}));
|
|
1567
|
+
} }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, onClose: () => setShowMoreInfoPopup(false) }), (isModal && onClose) && _jsx("div", { id: "TMDcmtFormShowConfirmForClose-" + id })] }) }), _jsx(TMToppyDraggableHelpCenter, { isVisible: isToppyVisible, content: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: [showToppyForApprove && (workItems.length === 1 ?
|
|
1350
1568
|
_jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true), dtd: fromDTD })
|
|
1351
1569
|
:
|
|
1352
|
-
_jsxs("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: [`
|
|
1353
|
-
setShowCommentForm(true);
|
|
1354
|
-
} })] })), (showToppyForReferences && (dcmtReferences && dcmtReferences.length > 0)) && dcmtReferences
|
|
1355
|
-
.filter(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup) // keep only known objClass types
|
|
1570
|
+
_jsxs("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: [`Questo documento è associato a ${workItems.length} workitem.`, _jsx("br", {}), `Per approvare, vai alla pagina "Approvazione workflow".`] })), showToppyForCompleteMoreInfo && (moreInfoTasks?.length === 1 ? (_jsxs(_Fragment, { children: [_jsx("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: `${SDKUI_Localizator.MoreInfoCompleteRequestSentBy} ${moreInfoTasks[0]?.fromName}!` }), _jsx(TMButton, { caption: SDKUI_Localizator.CommentAndComplete, color: 'success', showTooltip: false, onClick: () => setShowCommentForm(true) })] })) : (_jsx("div", { style: { padding: 10, color: 'white', maxWidth: '180px', borderRadius: 10, background: '#1B1464 0% 0% no-repeat padding-box', border: '1px solid #FFFFFF' }, children: `Ci sono ${moreInfoTasks?.length ?? 0} richieste di maggiori informazioni. ${SDKUI_Localizator.ManageFromTaskPanel}` }))), showToppyForReferences && dcmtReferences?.filter(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup)
|
|
1356
1571
|
.map((ref, index, arr) => {
|
|
1357
1572
|
const mapEntry = referenceActionMap[String(ref.objClass)];
|
|
1358
1573
|
const label = mapEntry?.label ?? 'Vai a riferimento';
|
|
@@ -1400,7 +1615,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1400
1615
|
finally {
|
|
1401
1616
|
TMSpinner.hide();
|
|
1402
1617
|
}
|
|
1403
|
-
}, onClose: () => setShowManyToManyChooser(false), manageUseLocalizedName: false })),
|
|
1618
|
+
}, onClose: () => setShowManyToManyChooser(false), manageUseLocalizedName: false })), (showHistory && fromDTD && currentDcmt) && _jsx(TMViewHistoryDcmt, { fromDTD: fromDTD, deviceType: deviceType, inputDcmt: { TID: currentDcmt.tid, DID: currentDcmt.did }, onClose: hideHistoryCallback, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (showCheckoutInformationForm && fromDTD && currentDcmt) &&
|
|
1619
|
+
_jsx(TMDcmtCheckoutInfoForm, { dtdName: fromDTD.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: { TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt }, onClose: hideCheckoutInformationFormCallback }), (commentFormState.show && currentDcmt) && _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: currentDcmt.tid, did: currentDcmt.did } }, onClose: hideCommentFormCallback, refreshCallback: triggerBlogRefresh, participants: [], showAttachmentsSection: false, allArchivedDocumentsFileItems: [], isCommentRequired: commentFormState.isRequired, removeAndEditAttachment: commentFormState.removeAndEditAttachment }), 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: () => {
|
|
1404
1620
|
setIsOpenArchiveRelationForm(false);
|
|
1405
1621
|
setArchiveType(undefined);
|
|
1406
1622
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
@@ -1411,7 +1627,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1411
1627
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
1412
1628
|
setArchiveRelatedDcmtFormMids([]);
|
|
1413
1629
|
await fetchData();
|
|
1414
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers })), showPairDcmtsModal && (_jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshSearchAsync: async () => await fetchData(), onTaskCreateRequest: onTaskCreateRequest, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }))] }));
|
|
1630
|
+
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference })), showPairDcmtsModal && (_jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshSearchAsync: async () => await fetchData(), onTaskCreateRequest: onTaskCreateRequest, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, toppyHelpCenterUsePortal: true }) }))] }));
|
|
1415
1631
|
};
|
|
1416
1632
|
export default TMDcmtForm;
|
|
1417
1633
|
/**
|
|
@@ -1434,8 +1650,11 @@ const applyMetadataFilter = (data, showAll, listMaxItems, TID) => {
|
|
|
1434
1650
|
o.mid === SystemMIDsAsNumber.FileSize ||
|
|
1435
1651
|
o.mid === SystemMIDsAsNumber.LastUpdateTime ||
|
|
1436
1652
|
o.mid === SystemMIDsAsNumber.CreationTime;
|
|
1653
|
+
const chronologySystemFilter = (o) => baseFilter(o) ||
|
|
1654
|
+
o.mid === SystemMIDsAsNumber.FileExt ||
|
|
1655
|
+
o.mid === SystemMIDsAsNumber.FileSize;
|
|
1437
1656
|
// Select the appropriate filter based on document type
|
|
1438
|
-
const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : baseFilter;
|
|
1657
|
+
const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : TID === SystemTIDs.Chronology ? chronologySystemFilter : baseFilter;
|
|
1439
1658
|
// Apply filter once
|
|
1440
1659
|
const filteredData = data.filter(currentFilter);
|
|
1441
1660
|
// Return all filtered data or slice to max items
|
|
@@ -1489,3 +1708,35 @@ const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, devi
|
|
|
1489
1708
|
_jsx(TMDcmtPreview, { isVisible: isVisible, onClosePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, allowMaximize: !isMobile && countVisibleLeafPanels() > 1, onMaximizePanel: (!isMobile && countVisibleLeafPanels() > 1) ? () => toggleMaximize("tmDcmtPreview") : undefined, dcmtData: currentDcmt, isResizingActive: isResizingActive }) :
|
|
1490
1709
|
_jsx(TMFileUploader, { onFileUpload: onFileUpload, 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 }));
|
|
1491
1710
|
};
|
|
1711
|
+
const Ribbon = styled.div `
|
|
1712
|
+
font-size: 0.85rem;
|
|
1713
|
+
font-weight: 600;
|
|
1714
|
+
color: #fff;
|
|
1715
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
1716
|
+
--f: .4em; /* control the folded part */
|
|
1717
|
+
position: absolute;
|
|
1718
|
+
top: 2px;
|
|
1719
|
+
left: 2px;
|
|
1720
|
+
z-index: 1200;
|
|
1721
|
+
line-height: 1.6;
|
|
1722
|
+
padding-inline: 0.8lh;
|
|
1723
|
+
padding-bottom: var(--f);
|
|
1724
|
+
border-image: conic-gradient(#0008 0 0) 51%/var(--f);
|
|
1725
|
+
clip-path: polygon(100% calc(100% - var(--f)),100% 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--f) calc(100% - var(--f)), 0 100%,0 calc(100% - var(--f)),999px calc(100% - var(--f) - 999px),calc(100% - 999px) calc(100% - var(--f) - 999px));
|
|
1726
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg);
|
|
1727
|
+
transform-origin: 100% 100%;
|
|
1728
|
+
background-color: rgba(217, 148, 13, 0.92);
|
|
1729
|
+
display: inline-block;
|
|
1730
|
+
padding-top: 0.1em;
|
|
1731
|
+
white-space: nowrap;
|
|
1732
|
+
transition: ${props => props.$isMobile ? 'none' : 'all 0.3s ease'};
|
|
1733
|
+
cursor: 'default';
|
|
1734
|
+
|
|
1735
|
+
${props => !props.$isMobile && `
|
|
1736
|
+
&:hover {
|
|
1737
|
+
background-color: #d9940d;
|
|
1738
|
+
font-size: 1.1rem;
|
|
1739
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg) scale(1.05);
|
|
1740
|
+
}
|
|
1741
|
+
`}
|
|
1742
|
+
`;
|