@topconsultnpm/sdkui-react 6.20.0-dev2.57 → 6.20.0-dev2.58
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/features/documents/TMDcmtForm.js +10 -3
- package/lib/components/features/search/TMSearchResult.js +3 -3
- package/lib/components/features/tasks/TMTaskForm.d.ts +1 -0
- package/lib/components/features/tasks/TMTaskForm.js +17 -5
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +8 -3
- package/lib/components/features/tasks/TMTaskFormUtils.js +22 -8
- package/lib/components/features/tasks/TMTasksUtils.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksUtils.js +7 -2
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +19 -3
- package/lib/components/features/workflow/TMWorkflowPopup.js +14 -93
- package/lib/components/grids/TMBlogsPost.js +7 -7
- package/lib/helper/SDKUI_Localizator.d.ts +3 -0
- package/lib/helper/SDKUI_Localizator.js +30 -0
- package/package.json +1 -1
|
@@ -1566,6 +1566,13 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1566
1566
|
TMSpinner.hide();
|
|
1567
1567
|
}
|
|
1568
1568
|
}, [moreInfoTasks, onTaskCompleted, onClose]);
|
|
1569
|
+
// Memoized props for TMBlogCommentForm to avoid unnecessary re-renders
|
|
1570
|
+
const blogCommentFormContext = useMemo(() => ({ engine: 'SearchEngine', object: { tid: TID, did: DID } }), [TID, DID]);
|
|
1571
|
+
const handleBlogCommentFormClose = useCallback(() => {
|
|
1572
|
+
setShowCommentForm(false);
|
|
1573
|
+
}, []);
|
|
1574
|
+
const emptyParticipants = useMemo(() => [], []);
|
|
1575
|
+
const emptyArchivedDocumentsFileItems = useMemo(() => [], []);
|
|
1569
1576
|
const handleSignApprove = useCallback(() => {
|
|
1570
1577
|
if (onOpenS4TViewerRequest && TID && DID) {
|
|
1571
1578
|
onOpenS4TViewerRequest([{ TID, DID }]);
|
|
@@ -1636,8 +1643,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1636
1643
|
isEditable: true,
|
|
1637
1644
|
value: FormulaHelper.addFormulaTag(newFormula.expression)
|
|
1638
1645
|
}));
|
|
1639
|
-
} }), 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), getAllTasks: getAllTasks }), (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) &&
|
|
1640
|
-
_jsx(TMBlogCommentForm, { maxLength: 500, context:
|
|
1646
|
+
} }), 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) &&
|
|
1647
|
+
_jsx(TMBlogCommentForm, { maxLength: 500, context: blogCommentFormContext, onClose: handleBlogCommentFormClose, onCustomSave: onBlogCommentFormCustomSave, participants: emptyParticipants, showAttachmentsSection: false, allArchivedDocumentsFileItems: emptyArchivedDocumentsFileItems }), isOpenDetails &&
|
|
1641
1648
|
_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 &&
|
|
1642
1649
|
_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) => {
|
|
1643
1650
|
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}`));
|
|
@@ -1890,7 +1897,7 @@ const TMDcmtFormActionButtons = (props) => {
|
|
|
1890
1897
|
gap: '10px',
|
|
1891
1898
|
cursor: 'default',
|
|
1892
1899
|
}, children: `Ci sono ${moreInfoTasks?.length ?? 0} richieste di maggiori informazioni. ${SDKUI_Localizator.ManageFromTaskPanel}` }))), hasMoreInfo && hasApprove && _jsx(Divider, {}), hasApprove && (workItems.length === 1 ?
|
|
1893
|
-
_jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true)
|
|
1900
|
+
_jsx(WorkFlowOperationButtons, { dtd: fromDTD, deviceType: deviceType, onApprove: () => setShowApprovePopup(true), onSignApprove: handleSignApprove, onReject: () => setShowRejectPopup(true), onReAssign: () => setShowReAssignPopup(true), onMoreInfo: () => setShowMoreInfoPopup(true) })
|
|
1894
1901
|
:
|
|
1895
1902
|
_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
|
|
1896
1903
|
?.filter(ref => ref.objClass === ObjectClasses.Dossier || ref.objClass === ObjectClasses.WorkingGroup)
|
|
@@ -617,13 +617,13 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
617
617
|
_jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, disableAccordionIfSingleCategory: disableAccordionIfSingleCategory, selectedTID: selectedSearchResultTID, selectedSearchResult: selectedSearchResult, autoSelectFirst: !isMobile || currentSearchResults.length === 1, onSelectionChanged: onSearchResultSelectionChanged }) })
|
|
618
618
|
:
|
|
619
619
|
_jsx(_Fragment, {}), _jsx(TMLayoutItem, { children: _jsx(TMSearchResultGrid, { showSearch: showSearch, fromDTD: fromDTD, allUsers: allUsers, inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, openInOffice: openInOffice, onDblClick: () => openFormHandler(LayoutModes.Update), floatingMenuItems: floatingMenuItems, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem, onDownloadDcmtsAsync: async (inputDcmts, downloadType, downloadMode, _y, confirmAttachments) => await downloadDcmtsAsync(inputDcmts, downloadType, downloadMode, onFileOpened, confirmAttachments), showExportForm: showExportForm, onCloseExportForm: onCloseExportForm }) })] }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
|
|
620
|
-
_jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 1, y: 88 }, defaultPinnedItems: ['rel-det', 'rel-mst', 'dl'], defaultOrientation: 'horizontal', hasContextMenu: false, pinnedItemIds: pinnedItemIds, onPinChange: setPinnedItemIds })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false), getAllTasks: getAllTasks }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
|
|
620
|
+
_jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 1, y: 88 }, defaultPinnedItems: ['rel-det', 'rel-mst', 'dl'], defaultOrientation: 'horizontal', hasContextMenu: false, pinnedItemIds: pinnedItemIds, onPinChange: setPinnedItemIds })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { fromDTD: fromDTD, TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false), getAllTasks: getAllTasks, triggerBlogRefresh: triggerBlogRefresh }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
|
|
621
621
|
setIsOpenBatchUpdate(false);
|
|
622
622
|
}, onSavedCallbackAsync: async () => {
|
|
623
623
|
setIsOpenBatchUpdate(false);
|
|
624
624
|
setIsModifiedBatchUpdate(false);
|
|
625
625
|
await refreshSelectionDataRowsAsync();
|
|
626
|
-
}, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), _jsx(TMToppyDraggableHelpCenter, { usePortal: toppyHelpCenterUsePortal, isVisible: isToppyHelpCenterVisible, content: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: _jsx(WorkFlowOperationButtons, { deviceType: deviceType, onApprove: () => {
|
|
626
|
+
}, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), _jsx(TMToppyDraggableHelpCenter, { usePortal: toppyHelpCenterUsePortal, isVisible: isToppyHelpCenterVisible, content: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '10px' }, children: _jsx(WorkFlowOperationButtons, { dtd: fromDTD, deviceType: deviceType, onApprove: () => {
|
|
627
627
|
setShowApprovePopup(true);
|
|
628
628
|
}, onSignApprove: () => {
|
|
629
629
|
handleSignApprove();
|
|
@@ -633,7 +633,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
|
|
|
633
633
|
setShowReAssignPopup(true);
|
|
634
634
|
}, onMoreInfo: () => {
|
|
635
635
|
setShowMoreInfoPopup(true);
|
|
636
|
-
}, approveDisable: selectedDocs.length === 0, signApproveDisable: disableSignApproveDisable, rejectDisable: selectedDocs.length === 0, reassignDisable: selectedDocs.length === 0, infoDisable: selectedDocs.length !== 1
|
|
636
|
+
}, approveDisable: selectedDocs.length === 0, signApproveDisable: disableSignApproveDisable, rejectDisable: selectedDocs.length === 0, reassignDisable: selectedDocs.length === 0, infoDisable: selectedDocs.length !== 1 }) }) })] }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {}), customButton && _jsx(TMCustomButton, { button: customButton, formData: currentMetadataValues, selectedItems: selectedItems, onClose: () => setCustomButton(undefined) }), showRelatedDcmtsChooser &&
|
|
637
637
|
_jsx(TMChooserForm, { dataSource: relatedDcmtsChooserDataSource, onChoose: async (selectedRelation) => {
|
|
638
638
|
try {
|
|
639
639
|
setShowRelatedDcmtsChooser(false);
|
|
@@ -13,6 +13,7 @@ export interface TMTaskFormProps {
|
|
|
13
13
|
title: string;
|
|
14
14
|
isModal: boolean;
|
|
15
15
|
formMode: FormModes;
|
|
16
|
+
requestMoreInfo?: boolean;
|
|
16
17
|
visualizedTasks: Array<TaskDescriptor>;
|
|
17
18
|
currentTask: TaskDescriptor | null;
|
|
18
19
|
setCurrentTask?: React.Dispatch<React.SetStateAction<TaskDescriptor | null>>;
|
|
@@ -16,9 +16,9 @@ import { getCurrentUserTaskRole, RenderDescriptionField, RenderEndDateField, Ren
|
|
|
16
16
|
const TMTaskForm = (props) => {
|
|
17
17
|
// Custom hook to manage workflow approval data
|
|
18
18
|
const { refreshWorkflowApprove } = useWorkflowApprove();
|
|
19
|
-
const validator = async (taskDescriptor) => { return await taskValidatorAsync(taskDescriptor); };
|
|
19
|
+
const validator = async (taskDescriptor) => { return await taskValidatorAsync(taskDescriptor, requestMoreInfo); };
|
|
20
20
|
// Destructure the props object to extract individual properties
|
|
21
|
-
const { id, title, isModal, formMode, visualizedTasks, editTaskCallback, currentTask, setCurrentTask, isContextualCreate = false, selectedRowKeys, handleFocusedRowKeyChange, onStatusChanged, onSaved, onClose, onCancel, taskContext, startDate, endDate, showBackButton = true, hasNavigation = true, width = "100%", height = "100%", usersList, onOpenS4TViewerRequest, s4TViewerDialogComponent, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, handleNavigateToWGs, handleNavigateToDossiers } = props;
|
|
21
|
+
const { id, title, isModal, formMode, requestMoreInfo = false, visualizedTasks, editTaskCallback, currentTask, setCurrentTask, isContextualCreate = false, selectedRowKeys, handleFocusedRowKeyChange, onStatusChanged, onSaved, onClose, onCancel, taskContext, startDate, endDate, showBackButton = true, hasNavigation = true, width = "100%", height = "100%", usersList, onOpenS4TViewerRequest, s4TViewerDialogComponent, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, handleNavigateToWGs, handleNavigateToDossiers } = props;
|
|
22
22
|
const sfo = new SaveFormOptions();
|
|
23
23
|
sfo.objClass = ObjectClasses.Task;
|
|
24
24
|
const customizeFormData = (task) => {
|
|
@@ -56,6 +56,14 @@ const TMTaskForm = (props) => {
|
|
|
56
56
|
task.iD2 = taskContext.workItem.did;
|
|
57
57
|
task.toID = 0;
|
|
58
58
|
}
|
|
59
|
+
if (requestMoreInfo) {
|
|
60
|
+
task.toID = undefined;
|
|
61
|
+
task.toName = undefined;
|
|
62
|
+
task.startTime = new Date();
|
|
63
|
+
const end = new Date();
|
|
64
|
+
end.setHours(23, 59, 59, 0);
|
|
65
|
+
task.endTime = end;
|
|
66
|
+
}
|
|
59
67
|
return task;
|
|
60
68
|
};
|
|
61
69
|
const { formData, setFormData, formDataOrig, validationItems, exception, saveDataAsync } = useSaveForm(formMode, id, sfo, validator, onSaved, onStatusChanged, customizeFormData);
|
|
@@ -277,11 +285,15 @@ const TMTaskForm = (props) => {
|
|
|
277
285
|
console.warn(`Unhandled object type: ${ref.objClass}`);
|
|
278
286
|
}
|
|
279
287
|
};
|
|
280
|
-
return (_jsx("div", { style: { width: "100%", height: "100%", overflow: "auto" }, ref: containerRef, children: _jsxs(TMSaveForm, { width: width, height: height, id: id, title: title, isModal: isModal, formMode: formMode, onSaveAsync: saveDataAsync, onClose: onCloseCallback, showUndoButton: formMode === FormModes.Update, onUndo: onUndoCallback, exception: exception, isModified: calcIsModified(formData, formDataOrig), validationItems: validationItems, showBackButton: showBackButton, hasNavigation: (hasNavigation && formMode !== FormModes.Create), canNext: canNext(), onNext: onNextCallback, canPrev: canPrev(), onPrev: onPrevCallback, showToolbar: !(showDcmtForm && formData?.iD1 && formData?.iD2), children: [_jsxs(_Fragment, { children: [_jsx(ScrollView, { direction: "vertical", useNative: true, height: formData && (formMode === FormModes.Create || formMode === FormModes.None) ? "calc(100% - 70px)" : "calc(100% - 35px)", children: _jsx("div", { style: { marginRight: "5px" }, children: _jsxs(TMLayoutContainer, { direction: 'vertical', gap: 2, children: [(
|
|
288
|
+
return (_jsx("div", { style: { width: "100%", height: "100%", overflow: "auto" }, ref: containerRef, children: _jsxs(TMSaveForm, { width: width, height: height, id: id, title: title, isModal: isModal, formMode: formMode, onSaveAsync: saveDataAsync, onClose: onCloseCallback, showUndoButton: formMode === FormModes.Update, onUndo: onUndoCallback, exception: exception, isModified: calcIsModified(formData, formDataOrig), validationItems: validationItems, showBackButton: showBackButton, hasNavigation: (hasNavigation && formMode !== FormModes.Create), canNext: canNext(), onNext: onNextCallback, canPrev: canPrev(), onPrev: onPrevCallback, showToolbar: !(showDcmtForm && formData?.iD1 && formData?.iD2), children: [_jsxs(_Fragment, { children: [_jsx(ScrollView, { direction: "vertical", useNative: true, height: formData && (formMode === FormModes.Create || formMode === FormModes.None) ? "calc(100% - 70px)" : "calc(100% - 35px)", children: _jsx("div", { style: { marginRight: "5px" }, children: _jsxs(TMLayoutContainer, { direction: 'vertical', gap: 2, children: [(requestMoreInfo && formMode === FormModes.Create) && _jsxs("div", { style: { width: '100%', height: '100%' }, children: [_jsx(TaskAssigneeField, { formMode: formMode, formData: formData, formDataOrig: formDataOrig, taskContext: taskContext, validationItems: validationItems, fieldsReadOnly: fieldsReadOnly, usersList: usersList, label: SDKUI_Localizator.RequestTo, onValueChanged: (newValue) => {
|
|
289
|
+
if (newValue === undefined)
|
|
290
|
+
return;
|
|
291
|
+
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
292
|
+
} }), _jsx(RenderNameField, { label: SDKUI_Localizator.Subject, fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, requestMoreInfo: requestMoreInfo }), _jsx(RenderDescriptionField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(RenderEndDateField, { label: SDKUI_Localizator.ByDate, fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData, onContentReady: handleEndTimeContentReady }), _jsx(RenderPriorityField, { formData: formData, formDataOrig: formDataOrig, fieldsReadOnly: fieldsReadOnly, onPriorityValueChange: onPriorityValueChange }), _jsx(TaskFormContextualAttachments, { taskContext: taskContext, currentTask: formData })] }), !requestMoreInfo && (formMode === FormModes.Create || formMode === FormModes.Duplicate || formMode === FormModes.None) && _jsxs("div", { style: { width: '100%', height: '100%' }, children: [_jsx(RenderNameField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(RenderDescriptionField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(TaskAssigneeField, { formMode: formMode, formData: formData, formDataOrig: formDataOrig, taskContext: taskContext, validationItems: validationItems, fieldsReadOnly: fieldsReadOnly, usersList: usersList, onValueChanged: (newValue) => {
|
|
281
293
|
if (newValue === undefined)
|
|
282
294
|
return;
|
|
283
295
|
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
284
|
-
} }), _jsx(RenderStartDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData, onContentReady: handleStartTimeContentReady }), _jsx(RenderEndDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData, onContentReady: handleEndTimeContentReady }), _jsx(RenderRemindDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData }), _jsx(RenderPriorityField, { formData: formData, formDataOrig: formDataOrig, fieldsReadOnly: fieldsReadOnly, onPriorityValueChange: onPriorityValueChange }), _jsx(TaskFormContextualAttachments, { taskContext: taskContext, currentTask: formData })] }), (formMode === FormModes.Update) && _jsxs("div", { style: { width: '100%', height: '100%' }, children: [_jsx(RenderNameField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(RenderDescriptionField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(TaskAssigneeField, { formMode: formMode, formData: formData, formDataOrig: formDataOrig, taskContext: taskContext, validationItems: validationItems, fieldsReadOnly: fieldsReadOnly, usersList: usersList, onValueChanged: (newValue) => {
|
|
296
|
+
} }), _jsx(RenderStartDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData, onContentReady: handleStartTimeContentReady }), _jsx(RenderEndDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData, onContentReady: handleEndTimeContentReady }), _jsx(RenderRemindDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData }), _jsx(RenderPriorityField, { formData: formData, formDataOrig: formDataOrig, fieldsReadOnly: fieldsReadOnly, onPriorityValueChange: onPriorityValueChange }), _jsx(TaskFormContextualAttachments, { taskContext: taskContext, currentTask: formData })] }), (!requestMoreInfo && formMode === FormModes.Update) && _jsxs("div", { style: { width: '100%', height: '100%' }, children: [_jsx(RenderNameField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(RenderDescriptionField, { fieldsReadOnly: fieldsReadOnly, setFormData: setFormData, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems }), _jsx(TaskAssigneeField, { formMode: formMode, formData: formData, formDataOrig: formDataOrig, taskContext: taskContext, validationItems: validationItems, fieldsReadOnly: fieldsReadOnly, usersList: usersList, onValueChanged: (newValue) => {
|
|
285
297
|
if (newValue === undefined)
|
|
286
298
|
return;
|
|
287
299
|
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
@@ -296,7 +308,7 @@ const TMTaskForm = (props) => {
|
|
|
296
308
|
display: 'flex',
|
|
297
309
|
justifyContent: 'flex-end',
|
|
298
310
|
alignItems: 'center'
|
|
299
|
-
}, children: _jsx(TaskFormAssignmentNoticeBadge, { task: formData, users: users }) })), (showDcmtForm && formData?.iD1 && formData?.iD2) &&
|
|
311
|
+
}, children: _jsx(TaskFormAssignmentNoticeBadge, { task: formData, users: users, requestMoreInfo: requestMoreInfo }) })), (showDcmtForm && formData?.iD1 && formData?.iD2) &&
|
|
300
312
|
_jsx(TMDcmtForm, { titleModal: formData.iD1Name ?? '-', isModal: true, TID: formData.iD1, DID: formData.iD2, allowButtonsRefs: true, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, formData?.iD1, formData?.iD2), onWFOperationCompleted: refreshWorkflowApprove, onTaskCompleted: onTaskCompleted, onClose: () => { setShowDcmtForm(false); }, onOpenS4TViewerRequest: onOpenS4TViewerRequest, s4TViewerDialogComponent: s4TViewerDialogComponent, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference })] }), formData && showChangeStateForm && _jsx(TMChangeStateForm, { formData: formData, formDataOrig: formDataOrig, handleShowChangeStateForm: handleShowChangeStateForm, setFormData: setFormData })] }) }));
|
|
301
313
|
};
|
|
302
314
|
export default TMTaskForm;
|
|
@@ -6,6 +6,7 @@ export declare const getCurrentUserTaskRole: (task?: TaskDescriptor) => TaskRole
|
|
|
6
6
|
interface TaskFormAssignmentNoticeSectionProps {
|
|
7
7
|
task: TaskDescriptor;
|
|
8
8
|
users: Array<UserDescriptor>;
|
|
9
|
+
requestMoreInfo?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
11
12
|
interface RenderContextBlockParams {
|
|
@@ -27,6 +28,7 @@ interface TaskFormAssignedToProps {
|
|
|
27
28
|
validationItems: Array<ValidationItem>;
|
|
28
29
|
fieldsReadOnly: IFieldsEditability;
|
|
29
30
|
usersList?: Array<UserDescriptor>;
|
|
31
|
+
label?: string;
|
|
30
32
|
onValueChanged: (newValue: Array<number> | undefined) => void;
|
|
31
33
|
}
|
|
32
34
|
export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -36,6 +38,8 @@ interface RenderFieldBaseProps {
|
|
|
36
38
|
formData?: TaskDescriptor;
|
|
37
39
|
}
|
|
38
40
|
interface RenderFieldProps extends RenderFieldBaseProps {
|
|
41
|
+
requestMoreInfo?: boolean;
|
|
42
|
+
label?: string;
|
|
39
43
|
validationItems?: Array<ValidationItem>;
|
|
40
44
|
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
41
45
|
}
|
|
@@ -43,13 +47,14 @@ interface RenderPriorityFieldProps extends RenderFieldBaseProps {
|
|
|
43
47
|
onPriorityValueChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
44
48
|
}
|
|
45
49
|
interface RenderDateFieldProps extends RenderFieldProps {
|
|
50
|
+
label?: string;
|
|
46
51
|
onContentReady?: () => void;
|
|
47
52
|
}
|
|
48
|
-
export declare const RenderNameField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export declare const RenderNameField: ({ requestMoreInfo, label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
54
|
export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
55
|
export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
51
|
-
export declare const RenderStartDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
52
|
-
export declare const RenderEndDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
export declare const RenderStartDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
export declare const RenderEndDateField: ({ label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
53
58
|
export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
54
59
|
interface RenderTaskFormStateFieldProps {
|
|
55
60
|
formDataOrig: TaskDescriptor | undefined;
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
3
|
import { PdGs, Priorities, SDK_Globals, Task_States } from "@topconsultnpm/sdk-ts";
|
|
4
4
|
import { FormModes } from "../../../ts";
|
|
5
|
-
import { calcResponsiveSizes, DateDisplayTypes, getPdgsIconMap, IconSave, SDKUI_Localizator } from "../../../helper";
|
|
5
|
+
import { calcResponsiveSizes, DateDisplayTypes, getPdgsIconMap, IconSave, SDKUI_Localizator, TASK_MORE_INFO_PREFIX_NAME } from "../../../helper";
|
|
6
6
|
import { areDifferentIDs, formatDate, getOriginLabel, getPriorityLocalizatorValue, getPriorityLocalizatorValues, getStatusLocalizatorValue } from "./TMTasksUtils";
|
|
7
7
|
import TMTooltip from "../../base/TMTooltip";
|
|
8
8
|
import TMTextBox from "../../editors/TMTextBox";
|
|
@@ -50,10 +50,12 @@ export const getCurrentUserTaskRole = (task) => {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
export const TaskFormAssignmentNoticeBadge = (props) => {
|
|
53
|
-
const { task, users } = props;
|
|
53
|
+
const { task, users, requestMoreInfo = false } = props;
|
|
54
54
|
const taskRole = useMemo(() => getCurrentUserTaskRole(task), [task?.toID, task?.fromID, SDK_Globals.tmSession?.SessionDescr?.userID]);
|
|
55
55
|
const getMessage = () => {
|
|
56
|
-
const assigneeName = users.find(user => user.id === task.toID)?.name
|
|
56
|
+
const assigneeName = users.find(user => user.id === task.toID)?.name;
|
|
57
|
+
if (requestMoreInfo)
|
|
58
|
+
return assigneeName ? SDKUI_Localizator.MoreInfoRequestedTo.replaceParams(assigneeName) : SDKUI_Localizator.MoreInfoRequested;
|
|
57
59
|
if (taskRole === "personal")
|
|
58
60
|
return SDKUI_Localizator.PersonalTaskAssignmentMessage;
|
|
59
61
|
if (taskRole === "receiver")
|
|
@@ -179,7 +181,7 @@ const TaskPdgOriginNavigator = (props) => {
|
|
|
179
181
|
}, children: [_jsx("span", { style: { display: "flex", alignItems: "center" }, children: getPdgsIconMap().get(formData.pdG) }), _jsx("span", { children: formData.pdG === PdGs.WG ? SDKUI_Localizator.WorkGroup : formData.pdG === PdGs.CF ? SDKUI_Localizator.Dossier : formData.pdG === PdGs.DT ? SDKUI_Localizator.Document : "" })] }), _jsx("hr", { style: { margin: "4px 0 8px 0" } })] })), formData.iD1 != null && formData.iD1 !== 0 && (_jsxs("div", { children: [_jsx("b", { children: "ID1" }), ": ", formData.iD1.toString()] })), formData.iD1Name && (_jsxs("div", { children: [_jsx("b", { children: "ID1NAME" }), ": ", formData.iD1Name.toString()] })), formData.iD2 != null && formData.iD2 !== 0 && (_jsxs("div", { children: [_jsx("b", { children: "ID2" }), ": ", formData.iD2.toString()] }))] }), children: _jsx("i", { className: "dx-icon-info", style: { fontSize: "1.3rem", flexShrink: 0 } }) })] }) }) }));
|
|
180
182
|
};
|
|
181
183
|
export const TaskAssigneeField = (props) => {
|
|
182
|
-
const { formMode, formData, taskContext, validationItems, fieldsReadOnly, formDataOrig, usersList, onValueChanged, } = props;
|
|
184
|
+
const { formMode, formData, taskContext, validationItems, fieldsReadOnly, formDataOrig, usersList, label = SDKUI_Localizator.AssignedTo_Female, onValueChanged, } = props;
|
|
183
185
|
const { isCreateMode, isUpdateMode, isAssignedByOtherUser, isAssignedToOtherUser } = useMemo(() => {
|
|
184
186
|
const isCreateMode = formMode === FormModes.Create;
|
|
185
187
|
const isUpdateMode = formMode === FormModes.Update;
|
|
@@ -203,7 +205,7 @@ export const TaskAssigneeField = (props) => {
|
|
|
203
205
|
}, [formData?.toID, formData?.fromID, formMode, SDK_Globals.tmSession?.SessionDescr?.userID]);
|
|
204
206
|
let content = null;
|
|
205
207
|
if (isCreateMode || !isAssignedByOtherUser) {
|
|
206
|
-
content = (_jsx("div", { id: "assignedToAnotherUserField", style: { width: '100%' }, children: _jsx(TMUserChooser, { dataSource: usersList, allowShowAllUsers: !!taskContext?.dossier, allowMultipleSelection: false, label:
|
|
208
|
+
content = (_jsx("div", { id: "assignedToAnotherUserField", style: { width: '100%' }, children: _jsx(TMUserChooser, { dataSource: usersList, allowShowAllUsers: !!taskContext?.dossier, allowMultipleSelection: false, label: label, readOnly: fieldsReadOnly.assignedTO, values: formData?.toID ? [formData?.toID] : [], isModifiedWhen: formData?.toID !== formDataOrig?.toID, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.AssignedTo_Female), onValueChanged: onValueChanged }) }));
|
|
207
209
|
}
|
|
208
210
|
else if (isUpdateMode) {
|
|
209
211
|
content = (_jsxs(_Fragment, { children: [isAssignedByOtherUser && (_jsx("div", { style: { width: '100%' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.AssignedBy, value: formData?.fromName ?? '', readOnly: true }) })), isAssignedToOtherUser && (_jsx("div", { style: { width: '100%' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.AssignedTo_Female, value: formData?.toName ?? '', readOnly: true }) }))] }));
|
|
@@ -343,11 +345,23 @@ const TaskFormResponseComment = (props) => {
|
|
|
343
345
|
// Stile comune per i container dei campi
|
|
344
346
|
const fieldContainerStyle = { width: '100%' };
|
|
345
347
|
const fieldContainerWithMarginStyle = { width: '100%', marginTop: 10 };
|
|
346
|
-
export const RenderNameField = ({
|
|
348
|
+
export const RenderNameField = ({ requestMoreInfo = false, label, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }) => {
|
|
349
|
+
// Se requestMoreInfo, il valore viene visualizzato senza prefisso nel campo di input
|
|
350
|
+
const displayValue = requestMoreInfo && formData?.name?.startsWith(TASK_MORE_INFO_PREFIX_NAME) ? formData.name.substring(TASK_MORE_INFO_PREFIX_NAME.length) : formData?.name ?? '';
|
|
351
|
+
return (_jsxs("div", { style: fieldContainerStyle, children: [_jsx(TMTextBox, { label: label ?? SDKUI_Localizator.Name, value: displayValue, readOnly: fieldsReadOnly.name, autoFocus: true, maxLength: 100, isModifiedWhen: formData?.name !== formDataOrig?.name, onValueChanged: (e) => {
|
|
352
|
+
const newValue = e.target.value;
|
|
353
|
+
if (requestMoreInfo) {
|
|
354
|
+
setFormData({ ...formData ?? {}, name: `${TASK_MORE_INFO_PREFIX_NAME}${newValue}` });
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
setFormData({ ...formData ?? {}, name: newValue });
|
|
358
|
+
}
|
|
359
|
+
}, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Name) }), requestMoreInfo && (_jsx("p", { style: { fontStyle: 'italic', fontSize: '0.9rem', marginTop: '5px' }, children: `${TASK_MORE_INFO_PREFIX_NAME}${displayValue}` }))] }));
|
|
360
|
+
};
|
|
347
361
|
export const RenderDescriptionField = ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }) => (_jsx("div", { style: fieldContainerStyle, children: _jsx(TMTextArea, { label: SDKUI_Localizator.Description, value: formData?.description ?? '', maxLength: 200, readOnly: fieldsReadOnly.description, isModifiedWhen: formData?.description !== formDataOrig?.description, onValueChanged: (e) => setFormData({ ...formData ?? {}, description: e.target.value }), validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Description), resize: false }) }));
|
|
348
362
|
export const RenderPriorityField = ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }) => (_jsx("div", { style: fieldContainerStyle, children: !fieldsReadOnly.priority ? (_jsx(TMDropDown, { label: SDKUI_Localizator.Priority, value: formData?.priority, dataSource: getPriorityLocalizatorValues(), isModifiedWhen: formData?.priority !== formDataOrig?.priority, onValueChanged: onPriorityValueChange })) : (_jsx(TMTextBox, { label: SDKUI_Localizator.Priority, value: getPriorityLocalizatorValue(formData?.priority ?? Priorities.Low), readOnly: true })) }));
|
|
349
|
-
export const RenderStartDateField = ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }) => (_jsx("div", { style: fieldContainerWithMarginStyle, children: !fieldsReadOnly.startDate ? (_jsx(TMDateBox, { id: "start-date", resetTimeToZeroOnKeyPress: false, label:
|
|
350
|
-
export const RenderEndDateField = ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }) => (_jsx("div", { style: fieldContainerWithMarginStyle, children: !fieldsReadOnly.startDate ? (_jsx(TMDateBox, { id: "end-date", resetTimeToZeroOnKeyPress: false, label:
|
|
363
|
+
export const RenderStartDateField = ({ label = SDKUI_Localizator.StartDate, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }) => (_jsx("div", { style: fieldContainerWithMarginStyle, children: !fieldsReadOnly.startDate ? (_jsx(TMDateBox, { id: "start-date", resetTimeToZeroOnKeyPress: false, label: label, dateDisplayType: DateDisplayTypes.DateTime, value: formData?.startTime, isModifiedWhen: formData?.startTime !== formDataOrig?.startTime, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.ErrorStartEndDate), onContentReady: onContentReady, onValueChange: (value) => setFormData({ ...formData ?? {}, startTime: value }), showClearButton: true })) : (_jsx(TMTextBox, { label: SDKUI_Localizator.StartDate, value: formData?.startTime ? formatDate(formData?.startTime) : '', readOnly: true })) }));
|
|
364
|
+
export const RenderEndDateField = ({ label = SDKUI_Localizator.ExpirationDate, validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }) => (_jsx("div", { style: fieldContainerWithMarginStyle, children: !fieldsReadOnly.startDate ? (_jsx(TMDateBox, { id: "end-date", resetTimeToZeroOnKeyPress: false, label: label, dateDisplayType: DateDisplayTypes.DateTime, value: formData?.endTime, isModifiedWhen: formData?.endTime !== formDataOrig?.endTime, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.ErrorStartEndDate || o.PropertyName === SDKUI_Localizator.ErrorEndRemDate), onContentReady: onContentReady, onValueChange: (value) => setFormData({ ...formData ?? {}, endTime: value }), showClearButton: true, readOnly: fieldsReadOnly.endDate })) : (_jsx(TMTextBox, { label: SDKUI_Localizator.ExpirationDate, value: formData?.endTime ? formatDate(formData?.endTime) : '', readOnly: true })) }));
|
|
351
365
|
export const RenderRemindDateField = ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }) => (_jsx("div", { style: fieldContainerWithMarginStyle, children: _jsx(TMDateBox, { id: "alert-time", resetTimeToZeroOnKeyPress: false, label: SDKUI_Localizator.Reminder, dateDisplayType: DateDisplayTypes.DateTime, value: formData?.remTime ?? undefined, isModifiedWhen: formData?.remTime !== formDataOrig?.remTime, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.ErrorEndRemDate), onValueChange: (value) => setFormData({ ...formData ?? {}, remTime: value }), showClearButton: true, readOnly: fieldsReadOnly.remTime }) }));
|
|
352
366
|
export const RenderTaskFormStateField = (props) => {
|
|
353
367
|
// Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
|
|
@@ -96,7 +96,7 @@ export declare const getTaskColor: (taskState: Task_States) => {
|
|
|
96
96
|
export declare const mergeUniqueTasks: (existing: Array<TaskDescriptor>, // Array of existing tasks
|
|
97
97
|
newTasks: Array<TaskDescriptor>) => Array<TaskDescriptor>;
|
|
98
98
|
export declare const getOriginLabel: (pdg: PdGs | undefined, ID1Name: string | undefined) => string;
|
|
99
|
-
export declare const taskValidatorAsync: (taskDescriptor: TaskDescriptor) => Promise<ValidationItem[]>;
|
|
99
|
+
export declare const taskValidatorAsync: (taskDescriptor: TaskDescriptor, requestMoreInfo?: boolean) => Promise<ValidationItem[]>;
|
|
100
100
|
export declare const gotoPDGExtendedLabel: (gotoVisible: boolean, pdg: PdGs, iD1Name: string | undefined) => string;
|
|
101
101
|
export declare const convertToSchedulerAppointments: (tasks: Array<TaskDescriptor>) => Array<Appointment>;
|
|
102
102
|
export declare const formatDate: (date: Date) => string;
|
|
@@ -339,7 +339,7 @@ export const getOriginLabel = (pdg, ID1Name) => {
|
|
|
339
339
|
}
|
|
340
340
|
return label;
|
|
341
341
|
};
|
|
342
|
-
export const taskValidatorAsync = async (taskDescriptor) => {
|
|
342
|
+
export const taskValidatorAsync = async (taskDescriptor, requestMoreInfo = false) => {
|
|
343
343
|
let vil = [];
|
|
344
344
|
// Validate task name
|
|
345
345
|
if (!taskDescriptor.name || taskDescriptor.name === "")
|
|
@@ -358,7 +358,12 @@ export const taskValidatorAsync = async (taskDescriptor) => {
|
|
|
358
358
|
// Validate that startTime is less than or equal to endTime
|
|
359
359
|
if (taskDescriptor.startTime && taskDescriptor.endTime) {
|
|
360
360
|
if (taskDescriptor.startTime > taskDescriptor.endTime) {
|
|
361
|
-
|
|
361
|
+
if (requestMoreInfo) {
|
|
362
|
+
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.ErrorStartEndDate, `${SDKUI_Localizator.ExpirationDateMustBeAfterCurrentDateTime}`));
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.ErrorStartEndDate, `${SDKUI_Localizator.StartDateMustBeBeforeEndDate}`));
|
|
366
|
+
}
|
|
362
367
|
}
|
|
363
368
|
}
|
|
364
369
|
return vil;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DcmtTypeDescriptor, WFDescriptor } from '@topconsultnpm/sdk-ts';
|
|
1
|
+
import { DcmtTypeDescriptor, HomeBlogPost, TaskDescriptor, WFDescriptor } from '@topconsultnpm/sdk-ts';
|
|
2
2
|
import { DeviceType } from "../../base/TMDeviceProvider";
|
|
3
3
|
import { WorkItemDetail } from "../../../ts";
|
|
4
4
|
interface IWorkflowOperationButtonsProps {
|
|
@@ -14,6 +14,13 @@ interface IWorkflowOperationButtonsProps {
|
|
|
14
14
|
onReject?: () => void;
|
|
15
15
|
onReAssign?: () => void;
|
|
16
16
|
onMoreInfo?: () => void;
|
|
17
|
+
allTasks?: Array<TaskDescriptor>;
|
|
18
|
+
getAllTasks?: () => Promise<void>;
|
|
19
|
+
deleteTaskByIdsCallback?: (deletedTaskIds: Array<number>) => Promise<void>;
|
|
20
|
+
addTaskCallback?: (task: TaskDescriptor) => Promise<void>;
|
|
21
|
+
editTaskCallback?: (task: TaskDescriptor) => Promise<void>;
|
|
22
|
+
handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
|
|
23
|
+
handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
|
|
17
24
|
}
|
|
18
25
|
export declare const WorkFlowOperationButtons: (props: IWorkflowOperationButtonsProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
26
|
export declare const WorkFlowApproveRejectPopUp: ({ TID, DID, deviceType, isReject, selectedItems, onClose, onCompleted }: {
|
|
@@ -63,12 +70,21 @@ export declare const WorkflowEndInstanceModal: ({ selectedInstances, onClose, on
|
|
|
63
70
|
onClose?: () => void;
|
|
64
71
|
onCompleted?: () => Promise<void>;
|
|
65
72
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
66
|
-
|
|
73
|
+
interface IWorkFlowMoreInfoPopUpProps {
|
|
74
|
+
fromDTD?: DcmtTypeDescriptor;
|
|
67
75
|
TID?: number;
|
|
68
76
|
DID?: number;
|
|
69
77
|
deviceType?: DeviceType;
|
|
70
78
|
onClose?: () => void;
|
|
71
79
|
onCompleted?: () => Promise<void>;
|
|
80
|
+
allTasks?: Array<TaskDescriptor>;
|
|
72
81
|
getAllTasks?: () => Promise<void>;
|
|
73
|
-
|
|
82
|
+
deleteTaskByIdsCallback?: (deletedTaskIds: Array<number>) => Promise<void>;
|
|
83
|
+
addTaskCallback?: (task: TaskDescriptor) => Promise<void>;
|
|
84
|
+
editTaskCallback?: (task: TaskDescriptor) => Promise<void>;
|
|
85
|
+
handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
|
|
86
|
+
handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
|
|
87
|
+
triggerBlogRefresh?: () => Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export declare const WorkFlowMoreInfoPopUp: (props: IWorkFlowMoreInfoPopUpProps) => import("react/jsx-runtime").JSX.Element | undefined;
|
|
74
90
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useMemo, useState } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { SDK_Globals, UserListCacheService, WFEvents, WorkflowCacheService } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import styled from "styled-components";
|
|
5
|
-
import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo,
|
|
5
|
+
import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo, IconSignaturePencil, isSign4TopEnabled, IconCheck, IconCloseCircle, IconStop, taskModalSizes } from "../../../helper";
|
|
6
6
|
import { TMColors } from "../../../utils/theme";
|
|
7
7
|
import TMButton from "../../base/TMButton";
|
|
8
8
|
import { DeviceType } from "../../base/TMDeviceProvider";
|
|
@@ -10,11 +10,9 @@ import TMModal from "../../base/TMModal";
|
|
|
10
10
|
import { TMExceptionBoxManager } from "../../base/TMPopUp";
|
|
11
11
|
import TMSpinner from "../../base/TMSpinner";
|
|
12
12
|
import TMUserChooser from "../../choosers/TMUserChooser";
|
|
13
|
-
import TMTextBox from "../../editors/TMTextBox";
|
|
14
|
-
import TMTextArea from "../../editors/TMTextArea";
|
|
15
|
-
import TMDropDown from "../../editors/TMDropDown";
|
|
16
|
-
import TMDateBox from "../../editors/TMDateBox";
|
|
17
13
|
import ShowAlert from "../../base/TMAlert";
|
|
14
|
+
import { FormModes } from "../../../ts";
|
|
15
|
+
import TMTaskForm from "../tasks/TMTaskForm";
|
|
18
16
|
const StyledWorkFlowOperationButtonsContainer = styled.div `
|
|
19
17
|
display: flex;
|
|
20
18
|
align-items: center;
|
|
@@ -64,7 +62,7 @@ const StyledHorizontalContainer = styled.div `
|
|
|
64
62
|
/* align-items: flex-end; */
|
|
65
63
|
`;
|
|
66
64
|
export const WorkFlowOperationButtons = (props) => {
|
|
67
|
-
const { dtd = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo } = props;
|
|
65
|
+
const { dtd = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo, } = props;
|
|
68
66
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
69
67
|
// Calcola direttamente se è un workflow di firma per evitare flickering durante il render
|
|
70
68
|
const isSignWorkflow = useMemo(() => {
|
|
@@ -282,69 +280,20 @@ export const WorkflowEndInstanceModal = ({ selectedInstances, onClose, onComplet
|
|
|
282
280
|
: `${SDKUI_Localizator.WorkflowEndInstance} (${selectedInstances.length} istanze)`;
|
|
283
281
|
return (_jsx(TMModal, { title: title, onClose: onClose, width: '600px', height: '270px', isModal: true, children: _jsxs(StyledModalBodyWrapper, { children: [_jsxs(StyledModalContentContainer, { children: [_jsx("div", { style: { fontWeight: 600, marginBottom: '8px' }, children: "Motivazione (obbligatorio):" }), _jsx(StyledTextArea, { "$isValid": !disable, value: commentValue, onChange: (e) => setCommentValue(e.target.value), placeholder: "Inserisci il motivo della terminazione...", maxLength: 200 }), _jsxs(CharacterCounter, { children: [commentValue.length, "/200"] })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconStop, {}), caption: SDKUI_Localizator.WorkflowEndInstance, width: '150px', disabled: disable, onClick: () => !disable && endInstancesAsync(), advancedColor: TMColors.error }) })] }) }));
|
|
284
282
|
};
|
|
285
|
-
export const WorkFlowMoreInfoPopUp = (
|
|
283
|
+
export const WorkFlowMoreInfoPopUp = (props) => {
|
|
284
|
+
const { fromDTD, DID = 0, TID = 0, deviceType = DeviceType.DESKTOP, onClose, onCompleted, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, triggerBlogRefresh } = props;
|
|
285
|
+
const taskContext = useMemo(() => ({ document: { tid: TID, did: DID, name: `${fromDTD?.name ?? '-'} (DID: ${DID})` } }), [TID, DID, fromDTD?.id]);
|
|
286
286
|
const [users, setUsers] = useState([]);
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
const validatorMoreInfoAsync = async (taskDescriptor) => {
|
|
293
|
-
let vil = [];
|
|
294
|
-
// Validate task name
|
|
295
|
-
if (!nameInput || nameInput === "")
|
|
296
|
-
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.Name, `${SDK_Localizator.RequiredField}`));
|
|
297
|
-
// Validate name length (max 100)
|
|
298
|
-
if (taskDescriptor.name && taskDescriptor.name.length > 100) {
|
|
299
|
-
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.Name, SDKUI_Localizator.ValueTooLong));
|
|
300
|
-
}
|
|
301
|
-
// Validate description length (max 200)
|
|
302
|
-
if (taskDescriptor.description && taskDescriptor.description.length > 200) {
|
|
303
|
-
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.Description, SDKUI_Localizator.ValueTooLong));
|
|
304
|
-
}
|
|
305
|
-
// Validate toID
|
|
306
|
-
if (!taskDescriptor.toID || taskDescriptor.toID <= 0)
|
|
307
|
-
vil.push(new ValidationItem(ResultTypes.ERROR, SDKUI_Localizator.AssignedTo_Female, `${SDK_Localizator.RequiredField}`));
|
|
308
|
-
return vil;
|
|
309
|
-
};
|
|
310
|
-
const requestMoreInfoAsync = async () => {
|
|
311
|
-
try {
|
|
312
|
-
TMSpinner.show();
|
|
313
|
-
// Ensure the task name includes the prefix before sending
|
|
314
|
-
const taskWithPrefix = {
|
|
315
|
-
...task,
|
|
316
|
-
name: `${TASK_MORE_INFO_PREFIX_NAME}${nameInput}`
|
|
317
|
-
};
|
|
318
|
-
await SDK_Globals.tmSession?.NewWorkflowEngine().WorkItem_MoreInfoAsync(TID, DID, taskWithPrefix);
|
|
319
|
-
await getAllTasks?.();
|
|
320
|
-
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: SDKUI_Localizator.MoreInformation, message: SDKUI_Localizator.MoreInfoSent, duration: 3000 });
|
|
321
|
-
}
|
|
322
|
-
catch (e) {
|
|
323
|
-
TMExceptionBoxManager.show({ exception: e });
|
|
324
|
-
}
|
|
325
|
-
finally {
|
|
326
|
-
onCompleted?.();
|
|
327
|
-
onClose?.();
|
|
328
|
-
TMSpinner.hide();
|
|
329
|
-
}
|
|
287
|
+
const onSaved = async (newTask) => {
|
|
288
|
+
await getAllTasks?.();
|
|
289
|
+
await triggerBlogRefresh?.();
|
|
290
|
+
await onCompleted?.();
|
|
291
|
+
onClose?.();
|
|
330
292
|
};
|
|
331
293
|
useEffect(() => {
|
|
332
294
|
const fetchData = async () => {
|
|
333
295
|
TMSpinner.show({ description: SDKUI_Localizator.LoadingParticipants });
|
|
334
296
|
try {
|
|
335
|
-
let newTask = TaskEngine.NewTaskDescriptor();
|
|
336
|
-
newTask.toID = 0;
|
|
337
|
-
// Initialize nameInput from task.name if it exists and remove the prefix
|
|
338
|
-
const initialName = newTask.name?.startsWith(TASK_MORE_INFO_PREFIX_NAME)
|
|
339
|
-
? newTask.name.substring(TASK_MORE_INFO_PREFIX_NAME.length)
|
|
340
|
-
: newTask.name || '';
|
|
341
|
-
setNameInput(initialName);
|
|
342
|
-
// Set task name with prefix for internal state consistency if needed by validation,
|
|
343
|
-
// or ensure validation handles it correctly. For now, we'll keep nameInput for the TMTextBox.
|
|
344
|
-
newTask.name = `${TASK_MORE_INFO_PREFIX_NAME}${initialName}`;
|
|
345
|
-
setTask(newTask);
|
|
346
|
-
setTaskOrig(structuredClone(newTask));
|
|
347
|
-
validatorMoreInfoAsync(newTask);
|
|
348
297
|
// Recupera tutti gli utenti (tranne me)
|
|
349
298
|
const allUsers = await UserListCacheService.GetAllAsync();
|
|
350
299
|
const filteredUsers = allUsers.filter(u => u.id !== SDK_Globals.tmSession?.SessionDescr?.userID);
|
|
@@ -361,33 +310,5 @@ export const WorkFlowMoreInfoPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
361
310
|
return;
|
|
362
311
|
fetchData();
|
|
363
312
|
}, [TID]);
|
|
364
|
-
|
|
365
|
-
if (!task)
|
|
366
|
-
return;
|
|
367
|
-
validatorMoreInfoAsync(task).then((vil) => setValidationItems(vil));
|
|
368
|
-
}, [task]);
|
|
369
|
-
const getPriorityLocalizatorValues = () => {
|
|
370
|
-
// Filtered enum for Low and High values
|
|
371
|
-
const filteredPriorities = { Low: Priorities.Low, High: Priorities.High };
|
|
372
|
-
return Object.values(filteredPriorities).map(priority => {
|
|
373
|
-
switch (priority) {
|
|
374
|
-
case Priorities.High:
|
|
375
|
-
return ({ value: priority, display: SDKUI_Localizator.High });
|
|
376
|
-
default:
|
|
377
|
-
return ({ value: priority, display: SDKUI_Localizator.Low });
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
};
|
|
381
|
-
return (_jsx(TMModal, { title: SDKUI_Localizator.MoreInformation, onClose: onClose, width: deviceType === DeviceType.MOBILE ? '95%' : '640px', height: deviceType === DeviceType.MOBILE ? '60%' : '440px', isModal: true, children: _jsxs(StyledModalBodyWrapper, { children: [_jsxs(StyledModalContentContainer, { children: [_jsx(TMUserChooser, { width: "250px", label: SDKUI_Localizator.RequestTo, dataSource: users, values: task?.toID ? [task.toID] : [], validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.AssignedTo_Female), onValueChanged: (IDs) => {
|
|
382
|
-
if (IDs === undefined)
|
|
383
|
-
return;
|
|
384
|
-
setTask({ ...task ?? {}, toID: IDs?.[0] });
|
|
385
|
-
} }), _jsx(TMTextBox, { label: SDKUI_Localizator.Subject, value: nameInput, isModifiedWhen: nameInput !== (taskOrig?.name?.startsWith(TASK_MORE_INFO_PREFIX_NAME) ? taskOrig.name.substring(TASK_MORE_INFO_PREFIX_NAME.length) : taskOrig?.name || ''), autoFocus: true, maxLength: 100 - TASK_MORE_INFO_PREFIX_NAME.length, onValueChanged: (e) => {
|
|
386
|
-
const newValue = e.target.value;
|
|
387
|
-
setNameInput(newValue);
|
|
388
|
-
// Update task.name with the prefix
|
|
389
|
-
setTask({ ...task ?? {}, name: `${TASK_MORE_INFO_PREFIX_NAME}${newValue}` });
|
|
390
|
-
}, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Name) }), _jsx("p", { style: { fontStyle: 'italic', fontSize: '0.9rem' }, children: `${TASK_MORE_INFO_PREFIX_NAME}${nameInput}` }), _jsx(TMTextArea, { label: SDKUI_Localizator.Description, value: task?.description ?? '', rows: 2, maxLength: 200, isModifiedWhen: task?.description !== task?.description, onValueChanged: (e) => { setTask({ ...task ?? {}, description: e.target.value }); },
|
|
391
|
-
// validationItems={validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Description)}
|
|
392
|
-
resize: false }), _jsxs(StyledHorizontalContainer, { children: [_jsx(TMDropDown, { label: SDKUI_Localizator.Priority, width: "250px", value: task?.priority, dataSource: getPriorityLocalizatorValues(), isModifiedWhen: task?.priority !== taskOrig?.priority, onValueChanged: (e) => setTask({ ...task ?? {}, priority: e?.target?.value }) }), _jsx(TMDateBox, { width: "250px", resetTimeToZeroOnKeyPress: false, padding: "10px 0px", label: SDKUI_Localizator.ByDate, dateDisplayType: DateDisplayTypes.DateTime, value: task?.endTime, isModifiedWhen: task?.endTime !== taskOrig?.endTime, onValueChange: (value) => { setTask({ ...task ?? {}, endTime: value }); }, showClearButton: true })] })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Request, disabled: disable, onClick: () => !disable && requestMoreInfoAsync(), advancedColor: TMColors.tertiary }) })] }) }));
|
|
313
|
+
return (getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback && handleNavigateToWGs && handleNavigateToDossiers && (_jsx(TMTaskForm, { taskContext: taskContext, id: -1, width: taskModalSizes(deviceType, FormModes.Create).width, height: taskModalSizes(deviceType, FormModes.Create).height, title: SDKUI_Localizator.MoreInformation, isModal: true, isContextualCreate: true, formMode: FormModes.Create, requestMoreInfo: true, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, visualizedTasks: [], currentTask: null, selectedRowKeys: [], onClose: onClose, usersList: users, onSaved: onSaved })));
|
|
393
314
|
};
|
|
@@ -629,10 +629,10 @@ const TMBlogsPost = (props) => {
|
|
|
629
629
|
console.warn(`Unhandled object type: ${ref.objClass}`);
|
|
630
630
|
}
|
|
631
631
|
};
|
|
632
|
-
return _jsx("div", { ref: containerRef, style: { height: height, width: width }, children: _jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel, showWaitPanelPrimary: showPrimary, showWaitPanelSecondary: showSecondary, waitPanelTitle: waitPanelTitle, waitPanelTextPrimary: waitPanelTextPrimary, waitPanelValuePrimary: waitPanelValuePrimary, waitPanelMaxValuePrimary: waitPanelMaxValuePrimary, waitPanelTextSecondary: waitPanelTextSecondary, waitPanelValueSecondary: waitPanelValueSecondary, waitPanelMaxValueSecondary: waitPanelMaxValueSecondary, isCancelable: true, abortController: abortController, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: localShowWaitPanel, showWaitPanelPrimary: localShowPrimary, waitPanelTitle: localWaitPanelTitle, waitPanelTextPrimary: localWaitPanelTextPrimary, waitPanelValuePrimary: localWaitPanelValuePrimary, waitPanelMaxValuePrimary: localWaitPanelMaxValuePrimary, isCancelable: true, abortController: localAbortController, children: [_jsx(TMBlogHeader, { isVisible: currentHeader !== undefined && !isHeaderHidden, layoutMode: layoutMode, height: layoutMode === 'extended' ? "40px" : "70px", width: "100%", allPosts: posts, postsToShow: postsToShow, onPostsToShowChange: handlePostsToShowChange, categoryIdDataSource: categoryIdDataSource, appliedCategoryIdFilters: appliedCategoryIdFilters, setAppliedCategoryIdFilters: setAppliedCategoryIdFilters, searchText: searchText, onSearchChange: handleSearchChange }), _jsxs("div", { style: {
|
|
632
|
+
return _jsx("div", { ref: containerRef, style: { height: height, width: width }, children: _jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel, showWaitPanelPrimary: showPrimary, showWaitPanelSecondary: showSecondary, waitPanelTitle: waitPanelTitle, waitPanelTextPrimary: waitPanelTextPrimary, waitPanelValuePrimary: waitPanelValuePrimary, waitPanelMaxValuePrimary: waitPanelMaxValuePrimary, waitPanelTextSecondary: waitPanelTextSecondary, waitPanelValueSecondary: waitPanelValueSecondary, waitPanelMaxValueSecondary: waitPanelMaxValueSecondary, isCancelable: true, abortController: abortController, children: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: localShowWaitPanel, showWaitPanelPrimary: localShowPrimary, waitPanelTitle: localWaitPanelTitle, waitPanelTextPrimary: localWaitPanelTextPrimary, waitPanelValuePrimary: localWaitPanelValuePrimary, waitPanelMaxValuePrimary: localWaitPanelMaxValuePrimary, isCancelable: true, abortController: localAbortController, children: [_jsx(TMBlogHeader, { isVisible: currentHeader !== undefined && !isHeaderHidden, layoutMode: layoutMode, height: layoutMode === 'extended' ? "40px" : "70px", width: "100%", allPosts: posts, postsToShow: postsToShow, onPostsToShowChange: handlePostsToShowChange, categoryIdDataSource: categoryIdDataSource, appliedCategoryIdFilters: appliedCategoryIdFilters, setAppliedCategoryIdFilters: setAppliedCategoryIdFilters, searchText: searchText, onSearchChange: handleSearchChange }), _jsxs("div", { id: `${id}-blogs-wrapper`, onContextMenu: onContextMenu, style: {
|
|
633
633
|
width: "100%",
|
|
634
634
|
height: currentHeader !== undefined && !isHeaderHidden ? `calc(100% - ${layoutMode === 'extended' ? "40px" : "70px"})` : "100%",
|
|
635
|
-
}, children: [blogPosts.length === 0 && _jsx(TMToppyMessage, { message: searchText.length > 0 ? SDKUI_Localizator.NoMessagesFound : SDKUI_Localizator.NoMessages }), blogPosts.length > 0 && _jsxs("div", { id: `${id}-blogs-container`, tabIndex: 0, onKeyDown: handleKeyDown,
|
|
635
|
+
}, children: [blogPosts.length === 0 && _jsx(TMToppyMessage, { message: searchText.length > 0 ? SDKUI_Localizator.NoMessagesFound : SDKUI_Localizator.NoMessages }), blogPosts.length > 0 && _jsxs("div", { id: `${id}-blogs-container`, tabIndex: 0, onKeyDown: handleKeyDown, style: {
|
|
636
636
|
height: '100%',
|
|
637
637
|
width: '100%',
|
|
638
638
|
outline: "none",
|
|
@@ -680,11 +680,11 @@ const TMBlogsPost = (props) => {
|
|
|
680
680
|
boxShadow: isFocused ? "0 4px 12px rgba(19, 85, 150, 0.6)" : "none",
|
|
681
681
|
cursor: 'pointer',
|
|
682
682
|
}, children: [_jsx(BlogPostTitle, { displayMode: displayMode, layoutMode: layoutMode, blogPost: blogPost, isSelected: isSelected, isOwnComment: isOwnComment, searchText: searchText, isSys: isSys, isHomeBlogPost: isHomeBlogPost, showId: localShowId, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), isNew && _jsx(NewBadge, { layoutMode: layoutMode }), _jsx("div", { style: { fontSize: '1rem', color: "#000", marginTop: "10px", overflow: "hidden" }, children: _jsx(TMHtmlContentDisplay, { markup: blogPost.description ?? '-', searchText: searchText, isSelected: isSelected }) }), showExtendedAttachments && blogPost.attachments && blogPost.attachments.length > 0 && (_jsx(TMBlogAttachments, { attachments: blogPost.attachments, layoutMode: layoutMode, isSelected: isSelected, searchText: searchText, dcmtTypeDescriptors: dcmtTypeDescriptors, treeFs: treeFs, draftLatestInfoMap: draftLatestInfoMap, archivedDocumentMap: archivedDocumentMap, handleAttachmentFocus: handleFocusedAttachment, openDcmtForm: openDcmtForm }))] }, `${id}-blogpost-${blogPost.id}`) })] }, "blog-post-wrapper-" + id + "-" + blogPost.id);
|
|
683
|
-
}), _jsx("div", { ref: bottomRef }), _jsx(TMContextMenu, { items: menuItems, target: `#${id}-blogs-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
683
|
+
}), _jsx("div", { ref: bottomRef })] }), _jsx(TMContextMenu, { items: menuItems, target: `#${id}-blogs-wrapper`, externalControl: {
|
|
684
|
+
visible: menuVisible,
|
|
685
|
+
position: menuPosition,
|
|
686
|
+
onClose: closeContextMenu,
|
|
687
|
+
} }), (showTaskForm && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) && _jsx("div", { style: { height: "100%", width: "100%" }, children: _jsx(TMTaskForm, { id: -1, title: SDKUI_Localizator.ContextualTask, isModal: true, width: taskModalSizes(deviceType, FormModes.Create).width, height: taskModalSizes(deviceType, FormModes.Create).height, formMode: FormModes.Create, visualizedTasks: [], currentTask: currentTask, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, onSaved: onSavedTaskFormCallback, onClose: () => closeTaskFormCallback(), onCancel: () => closeTaskFormCallback(), usersList: participants, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, isContextualCreate: true, taskContext: taskContext, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback }) }), (dcmtForm.dcmt && dcmtForm.dcmt.TID && dcmtForm.dcmt.DID) && _jsx(TMDcmtForm, { TID: Number(dcmtForm.dcmt.TID), DID: Number(dcmtForm.dcmt.DID), layoutMode: LayoutModes.Update, onClose: closeDcmtForm, isClosable: true, titleModal: SDKUI_Localizator.Attachment + ": " + dcmtForm.dcmt.fileName, isModal: true, widthModal: "95%", heightModal: "95%", allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference, moreInfoTasks: getMoreInfoTasksForDocument(allTasks, Number(dcmtForm.dcmt.TID), Number(dcmtForm.dcmt.DID)) }), (showFloatingCommentButton && showCommentFormCallback && !(context?.engine === 'WorkingGroupEngine' && context?.object?.customData1 === 1)) && _jsx("button", { style: {
|
|
688
688
|
position: 'absolute',
|
|
689
689
|
bottom: '18px',
|
|
690
690
|
right: '20px',
|
|
@@ -245,6 +245,7 @@ export declare class SDKUI_Localizator {
|
|
|
245
245
|
static get Expected(): "Erwartet" | "Expected" | "Esperado" | "Attendu" | "Atteso";
|
|
246
246
|
static get Expiration(): "Ablaufdatum" | "Expiration" | "Fecha de expiración" | "Date d'expiration" | "Data de expiração" | "Scadenza";
|
|
247
247
|
static get ExpirationDate(): "Ablaufdatum" | "Expiration date" | "Fecha de vencimiento" | "Date d'échéance" | "Data de validade" | "Data di scadenza";
|
|
248
|
+
static get ExpirationDateMustBeAfterCurrentDateTime(): "Das Ablaufdatum muss nach dem aktuellen Datum und der aktuellen Uhrzeit liegen." | "The expiration date must be after the current date and time." | "La fecha de vencimiento debe ser posterior a la fecha y hora actual." | "La date d'expiration doit être postérieure à la date et l'heure actuelles." | "A data de validade deve ser posterior à data e hora atuais." | "La data di scadenza deve essere successiva alla data e ora corrente.";
|
|
248
249
|
static get ExpertMode(): "Expertenmodus" | "Expert mode" | "Modo experto" | "Mode expert" | "Modo especialista" | "Modalità esperto";
|
|
249
250
|
static get Expiring(): "Ablaufend" | "Expiring" | "Por vencer" | "Expirant" | "Vencendo" | "In scadenza";
|
|
250
251
|
static get Export(): "Exportieren" | "Export" | "Exportar" | "Exporter" | "Esporta";
|
|
@@ -642,6 +643,8 @@ export declare class SDKUI_Localizator {
|
|
|
642
643
|
static get SwitchUser(): "Benutzer wechseln" | "Switch user" | "Cambiar usuario" | "Changer d'utilisateur" | "Mudar de usuário" | "Cambia utente";
|
|
643
644
|
static get TargetedSearch(): "Gezielte Suche" | "Targeted search" | "Búsqueda dirigida" | "Recherche ciblée" | "Pesquisa direcionada" | "Ricerca puntuale";
|
|
644
645
|
static get TaskAssignedMessage(): "Aufgabe wurde vom Benutzer \"{{0}}\" zugewiesen." | "Task assigned by user \"{{0}}\"." | "Tarea asignada por el usuario \"{{0}}\"." | "Tâche assignée par l'utilisateur \"{{0}}\"." | "Tarefa atribuída pelo usuário \"{{0}}\"." | "Attività assegnata dall'utente \"{{0}}\".";
|
|
646
|
+
static get MoreInfoRequestedTo(): "Weitere Informationen angefordert von \"{{0}}\"." | "More information requested to \"{{0}}\"." | "Solicitud de más información a \"{{0}}\"." | "Demande d'informations supplémentaires à \"{{0}}\"." | "Pedido de mais informações a \"{{0}}\"." | "Richiesta di maggiori informazioni a \"{{0}}\".";
|
|
647
|
+
static get MoreInfoRequested(): "Weitere Informationen angefordert" | "More information requested" | "Solicitud de más información" | "Demande d'informations supplémentaires" | "Pedido de mais informações" | "Richiesta di maggiori informazioni";
|
|
645
648
|
static get TaskAssignedToUserMessage(): "Aufgabe zugewiesen an den Benutzer \"{{0}}\"" | "Task assigned to user \"{{0}}\"" | "Tarea asignada al usuario \"{{0}}\"" | "Tâche assignée à l'utilisateur \"{{0}}\"" | "Tarefa atribuída ao usuário \"{{0}}\"" | "Attività assegnata all'utente \"{{0}}\"";
|
|
646
649
|
static get TaskConsideredExpiring(): "Die Aufgabe wird als ablaufend betrachtet, wenn" | "The task is considered expiring if" | "La tarea se considera por vencer si" | "La tâche est considérée comme expirante si" | "A tarefa é considerada vencendo se" | "L'attività è considerata in scadenza se";
|
|
647
650
|
static get TasksEmpty(): string;
|
|
@@ -2417,6 +2417,16 @@ export class SDKUI_Localizator {
|
|
|
2417
2417
|
default: return "Data di scadenza";
|
|
2418
2418
|
}
|
|
2419
2419
|
}
|
|
2420
|
+
static get ExpirationDateMustBeAfterCurrentDateTime() {
|
|
2421
|
+
switch (this._cultureID) {
|
|
2422
|
+
case CultureIDs.De_DE: return "Das Ablaufdatum muss nach dem aktuellen Datum und der aktuellen Uhrzeit liegen.";
|
|
2423
|
+
case CultureIDs.En_US: return "The expiration date must be after the current date and time.";
|
|
2424
|
+
case CultureIDs.Es_ES: return "La fecha de vencimiento debe ser posterior a la fecha y hora actual.";
|
|
2425
|
+
case CultureIDs.Fr_FR: return "La date d'expiration doit être postérieure à la date et l'heure actuelles.";
|
|
2426
|
+
case CultureIDs.Pt_PT: return "A data de validade deve ser posterior à data e hora atuais.";
|
|
2427
|
+
default: return "La data di scadenza deve essere successiva alla data e ora corrente.";
|
|
2428
|
+
}
|
|
2429
|
+
}
|
|
2420
2430
|
static get ExpertMode() {
|
|
2421
2431
|
switch (this._cultureID) {
|
|
2422
2432
|
case CultureIDs.De_DE: return "Expertenmodus";
|
|
@@ -6392,6 +6402,26 @@ export class SDKUI_Localizator {
|
|
|
6392
6402
|
default: return "Attività assegnata dall'utente \"{{0}}\".";
|
|
6393
6403
|
}
|
|
6394
6404
|
}
|
|
6405
|
+
static get MoreInfoRequestedTo() {
|
|
6406
|
+
switch (this._cultureID) {
|
|
6407
|
+
case CultureIDs.De_DE: return "Weitere Informationen angefordert von \"{{0}}\".";
|
|
6408
|
+
case CultureIDs.En_US: return "More information requested to \"{{0}}\".";
|
|
6409
|
+
case CultureIDs.Es_ES: return "Solicitud de más información a \"{{0}}\".";
|
|
6410
|
+
case CultureIDs.Fr_FR: return "Demande d'informations supplémentaires à \"{{0}}\".";
|
|
6411
|
+
case CultureIDs.Pt_PT: return "Pedido de mais informações a \"{{0}}\".";
|
|
6412
|
+
default: return "Richiesta di maggiori informazioni a \"{{0}}\".";
|
|
6413
|
+
}
|
|
6414
|
+
}
|
|
6415
|
+
static get MoreInfoRequested() {
|
|
6416
|
+
switch (this._cultureID) {
|
|
6417
|
+
case CultureIDs.De_DE: return "Weitere Informationen angefordert";
|
|
6418
|
+
case CultureIDs.En_US: return "More information requested";
|
|
6419
|
+
case CultureIDs.Es_ES: return "Solicitud de más información";
|
|
6420
|
+
case CultureIDs.Fr_FR: return "Demande d'informations supplémentaires";
|
|
6421
|
+
case CultureIDs.Pt_PT: return "Pedido de mais informações";
|
|
6422
|
+
default: return "Richiesta di maggiori informazioni";
|
|
6423
|
+
}
|
|
6424
|
+
}
|
|
6395
6425
|
static get TaskAssignedToUserMessage() {
|
|
6396
6426
|
switch (this._cultureID) {
|
|
6397
6427
|
case CultureIDs.De_DE: return "Aufgabe zugewiesen an den Benutzer \"{{0}}\"";
|