@topconsultnpm/sdkui-react 6.20.0-dev2.45 → 6.20.0-dev2.47
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/editors/TMTextBox.js +8 -9
- package/lib/components/features/documents/TMDcmtForm.js +33 -27
- package/lib/components/features/tasks/TMTaskForm.js +35 -182
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +86 -0
- package/lib/components/features/tasks/TMTaskFormUtils.js +432 -0
- package/lib/components/features/tasks/TMTasksUtils.js +1 -0
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +0 -7
- package/lib/components/features/tasks/TMTasksUtilsView.js +1 -12
- package/lib/components/features/tasks/TMTasksView.js +2 -2
- package/lib/components/forms/TMSaveForm.js +61 -13
- package/lib/components/grids/TMBlogsPost.js +2 -2
- package/lib/helper/SDKUI_Localizator.d.ts +4 -2
- package/lib/helper/SDKUI_Localizator.js +32 -12
- package/lib/helper/helpers.d.ts +6 -2
- package/lib/helper/helpers.js +22 -8
- package/package.json +1 -1
|
@@ -81,15 +81,14 @@ const TMTextBox = ({ autoFocus, maxLength, labelColor, precision, fromModal = fa
|
|
|
81
81
|
}, [maxValue, minValue, currentValue, currentType]);
|
|
82
82
|
// Handle autofocus behavior on mount
|
|
83
83
|
useEffect(() => {
|
|
84
|
-
if (autoFocus
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}, [autoFocus]); // This effect runs when the autoFocus prop changes
|
|
84
|
+
if (!autoFocus || !inputRef.current)
|
|
85
|
+
return;
|
|
86
|
+
const delay = fromModal ? 100 : 50;
|
|
87
|
+
const timeoutId = setTimeout(() => {
|
|
88
|
+
inputRef.current?.focus();
|
|
89
|
+
}, delay);
|
|
90
|
+
return () => clearTimeout(timeoutId);
|
|
91
|
+
}, [autoFocus, fromModal]); // This effect runs when the autoFocus or fromModal prop changes
|
|
93
92
|
useEffect(() => {
|
|
94
93
|
if (formulaItems && formulaItems.length > 0) {
|
|
95
94
|
let menuItems = [];
|
|
@@ -8,7 +8,7 @@ import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
|
8
8
|
import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
|
|
9
9
|
import { useRelatedDocuments } from '../../../hooks/useRelatedDocuments';
|
|
10
10
|
import { getWorkItemSetIDAsync, handleArchiveVisibility, searchResultToMetadataValues } from '../../../helper/queryHelper';
|
|
11
|
-
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare, IconCheck, IconActivity, TMImageLibrary, IconStar, IconRelation, IconInfo, IconArchiveDoc, IconDelete, IconPair, IconUnpair, IconArchiveMaster, IconArchiveDetail, getExceptionMessage, isApprovalWorkflowView, getDcmtCicoStatus, IconFileDots, IconCustom, buildWorkItemsFromWFCtrl, IconLock, getDcmtFormToolbarVisibility, TASK_MORE_INFO_PREFIX_NAME,
|
|
11
|
+
import { genUniqueId, IconShow, SDKUI_Localizator, updateMruTids, IconBoard, IconDcmtTypeSys, IconDetailDcmts, IconDownload, calcIsModified, IconMenuVertical, Globalization, getListMaxItems, getSystemMetadata, IconBoxArchiveIn, IconClear, IconUndo, SDKUI_Globals, IconPreview, isTaskMoreInfo, IconWorkflow, IconSearch, deepCompare, IconCheck, IconActivity, TMImageLibrary, IconStar, IconRelation, IconInfo, IconArchiveDoc, IconDelete, IconPair, IconUnpair, IconArchiveMaster, IconArchiveDetail, getExceptionMessage, isApprovalWorkflowView, getDcmtCicoStatus, IconFileDots, IconCustom, buildWorkItemsFromWFCtrl, IconLock, getDcmtFormToolbarVisibility, TASK_MORE_INFO_PREFIX_NAME, taskModalSizes } from '../../../helper';
|
|
12
12
|
import { hasDetailRelations, hasMasterRelations, isXMLFileExt } from '../../../helper/dcmtsHelper';
|
|
13
13
|
import { Gutters, TMColors } from '../../../utils/theme';
|
|
14
14
|
import { ReferencesContainer, StyledFormButtonsContainer, StyledLoadingContainer, StyledModalContainer, StyledReferenceButton, StyledSpinner, StyledToolbarCardContainer } from '../../base/Styled';
|
|
@@ -87,6 +87,8 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
87
87
|
const [showRejectPopup, setShowRejectPopup] = useState(false);
|
|
88
88
|
const [showReAssignPopup, setShowReAssignPopup] = useState(false);
|
|
89
89
|
const [showMoreInfoPopup, setShowMoreInfoPopup] = useState(false);
|
|
90
|
+
const [showMoreInfoTaskPopup, setShowMoreInfoTaskPopup] = useState(false);
|
|
91
|
+
const [showMoreInfoTaskTask, setShowMoreInfoTaskTask] = useState(undefined);
|
|
90
92
|
const [layout, setLayout] = useState();
|
|
91
93
|
const [customButtonsLayout, setCustomButtonsLayout] = useState();
|
|
92
94
|
const [customButton, setCustomButton] = useState();
|
|
@@ -1589,6 +1591,17 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1589
1591
|
[ObjectClasses.WorkingGroup]: { label: SDKUI_Localizator.GoToWorkgroup },
|
|
1590
1592
|
// add other ObjectClasses here as needed
|
|
1591
1593
|
}), []);
|
|
1594
|
+
const onSavedTaskFormCallback = (task) => {
|
|
1595
|
+
if (task && showMoreInfoTaskTask && editTaskCallback) {
|
|
1596
|
+
editTaskCallback(task);
|
|
1597
|
+
setShowMoreInfoTaskPopup(false);
|
|
1598
|
+
setShowMoreInfoTaskTask(undefined);
|
|
1599
|
+
ShowAlert({ message: SDKUI_Localizator.TaskSavedSuccessfully.replaceParams(task.name ?? '-'), mode: 'success', title: SDKUI_Localizator.Widget_Activities, duration: 3000 });
|
|
1600
|
+
}
|
|
1601
|
+
else {
|
|
1602
|
+
ShowAlert({ message: SDKUI_Localizator.TaskSaveError, mode: 'error', title: SDKUI_Localizator.Widget_Activities, duration: 3000 });
|
|
1603
|
+
}
|
|
1604
|
+
};
|
|
1592
1605
|
const renderDcmtForm = () => {
|
|
1593
1606
|
// Show flat spinner during initial load (before component is mounted)
|
|
1594
1607
|
if (isInitialLoading) {
|
|
@@ -1619,14 +1632,14 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1619
1632
|
isEditable: true,
|
|
1620
1633
|
value: FormulaHelper.addFormulaTag(newFormula.expression)
|
|
1621
1634
|
}));
|
|
1622
|
-
} }), 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,
|
|
1635
|
+
} }), 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) &&
|
|
1623
1636
|
_jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: TID, did: DID } }, onClose: () => setShowCommentForm(false), refreshCallback: handleCompleteMoreInfo, participants: [], showAttachmentsSection: false, allArchivedDocumentsFileItems: [] }), isOpenDetails &&
|
|
1624
1637
|
_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 &&
|
|
1625
1638
|
_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) => {
|
|
1626
1639
|
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}`));
|
|
1627
1640
|
})] }), taskFormDialogComponent, s4TViewerDialogComponent] }));
|
|
1628
1641
|
};
|
|
1629
|
-
return (_jsxs(
|
|
1642
|
+
return (_jsxs("div", { style: { width: '100%', height: '100%' }, children: [(isModal && onClose)
|
|
1630
1643
|
? _jsx(TMModal, { title: titleModal, onClose: handleClose, width: widthModal ?? '100%', height: heightModal ?? '100%', hidePopup: false, askClosingConfirm: true, children: _jsx("div", { style: { width: "100%", height: "100%", display: 'block', padding: "4px", position: 'relative' }, children: renderDcmtForm() }) })
|
|
1631
1644
|
: renderDcmtForm(), showRelatedDcmtsChooser && (_jsx(TMChooserForm, { dataSource: relatedDcmtsChooserDataSource, onChoose: async (selectedRelation) => {
|
|
1632
1645
|
try {
|
|
@@ -1670,7 +1683,7 @@ const TMDcmtForm = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTa
|
|
|
1670
1683
|
setArchiveRelatedDcmtFormTID(undefined);
|
|
1671
1684
|
setArchiveRelatedDcmtFormMids([]);
|
|
1672
1685
|
await fetchData();
|
|
1673
|
-
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference })), showPairDcmtsModal && (_jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshSearchAsync: async () => await fetchData(), onTaskCreateRequest: onTaskCreateRequest, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, toppyHelpCenterUsePortal: true }) }))] }));
|
|
1686
|
+
}, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, onReferenceClick: handleNavigateToReference })), showPairDcmtsModal && (_jsx(TMModal, { title: (isPairingManyToMany ? "Abbina" : "Disabbina") + " documenti", onClose: () => setShowPairDcmtsModal(false), width: isMobile ? '90%' : '50%', height: isMobile ? '90%' : '70%', children: _jsx(TMSearchResult, { searchResults: pairedSearchResults, onRefreshSearchAsync: async () => await fetchData(), onTaskCreateRequest: onTaskCreateRequest, allowFloatingBar: false, floatingActionConfig: pairFloatingActionConfig, showBackButton: false, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, toppyHelpCenterUsePortal: true }) })), (showMoreInfoTaskPopup && showMoreInfoTaskTask && showMoreInfoTaskTask.id && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) && _jsx(TMTaskForm, { id: Number(showMoreInfoTaskTask.id), title: showMoreInfoTaskTask.name ?? 'N/A', formMode: FormModes.Update, onSaved: onSavedTaskFormCallback, editTaskCallback: editTaskCallback, onClose: () => { setShowMoreInfoTaskPopup(false); setShowMoreInfoTaskTask(undefined); }, onCancel: () => { setShowMoreInfoTaskPopup(false); setShowMoreInfoTaskTask(undefined); }, isModal: true, showBackButton: false, hasNavigation: false, width: taskModalSizes(deviceType, FormModes.Update).width, height: taskModalSizes(deviceType, FormModes.Update).height, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, visualizedTasks: [], currentTask: null, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback })] }));
|
|
1674
1687
|
};
|
|
1675
1688
|
export default TMDcmtForm;
|
|
1676
1689
|
/**
|
|
@@ -1784,7 +1797,7 @@ const Ribbon = styled.div `
|
|
|
1784
1797
|
`}
|
|
1785
1798
|
`;
|
|
1786
1799
|
const TaskLink = (props) => {
|
|
1787
|
-
const {
|
|
1800
|
+
const { messagePrefix, name, taskNameTrunc, description, currentTask, setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask } = props;
|
|
1788
1801
|
const mouseMoved = useRef(false);
|
|
1789
1802
|
const handleMouseDown = () => {
|
|
1790
1803
|
mouseMoved.current = false;
|
|
@@ -1792,28 +1805,21 @@ const TaskLink = (props) => {
|
|
|
1792
1805
|
const handleMouseMove = () => {
|
|
1793
1806
|
mouseMoved.current = true;
|
|
1794
1807
|
};
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
return (_jsxs(_Fragment, { children: [_jsx("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' }, children: _jsxs("div", { onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, style: { display: 'inline' }, children: [messagePrefix, ' "', _jsx("span", { style: {
|
|
1808
|
-
cursor: 'pointer',
|
|
1809
|
-
fontWeight: 500,
|
|
1810
|
-
textDecoration: 'none',
|
|
1811
|
-
transition: 'text-decoration 0.2s',
|
|
1812
|
-
}, onClick: () => setShowTaskForm(true), onMouseEnter: e => e.currentTarget.style.textDecoration = 'underline', onMouseLeave: e => e.currentTarget.style.textDecoration = 'none', children: taskNameTrunc }), '" ', _jsx(TMTooltip, { parentStyle: { display: 'inline' }, childStyle: { display: 'inline' }, content: _jsxs("div", { style: { whiteSpace: 'pre-line', textAlign: 'left' }, children: [_jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Name }), ": ", name] }), _jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Description }), ": ", description] })] }), children: _jsx("i", { className: "dx-icon dx-icon-info", style: { fontSize: '16px', lineHeight: 1, cursor: 'pointer' }, onClick: () => setShowTaskForm(true) }) })] }) }), (showTaskForm && taskId && handleNavigateToWGs && handleNavigateToDossiers && getAllTasks && deleteTaskByIdsCallback && addTaskCallback && editTaskCallback) &&
|
|
1813
|
-
_jsx("div", { style: { position: 'fixed', inset: 0, pointerEvents: 'none' }, children: _jsx(TMTaskForm, { id: Number(taskId), title: name, formMode: FormModes.Update, onSaved: onSavedTaskFormCallback, editTaskCallback: editTaskCallback, onClose: () => { setShowTaskForm(false); }, onCancel: () => setShowTaskForm(false), isModal: true, showBackButton: false, hasNavigation: false, width: calcResponsiveSizes(deviceType, '670px', '670px', '95%'), height: calcResponsiveSizes(deviceType, '670px', '670px', '95%'), handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, visualizedTasks: [], currentTask: null, setCurrentTask: () => { }, selectedRowKeys: [], handleFocusedRowKeyChange: () => { }, onStatusChanged: () => { }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback }) })] }));
|
|
1808
|
+
return (_jsx(_Fragment, { children: _jsx("div", { style: { display: 'inline-flex', alignItems: 'center', gap: '4px' }, children: _jsxs("div", { onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, style: { display: 'inline' }, children: [messagePrefix, ' "', _jsx("span", { style: {
|
|
1809
|
+
cursor: 'pointer',
|
|
1810
|
+
fontWeight: 500,
|
|
1811
|
+
textDecoration: 'none',
|
|
1812
|
+
transition: 'text-decoration 0.2s',
|
|
1813
|
+
}, onClick: () => {
|
|
1814
|
+
setShowMoreInfoTaskPopup(true);
|
|
1815
|
+
setShowMoreInfoTaskTask(currentTask);
|
|
1816
|
+
}, onMouseEnter: e => e.currentTarget.style.textDecoration = 'underline', onMouseLeave: e => e.currentTarget.style.textDecoration = 'none', children: taskNameTrunc }), '" ', _jsx(TMTooltip, { parentStyle: { display: 'inline' }, childStyle: { display: 'inline' }, content: _jsxs("div", { style: { whiteSpace: 'pre-line', textAlign: 'left' }, children: [_jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Name }), ": ", name] }), _jsxs("div", { children: [_jsx("b", { children: SDKUI_Localizator.Description }), ": ", description] })] }), children: _jsx("i", { className: "dx-icon dx-icon-info", onClick: () => {
|
|
1817
|
+
setShowMoreInfoTaskPopup(true);
|
|
1818
|
+
setShowMoreInfoTaskTask(currentTask);
|
|
1819
|
+
}, style: { fontSize: '16px', lineHeight: 1, cursor: 'pointer' } }) })] }) }) }));
|
|
1814
1820
|
};
|
|
1815
1821
|
const TMDcmtFormActionButtons = (props) => {
|
|
1816
|
-
const { showToppyForApprove, workItems, deviceType, isMobile, handleSignApprove, setShowApprovePopup, setShowRejectPopup, setShowReAssignPopup, setShowMoreInfoPopup, fromDTD, showToppyForCompleteMoreInfo, moreInfoTasks, setShowCommentForm, showToppyForReferences, dcmtReferences, referenceActionMap, handleNavigateToReference,
|
|
1822
|
+
const { showToppyForApprove, workItems, deviceType, isMobile, handleSignApprove, setShowApprovePopup, setShowRejectPopup, setShowReAssignPopup, setShowMoreInfoPopup, fromDTD, showToppyForCompleteMoreInfo, moreInfoTasks, setShowCommentForm, showToppyForReferences, dcmtReferences, referenceActionMap, handleNavigateToReference, setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask } = props;
|
|
1817
1823
|
const tasksNumber = useMemo(() => moreInfoTasks?.length ?? 0, [moreInfoTasks]);
|
|
1818
1824
|
const currentTask = useMemo(() => {
|
|
1819
1825
|
if (!moreInfoTasks || moreInfoTasks.length === 0)
|
|
@@ -1859,12 +1865,12 @@ const TMDcmtFormActionButtons = (props) => {
|
|
|
1859
1865
|
const senderNameTruncated = currentTask?.fromName ? truncate(currentTask.fromName, 30) : 'N/A';
|
|
1860
1866
|
const recipientNameTruncated = currentTask?.toName ? truncate(currentTask.toName, 30) : 'N/A';
|
|
1861
1867
|
const taskNameTrunc = currentTask?.name ? truncate(currentTask.name.replace(TASK_MORE_INFO_PREFIX_NAME ?? '', ''), 30) : 'N/A';
|
|
1862
|
-
return (_jsxs(_Fragment, { children: [(isSender && !isRecipient) && (_jsx(TaskLink, {
|
|
1868
|
+
return (_jsxs(_Fragment, { children: [(isSender && !isRecipient) && (_jsx(TaskLink, { messagePrefix: `Hai richiesto maggiori informazioni a "${recipientNameTruncated}" tramite l'attività`, name: currentTask.name ?? 'N/A', taskNameTrunc: taskNameTrunc ?? 'N/A', description: currentTask.description ?? 'N/A', currentTask: currentTask, setShowMoreInfoTaskPopup: setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask: setShowMoreInfoTaskTask })), (isRecipient && !isSender) && (_jsxs("div", { style: {
|
|
1863
1869
|
display: 'flex',
|
|
1864
1870
|
flexDirection: 'column',
|
|
1865
1871
|
alignItems: 'center',
|
|
1866
1872
|
gap: '10px'
|
|
1867
|
-
}, children: [_jsx(TaskLink, {
|
|
1873
|
+
}, children: [_jsx(TaskLink, { messagePrefix: `"${senderNameTruncated}" ti ha richiesto maggiori informazioni tramite l'attività`, name: currentTask.name ?? 'N/A', taskNameTrunc: taskNameTrunc ?? 'N/A', description: currentTask.description ?? 'N/A', currentTask: currentTask, setShowMoreInfoTaskPopup: setShowMoreInfoTaskPopup, setShowMoreInfoTaskTask: setShowMoreInfoTaskTask }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx("span", { className: "dx-icon-chat" }), caption: SDKUI_Localizator.CommentAndComplete, width: "180px", disabled: false, onClick: () => setShowCommentForm(true), onMouseDown: e => e.stopPropagation(), advancedColor: TMColors.success, color: "success" })] }))] }));
|
|
1868
1874
|
})() }) })) : (_jsx("div", { style: {
|
|
1869
1875
|
padding: '10px',
|
|
1870
1876
|
color: '#FFFFFF',
|
|
@@ -1,64 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { ObjectClasses, TaskDescriptor,
|
|
4
|
-
import {
|
|
3
|
+
import { ObjectClasses, TaskDescriptor, PdGs, UserListCacheService, SDK_Localizator } from '@topconsultnpm/sdk-ts';
|
|
4
|
+
import { gotoPDGExtendedLabel, taskValidatorAsync } from './TMTasksUtils';
|
|
5
5
|
import ScrollView from 'devextreme-react/scroll-view';
|
|
6
6
|
import TMLayoutContainer from '../../base/TMLayout';
|
|
7
7
|
import { FormModes } from '../../../ts';
|
|
8
8
|
import { useWorkflowApprove } from '../../../hooks/useWorkflowApprove';
|
|
9
9
|
import { SaveFormOptions, useSaveForm } from '../../../hooks/useForm';
|
|
10
|
-
import { SDKUI_Localizator, calcIsModified,
|
|
10
|
+
import { SDKUI_Localizator, calcIsModified, getMoreInfoTasksForDocument } from '../../../helper';
|
|
11
11
|
import { TMExceptionBoxManager } from '../../base/TMPopUp';
|
|
12
12
|
import TMSpinner from '../../base/TMSpinner';
|
|
13
|
-
import TMTooltip from '../../base/TMTooltip';
|
|
14
|
-
import TMUserChooser from '../../choosers/TMUserChooser';
|
|
15
|
-
import TMDateBox from '../../editors/TMDateBox';
|
|
16
|
-
import TMDropDown from '../../editors/TMDropDown';
|
|
17
|
-
import TMTextArea from '../../editors/TMTextArea';
|
|
18
|
-
import TMTextBox from '../../editors/TMTextBox';
|
|
19
13
|
import TMSaveForm from '../../forms/TMSaveForm';
|
|
20
14
|
import TMDcmtForm from '../documents/TMDcmtForm';
|
|
21
|
-
import styled from 'styled-components';
|
|
22
|
-
import { TMColors } from '../../../utils/theme';
|
|
23
|
-
import { renderContextBlock } from './TMTasksUtilsView';
|
|
24
15
|
import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
25
|
-
|
|
26
|
-
position: relative;
|
|
27
|
-
width: 100%;
|
|
28
|
-
`;
|
|
29
|
-
const ResponseCommentLabel = styled.label `
|
|
30
|
-
position: absolute;
|
|
31
|
-
top: -8px;
|
|
32
|
-
left: 12px;
|
|
33
|
-
background-color: white;
|
|
34
|
-
padding: 0 4px;
|
|
35
|
-
font-size: 0.9rem;
|
|
36
|
-
color: rgb(80,80,80);
|
|
37
|
-
display: inline-flex;
|
|
38
|
-
align-items: center;
|
|
39
|
-
gap: 4px;
|
|
40
|
-
`;
|
|
41
|
-
const ResponseCommentTextArea = styled.textarea.attrs({
|
|
42
|
-
maxLength: 500,
|
|
43
|
-
}) `
|
|
44
|
-
width: 100%;
|
|
45
|
-
height: 100px;
|
|
46
|
-
border: 1px solid ${props => props.$isValid ? (props.$isModifiedWhen ? "#E29000" : '#b4b4b4') : TMColors.error};
|
|
47
|
-
border-radius: 10px;
|
|
48
|
-
padding: 10px;
|
|
49
|
-
resize: none;
|
|
50
|
-
cursor: ${props => props.disabled ? 'not-allowed' : 'text'};
|
|
51
|
-
&:focus {
|
|
52
|
-
outline: none;
|
|
53
|
-
border-bottom: 4px solid ${props => props.$isValid ? TMColors.primaryColor : TMColors.error};
|
|
54
|
-
}
|
|
55
|
-
`;
|
|
56
|
-
const ResponseCommentCharacterCounter = styled.div `
|
|
57
|
-
text-align: right;
|
|
58
|
-
font-size: 0.8rem;
|
|
59
|
-
color: #6c757d;
|
|
60
|
-
margin-top: 4px;
|
|
61
|
-
`;
|
|
16
|
+
import { getCurrentUserTaskRole, RenderDescriptionField, RenderEndDateField, RenderNameField, RenderPriorityField, RenderRemindDateField, RenderStartDateField, RenderTaskFormStateField, TaskAssigneeField, TaskFormAssignmentNoticeBadge, TaskFormContextualAttachments, TaskFormResponseComment, TaskPdgOriginNavigator, TMChangeStateForm } from './TMTaskFormUtils';
|
|
62
17
|
const TMTaskForm = (props) => {
|
|
63
18
|
// Custom hook to manage workflow approval data
|
|
64
19
|
const { refreshWorkflowApprove } = useWorkflowApprove();
|
|
@@ -109,10 +64,9 @@ const TMTaskForm = (props) => {
|
|
|
109
64
|
// Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
|
|
110
65
|
const deviceType = useDeviceType();
|
|
111
66
|
// This avoids unnecessary re-renders by only recalculating when deviceType changes.
|
|
112
|
-
let
|
|
113
|
-
const [isMobile, setIsMobile] = useState(false);
|
|
67
|
+
let isMobile = useMemo(() => { return deviceType === DeviceType.MOBILE; }, [deviceType]);
|
|
114
68
|
const [showDcmtForm, setShowDcmtForm] = useState(false);
|
|
115
|
-
const
|
|
69
|
+
const [showChangeStateForm, setShowChangeStateForm] = useState(false);
|
|
116
70
|
const [users, setUsers] = useState([]); // State to store the users
|
|
117
71
|
// Initial state for the fields' editability (readonly)
|
|
118
72
|
const [fieldsReadOnly, setFieldsReadOnly] = useState({
|
|
@@ -144,22 +98,18 @@ const TMTaskForm = (props) => {
|
|
|
144
98
|
};
|
|
145
99
|
fetchUsers();
|
|
146
100
|
}, []);
|
|
147
|
-
useEffect(() => {
|
|
148
|
-
if (isModal)
|
|
149
|
-
setIsMobile(true);
|
|
150
|
-
}, [isModal]);
|
|
151
101
|
useEffect(() => {
|
|
152
102
|
if (formDataOrig && formMode === FormModes.Update) {
|
|
153
|
-
const
|
|
103
|
+
const taskRole = getCurrentUserTaskRole(formDataOrig);
|
|
154
104
|
setFieldsReadOnly({
|
|
155
|
-
name:
|
|
156
|
-
description:
|
|
157
|
-
fromID:
|
|
158
|
-
assignedTO:
|
|
105
|
+
name: taskRole === 'receiver',
|
|
106
|
+
description: taskRole === 'receiver',
|
|
107
|
+
fromID: taskRole === 'receiver',
|
|
108
|
+
assignedTO: taskRole === 'receiver',
|
|
159
109
|
status: false,
|
|
160
|
-
priority:
|
|
161
|
-
startDate:
|
|
162
|
-
endDate:
|
|
110
|
+
priority: taskRole === 'receiver',
|
|
111
|
+
startDate: taskRole === 'receiver',
|
|
112
|
+
endDate: taskRole === 'receiver',
|
|
163
113
|
remTime: false,
|
|
164
114
|
response: false
|
|
165
115
|
});
|
|
@@ -183,44 +133,12 @@ const TMTaskForm = (props) => {
|
|
|
183
133
|
});
|
|
184
134
|
}
|
|
185
135
|
}, [formDataOrig, formMode]);
|
|
186
|
-
useEffect(() => {
|
|
187
|
-
if (!isModal) {
|
|
188
|
-
// Function to handle resize events and update the mobile state based on container width.
|
|
189
|
-
const updateDimensions = (entries) => {
|
|
190
|
-
for (let entry of entries) {
|
|
191
|
-
const { width } = entry.contentRect;
|
|
192
|
-
setIsMobile(width <= mobileBreakpoint);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
// Create a ResizeObserver to observe container size changes
|
|
196
|
-
const resizeObserver = new ResizeObserver(updateDimensions);
|
|
197
|
-
if (containerRef.current) {
|
|
198
|
-
resizeObserver.observe(containerRef.current);
|
|
199
|
-
}
|
|
200
|
-
// Cleanup: Stop observing when the component unmounts or the dependency changes.
|
|
201
|
-
return () => {
|
|
202
|
-
if (containerRef.current) {
|
|
203
|
-
resizeObserver.unobserve(containerRef.current);
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
return undefined;
|
|
208
|
-
}, [containerRef, isModal]); // Dependency array ensures this effect runs when containerRef changes.
|
|
209
|
-
// Function to handle changes in the status value of a TM Drop Down
|
|
210
|
-
const onStatusValueChange = (e) => {
|
|
211
|
-
if (!e?.target?.value)
|
|
212
|
-
return;
|
|
213
|
-
setFormData({ ...formData ?? {}, state: e?.target?.value });
|
|
214
|
-
};
|
|
215
136
|
// Function to handle changes in the priority value of a TM Drop Down
|
|
216
137
|
const onPriorityValueChange = (e) => {
|
|
217
138
|
if (!e?.target?.value)
|
|
218
139
|
return;
|
|
219
140
|
setFormData({ ...formData ?? {}, priority: e?.target?.value });
|
|
220
141
|
};
|
|
221
|
-
const onAnswerChange = (e) => {
|
|
222
|
-
setFormData({ ...formData ?? {}, response: e.target.value ?? '' });
|
|
223
|
-
};
|
|
224
142
|
// Function to handle the undo action
|
|
225
143
|
const onUndoCallback = () => {
|
|
226
144
|
setFormData(formDataOrig);
|
|
@@ -330,6 +248,9 @@ const TMTaskForm = (props) => {
|
|
|
330
248
|
await editTaskCallback(task);
|
|
331
249
|
onClose?.();
|
|
332
250
|
};
|
|
251
|
+
const handleShowChangeStateForm = (value) => {
|
|
252
|
+
setShowChangeStateForm(value);
|
|
253
|
+
};
|
|
333
254
|
const handleNavigateToReference = (ref) => {
|
|
334
255
|
switch (ref.objClass) {
|
|
335
256
|
case ObjectClasses.Dossier:
|
|
@@ -349,94 +270,26 @@ const TMTaskForm = (props) => {
|
|
|
349
270
|
console.warn(`Unhandled object type: ${ref.objClass}`);
|
|
350
271
|
}
|
|
351
272
|
};
|
|
352
|
-
return (_jsx("div", { style: { width: "100%", height: "100%", overflow: "auto" }, ref: containerRef, children:
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
condition: formMode === FormModes.Create && isContextualCreate && !!taskContext?.workingGroup?.id,
|
|
358
|
-
pdg: PdGs.WG,
|
|
359
|
-
label: getOriginLabel(PdGs.WG, taskContext?.workingGroup?.name),
|
|
360
|
-
isMobile: isMobile
|
|
361
|
-
}), renderContextBlock({
|
|
362
|
-
condition: formMode === FormModes.Create && isContextualCreate && !!taskContext?.dossier?.id,
|
|
363
|
-
pdg: PdGs.CF,
|
|
364
|
-
label: getOriginLabel(PdGs.CF, taskContext?.dossier?.name),
|
|
365
|
-
isMobile: isMobile
|
|
366
|
-
}), renderContextBlock({
|
|
367
|
-
condition: formMode === FormModes.Create && isContextualCreate && !!taskContext?.document?.tid && !!taskContext?.document?.did,
|
|
368
|
-
pdg: PdGs.DT,
|
|
369
|
-
label: getOriginLabel(PdGs.DT, taskContext?.document?.name),
|
|
370
|
-
isMobile: isMobile
|
|
371
|
-
}), renderContextBlock({
|
|
372
|
-
condition: formMode === FormModes.Create && isContextualCreate && !!taskContext?.workItem?.tid && !!taskContext?.workItem?.did,
|
|
373
|
-
pdg: PdGs.DT,
|
|
374
|
-
label: getOriginLabel(PdGs.DT, taskContext?.workItem?.name),
|
|
375
|
-
isMobile: isMobile
|
|
376
|
-
}), formMode === FormModes.Update && formData?.pdG && formData?.iD1Name && (_jsx(TMConditionalWrapper, { condition: !isMobile, wrapper: children => (_jsx("div", { style: {
|
|
377
|
-
display: 'flex',
|
|
378
|
-
flexDirection: 'row',
|
|
379
|
-
width: '100%',
|
|
380
|
-
gap: 16,
|
|
381
|
-
padding: '8px 0'
|
|
382
|
-
}, children: children })), children: _jsx("div", { style: {
|
|
383
|
-
width: "100%",
|
|
384
|
-
display: 'flex',
|
|
385
|
-
alignItems: 'center',
|
|
386
|
-
justifyContent: 'center',
|
|
387
|
-
marginTop: 12
|
|
388
|
-
}, children: _jsxs("div", { onClick: () => formData.pdG !== PdGs.None ? gotoPDGExtendedLabelClickCallback() : null, style: {
|
|
389
|
-
backgroundColor: "#C2388B",
|
|
390
|
-
color: "#fff",
|
|
391
|
-
padding: "10px 16px",
|
|
392
|
-
borderRadius: "20px",
|
|
393
|
-
display: "flex",
|
|
394
|
-
alignItems: "center",
|
|
395
|
-
justifyContent: "space-between",
|
|
396
|
-
cursor: "pointer",
|
|
397
|
-
fontWeight: 500,
|
|
398
|
-
transition: "background-color 0.3s",
|
|
399
|
-
minWidth: "180px",
|
|
400
|
-
maxWidth: "100%",
|
|
401
|
-
flexWrap: "wrap",
|
|
402
|
-
gap: "8px",
|
|
403
|
-
}, onMouseEnter: e => {
|
|
404
|
-
if (formData.pdG !== PdGs.None)
|
|
405
|
-
e.currentTarget.style.backgroundColor = "#A12D78";
|
|
406
|
-
}, onMouseLeave: e => {
|
|
407
|
-
if (formData.pdG !== PdGs.None)
|
|
408
|
-
e.currentTarget.style.backgroundColor = "#C2388B";
|
|
409
|
-
}, children: [_jsxs("span", { style: {
|
|
410
|
-
flex: 1,
|
|
411
|
-
textAlign: "center",
|
|
412
|
-
gap: "6px",
|
|
413
|
-
display: "flex",
|
|
414
|
-
justifyContent: "center",
|
|
415
|
-
alignItems: "center",
|
|
416
|
-
}, children: [formData.pdG === PdGs.WG && _jsx("span", { children: SDKUI_Localizator.GoToWorkgroup }), formData.pdG === PdGs.CF && _jsx("span", { children: SDKUI_Localizator.GoToDossier }), formData.pdG === PdGs.DT && _jsx("span", { children: SDKUI_Localizator.GoToDocument }), (() => {
|
|
417
|
-
const originLabel = getOriginLabel(formData.pdG, formData.iD1Name);
|
|
418
|
-
if (!originLabel)
|
|
419
|
-
return null;
|
|
420
|
-
const maxLength = isMobileDevice ? 10 : 25;
|
|
421
|
-
const displayText = originLabel.length > maxLength
|
|
422
|
-
? originLabel.slice(0, maxLength) + "..."
|
|
423
|
-
: originLabel;
|
|
424
|
-
return _jsxs("span", { children: ["\u201C", displayText, "\u201D"] });
|
|
425
|
-
})()] }), _jsx(TMTooltip, { content: _jsxs("div", { style: { textAlign: "left" }, children: [formData.pdG && (_jsxs(_Fragment, { children: [_jsxs("div", { style: {
|
|
426
|
-
display: "flex",
|
|
427
|
-
alignItems: "center",
|
|
428
|
-
gap: "6px",
|
|
429
|
-
fontWeight: 600,
|
|
430
|
-
}, 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 } }) })] }) }) })), _jsx(TMConditionalWrapper, { condition: !isMobile, wrapper: children => _jsx("div", { style: { display: 'flex', flexDirection: 'row', width: '100%', gap: 10 }, children: children }), children: _jsx("div", { style: { width: isMobile ? '100%' : '50%' }, children: _jsx(TMTextBox, { label: SDKUI_Localizator.Name, value: formData?.name ?? '', readOnly: fieldsReadOnly.name, autoFocus: true, maxLength: 100, isModifiedWhen: formData?.name !== formDataOrig?.name, onValueChanged: (e) => { setFormData({ ...formData ?? {}, name: e.target.value }); }, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.Name) }) }) }), _jsx("div", { style: { width: '100%' }, 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 }) }), _jsx(TMConditionalWrapper, { condition: !isMobile, wrapper: children => _jsx("div", { style: { display: 'flex', flexDirection: 'row', width: '100%', gap: 10 }, children: children }), children: (formMode === FormModes.Create || !areDifferentIDs(formDataOrig?.fromID, SDK_Globals.tmSession?.SessionDescr?.userID)) ?
|
|
431
|
-
_jsx("div", { id: "assignedToAnotherUserField", style: { width: isMobile ? '100%' : '50%' }, children: _jsx(TMUserChooser, { dataSource: usersList ?? undefined, allowShowAllUsers: !!taskContext?.dossier, allowMultipleSelection: false, label: SDKUI_Localizator.AssignedTo_Female, readOnly: fieldsReadOnly.assignedTO, values: formData?.toID ? [formData?.toID] : [], isModifiedWhen: formData?.toID !== formDataOrig?.toID, validationItems: validationItems?.filter(o => o.PropertyName === SDKUI_Localizator.AssignedTo_Female), onValueChanged: (newValue) => {
|
|
273
|
+
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, 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: [(formMode === FormModes.Create || 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) => {
|
|
274
|
+
if (newValue === undefined)
|
|
275
|
+
return;
|
|
276
|
+
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
277
|
+
} }), _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 })] }), (formMode === FormModes.Update || formMode === FormModes.Duplicate) && _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) => {
|
|
432
278
|
if (newValue === undefined)
|
|
433
279
|
return;
|
|
434
280
|
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
435
|
-
} }) })
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
281
|
+
} }), _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(RenderPriorityField, { formData: formData, formDataOrig: formDataOrig, fieldsReadOnly: fieldsReadOnly, onPriorityValueChange: onPriorityValueChange }), _jsx(RenderRemindDateField, { fieldsReadOnly: fieldsReadOnly, formData: formData, formDataOrig: formDataOrig, validationItems: validationItems, setFormData: setFormData }), _jsx(RenderTaskFormStateField, { formData: formData, formDataOrig: formDataOrig, handleShowChangeStateForm: handleShowChangeStateForm, onSavedCallback: onSaved }), _jsx(TaskFormResponseComment, { originalResponse: formDataOrig?.response, currentResponse: formData?.response, readonly: true }), _jsx(TaskPdgOriginNavigator, { formMode: formMode, formData: formDataOrig, isMobile: isMobile, gotoPDGExtendedLabelClickCallback: gotoPDGExtendedLabelClickCallback })] })] }) }) }), formData && (_jsx("div", { style: {
|
|
282
|
+
position: 'absolute',
|
|
283
|
+
bottom: 0,
|
|
284
|
+
left: 0,
|
|
285
|
+
right: 0,
|
|
286
|
+
padding: '8px 12px',
|
|
287
|
+
backgroundColor: '#fff',
|
|
288
|
+
borderTop: '1px solid #e6e6e6',
|
|
289
|
+
display: 'flex',
|
|
290
|
+
justifyContent: 'flex-end',
|
|
291
|
+
alignItems: 'center'
|
|
292
|
+
}, children: _jsx(TaskFormAssignmentNoticeBadge, { task: formData, users: users }) })), (showDcmtForm && formData?.iD1 && formData?.iD2) &&
|
|
293
|
+
_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 })] }) }));
|
|
441
294
|
};
|
|
442
295
|
export default TMTaskForm;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { ChangeEvent } from "react";
|
|
2
|
+
import { PdGs, Task_States, TaskDescriptor, UserDescriptor, ValidationItem } from "@topconsultnpm/sdk-ts";
|
|
3
|
+
import { FormModes, TaskContext } from "../../../ts";
|
|
4
|
+
import { IFieldsEditability } from "./TMTasksUtils";
|
|
5
|
+
export declare const getCurrentUserTaskRole: (task?: TaskDescriptor) => TaskRole;
|
|
6
|
+
interface TaskFormAssignmentNoticeSectionProps {
|
|
7
|
+
task: TaskDescriptor;
|
|
8
|
+
users: Array<UserDescriptor>;
|
|
9
|
+
}
|
|
10
|
+
export declare const TaskFormAssignmentNoticeBadge: (props: TaskFormAssignmentNoticeSectionProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
11
|
+
interface RenderContextBlockParams {
|
|
12
|
+
condition: boolean;
|
|
13
|
+
pdg: PdGs;
|
|
14
|
+
label: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
export declare const RenderAttachmentBlock: ({ condition, pdg, label }: RenderContextBlockParams) => JSX.Element | null;
|
|
17
|
+
interface TaskFormContextualAttachmentsProps {
|
|
18
|
+
taskContext: TaskContext | undefined;
|
|
19
|
+
}
|
|
20
|
+
export declare const TaskFormContextualAttachments: ({ taskContext }: TaskFormContextualAttachmentsProps) => JSX.Element | null;
|
|
21
|
+
interface TaskPdgOriginNavigatorProps {
|
|
22
|
+
formMode: FormModes;
|
|
23
|
+
formData: TaskDescriptor | undefined;
|
|
24
|
+
isMobile: boolean;
|
|
25
|
+
gotoPDGExtendedLabelClickCallback: () => void;
|
|
26
|
+
}
|
|
27
|
+
export declare const TaskPdgOriginNavigator: (props: TaskPdgOriginNavigatorProps) => false | "" | import("react/jsx-runtime").JSX.Element | undefined;
|
|
28
|
+
interface TaskFormAssignedToProps {
|
|
29
|
+
formMode: FormModes;
|
|
30
|
+
formData: TaskDescriptor | undefined;
|
|
31
|
+
formDataOrig: TaskDescriptor | undefined;
|
|
32
|
+
taskContext: TaskContext | undefined;
|
|
33
|
+
validationItems: Array<ValidationItem>;
|
|
34
|
+
fieldsReadOnly: IFieldsEditability;
|
|
35
|
+
usersList?: Array<UserDescriptor>;
|
|
36
|
+
onValueChanged: (newValue: Array<number> | undefined) => void;
|
|
37
|
+
}
|
|
38
|
+
export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
interface TaskFormResponseCommentProps {
|
|
40
|
+
originalResponse?: string;
|
|
41
|
+
currentResponse?: string;
|
|
42
|
+
readonly?: boolean;
|
|
43
|
+
onAnswerChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;
|
|
44
|
+
}
|
|
45
|
+
export declare const TaskFormResponseComment: (props: TaskFormResponseCommentProps) => import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
interface RenderFieldBaseProps {
|
|
47
|
+
fieldsReadOnly: IFieldsEditability;
|
|
48
|
+
formDataOrig?: TaskDescriptor;
|
|
49
|
+
formData?: TaskDescriptor;
|
|
50
|
+
}
|
|
51
|
+
interface RenderFieldProps extends RenderFieldBaseProps {
|
|
52
|
+
validationItems?: Array<ValidationItem>;
|
|
53
|
+
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
54
|
+
}
|
|
55
|
+
interface RenderPriorityFieldProps extends RenderFieldBaseProps {
|
|
56
|
+
onPriorityValueChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
57
|
+
}
|
|
58
|
+
interface RenderDateFieldProps extends RenderFieldProps {
|
|
59
|
+
onContentReady?: () => void;
|
|
60
|
+
}
|
|
61
|
+
export declare const RenderNameField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
64
|
+
export declare const RenderStartDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
export declare const RenderEndDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
interface RenderTaskFormStateFieldProps {
|
|
68
|
+
formDataOrig: TaskDescriptor | undefined;
|
|
69
|
+
formData: TaskDescriptor | undefined;
|
|
70
|
+
handleShowChangeStateForm: (value: boolean) => void;
|
|
71
|
+
onSavedCallback?: (task: TaskDescriptor) => void;
|
|
72
|
+
}
|
|
73
|
+
export declare const RenderTaskFormStateField: (props: RenderTaskFormStateFieldProps) => JSX.Element | null;
|
|
74
|
+
interface TMChangeStateFormProps {
|
|
75
|
+
formData: TaskDescriptor;
|
|
76
|
+
formDataOrig?: TaskDescriptor;
|
|
77
|
+
handleShowChangeStateForm: (value: boolean) => void;
|
|
78
|
+
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
79
|
+
}
|
|
80
|
+
export declare const TMChangeStateForm: (props: TMChangeStateFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
type TaskRole = "personal" | "sender" | "receiver";
|
|
82
|
+
type StatusTransitionMap = {
|
|
83
|
+
[key in Task_States]?: Task_States[];
|
|
84
|
+
};
|
|
85
|
+
export declare const STATUS_TRANSITIONS: Record<TaskRole, StatusTransitionMap>;
|
|
86
|
+
export {};
|