@uipath/apollo-react 4.11.0 → 4.12.1

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.
Files changed (61) hide show
  1. package/dist/canvas/components/StageNode/DraggableTask.cjs +3 -17
  2. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
  3. package/dist/canvas/components/StageNode/DraggableTask.js +3 -17
  4. package/dist/canvas/components/StageNode/EventDrivenTask.cjs +80 -0
  5. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts +13 -0
  6. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts.map +1 -0
  7. package/dist/canvas/components/StageNode/EventDrivenTask.js +46 -0
  8. package/dist/canvas/components/StageNode/StageNode.cjs +29 -581
  9. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  10. package/dist/canvas/components/StageNode/StageNode.js +28 -580
  11. package/dist/canvas/components/StageNode/StageNode.styles.cjs +12 -12
  12. package/dist/canvas/components/StageNode/StageNode.styles.d.ts +3 -3
  13. package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
  14. package/dist/canvas/components/StageNode/StageNode.styles.js +4 -4
  15. package/dist/canvas/components/StageNode/StageNode.types.d.ts +11 -0
  16. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  17. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.cjs +98 -0
  18. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts +13 -0
  19. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts.map +1 -0
  20. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.js +64 -0
  21. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.cjs +129 -0
  22. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts +12 -0
  23. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts.map +1 -0
  24. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.js +95 -0
  25. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.cjs +97 -0
  26. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts +13 -0
  27. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts.map +1 -0
  28. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.js +63 -0
  29. package/dist/canvas/components/StageNode/StageNodeHandles.cjs +119 -0
  30. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts +8 -0
  31. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts.map +1 -0
  32. package/dist/canvas/components/StageNode/StageNodeHandles.js +85 -0
  33. package/dist/canvas/components/StageNode/StageNodeHeader.cjs +245 -0
  34. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts +9 -0
  35. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -0
  36. package/dist/canvas/components/StageNode/StageNodeHeader.js +211 -0
  37. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.cjs +176 -0
  38. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts +16 -0
  39. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts.map +1 -0
  40. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.js +142 -0
  41. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.cjs +57 -0
  42. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts +5 -0
  43. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts.map +1 -0
  44. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.js +23 -0
  45. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.cjs +117 -0
  46. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts +18 -0
  47. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts.map +1 -0
  48. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.js +83 -0
  49. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.cjs +87 -0
  50. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts +22 -0
  51. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts.map +1 -0
  52. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.js +53 -0
  53. package/dist/canvas/components/Toolbox/ListView.cjs +3 -2
  54. package/dist/canvas/components/Toolbox/ListView.d.ts +1 -0
  55. package/dist/canvas/components/Toolbox/ListView.d.ts.map +1 -1
  56. package/dist/canvas/components/Toolbox/ListView.js +3 -2
  57. package/dist/canvas/components/Toolbox/Toolbox.cjs +38 -9
  58. package/dist/canvas/components/Toolbox/Toolbox.d.ts.map +1 -1
  59. package/dist/canvas/components/Toolbox/Toolbox.js +38 -9
  60. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  61. 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,5 @@
1
+ import { StageTaskItem } from './StageNode.types';
2
+ export declare const StageTaskEntryConditionIcon: ({ task }: {
3
+ task: StageTaskItem;
4
+ }) => import("react/jsx-runtime").JSX.Element | null;
5
+ //# sourceMappingURL=StageTaskEntryConditionIcon.d.ts.map
@@ -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 };