@topconsultnpm/sdkui-react 6.20.0-dev1.13 → 6.20.0-dev1.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assets/Toppy-help-center.png +0 -0
- package/lib/assets/headergradient.svg +87 -0
- package/lib/components/NewComponents/ContextMenu/TMContextMenu.js +322 -30
- package/lib/components/NewComponents/ContextMenu/hooks.d.ts +8 -1
- package/lib/components/NewComponents/ContextMenu/hooks.js +80 -8
- package/lib/components/NewComponents/ContextMenu/index.d.ts +3 -0
- package/lib/components/NewComponents/ContextMenu/index.js +2 -0
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +9 -1
- package/lib/components/NewComponents/ContextMenu/styles.js +146 -47
- package/lib/components/NewComponents/ContextMenu/types.d.ts +22 -3
- package/lib/components/NewComponents/ContextMenu/useLongPress.d.ts +21 -0
- package/lib/components/NewComponents/ContextMenu/useLongPress.js +112 -0
- package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +620 -125
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +25 -5
- package/lib/components/NewComponents/FloatingMenuBar/styles.js +215 -59
- package/lib/components/NewComponents/FloatingMenuBar/types.d.ts +12 -3
- package/lib/components/base/TMAccordionNew.js +35 -14
- package/lib/components/base/TMButton.js +6 -0
- package/lib/components/base/TMClosableList.js +4 -0
- package/lib/components/base/TMCustomButton.js +61 -17
- package/lib/components/base/TMDataGrid.d.ts +7 -4
- package/lib/components/base/TMDataGrid.js +153 -11
- package/lib/components/base/TMDropDownMenu.js +21 -18
- package/lib/components/base/TMFileManager.d.ts +4 -3
- package/lib/components/base/TMFileManager.js +32 -24
- package/lib/components/base/TMFileManagerDataGridView.d.ts +3 -2
- package/lib/components/base/TMFileManagerDataGridView.js +1 -11
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +7 -1
- package/lib/components/base/TMFileManagerThumbnailItems.js +5 -2
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +17 -4
- package/lib/components/base/TMFileManagerThumbnailsView.js +18 -6
- package/lib/components/base/TMFileManagerUtils.d.ts +0 -12
- package/lib/components/base/TMListView.js +33 -15
- package/lib/components/base/TMPanel.d.ts +1 -1
- package/lib/components/base/TMPanel.js +4 -2
- package/lib/components/base/TMPopUp.js +6 -0
- package/lib/components/base/TMToolbarCard.js +2 -0
- package/lib/components/base/TMTreeView.d.ts +2 -1
- package/lib/components/base/TMTreeView.js +33 -26
- package/lib/components/choosers/TMDataListItemChooser.d.ts +2 -0
- package/lib/components/choosers/TMDataListItemChooser.js +8 -2
- package/lib/components/choosers/TMDcmtTypeChooser.d.ts +1 -0
- package/lib/components/choosers/TMDcmtTypeChooser.js +11 -3
- package/lib/components/choosers/TMDistinctValues.js +2 -2
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +2 -0
- package/lib/components/choosers/TMDynDataListItemChooser.js +8 -2
- package/lib/components/choosers/TMInvoiceRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMMetadataChooser.d.ts +2 -0
- package/lib/components/choosers/TMMetadataChooser.js +19 -4
- package/lib/components/choosers/TMOrderRetrieveFormats.js +1 -1
- package/lib/components/choosers/TMUserChooser.d.ts +2 -5
- package/lib/components/choosers/TMUserChooser.js +33 -47
- package/lib/components/editors/TMCheckBox.js +2 -0
- package/lib/components/editors/TMDateBox.js +18 -9
- package/lib/components/editors/TMEditorStyled.js +7 -0
- package/lib/components/editors/TMLocalizedTextBox.d.ts +3 -1
- package/lib/components/editors/TMLocalizedTextBox.js +16 -14
- package/lib/components/editors/TMMetadataEditor.d.ts +1 -0
- package/lib/components/editors/TMMetadataEditor.js +4 -4
- package/lib/components/editors/TMMetadataTextBox.d.ts +9 -0
- package/lib/components/editors/TMMetadataTextBox.js +92 -0
- package/lib/components/editors/TMMetadataValues.d.ts +2 -0
- package/lib/components/editors/TMMetadataValues.js +26 -8
- package/lib/components/editors/TMRadioButton.js +2 -0
- package/lib/components/editors/TMTextArea.js +18 -30
- package/lib/components/editors/TMTextBox.d.ts +1 -1
- package/lib/components/editors/TMTextBox.js +29 -4
- package/lib/components/editors/TMTextExpression.js +6 -91
- package/lib/components/features/archive/TMArchive.js +2 -2
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +15 -0
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.js +462 -0
- package/lib/components/features/assistant/TMToppySpeechBubble.d.ts +11 -0
- package/lib/components/features/assistant/TMToppySpeechBubble.js +126 -0
- package/lib/components/features/documents/TMDcmtBlog.js +1 -1
- package/lib/components/features/documents/TMDcmtForm.d.ts +14 -2
- package/lib/components/features/documents/TMDcmtForm.js +576 -292
- package/lib/components/features/documents/TMDcmtPreview.js +42 -155
- package/lib/components/features/documents/TMDcmtTasks.js +9 -9
- package/lib/components/features/documents/TMMasterDetailDcmts.js +38 -53
- package/lib/components/features/documents/TMRelationViewer.d.ts +1 -1
- package/lib/components/features/documents/TMRelationViewer.js +2 -2
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +8 -0
- package/lib/components/features/search/{TMSearchResultCheckoutInfoForm.js → TMDcmtCheckoutInfoForm.js} +2 -2
- package/lib/components/features/search/TMSavedQuerySelector.js +72 -67
- package/lib/components/features/search/TMSearch.d.ts +3 -0
- package/lib/components/features/search/TMSearch.js +50 -11
- package/lib/components/features/search/TMSearchQueryEditor.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryEditor.js +10 -10
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +1 -0
- package/lib/components/features/search/TMSearchQueryPanel.js +40 -25
- package/lib/components/features/search/TMSearchResult.d.ts +3 -0
- package/lib/components/features/search/TMSearchResult.js +370 -252
- package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +3 -3
- package/lib/components/features/search/TMSearchResultsMenuItems.js +227 -171
- package/lib/components/features/search/TMSignSettingsForm.js +1 -1
- package/lib/components/features/search/TMSignatureInfoContent.d.ts +6 -0
- package/lib/components/features/search/TMSignatureInfoContent.js +140 -0
- package/lib/components/features/search/TMViewHistoryDcmt.js +47 -52
- package/lib/components/features/tasks/TMTaskForm.js +75 -25
- package/lib/components/features/tasks/TMTasksAgenda.d.ts +3 -1
- package/lib/components/features/tasks/TMTasksAgenda.js +48 -9
- package/lib/components/features/tasks/TMTasksCalendar.d.ts +2 -0
- package/lib/components/features/tasks/TMTasksCalendar.js +19 -7
- package/lib/components/features/tasks/TMTasksUtils.d.ts +2 -2
- package/lib/components/features/tasks/TMTasksUtils.js +57 -37
- package/lib/components/features/tasks/TMTasksView.js +28 -19
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +33 -2
- package/lib/components/features/workflow/TMWorkflowPopup.js +140 -34
- package/lib/components/features/workflow/diagram/DiagramItemComponent.d.ts +2 -0
- package/lib/components/features/workflow/diagram/DiagramItemComponent.js +14 -7
- package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
- package/lib/components/features/workflow/diagram/RecipientList.js +3 -2
- package/lib/components/features/workflow/diagram/WFDiagram.d.ts +4 -0
- package/lib/components/features/workflow/diagram/WFDiagram.js +164 -13
- package/lib/components/forms/Login/LoginValidatorService.d.ts +2 -0
- package/lib/components/forms/Login/LoginValidatorService.js +7 -2
- package/lib/components/forms/Login/TMLoginForm.js +35 -7
- package/lib/components/forms/TMChooserForm.js +1 -1
- package/lib/components/grids/TMBlogsPost.js +56 -31
- package/lib/components/grids/TMRecentsManager.js +20 -10
- package/lib/components/grids/TMValidationItemsList.js +6 -0
- package/lib/components/index.d.ts +6 -3
- package/lib/components/index.js +6 -3
- package/lib/components/layout/panelManager/TMPanelManagerContext.js +13 -5
- package/lib/components/query/TMQueryEditor.d.ts +6 -1
- package/lib/components/query/TMQueryEditor.js +105 -101
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/settings/SettingsAppearance.js +99 -30
- package/lib/components/sidebar/TMHeader.js +11 -7
- package/lib/components/sidebar/TMSidebar.d.ts +0 -1
- package/lib/components/sidebar/TMSidebar.js +16 -44
- package/lib/components/sidebar/TMSidebarItem.js +36 -17
- package/lib/components/viewers/TMDataListItemViewer.d.ts +2 -1
- package/lib/components/viewers/TMDataListItemViewer.js +35 -71
- package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +8 -0
- package/lib/components/viewers/TMDataUserIdItemViewer.js +39 -0
- package/lib/css/tm-sdkui.css +1 -1
- package/lib/helper/SDKUI_Globals.d.ts +22 -0
- package/lib/helper/SDKUI_Globals.js +10 -1
- package/lib/helper/SDKUI_Localizator.d.ts +21 -3
- package/lib/helper/SDKUI_Localizator.js +196 -10
- package/lib/helper/TMCommandsContextMenu.d.ts +4 -2
- package/lib/helper/TMCommandsContextMenu.js +15 -4
- package/lib/helper/TMIcons.d.ts +4 -0
- package/lib/helper/TMIcons.js +13 -3
- package/lib/helper/TMPdfViewer.d.ts +8 -0
- package/lib/helper/TMPdfViewer.js +373 -0
- package/lib/helper/TMToppyMessage.js +4 -0
- package/lib/helper/checkinCheckoutManager.d.ts +31 -1
- package/lib/helper/checkinCheckoutManager.js +112 -30
- package/lib/helper/devextremeCustomMessages.d.ts +30 -0
- package/lib/helper/devextremeCustomMessages.js +30 -0
- package/lib/helper/helpers.d.ts +30 -2
- package/lib/helper/helpers.js +132 -4
- package/lib/helper/index.d.ts +2 -0
- package/lib/helper/index.js +2 -0
- package/lib/helper/queryHelper.d.ts +2 -2
- package/lib/helper/queryHelper.js +80 -24
- package/lib/helper/workItemsHelper.d.ts +6 -0
- package/lib/helper/workItemsHelper.js +230 -0
- package/lib/hooks/useCheckInOutOperations.d.ts +28 -0
- package/lib/hooks/useCheckInOutOperations.js +223 -0
- package/lib/hooks/useDataListItem.d.ts +12 -0
- package/lib/hooks/useDataListItem.js +132 -0
- package/lib/hooks/useDataUserIdItem.d.ts +10 -0
- package/lib/hooks/useDataUserIdItem.js +96 -0
- package/lib/hooks/useFloatingBarPinnedItems.d.ts +11 -0
- package/lib/hooks/useFloatingBarPinnedItems.js +54 -0
- package/lib/hooks/useMetadataExpression.d.ts +19 -0
- package/lib/hooks/useMetadataExpression.js +99 -0
- package/lib/hooks/useSettingsFeedback.d.ts +11 -0
- package/lib/hooks/useSettingsFeedback.js +38 -0
- package/lib/hooks/useWorkflowApprove.d.ts +4 -0
- package/lib/hooks/useWorkflowApprove.js +14 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -2
- package/lib/services/platform_services.d.ts +3 -3
- package/lib/ts/types.d.ts +61 -1
- package/lib/utils/theme.d.ts +1 -1
- package/lib/utils/theme.js +1 -1
- package/package.json +6 -5
- package/lib/components/NewComponents/Notification/Notification.d.ts +0 -4
- package/lib/components/NewComponents/Notification/Notification.js +0 -60
- package/lib/components/NewComponents/Notification/NotificationContainer.d.ts +0 -8
- package/lib/components/NewComponents/Notification/NotificationContainer.js +0 -33
- package/lib/components/NewComponents/Notification/index.d.ts +0 -2
- package/lib/components/NewComponents/Notification/index.js +0 -2
- package/lib/components/NewComponents/Notification/styles.d.ts +0 -21
- package/lib/components/NewComponents/Notification/styles.js +0 -180
- package/lib/components/NewComponents/Notification/types.d.ts +0 -18
- package/lib/components/NewComponents/Notification/types.js +0 -1
- package/lib/components/base/TMContextMenu.d.ts +0 -25
- package/lib/components/base/TMContextMenu.js +0 -109
- package/lib/components/base/TMContextMenuOLD.d.ts +0 -26
- package/lib/components/base/TMContextMenuOLD.js +0 -56
- package/lib/components/base/TMFloatingToolbar.d.ts +0 -9
- package/lib/components/base/TMFloatingToolbar.js +0 -101
- package/lib/components/features/assistant/ToppyDraggableHelpCenter.d.ts +0 -30
- package/lib/components/features/assistant/ToppyDraggableHelpCenter.js +0 -482
- package/lib/components/features/assistant/ToppySpeechBubble.d.ts +0 -9
- package/lib/components/features/assistant/ToppySpeechBubble.js +0 -117
- package/lib/components/features/search/TMSearchResultCheckoutInfoForm.d.ts +0 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
import { Priorities, ResultTypes, SDK_Globals, SDK_Localizator, TaskEngine, UserListCacheService, ValidationItem, WorkflowCacheService } from '@topconsultnpm/sdk-ts';
|
|
2
|
+
import { useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { Priorities, ResultTypes, SDK_Globals, SDK_Localizator, TaskEngine, UserListCacheService, ValidationItem, WFEvents, WorkflowCacheService } from '@topconsultnpm/sdk-ts';
|
|
4
4
|
import styled from "styled-components";
|
|
5
|
-
import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo, DateDisplayTypes, TASK_MORE_INFO_PREFIX_NAME, IconSignaturePencil, isSign4TopEnabled } from "../../../helper";
|
|
5
|
+
import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo, DateDisplayTypes, TASK_MORE_INFO_PREFIX_NAME, IconSignaturePencil, isSign4TopEnabled, IconCheck, IconCloseCircle, IconStop } from "../../../helper";
|
|
6
6
|
import { TMColors } from "../../../utils/theme";
|
|
7
7
|
import TMButton from "../../base/TMButton";
|
|
8
8
|
import { DeviceType } from "../../base/TMDeviceProvider";
|
|
@@ -21,17 +21,15 @@ const StyledWorkFlowOperationButtonsContainer = styled.div `
|
|
|
21
21
|
gap: 10px;
|
|
22
22
|
flex-direction: column;
|
|
23
23
|
`;
|
|
24
|
-
const StyledTextArea = styled.textarea
|
|
25
|
-
maxLength: 200
|
|
26
|
-
}) `
|
|
24
|
+
const StyledTextArea = styled.textarea `
|
|
27
25
|
width: 100%;
|
|
28
26
|
height: 100%;
|
|
29
|
-
border: 1px solid ${props => props.$isValid ? '#b4b4b4' : TMColors.error};
|
|
27
|
+
border: 1px solid ${(props) => (props.$isValid ? '#b4b4b4' : TMColors.error)};
|
|
30
28
|
border-radius: 10px;
|
|
31
29
|
padding: 10px;
|
|
32
|
-
&:focus{
|
|
30
|
+
&:focus {
|
|
33
31
|
outline: none;
|
|
34
|
-
border-bottom: 4px solid ${props => props.$isValid ? TMColors.primaryColor : TMColors.error};
|
|
32
|
+
border-bottom: 4px solid ${(props) => (props.$isValid ? TMColors.primaryColor : TMColors.error)};
|
|
35
33
|
}
|
|
36
34
|
`;
|
|
37
35
|
const CharacterCounter = styled.div `
|
|
@@ -68,17 +66,12 @@ const StyledHorizontalContainer = styled.div `
|
|
|
68
66
|
export const WorkFlowOperationButtons = (props) => {
|
|
69
67
|
const { dtd = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo } = props;
|
|
70
68
|
const isMobile = deviceType === DeviceType.MOBILE;
|
|
71
|
-
//
|
|
72
|
-
const
|
|
73
|
-
useEffect(() => {
|
|
74
|
-
// Controlla se il documento ha dei widget definiti, se il documento ha il widget SIGN4_TOP abilitato, allora è un workflow di firma
|
|
69
|
+
// Calcola direttamente se è un workflow di firma per evitare flickering durante il render
|
|
70
|
+
const isSignWorkflow = useMemo(() => {
|
|
75
71
|
if (dtd && dtd.widgets && dtd.widgets.length > 0) {
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
// Se non ci sono widget o non è SIGN4_TOP, imposta il workflow di default (approvazione senza firma)
|
|
80
|
-
setIsSignWorkflow(false);
|
|
72
|
+
return isSign4TopEnabled(dtd.widgets);
|
|
81
73
|
}
|
|
74
|
+
return false;
|
|
82
75
|
}, [dtd]);
|
|
83
76
|
return (_jsx(StyledWorkFlowOperationButtonsContainer, { "$isMobile": isMobile, children: isSignWorkflow ? (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconSignaturePencil, {}), caption: SDKUI_Localizator.SignatureAndApprove, width: "160px", disabled: signApproveDisable, onClick: () => !signApproveDisable && onSignApprove?.(), onMouseDown: e => e.stopPropagation(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.info, color: "info" })] })) : (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: approveDisable, onClick: () => !approveDisable && onApprove?.(), advancedColor: "#1a9a49", color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: reassignDisable, onClick: () => !reassignDisable && onReAssign?.(), advancedColor: TMColors.tertiary, color: "tertiary" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: "info" })] })) }));
|
|
84
77
|
};
|
|
@@ -97,6 +90,7 @@ export const WorkFlowApproveRejectPopUp = ({ TID = 0, DID = 0, deviceType = Devi
|
|
|
97
90
|
for (const { TID, DID } of items) {
|
|
98
91
|
await workflowEngine.WorkItem_CompleteOrRejectAsync(TID, DID, commentValue, isReject);
|
|
99
92
|
}
|
|
93
|
+
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: isReject === 0 ? SDKUI_Localizator.WorkitemApprove : SDKUI_Localizator.WorkitemReject, message: SDKUI_Localizator.OperationSuccess, duration: 3000 });
|
|
100
94
|
}
|
|
101
95
|
catch (e) {
|
|
102
96
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -105,33 +99,42 @@ export const WorkFlowApproveRejectPopUp = ({ TID = 0, DID = 0, deviceType = Devi
|
|
|
105
99
|
onCompleted?.();
|
|
106
100
|
onClose?.();
|
|
107
101
|
TMSpinner.hide();
|
|
108
|
-
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: isReject === 0 ? SDKUI_Localizator.WorkitemApprove : SDKUI_Localizator.WorkitemReject, message: SDKUI_Localizator.OperationSuccess, duration: 3000 });
|
|
109
102
|
}
|
|
110
103
|
};
|
|
111
104
|
const workflowAction = isReject === 0 ? SDKUI_Localizator.Approve : SDKUI_Localizator.Reject;
|
|
112
105
|
const itemCount = selectedItems.length > 0 ? `(${selectedItems.length} workitem)` : '';
|
|
113
106
|
const title = `${workflowAction} ${itemCount}`;
|
|
114
|
-
return (_jsx(TMModal, { title: title, onClose: onClose, width: '600px', height: '270px', isModal: true, children: _jsxs(StyledModalBodyWrapper, { children: [_jsxs(StyledModalContentContainer, { children: [_jsxs("p", { style: { color: (isReject === 1 && disable) ? TMColors.error : 'black' }, children: [SDKUI_Localizator.CommentText, " ", isReject === 1 && disable && _jsx("span", { children: ` (${SDKUI_Localizator.RequiredField})` }), " "] }), _jsx(StyledTextArea, { "$isValid": isReject === 0 ? true : !disable, value: commentValue, onChange: (e) => setCommentValue(e.target.value) }), _jsx(CharacterCounter, { children: `${200 - commentValue.length} ${SDKUI_Localizator.CharactersRemaining}` })] }), _jsx(StyledModalFooter, { children: isReject === 0
|
|
107
|
+
return (_jsx(TMModal, { title: title, onClose: onClose, width: '600px', height: '270px', isModal: true, children: _jsxs(StyledModalBodyWrapper, { children: [_jsxs(StyledModalContentContainer, { children: [_jsxs("p", { style: { color: (isReject === 1 && disable) ? TMColors.error : 'black' }, children: [SDKUI_Localizator.CommentText, " ", isReject === 1 && disable && _jsx("span", { children: ` (${SDKUI_Localizator.RequiredField})` }), " "] }), _jsx(StyledTextArea, { maxLength: 200, "$isValid": isReject === 0 ? true : !disable, value: commentValue, onChange: (e) => setCommentValue(e.target.value) }), _jsx(CharacterCounter, { children: `${200 - commentValue.length} ${SDKUI_Localizator.CharactersRemaining}` })] }), _jsx(StyledModalFooter, { children: isReject === 0
|
|
115
108
|
? _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: false, onClick: () => completeOrRejectAsync(isReject), advancedColor: TMColors.success })
|
|
116
109
|
: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: disable, onClick: () => { !disable && completeOrRejectAsync(isReject); }, advancedColor: TMColors.error }) })] }) }));
|
|
117
110
|
};
|
|
118
|
-
export const WorkFlowReAssignPopUp = ({ DID = 0, TID = 0, deviceType = DeviceType.DESKTOP, onClose, selectedItems = [], onCompleted }) => {
|
|
111
|
+
export const WorkFlowReAssignPopUp = ({ DID = 0, TID = 0, deviceType = DeviceType.DESKTOP, onClose, selectedItems = [], onCompleted, wf, workItemDetail }) => {
|
|
119
112
|
const [commentValue, setCommentValue] = useState('');
|
|
120
113
|
const [selectedUserID, setSelectedUserID] = useState([]);
|
|
121
114
|
const [participants, setParticipants] = useState([]);
|
|
122
115
|
const disable = commentValue.length === 0 || !selectedUserID;
|
|
116
|
+
// Determina se siamo nel contesto CtrlWorkflow (quando abbiamo workItemDetail)
|
|
117
|
+
const isCtrlWorkflowContext = !!workItemDetail;
|
|
123
118
|
const reAssignWorkFlowAsync = async () => {
|
|
124
119
|
try {
|
|
125
120
|
TMSpinner.show();
|
|
126
121
|
const workflowEngine = SDK_Globals.tmSession?.NewWorkflowEngine();
|
|
127
122
|
if (!workflowEngine)
|
|
128
123
|
throw new Error("Workflow engine is not available");
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
124
|
+
if (isCtrlWorkflowContext && workItemDetail) {
|
|
125
|
+
// Contesto CtrlWorkflow: usa WFCtrl_ReassignWIAsync
|
|
126
|
+
await workflowEngine.WFCtrl_ReassignWIAsync(workItemDetail.wfid, workItemDetail.did, selectedUserID?.[0], commentValue);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// Contesto WorkItem: usa WorkItem_ReassignAsync
|
|
130
|
+
const items = selectedItems.length > 0
|
|
131
|
+
? selectedItems.map(({ TID, DID }) => ({ TID, DID }))
|
|
132
|
+
: [{ TID, DID }];
|
|
133
|
+
for (const { TID, DID } of items) {
|
|
134
|
+
await workflowEngine.WorkItem_ReassignAsync(TID, DID, selectedUserID?.[0], commentValue);
|
|
135
|
+
}
|
|
134
136
|
}
|
|
137
|
+
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: SDKUI_Localizator.WorkitemReassign, message: SDKUI_Localizator.OperationSuccess, duration: 3000 });
|
|
135
138
|
}
|
|
136
139
|
catch (e) {
|
|
137
140
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -140,11 +143,10 @@ export const WorkFlowReAssignPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
140
143
|
onCompleted?.();
|
|
141
144
|
onClose?.();
|
|
142
145
|
TMSpinner.hide();
|
|
143
|
-
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: SDKUI_Localizator.WorkitemReassign, message: SDKUI_Localizator.OperationSuccess, duration: 3000 });
|
|
144
146
|
}
|
|
145
147
|
};
|
|
146
148
|
// Determina il TID da usare
|
|
147
|
-
const tidToUse = selectedItems?.[0]?.TID ?? TID;
|
|
149
|
+
const tidToUse = workItemDetail?.tid ?? selectedItems?.[0]?.TID ?? TID;
|
|
148
150
|
useEffect(() => {
|
|
149
151
|
let isMounted = true;
|
|
150
152
|
const fetchData = async () => {
|
|
@@ -153,11 +155,11 @@ export const WorkFlowReAssignPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
153
155
|
if (!tidToUse)
|
|
154
156
|
return;
|
|
155
157
|
// Recupera info workflow
|
|
156
|
-
const
|
|
158
|
+
const workflowInfo = wf ?? await WorkflowCacheService.GetWFInfoAsync(tidToUse);
|
|
157
159
|
// Recupera tutti gli utenti
|
|
158
160
|
const allUsers = await UserListCacheService.GetAllAsync();
|
|
159
161
|
// Filtra utenti partecipanti
|
|
160
|
-
const participantIds =
|
|
162
|
+
const participantIds = workflowInfo?.participants?.map(p => p.userID);
|
|
161
163
|
const participantUsers = allUsers.filter(u => participantIds?.includes(u.id) && u.id !== SDK_Globals.tmSession?.SessionDescr?.userID);
|
|
162
164
|
if (isMounted)
|
|
163
165
|
setParticipants(participantUsers);
|
|
@@ -171,10 +173,114 @@ export const WorkFlowReAssignPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
171
173
|
};
|
|
172
174
|
fetchData();
|
|
173
175
|
return () => { isMounted = false; };
|
|
174
|
-
}, [tidToUse]);
|
|
175
|
-
|
|
176
|
+
}, [tidToUse, wf, workItemDetail]);
|
|
177
|
+
// Determina il conteggio degli item da mostrare nel titolo
|
|
178
|
+
const itemCount = workItemDetail ? 1 : selectedItems.length;
|
|
179
|
+
const titleSuffix = itemCount > 0 ? ` (${itemCount} workitem)` : '';
|
|
180
|
+
return (_jsx(TMModal, { onClose: onClose, width: '600px', height: '270px', isModal: true, title: SDKUI_Localizator.Reassign + titleSuffix, children: _jsxs(StyledModalBodyWrapper, { children: [_jsxs(StyledModalContentContainer, { children: [_jsx(TMUserChooser, { dataSource: participants, values: selectedUserID, onValueChanged: (IDs) => {
|
|
176
181
|
setSelectedUserID(IDs ?? []);
|
|
177
|
-
} }), _jsxs("p", { style: { color: commentValue.length === 0 ? TMColors.error : 'black' }, children: [SDKUI_Localizator.CommentText, " ", commentValue.length === 0 && _jsx("span", { children: ` (${SDKUI_Localizator.RequiredField})` }), " "] }), _jsx(StyledTextArea, { "$isValid": commentValue.length !== 0, value: commentValue, onChange: (e) => setCommentValue(e.target.value) }), _jsx(CharacterCounter, { children: `${200 - commentValue.length} ${SDKUI_Localizator.CharactersRemaining}` })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: disable, onClick: () => !disable && reAssignWorkFlowAsync(), advancedColor: TMColors.tertiary }) })] }) }));
|
|
182
|
+
} }), _jsxs("p", { style: { color: commentValue.length === 0 ? TMColors.error : 'black' }, children: [SDKUI_Localizator.CommentText, " ", commentValue.length === 0 && _jsx("span", { children: ` (${SDKUI_Localizator.RequiredField})` }), " "] }), _jsx(StyledTextArea, { maxLength: 200, "$isValid": commentValue.length !== 0, value: commentValue, onChange: (e) => setCommentValue(e.target.value) }), _jsx(CharacterCounter, { children: `${200 - commentValue.length} ${SDKUI_Localizator.CharactersRemaining}` })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: disable, onClick: () => !disable && reAssignWorkFlowAsync(), advancedColor: TMColors.tertiary }) })] }) }));
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Modal per forzare l'approvazione di un work item
|
|
186
|
+
*/
|
|
187
|
+
export const WorkflowForceApproveModal = ({ detail, onClose, onCompleted }) => {
|
|
188
|
+
const [commentValue, setCommentValue] = useState('');
|
|
189
|
+
const disable = commentValue.length === 0;
|
|
190
|
+
const forceApproveAsync = async () => {
|
|
191
|
+
try {
|
|
192
|
+
TMSpinner.show({ description: 'Forza approvazione in corso...' });
|
|
193
|
+
await SDK_Globals.tmSession?.NewWorkflowEngine().WFCtrl_ForceWIAsync(detail.wfid, detail.did, WFEvents.AfterBtnApprove01, commentValue);
|
|
194
|
+
ShowAlert({
|
|
195
|
+
mode: 'success',
|
|
196
|
+
position: 'TOP_RIGHT',
|
|
197
|
+
title: 'Forza completamento',
|
|
198
|
+
message: 'Work item approvato con successo',
|
|
199
|
+
duration: 3000
|
|
200
|
+
});
|
|
201
|
+
await onCompleted?.();
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
onClose?.();
|
|
208
|
+
TMSpinner.hide();
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const userName = detail.toUser?.name ?? detail.to;
|
|
212
|
+
const title = `Forza completamento - ${userName}`;
|
|
213
|
+
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 forzatura...", maxLength: 200 }), _jsxs(CharacterCounter, { children: [commentValue.length, "/200"] })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconCheck, {}), caption: "Forza approvazione", width: '180px', disabled: disable, onClick: () => !disable && forceApproveAsync(), advancedColor: TMColors.success }) })] }) }));
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* Modal per forzare il rifiuto di un work item
|
|
217
|
+
*/
|
|
218
|
+
export const WorkflowForceRejectModal = ({ detail, onClose, onCompleted }) => {
|
|
219
|
+
const [commentValue, setCommentValue] = useState('');
|
|
220
|
+
const disable = commentValue.length === 0;
|
|
221
|
+
const forceRejectAsync = async () => {
|
|
222
|
+
try {
|
|
223
|
+
TMSpinner.show({ description: 'Forza rifiuto in corso...' });
|
|
224
|
+
await SDK_Globals.tmSession?.NewWorkflowEngine().WFCtrl_ForceWIAsync(detail.wfid, detail.did, WFEvents.AfterBtnReject01, commentValue);
|
|
225
|
+
ShowAlert({
|
|
226
|
+
mode: 'success',
|
|
227
|
+
position: 'TOP_RIGHT',
|
|
228
|
+
title: 'Forza rifiuto',
|
|
229
|
+
message: 'Work item rifiutato con successo',
|
|
230
|
+
duration: 3000
|
|
231
|
+
});
|
|
232
|
+
await onCompleted?.();
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
onClose?.();
|
|
239
|
+
TMSpinner.hide();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const userName = detail.toUser?.name ?? detail.to;
|
|
243
|
+
const title = `Forza rifiuto - ${userName}`;
|
|
244
|
+
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 del rifiuto...", maxLength: 200 }), _jsxs(CharacterCounter, { children: [commentValue.length, "/200"] })] }), _jsx(StyledModalFooter, { children: _jsx(TMButton, { btnStyle: 'advanced', showTooltip: false, icon: _jsx(IconCloseCircle, {}), caption: "Forza rifiuto", width: '150px', disabled: disable, onClick: () => !disable && forceRejectAsync(), advancedColor: TMColors.error }) })] }) }));
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Modal per terminare le istanze workflow selezionate
|
|
248
|
+
*/
|
|
249
|
+
export const WorkflowEndInstanceModal = ({ selectedInstances, onClose, onCompleted }) => {
|
|
250
|
+
const [commentValue, setCommentValue] = useState('');
|
|
251
|
+
const disable = commentValue.length === 0;
|
|
252
|
+
const endInstancesAsync = async () => {
|
|
253
|
+
try {
|
|
254
|
+
TMSpinner.show({ description: 'Terminazione istanze in corso...' });
|
|
255
|
+
const workflowEngine = SDK_Globals.tmSession?.NewWorkflowEngine();
|
|
256
|
+
if (!workflowEngine)
|
|
257
|
+
throw new Error("Workflow engine non disponibile");
|
|
258
|
+
for (const instance of selectedInstances) {
|
|
259
|
+
if (instance.wfid && instance.did) {
|
|
260
|
+
await workflowEngine.WFCtrl_EndInstanceAsync(instance.wfid, instance.tid ?? 0, instance.did, commentValue);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
ShowAlert({
|
|
264
|
+
mode: 'success',
|
|
265
|
+
position: 'TOP_RIGHT',
|
|
266
|
+
title: SDKUI_Localizator.WorkflowEndInstance,
|
|
267
|
+
message: `${selectedInstances.length} ${selectedInstances.length === 1 ? 'istanza terminata' : 'istanze terminate'} con successo`,
|
|
268
|
+
duration: 3000
|
|
269
|
+
});
|
|
270
|
+
await onCompleted?.();
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
TMExceptionBoxManager.show({ exception: e });
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
onClose?.();
|
|
277
|
+
TMSpinner.hide();
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
const title = selectedInstances.length === 1
|
|
281
|
+
? `${SDKUI_Localizator.WorkflowEndInstance} (DID: ${selectedInstances[0].did})`
|
|
282
|
+
: `${SDKUI_Localizator.WorkflowEndInstance} (${selectedInstances.length} istanze)`;
|
|
283
|
+
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 }) })] }) }));
|
|
178
284
|
};
|
|
179
285
|
export const WorkFlowMoreInfoPopUp = ({ DID = 0, TID = 0, deviceType = DeviceType.DESKTOP, onClose, onCompleted }) => {
|
|
180
286
|
const [users, setUsers] = useState([]);
|
|
@@ -210,6 +316,7 @@ export const WorkFlowMoreInfoPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
210
316
|
name: `${TASK_MORE_INFO_PREFIX_NAME}${nameInput}`
|
|
211
317
|
};
|
|
212
318
|
await SDK_Globals.tmSession?.NewWorkflowEngine().WorkItem_MoreInfoAsync(TID, DID, taskWithPrefix);
|
|
319
|
+
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: SDKUI_Localizator.MoreInformation, message: SDKUI_Localizator.MoreInfoSent, duration: 3000 });
|
|
213
320
|
}
|
|
214
321
|
catch (e) {
|
|
215
322
|
TMExceptionBoxManager.show({ exception: e });
|
|
@@ -218,7 +325,6 @@ export const WorkFlowMoreInfoPopUp = ({ DID = 0, TID = 0, deviceType = DeviceTyp
|
|
|
218
325
|
onCompleted?.();
|
|
219
326
|
onClose?.();
|
|
220
327
|
TMSpinner.hide();
|
|
221
|
-
ShowAlert({ mode: 'success', position: 'TOP_RIGHT', title: SDKUI_Localizator.MoreInformation, message: SDKUI_Localizator.MoreInfoSent, duration: 3000 });
|
|
222
328
|
}
|
|
223
329
|
};
|
|
224
330
|
useEffect(() => {
|
|
@@ -6,6 +6,7 @@ interface DiagramItemComponentProps {
|
|
|
6
6
|
isSelected: boolean;
|
|
7
7
|
isCurrent: boolean;
|
|
8
8
|
readOnly: boolean;
|
|
9
|
+
allowItemClick?: boolean;
|
|
9
10
|
onClick: (id: string, event: React.MouseEvent) => void;
|
|
10
11
|
onDrag: (id: string, newX: number, newY: number) => void;
|
|
11
12
|
onDragEnd: (id: string, finalX: number, finalY: number) => void;
|
|
@@ -13,6 +14,7 @@ interface DiagramItemComponentProps {
|
|
|
13
14
|
onConnectorMouseUp: (itemId: string, connectorName: string) => void;
|
|
14
15
|
onDimensionsChange: (itemId: string, width: number, height: number) => void;
|
|
15
16
|
onDoubleClick?: (id: string) => void;
|
|
17
|
+
backgroundColor?: string;
|
|
16
18
|
}
|
|
17
19
|
declare const _default: React.NamedExoticComponent<DiagramItemComponentProps>;
|
|
18
20
|
export default _default;
|
|
@@ -38,11 +38,16 @@ const AnimatingGroup = styled.g `
|
|
|
38
38
|
`}
|
|
39
39
|
`;
|
|
40
40
|
const StyledDiagramItem = styled.g `
|
|
41
|
-
cursor: ${props =>
|
|
41
|
+
cursor: ${props => {
|
|
42
|
+
if (props.$isReadOnly && props.$allowItemClick)
|
|
43
|
+
return 'pointer';
|
|
44
|
+
if (props.$isReadOnly)
|
|
45
|
+
return 'default';
|
|
46
|
+
return props.$isDragging ? 'grabbing' : 'grab';
|
|
47
|
+
}};
|
|
42
48
|
filter: ${props => (props.$isSelected || props.$isDragging || props.$isHovered ? 'drop-shadow(2px 4px 6px rgba(0,0,0,0.4))' : 'none')};
|
|
43
49
|
|
|
44
50
|
& .item-main-shape {
|
|
45
|
-
fill: transparent;
|
|
46
51
|
stroke: ${props => {
|
|
47
52
|
if (props.$isDragging)
|
|
48
53
|
return '#ffc107';
|
|
@@ -65,6 +70,8 @@ const StyledDiagramItem = styled.g `
|
|
|
65
70
|
fill: #333;
|
|
66
71
|
text-anchor: middle;
|
|
67
72
|
user-select: none;
|
|
73
|
+
-webkit-touch-callout: none;
|
|
74
|
+
-webkit-user-select: none;
|
|
68
75
|
pointer-events: none;
|
|
69
76
|
}
|
|
70
77
|
`;
|
|
@@ -82,7 +89,7 @@ const ConnectorHitArea = styled.circle `
|
|
|
82
89
|
opacity: 0;
|
|
83
90
|
pointer-events: all;
|
|
84
91
|
`;
|
|
85
|
-
const DiagramItemComponent = ({ wf, item, isSelected, isCurrent, readOnly, onClick, onDrag, onDragEnd, onConnectorMouseDown, onConnectorMouseUp, onDimensionsChange, onDoubleClick, }) => {
|
|
92
|
+
const DiagramItemComponent = ({ wf, item, isSelected, isCurrent, readOnly, allowItemClick = false, onClick, onDrag, onDragEnd, onConnectorMouseDown, onConnectorMouseUp, onDimensionsChange, onDoubleClick, backgroundColor, }) => {
|
|
86
93
|
const diagramItemRef = useRef(null);
|
|
87
94
|
const textRef = useRef(null);
|
|
88
95
|
const [isDragging, setIsDragging] = useState(false);
|
|
@@ -207,12 +214,12 @@ const DiagramItemComponent = ({ wf, item, isSelected, isCurrent, readOnly, onCli
|
|
|
207
214
|
};
|
|
208
215
|
}, [isDragging, handleMouseMove, handleMouseUp, readOnly]);
|
|
209
216
|
const handleItemClick = useCallback((event) => {
|
|
210
|
-
if (readOnly)
|
|
217
|
+
if (readOnly && !allowItemClick)
|
|
211
218
|
return;
|
|
212
219
|
if (!isDragging) {
|
|
213
220
|
onClick(item.ID, event);
|
|
214
221
|
}
|
|
215
|
-
}, [item.ID, onClick, isDragging, readOnly]);
|
|
222
|
+
}, [item.ID, onClick, isDragging, readOnly, allowItemClick]);
|
|
216
223
|
const handleMouseEnter = useCallback(() => {
|
|
217
224
|
setIsHovered(true);
|
|
218
225
|
}, []);
|
|
@@ -257,8 +264,8 @@ const DiagramItemComponent = ({ wf, item, isSelected, isCurrent, readOnly, onCli
|
|
|
257
264
|
isTruncated = textLines[textLines.length - 1].endsWith('...');
|
|
258
265
|
}
|
|
259
266
|
}
|
|
260
|
-
return (_jsxs(_Fragment, { children: [isTruncated && _jsx("title", { children: item.ItemName }), _jsx("rect", { x: "0", y: "0", width: calculatedWidth, height: calculatedHeight, className: "item-main-shape" }), _jsx("g", { transform: `translate(${svgX}, ${svgY})`, children: _jsx(DiagramItemSvgContent, { itemType: item.Type, width: iconRenderWidth, height: iconRenderHeight, statusData: statusData }) }), textLines.length > 0 && (_jsx("text", { ref: textRef, x: calculatedWidth / 2, dominantBaseline: "central", className: "item-text", children: textLines.map((line, index) => (_jsx("tspan", { x: calculatedWidth / 2, dy: index === 0 ? PADDING_TOP + SVG_ICON_SIZE + SPACING_SVG_TEXT : FONT_SIZE + 1, children: line }, index))) })), connectors] }));
|
|
267
|
+
return (_jsxs(_Fragment, { children: [isTruncated && _jsx("title", { children: item.ItemName }), backgroundColor && (_jsx("rect", { x: "-5", y: "-5", width: calculatedWidth + 10, height: calculatedHeight + 10, rx: "12", ry: "12", fill: backgroundColor, opacity: "0.4", style: { filter: 'blur(3px)' } })), _jsx("rect", { x: "0", y: "0", width: calculatedWidth, height: calculatedHeight, className: "item-main-shape", fill: "transparent" }), _jsx("g", { transform: `translate(${svgX}, ${svgY})`, children: _jsx(DiagramItemSvgContent, { itemType: item.Type, width: iconRenderWidth, height: iconRenderHeight, statusData: statusData }) }), textLines.length > 0 && (_jsx("text", { ref: textRef, x: calculatedWidth / 2, dominantBaseline: "central", className: "item-text", children: textLines.map((line, index) => (_jsx("tspan", { x: calculatedWidth / 2, dy: index === 0 ? PADDING_TOP + SVG_ICON_SIZE + SPACING_SVG_TEXT : FONT_SIZE + 1, children: line }, index))) })), connectors] }));
|
|
261
268
|
};
|
|
262
|
-
return (_jsx(StyledDiagramItem, { ref: diagramItemRef, transform: `translate(${currentPosition.x}, ${currentPosition.y})`, "$isSelected": isSelected, "$itemType": item.Type, "$isDragging": isDragging, "$isHovered": isHovered, "$isReadOnly": readOnly, onMouseDown: handleMouseDown, onClick: handleItemClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onDoubleClick: handleDoubleClick, children: _jsx(AnimatingGroup, { "$isCurrent": isCurrent, children: renderContent() }) }));
|
|
269
|
+
return (_jsx(StyledDiagramItem, { ref: diagramItemRef, transform: `translate(${currentPosition.x}, ${currentPosition.y})`, "$isSelected": isSelected, "$itemType": item.Type, "$isDragging": isDragging, "$isHovered": isHovered, "$isReadOnly": readOnly, "$allowItemClick": allowItemClick, onMouseDown: handleMouseDown, onClick: handleItemClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onDoubleClick: handleDoubleClick, children: _jsx(AnimatingGroup, { "$isCurrent": isCurrent, children: renderContent() }) }));
|
|
263
270
|
};
|
|
264
271
|
export default React.memo(DiagramItemComponent);
|
|
@@ -409,7 +409,7 @@ const DiagramItemForm = ({ itemToEdit, wf, onClose, onApply }) => {
|
|
|
409
409
|
return qd;
|
|
410
410
|
};
|
|
411
411
|
const qdForRecipientsEditor = localItem.QD ?? newQD();
|
|
412
|
-
return (_jsxs(_Fragment, { children: [_jsx(TMLocalizedTextBox, { label: SDKUI_Localizator.Description, value: localItem.Description, value_IT: localItem.Description_IT, value_EN: localItem.Description_EN, value_FR: localItem.Description_FR, value_PT: localItem.Description_PT, value_ES: localItem.Description_ES, value_DE: localItem.Description_DE, isModifiedWhen: localItem.Description !== localItemOrig.Description, validationItems: validationItems.filter(v => v.PropertyName === DiagramItemProps.Description), onValueChanged: handleLocalizedDescriptionChange }), _jsx(TMTextBox, { label: "SetID", value: localItem.ID ?? '', readOnly: true }), _jsx(WorkitemRecipientsEditor, { tos: localItem.Tos ?? '', mTID: wf?.MTID, qd: qdForRecipientsEditor, onTosChange: handleTosChange, onQDChange: handleSetRuleQDChange }), _jsx(TMVilViewer, { vil: validationItems.filter(v => v.PropertyName === DiagramItemProps.Tos) }), _jsxs(FlexContainer, { children: [_jsx(TMDropDown, { label: SDKUI_Localizator.WorkflowRecipientSetRule, elementStyle: { width: '320px' }, dataSource: SET_RULE_DATASOURCE, value: localItem.SetRule, isModifiedWhen: localItem.SetRule !== localItemOrig.SetRule, onValueChanged: (e) => { handleSetRuleChange(e.target.value); } }), _jsx(TMCheckBox, { value: localItem.AllowZeroTos ?? 0, label: SDKUI_Localizator.WorkflowAllowZeroTos, isModifiedWhen: localItem.AllowZeroTos !== localItemOrig.AllowZeroTos, onValueChanged: handleAllowZeroTosChange })] }), localItem.Type === DiagramItemTypes.ExecTask &&
|
|
412
|
+
return (_jsxs(_Fragment, { children: [_jsx(TMLocalizedTextBox, { label: SDKUI_Localizator.Description, value: localItem.Description, value_IT: localItem.Description_IT, value_EN: localItem.Description_EN, value_FR: localItem.Description_FR, value_PT: localItem.Description_PT, value_ES: localItem.Description_ES, value_DE: localItem.Description_DE, tid: wf?.MTID, isModifiedWhen: localItem.Description !== localItemOrig.Description, validationItems: validationItems.filter(v => v.PropertyName === DiagramItemProps.Description), onValueChanged: handleLocalizedDescriptionChange }), _jsx(TMTextBox, { label: "SetID", value: localItem.ID ?? '', readOnly: true }), _jsx(WorkitemRecipientsEditor, { tos: localItem.Tos ?? '', mTID: wf?.MTID, qd: qdForRecipientsEditor, onTosChange: handleTosChange, onQDChange: handleSetRuleQDChange }), _jsx(TMVilViewer, { vil: validationItems.filter(v => v.PropertyName === DiagramItemProps.Tos) }), _jsxs(FlexContainer, { children: [_jsx(TMDropDown, { label: SDKUI_Localizator.WorkflowRecipientSetRule, elementStyle: { width: '320px' }, dataSource: SET_RULE_DATASOURCE, value: localItem.SetRule, isModifiedWhen: localItem.SetRule !== localItemOrig.SetRule, onValueChanged: (e) => { handleSetRuleChange(e.target.value); } }), _jsx(TMCheckBox, { value: localItem.AllowZeroTos ?? 0, label: SDKUI_Localizator.WorkflowAllowZeroTos, isModifiedWhen: localItem.AllowZeroTos !== localItemOrig.AllowZeroTos, onValueChanged: handleAllowZeroTosChange })] }), localItem.Type === DiagramItemTypes.ExecTask &&
|
|
413
413
|
_jsxs(BoxContainer, { children: [_jsx(HeaderContainer, { children: _jsx("span", { children: SDKUI_Localizator.Application }) }), renderAppFields()] })] }));
|
|
414
414
|
};
|
|
415
415
|
// Function to render UpdateDcmt-specific fields
|
|
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useState } from 'react';
|
|
|
3
3
|
import styled from 'styled-components';
|
|
4
4
|
import TMButton from '../../../base/TMButton';
|
|
5
5
|
import { IconAdd, IconDelete, SDKUI_Localizator } from '../../../../helper';
|
|
6
|
-
import { TMUserChooserForm
|
|
6
|
+
import { TMUserChooserForm } from '../../../choosers/TMUserChooser';
|
|
7
7
|
import { TMGroupChooserForm, TMGroupIdViewer } from '../../../choosers/TMGroupChooser';
|
|
8
8
|
import { TMMidViewer } from '../../../viewers/TMMidViewer';
|
|
9
9
|
import { SDK_Globals, SDK_Localizator } from '@topconsultnpm/sdk-ts';
|
|
@@ -13,6 +13,7 @@ import { TMMessageBoxManager, ButtonNames } from '../../../base/TMPopUp';
|
|
|
13
13
|
import TMModal from '../../../base/TMModal';
|
|
14
14
|
import { TMMetadataChooserForm } from '../../../choosers/TMMetadataChooser';
|
|
15
15
|
import TMQueryEditor from '../../../query/TMQueryEditor';
|
|
16
|
+
import TMDataUserIdItemViewer from '../../../viewers/TMDataUserIdItemViewer';
|
|
16
17
|
export var WorkItemActorTypes;
|
|
17
18
|
(function (WorkItemActorTypes) {
|
|
18
19
|
WorkItemActorTypes[WorkItemActorTypes["None"] = 0] = "None";
|
|
@@ -168,7 +169,7 @@ const RecipientList = ({ recipients, title, tid, qd, onAdd, onRemove, onQDChange
|
|
|
168
169
|
const actorId = parseInt(recipient.ActorID, 10);
|
|
169
170
|
switch (recipient.ActorType) {
|
|
170
171
|
case WorkItemActorTypes.UID:
|
|
171
|
-
return _jsx(
|
|
172
|
+
return _jsx(TMDataUserIdItemViewer, { userId: actorId, showIcon: true });
|
|
172
173
|
case WorkItemActorTypes.GID:
|
|
173
174
|
return _jsx(TMGroupIdViewer, { groupID: actorId, showIcon: true });
|
|
174
175
|
case WorkItemActorTypes.MID:
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { IWorkItemData } from '../../../../ts/types';
|
|
2
3
|
interface IWFDiagramProps {
|
|
3
4
|
xmlDiagramString: string;
|
|
4
5
|
currentSetID?: string;
|
|
5
6
|
allowEdit?: boolean;
|
|
6
7
|
onDiagramChange?: (newXmlDiagram: string) => void;
|
|
8
|
+
workitems?: IWorkItemData[];
|
|
9
|
+
defaultAutoZoom?: boolean;
|
|
10
|
+
onDiagramItemClick?: (itemId: string, event: React.MouseEvent) => void;
|
|
7
11
|
}
|
|
8
12
|
declare const WFDiagram: React.FC<IWFDiagramProps>;
|
|
9
13
|
export default WFDiagram;
|