@uipath/apollo-react 3.68.1 → 3.68.3

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.
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ AdhocTaskItem: ()=>AdhocTaskItem
37
+ });
38
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
39
+ const apollo_core_namespaceObject = require("@uipath/apollo-core");
40
+ const index_cjs_namespaceObject = require("../../../material/index.cjs");
41
+ const external_debounce_namespaceObject = require("debounce");
42
+ var external_debounce_default = /*#__PURE__*/ __webpack_require__.n(external_debounce_namespaceObject);
43
+ const external_react_namespaceObject = require("react");
44
+ const external_icons_index_cjs_namespaceObject = require("../../icons/index.cjs");
45
+ const external_DraggableTask_cjs_namespaceObject = require("./DraggableTask.cjs");
46
+ const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
47
+ const external_TaskMenu_cjs_namespaceObject = require("./TaskMenu.cjs");
48
+ const AdhocTaskPlayButton = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ taskId, onTaskPlay })=>{
49
+ const [playLoading, setPlayLoading] = (0, external_react_namespaceObject.useState)(false);
50
+ const debouncedTaskPlay = (0, external_react_namespaceObject.useMemo)(()=>external_debounce_default()(async (id)=>{
51
+ setPlayLoading(true);
52
+ try {
53
+ await onTaskPlay(id);
54
+ } catch {} finally{
55
+ setPlayLoading(false);
56
+ }
57
+ }, 500, {
58
+ immediate: true
59
+ }), [
60
+ onTaskPlay
61
+ ]);
62
+ const handlePlayClick = (0, external_react_namespaceObject.useCallback)((e)=>{
63
+ e.stopPropagation();
64
+ e.preventDefault();
65
+ debouncedTaskPlay(taskId);
66
+ }, [
67
+ debouncedTaskPlay,
68
+ taskId
69
+ ]);
70
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ApTooltip, {
71
+ content: "Trigger task",
72
+ placement: "top",
73
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ApIconButton, {
74
+ "data-testid": `stage-task-play-${taskId}`,
75
+ onClick: handlePlayClick,
76
+ onMouseDown: (e)=>e.stopPropagation(),
77
+ onKeyDown: (e)=>e.stopPropagation(),
78
+ className: "task-menu-icon-button",
79
+ sx: {
80
+ color: 'var(--uix-canvas-primary) !important',
81
+ minWidth: 'unset !important',
82
+ width: `${apollo_core_namespaceObject.Spacing.SpacingL} !important`,
83
+ height: `${apollo_core_namespaceObject.Spacing.SpacingL} !important`,
84
+ padding: '0 !important'
85
+ },
86
+ children: playLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ApCircularProgress, {
87
+ size: 20
88
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_icons_index_cjs_namespaceObject.PlayIcon, {
89
+ w: 20,
90
+ h: 20
91
+ })
92
+ })
93
+ });
94
+ });
95
+ const AdhocTaskItemComponent = ({ task, taskExecution, isSelected, contextMenuItems, onTaskClick, onTaskPlay, onMenuOpen })=>{
96
+ const [isMenuOpen, setIsMenuOpen] = (0, external_react_namespaceObject.useState)(false);
97
+ const taskRef = (0, external_react_namespaceObject.useRef)(null);
98
+ const menuRef = (0, external_react_namespaceObject.useRef)(null);
99
+ const handleClick = (0, external_react_namespaceObject.useCallback)((e)=>{
100
+ if (isMenuOpen) return;
101
+ onTaskClick(e, task.id);
102
+ }, [
103
+ isMenuOpen,
104
+ onTaskClick,
105
+ task.id
106
+ ]);
107
+ const handleMenuOpenChange = (0, external_react_namespaceObject.useCallback)((isOpen)=>{
108
+ setIsMenuOpen(isOpen);
109
+ }, []);
110
+ const handleContextMenu = (0, external_react_namespaceObject.useCallback)((e)=>{
111
+ menuRef.current?.handleContextMenu(e);
112
+ }, []);
113
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
114
+ ref: taskRef,
115
+ "data-testid": `stage-task-${task.id}`,
116
+ selected: isSelected,
117
+ status: taskExecution?.status,
118
+ onClick: handleClick,
119
+ ...contextMenuItems.length > 0 && {
120
+ onContextMenu: handleContextMenu
121
+ },
122
+ children: [
123
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
124
+ task: task,
125
+ taskExecution: taskExecution
126
+ }),
127
+ onTaskPlay && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(AdhocTaskPlayButton, {
128
+ taskId: task.id,
129
+ onTaskPlay: onTaskPlay
130
+ }),
131
+ contextMenuItems.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_TaskMenu_cjs_namespaceObject.TaskMenu, {
132
+ ref: menuRef,
133
+ taskId: task.id,
134
+ contextMenuItems: contextMenuItems,
135
+ onMenuOpenChange: handleMenuOpenChange,
136
+ onMenuOpen: onMenuOpen,
137
+ taskRef: taskRef
138
+ })
139
+ ]
140
+ });
141
+ };
142
+ const AdhocTaskItem = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(AdhocTaskItemComponent);
143
+ exports.AdhocTaskItem = __webpack_exports__.AdhocTaskItem;
144
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
145
+ "AdhocTaskItem"
146
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
147
+ Object.defineProperty(exports, '__esModule', {
148
+ value: true
149
+ });
@@ -0,0 +1,14 @@
1
+ import type { NodeMenuItem } from '../NodeContextMenu';
2
+ import type { StageTaskExecution, StageTaskItem } from './StageNode.types';
3
+ interface AdhocTaskItemProps {
4
+ task: StageTaskItem;
5
+ taskExecution?: StageTaskExecution;
6
+ isSelected: boolean;
7
+ contextMenuItems: NodeMenuItem[];
8
+ onTaskClick: (e: React.MouseEvent, taskId: string) => void;
9
+ onTaskPlay?: (taskId: string) => Promise<void>;
10
+ onMenuOpen?: () => void;
11
+ }
12
+ export declare const AdhocTaskItem: import("react").MemoExoticComponent<({ task, taskExecution, isSelected, contextMenuItems, onTaskClick, onTaskPlay, onMenuOpen, }: AdhocTaskItemProps) => import("react/jsx-runtime").JSX.Element>;
13
+ export {};
14
+ //# sourceMappingURL=AdhocTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdhocTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/AdhocTask.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA0D3E,UAAU,kBAAkB;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAwDD,eAAO,MAAM,aAAa,oIA9CvB,kBAAkB,6CA8CoC,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Spacing } from "@uipath/apollo-core";
3
+ import { ApCircularProgress, ApIconButton, ApTooltip } from "../../../material/index.js";
4
+ import debounce from "debounce";
5
+ import { memo, useCallback, useMemo, useRef, useState } from "react";
6
+ import { PlayIcon } from "../../icons/index.js";
7
+ import { TaskContent } from "./DraggableTask.js";
8
+ import { StageTask } from "./StageNode.styles.js";
9
+ import { TaskMenu } from "./TaskMenu.js";
10
+ const AdhocTaskPlayButton = /*#__PURE__*/ memo(({ taskId, onTaskPlay })=>{
11
+ const [playLoading, setPlayLoading] = useState(false);
12
+ const debouncedTaskPlay = useMemo(()=>debounce(async (id)=>{
13
+ setPlayLoading(true);
14
+ try {
15
+ await onTaskPlay(id);
16
+ } catch {} finally{
17
+ setPlayLoading(false);
18
+ }
19
+ }, 500, {
20
+ immediate: true
21
+ }), [
22
+ onTaskPlay
23
+ ]);
24
+ const handlePlayClick = useCallback((e)=>{
25
+ e.stopPropagation();
26
+ e.preventDefault();
27
+ debouncedTaskPlay(taskId);
28
+ }, [
29
+ debouncedTaskPlay,
30
+ taskId
31
+ ]);
32
+ return /*#__PURE__*/ jsx(ApTooltip, {
33
+ content: "Trigger task",
34
+ placement: "top",
35
+ children: /*#__PURE__*/ jsx(ApIconButton, {
36
+ "data-testid": `stage-task-play-${taskId}`,
37
+ onClick: handlePlayClick,
38
+ onMouseDown: (e)=>e.stopPropagation(),
39
+ onKeyDown: (e)=>e.stopPropagation(),
40
+ className: "task-menu-icon-button",
41
+ sx: {
42
+ color: 'var(--uix-canvas-primary) !important',
43
+ minWidth: 'unset !important',
44
+ width: `${Spacing.SpacingL} !important`,
45
+ height: `${Spacing.SpacingL} !important`,
46
+ padding: '0 !important'
47
+ },
48
+ children: playLoading ? /*#__PURE__*/ jsx(ApCircularProgress, {
49
+ size: 20
50
+ }) : /*#__PURE__*/ jsx(PlayIcon, {
51
+ w: 20,
52
+ h: 20
53
+ })
54
+ })
55
+ });
56
+ });
57
+ const AdhocTaskItemComponent = ({ task, taskExecution, isSelected, contextMenuItems, onTaskClick, onTaskPlay, onMenuOpen })=>{
58
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
59
+ const taskRef = useRef(null);
60
+ const menuRef = useRef(null);
61
+ const handleClick = useCallback((e)=>{
62
+ if (isMenuOpen) return;
63
+ onTaskClick(e, task.id);
64
+ }, [
65
+ isMenuOpen,
66
+ onTaskClick,
67
+ task.id
68
+ ]);
69
+ const handleMenuOpenChange = useCallback((isOpen)=>{
70
+ setIsMenuOpen(isOpen);
71
+ }, []);
72
+ const handleContextMenu = useCallback((e)=>{
73
+ menuRef.current?.handleContextMenu(e);
74
+ }, []);
75
+ return /*#__PURE__*/ jsxs(StageTask, {
76
+ ref: taskRef,
77
+ "data-testid": `stage-task-${task.id}`,
78
+ selected: isSelected,
79
+ status: taskExecution?.status,
80
+ onClick: handleClick,
81
+ ...contextMenuItems.length > 0 && {
82
+ onContextMenu: handleContextMenu
83
+ },
84
+ children: [
85
+ /*#__PURE__*/ jsx(TaskContent, {
86
+ task: task,
87
+ taskExecution: taskExecution
88
+ }),
89
+ onTaskPlay && /*#__PURE__*/ jsx(AdhocTaskPlayButton, {
90
+ taskId: task.id,
91
+ onTaskPlay: onTaskPlay
92
+ }),
93
+ contextMenuItems.length > 0 && /*#__PURE__*/ jsx(TaskMenu, {
94
+ ref: menuRef,
95
+ taskId: task.id,
96
+ contextMenuItems: contextMenuItems,
97
+ onMenuOpenChange: handleMenuOpenChange,
98
+ onMenuOpen: onMenuOpen,
99
+ taskRef: taskRef
100
+ })
101
+ ]
102
+ });
103
+ };
104
+ const AdhocTaskItem = /*#__PURE__*/ memo(AdhocTaskItemComponent);
105
+ export { AdhocTaskItem };
@@ -1,14 +1,5 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.n = (module)=>{
5
- var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
- __webpack_require__.d(getter, {
7
- a: getter
8
- });
9
- return getter;
10
- };
11
- })();
12
3
  (()=>{
13
4
  __webpack_require__.d = (exports1, definition)=>{
14
5
  for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
@@ -42,11 +33,10 @@ const apollo_core_namespaceObject = require("@uipath/apollo-core");
42
33
  const index_cjs_namespaceObject = require("../../layouts/index.cjs");
43
34
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
44
35
  const external_material_index_cjs_namespaceObject = require("../../../material/index.cjs");
45
- const external_debounce_namespaceObject = require("debounce");
46
- var external_debounce_default = /*#__PURE__*/ __webpack_require__.n(external_debounce_namespaceObject);
47
36
  const external_react_namespaceObject = require("react");
48
37
  const external_react_dom_namespaceObject = require("react-dom");
49
38
  const external_icons_index_cjs_namespaceObject = require("../../icons/index.cjs");
39
+ const GroupModificationUtils_cjs_namespaceObject = require("../../utils/GroupModificationUtils.cjs");
50
40
  const ConnectedHandlesContext_cjs_namespaceObject = require("../BaseCanvas/ConnectedHandlesContext.cjs");
51
41
  const useButtonHandles_cjs_namespaceObject = require("../ButtonHandle/useButtonHandles.cjs");
52
42
  const external_ExecutionStatusIcon_index_cjs_namespaceObject = require("../ExecutionStatusIcon/index.cjs");
@@ -54,6 +44,7 @@ const external_FloatingCanvasPanel_index_cjs_namespaceObject = require("../Float
54
44
  const external_NodeContextMenu_index_cjs_namespaceObject = require("../NodeContextMenu/index.cjs");
55
45
  const hooks_index_cjs_namespaceObject = require("../NodePropertiesPanel/hooks/index.cjs");
56
46
  const external_Toolbox_index_cjs_namespaceObject = require("../Toolbox/index.cjs");
47
+ const external_AdhocTask_cjs_namespaceObject = require("./AdhocTask.cjs");
57
48
  const external_DraggableTask_cjs_namespaceObject = require("./DraggableTask.cjs");
58
49
  const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
59
50
  const external_StageNode_types_cjs_namespaceObject = require("./StageNode.types.cjs");
@@ -81,53 +72,6 @@ const CHIP_ICONS = {
81
72
  size: apollo_core_namespaceObject.Icon.IconXs
82
73
  })
83
74
  };
84
- const AdhocTaskPlayButton = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ taskId, onTaskPlay })=>{
85
- const [playLoading, setPlayLoading] = (0, external_react_namespaceObject.useState)(false);
86
- const debouncedTaskPlay = (0, external_react_namespaceObject.useMemo)(()=>external_debounce_default()(async (id)=>{
87
- setPlayLoading(true);
88
- try {
89
- await onTaskPlay(id);
90
- } catch {} finally{
91
- setPlayLoading(false);
92
- }
93
- }, 500, {
94
- immediate: true
95
- }), [
96
- onTaskPlay
97
- ]);
98
- const handlePlayClick = (0, external_react_namespaceObject.useCallback)((e)=>{
99
- e.stopPropagation();
100
- e.preventDefault();
101
- debouncedTaskPlay(taskId);
102
- }, [
103
- debouncedTaskPlay,
104
- taskId
105
- ]);
106
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
107
- content: "Trigger task",
108
- placement: "top",
109
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIconButton, {
110
- "data-testid": `stage-task-play-${taskId}`,
111
- onClick: handlePlayClick,
112
- onMouseDown: (e)=>e.stopPropagation(),
113
- onKeyDown: (e)=>e.stopPropagation(),
114
- className: "task-menu-icon-button",
115
- sx: {
116
- color: 'var(--uix-canvas-primary) !important',
117
- minWidth: 'unset !important',
118
- width: `${apollo_core_namespaceObject.Spacing.SpacingL} !important`,
119
- height: `${apollo_core_namespaceObject.Spacing.SpacingL} !important`,
120
- padding: '0 !important'
121
- },
122
- children: playLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApCircularProgress, {
123
- size: 20
124
- }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_icons_index_cjs_namespaceObject.PlayIcon, {
125
- w: 20,
126
- h: 20
127
- })
128
- })
129
- });
130
- });
131
75
  const StageNodeComponent = (props)=>{
132
76
  const { dragging, selected, id, width, execution, stageDetails, addTaskLabel = 'Add task', addTaskLoading = false, replaceTaskLabel = 'Replace task', taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox, onTaskPlay, hideParallelOptions } = props;
133
77
  const taskWidth = width ? width - external_StageNode_styles_cjs_namespaceObject.STAGE_CONTENT_INSET : void 0;
@@ -137,7 +81,11 @@ const StageNodeComponent = (props)=>{
137
81
  const tasks = (0, external_react_namespaceObject.useMemo)(()=>allTasks.filter((group)=>group.some((t)=>!t.isAdhoc)), [
138
82
  allTasks
139
83
  ]);
140
- const adhocTasks = (0, external_react_namespaceObject.useMemo)(()=>allTasks.flat().filter((t)=>t.isAdhoc), [
84
+ const adhocTasks = (0, external_react_namespaceObject.useMemo)(()=>allTasks.flatMap((group, groupIndex)=>group.map((task, taskIndex)=>({
85
+ task,
86
+ groupIndex,
87
+ taskIndex
88
+ })).filter(({ task })=>task.isAdhoc)), [
141
89
  allTasks
142
90
  ]);
143
91
  const flatTasks = (0, external_react_namespaceObject.useMemo)(()=>tasks.flat(), [
@@ -321,6 +269,28 @@ const StageNodeComponent = (props)=>{
321
269
  tasks,
322
270
  hideParallelOptions
323
271
  ]);
272
+ const getAdhocContextMenuItems = (0, external_react_namespaceObject.useCallback)((groupIndex, taskIndex, taskId)=>{
273
+ const items = [];
274
+ if (onReplaceTaskFromToolbox) items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getMenuItem)('replace-task', 'Replace task', ()=>{
275
+ taskStateReference.current = {
276
+ isParallel: false,
277
+ groupIndex,
278
+ taskIndex
279
+ };
280
+ onTaskClick?.(taskId);
281
+ setIsReplacingTask(true);
282
+ }));
283
+ if (onTaskGroupModification) {
284
+ if (items.length > 0) items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)());
285
+ items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getMenuItem)('remove-task', 'Delete task', ()=>reGroupTaskFunction(GroupModificationUtils_cjs_namespaceObject.GroupModificationType.REMOVE_TASK, groupIndex, taskIndex)));
286
+ }
287
+ return items;
288
+ }, [
289
+ onReplaceTaskFromToolbox,
290
+ onTaskClick,
291
+ onTaskGroupModification,
292
+ reGroupTaskFunction
293
+ ]);
324
294
  const { setSelectedNodeId } = (0, hooks_index_cjs_namespaceObject.useNodeSelection)();
325
295
  const handleStageClick = (0, external_react_namespaceObject.useCallback)(()=>{
326
296
  onStageClick?.();
@@ -505,6 +475,7 @@ const StageNodeComponent = (props)=>{
505
475
  children: [
506
476
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageHeader, {
507
477
  isException: isException,
478
+ "data-testid": `stage-header-${id}`,
508
479
  children: [
509
480
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
510
481
  gap: apollo_core_namespaceObject.Spacing.SpacingMicro,
@@ -724,23 +695,25 @@ const StageNodeComponent = (props)=>{
724
695
  })
725
696
  }),
726
697
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
727
- children: adhocTasks.map((task)=>{
698
+ children: adhocTasks.map(({ task, groupIndex, taskIndex })=>{
728
699
  const taskExecution = execution?.taskStatus?.[task.id];
729
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
730
- "data-testid": `stage-task-${task.id}`,
731
- selected: selectedTaskId === task.id,
732
- status: taskExecution?.status,
733
- onClick: (e)=>handleTaskClick(e, task.id),
734
- children: [
735
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
736
- task: task,
737
- taskExecution: taskExecution
738
- }),
739
- onTaskPlay && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(AdhocTaskPlayButton, {
740
- taskId: task.id,
741
- onTaskPlay: onTaskPlay
742
- })
743
- ]
700
+ const menuItems = getAdhocContextMenuItems(groupIndex, taskIndex, task.id);
701
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_AdhocTask_cjs_namespaceObject.AdhocTaskItem, {
702
+ task: task,
703
+ taskExecution: taskExecution,
704
+ isSelected: selectedTaskId === task.id,
705
+ contextMenuItems: menuItems,
706
+ onTaskClick: handleTaskClick,
707
+ onTaskPlay: onTaskPlay,
708
+ ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
709
+ onMenuOpen: ()=>{
710
+ taskStateReference.current = {
711
+ isParallel: false,
712
+ groupIndex,
713
+ taskIndex
714
+ };
715
+ }
716
+ }
744
717
  }, task.id);
745
718
  })
746
719
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgzBxD,eAAO,MAAM,SAAS,8CAtuBa,cAAc,6CAsuBA,CAAC"}
1
+ {"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsyBxD,eAAO,MAAM,SAAS,8CAnxBa,cAAc,6CAmxBA,CAAC"}
@@ -4,11 +4,11 @@ import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrate
4
4
  import { FontVariantToken, Icon, Padding, Spacing } from "@uipath/apollo-core";
5
5
  import { Column, Row } from "../../layouts/index.js";
6
6
  import { Position, useStore, useViewport } from "../../xyflow/react.js";
7
- import { ApCircularProgress, ApIcon, ApIconButton, ApLink, ApTooltip, ApTypography } from "../../../material/index.js";
8
- import debounce from "debounce";
7
+ import { ApIcon, ApIconButton, ApLink, ApTooltip, ApTypography } from "../../../material/index.js";
9
8
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
10
9
  import { createPortal } from "react-dom";
11
- import { EntryConditionIcon, ExitConditionIcon, PlayIcon, ReturnToOriginIcon } from "../../icons/index.js";
10
+ import { EntryConditionIcon, ExitConditionIcon, ReturnToOriginIcon } from "../../icons/index.js";
11
+ import { GroupModificationType } from "../../utils/GroupModificationUtils.js";
12
12
  import { useConnectedHandles } from "../BaseCanvas/ConnectedHandlesContext.js";
13
13
  import { useButtonHandles } from "../ButtonHandle/useButtonHandles.js";
14
14
  import { ExecutionStatusIcon } from "../ExecutionStatusIcon/index.js";
@@ -16,6 +16,7 @@ import { FloatingCanvasPanel } from "../FloatingCanvasPanel/index.js";
16
16
  import { NodeContextMenu } from "../NodeContextMenu/index.js";
17
17
  import { useNodeSelection } from "../NodePropertiesPanel/hooks/index.js";
18
18
  import { Toolbox } from "../Toolbox/index.js";
19
+ import { AdhocTaskItem } from "./AdhocTask.js";
19
20
  import { DraggableTask, TaskContent } from "./DraggableTask.js";
20
21
  import { INDENTATION_WIDTH, STAGE_CONTENT_INSET, StageAdhocHeaderSection, StageAdhocSection, StageChip, StageContainer, StageContent, StageHeader, StageHeaderChipsRow, StageParallelBracket, StageParallelLabel, StageTask, StageTaskGroup, StageTaskList, StageTitleContainer, StageTitleInput } from "./StageNode.styles.js";
21
22
  import { StageHeaderChipType } from "./StageNode.types.js";
@@ -43,53 +44,6 @@ const CHIP_ICONS = {
43
44
  size: Icon.IconXs
44
45
  })
45
46
  };
46
- const AdhocTaskPlayButton = /*#__PURE__*/ memo(({ taskId, onTaskPlay })=>{
47
- const [playLoading, setPlayLoading] = useState(false);
48
- const debouncedTaskPlay = useMemo(()=>debounce(async (id)=>{
49
- setPlayLoading(true);
50
- try {
51
- await onTaskPlay(id);
52
- } catch {} finally{
53
- setPlayLoading(false);
54
- }
55
- }, 500, {
56
- immediate: true
57
- }), [
58
- onTaskPlay
59
- ]);
60
- const handlePlayClick = useCallback((e)=>{
61
- e.stopPropagation();
62
- e.preventDefault();
63
- debouncedTaskPlay(taskId);
64
- }, [
65
- debouncedTaskPlay,
66
- taskId
67
- ]);
68
- return /*#__PURE__*/ jsx(ApTooltip, {
69
- content: "Trigger task",
70
- placement: "top",
71
- children: /*#__PURE__*/ jsx(ApIconButton, {
72
- "data-testid": `stage-task-play-${taskId}`,
73
- onClick: handlePlayClick,
74
- onMouseDown: (e)=>e.stopPropagation(),
75
- onKeyDown: (e)=>e.stopPropagation(),
76
- className: "task-menu-icon-button",
77
- sx: {
78
- color: 'var(--uix-canvas-primary) !important',
79
- minWidth: 'unset !important',
80
- width: `${Spacing.SpacingL} !important`,
81
- height: `${Spacing.SpacingL} !important`,
82
- padding: '0 !important'
83
- },
84
- children: playLoading ? /*#__PURE__*/ jsx(ApCircularProgress, {
85
- size: 20
86
- }) : /*#__PURE__*/ jsx(PlayIcon, {
87
- w: 20,
88
- h: 20
89
- })
90
- })
91
- });
92
- });
93
47
  const StageNodeComponent = (props)=>{
94
48
  const { dragging, selected, id, width, execution, stageDetails, addTaskLabel = 'Add task', addTaskLoading = false, replaceTaskLabel = 'Replace task', taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox, onTaskPlay, hideParallelOptions } = props;
95
49
  const taskWidth = width ? width - STAGE_CONTENT_INSET : void 0;
@@ -99,7 +53,11 @@ const StageNodeComponent = (props)=>{
99
53
  const tasks = useMemo(()=>allTasks.filter((group)=>group.some((t)=>!t.isAdhoc)), [
100
54
  allTasks
101
55
  ]);
102
- const adhocTasks = useMemo(()=>allTasks.flat().filter((t)=>t.isAdhoc), [
56
+ const adhocTasks = useMemo(()=>allTasks.flatMap((group, groupIndex)=>group.map((task, taskIndex)=>({
57
+ task,
58
+ groupIndex,
59
+ taskIndex
60
+ })).filter(({ task })=>task.isAdhoc)), [
103
61
  allTasks
104
62
  ]);
105
63
  const flatTasks = useMemo(()=>tasks.flat(), [
@@ -283,6 +241,28 @@ const StageNodeComponent = (props)=>{
283
241
  tasks,
284
242
  hideParallelOptions
285
243
  ]);
244
+ const getAdhocContextMenuItems = useCallback((groupIndex, taskIndex, taskId)=>{
245
+ const items = [];
246
+ if (onReplaceTaskFromToolbox) items.push(getMenuItem('replace-task', 'Replace task', ()=>{
247
+ taskStateReference.current = {
248
+ isParallel: false,
249
+ groupIndex,
250
+ taskIndex
251
+ };
252
+ onTaskClick?.(taskId);
253
+ setIsReplacingTask(true);
254
+ }));
255
+ if (onTaskGroupModification) {
256
+ if (items.length > 0) items.push(getDivider());
257
+ items.push(getMenuItem('remove-task', 'Delete task', ()=>reGroupTaskFunction(GroupModificationType.REMOVE_TASK, groupIndex, taskIndex)));
258
+ }
259
+ return items;
260
+ }, [
261
+ onReplaceTaskFromToolbox,
262
+ onTaskClick,
263
+ onTaskGroupModification,
264
+ reGroupTaskFunction
265
+ ]);
286
266
  const { setSelectedNodeId } = useNodeSelection();
287
267
  const handleStageClick = useCallback(()=>{
288
268
  onStageClick?.();
@@ -467,6 +447,7 @@ const StageNodeComponent = (props)=>{
467
447
  children: [
468
448
  /*#__PURE__*/ jsxs(StageHeader, {
469
449
  isException: isException,
450
+ "data-testid": `stage-header-${id}`,
470
451
  children: [
471
452
  /*#__PURE__*/ jsxs(Row, {
472
453
  gap: Spacing.SpacingMicro,
@@ -686,23 +667,25 @@ const StageNodeComponent = (props)=>{
686
667
  })
687
668
  }),
688
669
  /*#__PURE__*/ jsx(StageTaskList, {
689
- children: adhocTasks.map((task)=>{
670
+ children: adhocTasks.map(({ task, groupIndex, taskIndex })=>{
690
671
  const taskExecution = execution?.taskStatus?.[task.id];
691
- return /*#__PURE__*/ jsxs(StageTask, {
692
- "data-testid": `stage-task-${task.id}`,
693
- selected: selectedTaskId === task.id,
694
- status: taskExecution?.status,
695
- onClick: (e)=>handleTaskClick(e, task.id),
696
- children: [
697
- /*#__PURE__*/ jsx(TaskContent, {
698
- task: task,
699
- taskExecution: taskExecution
700
- }),
701
- onTaskPlay && /*#__PURE__*/ jsx(AdhocTaskPlayButton, {
702
- taskId: task.id,
703
- onTaskPlay: onTaskPlay
704
- })
705
- ]
672
+ const menuItems = getAdhocContextMenuItems(groupIndex, taskIndex, task.id);
673
+ return /*#__PURE__*/ jsx(AdhocTaskItem, {
674
+ task: task,
675
+ taskExecution: taskExecution,
676
+ isSelected: selectedTaskId === task.id,
677
+ contextMenuItems: menuItems,
678
+ onTaskClick: handleTaskClick,
679
+ onTaskPlay: onTaskPlay,
680
+ ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
681
+ onMenuOpen: ()=>{
682
+ taskStateReference.current = {
683
+ isParallel: false,
684
+ groupIndex,
685
+ taskIndex
686
+ };
687
+ }
688
+ }
706
689
  }, task.id);
707
690
  })
708
691
  })
@@ -2155,7 +2155,7 @@ const AdhocTasks = {
2155
2155
  width: 304,
2156
2156
  data: {
2157
2157
  stageDetails: {
2158
- label: 'Without onTaskPlay',
2158
+ label: 'Without onTaskPlay and Menu',
2159
2159
  tasks: [
2160
2160
  [
2161
2161
  {
@@ -2185,6 +2185,12 @@ const AdhocTasks = {
2185
2185
  },
2186
2186
  onTaskClick: (taskId)=>{
2187
2187
  window.alert(`Task clicked: ${taskId}`);
2188
+ },
2189
+ onTaskGroupModification: (type, groupIndex, taskIndex)=>{
2190
+ console.log(`Task group modification: ${type}, group: ${groupIndex}, task: ${taskIndex}`);
2191
+ },
2192
+ onReplaceTaskFromToolbox: (task, groupIndex, taskIndex)=>{
2193
+ console.log(`Replace task at group: ${groupIndex}, task: ${taskIndex}`, task);
2188
2194
  }
2189
2195
  }
2190
2196
  },
@@ -1 +1 @@
1
- {"version":3,"file":"StageNode.stories.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAyBvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CA0FD,CAAC;AAEjC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA4CnC,eAAO,MAAM,OAAO,EAAE,KAoHrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA8M7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KA+HvC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAoKpC,CAAC;AA8GF,eAAO,MAAM,uBAAuB,EAAE,KAOrC,CAAC;AAkVF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AA2HF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AA0KF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAuHxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAkO3B,CAAC"}
1
+ {"version":3,"file":"StageNode.stories.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAyBvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CA0FD,CAAC;AAEjC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA4CnC,eAAO,MAAM,OAAO,EAAE,KAoHrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA8M7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KA+HvC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAoKpC,CAAC;AA8GF,eAAO,MAAM,uBAAuB,EAAE,KAOrC,CAAC;AAkVF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AA2HF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AA0KF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA+HxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAkO3B,CAAC"}
@@ -2116,7 +2116,7 @@ const AdhocTasks = {
2116
2116
  width: 304,
2117
2117
  data: {
2118
2118
  stageDetails: {
2119
- label: 'Without onTaskPlay',
2119
+ label: 'Without onTaskPlay and Menu',
2120
2120
  tasks: [
2121
2121
  [
2122
2122
  {
@@ -2146,6 +2146,12 @@ const AdhocTasks = {
2146
2146
  },
2147
2147
  onTaskClick: (taskId)=>{
2148
2148
  window.alert(`Task clicked: ${taskId}`);
2149
+ },
2150
+ onTaskGroupModification: (type, groupIndex, taskIndex)=>{
2151
+ console.log(`Task group modification: ${type}, group: ${groupIndex}, task: ${taskIndex}`);
2152
+ },
2153
+ onReplaceTaskFromToolbox: (task, groupIndex, taskIndex)=>{
2154
+ console.log(`Replace task at group: ${groupIndex}, task: ${taskIndex}`, task);
2149
2155
  }
2150
2156
  }
2151
2157
  },
@@ -134,7 +134,7 @@ const StageTitleInput = styled_default().input`
134
134
  border-radius: 2px;
135
135
  width: 100%;
136
136
  min-width: 100px;
137
- padding: ${(props)=>props.isStageTitleEditable ? '0' : `${apollo_core_namespaceObject.Padding.PadS} 0px`};
137
+ padding: ${apollo_core_namespaceObject.Padding.PadS} 0px;
138
138
 
139
139
  &:focus {
140
140
  outline: none;
@@ -74,7 +74,7 @@ const StageTitleInput = styled.input`
74
74
  border-radius: 2px;
75
75
  width: 100%;
76
76
  min-width: 100px;
77
- padding: ${(props)=>props.isStageTitleEditable ? '0' : `${Padding.PadS} 0px`};
77
+ padding: ${Padding.PadS} 0px;
78
78
 
79
79
  &:focus {
80
80
  outline: none;
@@ -1 +1 @@
1
- {"version":3,"file":"TaskMenu.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/TaskMenu.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvE,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC/D;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC/C;AAqHD,eAAO,MAAM,QAAQ,qGAAsC,CAAC"}
1
+ {"version":3,"file":"TaskMenu.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/TaskMenu.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvE,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CAC/D;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC/C;AAqHD,eAAO,MAAM,QAAQ,qGAAsC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { StageConnectionEdge } from './StageConnectionEdge';
2
2
  export { StageEdge } from './StageEdge';
3
3
  export { StageNode } from './StageNode';
4
- export { StageHeaderChipType } from './StageNode.types';
5
4
  export type { StageHeaderChip, StageNodeProps, StageStatus, StageTaskItem, StageTaskStatus, } from './StageNode.types';
5
+ export { StageHeaderChipType } from './StageNode.types';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/apollo-react",
3
- "version": "3.68.1",
3
+ "version": "3.68.3",
4
4
  "description": "Apollo Design System - React component library with Material UI theming",
5
5
  "repository": {
6
6
  "type": "git",