@topconsultnpm/sdkui-react 6.20.0-dev2.5 → 6.20.0-dev2.50
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/base/Styled.d.ts +1 -0
- package/lib/components/base/Styled.js +10 -2
- package/lib/components/base/TMTreeView.d.ts +3 -1
- package/lib/components/base/TMTreeView.js +63 -20
- package/lib/components/choosers/TMDataListItemEditor.d.ts +11 -0
- package/lib/components/choosers/TMDataListItemEditor.js +130 -0
- package/lib/components/choosers/TMDataListItemFields.d.ts +11 -0
- package/lib/components/choosers/TMDataListItemFields.js +61 -0
- package/lib/components/choosers/TMDataListItemPicker.d.ts +1 -0
- package/lib/components/choosers/TMDataListItemPicker.js +178 -18
- package/lib/components/choosers/TMDynDataListItemChooser.js +11 -6
- package/lib/components/choosers/TMImageIDChooser.d.ts +16 -0
- package/lib/components/choosers/TMImageIDChooser.js +53 -0
- package/lib/components/choosers/TMMetadataChooser.js +1 -1
- package/lib/components/editors/TMLocalizedTextBox.d.ts +1 -0
- package/lib/components/editors/TMLocalizedTextBox.js +3 -3
- package/lib/components/editors/TMMetadataValues.js +3 -1
- package/lib/components/editors/TMTextBox.js +8 -9
- package/lib/components/features/archive/TMArchive.js +29 -42
- package/lib/components/features/documents/TMDcmtForm.js +165 -42
- package/lib/components/features/documents/TMDcmtPreview.js +2 -1
- package/lib/components/features/documents/TMMasterDetailDcmts.js +67 -6
- package/lib/components/features/documents/TMRelationViewer.d.ts +7 -1
- package/lib/components/features/documents/TMRelationViewer.js +389 -76
- package/lib/components/features/search/TMSearchResult.d.ts +1 -0
- package/lib/components/features/search/TMSearchResult.js +44 -82
- package/lib/components/features/search/TMSearchResultsMenuItems.js +2 -2
- package/lib/components/features/tasks/TMTaskForm.js +35 -187
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +74 -0
- package/lib/components/features/tasks/TMTaskFormUtils.js +538 -0
- package/lib/components/features/tasks/TMTasksUtils.d.ts +2 -0
- package/lib/components/features/tasks/TMTasksUtils.js +38 -7
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +0 -7
- package/lib/components/features/tasks/TMTasksUtilsView.js +7 -14
- package/lib/components/features/tasks/TMTasksView.js +2 -2
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +2 -1
- package/lib/components/features/workflow/TMWorkflowPopup.js +2 -1
- package/lib/components/features/workflow/diagram/DiagramItemForm.js +1 -1
- package/lib/components/forms/Login/TMLoginForm.js +1 -1
- package/lib/components/forms/TMSaveForm.js +61 -13
- package/lib/components/grids/TMBlogsPost.js +2 -2
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/layout/panelManager/TMPanelManagerContainer.js +3 -2
- package/lib/components/pages/TMPage.js +4 -0
- package/lib/components/query/TMQueryEditor.d.ts +1 -0
- package/lib/components/query/TMQueryEditor.js +2 -2
- package/lib/helper/Enum_Localizator.js +5 -0
- package/lib/helper/GlobalStyles.js +3 -0
- package/lib/helper/SDKUI_Globals.d.ts +4 -0
- package/lib/helper/SDKUI_Globals.js +6 -0
- package/lib/helper/SDKUI_Localizator.d.ts +11 -2
- package/lib/helper/SDKUI_Localizator.js +102 -12
- package/lib/helper/TMUtils.d.ts +18 -0
- package/lib/helper/TMUtils.js +58 -0
- package/lib/helper/helpers.d.ts +6 -2
- package/lib/helper/helpers.js +23 -8
- package/lib/helper/index.d.ts +1 -0
- package/lib/helper/index.js +1 -0
- package/lib/helper/queryHelper.js +1 -1
- package/lib/hooks/useBetaFeatures.d.ts +1 -0
- package/lib/hooks/useBetaFeatures.js +41 -0
- package/lib/hooks/useDcmtOperations.js +14 -2
- package/lib/hooks/useRelatedDocuments.js +34 -11
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/package.json +11 -11
|
@@ -1,64 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect,
|
|
3
|
-
import { ObjectClasses, TaskDescriptor,
|
|
4
|
-
import {
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
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
|
|
22
|
-
import { TMColors } from '../../../utils/theme';
|
|
23
|
-
import { renderContextBlock } from './TMTasksUtilsView';
|
|
24
|
-
import { DeviceType, useDeviceType } from '../../base/TMDeviceProvider';
|
|
25
|
-
const ResponseCommentWrapper = styled.div `
|
|
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
|
-
`;
|
|
15
|
+
import { getCurrentUserTaskRole, RenderDescriptionField, RenderEndDateField, RenderNameField, RenderPriorityField, RenderRemindDateField, RenderStartDateField, RenderTaskFormStateField, TaskAssigneeField, TaskFormAssignmentNoticeBadge, TaskFormContextualAttachments, TMChangeStateForm } from './TMTaskFormUtils';
|
|
62
16
|
const TMTaskForm = (props) => {
|
|
63
17
|
// Custom hook to manage workflow approval data
|
|
64
18
|
const { refreshWorkflowApprove } = useWorkflowApprove();
|
|
@@ -106,13 +60,8 @@ const TMTaskForm = (props) => {
|
|
|
106
60
|
};
|
|
107
61
|
const { formData, setFormData, formDataOrig, validationItems, exception, saveDataAsync } = useSaveForm(formMode, id, sfo, validator, onSaved, onStatusChanged, customizeFormData);
|
|
108
62
|
const containerRef = useRef(null);
|
|
109
|
-
// Get the current device type (e.g., mobile, tablet, desktop) using a custom hook.
|
|
110
|
-
const deviceType = useDeviceType();
|
|
111
|
-
// This avoids unnecessary re-renders by only recalculating when deviceType changes.
|
|
112
|
-
let isMobileDevice = useMemo(() => { return deviceType === DeviceType.MOBILE; }, [deviceType]);
|
|
113
|
-
const [isMobile, setIsMobile] = useState(false);
|
|
114
63
|
const [showDcmtForm, setShowDcmtForm] = useState(false);
|
|
115
|
-
const
|
|
64
|
+
const [showChangeStateForm, setShowChangeStateForm] = useState(false);
|
|
116
65
|
const [users, setUsers] = useState([]); // State to store the users
|
|
117
66
|
// Initial state for the fields' editability (readonly)
|
|
118
67
|
const [fieldsReadOnly, setFieldsReadOnly] = useState({
|
|
@@ -144,22 +93,18 @@ const TMTaskForm = (props) => {
|
|
|
144
93
|
};
|
|
145
94
|
fetchUsers();
|
|
146
95
|
}, []);
|
|
147
|
-
useEffect(() => {
|
|
148
|
-
if (isModal)
|
|
149
|
-
setIsMobile(true);
|
|
150
|
-
}, [isModal]);
|
|
151
96
|
useEffect(() => {
|
|
152
97
|
if (formDataOrig && formMode === FormModes.Update) {
|
|
153
|
-
const
|
|
98
|
+
const taskRole = getCurrentUserTaskRole(formDataOrig);
|
|
154
99
|
setFieldsReadOnly({
|
|
155
|
-
name:
|
|
156
|
-
description:
|
|
157
|
-
fromID:
|
|
158
|
-
assignedTO:
|
|
100
|
+
name: taskRole === 'receiver',
|
|
101
|
+
description: taskRole === 'receiver',
|
|
102
|
+
fromID: taskRole === 'receiver',
|
|
103
|
+
assignedTO: taskRole === 'receiver',
|
|
159
104
|
status: false,
|
|
160
|
-
priority:
|
|
161
|
-
startDate:
|
|
162
|
-
endDate:
|
|
105
|
+
priority: taskRole === 'receiver',
|
|
106
|
+
startDate: taskRole === 'receiver',
|
|
107
|
+
endDate: taskRole === 'receiver',
|
|
163
108
|
remTime: false,
|
|
164
109
|
response: false
|
|
165
110
|
});
|
|
@@ -183,44 +128,12 @@ const TMTaskForm = (props) => {
|
|
|
183
128
|
});
|
|
184
129
|
}
|
|
185
130
|
}, [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
131
|
// Function to handle changes in the priority value of a TM Drop Down
|
|
216
132
|
const onPriorityValueChange = (e) => {
|
|
217
133
|
if (!e?.target?.value)
|
|
218
134
|
return;
|
|
219
135
|
setFormData({ ...formData ?? {}, priority: e?.target?.value });
|
|
220
136
|
};
|
|
221
|
-
const onAnswerChange = (e) => {
|
|
222
|
-
setFormData({ ...formData ?? {}, response: e.target.value ?? '' });
|
|
223
|
-
};
|
|
224
137
|
// Function to handle the undo action
|
|
225
138
|
const onUndoCallback = () => {
|
|
226
139
|
setFormData(formDataOrig);
|
|
@@ -330,6 +243,9 @@ const TMTaskForm = (props) => {
|
|
|
330
243
|
await editTaskCallback(task);
|
|
331
244
|
onClose?.();
|
|
332
245
|
};
|
|
246
|
+
const handleShowChangeStateForm = (value) => {
|
|
247
|
+
setShowChangeStateForm(value);
|
|
248
|
+
};
|
|
333
249
|
const handleNavigateToReference = (ref) => {
|
|
334
250
|
switch (ref.objClass) {
|
|
335
251
|
case ObjectClasses.Dossier:
|
|
@@ -349,94 +265,26 @@ const TMTaskForm = (props) => {
|
|
|
349
265
|
console.warn(`Unhandled object type: ${ref.objClass}`);
|
|
350
266
|
}
|
|
351
267
|
};
|
|
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) => {
|
|
268
|
+
return (_jsx("div", { style: { width: "100%", height: "100%", overflow: "auto" }, ref: containerRef, children: _jsxs(TMSaveForm, { width: width, height: height, id: id, title: title, isModal: isModal, formMode: formMode, onSaveAsync: saveDataAsync, onClose: onCloseCallback, showUndoButton: formMode === FormModes.Update, onUndo: onUndoCallback, exception: exception, isModified: calcIsModified(formData, formDataOrig), validationItems: validationItems, showBackButton: showBackButton, hasNavigation: (hasNavigation && formMode !== FormModes.Create), canNext: canNext(), onNext: onNextCallback, canPrev: canPrev(), onPrev: onPrevCallback, showToolbar: !(showDcmtForm && formData?.iD1 && formData?.iD2), children: [_jsxs(_Fragment, { children: [_jsx(ScrollView, { direction: "vertical", useNative: true, height: formData && (formMode === FormModes.Create || formMode === FormModes.None) ? "calc(100% - 70px)" : "calc(100% - 35px)", children: _jsx("div", { style: { marginRight: "5px" }, children: _jsxs(TMLayoutContainer, { direction: 'vertical', gap: 2, children: [(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) => {
|
|
269
|
+
if (newValue === undefined)
|
|
270
|
+
return;
|
|
271
|
+
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
272
|
+
} }), _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
273
|
if (newValue === undefined)
|
|
433
274
|
return;
|
|
434
275
|
setFormData({ ...formData ?? {}, toID: newValue[0] });
|
|
435
|
-
} }) })
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
276
|
+
} }), _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, formMode: formMode, gotoPDGExtendedLabelClickCallback: gotoPDGExtendedLabelClickCallback, handleShowChangeStateForm: handleShowChangeStateForm, onSavedCallback: onSaved })] })] }) }) }), formData && (_jsx("div", { style: {
|
|
277
|
+
position: 'absolute',
|
|
278
|
+
bottom: 0,
|
|
279
|
+
left: 0,
|
|
280
|
+
right: 0,
|
|
281
|
+
padding: '8px 12px',
|
|
282
|
+
backgroundColor: '#fff',
|
|
283
|
+
borderTop: '1px solid #e6e6e6',
|
|
284
|
+
display: 'flex',
|
|
285
|
+
justifyContent: 'flex-end',
|
|
286
|
+
alignItems: 'center'
|
|
287
|
+
}, children: _jsx(TaskFormAssignmentNoticeBadge, { task: formData, users: users }) })), (showDcmtForm && formData?.iD1 && formData?.iD2) &&
|
|
288
|
+
_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
289
|
};
|
|
442
290
|
export default TMTaskForm;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import React 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 TaskFormAssignedToProps {
|
|
22
|
+
formMode: FormModes;
|
|
23
|
+
formData: TaskDescriptor | undefined;
|
|
24
|
+
formDataOrig: TaskDescriptor | undefined;
|
|
25
|
+
taskContext: TaskContext | undefined;
|
|
26
|
+
validationItems: Array<ValidationItem>;
|
|
27
|
+
fieldsReadOnly: IFieldsEditability;
|
|
28
|
+
usersList?: Array<UserDescriptor>;
|
|
29
|
+
onValueChanged: (newValue: Array<number> | undefined) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare const TaskAssigneeField: (props: TaskFormAssignedToProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
interface RenderFieldBaseProps {
|
|
33
|
+
fieldsReadOnly: IFieldsEditability;
|
|
34
|
+
formDataOrig?: TaskDescriptor;
|
|
35
|
+
formData?: TaskDescriptor;
|
|
36
|
+
}
|
|
37
|
+
interface RenderFieldProps extends RenderFieldBaseProps {
|
|
38
|
+
validationItems?: Array<ValidationItem>;
|
|
39
|
+
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
40
|
+
}
|
|
41
|
+
interface RenderPriorityFieldProps extends RenderFieldBaseProps {
|
|
42
|
+
onPriorityValueChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
43
|
+
}
|
|
44
|
+
interface RenderDateFieldProps extends RenderFieldProps {
|
|
45
|
+
onContentReady?: () => void;
|
|
46
|
+
}
|
|
47
|
+
export declare const RenderNameField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare const RenderDescriptionField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare const RenderPriorityField: ({ formData, formDataOrig, fieldsReadOnly, onPriorityValueChange }: RenderPriorityFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export declare const RenderStartDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
51
|
+
export declare const RenderEndDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly, onContentReady }: RenderDateFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
export declare const RenderRemindDateField: ({ validationItems, setFormData, formData, formDataOrig, fieldsReadOnly }: RenderFieldProps) => import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
interface RenderTaskFormStateFieldProps {
|
|
54
|
+
formDataOrig: TaskDescriptor | undefined;
|
|
55
|
+
formData: TaskDescriptor | undefined;
|
|
56
|
+
formMode: FormModes;
|
|
57
|
+
gotoPDGExtendedLabelClickCallback: () => void;
|
|
58
|
+
handleShowChangeStateForm: (value: boolean) => void;
|
|
59
|
+
onSavedCallback?: (task: TaskDescriptor) => void;
|
|
60
|
+
}
|
|
61
|
+
export declare const RenderTaskFormStateField: (props: RenderTaskFormStateFieldProps) => JSX.Element | null;
|
|
62
|
+
interface TMChangeStateFormProps {
|
|
63
|
+
formData: TaskDescriptor;
|
|
64
|
+
formDataOrig?: TaskDescriptor;
|
|
65
|
+
handleShowChangeStateForm: (value: boolean) => void;
|
|
66
|
+
setFormData: React.Dispatch<React.SetStateAction<TaskDescriptor | undefined>>;
|
|
67
|
+
}
|
|
68
|
+
export declare const TMChangeStateForm: (props: TMChangeStateFormProps) => import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
type TaskRole = "personal" | "sender" | "receiver";
|
|
70
|
+
type StatusTransitionMap = {
|
|
71
|
+
[key in Task_States]?: Task_States[];
|
|
72
|
+
};
|
|
73
|
+
export declare const STATUS_TRANSITIONS: Record<TaskRole, StatusTransitionMap>;
|
|
74
|
+
export {};
|