@topconsultnpm/sdkui-react 6.20.0-dev2.8 → 6.20.0-dev3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +3 -1
- package/lib/components/NewComponents/ContextMenu/styles.js +7 -5
- package/lib/components/base/Styled.d.ts +4 -1
- package/lib/components/base/Styled.js +11 -3
- package/lib/components/base/TMTreeView.d.ts +3 -1
- package/lib/components/base/TMTreeView.js +64 -21
- package/lib/components/choosers/TMDataListItemEditor.d.ts +11 -0
- package/lib/components/choosers/TMDataListItemEditor.js +130 -0
- package/lib/components/choosers/TMDataListItemFields.d.ts +11 -0
- package/lib/components/choosers/TMDataListItemFields.js +61 -0
- package/lib/components/choosers/TMDataListItemPicker.d.ts +1 -0
- package/lib/components/choosers/TMDataListItemPicker.js +178 -18
- package/lib/components/choosers/TMDynDataListItemChooser.js +11 -6
- package/lib/components/choosers/TMImageIDChooser.d.ts +16 -0
- package/lib/components/choosers/TMImageIDChooser.js +53 -0
- package/lib/components/choosers/TMMetadataChooser.js +1 -1
- package/lib/components/editors/TMDateBox.js +1 -1
- package/lib/components/editors/TMHtmlEditor.js +1 -1
- package/lib/components/editors/TMLocalizedTextBox.d.ts +1 -0
- package/lib/components/editors/TMLocalizedTextBox.js +3 -3
- package/lib/components/editors/TMMetadataValues.js +3 -1
- package/lib/components/editors/TMTextBox.js +9 -10
- package/lib/components/features/archive/TMArchive.d.ts +2 -1
- package/lib/components/features/archive/TMArchive.js +31 -44
- package/lib/components/features/blog/TMBlogCommentForm.d.ts +3 -0
- package/lib/components/features/blog/TMBlogCommentForm.js +42 -36
- package/lib/components/features/documents/TMDcmtForm.d.ts +3 -1
- package/lib/components/features/documents/TMDcmtForm.js +197 -45
- package/lib/components/features/documents/TMDcmtTasks.d.ts +3 -1
- package/lib/components/features/documents/TMDcmtTasks.js +2 -2
- package/lib/components/features/documents/TMFileUploader.d.ts +4 -0
- package/lib/components/features/documents/TMFileUploader.js +23 -6
- package/lib/components/features/documents/TMMasterDetailDcmts.js +68 -84
- package/lib/components/features/documents/TMRelationViewer.d.ts +7 -1
- package/lib/components/features/documents/TMRelationViewer.js +395 -78
- package/lib/components/features/search/TMSearchResult.d.ts +2 -0
- package/lib/components/features/search/TMSearchResult.js +82 -79
- package/lib/components/features/search/TMSearchResultsMenuItems.js +2 -2
- package/lib/components/features/tasks/TMTaskForm.d.ts +1 -0
- package/lib/components/features/tasks/TMTaskForm.js +61 -193
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +80 -0
- package/lib/components/features/tasks/TMTaskFormUtils.js +559 -0
- package/lib/components/features/tasks/TMTasksUtils.d.ts +3 -1
- package/lib/components/features/tasks/TMTasksUtils.js +46 -16
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +0 -7
- package/lib/components/features/tasks/TMTasksUtilsView.js +7 -14
- package/lib/components/features/tasks/TMTasksView.js +5 -3
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +20 -3
- package/lib/components/features/workflow/TMWorkflowPopup.js +14 -92
- package/lib/components/features/workflow/diagram/ConnectionComponent.d.ts +1 -0
- package/lib/components/features/workflow/diagram/ConnectionComponent.js +6 -2
- package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
- package/lib/components/features/workflow/diagram/WFDiagram.js +75 -5
- package/lib/components/forms/Login/TMLoginForm.js +1 -1
- package/lib/components/forms/TMSaveForm.js +61 -13
- package/lib/components/grids/TMBlogsPost.js +8 -8
- package/lib/components/grids/TMBlogsPostUtils.js +2 -2
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/pages/TMPage.js +4 -0
- package/lib/components/query/TMQueryEditor.d.ts +1 -0
- package/lib/components/query/TMQueryEditor.js +2 -2
- package/lib/helper/Enum_Localizator.js +5 -0
- package/lib/helper/GlobalStyles.js +3 -0
- package/lib/helper/SDKUI_Globals.d.ts +8 -0
- package/lib/helper/SDKUI_Globals.js +12 -0
- package/lib/helper/SDKUI_Localizator.d.ts +19 -3
- package/lib/helper/SDKUI_Localizator.js +182 -22
- package/lib/helper/TMIcons.d.ts +2 -1
- package/lib/helper/TMIcons.js +4 -1
- package/lib/helper/TMUtils.d.ts +5 -0
- package/lib/helper/TMUtils.js +10 -5
- package/lib/helper/helpers.d.ts +6 -2
- package/lib/helper/helpers.js +24 -8
- package/lib/helper/index.d.ts +1 -0
- package/lib/helper/index.js +1 -0
- package/lib/helper/queryHelper.js +1 -1
- package/lib/hooks/useBetaFeatures.d.ts +1 -0
- package/lib/hooks/useBetaFeatures.js +41 -0
- package/lib/hooks/useDcmtOperations.js +14 -2
- package/lib/hooks/useRelatedDocuments.js +34 -11
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/services/platform_services.d.ts +1 -1
- package/lib/services/platform_services.js +4 -0
- package/package.json +2 -2
|
@@ -28,8 +28,7 @@ const getNonDirectoryFiles = (items, exclude) => {
|
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
30
|
const TMBlogCommentForm = (props) => {
|
|
31
|
-
const maxLength = 1000;
|
|
32
|
-
const { participants, selectedAttachments, selectedAttachmentDid, allFileItems, allArchivedDocumentsFileItems = [], onClose, context, showAttachmentsSection = true, removeAndEditAttachment = true, onFilterCreated, refreshCallback, isCommentRequired = false } = props;
|
|
31
|
+
const { participants, selectedAttachments, selectedAttachmentDid, allFileItems, allArchivedDocumentsFileItems = [], onClose, context, showAttachmentsSection = true, removeAndEditAttachment = true, onFilterCreated, refreshCallback, isCommentRequired = false, maxLength = 1000, onCustomSave } = props;
|
|
33
32
|
// Initialize state with combined array
|
|
34
33
|
const [dataSource, setDataSource] = useState(() => [...getNonDirectoryFiles(allFileItems?.items || [], []), ...allArchivedDocumentsFileItems]);
|
|
35
34
|
const [isEditorEnabled, setIsEditorEnabled] = useState(true);
|
|
@@ -101,14 +100,6 @@ const TMBlogCommentForm = (props) => {
|
|
|
101
100
|
try {
|
|
102
101
|
// Show a loading spinner with a localized description
|
|
103
102
|
TMSpinner.show({ description: SDKUI_Localizator.Comment });
|
|
104
|
-
// Exit early if the engine or its required identifiers are undefined
|
|
105
|
-
if (context.object === undefined
|
|
106
|
-
|| (context.engine === 'WorkingGroupEngine' && !context.object.id)
|
|
107
|
-
|| (context.engine === 'SearchEngine' && (!context.object.tid || !context.object.did))
|
|
108
|
-
|| (context.engine === 'DossierEngine' && !context.object.id)) {
|
|
109
|
-
TMSpinner.hide();
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
103
|
// Create a new BlogPost object
|
|
113
104
|
const blogPost = new BlogPost();
|
|
114
105
|
// Retrieve the comment from formData, or use an empty string if undefined
|
|
@@ -132,36 +123,51 @@ const TMBlogCommentForm = (props) => {
|
|
|
132
123
|
});
|
|
133
124
|
blogPost.attachments = attachment;
|
|
134
125
|
}
|
|
135
|
-
if (
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
// Call the BlogPostAddAsync method to add the blog post to the working group
|
|
139
|
-
const newBlogPostId = await workingGroupEngine.BlogPostAddAsync(context.object.id, blogPost);
|
|
126
|
+
if (onCustomSave) {
|
|
127
|
+
// Use the external save handler - logic is managed externally
|
|
128
|
+
await onCustomSave(blogPost);
|
|
140
129
|
await refreshCallback?.();
|
|
141
|
-
if (newBlogPostId && onFilterCreated) {
|
|
142
|
-
onFilterCreated(post => post.id === newBlogPostId);
|
|
143
|
-
}
|
|
144
|
-
;
|
|
145
130
|
}
|
|
146
|
-
else
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
131
|
+
else {
|
|
132
|
+
// Validate context only when using internal engine logic
|
|
133
|
+
if (context.object === undefined
|
|
134
|
+
|| (context.engine === 'WorkingGroupEngine' && !context.object.id)
|
|
135
|
+
|| (context.engine === 'SearchEngine' && (!context.object.tid || !context.object.did))
|
|
136
|
+
|| (context.engine === 'DossierEngine' && !context.object.id)) {
|
|
137
|
+
TMSpinner.hide();
|
|
138
|
+
return;
|
|
153
139
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
140
|
+
if (context.engine === 'WorkingGroupEngine' && context.object && context.object.id) {
|
|
141
|
+
// Create an instance of WorkingGroupEngine to interact with the working group
|
|
142
|
+
const workingGroupEngine = new WorkingGroupEngine(SDK_Globals.tmSession);
|
|
143
|
+
// Call the BlogPostAddAsync method to add the blog post to the working group
|
|
144
|
+
const newBlogPostId = await workingGroupEngine.BlogPostAddAsync(context.object.id, blogPost);
|
|
145
|
+
await refreshCallback?.();
|
|
146
|
+
if (newBlogPostId && onFilterCreated) {
|
|
147
|
+
onFilterCreated(post => post.id === newBlogPostId);
|
|
148
|
+
}
|
|
149
|
+
;
|
|
150
|
+
}
|
|
151
|
+
else if (context.engine === 'SearchEngine') {
|
|
152
|
+
// Create an instance of SearchEngine
|
|
153
|
+
const searchEngine = SDK_Globals.tmSession?.NewSearchEngine();
|
|
154
|
+
const newBlogPostId = await searchEngine.BlogPostAddAsync(context.object.tid, context.object.did, cleanComment);
|
|
155
|
+
await refreshCallback?.();
|
|
156
|
+
if (newBlogPostId && onFilterCreated) {
|
|
157
|
+
onFilterCreated(post => post.id === newBlogPostId);
|
|
158
|
+
}
|
|
159
|
+
;
|
|
160
|
+
}
|
|
161
|
+
else if (context.engine === 'DossierEngine' && context.object && context.object.id) {
|
|
162
|
+
// Create an instance of DossierEngine
|
|
163
|
+
const dossierEngine = SDK_Globals.tmSession?.NewDossierEngine();
|
|
164
|
+
const newBlogPostId = await dossierEngine.BlogPostAddAsync(context.object.id, blogPost);
|
|
165
|
+
await refreshCallback?.();
|
|
166
|
+
if (newBlogPostId && onFilterCreated) {
|
|
167
|
+
onFilterCreated(post => post.id === newBlogPostId);
|
|
168
|
+
}
|
|
169
|
+
;
|
|
163
170
|
}
|
|
164
|
-
;
|
|
165
171
|
}
|
|
166
172
|
}
|
|
167
173
|
catch (e) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { HomeBlogPost, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, ValidationItem } from '@topconsultnpm/sdk-ts';
|
|
2
|
+
import { DcmtTypeDescriptor, HomeBlogPost, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, ValidationItem } from '@topconsultnpm/sdk-ts';
|
|
3
3
|
import { DcmtInfo, FormModes, MetadataValueDescriptorEx, TaskContext } from '../../../ts';
|
|
4
4
|
/**
|
|
5
5
|
* Definisce il contesto da cui è stato invocato il TMDcmtForm.
|
|
@@ -62,6 +62,7 @@ interface ITMDcmtFormProps {
|
|
|
62
62
|
onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, onRefreshSearchAsync?: (() => Promise<void>)) => void;
|
|
63
63
|
s4TViewerDialogComponent?: React.ReactNode;
|
|
64
64
|
enableDragDropOverlay?: boolean;
|
|
65
|
+
onScanRequest?: (onFileScanned: (file: File) => void) => void;
|
|
65
66
|
passToSearch?: (outputMids: Array<{
|
|
66
67
|
mid: number;
|
|
67
68
|
value: string;
|
|
@@ -71,6 +72,7 @@ interface ITMDcmtFormProps {
|
|
|
71
72
|
sharedSourceDID?: number;
|
|
72
73
|
allowButtonsRefs?: boolean;
|
|
73
74
|
onReferenceClick?: (ref: ObjectRef) => void;
|
|
75
|
+
openPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void) => void;
|
|
74
76
|
}
|
|
75
77
|
declare const TMDcmtForm: React.FC<ITMDcmtFormProps>;
|
|
76
78
|
export default TMDcmtForm;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import TMDcmtPreview from './TMDcmtPreview';
|
|
4
4
|
import { AccessLevels, AppModules, 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';
|
|
5
5
|
import { WorkFlowApproveRejectPopUp, WorkFlowMoreInfoPopUp, WorkFlowOperationButtons, WorkFlowReAssignPopUp } from '../workflow/TMWorkflowPopup';
|
|
@@ -8,10 +8,10 @@ import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
|
8
8
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
9
9
|
import { useRelatedDocuments } from '../../../hooks/useRelatedDocuments';
|
|
10
10
|
import { getWorkItemSetIDAsync, handleArchiveVisibility, searchResultToMetadataValues } from '../../../helper/queryHelper';
|
|
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, getDcmtFormToolbarVisibility } from '../../../helper';
|
|
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, getDcmtFormToolbarVisibility, TASK_MORE_INFO_PREFIX_NAME, taskModalSizes, PDGS_COLORS } from '../../../helper';
|
|
12
12
|
import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
|
|
13
13
|
import { Gutters, TMColors } from '../../../utils/theme';
|
|
14
|
-
import { StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
|
|
14
|
+
import { ReferencesContainer, StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
|
|
15
15
|
import ShowAlert from '../../base/TMAlert';
|
|
16
16
|
import TMButton from '../../base/TMButton';
|
|
17
17
|
import { TMExceptionBoxManager, TMMessageBoxManager, ButtonNames } from '../../base/TMPopUp';
|
|
@@ -46,6 +46,7 @@ import TMDcmtCheckoutInfoForm from '../search/TMDcmtCheckoutInfoForm';
|
|
|
46
46
|
import styled from 'styled-components';
|
|
47
47
|
import { ContextMenu } from '../../NewComponents/ContextMenu';
|
|
48
48
|
import TMToppyDraggableHelpCenter from '../assistant/TMToppyDraggableHelpCenter';
|
|
49
|
+
import TMTaskForm from '../tasks/TMTaskForm';
|
|
49
50
|
//#region Interfaces, Types and Enums
|
|
50
51
|
/**
|
|
51
52
|
* Definisce il contesto da cui è stato invocato il TMDcmtForm.
|
|
@@ -64,7 +65,7 @@ export var InvocationContext;
|
|
|
64
65
|
let abortControllerLocal = new AbortController();
|
|
65
66
|
;
|
|
66
67
|
//#endregion
|
|
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 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, onScanRequest, openPdfEditor, passToSearch, isSharedDcmt = false, sharedSourceTID, sharedSourceDID, allowButtonsRefs = false, onReferenceClick, }) => {
|
|
68
69
|
const { showHistory, showHistoryCallback, hideHistoryCallback, showCheckoutInformationForm, commentFormState, hideCommentFormCallback, showCheckoutInformationFormCallback, hideCheckoutInformationFormCallback, copyCheckoutPathToClipboardCallback, handleCheckOutCallback, handleCheckInCallback, refreshPreviewTrigger, showCicoWaitPanel, cicoWaitPanelTitle, showCicoPrimaryProgress, cicoPrimaryProgressText, cicoPrimaryProgressValue, cicoPrimaryProgressMax, } = useCheckInOutOperations();
|
|
69
70
|
const [id, setID] = useState('');
|
|
70
71
|
const [showWaitPanelLocal, setShowWaitPanelLocal] = useState(false);
|
|
@@ -86,6 +87,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
86
87
|
const [showRejectPopup, setShowRejectPopup] = useState(false);
|
|
87
88
|
const [showReAssignPopup, setShowReAssignPopup] = useState(false);
|
|
88
89
|
const [showMoreInfoPopup, setShowMoreInfoPopup] = useState(false);
|
|
90
|
+
const [showMoreInfoTaskPopup, setShowMoreInfoTaskPopup] = useState(false);
|
|
91
|
+
const [showMoreInfoTaskTask, setShowMoreInfoTaskTask] = useState(undefined);
|
|
89
92
|
const [layout, setLayout] = useState();
|
|
90
93
|
const [customButtonsLayout, setCustomButtonsLayout] = useState();
|
|
91
94
|
const [customButton, setCustomButton] = useState();
|
|
@@ -123,6 +126,10 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
123
126
|
const [refreshBlogTrigger, setRefreshBlogTrigger] = useState(0);
|
|
124
127
|
const [wfError, setWfError] = useState(null);
|
|
125
128
|
const [metadataDcmtOrigin, setMetadataDcmtOrigin] = useState(null);
|
|
129
|
+
const isReadOnlyOriginCallback = useCallback((fromTID) => {
|
|
130
|
+
return layoutMode !== LayoutModes.Ark && layoutMode !== LayoutModes.ArkFromBasket && layoutMode !== LayoutModes.ArkFromFile && layoutMode !== LayoutModes.ArkFromMail
|
|
131
|
+
&& fromTID?.toString() !== TID?.toString();
|
|
132
|
+
}, [layoutMode, TID]);
|
|
126
133
|
const triggerBlogRefresh = useCallback(async () => {
|
|
127
134
|
setRefreshBlogTrigger(prev => prev + 1);
|
|
128
135
|
}, []);
|
|
@@ -194,7 +201,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
194
201
|
let dtd = res?.dtdResult;
|
|
195
202
|
let rows = dtd.rows ? dtd.rows[0] : [];
|
|
196
203
|
let mids = res?.selectMIDs;
|
|
197
|
-
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode, origin.fromTID
|
|
204
|
+
let metadataList = searchResultToMetadataValues(TID, dtd, rows, mids, mdList, layoutMode, isReadOnlyOriginCallback(origin.fromTID));
|
|
198
205
|
if (archived) {
|
|
199
206
|
// Usa setFormData con funzione callback per accedere allo stato precedente
|
|
200
207
|
// invece di dipendere da formDataOrig nell'array di dipendenze
|
|
@@ -282,7 +289,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
282
289
|
}
|
|
283
290
|
else {
|
|
284
291
|
const renderedMetadata = dtd?.metadata?.filter((metadata) => handleArchiveVisibility(metadata)) ?? [];
|
|
285
|
-
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode, metadataDcmtOrigin?.fromTID
|
|
292
|
+
const metadataList = searchResultToMetadataValues(dtd?.id, undefined, [], [], renderedMetadata, layoutMode, isReadOnlyOriginCallback(metadataDcmtOrigin?.fromTID));
|
|
286
293
|
setFormDataOrig(structuredClone(metadataList));
|
|
287
294
|
setFormData(structuredClone(metadataList));
|
|
288
295
|
formDataOrigRef.current = structuredClone(metadataList);
|
|
@@ -297,7 +304,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
297
304
|
setIsInitialLoading(false);
|
|
298
305
|
setIsNavigating(false);
|
|
299
306
|
}
|
|
300
|
-
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs, metadataDcmtOrigin?.fromTID]);
|
|
307
|
+
}, [TID, DID, layoutMode, inputFile, setMetadataList, handleReset, allowButtonsRefs, isReadOnlyOriginCallback, metadataDcmtOrigin?.fromTID]);
|
|
301
308
|
const createChange = useCallback((mid, metadataType, modifiedValue) => {
|
|
302
309
|
return { mid, metadataType, modifiedValue };
|
|
303
310
|
}, []);
|
|
@@ -642,8 +649,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
642
649
|
if (layoutMode !== LayoutModes.Update || !moreInfoTasks) {
|
|
643
650
|
return false;
|
|
644
651
|
}
|
|
645
|
-
return moreInfoTasks.some(task => isTaskMoreInfo(task.name) &&
|
|
646
|
-
task.state !== Task_States.Completed);
|
|
652
|
+
return moreInfoTasks.some(task => isTaskMoreInfo(task.name) && task.state !== Task_States.Completed && task.state !== Task_States.Closed);
|
|
647
653
|
}, [layoutMode, moreInfoTasks]);
|
|
648
654
|
const showToppyForReferences = useMemo(() => {
|
|
649
655
|
if (!allowButtonsRefs || layoutMode !== LayoutModes.Update || isOpenDetails || isOpenMaster)
|
|
@@ -1184,8 +1190,10 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1184
1190
|
}, [focusedMetadataValue?.value, focusedMetadataValue?.mid, TID]);
|
|
1185
1191
|
const handleWFOperationCompleted = useCallback(async () => {
|
|
1186
1192
|
await onWFOperationCompleted?.();
|
|
1187
|
-
|
|
1188
|
-
|
|
1193
|
+
if (!showMoreInfoPopup) {
|
|
1194
|
+
onClose?.();
|
|
1195
|
+
}
|
|
1196
|
+
}, [onWFOperationCompleted, onClose, showMoreInfoPopup]);
|
|
1189
1197
|
// Determina se showAll deve essere automaticamente true
|
|
1190
1198
|
// Best practice: usa useMemo per calcolare valori derivati invece di useEffect con setState
|
|
1191
1199
|
const shouldShowAll = useMemo(() => {
|
|
@@ -1203,7 +1211,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1203
1211
|
}
|
|
1204
1212
|
}, [shouldShowAll, showAll]);
|
|
1205
1213
|
const afterTaskSaved = useCallback(async (task, formMode, forceRefresh = false) => {
|
|
1206
|
-
const shouldRefresh = forceRefresh || (task && task.state === Task_States.Completed) || formMode === FormModes.Create || formMode === FormModes.Duplicate;
|
|
1214
|
+
const shouldRefresh = forceRefresh || (task && (task.state === Task_States.Completed || task.state === Task_States.Closed)) || formMode === FormModes.Create || formMode === FormModes.Duplicate;
|
|
1207
1215
|
if (TID && DID && shouldRefresh) {
|
|
1208
1216
|
await triggerBlogRefresh();
|
|
1209
1217
|
}
|
|
@@ -1216,7 +1224,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1216
1224
|
}, [formData, fromDTD, isMobile]);
|
|
1217
1225
|
const tmDcmtForm = useMemo(() => {
|
|
1218
1226
|
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
|
|
1227
|
+
_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: isReadOnlyOriginCallback(metadataDcmtOrigin?.fromTID), onFocusedItemChanged: (item) => { (item?.mid !== focusedMetadataValue?.mid) && setFocusedMetadataValue(item); }, onValueChanged: (newItems) => {
|
|
1220
1228
|
setFormData((prevItems) => prevItems.map((item) => {
|
|
1221
1229
|
const newItem = newItems.find((newItem) => newItem.tid === item.tid && newItem.mid === item.mid);
|
|
1222
1230
|
return newItem ? { ...item, ...newItem } : item;
|
|
@@ -1262,13 +1270,12 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1262
1270
|
handleConfirmAction,
|
|
1263
1271
|
handleUndo,
|
|
1264
1272
|
handleClearForm,
|
|
1265
|
-
|
|
1273
|
+
isReadOnlyOriginCallback,
|
|
1274
|
+
metadataDcmtOrigin?.fromTID,
|
|
1266
1275
|
]);
|
|
1267
1276
|
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
1277
|
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]);
|
|
1269
|
-
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (file) => {
|
|
1270
|
-
setDcmtFile(file);
|
|
1271
|
-
}, enableDragDropOverlay: enableDragDropOverlay }, refreshPreviewTrigger), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile]);
|
|
1278
|
+
const tmDcmtPreview = useMemo(() => _jsx(TMDcmtPreviewWrapper, { currentDcmt: currentDcmt, dcmtFile: dcmtFile ?? inputFile, deviceType: deviceType, fromDTD: fromDTD, layoutMode: layoutMode, onFileUpload: (file) => { setDcmtFile(file); }, openPdfEditor: openPdfEditor, enableDragDropOverlay: enableDragDropOverlay, onScanRequest: onScanRequest }, refreshPreviewTrigger), [currentDcmt, dcmtFile, deviceType, fromDTD, layoutMode, inputFile, enableDragDropOverlay, setDcmtFile, onScanRequest, openPdfEditor]);
|
|
1272
1279
|
const tmWF = useMemo(() => {
|
|
1273
1280
|
if (isWFDataLoading) {
|
|
1274
1281
|
return (_jsx("div", { style: {
|
|
@@ -1339,7 +1346,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1339
1346
|
did: Number(DID),
|
|
1340
1347
|
name: fromDTD?.nameLoc ?? SDKUI_Localizator.Widget_Activities,
|
|
1341
1348
|
},
|
|
1342
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, afterTaskSaved: afterTaskSaved }));
|
|
1349
|
+
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, afterTaskSaved: afterTaskSaved, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }));
|
|
1343
1350
|
}, [allTasks, TID, DID, fromDTD]);
|
|
1344
1351
|
const normalizedTID = TID !== undefined ? Number(TID) : undefined;
|
|
1345
1352
|
const defaultPanelDimensions = {
|
|
@@ -1366,8 +1373,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1366
1373
|
};
|
|
1367
1374
|
}
|
|
1368
1375
|
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;
|
|
1376
|
+
const assignedToMe = getTaskAssignedToMe(allTasks).filter(task => task.iD1?.toString() === TID.toString() && task.iD2?.toString() === DID.toString() && task.state !== Task_States.Completed && task.state !== Task_States.Closed).length ?? 0;
|
|
1377
|
+
const assignedByMe = getTaskAssignedByMe(allTasks).filter(task => task.iD1?.toString() === TID.toString() && task.iD2?.toString() === DID.toString() && task.state !== Task_States.Completed && task.state !== Task_States.Closed).length ?? 0;
|
|
1371
1378
|
return {
|
|
1372
1379
|
assignedToMe,
|
|
1373
1380
|
assignedByMe
|
|
@@ -1384,7 +1391,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1384
1391
|
const { assignedToMe, assignedByMe } = getDcmtTasksCounter(TID, DID, allTasks);
|
|
1385
1392
|
let titleDcmtFormPanel = fromDTD?.nameLoc ?? "";
|
|
1386
1393
|
// Caso: Il documento proviene da un'origine esterna
|
|
1387
|
-
if (metadataDcmtOrigin?.fromTID
|
|
1394
|
+
if (isReadOnlyOriginCallback(metadataDcmtOrigin?.fromTID)) {
|
|
1388
1395
|
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
1396
|
}
|
|
1390
1397
|
const panels = [
|
|
@@ -1432,7 +1439,13 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1432
1439
|
id: 'tmDcmtPreview',
|
|
1433
1440
|
name: SDKUI_Localizator.PreviewDocument,
|
|
1434
1441
|
contentOptions: { component: tmDcmtPreview },
|
|
1435
|
-
toolbarOptions: {
|
|
1442
|
+
toolbarOptions: {
|
|
1443
|
+
icon: _jsx(IconShow, { fontSize: 24 }),
|
|
1444
|
+
disabled: isPreviewDisabled,
|
|
1445
|
+
visible: getDcmtFormToolbarVisibility(SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER).tmDcmtPreview,
|
|
1446
|
+
orderNumber: 4,
|
|
1447
|
+
isActive: allInitialPanelVisibility['tmDcmtPreview']
|
|
1448
|
+
}
|
|
1436
1449
|
},
|
|
1437
1450
|
{
|
|
1438
1451
|
id: 'tmWF',
|
|
@@ -1468,7 +1481,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1468
1481
|
},
|
|
1469
1482
|
];
|
|
1470
1483
|
return panels;
|
|
1471
|
-
}, [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID, metadataDcmtOrigin?.fromTID]);
|
|
1484
|
+
}, [fromDTD, showBackButton, tmDcmtForm, tmBlog, tmSysMetadata, tmDcmtPreview, tmWF, tmDcmtTasks, isPreviewDisabled, isSysMetadataDisabled, isBoardDisabled, isWFDisabled, inputFile, isClosable, allTasks, DID, TID, isReadOnlyOriginCallback, metadataDcmtOrigin?.fromTID]);
|
|
1472
1485
|
// Retrieves the current document form setting based on the normalized TID
|
|
1473
1486
|
const getCurrentDcmtFormSetting = () => {
|
|
1474
1487
|
const settings = SDKUI_Globals.userSettings.dcmtFormSettings;
|
|
@@ -1521,23 +1534,49 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1521
1534
|
// Return the appropriate layout based on context
|
|
1522
1535
|
return invocationContext === InvocationContext.Todo ? settings?.layoutToDo : settings?.layout;
|
|
1523
1536
|
};
|
|
1524
|
-
const
|
|
1537
|
+
const onBlogCommentFormCustomSave = useCallback(async (blogPost) => {
|
|
1525
1538
|
try {
|
|
1539
|
+
if (!moreInfoTasks || moreInfoTasks.length === 0) {
|
|
1540
|
+
ShowAlert({
|
|
1541
|
+
mode: 'info',
|
|
1542
|
+
title: SDKUI_Localizator.MoreInformation,
|
|
1543
|
+
message: 'Nessun attività di maggiori informazioni da completare',
|
|
1544
|
+
duration: 3000
|
|
1545
|
+
});
|
|
1546
|
+
return;
|
|
1547
|
+
}
|
|
1548
|
+
;
|
|
1549
|
+
const firstTask = moreInfoTasks[0];
|
|
1526
1550
|
TMSpinner.show();
|
|
1527
|
-
|
|
1551
|
+
const newTask = {
|
|
1552
|
+
...firstTask,
|
|
1553
|
+
state: Task_States.Completed,
|
|
1554
|
+
response: blogPost.description,
|
|
1555
|
+
};
|
|
1528
1556
|
await SDK_Globals.tmSession?.NewTaskEngine().UpdateAsync(newTask);
|
|
1529
1557
|
onTaskCompleted?.(newTask);
|
|
1530
1558
|
onClose?.();
|
|
1531
|
-
ShowAlert({
|
|
1559
|
+
ShowAlert({
|
|
1560
|
+
mode: 'success',
|
|
1561
|
+
title: SDKUI_Localizator.MoreInformation,
|
|
1562
|
+
message: SDKUI_Localizator.MoreInfoCompleted,
|
|
1563
|
+
duration: 3000
|
|
1564
|
+
});
|
|
1532
1565
|
}
|
|
1533
1566
|
catch (e) {
|
|
1534
|
-
TMSpinner.hide();
|
|
1535
1567
|
TMExceptionBoxManager.show({ exception: e });
|
|
1536
1568
|
}
|
|
1537
1569
|
finally {
|
|
1538
1570
|
TMSpinner.hide();
|
|
1539
1571
|
}
|
|
1540
1572
|
}, [moreInfoTasks, onTaskCompleted, onClose]);
|
|
1573
|
+
// Memoized props for TMBlogCommentForm to avoid unnecessary re-renders
|
|
1574
|
+
const blogCommentFormContext = useMemo(() => ({ engine: 'SearchEngine', object: { tid: TID, did: DID } }), [TID, DID]);
|
|
1575
|
+
const handleBlogCommentFormClose = useCallback(() => {
|
|
1576
|
+
setShowCommentForm(false);
|
|
1577
|
+
}, []);
|
|
1578
|
+
const emptyParticipants = useMemo(() => [], []);
|
|
1579
|
+
const emptyArchivedDocumentsFileItems = useMemo(() => [], []);
|
|
1541
1580
|
const handleSignApprove = useCallback(() => {
|
|
1542
1581
|
if (onOpenS4TViewerRequest && TID && DID) {
|
|
1543
1582
|
onOpenS4TViewerRequest([{ TID, DID }]);
|
|
@@ -1567,6 +1606,17 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1567
1606
|
[ObjectClasses.WorkingGroup]: { label: SDKUI_Localizator.GoToWorkgroup },
|
|
1568
1607
|
// add other ObjectClasses here as needed
|
|
1569
1608
|
}), []);
|
|
1609
|
+
const onSavedTaskFormCallback = (task) => {
|
|
1610
|
+
if (task && showMoreInfoTaskTask && editTaskCallback) {
|
|
1611
|
+
editTaskCallback(task);
|
|
1612
|
+
setShowMoreInfoTaskPopup(false);
|
|
1613
|
+
setShowMoreInfoTaskTask(undefined);
|
|
1614
|
+
ShowAlert({ message: SDKUI_Localizator.TaskSavedSuccessfully.replaceParams(task.name ?? '-'), mode: 'success', title: SDKUI_Localizator.Widget_Activities, duration: 3000 });
|
|
1615
|
+
}
|
|
1616
|
+
else {
|
|
1617
|
+
ShowAlert({ message: SDKUI_Localizator.TaskSaveError, mode: 'error', title: SDKUI_Localizator.Widget_Activities, duration: 3000 });
|
|
1618
|
+
}
|
|
1619
|
+
};
|
|
1570
1620
|
const renderDcmtForm = () => {
|
|
1571
1621
|
// Show flat spinner during initial load (before component is mounted)
|
|
1572
1622
|
if (isInitialLoading) {
|
|
@@ -1597,26 +1647,14 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1597
1647
|
isEditable: true,
|
|
1598
1648
|
value: FormulaHelper.addFormulaTag(newFormula.expression)
|
|
1599
1649
|
}));
|
|
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:
|
|
1601
|
-
|
|
1602
|
-
:
|
|
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)
|
|
1604
|
-
.map((ref, index, arr) => {
|
|
1605
|
-
const mapEntry = referenceActionMap[String(ref.objClass)];
|
|
1606
|
-
const label = mapEntry?.label ?? 'Vai a riferimento';
|
|
1607
|
-
return (_jsxs(React.Fragment, { children: [index === 0 && (showToppyForApprove || showToppyForCompleteMoreInfo) && (_jsx("div", { style: {
|
|
1608
|
-
height: 1,
|
|
1609
|
-
backgroundColor: 'rgba(255,255,255,0.2)',
|
|
1610
|
-
margin: '6px 0'
|
|
1611
|
-
} })), _jsxs(StyledReferenceButton, { onClick: () => handleNavigateToReference(ref), onDoubleClick: (e) => { e.preventDefault(); e.stopPropagation(); }, children: [_jsx("span", { children: label }), _jsx("span", { children: `"${ref.objName}"` })] }, `ref-${index}-${ref.objID}`)] }, `ref-frag-${index}-${ref.objID}`));
|
|
1612
|
-
})] }) })] }), (showCommentForm && TID && DID) &&
|
|
1613
|
-
_jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: TID, did: DID } }, onClose: () => setShowCommentForm(false), refreshCallback: handleCompleteMoreInfo, participants: [], showAttachmentsSection: false, allArchivedDocumentsFileItems: [] }), isOpenDetails &&
|
|
1650
|
+
} }), 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, { fromDTD: fromDTD, deviceType: deviceType, onCompleted: handleWFOperationCompleted, TID: approvalVID, DID: DID, onClose: () => setShowMoreInfoPopup(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, triggerBlogRefresh: triggerBlogRefresh }), (isModal && onClose) && _jsx("div", { id: "TMDcmtFormShowConfirmForClose-" + id })] }) }), _jsx(TMToppyDraggableHelpCenter, { isVisible: isToppyVisible, content: _jsx(TMDcmtFormActionButtons, { showToppyForApprove: showToppyForApprove, workItems: workItems, deviceType: deviceType, isMobile: isMobile, handleSignApprove: handleSignApprove, setShowApprovePopup: setShowApprovePopup, setShowRejectPopup: setShowRejectPopup, setShowReAssignPopup: setShowReAssignPopup, setShowMoreInfoPopup: setShowMoreInfoPopup, fromDTD: fromDTD, showToppyForCompleteMoreInfo: showToppyForCompleteMoreInfo, moreInfoTasks: moreInfoTasks, setShowCommentForm: setShowCommentForm, showToppyForReferences: showToppyForReferences, dcmtReferences: dcmtReferences, referenceActionMap: referenceActionMap, handleNavigateToReference: handleNavigateToReference, setShowMoreInfoTaskPopup: setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask: setShowMoreInfoTaskTask }) })] }), (showCommentForm && TID && DID) &&
|
|
1651
|
+
_jsx(TMBlogCommentForm, { maxLength: 500, context: blogCommentFormContext, onClose: handleBlogCommentFormClose, onCustomSave: onBlogCommentFormCustomSave, participants: emptyParticipants, showAttachmentsSection: false, allArchivedDocumentsFileItems: emptyArchivedDocumentsFileItems }), isOpenDetails &&
|
|
1614
1652
|
_jsx(StyledModalContainer, { children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, isForMaster: false, inputDcmts: getSelectionDcmtInfo(), allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenDetails(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }), isOpenMaster &&
|
|
1615
1653
|
_jsxs(StyledModalContainer, { children: [_jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: getSelectionDcmtInfo(), isForMaster: true, allowNavigation: allowNavigation, canNext: canNext, canPrev: canPrev, onNext: onNext, onPrev: onPrev, onBack: () => setIsOpenMaster(false), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
|
|
1616
1654
|
return (_jsx(StyledModalContainer, { children: _jsx(TMMasterDetailDcmts, { deviceType: deviceType, inputDcmts: [dcmt], isForMaster: true, allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID), appendMasterDcmts: handleAddItem, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }) }, `${index}-${dcmt.DID}`));
|
|
1617
1655
|
})] }), taskFormDialogComponent, s4TViewerDialogComponent] }));
|
|
1618
1656
|
};
|
|
1619
|
-
return (_jsxs(
|
|
1657
|
+
return (_jsxs("div", { style: { width: '100%', height: '100%' }, children: [(isModal && onClose)
|
|
1620
1658
|
? _jsx(TMModal, { title: titleModal, onClose: handleClose, width: widthModal ?? '100%', height: heightModal ?? '100%', hidePopup: false, askClosingConfirm: true, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block', padding: "4px", position: 'relative' }, children: renderDcmtForm() }) })
|
|
1621
1659
|
: renderDcmtForm(), showRelatedDcmtsChooser && (_jsx(TMChooserForm, { dataSource: relatedDcmtsChooserDataSource, onChoose: async (selectedRelation) => {
|
|
1622
1660
|
try {
|
|
@@ -1660,7 +1698,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1660
1698
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
1661
1699
|
setArchiveRelatedDcmtFormMids([]);
|
|
1662
1700
|
await fetchData();
|
|
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 }) }))] }));
|
|
1701
|
+
}, 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 }) })), (showMoreInfoTaskPopup && showMoreInfoTaskTask && showMoreInfoTaskTask.id && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) && _jsx(TMTaskForm, { id: Number(showMoreInfoTaskTask.id), title: showMoreInfoTaskTask.name ?? 'N/A', formMode: FormModes.Update, onSaved: onSavedTaskFormCallback, editTaskCallback: editTaskCallback, onClose: () => { setShowMoreInfoTaskPopup(false); setShowMoreInfoTaskTask(undefined); }, onCancel: () => { setShowMoreInfoTaskPopup(false); setShowMoreInfoTaskTask(undefined); }, isModal: true, showBackButton: false, hasNavigation: false, width: taskModalSizes(deviceType, FormModes.Update).width, height: taskModalSizes(deviceType, FormModes.Update).height, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, visualizedTasks: [], currentTask: null, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback })] }));
|
|
1664
1702
|
};
|
|
1665
1703
|
export default TMDcmtForm;
|
|
1666
1704
|
/**
|
|
@@ -1734,12 +1772,12 @@ const WfButtonStateHandler = ({ isWFDisabled }) => {
|
|
|
1734
1772
|
}, [isWFDisabled, setToolbarButtonDisabled]);
|
|
1735
1773
|
return null; // Non renderizza elementi nel DOM
|
|
1736
1774
|
};
|
|
1737
|
-
const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, deviceType, isVisible, onFileUpload, enableDragDropOverlay = false }) => {
|
|
1775
|
+
const TMDcmtPreviewWrapper = ({ currentDcmt, layoutMode, fromDTD, dcmtFile, deviceType, isVisible, onFileUpload, openPdfEditor, enableDragDropOverlay = false, onScanRequest }) => {
|
|
1738
1776
|
const { setPanelVisibilityById, toggleMaximize, isResizingActive, countVisibleLeafPanels, panelVisibility } = useTMPanelManagerContext();
|
|
1739
1777
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
1740
1778
|
return (layoutMode === LayoutModes.Update ?
|
|
1741
1779
|
_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 }) :
|
|
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 }));
|
|
1780
|
+
_jsx(TMFileUploader, { fromDTD: fromDTD, onFileUpload: onFileUpload, openPdfEditor: openPdfEditor, onClose: (!isMobile && countVisibleLeafPanels() > 1) ? () => setPanelVisibilityById('tmDcmtPreview', false) : undefined, isRequired: fromDTD?.archiveConstraint === ArchiveConstraints.ContentCompulsory && dcmtFile === null, defaultBlob: dcmtFile, deviceType: deviceType, isResizingActive: isResizingActive, enableDragDropOverlay: panelVisibility['tmDcmtPreview'] && enableDragDropOverlay, onScanRequest: onScanRequest }));
|
|
1743
1781
|
};
|
|
1744
1782
|
const Ribbon = styled.div `
|
|
1745
1783
|
font-size: 0.85rem;
|
|
@@ -1773,3 +1811,117 @@ const Ribbon = styled.div `
|
|
|
1773
1811
|
}
|
|
1774
1812
|
`}
|
|
1775
1813
|
`;
|
|
1814
|
+
const TaskLink = (props) => {
|
|
1815
|
+
const { messagePrefix, name, taskNameTrunc, description, currentTask, setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask } = props;
|
|
1816
|
+
const mouseMoved = useRef(false);
|
|
1817
|
+
const handleMouseDown = () => {
|
|
1818
|
+
mouseMoved.current = false;
|
|
1819
|
+
};
|
|
1820
|
+
const handleMouseMove = () => {
|
|
1821
|
+
mouseMoved.current = true;
|
|
1822
|
+
};
|
|
1823
|
+
return (_jsx(_Fragment, { children: _jsx("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' }, children: _jsxs("div", { onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, style: { display: 'inline' }, children: [messagePrefix, ' "', _jsx("span", { style: {
|
|
1824
|
+
cursor: 'pointer',
|
|
1825
|
+
fontWeight: 500,
|
|
1826
|
+
textDecoration: 'none',
|
|
1827
|
+
transition: 'text-decoration 0.2s',
|
|
1828
|
+
}, onClick: () => {
|
|
1829
|
+
setShowMoreInfoTaskPopup(true);
|
|
1830
|
+
setShowMoreInfoTaskTask(currentTask);
|
|
1831
|
+
}, onMouseEnter: e => e.currentTarget.style.textDecoration = 'underline', onMouseLeave: e => e.currentTarget.style.textDecoration = 'none', children: taskNameTrunc }), '" ', _jsx(TMTooltip, { parentStyle: { display: 'inline' }, childStyle: { display: 'inline' }, content: _jsxs("div", { style: { whiteSpace: 'pre-line', textAlign: 'left' }, children: [_jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Name }), ": ", name] }), _jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Description }), ": ", description] })] }), children: _jsx("i", { className: "dx-icon dx-icon-info", onClick: () => {
|
|
1832
|
+
setShowMoreInfoTaskPopup(true);
|
|
1833
|
+
setShowMoreInfoTaskTask(currentTask);
|
|
1834
|
+
}, style: { fontSize: '16px', lineHeight: 1, cursor: 'pointer' } }) })] }) }) }));
|
|
1835
|
+
};
|
|
1836
|
+
const TMDcmtFormActionButtons = (props) => {
|
|
1837
|
+
const { showToppyForApprove, workItems, deviceType, isMobile, handleSignApprove, setShowApprovePopup, setShowRejectPopup, setShowReAssignPopup, setShowMoreInfoPopup, fromDTD, showToppyForCompleteMoreInfo, moreInfoTasks, setShowCommentForm, showToppyForReferences, dcmtReferences, referenceActionMap, handleNavigateToReference, setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask } = props;
|
|
1838
|
+
const tasksNumber = useMemo(() => moreInfoTasks?.length ?? 0, [moreInfoTasks]);
|
|
1839
|
+
const currentTask = useMemo(() => {
|
|
1840
|
+
if (!moreInfoTasks || moreInfoTasks.length === 0)
|
|
1841
|
+
return null;
|
|
1842
|
+
if (moreInfoTasks.length === 1)
|
|
1843
|
+
return moreInfoTasks[0];
|
|
1844
|
+
// If there are multiple tasks, we cannot determine which one is relevant, so we return null
|
|
1845
|
+
return null;
|
|
1846
|
+
}, [moreInfoTasks]);
|
|
1847
|
+
const { hasMoreInfo, hasApprove, hasReferences } = useMemo(() => {
|
|
1848
|
+
const referencesExist = showToppyForReferences && dcmtReferences?.some(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup);
|
|
1849
|
+
return {
|
|
1850
|
+
hasMoreInfo: Boolean(showToppyForCompleteMoreInfo),
|
|
1851
|
+
hasApprove: Boolean(showToppyForApprove),
|
|
1852
|
+
hasReferences: Boolean(referencesExist)
|
|
1853
|
+
};
|
|
1854
|
+
}, [
|
|
1855
|
+
showToppyForCompleteMoreInfo,
|
|
1856
|
+
showToppyForApprove,
|
|
1857
|
+
showToppyForReferences,
|
|
1858
|
+
dcmtReferences
|
|
1859
|
+
]);
|
|
1860
|
+
const Divider = () => (_jsx("div", { style: { height: '1px', width: '100%', background: 'linear-gradient(to right, transparent, rgba(255,255,255,0.4), transparent)', margin: '3px 0', opacity: 0.8, } }));
|
|
1861
|
+
return _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: [hasMoreInfo && (tasksNumber === 1 ? (_jsx("div", { style: { display: 'flex', gap: "10px", flexDirection: 'column', alignItems: 'center' }, children: _jsx("div", { style: {
|
|
1862
|
+
padding: '10px',
|
|
1863
|
+
color: '#FFFFFF',
|
|
1864
|
+
maxWidth: '240px',
|
|
1865
|
+
background: 'linear-gradient(135deg, #1E90FF 0%, #0077BE 60%, #00509E 100%)',
|
|
1866
|
+
border: '1px solid rgba(255,255,255,0.15)',
|
|
1867
|
+
boxShadow: '0 8px 20px rgba(0, 0, 50, 0.4)',
|
|
1868
|
+
backdropFilter: 'blur(6px)',
|
|
1869
|
+
display: 'flex',
|
|
1870
|
+
flexDirection: 'column',
|
|
1871
|
+
alignItems: 'center',
|
|
1872
|
+
textAlign: 'center',
|
|
1873
|
+
gap: '10px',
|
|
1874
|
+
cursor: 'default',
|
|
1875
|
+
}, children: (() => {
|
|
1876
|
+
const userID = SDK_Globals.tmSession?.SessionDescr?.userID;
|
|
1877
|
+
const isSender = currentTask?.fromID !== undefined && currentTask.fromID === userID;
|
|
1878
|
+
const isRecipient = currentTask?.toID !== undefined && currentTask.toID === userID;
|
|
1879
|
+
const truncate = (str, maxLength) => str && str.length > maxLength ? str.substring(0, maxLength) + '...' : str;
|
|
1880
|
+
const senderNameTruncated = currentTask?.fromName ? truncate(currentTask.fromName, 30) : 'N/A';
|
|
1881
|
+
const recipientNameTruncated = currentTask?.toName ? truncate(currentTask.toName, 30) : 'N/A';
|
|
1882
|
+
const taskNameTrunc = currentTask?.name ? truncate(currentTask.name.replace(TASK_MORE_INFO_PREFIX_NAME ?? '', ''), 30) : 'N/A';
|
|
1883
|
+
return (_jsxs(_Fragment, { children: [(isSender && !isRecipient) && (_jsx(TaskLink, { messagePrefix: `Hai richiesto maggiori informazioni a "${recipientNameTruncated}" tramite l'attività`, name: currentTask.name ?? 'N/A', taskNameTrunc: taskNameTrunc ?? 'N/A', description: currentTask.description ?? 'N/A', currentTask: currentTask, setShowMoreInfoTaskPopup: setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask: setShowMoreInfoTaskTask })), (isRecipient && !isSender) && (_jsxs("div", { style: {
|
|
1884
|
+
display: 'flex',
|
|
1885
|
+
flexDirection: 'column',
|
|
1886
|
+
alignItems: 'center',
|
|
1887
|
+
gap: '10px'
|
|
1888
|
+
}, children: [_jsx(TaskLink, { messagePrefix: `"${senderNameTruncated}" ti ha richiesto maggiori informazioni tramite l'attività`, name: currentTask.name ?? 'N/A', taskNameTrunc: taskNameTrunc ?? 'N/A', description: currentTask.description ?? 'N/A', currentTask: currentTask, setShowMoreInfoTaskPopup: setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask: setShowMoreInfoTaskTask }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx("span", { className: "dx-icon-chat" }), caption: SDKUI_Localizator.CommentAndComplete, width: "180px", disabled: false, onClick: () => setShowCommentForm(true), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.success, color: "success" })] }))] }));
|
|
1889
|
+
})() }) })) : (_jsx("div", { style: {
|
|
1890
|
+
padding: '10px',
|
|
1891
|
+
color: '#FFFFFF',
|
|
1892
|
+
maxWidth: '240px',
|
|
1893
|
+
background: 'linear-gradient(135deg, #1E90FF 0%, #0077BE 60%, #00509E 100%)',
|
|
1894
|
+
border: '1px solid rgba(255,255,255,0.15)',
|
|
1895
|
+
boxShadow: '0 8px 20px rgba(0, 0, 50, 0.4)',
|
|
1896
|
+
backdropFilter: 'blur(6px)',
|
|
1897
|
+
display: 'flex',
|
|
1898
|
+
flexDirection: 'column',
|
|
1899
|
+
alignItems: 'center',
|
|
1900
|
+
textAlign: 'center',
|
|
1901
|
+
gap: '10px',
|
|
1902
|
+
cursor: 'default',
|
|
1903
|
+
}, children: `Ci sono ${moreInfoTasks?.length ?? 0} richieste di maggiori informazioni. ${SDKUI_Localizator.ManageFromTaskPanel}` }))), hasMoreInfo && hasApprove && _jsx(Divider, {}), hasApprove && (workItems.length === 1 ?
|
|
1904
|
+
_jsx(WorkFlowOperationButtons, { dtd: fromDTD, deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true) })
|
|
1905
|
+
:
|
|
1906
|
+
_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".`] })), (hasApprove && hasReferences) || (hasMoreInfo && !hasApprove && hasReferences) ? (_jsx(Divider, {})) : null, hasReferences && (_jsx(ReferencesContainer, { children: dcmtReferences?.filter(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup)
|
|
1907
|
+
.map((ref, index) => {
|
|
1908
|
+
const mapEntry = referenceActionMap[String(ref.objClass)];
|
|
1909
|
+
const label = mapEntry?.label ?? 'Vai a riferimento';
|
|
1910
|
+
let backgroundColor;
|
|
1911
|
+
switch (ref.objClass) {
|
|
1912
|
+
case ObjectClasses.WorkingGroup:
|
|
1913
|
+
backgroundColor = PDGS_COLORS.WORKING_GROUP;
|
|
1914
|
+
break;
|
|
1915
|
+
case ObjectClasses.Dossier:
|
|
1916
|
+
backgroundColor = PDGS_COLORS.DOSSIER;
|
|
1917
|
+
break;
|
|
1918
|
+
case ObjectClasses.Document:
|
|
1919
|
+
backgroundColor = PDGS_COLORS.DOCUMENT;
|
|
1920
|
+
break;
|
|
1921
|
+
default:
|
|
1922
|
+
backgroundColor = "#C2388B";
|
|
1923
|
+
break;
|
|
1924
|
+
}
|
|
1925
|
+
return (_jsxs(StyledReferenceButton, { onClick: () => handleNavigateToReference(ref), onDoubleClick: (e) => { e.preventDefault(); e.stopPropagation(); }, "$bgColor": backgroundColor, children: [_jsx("span", { children: label }), _jsx("span", { children: `"${ref.objName}"` })] }, `ref-${index}-${ref.objID}`));
|
|
1926
|
+
}) }))] });
|
|
1927
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormModes, TaskContext } from "../../../ts";
|
|
2
|
-
import { TaskDescriptor } from "@topconsultnpm/sdk-ts";
|
|
2
|
+
import { HomeBlogPost, TaskDescriptor } from "@topconsultnpm/sdk-ts";
|
|
3
3
|
interface TMDcmtTasksProps {
|
|
4
4
|
taskContext: TaskContext;
|
|
5
5
|
allTasks: Array<TaskDescriptor>;
|
|
@@ -8,6 +8,8 @@ interface TMDcmtTasksProps {
|
|
|
8
8
|
addTaskCallback: (task: TaskDescriptor) => Promise<void>;
|
|
9
9
|
editTaskCallback: (task: TaskDescriptor) => Promise<void>;
|
|
10
10
|
afterTaskSaved: (task: TaskDescriptor | undefined, formMode: FormModes | undefined, forceRefresh?: boolean) => Promise<void>;
|
|
11
|
+
handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
|
|
12
|
+
handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
|
|
11
13
|
}
|
|
12
14
|
declare const TMDcmtTasks: (props: TMDcmtTasksProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
15
|
export default TMDcmtTasks;
|