@uipath/apollo-react 4.11.0 → 4.12.0
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/dist/canvas/components/StageNode/DraggableTask.cjs +3 -17
- package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/DraggableTask.js +3 -17
- package/dist/canvas/components/StageNode/EventDrivenTask.cjs +80 -0
- package/dist/canvas/components/StageNode/EventDrivenTask.d.ts +13 -0
- package/dist/canvas/components/StageNode/EventDrivenTask.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/EventDrivenTask.js +46 -0
- package/dist/canvas/components/StageNode/StageNode.cjs +29 -581
- package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNode.js +28 -580
- package/dist/canvas/components/StageNode/StageNode.styles.cjs +12 -12
- package/dist/canvas/components/StageNode/StageNode.styles.d.ts +3 -3
- package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNode.styles.js +4 -4
- package/dist/canvas/components/StageNode/StageNode.types.d.ts +11 -0
- package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.cjs +98 -0
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts +13 -0
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.js +64 -0
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.cjs +129 -0
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts +12 -0
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.js +95 -0
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.cjs +97 -0
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts +13 -0
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.js +63 -0
- package/dist/canvas/components/StageNode/StageNodeHandles.cjs +119 -0
- package/dist/canvas/components/StageNode/StageNodeHandles.d.ts +8 -0
- package/dist/canvas/components/StageNode/StageNodeHandles.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeHandles.js +85 -0
- package/dist/canvas/components/StageNode/StageNodeHeader.cjs +245 -0
- package/dist/canvas/components/StageNode/StageNodeHeader.d.ts +9 -0
- package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeHeader.js +211 -0
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.cjs +176 -0
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts +16 -0
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.js +142 -0
- package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.cjs +57 -0
- package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts +5 -0
- package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.js +23 -0
- package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.cjs +117 -0
- package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts +18 -0
- package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.js +83 -0
- package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.cjs +87 -0
- package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts +22 -0
- package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.js +53 -0
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Icon, Padding, Spacing } from "@uipath/apollo-core";
|
|
3
|
+
import { Column, Row } from "../../layouts/index.js";
|
|
4
|
+
import { Button, cn } from "@uipath/apollo-wind";
|
|
5
|
+
import { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
6
|
+
import { EntryConditionIcon, ExitConditionIcon, ReturnToOriginIcon } from "../../icons/index.js";
|
|
7
|
+
import { CanvasIcon } from "../../utils/icon-registry.js";
|
|
8
|
+
import { CanvasTooltip } from "../CanvasTooltip.js";
|
|
9
|
+
import { ExecutionStatusIcon } from "../ExecutionStatusIcon/index.js";
|
|
10
|
+
import { StageChip, StageHeader, StageHeaderChipsRow, StageTitleContainer, StageTitleInput } from "./StageNode.styles.js";
|
|
11
|
+
import { StageHeaderChipType } from "./StageNode.types.js";
|
|
12
|
+
const CHIP_ICONS = {
|
|
13
|
+
[StageHeaderChipType.Entry]: /*#__PURE__*/ jsx(EntryConditionIcon, {
|
|
14
|
+
w: Icon.IconXs,
|
|
15
|
+
h: Icon.IconXs
|
|
16
|
+
}),
|
|
17
|
+
[StageHeaderChipType.Exit]: /*#__PURE__*/ jsx(ExitConditionIcon, {
|
|
18
|
+
w: Icon.IconXs,
|
|
19
|
+
h: Icon.IconXs
|
|
20
|
+
}),
|
|
21
|
+
[StageHeaderChipType.ReturnToOrigin]: /*#__PURE__*/ jsx(ReturnToOriginIcon, {
|
|
22
|
+
w: Icon.IconXs,
|
|
23
|
+
h: Icon.IconXs
|
|
24
|
+
}),
|
|
25
|
+
[StageHeaderChipType.CaseExit]: /*#__PURE__*/ jsx(CanvasIcon, {
|
|
26
|
+
icon: "x",
|
|
27
|
+
size: 16
|
|
28
|
+
}),
|
|
29
|
+
[StageHeaderChipType.CaseCompletion]: /*#__PURE__*/ jsx(CanvasIcon, {
|
|
30
|
+
icon: "check",
|
|
31
|
+
size: 16
|
|
32
|
+
})
|
|
33
|
+
};
|
|
34
|
+
const StageNodeHeaderInner = ({ props, isReadOnly, isException, status, handleTaskAddClick })=>{
|
|
35
|
+
const { id, stageDetails, execution, addTaskLabel = 'Add task', onTaskAdd, onAddTaskFromToolbox, onStageTitleChange } = props;
|
|
36
|
+
const icon = stageDetails?.icon;
|
|
37
|
+
const statusLabel = execution?.stageStatus?.label;
|
|
38
|
+
const stageDuration = execution?.stageStatus?.duration;
|
|
39
|
+
const isStageTitleEditable = !!onStageTitleChange && !isReadOnly;
|
|
40
|
+
const [isStageTitleEditing, setIsStageTitleEditing] = useState(false);
|
|
41
|
+
const stageTitleRef = useRef(null);
|
|
42
|
+
const [label, setLabel] = useState(props.stageDetails.label);
|
|
43
|
+
useEffect(()=>{
|
|
44
|
+
setLabel(props.stageDetails.label);
|
|
45
|
+
}, [
|
|
46
|
+
props.stageDetails.label
|
|
47
|
+
]);
|
|
48
|
+
const handleStageTitleChange = useCallback((e)=>{
|
|
49
|
+
setIsStageTitleEditing(true);
|
|
50
|
+
setLabel(e.target.value);
|
|
51
|
+
}, []);
|
|
52
|
+
const handleStageTitleClickToSave = useCallback((e)=>{
|
|
53
|
+
if (isStageTitleEditing && !stageTitleRef.current?.contains(e.target)) {
|
|
54
|
+
setIsStageTitleEditing(false);
|
|
55
|
+
if (onStageTitleChange) {
|
|
56
|
+
if ('' === label.trim()) setLabel('Untitled Stage');
|
|
57
|
+
onStageTitleChange(label);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, [
|
|
61
|
+
isStageTitleEditing,
|
|
62
|
+
onStageTitleChange,
|
|
63
|
+
label
|
|
64
|
+
]);
|
|
65
|
+
useEffect(()=>{
|
|
66
|
+
if (isStageTitleEditing) document.addEventListener('click', handleStageTitleClickToSave);
|
|
67
|
+
return ()=>{
|
|
68
|
+
document.removeEventListener('click', handleStageTitleClickToSave);
|
|
69
|
+
};
|
|
70
|
+
}, [
|
|
71
|
+
handleStageTitleClickToSave,
|
|
72
|
+
isStageTitleEditing
|
|
73
|
+
]);
|
|
74
|
+
const handleStageTitleBlurToSave = useCallback(()=>{
|
|
75
|
+
if (isStageTitleEditing) {
|
|
76
|
+
setIsStageTitleEditing(false);
|
|
77
|
+
if (onStageTitleChange) {
|
|
78
|
+
if ('' === label.trim()) setLabel('Untitled Stage');
|
|
79
|
+
onStageTitleChange(label);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}, [
|
|
83
|
+
isStageTitleEditing,
|
|
84
|
+
onStageTitleChange,
|
|
85
|
+
label
|
|
86
|
+
]);
|
|
87
|
+
const handleStageTitleKeyDown = useCallback((e)=>{
|
|
88
|
+
if ('Enter' === e.key) {
|
|
89
|
+
setIsStageTitleEditing(false);
|
|
90
|
+
if (onStageTitleChange) onStageTitleChange(label);
|
|
91
|
+
}
|
|
92
|
+
if ('Escape' !== e.key) e.stopPropagation();
|
|
93
|
+
}, [
|
|
94
|
+
onStageTitleChange,
|
|
95
|
+
label
|
|
96
|
+
]);
|
|
97
|
+
return /*#__PURE__*/ jsxs(StageHeader, {
|
|
98
|
+
isException: isException,
|
|
99
|
+
"data-testid": `stage-header-${id}`,
|
|
100
|
+
children: [
|
|
101
|
+
/*#__PURE__*/ jsxs(Row, {
|
|
102
|
+
gap: Spacing.SpacingMicro,
|
|
103
|
+
align: "center",
|
|
104
|
+
flex: 1,
|
|
105
|
+
minW: 0,
|
|
106
|
+
children: [
|
|
107
|
+
icon,
|
|
108
|
+
/*#__PURE__*/ jsxs(Column, {
|
|
109
|
+
py: 2,
|
|
110
|
+
flex: 1,
|
|
111
|
+
minW: 0,
|
|
112
|
+
children: [
|
|
113
|
+
/*#__PURE__*/ jsx("span", {
|
|
114
|
+
className: cn('text-sm', !isStageTitleEditing && 'font-bold'),
|
|
115
|
+
children: /*#__PURE__*/ jsx(CanvasTooltip, {
|
|
116
|
+
content: label,
|
|
117
|
+
placement: "top",
|
|
118
|
+
delay: true,
|
|
119
|
+
children: /*#__PURE__*/ jsx(StageTitleContainer, {
|
|
120
|
+
isEditing: isStageTitleEditing,
|
|
121
|
+
children: /*#__PURE__*/ jsx(StageTitleInput, {
|
|
122
|
+
name: "Stage Title",
|
|
123
|
+
isStageTitleEditable: isStageTitleEditable,
|
|
124
|
+
value: label,
|
|
125
|
+
ref: stageTitleRef,
|
|
126
|
+
isEditing: isStageTitleEditing,
|
|
127
|
+
...onStageTitleChange && {
|
|
128
|
+
onFocus: ()=>setIsStageTitleEditing(true),
|
|
129
|
+
onInput: handleStageTitleChange,
|
|
130
|
+
onKeyDown: handleStageTitleKeyDown,
|
|
131
|
+
onBlur: handleStageTitleBlurToSave
|
|
132
|
+
},
|
|
133
|
+
readOnly: !isStageTitleEditable
|
|
134
|
+
})
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
}),
|
|
138
|
+
stageDuration && /*#__PURE__*/ jsx("span", {
|
|
139
|
+
className: "text-xs text-foreground-muted",
|
|
140
|
+
children: stageDuration
|
|
141
|
+
}),
|
|
142
|
+
stageDetails.headerChips && stageDetails.headerChips.length > 0 && /*#__PURE__*/ jsx(StageHeaderChipsRow, {
|
|
143
|
+
children: stageDetails.headerChips.map((chip)=>{
|
|
144
|
+
const button = /*#__PURE__*/ jsxs(StageChip, {
|
|
145
|
+
type: "button",
|
|
146
|
+
"aria-label": 'string' == typeof chip.tooltip ? chip.tooltip : chip.type,
|
|
147
|
+
onClick: (e)=>{
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
chip.onClick?.();
|
|
150
|
+
},
|
|
151
|
+
children: [
|
|
152
|
+
CHIP_ICONS[chip.type],
|
|
153
|
+
void 0 !== chip.count && /*#__PURE__*/ jsx("span", {
|
|
154
|
+
className: "text-xs",
|
|
155
|
+
children: chip.count
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
}, chip.type);
|
|
159
|
+
if (chip.tooltip) return /*#__PURE__*/ jsx(CanvasTooltip, {
|
|
160
|
+
placement: "bottom",
|
|
161
|
+
content: chip.tooltip,
|
|
162
|
+
children: button
|
|
163
|
+
}, chip.type);
|
|
164
|
+
return button;
|
|
165
|
+
})
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
}),
|
|
171
|
+
/*#__PURE__*/ jsxs(Row, {
|
|
172
|
+
gap: Spacing.SpacingMicro,
|
|
173
|
+
align: "start",
|
|
174
|
+
py: Padding.PadS,
|
|
175
|
+
children: [
|
|
176
|
+
status && /*#__PURE__*/ jsx(CanvasTooltip, {
|
|
177
|
+
content: statusLabel,
|
|
178
|
+
placement: "top",
|
|
179
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
180
|
+
variant: "ghost",
|
|
181
|
+
size: "icon",
|
|
182
|
+
className: "h-6 w-6",
|
|
183
|
+
"aria-label": statusLabel,
|
|
184
|
+
children: /*#__PURE__*/ jsx(ExecutionStatusIcon, {
|
|
185
|
+
status: status,
|
|
186
|
+
size: 20
|
|
187
|
+
})
|
|
188
|
+
})
|
|
189
|
+
}),
|
|
190
|
+
(onTaskAdd || onAddTaskFromToolbox) && !isReadOnly && /*#__PURE__*/ jsx(CanvasTooltip, {
|
|
191
|
+
content: addTaskLabel,
|
|
192
|
+
placement: "top",
|
|
193
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
194
|
+
variant: "ghost",
|
|
195
|
+
size: "icon",
|
|
196
|
+
className: "h-6 w-6",
|
|
197
|
+
onClick: handleTaskAddClick,
|
|
198
|
+
"aria-label": addTaskLabel,
|
|
199
|
+
children: /*#__PURE__*/ jsx(CanvasIcon, {
|
|
200
|
+
icon: "plus",
|
|
201
|
+
size: 20
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
]
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
const StageNodeHeader = /*#__PURE__*/ memo(StageNodeHeaderInner);
|
|
211
|
+
export { StageNodeHeader };
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
StageNodeSequentialTaskGroups: ()=>StageNodeSequentialTaskGroups
|
|
28
|
+
});
|
|
29
|
+
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
30
|
+
const core_namespaceObject = require("@dnd-kit/core");
|
|
31
|
+
const sortable_namespaceObject = require("@dnd-kit/sortable");
|
|
32
|
+
const apollo_core_namespaceObject = require("@uipath/apollo-core");
|
|
33
|
+
const index_cjs_namespaceObject = require("../../layouts/index.cjs");
|
|
34
|
+
const external_react_namespaceObject = require("react");
|
|
35
|
+
const GroupModificationUtils_cjs_namespaceObject = require("../../utils/GroupModificationUtils.cjs");
|
|
36
|
+
const external_DraggableTask_cjs_namespaceObject = require("./DraggableTask.cjs");
|
|
37
|
+
const useStageTaskDragHandler_cjs_namespaceObject = require("./hooks/useStageTaskDragHandler.cjs");
|
|
38
|
+
const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
|
|
39
|
+
const external_StageNodeTaskUtilities_cjs_namespaceObject = require("./StageNodeTaskUtilities.cjs");
|
|
40
|
+
const external_StageTaskDragOverlay_cjs_namespaceObject = require("./StageTaskDragOverlay.cjs");
|
|
41
|
+
const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, isReadOnly, selectedTaskId, taskWidthStyle, taskStateReference, hasContextMenu, handleTaskClick, setIsReplacingTask, handleReorderSequentialTasks })=>{
|
|
42
|
+
const { execution, onTaskClick, onTaskGroupModification, onTaskReorder, onReplaceTaskFromToolbox, hideParallelOptions, loadingTaskIds } = props;
|
|
43
|
+
const sequentialTaskIds = (0, external_react_namespaceObject.useMemo)(()=>sequentialTasks.map(({ task })=>task.id), [
|
|
44
|
+
sequentialTasks
|
|
45
|
+
]);
|
|
46
|
+
const { activeDragId, activeSequentialTask, isActiveTaskParallel, projected, handleDragStart, handleDragMove, handleDragOver, handleDragEnd, handleDragCancel } = (0, useStageTaskDragHandler_cjs_namespaceObject.useStageTaskDragHandler)({
|
|
47
|
+
sequentialTaskGroups,
|
|
48
|
+
sequentialTasks,
|
|
49
|
+
onTaskReorder: handleReorderSequentialTasks
|
|
50
|
+
});
|
|
51
|
+
const handleTaskRegroup = (0, external_react_namespaceObject.useCallback)((groupModificationType, groupIndex, taskIndex)=>{
|
|
52
|
+
if (onTaskReorder && (groupModificationType === GroupModificationUtils_cjs_namespaceObject.GroupModificationType.TASK_GROUP_UP || groupModificationType === GroupModificationUtils_cjs_namespaceObject.GroupModificationType.TASK_GROUP_DOWN)) {
|
|
53
|
+
const mover = groupModificationType === GroupModificationUtils_cjs_namespaceObject.GroupModificationType.TASK_GROUP_UP ? GroupModificationUtils_cjs_namespaceObject.moveGroupUp : GroupModificationUtils_cjs_namespaceObject.moveGroupDown;
|
|
54
|
+
const reordered = mover(sequentialTaskGroups, groupIndex, taskIndex);
|
|
55
|
+
handleReorderSequentialTasks(reordered);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
onTaskGroupModification?.(groupModificationType, groupIndex, taskIndex);
|
|
59
|
+
}, [
|
|
60
|
+
onTaskReorder,
|
|
61
|
+
handleReorderSequentialTasks,
|
|
62
|
+
onTaskGroupModification,
|
|
63
|
+
sequentialTaskGroups
|
|
64
|
+
]);
|
|
65
|
+
const buildContextMenuItems = (0, external_react_namespaceObject.useCallback)((groupIndex, taskIndex)=>{
|
|
66
|
+
const taskGroup = sequentialTaskGroups[groupIndex] ?? [];
|
|
67
|
+
const isParallel = taskGroup.length > 1;
|
|
68
|
+
const items = [];
|
|
69
|
+
if (onReplaceTaskFromToolbox) {
|
|
70
|
+
items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getMenuItem)('replace-task', 'Replace task', ()=>{
|
|
71
|
+
taskStateReference.current = {
|
|
72
|
+
isParallel,
|
|
73
|
+
groupIndex,
|
|
74
|
+
taskIndex
|
|
75
|
+
};
|
|
76
|
+
const taskId = taskGroup[taskIndex]?.id;
|
|
77
|
+
if (taskId) onTaskClick?.(taskId);
|
|
78
|
+
setIsReplacingTask(true);
|
|
79
|
+
}));
|
|
80
|
+
items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)());
|
|
81
|
+
}
|
|
82
|
+
if (onTaskGroupModification) {
|
|
83
|
+
const reGroupOptions = (0, external_StageNodeTaskUtilities_cjs_namespaceObject.getContextMenuItems)(isParallel, groupIndex, sequentialTaskGroups.length, taskIndex, taskGroup.length, (sequentialTaskGroups[groupIndex - 1]?.length ?? 0) > 1, (sequentialTaskGroups[groupIndex + 1]?.length ?? 0) > 1, handleTaskRegroup, hideParallelOptions);
|
|
84
|
+
return [
|
|
85
|
+
...items,
|
|
86
|
+
...reGroupOptions
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
return items;
|
|
90
|
+
}, [
|
|
91
|
+
onReplaceTaskFromToolbox,
|
|
92
|
+
onTaskClick,
|
|
93
|
+
onTaskGroupModification,
|
|
94
|
+
sequentialTaskGroups,
|
|
95
|
+
hideParallelOptions,
|
|
96
|
+
handleTaskRegroup,
|
|
97
|
+
setIsReplacingTask,
|
|
98
|
+
taskStateReference
|
|
99
|
+
]);
|
|
100
|
+
const sensors = (0, core_namespaceObject.useSensors)((0, core_namespaceObject.useSensor)(core_namespaceObject.PointerSensor, {
|
|
101
|
+
activationConstraint: {
|
|
102
|
+
distance: 3
|
|
103
|
+
}
|
|
104
|
+
}), (0, core_namespaceObject.useSensor)(core_namespaceObject.KeyboardSensor, {
|
|
105
|
+
coordinateGetter: sortable_namespaceObject.sortableKeyboardCoordinates
|
|
106
|
+
}));
|
|
107
|
+
if (0 === sequentialTaskGroups.length) return null;
|
|
108
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(core_namespaceObject.DndContext, {
|
|
109
|
+
collisionDetection: core_namespaceObject.closestCenter,
|
|
110
|
+
sensors: sensors,
|
|
111
|
+
onDragStart: handleDragStart,
|
|
112
|
+
onDragMove: handleDragMove,
|
|
113
|
+
onDragOver: handleDragOver,
|
|
114
|
+
onDragEnd: handleDragEnd,
|
|
115
|
+
onDragCancel: handleDragCancel,
|
|
116
|
+
children: [
|
|
117
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(sortable_namespaceObject.SortableContext, {
|
|
118
|
+
items: sequentialTaskIds,
|
|
119
|
+
strategy: sortable_namespaceObject.verticalListSortingStrategy,
|
|
120
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
|
|
121
|
+
className: "nodrag nopan",
|
|
122
|
+
children: sequentialTaskGroups.map((taskGroup, groupIndex)=>{
|
|
123
|
+
const isParallel = taskGroup.length > 1;
|
|
124
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
|
|
125
|
+
gap: apollo_core_namespaceObject.Spacing.SpacingS,
|
|
126
|
+
children: [
|
|
127
|
+
isParallel && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelBracket, {}),
|
|
128
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageTaskGroupContainer, {
|
|
129
|
+
isParallel: isParallel,
|
|
130
|
+
children: [
|
|
131
|
+
isParallel && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelLabel, {
|
|
132
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
|
|
133
|
+
className: "text-xs",
|
|
134
|
+
children: "Parallel"
|
|
135
|
+
})
|
|
136
|
+
}),
|
|
137
|
+
taskGroup.map((task, taskIndex)=>{
|
|
138
|
+
const taskExecution = execution?.taskStatus?.[task.id];
|
|
139
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.DraggableTask, {
|
|
140
|
+
task: task,
|
|
141
|
+
taskExecution: taskExecution,
|
|
142
|
+
isSelected: selectedTaskId === task.id,
|
|
143
|
+
isParallel: isParallel,
|
|
144
|
+
groupIndex: groupIndex,
|
|
145
|
+
taskIndex: taskIndex,
|
|
146
|
+
onTaskClick: handleTaskClick,
|
|
147
|
+
projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
|
|
148
|
+
isDragDisabled: !onTaskReorder || isReadOnly,
|
|
149
|
+
isTaskLoading: loadingTaskIds?.has(task.id),
|
|
150
|
+
...hasContextMenu && !isReadOnly && {
|
|
151
|
+
getContextMenuItems: buildContextMenuItems
|
|
152
|
+
}
|
|
153
|
+
}, task.id);
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
}, `group-${groupIndex}`);
|
|
159
|
+
})
|
|
160
|
+
})
|
|
161
|
+
}),
|
|
162
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageTaskDragOverlay_cjs_namespaceObject.StageTaskDragOverlay, {
|
|
163
|
+
activeTask: activeSequentialTask?.task,
|
|
164
|
+
isActiveTaskParallel: isActiveTaskParallel,
|
|
165
|
+
taskWidthStyle: taskWidthStyle
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
exports.StageNodeSequentialTaskGroups = __webpack_exports__.StageNodeSequentialTaskGroups;
|
|
171
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
172
|
+
"StageNodeSequentialTaskGroups"
|
|
173
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
174
|
+
Object.defineProperty(exports, '__esModule', {
|
|
175
|
+
value: true
|
|
176
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CSSProperties, RefObject } from 'react';
|
|
2
|
+
import type { StageNodeProps, StageTaskGroup, StageTaskItem, TaskStateReference } from './StageNode.types';
|
|
3
|
+
export declare const StageNodeSequentialTaskGroups: ({ props, sequentialTaskGroups, sequentialTasks, isReadOnly, selectedTaskId, taskWidthStyle, taskStateReference, hasContextMenu, handleTaskClick, setIsReplacingTask, handleReorderSequentialTasks, }: {
|
|
4
|
+
props: StageNodeProps;
|
|
5
|
+
sequentialTaskGroups: StageTaskItem[][];
|
|
6
|
+
sequentialTasks: StageTaskGroup[];
|
|
7
|
+
isReadOnly: boolean;
|
|
8
|
+
selectedTaskId?: string;
|
|
9
|
+
taskWidthStyle?: CSSProperties;
|
|
10
|
+
taskStateReference: RefObject<TaskStateReference>;
|
|
11
|
+
hasContextMenu: boolean;
|
|
12
|
+
handleTaskClick: (e: React.MouseEvent, taskElementId: string) => void;
|
|
13
|
+
setIsReplacingTask: (isReplacingTask: boolean) => void;
|
|
14
|
+
handleReorderSequentialTasks: (newTasks: StageTaskItem[][]) => void;
|
|
15
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
16
|
+
//# sourceMappingURL=StageNodeSequentialTaskGroups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageNodeSequentialTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeSequentialTaskGroups.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AAevE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,6BAA6B,GAAI,sMAY3C;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,oBAAoB,EAAE,aAAa,EAAE,EAAE,CAAC;IACxC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAClD,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,4BAA4B,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC;CACrE,mDAqLA,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
|
|
3
|
+
import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
|
|
4
|
+
import { Spacing } from "@uipath/apollo-core";
|
|
5
|
+
import { Row } from "../../layouts/index.js";
|
|
6
|
+
import { useCallback, useMemo } from "react";
|
|
7
|
+
import { GroupModificationType, moveGroupDown, moveGroupUp } from "../../utils/GroupModificationUtils.js";
|
|
8
|
+
import { DraggableTask } from "./DraggableTask.js";
|
|
9
|
+
import { useStageTaskDragHandler } from "./hooks/useStageTaskDragHandler.js";
|
|
10
|
+
import { StageParallelBracket, StageParallelLabel, StageTaskGroupContainer, StageTaskList } from "./StageNode.styles.js";
|
|
11
|
+
import { getContextMenuItems, getDivider, getMenuItem } from "./StageNodeTaskUtilities.js";
|
|
12
|
+
import { StageTaskDragOverlay } from "./StageTaskDragOverlay.js";
|
|
13
|
+
const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, isReadOnly, selectedTaskId, taskWidthStyle, taskStateReference, hasContextMenu, handleTaskClick, setIsReplacingTask, handleReorderSequentialTasks })=>{
|
|
14
|
+
const { execution, onTaskClick, onTaskGroupModification, onTaskReorder, onReplaceTaskFromToolbox, hideParallelOptions, loadingTaskIds } = props;
|
|
15
|
+
const sequentialTaskIds = useMemo(()=>sequentialTasks.map(({ task })=>task.id), [
|
|
16
|
+
sequentialTasks
|
|
17
|
+
]);
|
|
18
|
+
const { activeDragId, activeSequentialTask, isActiveTaskParallel, projected, handleDragStart, handleDragMove, handleDragOver, handleDragEnd, handleDragCancel } = useStageTaskDragHandler({
|
|
19
|
+
sequentialTaskGroups,
|
|
20
|
+
sequentialTasks,
|
|
21
|
+
onTaskReorder: handleReorderSequentialTasks
|
|
22
|
+
});
|
|
23
|
+
const handleTaskRegroup = useCallback((groupModificationType, groupIndex, taskIndex)=>{
|
|
24
|
+
if (onTaskReorder && (groupModificationType === GroupModificationType.TASK_GROUP_UP || groupModificationType === GroupModificationType.TASK_GROUP_DOWN)) {
|
|
25
|
+
const mover = groupModificationType === GroupModificationType.TASK_GROUP_UP ? moveGroupUp : moveGroupDown;
|
|
26
|
+
const reordered = mover(sequentialTaskGroups, groupIndex, taskIndex);
|
|
27
|
+
handleReorderSequentialTasks(reordered);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
onTaskGroupModification?.(groupModificationType, groupIndex, taskIndex);
|
|
31
|
+
}, [
|
|
32
|
+
onTaskReorder,
|
|
33
|
+
handleReorderSequentialTasks,
|
|
34
|
+
onTaskGroupModification,
|
|
35
|
+
sequentialTaskGroups
|
|
36
|
+
]);
|
|
37
|
+
const buildContextMenuItems = useCallback((groupIndex, taskIndex)=>{
|
|
38
|
+
const taskGroup = sequentialTaskGroups[groupIndex] ?? [];
|
|
39
|
+
const isParallel = taskGroup.length > 1;
|
|
40
|
+
const items = [];
|
|
41
|
+
if (onReplaceTaskFromToolbox) {
|
|
42
|
+
items.push(getMenuItem('replace-task', 'Replace task', ()=>{
|
|
43
|
+
taskStateReference.current = {
|
|
44
|
+
isParallel,
|
|
45
|
+
groupIndex,
|
|
46
|
+
taskIndex
|
|
47
|
+
};
|
|
48
|
+
const taskId = taskGroup[taskIndex]?.id;
|
|
49
|
+
if (taskId) onTaskClick?.(taskId);
|
|
50
|
+
setIsReplacingTask(true);
|
|
51
|
+
}));
|
|
52
|
+
items.push(getDivider());
|
|
53
|
+
}
|
|
54
|
+
if (onTaskGroupModification) {
|
|
55
|
+
const reGroupOptions = getContextMenuItems(isParallel, groupIndex, sequentialTaskGroups.length, taskIndex, taskGroup.length, (sequentialTaskGroups[groupIndex - 1]?.length ?? 0) > 1, (sequentialTaskGroups[groupIndex + 1]?.length ?? 0) > 1, handleTaskRegroup, hideParallelOptions);
|
|
56
|
+
return [
|
|
57
|
+
...items,
|
|
58
|
+
...reGroupOptions
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
return items;
|
|
62
|
+
}, [
|
|
63
|
+
onReplaceTaskFromToolbox,
|
|
64
|
+
onTaskClick,
|
|
65
|
+
onTaskGroupModification,
|
|
66
|
+
sequentialTaskGroups,
|
|
67
|
+
hideParallelOptions,
|
|
68
|
+
handleTaskRegroup,
|
|
69
|
+
setIsReplacingTask,
|
|
70
|
+
taskStateReference
|
|
71
|
+
]);
|
|
72
|
+
const sensors = useSensors(useSensor(PointerSensor, {
|
|
73
|
+
activationConstraint: {
|
|
74
|
+
distance: 3
|
|
75
|
+
}
|
|
76
|
+
}), useSensor(KeyboardSensor, {
|
|
77
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
78
|
+
}));
|
|
79
|
+
if (0 === sequentialTaskGroups.length) return null;
|
|
80
|
+
return /*#__PURE__*/ jsxs(DndContext, {
|
|
81
|
+
collisionDetection: closestCenter,
|
|
82
|
+
sensors: sensors,
|
|
83
|
+
onDragStart: handleDragStart,
|
|
84
|
+
onDragMove: handleDragMove,
|
|
85
|
+
onDragOver: handleDragOver,
|
|
86
|
+
onDragEnd: handleDragEnd,
|
|
87
|
+
onDragCancel: handleDragCancel,
|
|
88
|
+
children: [
|
|
89
|
+
/*#__PURE__*/ jsx(SortableContext, {
|
|
90
|
+
items: sequentialTaskIds,
|
|
91
|
+
strategy: verticalListSortingStrategy,
|
|
92
|
+
children: /*#__PURE__*/ jsx(StageTaskList, {
|
|
93
|
+
className: "nodrag nopan",
|
|
94
|
+
children: sequentialTaskGroups.map((taskGroup, groupIndex)=>{
|
|
95
|
+
const isParallel = taskGroup.length > 1;
|
|
96
|
+
return /*#__PURE__*/ jsxs(Row, {
|
|
97
|
+
gap: Spacing.SpacingS,
|
|
98
|
+
children: [
|
|
99
|
+
isParallel && /*#__PURE__*/ jsx(StageParallelBracket, {}),
|
|
100
|
+
/*#__PURE__*/ jsxs(StageTaskGroupContainer, {
|
|
101
|
+
isParallel: isParallel,
|
|
102
|
+
children: [
|
|
103
|
+
isParallel && /*#__PURE__*/ jsx(StageParallelLabel, {
|
|
104
|
+
children: /*#__PURE__*/ jsx("span", {
|
|
105
|
+
className: "text-xs",
|
|
106
|
+
children: "Parallel"
|
|
107
|
+
})
|
|
108
|
+
}),
|
|
109
|
+
taskGroup.map((task, taskIndex)=>{
|
|
110
|
+
const taskExecution = execution?.taskStatus?.[task.id];
|
|
111
|
+
return /*#__PURE__*/ jsx(DraggableTask, {
|
|
112
|
+
task: task,
|
|
113
|
+
taskExecution: taskExecution,
|
|
114
|
+
isSelected: selectedTaskId === task.id,
|
|
115
|
+
isParallel: isParallel,
|
|
116
|
+
groupIndex: groupIndex,
|
|
117
|
+
taskIndex: taskIndex,
|
|
118
|
+
onTaskClick: handleTaskClick,
|
|
119
|
+
projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
|
|
120
|
+
isDragDisabled: !onTaskReorder || isReadOnly,
|
|
121
|
+
isTaskLoading: loadingTaskIds?.has(task.id),
|
|
122
|
+
...hasContextMenu && !isReadOnly && {
|
|
123
|
+
getContextMenuItems: buildContextMenuItems
|
|
124
|
+
}
|
|
125
|
+
}, task.id);
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
})
|
|
129
|
+
]
|
|
130
|
+
}, `group-${groupIndex}`);
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
}),
|
|
134
|
+
/*#__PURE__*/ jsx(StageTaskDragOverlay, {
|
|
135
|
+
activeTask: activeSequentialTask?.task,
|
|
136
|
+
isActiveTaskParallel: isActiveTaskParallel,
|
|
137
|
+
taskWidthStyle: taskWidthStyle
|
|
138
|
+
})
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
export { StageNodeSequentialTaskGroups };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
StageTaskEntryConditionIcon: ()=>StageTaskEntryConditionIcon
|
|
28
|
+
});
|
|
29
|
+
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
30
|
+
const index_cjs_namespaceObject = require("../../icons/index.cjs");
|
|
31
|
+
const external_CanvasTooltip_cjs_namespaceObject = require("../CanvasTooltip.cjs");
|
|
32
|
+
const StageTaskEntryConditionIcon = ({ task })=>{
|
|
33
|
+
if (!task.hasEntryCondition) return null;
|
|
34
|
+
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_CanvasTooltip_cjs_namespaceObject.CanvasTooltip, {
|
|
35
|
+
content: "Entry condition",
|
|
36
|
+
placement: "top",
|
|
37
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
|
|
38
|
+
style: {
|
|
39
|
+
display: 'flex',
|
|
40
|
+
alignItems: 'center',
|
|
41
|
+
color: 'var(--color-icon-default)',
|
|
42
|
+
flexShrink: 0
|
|
43
|
+
},
|
|
44
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.EntryConditionIcon, {
|
|
45
|
+
w: 20,
|
|
46
|
+
h: 20
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
exports.StageTaskEntryConditionIcon = __webpack_exports__.StageTaskEntryConditionIcon;
|
|
52
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
53
|
+
"StageTaskEntryConditionIcon"
|
|
54
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
55
|
+
Object.defineProperty(exports, '__esModule', {
|
|
56
|
+
value: true
|
|
57
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StageTaskEntryConditionIcon.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageTaskEntryConditionIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,eAAO,MAAM,2BAA2B,GAAI,UAAU;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,mDAkB5E,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { EntryConditionIcon } from "../../icons/index.js";
|
|
3
|
+
import { CanvasTooltip } from "../CanvasTooltip.js";
|
|
4
|
+
const StageTaskEntryConditionIcon = ({ task })=>{
|
|
5
|
+
if (!task.hasEntryCondition) return null;
|
|
6
|
+
return /*#__PURE__*/ jsx(CanvasTooltip, {
|
|
7
|
+
content: "Entry condition",
|
|
8
|
+
placement: "top",
|
|
9
|
+
children: /*#__PURE__*/ jsx("span", {
|
|
10
|
+
style: {
|
|
11
|
+
display: 'flex',
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
color: 'var(--color-icon-default)',
|
|
14
|
+
flexShrink: 0
|
|
15
|
+
},
|
|
16
|
+
children: /*#__PURE__*/ jsx(EntryConditionIcon, {
|
|
17
|
+
w: 20,
|
|
18
|
+
h: 20
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
export { StageTaskEntryConditionIcon };
|