@uipath/apollo-react 3.62.0 → 3.63.0-pr431.16bbfa4

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 (45) hide show
  1. package/dist/canvas/components/CanvasPerformance.stories.cjs +361 -0
  2. package/dist/canvas/components/CanvasPerformance.stories.d.ts +6 -0
  3. package/dist/canvas/components/CanvasPerformance.stories.d.ts.map +1 -0
  4. package/dist/canvas/components/CanvasPerformance.stories.js +324 -0
  5. package/dist/canvas/components/NodePropertiesPanel/hooks/index.cjs +4 -1
  6. package/dist/canvas/components/NodePropertiesPanel/hooks/index.d.ts +1 -1
  7. package/dist/canvas/components/NodePropertiesPanel/hooks/index.d.ts.map +1 -1
  8. package/dist/canvas/components/NodePropertiesPanel/hooks/index.js +2 -2
  9. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.cjs +27 -6
  10. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.d.ts +3 -0
  11. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.d.ts.map +1 -1
  12. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.js +23 -5
  13. package/dist/canvas/components/StageNode/DraggableTask.cjs +14 -5
  14. package/dist/canvas/components/StageNode/DraggableTask.d.ts +1 -1
  15. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
  16. package/dist/canvas/components/StageNode/DraggableTask.js +14 -5
  17. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts +3 -3
  18. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts.map +1 -1
  19. package/dist/canvas/components/StageNode/StageEdge.cjs +34 -11
  20. package/dist/canvas/components/StageNode/StageEdge.d.ts +2 -1
  21. package/dist/canvas/components/StageNode/StageEdge.d.ts.map +1 -1
  22. package/dist/canvas/components/StageNode/StageEdge.js +35 -12
  23. package/dist/canvas/components/StageNode/StageNode.cjs +78 -45
  24. package/dist/canvas/components/StageNode/StageNode.d.ts +1 -1
  25. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  26. package/dist/canvas/components/StageNode/StageNode.js +80 -47
  27. package/dist/canvas/components/StageNode/StageNode.stories.cjs +118 -135
  28. package/dist/canvas/components/StageNode/StageNode.stories.d.ts.map +1 -1
  29. package/dist/canvas/components/StageNode/StageNode.stories.js +115 -132
  30. package/dist/canvas/components/StageNode/StageNode.stories.utils.cjs +42 -0
  31. package/dist/canvas/components/StageNode/StageNode.stories.utils.d.ts +3 -0
  32. package/dist/canvas/components/StageNode/StageNode.stories.utils.d.ts.map +1 -0
  33. package/dist/canvas/components/StageNode/StageNode.stories.utils.js +8 -0
  34. package/dist/canvas/components/StageNode/StageNode.types.d.ts +9 -1
  35. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  36. package/dist/canvas/components/StageNode/TaskMenu.cjs +13 -17
  37. package/dist/canvas/components/StageNode/TaskMenu.d.ts +1 -2
  38. package/dist/canvas/components/StageNode/TaskMenu.d.ts.map +1 -1
  39. package/dist/canvas/components/StageNode/TaskMenu.js +14 -18
  40. package/dist/canvas/components/TaskIcon/TaskIcon.styles.cjs +1 -1
  41. package/dist/canvas/components/TaskIcon/TaskIcon.styles.js +1 -1
  42. package/dist/canvas/icons/CaseManagementProject.cjs +9 -18
  43. package/dist/canvas/icons/CaseManagementProject.d.ts.map +1 -1
  44. package/dist/canvas/icons/CaseManagementProject.js +9 -18
  45. package/package.json +1 -1
@@ -40,6 +40,7 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
40
40
  const styled_namespaceObject = require("@emotion/styled");
41
41
  var styled_default = /*#__PURE__*/ __webpack_require__.n(styled_namespaceObject);
42
42
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
43
+ const external_react_namespaceObject = require("react");
43
44
  const StageEdgeLabel = styled_default().div`
44
45
  position: absolute;
45
46
  color: var(--uix-canvas-foreground);
@@ -57,6 +58,9 @@ const StageEdgeLabel = styled_default().div`
57
58
  border-color: var(--uix-canvas-border-hover);
58
59
  }
59
60
  `;
61
+ function stageEdgeGeometryEquality(previous, next) {
62
+ return previous.sourceX === next.sourceX && previous.sourceY === next.sourceY && previous.targetX === next.targetX && previous.targetY === next.targetY;
63
+ }
60
64
  function getArrowFromBezier(path, arrowSize) {
61
65
  const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
62
66
  pathEl.setAttribute('d', path);
@@ -70,19 +74,13 @@ function getArrowFromBezier(path, arrowSize) {
70
74
  angle
71
75
  };
72
76
  }
73
- function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
74
- const sourceNode = (0, react_cjs_namespaceObject.useInternalNode)(rest.source);
75
- const targetNode = (0, react_cjs_namespaceObject.useInternalNode)(rest.target);
76
- const sourceNodeX = sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX;
77
- const sourceNodeY = sourceNode?.position.y ? sourceNode.position.y + 32 : sourceY;
78
- const targetNodeX = targetNode?.position.x ?? targetX;
79
- const targetNodeY = targetNode?.position.y ? targetNode.position.y + 32 : targetY;
77
+ function StageEdgeInner({ geometry, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
80
78
  const [pathData, labelX, labelY, _ex, _ey] = (0, react_cjs_namespaceObject.getSmoothStepPath)({
81
- sourceX: sourceNodeX,
82
- sourceY: sourceNodeY,
79
+ sourceX: geometry.sourceX,
80
+ sourceY: geometry.sourceY,
83
81
  sourcePosition,
84
- targetX: targetNodeX - 1,
85
- targetY: targetNodeY,
82
+ targetX: geometry.targetX - 1,
83
+ targetY: geometry.targetY,
86
84
  targetPosition,
87
85
  borderRadius: 40
88
86
  });
@@ -141,6 +139,31 @@ function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetP
141
139
  ]
142
140
  });
143
141
  }
142
+ const StageEdgeInnerMemo = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageEdgeInner);
143
+ function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }) {
144
+ const geometry = (0, react_cjs_namespaceObject.useStore)((state)=>{
145
+ const sourceNode = state.nodeLookup.get(rest.source);
146
+ const targetNode = state.nodeLookup.get(rest.target);
147
+ return {
148
+ sourceX: sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX,
149
+ sourceY: sourceNode ? sourceNode.position.y + 32 : sourceY,
150
+ targetX: targetNode?.position.x ?? targetX,
151
+ targetY: targetNode ? targetNode.position.y + 32 : targetY
152
+ };
153
+ }, stageEdgeGeometryEquality);
154
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageEdgeInnerMemo, {
155
+ geometry: geometry,
156
+ sourcePosition: sourcePosition,
157
+ targetPosition: targetPosition,
158
+ selected: selected,
159
+ style: style,
160
+ stroke: stroke,
161
+ strokeWidth: strokeWidth,
162
+ arrowSize: arrowSize,
163
+ ...rest
164
+ });
165
+ }
166
+ const StageEdge = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageEdgeComponent);
144
167
  exports.StageEdge = __webpack_exports__.StageEdge;
145
168
  exports.StageEdgeLabel = __webpack_exports__.StageEdgeLabel;
146
169
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -8,6 +8,7 @@ type Props = EdgeProps & {
8
8
  strokeWidth?: number;
9
9
  arrowSize?: number;
10
10
  };
11
- export declare function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
11
+ declare function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
12
+ export declare const StageEdge: import("react").MemoExoticComponent<typeof StageEdgeComponent>;
12
13
  export {};
13
14
  //# sourceMappingURL=StageEdge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StageEdge.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageEdge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAO1E,eAAO,MAAM,cAAc;;;yGAgB1B,CAAC;AAEF,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkBF,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAA2C,EAC3C,WAAe,EACf,SAAa,EACb,GAAG,IAAI,EACR,EAAE,KAAK,2CAiFP"}
1
+ {"version":3,"file":"StageEdge.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageEdge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,0CAA0C,CAAC;AAQ1F,eAAO,MAAM,cAAc;;;yGAgB1B,CAAC;AAEF,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA4HF,iBAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,KAAK,2CA0BP;AAED,eAAO,MAAM,SAAS,gEAA2B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import styled from "@emotion/styled";
3
- import { EdgeLabelRenderer, getSmoothStepPath, useInternalNode } from "../../xyflow/react.js";
3
+ import { EdgeLabelRenderer, getSmoothStepPath, useStore } from "../../xyflow/react.js";
4
+ import { memo } from "react";
4
5
  const StageEdgeLabel = styled.div`
5
6
  position: absolute;
6
7
  color: var(--uix-canvas-foreground);
@@ -18,6 +19,9 @@ const StageEdgeLabel = styled.div`
18
19
  border-color: var(--uix-canvas-border-hover);
19
20
  }
20
21
  `;
22
+ function stageEdgeGeometryEquality(previous, next) {
23
+ return previous.sourceX === next.sourceX && previous.sourceY === next.sourceY && previous.targetX === next.targetX && previous.targetY === next.targetY;
24
+ }
21
25
  function getArrowFromBezier(path, arrowSize) {
22
26
  const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
23
27
  pathEl.setAttribute('d', path);
@@ -31,19 +35,13 @@ function getArrowFromBezier(path, arrowSize) {
31
35
  angle
32
36
  };
33
37
  }
34
- function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
35
- const sourceNode = useInternalNode(rest.source);
36
- const targetNode = useInternalNode(rest.target);
37
- const sourceNodeX = sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX;
38
- const sourceNodeY = sourceNode?.position.y ? sourceNode.position.y + 32 : sourceY;
39
- const targetNodeX = targetNode?.position.x ?? targetX;
40
- const targetNodeY = targetNode?.position.y ? targetNode.position.y + 32 : targetY;
38
+ function StageEdgeInner({ geometry, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
41
39
  const [pathData, labelX, labelY, _ex, _ey] = getSmoothStepPath({
42
- sourceX: sourceNodeX,
43
- sourceY: sourceNodeY,
40
+ sourceX: geometry.sourceX,
41
+ sourceY: geometry.sourceY,
44
42
  sourcePosition,
45
- targetX: targetNodeX - 1,
46
- targetY: targetNodeY,
43
+ targetX: geometry.targetX - 1,
44
+ targetY: geometry.targetY,
47
45
  targetPosition,
48
46
  borderRadius: 40
49
47
  });
@@ -102,4 +100,29 @@ function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetP
102
100
  ]
103
101
  });
104
102
  }
103
+ const StageEdgeInnerMemo = /*#__PURE__*/ memo(StageEdgeInner);
104
+ function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }) {
105
+ const geometry = useStore((state)=>{
106
+ const sourceNode = state.nodeLookup.get(rest.source);
107
+ const targetNode = state.nodeLookup.get(rest.target);
108
+ return {
109
+ sourceX: sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX,
110
+ sourceY: sourceNode ? sourceNode.position.y + 32 : sourceY,
111
+ targetX: targetNode?.position.x ?? targetX,
112
+ targetY: targetNode ? targetNode.position.y + 32 : targetY
113
+ };
114
+ }, stageEdgeGeometryEquality);
115
+ return /*#__PURE__*/ jsx(StageEdgeInnerMemo, {
116
+ geometry: geometry,
117
+ sourcePosition: sourcePosition,
118
+ targetPosition: targetPosition,
119
+ selected: selected,
120
+ style: style,
121
+ stroke: stroke,
122
+ strokeWidth: strokeWidth,
123
+ arrowSize: arrowSize,
124
+ ...rest
125
+ });
126
+ }
127
+ const StageEdge = /*#__PURE__*/ memo(StageEdgeComponent);
105
128
  export { StageEdge, StageEdgeLabel };
@@ -46,7 +46,33 @@ const external_DraggableTask_cjs_namespaceObject = require("./DraggableTask.cjs"
46
46
  const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
47
47
  const external_StageNode_utils_cjs_namespaceObject = require("./StageNode.utils.cjs");
48
48
  const external_StageNodeTaskUtilities_cjs_namespaceObject = require("./StageNodeTaskUtilities.cjs");
49
- const StageNodeComponent = (props)=>{
49
+ const StageNode_StageTaskDragOverlay = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ activeTask, isActiveTaskParallel, taskWidthStyle }) {
50
+ const { zoom } = (0, react_cjs_namespaceObject.useViewport)();
51
+ const dragOverlayStyle = (0, external_react_namespaceObject.useMemo)(()=>({
52
+ transform: `scale(${zoom})`,
53
+ transformOrigin: 'top left'
54
+ }), [
55
+ zoom
56
+ ]);
57
+ return /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(core_namespaceObject.DragOverlay, {
58
+ children: activeTask ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
59
+ style: dragOverlayStyle,
60
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
61
+ selected: true,
62
+ isParallel: isActiveTaskParallel,
63
+ style: {
64
+ cursor: 'grabbing',
65
+ ...taskWidthStyle
66
+ },
67
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
68
+ task: activeTask,
69
+ isDragging: true
70
+ })
71
+ })
72
+ }) : null
73
+ }), document.body);
74
+ });
75
+ const StageNodeInner = (props)=>{
50
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 } = props;
51
77
  const taskWidth = width ? width - external_StageNode_styles_cjs_namespaceObject.STAGE_CONTENT_INSET : void 0;
52
78
  const tasks = (0, external_react_namespaceObject.useMemo)(()=>stageDetails?.tasks || [], [
@@ -66,9 +92,6 @@ const StageNodeComponent = (props)=>{
66
92
  const status = execution?.stageStatus?.status;
67
93
  const statusLabel = execution?.stageStatus?.label;
68
94
  const stageDuration = execution?.stageStatus?.duration;
69
- const reGroupTaskFunction = (0, external_react_namespaceObject.useMemo)(()=>onTaskGroupModification || (()=>{}), [
70
- onTaskGroupModification
71
- ]);
72
95
  const isStageTitleEditable = !!onStageTitleChange && !isReadOnly;
73
96
  const [isHovered, setIsHovered] = (0, external_react_namespaceObject.useState)(false);
74
97
  const [label, setLabel] = (0, external_react_namespaceObject.useState)(props.stageDetails.label);
@@ -85,6 +108,7 @@ const StageNodeComponent = (props)=>{
85
108
  taskIndex: -1
86
109
  });
87
110
  const isConnecting = (0, react_cjs_namespaceObject.useStore)((state)=>!!state.connectionClickStartHandle);
111
+ const storeApi = (0, react_cjs_namespaceObject.useStoreApi)();
88
112
  const connectedHandleIds = (0, ConnectedHandlesContext_cjs_namespaceObject.useConnectedHandles)(id);
89
113
  const [isAddingTask, setIsAddingTask] = (0, external_react_namespaceObject.useState)(false);
90
114
  const [isReplacingTask, setIsReplacingTask] = (0, external_react_namespaceObject.useState)(false);
@@ -124,7 +148,6 @@ const StageNodeComponent = (props)=>{
124
148
  tasks,
125
149
  activeDragId
126
150
  ]);
127
- const { zoom } = (0, react_cjs_namespaceObject.useViewport)();
128
151
  const projected = (0, external_react_namespaceObject.useMemo)(()=>{
129
152
  if (!activeDragId || !overId) return null;
130
153
  return (0, external_StageNode_utils_cjs_namespaceObject.getProjection)(tasks, activeDragId, overId, offsetLeft);
@@ -207,18 +230,26 @@ const StageNodeComponent = (props)=>{
207
230
  handleStageTitleClickToSave,
208
231
  isStageTitleEditing
209
232
  ]);
210
- const contextMenuItems = (0, external_react_namespaceObject.useCallback)((isParallel, groupIndex, taskIndex, tasksLength, taskGroupLength, isAboveParallel, isBelowParallel)=>{
233
+ const hasContextMenu = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
234
+ const buildContextMenuItems = (0, external_react_namespaceObject.useCallback)((groupIndex, taskIndex)=>{
235
+ const taskGroup = tasks[groupIndex] ?? [];
236
+ const isParallel = taskGroup.length > 1;
211
237
  const items = [];
212
238
  if (onReplaceTaskFromToolbox) {
213
239
  items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getMenuItem)('replace-task', 'Replace task', ()=>{
214
- const taskId = tasks[groupIndex]?.[taskIndex]?.id;
240
+ taskStateReference.current = {
241
+ isParallel,
242
+ groupIndex,
243
+ taskIndex
244
+ };
245
+ const taskId = taskGroup[taskIndex]?.id;
215
246
  if (taskId) onTaskClick?.(taskId);
216
247
  setIsReplacingTask(true);
217
248
  }));
218
249
  items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)());
219
250
  }
220
251
  if (onTaskGroupModification) {
221
- const reGroupOptions = (0, external_StageNodeTaskUtilities_cjs_namespaceObject.getContextMenuItems)(isParallel, groupIndex, tasksLength, taskIndex, taskGroupLength, isAboveParallel, isBelowParallel, reGroupTaskFunction);
252
+ const reGroupOptions = (0, external_StageNodeTaskUtilities_cjs_namespaceObject.getContextMenuItems)(isParallel, groupIndex, tasks.length, taskIndex, taskGroup.length, (tasks[groupIndex - 1]?.length ?? 0) > 1, (tasks[groupIndex + 1]?.length ?? 0) > 1, onTaskGroupModification);
222
253
  return [
223
254
  ...items,
224
255
  ...reGroupOptions
@@ -229,10 +260,9 @@ const StageNodeComponent = (props)=>{
229
260
  onReplaceTaskFromToolbox,
230
261
  onTaskClick,
231
262
  onTaskGroupModification,
232
- reGroupTaskFunction,
233
263
  tasks
234
264
  ]);
235
- const { setSelectedNodeId } = (0, hooks_index_cjs_namespaceObject.useNodeSelection)();
265
+ const { setSelectedNodeId } = (0, hooks_index_cjs_namespaceObject.useSetNodeSelection)();
236
266
  const handleStageClick = (0, external_react_namespaceObject.useCallback)(()=>{
237
267
  onStageClick?.();
238
268
  }, [
@@ -355,9 +385,9 @@ const StageNodeComponent = (props)=>{
355
385
  setActiveDragId(event.active.id);
356
386
  }, []);
357
387
  const handleDragMove = (0, external_react_namespaceObject.useCallback)((event)=>{
358
- setOffsetLeft(event.delta.x / zoom);
388
+ setOffsetLeft(event.delta.x / storeApi.getState().transform[2]);
359
389
  }, [
360
- zoom
390
+ storeApi
361
391
  ]);
362
392
  const handleDragOver = (0, external_react_namespaceObject.useCallback)((event)=>{
363
393
  setOverId(event.over?.id ?? null);
@@ -393,12 +423,6 @@ const StageNodeComponent = (props)=>{
393
423
  } : void 0, [
394
424
  taskWidth
395
425
  ]);
396
- const dragOverlayStyle = (0, external_react_namespaceObject.useMemo)(()=>({
397
- transform: `scale(${zoom})`,
398
- transformOrigin: 'top left'
399
- }), [
400
- zoom
401
- ]);
402
426
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
403
427
  "data-testid": `stage-${id}`,
404
428
  style: {
@@ -483,11 +507,13 @@ const StageNodeComponent = (props)=>{
483
507
  (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
484
508
  content: addTaskLabel,
485
509
  placement: "top",
510
+ hide: addTaskLoading,
486
511
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
487
512
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIconButton, {
488
513
  onClick: handleTaskAddClick,
489
514
  size: "small",
490
515
  label: addTaskLabel,
516
+ disabled: addTaskLoading,
491
517
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIcon, {
492
518
  name: "add",
493
519
  size: "20px"
@@ -536,20 +562,14 @@ const StageNodeComponent = (props)=>{
536
562
  taskExecution: taskExecution,
537
563
  isSelected: selectedTaskId === task.id,
538
564
  isParallel: isParallel,
539
- contextMenuItems: contextMenuItems(isParallel, groupIndex, taskIndex, tasks.length, taskGroup.length, (tasks[groupIndex - 1]?.length ?? 0) > 1, (tasks[groupIndex + 1]?.length ?? 0) > 1),
565
+ groupIndex: groupIndex,
566
+ taskIndex: taskIndex,
540
567
  onTaskClick: handleTaskClick,
541
568
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
542
569
  onTaskPlay: onTaskPlay,
543
570
  isDragDisabled: !onTaskReorder,
544
- zoom: zoom,
545
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
546
- onMenuOpen: ()=>{
547
- taskStateReference.current = {
548
- isParallel,
549
- groupIndex,
550
- taskIndex
551
- };
552
- }
571
+ ...hasContextMenu && {
572
+ getContextMenuItems: buildContextMenuItems
553
573
  }
554
574
  }, task.id);
555
575
  })
@@ -560,23 +580,11 @@ const StageNodeComponent = (props)=>{
560
580
  })
561
581
  })
562
582
  }),
563
- /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(core_namespaceObject.DragOverlay, {
564
- children: activeTask ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
565
- style: dragOverlayStyle,
566
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
567
- selected: true,
568
- isParallel: isActiveTaskParallel,
569
- style: {
570
- cursor: 'grabbing',
571
- ...taskWidthStyle
572
- },
573
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
574
- task: activeTask,
575
- isDragging: true
576
- })
577
- })
578
- }) : null
579
- }), document.body)
583
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageNode_StageTaskDragOverlay, {
584
+ activeTask: activeTask,
585
+ isActiveTaskParallel: isActiveTaskParallel,
586
+ taskWidthStyle: taskWidthStyle
587
+ })
580
588
  ]
581
589
  }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.Column, {
582
590
  py: 2,
@@ -630,6 +638,31 @@ const StageNodeComponent = (props)=>{
630
638
  ]
631
639
  });
632
640
  };
641
+ const StageNodeInnerMemo = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageNodeInner);
642
+ const StageNodeComponent = ({ dragging, selected, id, width, execution, stageDetails, addTaskLabel, addTaskLoading, replaceTaskLabel, taskOptions, menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox, onTaskPlay })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageNodeInnerMemo, {
643
+ dragging: dragging,
644
+ selected: selected,
645
+ id: id,
646
+ width: width,
647
+ execution: execution,
648
+ stageDetails: stageDetails,
649
+ addTaskLabel: addTaskLabel,
650
+ addTaskLoading: addTaskLoading,
651
+ replaceTaskLabel: replaceTaskLabel,
652
+ taskOptions: taskOptions,
653
+ menuItems: menuItems,
654
+ pendingReplaceTask: pendingReplaceTask,
655
+ onStageClick: onStageClick,
656
+ onTaskAdd: onTaskAdd,
657
+ onAddTaskFromToolbox: onAddTaskFromToolbox,
658
+ onTaskToolboxSearch: onTaskToolboxSearch,
659
+ onTaskClick: onTaskClick,
660
+ onTaskGroupModification: onTaskGroupModification,
661
+ onStageTitleChange: onStageTitleChange,
662
+ onTaskReorder: onTaskReorder,
663
+ onReplaceTaskFromToolbox: onReplaceTaskFromToolbox,
664
+ onTaskPlay: onTaskPlay
665
+ });
633
666
  const StageNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageNodeComponent);
634
667
  exports.StageNode = __webpack_exports__.StageNode;
635
668
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -1,3 +1,3 @@
1
1
  import type { StageNodeProps } from './StageNode.types';
2
- export declare const StageNode: import("react").MemoExoticComponent<(props: StageNodeProps) => import("react/jsx-runtime").JSX.Element>;
2
+ export declare const StageNode: import("react").MemoExoticComponent<({ dragging, selected, id, width, execution, stageDetails, addTaskLabel, addTaskLoading, replaceTaskLabel, taskOptions, menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox, onTaskPlay, }: StageNodeProps) => import("react/jsx-runtime").JSX.Element>;
3
3
  //# sourceMappingURL=StageNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAspBxD,eAAO,MAAM,SAAS,8CA5oBa,cAAc,6CA4oBA,CAAC"}
1
+ {"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAEV,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAmtB3B,eAAO,MAAM,SAAS,mXA7BnB,cAAc,6CA6BgC,CAAC"}
@@ -3,7 +3,7 @@ import { DndContext, DragOverlay, KeyboardSensor, PointerSensor, closestCenter,
3
3
  import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
4
4
  import { FontVariantToken, Padding, Spacing } from "@uipath/apollo-core";
5
5
  import { Column, Row } from "../../layouts/index.js";
6
- import { Position, useStore, useViewport } from "../../xyflow/react.js";
6
+ import { Position, useStore, useStoreApi, useViewport } from "../../xyflow/react.js";
7
7
  import { ApIcon, ApIconButton, ApLink, ApTooltip, ApTypography } from "../../../material/index.js";
8
8
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
9
9
  import { createPortal } from "react-dom";
@@ -12,13 +12,39 @@ import { useButtonHandles } from "../ButtonHandle/useButtonHandles.js";
12
12
  import { ExecutionStatusIcon } from "../ExecutionStatusIcon/index.js";
13
13
  import { FloatingCanvasPanel } from "../FloatingCanvasPanel/index.js";
14
14
  import { NodeContextMenu } from "../NodeContextMenu/index.js";
15
- import { useNodeSelection } from "../NodePropertiesPanel/hooks/index.js";
15
+ import { useSetNodeSelection } from "../NodePropertiesPanel/hooks/index.js";
16
16
  import { Toolbox } from "../Toolbox/index.js";
17
17
  import { DraggableTask, TaskContent } from "./DraggableTask.js";
18
18
  import { INDENTATION_WIDTH, STAGE_CONTENT_INSET, StageContainer, StageContent, StageHeader, StageParallelBracket, StageParallelLabel, StageTask, StageTaskGroup, StageTaskList, StageTitleContainer, StageTitleInput } from "./StageNode.styles.js";
19
19
  import { flattenTasks, getProjection, reorderTasks } from "./StageNode.utils.js";
20
20
  import { getContextMenuItems, getDivider, getMenuItem } from "./StageNodeTaskUtilities.js";
21
- const StageNodeComponent = (props)=>{
21
+ const StageNode_StageTaskDragOverlay = /*#__PURE__*/ memo(function({ activeTask, isActiveTaskParallel, taskWidthStyle }) {
22
+ const { zoom } = useViewport();
23
+ const dragOverlayStyle = useMemo(()=>({
24
+ transform: `scale(${zoom})`,
25
+ transformOrigin: 'top left'
26
+ }), [
27
+ zoom
28
+ ]);
29
+ return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(DragOverlay, {
30
+ children: activeTask ? /*#__PURE__*/ jsx("div", {
31
+ style: dragOverlayStyle,
32
+ children: /*#__PURE__*/ jsx(StageTask, {
33
+ selected: true,
34
+ isParallel: isActiveTaskParallel,
35
+ style: {
36
+ cursor: 'grabbing',
37
+ ...taskWidthStyle
38
+ },
39
+ children: /*#__PURE__*/ jsx(TaskContent, {
40
+ task: activeTask,
41
+ isDragging: true
42
+ })
43
+ })
44
+ }) : null
45
+ }), document.body);
46
+ });
47
+ const StageNodeInner = (props)=>{
22
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 } = props;
23
49
  const taskWidth = width ? width - STAGE_CONTENT_INSET : void 0;
24
50
  const tasks = useMemo(()=>stageDetails?.tasks || [], [
@@ -38,9 +64,6 @@ const StageNodeComponent = (props)=>{
38
64
  const status = execution?.stageStatus?.status;
39
65
  const statusLabel = execution?.stageStatus?.label;
40
66
  const stageDuration = execution?.stageStatus?.duration;
41
- const reGroupTaskFunction = useMemo(()=>onTaskGroupModification || (()=>{}), [
42
- onTaskGroupModification
43
- ]);
44
67
  const isStageTitleEditable = !!onStageTitleChange && !isReadOnly;
45
68
  const [isHovered, setIsHovered] = useState(false);
46
69
  const [label, setLabel] = useState(props.stageDetails.label);
@@ -57,6 +80,7 @@ const StageNodeComponent = (props)=>{
57
80
  taskIndex: -1
58
81
  });
59
82
  const isConnecting = useStore((state)=>!!state.connectionClickStartHandle);
83
+ const storeApi = useStoreApi();
60
84
  const connectedHandleIds = useConnectedHandles(id);
61
85
  const [isAddingTask, setIsAddingTask] = useState(false);
62
86
  const [isReplacingTask, setIsReplacingTask] = useState(false);
@@ -96,7 +120,6 @@ const StageNodeComponent = (props)=>{
96
120
  tasks,
97
121
  activeDragId
98
122
  ]);
99
- const { zoom } = useViewport();
100
123
  const projected = useMemo(()=>{
101
124
  if (!activeDragId || !overId) return null;
102
125
  return getProjection(tasks, activeDragId, overId, offsetLeft);
@@ -179,18 +202,26 @@ const StageNodeComponent = (props)=>{
179
202
  handleStageTitleClickToSave,
180
203
  isStageTitleEditing
181
204
  ]);
182
- const contextMenuItems = useCallback((isParallel, groupIndex, taskIndex, tasksLength, taskGroupLength, isAboveParallel, isBelowParallel)=>{
205
+ const hasContextMenu = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
206
+ const buildContextMenuItems = useCallback((groupIndex, taskIndex)=>{
207
+ const taskGroup = tasks[groupIndex] ?? [];
208
+ const isParallel = taskGroup.length > 1;
183
209
  const items = [];
184
210
  if (onReplaceTaskFromToolbox) {
185
211
  items.push(getMenuItem('replace-task', 'Replace task', ()=>{
186
- const taskId = tasks[groupIndex]?.[taskIndex]?.id;
212
+ taskStateReference.current = {
213
+ isParallel,
214
+ groupIndex,
215
+ taskIndex
216
+ };
217
+ const taskId = taskGroup[taskIndex]?.id;
187
218
  if (taskId) onTaskClick?.(taskId);
188
219
  setIsReplacingTask(true);
189
220
  }));
190
221
  items.push(getDivider());
191
222
  }
192
223
  if (onTaskGroupModification) {
193
- const reGroupOptions = getContextMenuItems(isParallel, groupIndex, tasksLength, taskIndex, taskGroupLength, isAboveParallel, isBelowParallel, reGroupTaskFunction);
224
+ const reGroupOptions = getContextMenuItems(isParallel, groupIndex, tasks.length, taskIndex, taskGroup.length, (tasks[groupIndex - 1]?.length ?? 0) > 1, (tasks[groupIndex + 1]?.length ?? 0) > 1, onTaskGroupModification);
194
225
  return [
195
226
  ...items,
196
227
  ...reGroupOptions
@@ -201,10 +232,9 @@ const StageNodeComponent = (props)=>{
201
232
  onReplaceTaskFromToolbox,
202
233
  onTaskClick,
203
234
  onTaskGroupModification,
204
- reGroupTaskFunction,
205
235
  tasks
206
236
  ]);
207
- const { setSelectedNodeId } = useNodeSelection();
237
+ const { setSelectedNodeId } = useSetNodeSelection();
208
238
  const handleStageClick = useCallback(()=>{
209
239
  onStageClick?.();
210
240
  }, [
@@ -327,9 +357,9 @@ const StageNodeComponent = (props)=>{
327
357
  setActiveDragId(event.active.id);
328
358
  }, []);
329
359
  const handleDragMove = useCallback((event)=>{
330
- setOffsetLeft(event.delta.x / zoom);
360
+ setOffsetLeft(event.delta.x / storeApi.getState().transform[2]);
331
361
  }, [
332
- zoom
362
+ storeApi
333
363
  ]);
334
364
  const handleDragOver = useCallback((event)=>{
335
365
  setOverId(event.over?.id ?? null);
@@ -365,12 +395,6 @@ const StageNodeComponent = (props)=>{
365
395
  } : void 0, [
366
396
  taskWidth
367
397
  ]);
368
- const dragOverlayStyle = useMemo(()=>({
369
- transform: `scale(${zoom})`,
370
- transformOrigin: 'top left'
371
- }), [
372
- zoom
373
- ]);
374
398
  return /*#__PURE__*/ jsxs("div", {
375
399
  "data-testid": `stage-${id}`,
376
400
  style: {
@@ -455,11 +479,13 @@ const StageNodeComponent = (props)=>{
455
479
  (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly && /*#__PURE__*/ jsx(ApTooltip, {
456
480
  content: addTaskLabel,
457
481
  placement: "top",
482
+ hide: addTaskLoading,
458
483
  children: /*#__PURE__*/ jsx("span", {
459
484
  children: /*#__PURE__*/ jsx(ApIconButton, {
460
485
  onClick: handleTaskAddClick,
461
486
  size: "small",
462
487
  label: addTaskLabel,
488
+ disabled: addTaskLoading,
463
489
  children: /*#__PURE__*/ jsx(ApIcon, {
464
490
  name: "add",
465
491
  size: "20px"
@@ -508,20 +534,14 @@ const StageNodeComponent = (props)=>{
508
534
  taskExecution: taskExecution,
509
535
  isSelected: selectedTaskId === task.id,
510
536
  isParallel: isParallel,
511
- contextMenuItems: contextMenuItems(isParallel, groupIndex, taskIndex, tasks.length, taskGroup.length, (tasks[groupIndex - 1]?.length ?? 0) > 1, (tasks[groupIndex + 1]?.length ?? 0) > 1),
537
+ groupIndex: groupIndex,
538
+ taskIndex: taskIndex,
512
539
  onTaskClick: handleTaskClick,
513
540
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
514
541
  onTaskPlay: onTaskPlay,
515
542
  isDragDisabled: !onTaskReorder,
516
- zoom: zoom,
517
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
518
- onMenuOpen: ()=>{
519
- taskStateReference.current = {
520
- isParallel,
521
- groupIndex,
522
- taskIndex
523
- };
524
- }
543
+ ...hasContextMenu && {
544
+ getContextMenuItems: buildContextMenuItems
525
545
  }
526
546
  }, task.id);
527
547
  })
@@ -532,23 +552,11 @@ const StageNodeComponent = (props)=>{
532
552
  })
533
553
  })
534
554
  }),
535
- /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(DragOverlay, {
536
- children: activeTask ? /*#__PURE__*/ jsx("div", {
537
- style: dragOverlayStyle,
538
- children: /*#__PURE__*/ jsx(StageTask, {
539
- selected: true,
540
- isParallel: isActiveTaskParallel,
541
- style: {
542
- cursor: 'grabbing',
543
- ...taskWidthStyle
544
- },
545
- children: /*#__PURE__*/ jsx(TaskContent, {
546
- task: activeTask,
547
- isDragging: true
548
- })
549
- })
550
- }) : null
551
- }), document.body)
555
+ /*#__PURE__*/ jsx(StageNode_StageTaskDragOverlay, {
556
+ activeTask: activeTask,
557
+ isActiveTaskParallel: isActiveTaskParallel,
558
+ taskWidthStyle: taskWidthStyle
559
+ })
552
560
  ]
553
561
  }) : /*#__PURE__*/ jsx(Column, {
554
562
  py: 2,
@@ -602,5 +610,30 @@ const StageNodeComponent = (props)=>{
602
610
  ]
603
611
  });
604
612
  };
613
+ const StageNodeInnerMemo = /*#__PURE__*/ memo(StageNodeInner);
614
+ const StageNodeComponent = ({ dragging, selected, id, width, execution, stageDetails, addTaskLabel, addTaskLoading, replaceTaskLabel, taskOptions, menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox, onTaskPlay })=>/*#__PURE__*/ jsx(StageNodeInnerMemo, {
615
+ dragging: dragging,
616
+ selected: selected,
617
+ id: id,
618
+ width: width,
619
+ execution: execution,
620
+ stageDetails: stageDetails,
621
+ addTaskLabel: addTaskLabel,
622
+ addTaskLoading: addTaskLoading,
623
+ replaceTaskLabel: replaceTaskLabel,
624
+ taskOptions: taskOptions,
625
+ menuItems: menuItems,
626
+ pendingReplaceTask: pendingReplaceTask,
627
+ onStageClick: onStageClick,
628
+ onTaskAdd: onTaskAdd,
629
+ onAddTaskFromToolbox: onAddTaskFromToolbox,
630
+ onTaskToolboxSearch: onTaskToolboxSearch,
631
+ onTaskClick: onTaskClick,
632
+ onTaskGroupModification: onTaskGroupModification,
633
+ onStageTitleChange: onStageTitleChange,
634
+ onTaskReorder: onTaskReorder,
635
+ onReplaceTaskFromToolbox: onReplaceTaskFromToolbox,
636
+ onTaskPlay: onTaskPlay
637
+ });
605
638
  const StageNode = /*#__PURE__*/ memo(StageNodeComponent);
606
639
  export { StageNode };