@uipath/apollo-react 3.62.1 → 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 +76 -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 +78 -47
  27. package/dist/canvas/components/StageNode/StageNode.stories.cjs +116 -157
  28. package/dist/canvas/components/StageNode/StageNode.stories.d.ts.map +1 -1
  29. package/dist/canvas/components/StageNode/StageNode.stories.js +112 -153
  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: {
@@ -538,20 +562,14 @@ const StageNodeComponent = (props)=>{
538
562
  taskExecution: taskExecution,
539
563
  isSelected: selectedTaskId === task.id,
540
564
  isParallel: isParallel,
541
- 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,
542
567
  onTaskClick: handleTaskClick,
543
568
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
544
569
  onTaskPlay: onTaskPlay,
545
570
  isDragDisabled: !onTaskReorder,
546
- zoom: zoom,
547
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
548
- onMenuOpen: ()=>{
549
- taskStateReference.current = {
550
- isParallel,
551
- groupIndex,
552
- taskIndex
553
- };
554
- }
571
+ ...hasContextMenu && {
572
+ getContextMenuItems: buildContextMenuItems
555
573
  }
556
574
  }, task.id);
557
575
  })
@@ -562,23 +580,11 @@ const StageNodeComponent = (props)=>{
562
580
  })
563
581
  })
564
582
  }),
565
- /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(core_namespaceObject.DragOverlay, {
566
- children: activeTask ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
567
- style: dragOverlayStyle,
568
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
569
- selected: true,
570
- isParallel: isActiveTaskParallel,
571
- style: {
572
- cursor: 'grabbing',
573
- ...taskWidthStyle
574
- },
575
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
576
- task: activeTask,
577
- isDragging: true
578
- })
579
- })
580
- }) : null
581
- }), document.body)
583
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageNode_StageTaskDragOverlay, {
584
+ activeTask: activeTask,
585
+ isActiveTaskParallel: isActiveTaskParallel,
586
+ taskWidthStyle: taskWidthStyle
587
+ })
582
588
  ]
583
589
  }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.Column, {
584
590
  py: 2,
@@ -632,6 +638,31 @@ const StageNodeComponent = (props)=>{
632
638
  ]
633
639
  });
634
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
+ });
635
666
  const StageNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageNodeComponent);
636
667
  exports.StageNode = __webpack_exports__.StageNode;
637
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;AA2pBxD,eAAO,MAAM,SAAS,8CAjpBa,cAAc,6CAipBA,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: {
@@ -510,20 +534,14 @@ const StageNodeComponent = (props)=>{
510
534
  taskExecution: taskExecution,
511
535
  isSelected: selectedTaskId === task.id,
512
536
  isParallel: isParallel,
513
- 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,
514
539
  onTaskClick: handleTaskClick,
515
540
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
516
541
  onTaskPlay: onTaskPlay,
517
542
  isDragDisabled: !onTaskReorder,
518
- zoom: zoom,
519
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
520
- onMenuOpen: ()=>{
521
- taskStateReference.current = {
522
- isParallel,
523
- groupIndex,
524
- taskIndex
525
- };
526
- }
543
+ ...hasContextMenu && {
544
+ getContextMenuItems: buildContextMenuItems
527
545
  }
528
546
  }, task.id);
529
547
  })
@@ -534,23 +552,11 @@ const StageNodeComponent = (props)=>{
534
552
  })
535
553
  })
536
554
  }),
537
- /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(DragOverlay, {
538
- children: activeTask ? /*#__PURE__*/ jsx("div", {
539
- style: dragOverlayStyle,
540
- children: /*#__PURE__*/ jsx(StageTask, {
541
- selected: true,
542
- isParallel: isActiveTaskParallel,
543
- style: {
544
- cursor: 'grabbing',
545
- ...taskWidthStyle
546
- },
547
- children: /*#__PURE__*/ jsx(TaskContent, {
548
- task: activeTask,
549
- isDragging: true
550
- })
551
- })
552
- }) : null
553
- }), document.body)
555
+ /*#__PURE__*/ jsx(StageNode_StageTaskDragOverlay, {
556
+ activeTask: activeTask,
557
+ isActiveTaskParallel: isActiveTaskParallel,
558
+ taskWidthStyle: taskWidthStyle
559
+ })
554
560
  ]
555
561
  }) : /*#__PURE__*/ jsx(Column, {
556
562
  py: 2,
@@ -604,5 +610,30 @@ const StageNodeComponent = (props)=>{
604
610
  ]
605
611
  });
606
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
+ });
607
638
  const StageNode = /*#__PURE__*/ memo(StageNodeComponent);
608
639
  export { StageNode };