@topconsultnpm/sdkui-react 6.20.0-dev1.13 → 6.20.0-dev1.130
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 +322 -30
- 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 +146 -47
- package/lib/components/NewComponents/ContextMenu/types.d.ts +22 -3
- 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 +620 -125
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +25 -5
- package/lib/components/NewComponents/FloatingMenuBar/styles.js +215 -59
- package/lib/components/NewComponents/FloatingMenuBar/types.d.ts +12 -3
- package/lib/components/base/TMAccordionNew.js +35 -14
- package/lib/components/base/TMButton.js +6 -0
- package/lib/components/base/TMClosableList.js +4 -0
- 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 +21 -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 +4 -2
- package/lib/components/base/TMPopUp.js +6 -0
- package/lib/components/base/TMToolbarCard.js +2 -0
- package/lib/components/base/TMTreeView.d.ts +2 -1
- package/lib/components/base/TMTreeView.js +33 -26
- package/lib/components/choosers/TMDataListItemChooser.d.ts +2 -0
- package/lib/components/choosers/TMDataListItemChooser.js +8 -2
- package/lib/components/choosers/TMDcmtTypeChooser.d.ts +1 -0
- package/lib/components/choosers/TMDcmtTypeChooser.js +11 -3
- package/lib/components/choosers/TMDistinctValues.js +2 -2
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +2 -0
- package/lib/components/choosers/TMDynDataListItemChooser.js +8 -2
- package/lib/components/choosers/TMInvoiceRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMMetadataChooser.d.ts +2 -0
- package/lib/components/choosers/TMMetadataChooser.js +19 -4
- package/lib/components/choosers/TMOrderRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMUserChooser.d.ts +2 -5
- package/lib/components/choosers/TMUserChooser.js +33 -47
- package/lib/components/editors/TMCheckBox.js +2 -0
- package/lib/components/editors/TMDateBox.js +18 -9
- package/lib/components/editors/TMEditorStyled.js +7 -0
- package/lib/components/editors/TMLocalizedTextBox.d.ts +3 -1
- package/lib/components/editors/TMLocalizedTextBox.js +16 -14
- package/lib/components/editors/TMMetadataEditor.d.ts +1 -0
- package/lib/components/editors/TMMetadataEditor.js +4 -4
- package/lib/components/editors/TMMetadataTextBox.d.ts +9 -0
- package/lib/components/editors/TMMetadataTextBox.js +92 -0
- package/lib/components/editors/TMMetadataValues.d.ts +2 -0
- package/lib/components/editors/TMMetadataValues.js +26 -8
- package/lib/components/editors/TMRadioButton.js +2 -0
- package/lib/components/editors/TMTextArea.js +18 -30
- package/lib/components/editors/TMTextBox.d.ts +1 -1
- package/lib/components/editors/TMTextBox.js +29 -4
- 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 +462 -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/TMDcmtBlog.js +1 -1
- package/lib/components/features/documents/TMDcmtForm.d.ts +14 -2
- package/lib/components/features/documents/TMDcmtForm.js +576 -292
- package/lib/components/features/documents/TMDcmtPreview.js +42 -155
- 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/TMSearchQueryEditor.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryEditor.js +10 -10
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryPanel.js +40 -25
- package/lib/components/features/search/TMSearchResult.d.ts +3 -0
- package/lib/components/features/search/TMSearchResult.js +370 -252
- package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +3 -3
- package/lib/components/features/search/TMSearchResultsMenuItems.js +227 -171
- 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 +47 -52
- package/lib/components/features/tasks/TMTaskForm.js +75 -25
- 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 +57 -37
- 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 +140 -34
- package/lib/components/features/workflow/diagram/DiagramItemComponent.d.ts +2 -0
- package/lib/components/features/workflow/diagram/DiagramItemComponent.js +14 -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 +35 -7
- 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/grids/TMValidationItemsList.js +6 -0
- package/lib/components/index.d.ts +6 -3
- package/lib/components/index.js +6 -3
- package/lib/components/layout/panelManager/TMPanelManagerContext.js +13 -5
- package/lib/components/query/TMQueryEditor.d.ts +6 -1
- package/lib/components/query/TMQueryEditor.js +105 -101
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/settings/SettingsAppearance.js +99 -30
- package/lib/components/sidebar/TMHeader.js +11 -7
- package/lib/components/sidebar/TMSidebar.d.ts +0 -1
- package/lib/components/sidebar/TMSidebar.js +16 -44
- package/lib/components/sidebar/TMSidebarItem.js +36 -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 +21 -3
- package/lib/helper/SDKUI_Localizator.js +196 -10
- 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/TMToppyMessage.js +4 -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 +30 -2
- package/lib/helper/helpers.js +132 -4
- package/lib/helper/index.d.ts +2 -0
- package/lib/helper/index.js +2 -0
- package/lib/helper/queryHelper.d.ts +2 -2
- package/lib/helper/queryHelper.js +80 -24
- 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/useFloatingBarPinnedItems.d.ts +11 -0
- package/lib/hooks/useFloatingBarPinnedItems.js +54 -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 +6 -5
- 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, IconLock } 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';
|
|
@@ -39,12 +38,34 @@ import WFDiagram from '../workflow/diagram/WFDiagram';
|
|
|
39
38
|
import TMTooltip from '../../base/TMTooltip';
|
|
40
39
|
import TMDcmtTasks from './TMDcmtTasks';
|
|
41
40
|
import TMToppyMessage from '../../../helper/TMToppyMessage';
|
|
42
|
-
import { getTaskAssignedToMe } from '../tasks/TMTasksUtils';
|
|
41
|
+
import { getTaskAssignedByMe, 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();
|
|
65
|
+
;
|
|
46
66
|
//#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,
|
|
67
|
+
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, }) => {
|
|
68
|
+
const { showHistory, showHistoryCallback, hideHistoryCallback, showCheckoutInformationForm, commentFormState, hideCommentFormCallback, showCheckoutInformationFormCallback, hideCheckoutInformationFormCallback, copyCheckoutPathToClipboardCallback, handleCheckOutCallback, handleCheckInCallback, refreshPreviewTrigger, showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, } = useCheckInOutOperations();
|
|
48
69
|
const [id, setID] = useState('');
|
|
49
70
|
const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
|
|
50
71
|
const [waitPanelTitleLocal, setWaitPanelTitleLocal] = useState('');
|
|
@@ -68,6 +89,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
68
89
|
const [layout, setLayout] = useState();
|
|
69
90
|
const [customButtonsLayout, setCustomButtonsLayout] = useState();
|
|
70
91
|
const [customButton, setCustomButton] = useState();
|
|
92
|
+
const [allUsers, setAllUsers] = useState([]);
|
|
71
93
|
const appliedInputMidsRef = useRef(null);
|
|
72
94
|
// Refs per evitare stale closure nei callback
|
|
73
95
|
// I useCallback catturano i valori delle dipendenze al momento della creazione.
|
|
@@ -91,6 +113,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
91
113
|
const [fetchError, setFetchError] = useState(false);
|
|
92
114
|
const [isWFDataLoading, setIsWFDataLoading] = useState(false);
|
|
93
115
|
const [workItems, setWorkItems] = useState([]);
|
|
116
|
+
const [workItemsForDiagram, setWorkItemsForDiagram] = useState([]);
|
|
94
117
|
const [workflows, setWorkflows] = useState([]);
|
|
95
118
|
const [showCommentForm, setShowCommentForm] = useState(false);
|
|
96
119
|
const [isInitialLoading, setIsInitialLoading] = useState(true);
|
|
@@ -98,16 +121,25 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
98
121
|
const [dcmtReferences, setDcmtReferences] = useState(undefined);
|
|
99
122
|
// Stato per triggerare il refresh del blog dall'esterno
|
|
100
123
|
const [refreshBlogTrigger, setRefreshBlogTrigger] = useState(0);
|
|
124
|
+
const [wfError, setWfError] = useState(null);
|
|
125
|
+
const [metadataDcmtOrigin, setMetadataDcmtOrigin] = useState(null);
|
|
101
126
|
const triggerBlogRefresh = useCallback(async () => {
|
|
102
127
|
setRefreshBlogTrigger(prev => prev + 1);
|
|
103
128
|
}, []);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
const fetchAllUsers = async () => {
|
|
131
|
+
const users = await UserListCacheService.GetAllAsync();
|
|
132
|
+
setAllUsers(users ?? []);
|
|
133
|
+
};
|
|
134
|
+
fetchAllUsers();
|
|
135
|
+
}, []);
|
|
104
136
|
useEffect(() => {
|
|
105
137
|
if (!allowButtonsRefs)
|
|
106
138
|
setDcmtReferences(undefined);
|
|
107
139
|
}, [allowButtonsRefs]);
|
|
108
140
|
const { openConfirmAttachmentsDialog, ConfirmAttachmentsDialog } = useInputAttachmentsDialog();
|
|
109
141
|
const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, runOperationAsync } = useDcmtOperations();
|
|
110
|
-
const { workflowApproveData } = useWorkflowApprove();
|
|
142
|
+
const { workflowApproveData, getWorkItemsByDID } = useWorkflowApprove();
|
|
111
143
|
const currentSearchResults = useMemo(() => {
|
|
112
144
|
if (!formData || formData.length === 0 || !TID || !DID)
|
|
113
145
|
return [];
|
|
@@ -124,7 +156,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
124
156
|
selectMIDs: selectMIDs,
|
|
125
157
|
dtdResult: {
|
|
126
158
|
rows: [rowValues],
|
|
127
|
-
columns: selectMIDs.map(mid => ({ name: `MID_${mid}
|
|
159
|
+
columns: selectMIDs.map(mid => ({ name: `MID_${mid}`, }))
|
|
128
160
|
},
|
|
129
161
|
dcmtsFound: 1,
|
|
130
162
|
dcmtsReturned: 1
|
|
@@ -158,10 +190,11 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
158
190
|
return;
|
|
159
191
|
TMSpinner.show({ description: 'Loading Metadata...' });
|
|
160
192
|
let res = getMetadataResult ?? await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, did, true);
|
|
193
|
+
const origin = { fromName: res?.fromName, fromTID: res?.fromTID };
|
|
161
194
|
let dtd = res?.dtdResult;
|
|
162
195
|
let rows = dtd.rows ? dtd.rows[0] : [];
|
|
163
196
|
let mids = res?.selectMIDs;
|
|
164
|
-
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode);
|
|
197
|
+
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode, origin.fromTID?.toString() !== TID?.toString());
|
|
165
198
|
if (archived) {
|
|
166
199
|
// Usa setFormData con funzione callback per accedere allo stato precedente
|
|
167
200
|
// invece di dipendere da formDataOrig nell'array di dipendenze
|
|
@@ -187,6 +220,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
187
220
|
});
|
|
188
221
|
return;
|
|
189
222
|
}
|
|
223
|
+
setMetadataDcmtOrigin(origin);
|
|
190
224
|
setFormDataOrig(structuredClone(metadataList));
|
|
191
225
|
setFormData(structuredClone(metadataList));
|
|
192
226
|
// Sincronizza il ref con i dati caricati per evitare stale closure in handleSave
|
|
@@ -242,14 +276,13 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
242
276
|
}
|
|
243
277
|
// Carica DTD e metadata
|
|
244
278
|
let dtd = await DcmtTypeListCacheService.GetWithNotGrantedAsync(TID, DID, getMetadataResult);
|
|
245
|
-
console.log('GetWithNotGrantedAsync DTD:', dtd);
|
|
246
279
|
setFromDTD(dtd);
|
|
247
280
|
if (layoutMode === LayoutModes.Update || (layoutMode === LayoutModes.Ark && DID)) {
|
|
248
281
|
await setMetadataList(dtd?.metadata ?? [], getMetadataResult);
|
|
249
282
|
}
|
|
250
283
|
else {
|
|
251
284
|
const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
|
|
252
|
-
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode);
|
|
285
|
+
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode, metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString());
|
|
253
286
|
setFormDataOrig(structuredClone(metadataList));
|
|
254
287
|
setFormData(structuredClone(metadataList));
|
|
255
288
|
formDataOrigRef.current = structuredClone(metadataList);
|
|
@@ -264,7 +297,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
264
297
|
setIsInitialLoading(false);
|
|
265
298
|
setIsNavigating(false);
|
|
266
299
|
}
|
|
267
|
-
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs]);
|
|
300
|
+
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs, metadataDcmtOrigin?.fromTID]);
|
|
268
301
|
const createChange = useCallback((mid, metadataType, modifiedValue) => {
|
|
269
302
|
return { mid, metadataType, modifiedValue };
|
|
270
303
|
}, []);
|
|
@@ -411,74 +444,173 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
411
444
|
const workItemSetIDValue = useMemo(() => formData.find(o => o.md?.name === WorkItemMetadataNames.WI_SetID)?.value, [formData]);
|
|
412
445
|
// Valore derivato: true se formData ha elementi validi
|
|
413
446
|
const hasFormData = useMemo(() => formData.length > 0 && formData.some(md => md.mid && md.mid > 99), [formData]);
|
|
447
|
+
const handleCheckOutOperationCallback = async (checkout) => {
|
|
448
|
+
if (!currentDcmt)
|
|
449
|
+
return;
|
|
450
|
+
await handleCheckOutCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt }, checkout, fromDTD?.name ?? SDKUI_Localizator.SearchResult, downloadDcmtsAsync, updateCurrentDcmt);
|
|
451
|
+
};
|
|
452
|
+
const handleCheckInOperationCallback = async () => {
|
|
453
|
+
if (!currentDcmt)
|
|
454
|
+
return;
|
|
455
|
+
await handleCheckInCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt, fileName: fromDTD?.name ?? SDKUI_Localizator.SearchResult }, updateCurrentDcmt, undefined);
|
|
456
|
+
};
|
|
457
|
+
const copyCheckoutPathToClipboardOperationCallback = () => {
|
|
458
|
+
if (!currentDcmt)
|
|
459
|
+
return;
|
|
460
|
+
copyCheckoutPathToClipboardCallback({ TID: currentDcmt.tid, DID: currentDcmt.did, FILEEXT: currentDcmt.fileExt }, fromDTD?.name ?? SDKUI_Localizator.SearchResult);
|
|
461
|
+
};
|
|
462
|
+
// useEffect per il caricamento dei dati del workflow
|
|
414
463
|
useEffect(() => {
|
|
464
|
+
// Funzione helper per caricare le informazioni del workflow
|
|
465
|
+
const loadWorkflowInfo = async (tid) => {
|
|
466
|
+
await WorkflowCacheService.GetWFInfoAsync(tid)
|
|
467
|
+
.then((result) => {
|
|
468
|
+
if (result) {
|
|
469
|
+
setWorkflows([result]);
|
|
470
|
+
setWfError(null);
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
setWorkflows([]);
|
|
474
|
+
setWfError("Workflow info not found");
|
|
475
|
+
}
|
|
476
|
+
})
|
|
477
|
+
.catch(error => {
|
|
478
|
+
setWorkflows([]);
|
|
479
|
+
console.log("Error fetching workflow info:", error);
|
|
480
|
+
setWfError(getExceptionMessage(error));
|
|
481
|
+
});
|
|
482
|
+
};
|
|
415
483
|
const loadAllWfData = async () => {
|
|
416
|
-
|
|
484
|
+
// FASE 1: Validazione prerequisiti
|
|
485
|
+
if (layoutMode !== LayoutModes.Update || !DID) {
|
|
417
486
|
setWorkItems([]);
|
|
418
487
|
setWorkflows([]);
|
|
419
488
|
return;
|
|
420
489
|
}
|
|
421
490
|
setIsWFDataLoading(true);
|
|
422
491
|
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
|
-
}
|
|
492
|
+
// FASE 2: Raccolta work items: array di tutti i possibili work items che matchano il DID corrente
|
|
493
|
+
const itemsToProcess = getWorkItemsByDID(Number(DID));
|
|
494
|
+
// Se non ci sono work items per questo DID, resetta e esci
|
|
434
495
|
if (itemsToProcess.length === 0) {
|
|
435
496
|
setWorkItems([]);
|
|
436
497
|
setWorkflows([]);
|
|
437
498
|
setIsWFDataLoading(false);
|
|
438
499
|
return;
|
|
439
500
|
}
|
|
440
|
-
//
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
501
|
+
// FASE 3: Ricerca work item specifico
|
|
502
|
+
// Cerca prima un match esatto con TID e DID correnti
|
|
503
|
+
const foundItem = itemsToProcess.find(item => item.tid === Number(TID) && item.did === Number(DID));
|
|
504
|
+
if (foundItem) {
|
|
505
|
+
// SCENARIO A: Match esatto trovato (TID e DID corrispondono)
|
|
506
|
+
// Il documento corrente è esattamente il work item nel workflow
|
|
507
|
+
let setID = undefined;
|
|
508
|
+
// Prova a usare il setID già presente nei metadati (più veloce)
|
|
509
|
+
if (workItemSetIDValue !== undefined) {
|
|
510
|
+
setID = workItemSetIDValue;
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
// Altrimenti caricalo dal server
|
|
514
|
+
setID = await getWorkItemSetIDAsync(foundItem.tid, foundItem.did);
|
|
515
|
+
}
|
|
516
|
+
// Imposta un singolo work item con il setID caricato
|
|
517
|
+
setWorkItems([{
|
|
518
|
+
wid: `${foundItem.tid}_${foundItem.did}`,
|
|
519
|
+
tid: foundItem.tid,
|
|
520
|
+
did: foundItem.did,
|
|
521
|
+
setID: setID,
|
|
522
|
+
details: []
|
|
523
|
+
}]);
|
|
524
|
+
// Carica le informazioni complete del workflow
|
|
525
|
+
await loadWorkflowInfo(foundItem.tid);
|
|
445
526
|
}
|
|
446
527
|
else {
|
|
447
|
-
//
|
|
448
|
-
|
|
528
|
+
// SCENARIO B: Nessun match esatto, cerca solo per DID
|
|
529
|
+
const itemsByDID = itemsToProcess.filter(item => item.did === Number(DID));
|
|
530
|
+
if (itemsByDID.length === 1) {
|
|
531
|
+
// SCENARIO B.1: Un solo item trovato per DID
|
|
532
|
+
// Situazione sicura: sappiamo esattamente quale work item usare
|
|
533
|
+
const singleItem = itemsByDID[0];
|
|
534
|
+
let setID;
|
|
535
|
+
// Carica il setID (da cache o da server)
|
|
536
|
+
if (workItemSetIDValue !== undefined) {
|
|
537
|
+
setID = workItemSetIDValue;
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
setID = await getWorkItemSetIDAsync(singleItem.tid, singleItem.did);
|
|
541
|
+
}
|
|
542
|
+
setWorkItems([{
|
|
543
|
+
wid: `${singleItem.tid}_${singleItem.did}`,
|
|
544
|
+
tid: singleItem.tid,
|
|
545
|
+
did: singleItem.did,
|
|
546
|
+
setID: setID,
|
|
547
|
+
details: []
|
|
548
|
+
}]);
|
|
549
|
+
// Carica le informazioni del workflow
|
|
550
|
+
await loadWorkflowInfo(singleItem.tid);
|
|
551
|
+
}
|
|
552
|
+
else if (itemsByDID.length > 1) {
|
|
553
|
+
// SCENARIO B.2: Più item trovati per lo stesso DID
|
|
554
|
+
// Ambiguità: lo stesso documento appare in più workflow diversi
|
|
555
|
+
const finalWorkItems = itemsByDID.map((item, index) => ({
|
|
556
|
+
wid: `${item.tid}_${item.did}_${index}`,
|
|
557
|
+
tid: item.tid,
|
|
558
|
+
did: item.did,
|
|
559
|
+
setID: undefined,
|
|
560
|
+
details: []
|
|
561
|
+
}));
|
|
562
|
+
setWorkItems(finalWorkItems);
|
|
563
|
+
setWorkflows([]); // Non carichiamo il workflow in caso di ambiguità
|
|
564
|
+
}
|
|
449
565
|
}
|
|
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
566
|
}
|
|
465
567
|
catch (error) {
|
|
568
|
+
// FASE 4: Gestione errori
|
|
466
569
|
TMExceptionBoxManager.show({ exception: error });
|
|
467
570
|
setWorkItems([]);
|
|
468
571
|
setWorkflows([]);
|
|
469
572
|
}
|
|
470
573
|
finally {
|
|
574
|
+
// Garantisce sempre il reset del flag di loading
|
|
471
575
|
setIsWFDataLoading(false);
|
|
472
576
|
}
|
|
473
577
|
};
|
|
474
|
-
// Usa hasFormData invece di formDataRef.current
|
|
475
578
|
if (!hasFormData || !fromDTD?.id) {
|
|
476
|
-
// console.log("formData is empty or fromDTD not loaded, skipping loadAllWfData");
|
|
477
579
|
return;
|
|
478
580
|
}
|
|
479
581
|
if (workItemSetIDValue !== undefined || workflowApproveData.length > 0)
|
|
480
582
|
loadAllWfData();
|
|
481
|
-
}, [hasFormData, workItemSetIDValue, workflowApproveData, DID, layoutMode, fromDTD?.templateTID, fromDTD?.id]);
|
|
583
|
+
}, [hasFormData, workItemSetIDValue, workflowApproveData, getWorkItemsByDID, TID, DID, layoutMode, fromDTD?.templateTID, fromDTD?.id]);
|
|
584
|
+
// useEffect per costruire workItemsForDiagram quando l'utente è autorizzato a vedere il diagramma
|
|
585
|
+
useEffect(() => {
|
|
586
|
+
const buildWorkItemsForDiagram = async () => {
|
|
587
|
+
// Verifica se l'utente è autorizzato (ha accesso al diagramma)
|
|
588
|
+
const isAuthorized = !!workflows?.[0]?.diagram;
|
|
589
|
+
if (!isAuthorized || workItems.length === 0) {
|
|
590
|
+
setWorkItemsForDiagram([]);
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
try {
|
|
594
|
+
// Costruisci WFInstanceDescriptor dai dati disponibili
|
|
595
|
+
const wfInstance = {
|
|
596
|
+
wfid: workflows[0].id,
|
|
597
|
+
tid: workflows[0].mtid,
|
|
598
|
+
did: DID ? Number(DID) : 0,
|
|
599
|
+
instanceId: undefined,
|
|
600
|
+
rowIndex: 0,
|
|
601
|
+
values: []
|
|
602
|
+
};
|
|
603
|
+
// Chiama buildWorkItemsFromWFCtrl per ottenere i workItems completi
|
|
604
|
+
const detailedWorkItems = await buildWorkItemsFromWFCtrl(wfInstance);
|
|
605
|
+
setWorkItemsForDiagram(detailedWorkItems);
|
|
606
|
+
}
|
|
607
|
+
catch (error) {
|
|
608
|
+
console.error('Errore durante la costruzione dei work items per il diagramma:', error);
|
|
609
|
+
setWorkItemsForDiagram([]);
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
buildWorkItemsForDiagram();
|
|
613
|
+
}, [workflows, workItems]);
|
|
482
614
|
const getSelectionDcmtInfo = useCallback(() => {
|
|
483
615
|
let dcmts = [];
|
|
484
616
|
dcmts.push({ TID: TID ?? 0, DID: DID ?? 0 });
|
|
@@ -504,12 +636,30 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
504
636
|
const isSysMetadataDisabled = useMemo(() => layoutMode !== LayoutModes.Update, [layoutMode]);
|
|
505
637
|
const isDetailsDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
|
|
506
638
|
const isMasterDisabled = useMemo(() => layoutMode !== LayoutModes.Update || !DID, [layoutMode, DID]);
|
|
507
|
-
const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || workItems.length <= 0, [layoutMode, fetchError, workItems.length]);
|
|
639
|
+
const isWFDisabled = useMemo(() => layoutMode !== LayoutModes.Update || fetchError || (workItems.length <= 0 && workItemsForDiagram.length <= 0), [layoutMode, fetchError, workItems.length, workItemsForDiagram.length]);
|
|
508
640
|
const showToppyForApprove = useMemo(() => layoutMode === LayoutModes.Update && !fetchError && workItems.length > 0 && !isOpenDetails && !isOpenMaster, [layoutMode, fetchError, workItems.length, isOpenDetails, isOpenMaster]);
|
|
509
|
-
const showToppyForCompleteMoreInfo = useMemo(() =>
|
|
510
|
-
|
|
641
|
+
const showToppyForCompleteMoreInfo = useMemo(() => {
|
|
642
|
+
if (layoutMode !== LayoutModes.Update || !moreInfoTasks) {
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
645
|
+
return moreInfoTasks.some(task => isTaskMoreInfo(task.name) &&
|
|
646
|
+
task.state !== Task_States.Completed);
|
|
647
|
+
}, [layoutMode, moreInfoTasks]);
|
|
648
|
+
const showToppyForReferences = useMemo(() => {
|
|
649
|
+
if (!allowButtonsRefs || layoutMode !== LayoutModes.Update || isOpenDetails || isOpenMaster)
|
|
650
|
+
return false;
|
|
651
|
+
if (!dcmtReferences || dcmtReferences.length === 0)
|
|
652
|
+
return false;
|
|
653
|
+
// Verifica che ci siano riferimenti renderizzabili (solo Dossier o WorkingGroup)
|
|
654
|
+
return dcmtReferences.some(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup);
|
|
655
|
+
}, [allowButtonsRefs, layoutMode, dcmtReferences, isOpenDetails, isOpenMaster]);
|
|
656
|
+
const isToppyVisible = useMemo(() => Boolean((showToppyForApprove || showToppyForCompleteMoreInfo || showToppyForReferences) && !openS4TViewer), [showToppyForApprove, showToppyForCompleteMoreInfo, showToppyForReferences, openS4TViewer]);
|
|
511
657
|
const isMobile = useMemo(() => deviceType === DeviceType.MOBILE, [deviceType]);
|
|
512
|
-
const isApprView = useMemo(() =>
|
|
658
|
+
const isApprView = useMemo(() => {
|
|
659
|
+
if (!fromDTD)
|
|
660
|
+
return false;
|
|
661
|
+
return isApprovalWorkflowView(fromDTD);
|
|
662
|
+
}, [fromDTD?.id]);
|
|
513
663
|
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
664
|
const approvalVID = useMemo(() => workItems.length > 0 ? Number(workItems[0].tid) : -1, [workItems]);
|
|
515
665
|
//here
|
|
@@ -517,23 +667,20 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
517
667
|
const items = [];
|
|
518
668
|
const operationsItems = [];
|
|
519
669
|
operationsItems.push({
|
|
520
|
-
icon:
|
|
521
|
-
operationType: 'singleRow',
|
|
670
|
+
icon: _jsx(IconDownload, {}),
|
|
522
671
|
disabled: fromDTD?.perm?.canRetrieveFile !== AccessLevels.Yes,
|
|
523
|
-
|
|
672
|
+
name: SDKUI_Localizator.DownloadFile,
|
|
524
673
|
onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Dcmt, "download", undefined, undefined, true)
|
|
525
674
|
}, {
|
|
526
|
-
icon:
|
|
527
|
-
operationType: 'singleRow',
|
|
675
|
+
icon: _jsx(IconDownload, {}),
|
|
528
676
|
disabled: !isXMLFileExt(currentDcmt?.fileExt),
|
|
529
|
-
|
|
677
|
+
name: SDKUI_Localizator.DownloadXMLAttachments,
|
|
530
678
|
onClick: async () => await downloadDcmtsAsync(getDcmts(), DownloadTypes.Attachment, "download", undefined, openConfirmAttachmentsDialog, true)
|
|
531
679
|
});
|
|
532
680
|
if (layoutMode === LayoutModes.Update && DID) {
|
|
533
681
|
operationsItems.push({
|
|
534
|
-
icon:
|
|
535
|
-
|
|
536
|
-
operationType: 'singleRow',
|
|
682
|
+
icon: _jsx(IconStar, {}),
|
|
683
|
+
name: SDKUI_Localizator.AddTo + ' ' + SDKUI_Localizator.Favorites,
|
|
537
684
|
disabled: false,
|
|
538
685
|
onClick: async () => {
|
|
539
686
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.AddToFavs);
|
|
@@ -542,17 +689,17 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
542
689
|
}
|
|
543
690
|
if (onTaskCreateRequest && layoutMode === LayoutModes.Update && DID) {
|
|
544
691
|
operationsItems.push({
|
|
545
|
-
icon:
|
|
546
|
-
|
|
547
|
-
operationType: 'singleRow',
|
|
692
|
+
icon: _jsx(IconActivity, {}),
|
|
693
|
+
name: SDKUI_Localizator.CreateContextualTask,
|
|
548
694
|
disabled: false,
|
|
549
695
|
onClick: () => {
|
|
550
696
|
const dcmt = getDcmts()[0];
|
|
697
|
+
const name = `${fromDTD?.name ?? '-'} (DID: ${dcmt.DID})`;
|
|
551
698
|
const taskContext = {
|
|
552
699
|
document: {
|
|
553
700
|
tid: dcmt.TID,
|
|
554
701
|
did: dcmt.DID,
|
|
555
|
-
name:
|
|
702
|
+
name: name
|
|
556
703
|
}
|
|
557
704
|
};
|
|
558
705
|
onTaskCreateRequest(taskContext);
|
|
@@ -561,76 +708,106 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
561
708
|
}
|
|
562
709
|
if (operationsItems.length > 0) {
|
|
563
710
|
items.push({
|
|
564
|
-
icon:
|
|
565
|
-
|
|
566
|
-
|
|
711
|
+
icon: _jsx(IconCheck, {}),
|
|
712
|
+
name: SDKUI_Localizator.DocumentOperations,
|
|
713
|
+
submenu: operationsItems
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
if (fromDTD?.id !== SystemTIDs.Drafts) {
|
|
717
|
+
// Check in/Check out menu
|
|
718
|
+
const { cicoEnabled, checkoutStatus } = getDcmtCicoStatus(formData, allUsers, fromDTD);
|
|
719
|
+
items.push({
|
|
720
|
+
icon: _jsx(IconFileDots, {}),
|
|
721
|
+
name: "Check in/Check out",
|
|
722
|
+
disabled: false,
|
|
723
|
+
submenu: [
|
|
724
|
+
{
|
|
725
|
+
name: 'Check out',
|
|
726
|
+
disabled: !cicoEnabled || checkoutStatus.isCheckedOut,
|
|
727
|
+
onClick: () => handleCheckOutOperationCallback(true),
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
name: 'Check in',
|
|
731
|
+
onClick: () => handleCheckInOperationCallback(),
|
|
732
|
+
disabled: !cicoEnabled || !checkoutStatus.isCheckedOut || checkoutStatus.mode === 'lockMode'
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
name: SDKUI_Localizator.CancelCheckOut,
|
|
736
|
+
disabled: !cicoEnabled || !checkoutStatus.isCheckedOut || checkoutStatus.mode === 'lockMode',
|
|
737
|
+
onClick: () => handleCheckOutOperationCallback(false),
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
name: SDKUI_Localizator.CheckoutInfo,
|
|
741
|
+
onClick: showCheckoutInformationFormCallback,
|
|
742
|
+
disabled: !checkoutStatus.isCheckedOut
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
name: SDKUI_Localizator.CopyCheckoutPath,
|
|
746
|
+
onClick: copyCheckoutPathToClipboardOperationCallback,
|
|
747
|
+
disabled: !checkoutStatus.isCheckedOut
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
name: SDKUI_Localizator.History,
|
|
751
|
+
disabled: !cicoEnabled,
|
|
752
|
+
onClick: showHistoryCallback,
|
|
753
|
+
},
|
|
754
|
+
]
|
|
567
755
|
});
|
|
568
756
|
}
|
|
569
757
|
if (allowRelations && layoutMode === LayoutModes.Update && DID) {
|
|
570
758
|
const relationsItems = [
|
|
571
759
|
{
|
|
572
|
-
icon:
|
|
573
|
-
|
|
574
|
-
operationType: 'singleRow',
|
|
760
|
+
icon: _jsx(IconPair, {}),
|
|
761
|
+
name: SDKUI_Localizator.MatchManyDocumentsManyToMany,
|
|
575
762
|
disabled: !hasManyToManyRelation,
|
|
576
763
|
onClick: async () => await pairManyToMany?.(true)
|
|
577
764
|
},
|
|
578
765
|
{
|
|
579
|
-
icon:
|
|
580
|
-
|
|
581
|
-
operationType: 'singleRow',
|
|
766
|
+
icon: _jsx(IconUnpair, {}),
|
|
767
|
+
name: SDKUI_Localizator.UnmatchManyDocumentsManyToMany,
|
|
582
768
|
disabled: !hasManyToManyRelation,
|
|
583
769
|
onClick: async () => await pairManyToMany?.(false)
|
|
584
770
|
},
|
|
585
771
|
{
|
|
586
|
-
icon:
|
|
587
|
-
|
|
588
|
-
operationType: 'singleRow',
|
|
589
|
-
beginGroup: true,
|
|
772
|
+
icon: _jsx(IconArchiveMaster, {}),
|
|
773
|
+
name: SDKUI_Localizator.ArchiveMasterDocument,
|
|
590
774
|
disabled: canArchiveMasterRelation !== true,
|
|
591
775
|
onClick: async () => { if (TID)
|
|
592
776
|
await archiveMasterDocuments?.(TID); }
|
|
593
777
|
},
|
|
594
778
|
{
|
|
595
|
-
icon:
|
|
596
|
-
|
|
597
|
-
operationType: 'singleRow',
|
|
779
|
+
icon: _jsx(IconArchiveDetail, {}),
|
|
780
|
+
name: SDKUI_Localizator.ArchiveDetailDocument,
|
|
598
781
|
disabled: canArchiveDetailRelation !== true,
|
|
599
782
|
onClick: async () => { if (TID)
|
|
600
783
|
await archiveDetailDocuments?.(TID); }
|
|
601
784
|
},
|
|
602
785
|
{
|
|
603
|
-
icon:
|
|
604
|
-
|
|
605
|
-
operationType: 'singleRow',
|
|
606
|
-
visible: true,
|
|
607
|
-
beginGroup: true,
|
|
786
|
+
icon: _jsx(IconDetailDcmts, { transform: 'scale(-1, 1)' }),
|
|
787
|
+
name: SDKUI_Localizator.DcmtsMaster,
|
|
608
788
|
disabled: !currentTIDHasMasterRelations || isMasterDisabled,
|
|
609
789
|
onClick: () => { if (!isMasterDisabled)
|
|
610
790
|
setIsOpenMaster(!isOpenMaster); }
|
|
611
791
|
},
|
|
612
792
|
{
|
|
613
|
-
icon:
|
|
614
|
-
|
|
615
|
-
operationType: 'singleRow',
|
|
793
|
+
icon: _jsx(IconDetailDcmts, {}),
|
|
794
|
+
name: SDKUI_Localizator.DcmtsDetail,
|
|
616
795
|
disabled: !currentTIDHasDetailRelations || isDetailsDisabled,
|
|
617
|
-
visible: true,
|
|
618
796
|
onClick: () => { if (!isDetailsDisabled)
|
|
619
797
|
setIsOpenDetails(!isOpenDetails); }
|
|
620
798
|
}
|
|
621
799
|
];
|
|
622
800
|
items.push({
|
|
623
|
-
icon:
|
|
624
|
-
|
|
625
|
-
|
|
801
|
+
icon: _jsx(IconRelation, {}),
|
|
802
|
+
name: SDKUI_Localizator.Relations,
|
|
803
|
+
submenu: relationsItems
|
|
626
804
|
});
|
|
627
805
|
}
|
|
628
806
|
if (layoutMode === LayoutModes.Update && DID) {
|
|
629
807
|
const fullTextItems = [
|
|
630
808
|
{
|
|
631
|
-
icon:
|
|
632
|
-
|
|
633
|
-
operationType: 'singleRow',
|
|
809
|
+
icon: _jsx(IconInfo, {}),
|
|
810
|
+
name: SDKUI_Localizator.IndexingInformation,
|
|
634
811
|
disabled: false,
|
|
635
812
|
onClick: async () => {
|
|
636
813
|
try {
|
|
@@ -648,18 +825,16 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
648
825
|
}
|
|
649
826
|
},
|
|
650
827
|
{
|
|
651
|
-
icon:
|
|
652
|
-
|
|
653
|
-
operationType: 'singleRow',
|
|
828
|
+
icon: _jsx(IconArchiveDoc, {}),
|
|
829
|
+
name: SDKUI_Localizator.IndexOrReindex,
|
|
654
830
|
disabled: false,
|
|
655
831
|
onClick: async () => {
|
|
656
832
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.FreeSearchReindex);
|
|
657
833
|
}
|
|
658
834
|
},
|
|
659
835
|
{
|
|
660
|
-
icon:
|
|
661
|
-
|
|
662
|
-
operationType: 'singleRow',
|
|
836
|
+
icon: _jsx(IconDelete, {}),
|
|
837
|
+
name: SDKUI_Localizator.IndexingDelete,
|
|
663
838
|
disabled: false,
|
|
664
839
|
onClick: async () => {
|
|
665
840
|
await runOperationAsync(getDcmts(), DcmtOperationTypes.FreeSearchPurge);
|
|
@@ -667,9 +842,9 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
667
842
|
}
|
|
668
843
|
];
|
|
669
844
|
items.push({
|
|
670
|
-
icon:
|
|
671
|
-
|
|
672
|
-
|
|
845
|
+
icon: _jsx(IconSearch, {}),
|
|
846
|
+
name: SDKUI_Localizator.FullTextSearch,
|
|
847
|
+
submenu: fullTextItems
|
|
673
848
|
});
|
|
674
849
|
}
|
|
675
850
|
// Aggiungi submenu "Bottoni personalizzati" se esistono customButtons
|
|
@@ -677,18 +852,19 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
677
852
|
const customButtonsItems = customButtonsLayout.customButtons
|
|
678
853
|
.filter((customButton) => customButton.isForUpdate && customButton.isForUpdate > 0)
|
|
679
854
|
.map((customButton) => ({
|
|
680
|
-
icon:
|
|
681
|
-
|
|
855
|
+
icon: TMImageLibrary({ imageID: customButton.glyphID }),
|
|
856
|
+
name: customButton.title || 'Bottone personalizzato',
|
|
682
857
|
onClick: () => setCustomButton(customButton)
|
|
683
858
|
}));
|
|
684
|
-
items.push({
|
|
685
|
-
icon:
|
|
686
|
-
|
|
687
|
-
|
|
859
|
+
customButtonsItems && customButtonsItems.length > 0 && items.push({
|
|
860
|
+
icon: _jsx(IconCustom, {}),
|
|
861
|
+
name: SDKUI_Localizator.CustomButtons,
|
|
862
|
+
submenu: customButtonsItems
|
|
688
863
|
});
|
|
689
864
|
}
|
|
690
865
|
return items;
|
|
691
866
|
}, [
|
|
867
|
+
fromDTD?.id,
|
|
692
868
|
fromDTD?.perm?.canRetrieveFile,
|
|
693
869
|
fromDTD?.description,
|
|
694
870
|
currentDcmt?.fileExt,
|
|
@@ -714,8 +890,9 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
714
890
|
openConfirmAttachmentsDialog
|
|
715
891
|
]);
|
|
716
892
|
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(
|
|
893
|
+
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 &&
|
|
894
|
+
_jsx(ContextMenu, { items: commandsMenuItems, trigger: "left", children: _jsx(IconMenuVertical, { color: 'white', cursor: 'pointer' }) }), layoutMode === LayoutModes.Ark &&
|
|
895
|
+
_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
896
|
const handleUndo = useCallback(() => {
|
|
720
897
|
setFormData(structuredClone(formDataOrig));
|
|
721
898
|
}, [formDataOrig]);
|
|
@@ -731,6 +908,60 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
731
908
|
},
|
|
732
909
|
});
|
|
733
910
|
}, [isModal, id, layoutMode]);
|
|
911
|
+
// Funzione helper per ottenere e aggiornare i metadati con gestione errori centralizzata
|
|
912
|
+
const refreshMetadataAsync = useCallback(async () => {
|
|
913
|
+
let metadataResult = undefined;
|
|
914
|
+
let hasGetMetadataError = false;
|
|
915
|
+
try {
|
|
916
|
+
metadataResult = await SDK_Globals.tmSession?.NewSearchEngine().GetMetadataAsync(TID, DID, true);
|
|
917
|
+
}
|
|
918
|
+
catch (metadataError) {
|
|
919
|
+
hasGetMetadataError = true;
|
|
920
|
+
// Estrai ErrorCode dal campo detail se disponibile
|
|
921
|
+
let errorCode = undefined;
|
|
922
|
+
if (metadataError?.isApiException && metadataError?.response?.detail) {
|
|
923
|
+
try {
|
|
924
|
+
const detailObj = JSON.parse(metadataError.response.detail);
|
|
925
|
+
errorCode = detailObj?.ErrorCode;
|
|
926
|
+
}
|
|
927
|
+
catch (parseError) {
|
|
928
|
+
console.log("Impossibile parsare il detail dell'eccezione:", parseError);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
// Se ErrorCode è -5, mostra messaggio personalizzato, altrimenti mostra l'eccezione originale
|
|
932
|
+
if (errorCode === -5) {
|
|
933
|
+
TMMessageBoxManager.show({
|
|
934
|
+
message: SDKUI_Localizator.DcmtOutOfView,
|
|
935
|
+
buttons: [ButtonNames.OK],
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
TMExceptionBoxManager.show({ exception: metadataError });
|
|
940
|
+
}
|
|
941
|
+
// Usa null per indicare al callback che c'è stato un errore e non deve ritentare
|
|
942
|
+
metadataResult = null;
|
|
943
|
+
}
|
|
944
|
+
// Aggiorna i metadati locali solo se non ci sono stati errori
|
|
945
|
+
if (!hasGetMetadataError && metadataResult && metadataResult !== null) {
|
|
946
|
+
await setMetadataList(fromDTDRef.current?.metadata ?? [], metadataResult);
|
|
947
|
+
}
|
|
948
|
+
return { success: !hasGetMetadataError, result: metadataResult };
|
|
949
|
+
}, [TID, DID, setMetadataList]);
|
|
950
|
+
const updateCurrentDcmt = useCallback(async () => {
|
|
951
|
+
try {
|
|
952
|
+
TMSpinner.show({ description: 'Aggiornamento in corso...' });
|
|
953
|
+
const { success, result: metadataResult } = await refreshMetadataAsync();
|
|
954
|
+
if (!success)
|
|
955
|
+
onClose?.();
|
|
956
|
+
await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
|
|
957
|
+
}
|
|
958
|
+
catch (e) {
|
|
959
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
960
|
+
}
|
|
961
|
+
finally {
|
|
962
|
+
TMSpinner.hide();
|
|
963
|
+
}
|
|
964
|
+
}, [refreshMetadataAsync, onClose]);
|
|
734
965
|
const handleSave = useCallback(async () => {
|
|
735
966
|
const ue = new UpdateEngineByID(SDK_Globals.tmSession);
|
|
736
967
|
ue.DID = DID;
|
|
@@ -767,55 +998,20 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
767
998
|
const savedFormData = structuredClone(formDataRef.current);
|
|
768
999
|
setFormDataOrig(savedFormData);
|
|
769
1000
|
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
|
-
}
|
|
1001
|
+
// Usa la funzione helper per ottenere i metadati aggiornati
|
|
1002
|
+
const { success, result: metadataResult } = await refreshMetadataAsync();
|
|
802
1003
|
// Esegui sempre il callback:
|
|
803
1004
|
// - Se metadataResult è un oggetto: refresh normale
|
|
804
1005
|
// - Se metadataResult è null: GetMetadataAsync fallito, rimuove il documento dalla griglia senza ritentare
|
|
805
1006
|
// - Se metadataResult è undefined: nessun parametro passato, il callback può decidere cosa fare
|
|
806
1007
|
await onSavedAsyncCallback?.(TID, DID, metadataResult === null ? null : metadataResult);
|
|
807
1008
|
// 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
|
-
}
|
|
1009
|
+
if (success) {
|
|
815
1010
|
ShowAlert({ mode: 'success', title: 'Form di documento', message: 'Le modifiche sono state salvate con successo', duration: 3000 });
|
|
816
1011
|
}
|
|
817
|
-
else
|
|
1012
|
+
else {
|
|
818
1013
|
onClose?.();
|
|
1014
|
+
}
|
|
819
1015
|
}
|
|
820
1016
|
catch (e) {
|
|
821
1017
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -823,7 +1019,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
823
1019
|
finally {
|
|
824
1020
|
TMSpinner.hide();
|
|
825
1021
|
}
|
|
826
|
-
}, [DID, TID, getSpecificChangedKeysWithValues, onSavedAsyncCallback, onClose
|
|
1022
|
+
}, [DID, TID, getSpecificChangedKeysWithValues, refreshMetadataAsync, onSavedAsyncCallback, onClose]);
|
|
827
1023
|
const handleArchiveCompleted = useCallback(async () => {
|
|
828
1024
|
let firstBlock = true;
|
|
829
1025
|
let maxFileSize = 0;
|
|
@@ -1012,28 +1208,34 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1012
1208
|
await triggerBlogRefresh();
|
|
1013
1209
|
}
|
|
1014
1210
|
}, [TID, DID, triggerBlogRefresh]);
|
|
1211
|
+
const checkoutBadge = useMemo(() => {
|
|
1212
|
+
const { cicoEnabled, checkoutStatus } = getDcmtCicoStatus(formData, allUsers, fromDTD);
|
|
1213
|
+
if (!cicoEnabled || !checkoutStatus.isCheckedOut)
|
|
1214
|
+
return null;
|
|
1215
|
+
return (_jsx(Ribbon, { "$isMobile": isMobile, children: _jsx(TMTooltip, { content: checkoutStatus.editLockTooltipText, position: "right", children: _jsx("span", { children: checkoutStatus.mode === 'editMode' ? SDKUI_Localizator.CheckOut : 'Locked' }) }) }));
|
|
1216
|
+
}, [formData, fromDTD, isMobile]);
|
|
1015
1217
|
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
|
-
|
|
1218
|
+
return _jsxs(_Fragment, { children: [checkoutBadge && _jsx("div", { style: { padding: '10px', display: 'flex', justifyContent: 'center' }, children: checkoutBadge }), metadataValuesSource.length > 0 &&
|
|
1219
|
+
_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, isReadOnlyOrigin: metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString(), onFocusedItemChanged: (item) => { (item?.mid !== focusedMetadataValue?.mid) && setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
|
|
1220
|
+
setFormData((prevItems) => prevItems.map((item) => {
|
|
1221
|
+
const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
|
|
1222
|
+
return newItem ? { ...item, ...newItem } : item;
|
|
1223
|
+
}));
|
|
1224
|
+
}, onAdvancedMenuClick: (e) => {
|
|
1225
|
+
switch (e.button) {
|
|
1226
|
+
case AdvancedMenuButtons.DistinctValues:
|
|
1227
|
+
setIsOpenDistinctValues(!isOpenDistinctValues);
|
|
1228
|
+
break;
|
|
1229
|
+
case AdvancedMenuButtons.FormulaEditor:
|
|
1230
|
+
setIsOpenFormulaEditor(!isOpenFormulaEditor);
|
|
1231
|
+
break;
|
|
1232
|
+
}
|
|
1233
|
+
} }), _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 })] }) :
|
|
1234
|
+
_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 &&
|
|
1235
|
+
!isApprView &&
|
|
1236
|
+
TID !== SystemTIDs.Drafts &&
|
|
1237
|
+
!shouldShowAll &&
|
|
1238
|
+
_jsx(TMShowAllOrMaxItemsButton, { showAll: showAll, dataSourceLength: totalItems, onClick: () => { setShowAll(!showAll); } })] }), _jsx(ConfirmAttachmentsDialog, {})] })] });
|
|
1037
1239
|
}, [
|
|
1038
1240
|
TID,
|
|
1039
1241
|
DID,
|
|
@@ -1059,13 +1261,14 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1059
1261
|
showAll,
|
|
1060
1262
|
handleConfirmAction,
|
|
1061
1263
|
handleUndo,
|
|
1062
|
-
handleClearForm
|
|
1264
|
+
handleClearForm,
|
|
1265
|
+
metadataDcmtOrigin
|
|
1063
1266
|
]);
|
|
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]);
|
|
1065
|
-
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]);
|
|
1267
|
+
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]);
|
|
1268
|
+
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, isReadOnlyOrigin: metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString() }), [TID, layoutMode, formData, deviceType, inputMids, metadataDcmtOrigin]);
|
|
1066
1269
|
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (file) => {
|
|
1067
1270
|
setDcmtFile(file);
|
|
1068
|
-
}, enableDragDropOverlay: enableDragDropOverlay }), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
|
|
1271
|
+
}, enableDragDropOverlay: enableDragDropOverlay }, refreshPreviewTrigger), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
|
|
1069
1272
|
const tmWF = useMemo(() => {
|
|
1070
1273
|
if (isWFDataLoading) {
|
|
1071
1274
|
return (_jsx("div", { style: {
|
|
@@ -1080,7 +1283,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1080
1283
|
const isAuthorized = !!workflows?.[0]?.diagram;
|
|
1081
1284
|
return (_jsxs("div", { style: { position: 'relative', width: '100%', height: '100%', display: 'flex', flexDirection: 'column', gap: 3 }, children: [workItems.length > 0
|
|
1082
1285
|
? (isAuthorized
|
|
1083
|
-
? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID })
|
|
1286
|
+
? _jsx(WFDiagram, { xmlDiagramString: workflows?.[0]?.diagram || '', allowEdit: false, currentSetID: workitemSetID, defaultAutoZoom: true, workitems: workItemsForDiagram })
|
|
1084
1287
|
: _jsx("div", { style: {
|
|
1085
1288
|
position: 'absolute',
|
|
1086
1289
|
top: '50%',
|
|
@@ -1089,7 +1292,27 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1089
1292
|
fontSize: '1.1rem',
|
|
1090
1293
|
color: TMColors.primaryColor,
|
|
1091
1294
|
textAlign: 'center',
|
|
1092
|
-
|
|
1295
|
+
display: 'flex',
|
|
1296
|
+
flexDirection: 'column',
|
|
1297
|
+
alignItems: 'center',
|
|
1298
|
+
gap: '12px',
|
|
1299
|
+
}, 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: () => {
|
|
1300
|
+
TMMessageBoxManager.show({
|
|
1301
|
+
title: 'Dettagli Errore Workflow',
|
|
1302
|
+
initialWidth: !isMobile ? '700px' : undefined,
|
|
1303
|
+
message: (_jsx("pre", { style: {
|
|
1304
|
+
whiteSpace: 'pre-wrap',
|
|
1305
|
+
background: '#f5f5f5',
|
|
1306
|
+
padding: '12px',
|
|
1307
|
+
borderRadius: '6px',
|
|
1308
|
+
userSelect: 'text',
|
|
1309
|
+
cursor: 'text',
|
|
1310
|
+
}, children: wfError })),
|
|
1311
|
+
resizable: true,
|
|
1312
|
+
showToppy: false,
|
|
1313
|
+
buttons: [ButtonNames.OK],
|
|
1314
|
+
});
|
|
1315
|
+
} }) }))] }) }))
|
|
1093
1316
|
: _jsx("div", { style: {
|
|
1094
1317
|
position: 'absolute',
|
|
1095
1318
|
top: '50%',
|
|
@@ -1104,7 +1327,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1104
1327
|
backgroundColor: 'khaki',
|
|
1105
1328
|
borderRadius: 8
|
|
1106
1329
|
}, children: SDKUI_Localizator.WorkItemTechnicalNote_SetID })] }));
|
|
1107
|
-
}, [workflows, formData, workitemSetID, workItems, isWFDataLoading]);
|
|
1330
|
+
}, [workflows, formData, workitemSetID, workItems, workItemsForDiagram, isWFDataLoading, wfError, isMobile]);
|
|
1108
1331
|
const tmDcmtTasks = useMemo(() => {
|
|
1109
1332
|
const isReady = TID && DID && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback;
|
|
1110
1333
|
if (!isReady) {
|
|
@@ -1135,89 +1358,117 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1135
1358
|
'tmWF': false,
|
|
1136
1359
|
'tmDcmtTasks': false,
|
|
1137
1360
|
};
|
|
1138
|
-
const
|
|
1139
|
-
{
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1361
|
+
const getDcmtTasksCounter = (TID, DID, allTasks) => {
|
|
1362
|
+
if (!TID || !DID || !allTasks || allTasks.length === 0) {
|
|
1363
|
+
return {
|
|
1364
|
+
assignedToMe: 0,
|
|
1365
|
+
assignedByMe: 0
|
|
1366
|
+
};
|
|
1367
|
+
}
|
|
1368
|
+
try {
|
|
1369
|
+
const assignedToMe = getTaskAssignedToMe(allTasks).filter(task => task.iD1?.toString() === TID.toString() && task.iD2?.toString() === DID.toString() && task.state !== Task_States.Completed).length ?? 0;
|
|
1370
|
+
const assignedByMe = getTaskAssignedByMe(allTasks).filter(task => task.iD1?.toString() === TID.toString() && task.iD2?.toString() === DID.toString() && task.state !== Task_States.Completed).length ?? 0;
|
|
1371
|
+
return {
|
|
1372
|
+
assignedToMe,
|
|
1373
|
+
assignedByMe
|
|
1374
|
+
};
|
|
1375
|
+
}
|
|
1376
|
+
catch (error) {
|
|
1377
|
+
return {
|
|
1378
|
+
assignedToMe: 0,
|
|
1379
|
+
assignedByMe: 0
|
|
1380
|
+
};
|
|
1381
|
+
}
|
|
1382
|
+
};
|
|
1383
|
+
const initialPanels = useMemo(() => {
|
|
1384
|
+
const { assignedToMe, assignedByMe } = getDcmtTasksCounter(TID, DID, allTasks);
|
|
1385
|
+
let titleDcmtFormPanel = fromDTD?.nameLoc ?? "";
|
|
1386
|
+
// Caso: Il documento proviene da un'origine esterna
|
|
1387
|
+
if (metadataDcmtOrigin?.fromTID?.toString() !== TID?.toString()) {
|
|
1388
|
+
titleDcmtFormPanel = (_jsxs("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' }, children: [_jsx(TMTooltip, { content: _jsxs("div", { style: { textAlign: 'left' }, children: [_jsx("p", { children: "Questo documento proviene da un'altra origine e non pu\u00F2 essere modificato." }), _jsx("hr", {}), _jsxs("p", { children: [_jsx("strong", { children: "TID corrente:" }), " ", TID?.toString()] }), _jsxs("p", { children: [_jsx("strong", { children: "Nome corrente:" }), " ", fromDTD?.nameLoc] }), _jsx("hr", {}), _jsxs("p", { children: [_jsx("strong", { children: "TID origine:" }), " ", metadataDcmtOrigin?.fromTID?.toString()] }), _jsxs("p", { children: [_jsx("strong", { children: "Nome origine:" }), " ", metadataDcmtOrigin?.fromName] })] }), children: _jsx(IconLock, { fontSize: 16, style: { alignSelf: 'center' } }) }), metadataDcmtOrigin?.fromName] }));
|
|
1389
|
+
}
|
|
1390
|
+
const panels = [
|
|
1391
|
+
{
|
|
1392
|
+
id: 'tmDcmtForm',
|
|
1393
|
+
name: SDK_Localizator.Metadatas,
|
|
1394
|
+
contentOptions: {
|
|
1395
|
+
component: tmDcmtForm,
|
|
1396
|
+
isClosable: isClosable,
|
|
1397
|
+
panelContainer: {
|
|
1398
|
+
showHeader: showHeader,
|
|
1399
|
+
title: titleDcmtFormPanel,
|
|
1400
|
+
allowMaximize: !isMobile,
|
|
1401
|
+
onBack: showBackButton ? (isClosable && deviceType !== DeviceType.MOBILE) ? undefined : handleClose : undefined,
|
|
1402
|
+
onClose: isClosable ? () => { } : undefined,
|
|
1403
|
+
toolbar: allowNavigation ? formToolbar : _jsx(_Fragment, {})
|
|
1404
|
+
},
|
|
1152
1405
|
},
|
|
1406
|
+
toolbarOptions: {
|
|
1407
|
+
icon: _jsx(IconPreview, { fontSize: 24 }),
|
|
1408
|
+
visible: true,
|
|
1409
|
+
orderNumber: 1,
|
|
1410
|
+
isActive: allInitialPanelVisibility['tmDcmtForm']
|
|
1411
|
+
}
|
|
1153
1412
|
},
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
contentOptions: { component: tmBlog, panelContainer: { title: SDKUI_Localizator.BlogCase, allowMaximize: !isMobile } },
|
|
1165
|
-
toolbarOptions: {
|
|
1166
|
-
icon: _jsx(IconBoard, { fontSize: 24 }),
|
|
1167
|
-
visible: true,
|
|
1168
|
-
disabled: isBoardDisabled,
|
|
1169
|
-
orderNumber: 2,
|
|
1170
|
-
isActive: allInitialPanelVisibility['tmBlog']
|
|
1171
|
-
}
|
|
1172
|
-
},
|
|
1173
|
-
{
|
|
1174
|
-
id: 'tmSysMetadata',
|
|
1175
|
-
name: SDKUI_Localizator.MetadataSystem,
|
|
1176
|
-
contentOptions: { component: tmSysMetadata, panelContainer: { title: SDKUI_Localizator.MetadataSystem, allowMaximize: !isMobile } },
|
|
1177
|
-
toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: true, disabled: isSysMetadataDisabled, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
|
|
1178
|
-
},
|
|
1179
|
-
{
|
|
1180
|
-
id: 'tmDcmtPreview',
|
|
1181
|
-
name: SDKUI_Localizator.PreviewDocument,
|
|
1182
|
-
contentOptions: { component: tmDcmtPreview },
|
|
1183
|
-
toolbarOptions: { icon: _jsx(IconShow, { fontSize: 24 }), disabled: isPreviewDisabled, visible: true, orderNumber: 4, isActive: allInitialPanelVisibility['tmDcmtPreview'] }
|
|
1184
|
-
},
|
|
1185
|
-
{
|
|
1186
|
-
id: 'tmWF',
|
|
1187
|
-
name: "Workflow",
|
|
1188
|
-
contentOptions: {
|
|
1189
|
-
component: tmWF,
|
|
1190
|
-
panelContainer: {
|
|
1191
|
-
title: "Workflow", allowMaximize: !isMobile
|
|
1413
|
+
{
|
|
1414
|
+
id: 'tmBlog',
|
|
1415
|
+
name: SDKUI_Localizator.BlogCase,
|
|
1416
|
+
contentOptions: { component: tmBlog, panelContainer: { title: SDKUI_Localizator.BlogCase, allowMaximize: !isMobile } },
|
|
1417
|
+
toolbarOptions: {
|
|
1418
|
+
icon: _jsx(IconBoard, { fontSize: 24 }),
|
|
1419
|
+
visible: true,
|
|
1420
|
+
disabled: isBoardDisabled,
|
|
1421
|
+
orderNumber: 2,
|
|
1422
|
+
isActive: allInitialPanelVisibility['tmBlog']
|
|
1192
1423
|
}
|
|
1193
1424
|
},
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
orderNumber:
|
|
1199
|
-
isActive: allInitialPanelVisibility['tmWF']
|
|
1200
|
-
}
|
|
1201
|
-
},
|
|
1202
|
-
{
|
|
1203
|
-
id: 'tmDcmtTasks',
|
|
1204
|
-
name: SDKUI_Localizator.Widget_Activities,
|
|
1205
|
-
contentOptions: {
|
|
1206
|
-
component: tmDcmtTasks,
|
|
1425
|
+
{
|
|
1426
|
+
id: 'tmSysMetadata',
|
|
1427
|
+
name: SDKUI_Localizator.MetadataSystem,
|
|
1428
|
+
contentOptions: { component: tmSysMetadata, panelContainer: { title: SDKUI_Localizator.MetadataSystem, allowMaximize: !isMobile } },
|
|
1429
|
+
toolbarOptions: { icon: _jsx(IconDcmtTypeSys, { fontSize: 24 }), visible: true, disabled: isSysMetadataDisabled, orderNumber: 3, isActive: allInitialPanelVisibility['tmSysMetadata'] }
|
|
1207
1430
|
},
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
isActive: allInitialPanelVisibility['
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1431
|
+
{
|
|
1432
|
+
id: 'tmDcmtPreview',
|
|
1433
|
+
name: SDKUI_Localizator.PreviewDocument,
|
|
1434
|
+
contentOptions: { component: tmDcmtPreview },
|
|
1435
|
+
toolbarOptions: { icon: _jsx(IconShow, { fontSize: 24 }), disabled: isPreviewDisabled, visible: true, orderNumber: 4, isActive: allInitialPanelVisibility['tmDcmtPreview'] }
|
|
1436
|
+
},
|
|
1437
|
+
{
|
|
1438
|
+
id: 'tmWF',
|
|
1439
|
+
name: "Workflow",
|
|
1440
|
+
contentOptions: {
|
|
1441
|
+
component: tmWF,
|
|
1442
|
+
panelContainer: {
|
|
1443
|
+
title: "Workflow", allowMaximize: !isMobile
|
|
1444
|
+
}
|
|
1445
|
+
},
|
|
1446
|
+
toolbarOptions: {
|
|
1447
|
+
icon: _jsx(IconWorkflow, { fontSize: 24 }),
|
|
1448
|
+
visible: true,
|
|
1449
|
+
disabled: isWFDisabled,
|
|
1450
|
+
orderNumber: 5,
|
|
1451
|
+
isActive: allInitialPanelVisibility['tmWF']
|
|
1452
|
+
}
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
id: 'tmDcmtTasks',
|
|
1456
|
+
name: SDKUI_Localizator.Widget_Activities,
|
|
1457
|
+
contentOptions: {
|
|
1458
|
+
component: tmDcmtTasks,
|
|
1459
|
+
},
|
|
1460
|
+
toolbarOptions: {
|
|
1461
|
+
icon: _jsx(IconActivity, { fontSize: 24 }),
|
|
1462
|
+
visible: layoutMode !== LayoutModes.Ark,
|
|
1463
|
+
orderNumber: 6,
|
|
1464
|
+
isActive: allInitialPanelVisibility['tmDcmtTasks'],
|
|
1465
|
+
count: assignedToMe + assignedByMe,
|
|
1466
|
+
tooltip: _jsx("div", { children: assignedToMe + assignedByMe === 0 ? (SDKUI_Localizator.Widget_Activities) : (_jsxs("div", { children: [_jsx("div", { style: { textAlign: 'center', fontWeight: 'bold' }, children: SDKUI_Localizator.Widget_Activities }), _jsxs("div", { style: { textAlign: 'left' }, children: [_jsxs("div", { children: [SDKUI_Localizator.AssignedToMe, ": ", assignedToMe] }), _jsxs("div", { children: [SDKUI_Localizator.AssignedByMe, ": ", assignedByMe] })] })] })) })
|
|
1467
|
+
}
|
|
1468
|
+
},
|
|
1469
|
+
];
|
|
1470
|
+
return panels;
|
|
1471
|
+
}, [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID, metadataDcmtOrigin?.fromTID]);
|
|
1221
1472
|
// Retrieves the current document form setting based on the normalized TID
|
|
1222
1473
|
const getCurrentDcmtFormSetting = () => {
|
|
1223
1474
|
const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
|
|
@@ -1229,7 +1480,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1229
1480
|
// Checks if there's a saved panel layout for the current context (ToDo or general)
|
|
1230
1481
|
const hasSavedLayout = () => {
|
|
1231
1482
|
const { setting } = getCurrentDcmtFormSetting();
|
|
1232
|
-
if (
|
|
1483
|
+
if (invocationContext === InvocationContext.Todo) {
|
|
1233
1484
|
// If invoked by ToDo, check for existence of layoutToDo and that it has keys
|
|
1234
1485
|
return setting.layoutToDo !== undefined && Object.keys(setting.layoutToDo).length > 0;
|
|
1235
1486
|
}
|
|
@@ -1248,8 +1499,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1248
1499
|
// Prepare the new setting object with updated layout depending on context
|
|
1249
1500
|
const newSetting = {
|
|
1250
1501
|
TID: normalizedTID,
|
|
1251
|
-
layout:
|
|
1252
|
-
layoutToDo:
|
|
1502
|
+
layout: invocationContext === InvocationContext.Todo ? (existingSetting.layout ?? {}) : state,
|
|
1503
|
+
layoutToDo: invocationContext === InvocationContext.Todo ? state : (existingSetting.layoutToDo ?? {}),
|
|
1253
1504
|
};
|
|
1254
1505
|
// Replace existing setting if found, otherwise push a new one
|
|
1255
1506
|
if (idx >= 0) {
|
|
@@ -1268,12 +1519,12 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1268
1519
|
return undefined;
|
|
1269
1520
|
const settings = getCurrentDcmtFormSetting()?.setting;
|
|
1270
1521
|
// Return the appropriate layout based on context
|
|
1271
|
-
return
|
|
1522
|
+
return invocationContext === InvocationContext.Todo ? settings?.layoutToDo : settings?.layout;
|
|
1272
1523
|
};
|
|
1273
1524
|
const handleCompleteMoreInfo = useCallback(async () => {
|
|
1274
1525
|
try {
|
|
1275
1526
|
TMSpinner.show();
|
|
1276
|
-
let newTask = { ...
|
|
1527
|
+
let newTask = { ...moreInfoTasks, state: Task_States.Completed };
|
|
1277
1528
|
await SDK_Globals.tmSession?.NewTaskEngine().UpdateAsync(newTask);
|
|
1278
1529
|
onTaskCompleted?.(newTask);
|
|
1279
1530
|
onClose?.();
|
|
@@ -1286,7 +1537,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1286
1537
|
finally {
|
|
1287
1538
|
TMSpinner.hide();
|
|
1288
1539
|
}
|
|
1289
|
-
}, [
|
|
1540
|
+
}, [moreInfoTasks, onTaskCompleted, onClose]);
|
|
1290
1541
|
const handleSignApprove = useCallback(() => {
|
|
1291
1542
|
if (onOpenS4TViewerRequest && TID && DID) {
|
|
1292
1543
|
onOpenS4TViewerRequest([{ TID, DID }]);
|
|
@@ -1312,8 +1563,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1312
1563
|
}, [onReferenceClick]);
|
|
1313
1564
|
// Mapping for objClass specific label/action. Easy to extend for future objClass types.
|
|
1314
1565
|
const referenceActionMap = useMemo(() => ({
|
|
1315
|
-
[ObjectClasses.Dossier]: { label:
|
|
1316
|
-
[ObjectClasses.WorkingGroup]: { label:
|
|
1566
|
+
[ObjectClasses.Dossier]: { label: SDKUI_Localizator.GoToDossier },
|
|
1567
|
+
[ObjectClasses.WorkingGroup]: { label: SDKUI_Localizator.GoToWorkgroup },
|
|
1317
1568
|
// add other ObjectClasses here as needed
|
|
1318
1569
|
}), []);
|
|
1319
1570
|
const renderDcmtForm = () => {
|
|
@@ -1330,29 +1581,26 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1330
1581
|
height: '100%',
|
|
1331
1582
|
position: 'relative',
|
|
1332
1583
|
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
|
-
|
|
1584
|
+
}, 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)
|
|
1585
|
+
? _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", parentId: groupId, showToolbar: showDcmtFormSidebar })
|
|
1586
|
+
: _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 &&
|
|
1587
|
+
_jsx(TMDistinctValues, { tid: TID, mid: focusedMetadataValue?.mid, isModal: true, showHeader: false, layoutMode: layoutMode, onClosePanelCallback: () => setIsOpenDistinctValues(false), onSelectionChanged: (e) => {
|
|
1588
|
+
if (!e)
|
|
1589
|
+
return;
|
|
1590
|
+
setFormData((prevItems) => prevItems.map((item) => item.tid == e.tid && item.mid === e.mid ? { ...item, value: e.newValue } : item));
|
|
1591
|
+
} }), isOpenFormulaEditor &&
|
|
1592
|
+
_jsx(TMFormulaEditor, { isModal: true, formMode: FormModes.Update, inputData: getFormula(), showBack: false, onClose: () => setIsOpenFormulaEditor(false), onApplied: (newFormula) => {
|
|
1593
|
+
setFormData((prevItems) => prevItems.map((item) => item.tid == newFormula.tid && item.mid === newFormula.mid ? { ...item, value: FormulaHelper.addFormulaTag(newFormula.expression), isSelected: true, isEditable: true } : item));
|
|
1594
|
+
setFocusedMetadataValue(prevState => ({
|
|
1595
|
+
...prevState,
|
|
1596
|
+
isSelected: true,
|
|
1597
|
+
isEditable: true,
|
|
1598
|
+
value: FormulaHelper.addFormulaTag(newFormula.expression)
|
|
1599
|
+
}));
|
|
1600
|
+
} }), 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
1601
|
_jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true), dtd: fromDTD })
|
|
1351
1602
|
:
|
|
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
|
|
1603
|
+
_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
1604
|
.map((ref, index, arr) => {
|
|
1357
1605
|
const mapEntry = referenceActionMap[String(ref.objClass)];
|
|
1358
1606
|
const label = mapEntry?.label ?? 'Vai a riferimento';
|
|
@@ -1400,7 +1648,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1400
1648
|
finally {
|
|
1401
1649
|
TMSpinner.hide();
|
|
1402
1650
|
}
|
|
1403
|
-
}, onClose: () => setShowManyToManyChooser(false), manageUseLocalizedName: false })),
|
|
1651
|
+
}, 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) &&
|
|
1652
|
+
_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
1653
|
setIsOpenArchiveRelationForm(false);
|
|
1405
1654
|
setArchiveType(undefined);
|
|
1406
1655
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
@@ -1411,7 +1660,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1411
1660
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
1412
1661
|
setArchiveRelatedDcmtFormMids([]);
|
|
1413
1662
|
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 }) }))] }));
|
|
1663
|
+
}, 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
1664
|
};
|
|
1416
1665
|
export default TMDcmtForm;
|
|
1417
1666
|
/**
|
|
@@ -1434,8 +1683,11 @@ const applyMetadataFilter = (data, showAll, listMaxItems, TID) => {
|
|
|
1434
1683
|
o.mid === SystemMIDsAsNumber.FileSize ||
|
|
1435
1684
|
o.mid === SystemMIDsAsNumber.LastUpdateTime ||
|
|
1436
1685
|
o.mid === SystemMIDsAsNumber.CreationTime;
|
|
1686
|
+
const chronologySystemFilter = (o) => baseFilter(o) ||
|
|
1687
|
+
o.mid === SystemMIDsAsNumber.FileExt ||
|
|
1688
|
+
o.mid === SystemMIDsAsNumber.FileSize;
|
|
1437
1689
|
// Select the appropriate filter based on document type
|
|
1438
|
-
const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : baseFilter;
|
|
1690
|
+
const currentFilter = TID === SystemTIDs.Drafts ? draftFilter : TID === SystemTIDs.Chronology ? chronologySystemFilter : baseFilter;
|
|
1439
1691
|
// Apply filter once
|
|
1440
1692
|
const filteredData = data.filter(currentFilter);
|
|
1441
1693
|
// Return all filtered data or slice to max items
|
|
@@ -1489,3 +1741,35 @@ const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, devi
|
|
|
1489
1741
|
_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
1742
|
_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
1743
|
};
|
|
1744
|
+
const Ribbon = styled.div `
|
|
1745
|
+
font-size: 0.85rem;
|
|
1746
|
+
font-weight: 600;
|
|
1747
|
+
color: #fff;
|
|
1748
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
1749
|
+
--f: .4em; /* control the folded part */
|
|
1750
|
+
position: absolute;
|
|
1751
|
+
top: 2px;
|
|
1752
|
+
left: 2px;
|
|
1753
|
+
z-index: 1200;
|
|
1754
|
+
line-height: 1.6;
|
|
1755
|
+
padding-inline: 0.8lh;
|
|
1756
|
+
padding-bottom: var(--f);
|
|
1757
|
+
border-image: conic-gradient(#0008 0 0) 51%/var(--f);
|
|
1758
|
+
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));
|
|
1759
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg);
|
|
1760
|
+
transform-origin: 100% 100%;
|
|
1761
|
+
background-color: rgba(217, 148, 13, 0.92);
|
|
1762
|
+
display: inline-block;
|
|
1763
|
+
padding-top: 0.1em;
|
|
1764
|
+
white-space: nowrap;
|
|
1765
|
+
transition: ${props => props.$isMobile ? 'none' : 'all 0.3s ease'};
|
|
1766
|
+
cursor: 'default';
|
|
1767
|
+
|
|
1768
|
+
${props => !props.$isMobile && `
|
|
1769
|
+
&:hover {
|
|
1770
|
+
background-color: #d9940d;
|
|
1771
|
+
font-size: 1.1rem;
|
|
1772
|
+
transform: translate(calc((cos(45deg) - 1)*100%), -100%) rotate(-45deg) scale(1.05);
|
|
1773
|
+
}
|
|
1774
|
+
`}
|
|
1775
|
+
`;
|