@uipath/apollo-react 4.29.1 → 4.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,6 +25,11 @@ export interface StageTaskItem {
25
25
  taskGroupType?: 'sequential' | 'event-driven' | 'adhoc';
26
26
  hasEntryCondition?: boolean;
27
27
  }
28
+ export interface StageTaskContextMenuArgs {
29
+ task: StageTaskItem;
30
+ taskGroupType: 'sequential' | 'event-driven' | 'adhoc';
31
+ isParallel: boolean;
32
+ }
28
33
  export declare enum StageHeaderChipType {
29
34
  Entry = "entry",
30
35
  Exit = "exit",
@@ -75,6 +80,7 @@ export interface StageNodeBaseProps {
75
80
  onTaskReorder?: (reorderedTasks: StageTaskItem[][]) => void;
76
81
  onReplaceTaskFromToolbox?: (newTask: ListItem, groupIndex: number, taskIndex: number) => void;
77
82
  onTaskPlay?: (taskId: string) => Promise<void>;
83
+ getTaskContextMenuItems?: (args: StageTaskContextMenuArgs) => NodeMenuItem[] | undefined;
78
84
  hideParallelOptions?: boolean;
79
85
  loadingTaskIds?: ReadonlySet<string>;
80
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StageNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StageNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.types.ts"],"names":[],"mappings":"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"}
@@ -32,17 +32,25 @@ const external_AdhocTask_cjs_namespaceObject = require("./AdhocTask.cjs");
32
32
  const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
33
33
  const external_useStageNodeLabels_cjs_namespaceObject = require("./useStageNodeLabels.cjs");
34
34
  const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selectedTaskId, marginTop, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
35
- const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds } = props;
35
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds, getTaskContextMenuItems } = props;
36
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
36
37
  const labels = (0, external_useStageNodeLabels_cjs_namespaceObject.useStageNodeLabels)();
37
- const getAdhocContextMenuItems = (0, external_react_namespaceObject.useCallback)((taskId)=>{
38
+ const getAdhocContextMenuItems = (0, external_react_namespaceObject.useCallback)((task)=>{
38
39
  const items = [];
39
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, false);
40
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
40
41
  if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
41
- const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(taskId);
42
+ const additionalMenuItems = getTaskContextMenuItems?.({
43
+ task,
44
+ taskGroupType: 'adhoc',
45
+ isParallel: false
46
+ }) ?? [];
47
+ items.push(...additionalMenuItems);
48
+ const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
42
49
  if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
43
50
  return items;
44
51
  }, [
45
52
  generateReplaceTaskMenuItemForTask,
53
+ getTaskContextMenuItems,
46
54
  generateDeleteTaskMenuItemForTask
47
55
  ]);
48
56
  if (0 === adhocTasks.length) return null;
@@ -60,6 +68,12 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
60
68
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
61
69
  children: adhocTasks.map(({ task })=>{
62
70
  const taskExecution = execution?.taskStatus?.[task.id];
71
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
72
+ task,
73
+ taskGroupType: 'adhoc',
74
+ isParallel: false
75
+ }) ?? [];
76
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
63
77
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_AdhocTask_cjs_namespaceObject.AdhocTaskItem, {
64
78
  task: task,
65
79
  taskExecution: taskExecution,
@@ -67,8 +81,8 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
67
81
  onTaskClick: handleTaskClick,
68
82
  onTaskPlay: onTaskPlay,
69
83
  isTaskLoading: loadingTaskIds?.has(task.id),
70
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && !isReadOnly && {
71
- getContextMenuItems: ()=>getAdhocContextMenuItems(task.id)
84
+ ...hasMenu && {
85
+ getContextMenuItems: ()=>getAdhocContextMenuItems(task)
72
86
  }
73
87
  }, task.id);
74
88
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeAdhocTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeAdhocTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAuFxE,eAAO,MAAM,wBAAwB,8LA3ElC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDA+D0E,CAAC"}
1
+ {"version":3,"file":"StageNodeAdhocTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeAdhocTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAC;AAqGvF,eAAO,MAAM,wBAAwB,8LAzFlC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDA6E0E,CAAC"}
@@ -4,17 +4,25 @@ import { AdhocTaskItem } from "./AdhocTask.js";
4
4
  import { StageAdditionalTasksHeaderSection, StageAdditionalTasksSection, StageTaskList } from "./StageNode.styles.js";
5
5
  import { useStageNodeLabels } from "./useStageNodeLabels.js";
6
6
  const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selectedTaskId, marginTop, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
7
- const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds } = props;
7
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds, getTaskContextMenuItems } = props;
8
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
8
9
  const labels = useStageNodeLabels();
9
- const getAdhocContextMenuItems = useCallback((taskId)=>{
10
+ const getAdhocContextMenuItems = useCallback((task)=>{
10
11
  const items = [];
11
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, false);
12
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
12
13
  if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
13
- const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(taskId);
14
+ const additionalMenuItems = getTaskContextMenuItems?.({
15
+ task,
16
+ taskGroupType: 'adhoc',
17
+ isParallel: false
18
+ }) ?? [];
19
+ items.push(...additionalMenuItems);
20
+ const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
14
21
  if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
15
22
  return items;
16
23
  }, [
17
24
  generateReplaceTaskMenuItemForTask,
25
+ getTaskContextMenuItems,
18
26
  generateDeleteTaskMenuItemForTask
19
27
  ]);
20
28
  if (0 === adhocTasks.length) return null;
@@ -32,6 +40,12 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
32
40
  /*#__PURE__*/ jsx(StageTaskList, {
33
41
  children: adhocTasks.map(({ task })=>{
34
42
  const taskExecution = execution?.taskStatus?.[task.id];
43
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
44
+ task,
45
+ taskGroupType: 'adhoc',
46
+ isParallel: false
47
+ }) ?? [];
48
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
35
49
  return /*#__PURE__*/ jsx(AdhocTaskItem, {
36
50
  task: task,
37
51
  taskExecution: taskExecution,
@@ -39,8 +53,8 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
39
53
  onTaskClick: handleTaskClick,
40
54
  onTaskPlay: onTaskPlay,
41
55
  isTaskLoading: loadingTaskIds?.has(task.id),
42
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && !isReadOnly && {
43
- getContextMenuItems: ()=>getAdhocContextMenuItems(task.id)
56
+ ...hasMenu && {
57
+ getContextMenuItems: ()=>getAdhocContextMenuItems(task)
44
58
  }
45
59
  }, task.id);
46
60
  })
@@ -60,7 +60,6 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
60
60
  eventDrivenTaskGroups,
61
61
  adhocTaskGroups
62
62
  ]);
63
- const hasContextMenu = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
64
63
  const handleTaskClick = (0, external_react_namespaceObject.useCallback)((e, taskElementId)=>{
65
64
  e.stopPropagation();
66
65
  onTaskClick?.(taskElementId);
@@ -139,7 +138,6 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
139
138
  isReadOnly: isReadOnly,
140
139
  selectedTaskId: selectedTaskId,
141
140
  taskWidthStyle: taskWidthStyle,
142
- hasContextMenu: hasContextMenu,
143
141
  handleTaskClick: handleTaskClick,
144
142
  handleReorderSequentialTasks: handleReorderSequentialTasks,
145
143
  allTasks: allTasks,
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeAllTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeAllTaskGroups.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAQ,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAIvF,OAAO,KAAK,EAAE,cAAc,EAAiB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAgN3F,eAAO,MAAM,sBAAsB,8JAjMhC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACtD,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,6CAyLsE,CAAC"}
1
+ {"version":3,"file":"StageNodeAllTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeAllTaskGroups.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAQ,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAIvF,OAAO,KAAK,EAAE,cAAc,EAAiB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA6M3F,eAAO,MAAM,sBAAsB,8JA9LhC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACtD,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,6CAsLsE,CAAC"}
@@ -32,7 +32,6 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
32
32
  eventDrivenTaskGroups,
33
33
  adhocTaskGroups
34
34
  ]);
35
- const hasContextMenu = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
36
35
  const handleTaskClick = useCallback((e, taskElementId)=>{
37
36
  e.stopPropagation();
38
37
  onTaskClick?.(taskElementId);
@@ -111,7 +110,6 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
111
110
  isReadOnly: isReadOnly,
112
111
  selectedTaskId: selectedTaskId,
113
112
  taskWidthStyle: taskWidthStyle,
114
- hasContextMenu: hasContextMenu,
115
113
  handleTaskClick: handleTaskClick,
116
114
  handleReorderSequentialTasks: handleReorderSequentialTasks,
117
115
  allTasks: allTasks,
@@ -32,17 +32,25 @@ const external_EventDrivenTask_cjs_namespaceObject = require("./EventDrivenTask.
32
32
  const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
33
33
  const external_useStageNodeLabels_cjs_namespaceObject = require("./useStageNodeLabels.cjs");
34
34
  const StageNodeEventDrivenTaskGroupsInner = ({ props, eventDrivenTasks, isReadOnly, selectedTaskId, marginTop, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
35
- const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, loadingTaskIds } = props;
35
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, loadingTaskIds, getTaskContextMenuItems } = props;
36
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
36
37
  const labels = (0, external_useStageNodeLabels_cjs_namespaceObject.useStageNodeLabels)();
37
- const getEventDrivenContextMenuItems = (0, external_react_namespaceObject.useCallback)((taskId)=>{
38
+ const getEventDrivenContextMenuItems = (0, external_react_namespaceObject.useCallback)((task)=>{
38
39
  const items = [];
39
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, false);
40
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
40
41
  if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
41
- const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(taskId);
42
+ const additionalMenuItems = getTaskContextMenuItems?.({
43
+ task,
44
+ taskGroupType: 'event-driven',
45
+ isParallel: false
46
+ }) ?? [];
47
+ items.push(...additionalMenuItems);
48
+ const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
42
49
  if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
43
50
  return items;
44
51
  }, [
45
52
  generateReplaceTaskMenuItemForTask,
53
+ getTaskContextMenuItems,
46
54
  generateDeleteTaskMenuItemForTask
47
55
  ]);
48
56
  if (0 === eventDrivenTasks.length) return null;
@@ -60,14 +68,20 @@ const StageNodeEventDrivenTaskGroupsInner = ({ props, eventDrivenTasks, isReadOn
60
68
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
61
69
  children: eventDrivenTasks.map(({ task })=>{
62
70
  const taskExecution = execution?.taskStatus?.[task.id];
71
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
72
+ task,
73
+ taskGroupType: 'event-driven',
74
+ isParallel: false
75
+ }) ?? [];
76
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
63
77
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_EventDrivenTask_cjs_namespaceObject.EventDrivenTaskItem, {
64
78
  task: task,
65
79
  taskExecution: taskExecution,
66
80
  isSelected: selectedTaskId === task.id,
67
81
  onTaskClick: handleTaskClick,
68
82
  isTaskLoading: loadingTaskIds?.has(task.id),
69
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && !isReadOnly && {
70
- getContextMenuItems: ()=>getEventDrivenContextMenuItems(task.id)
83
+ ...hasMenu && {
84
+ getContextMenuItems: ()=>getEventDrivenContextMenuItems(task)
71
85
  }
72
86
  }, task.id);
73
87
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeEventDrivenTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgFxE,eAAO,MAAM,8BAA8B,oMApExC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDAwDsF,CAAC"}
1
+ {"version":3,"file":"StageNodeEventDrivenTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAC;AAmGvF,eAAO,MAAM,8BAA8B,oMAvFxC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDA2EsF,CAAC"}
@@ -4,17 +4,25 @@ import { EventDrivenTaskItem } from "./EventDrivenTask.js";
4
4
  import { StageAdditionalTasksHeaderSection, StageAdditionalTasksSection, StageTaskList } from "./StageNode.styles.js";
5
5
  import { useStageNodeLabels } from "./useStageNodeLabels.js";
6
6
  const StageNodeEventDrivenTaskGroupsInner = ({ props, eventDrivenTasks, isReadOnly, selectedTaskId, marginTop, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
7
- const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, loadingTaskIds } = props;
7
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, loadingTaskIds, getTaskContextMenuItems } = props;
8
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
8
9
  const labels = useStageNodeLabels();
9
- const getEventDrivenContextMenuItems = useCallback((taskId)=>{
10
+ const getEventDrivenContextMenuItems = useCallback((task)=>{
10
11
  const items = [];
11
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, false);
12
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
12
13
  if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
13
- const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(taskId);
14
+ const additionalMenuItems = getTaskContextMenuItems?.({
15
+ task,
16
+ taskGroupType: 'event-driven',
17
+ isParallel: false
18
+ }) ?? [];
19
+ items.push(...additionalMenuItems);
20
+ const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
14
21
  if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
15
22
  return items;
16
23
  }, [
17
24
  generateReplaceTaskMenuItemForTask,
25
+ getTaskContextMenuItems,
18
26
  generateDeleteTaskMenuItemForTask
19
27
  ]);
20
28
  if (0 === eventDrivenTasks.length) return null;
@@ -32,14 +40,20 @@ const StageNodeEventDrivenTaskGroupsInner = ({ props, eventDrivenTasks, isReadOn
32
40
  /*#__PURE__*/ jsx(StageTaskList, {
33
41
  children: eventDrivenTasks.map(({ task })=>{
34
42
  const taskExecution = execution?.taskStatus?.[task.id];
43
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
44
+ task,
45
+ taskGroupType: 'event-driven',
46
+ isParallel: false
47
+ }) ?? [];
48
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
35
49
  return /*#__PURE__*/ jsx(EventDrivenTaskItem, {
36
50
  task: task,
37
51
  taskExecution: taskExecution,
38
52
  isSelected: selectedTaskId === task.id,
39
53
  onTaskClick: handleTaskClick,
40
54
  isTaskLoading: loadingTaskIds?.has(task.id),
41
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && !isReadOnly && {
42
- getContextMenuItems: ()=>getEventDrivenContextMenuItems(task.id)
55
+ ...hasMenu && {
56
+ getContextMenuItems: ()=>getEventDrivenContextMenuItems(task)
43
57
  }
44
58
  }, task.id);
45
59
  })
@@ -39,8 +39,9 @@ const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.style
39
39
  const external_StageNodeTaskUtilities_cjs_namespaceObject = require("./StageNodeTaskUtilities.cjs");
40
40
  const external_StageTaskDragOverlay_cjs_namespaceObject = require("./StageTaskDragOverlay.cjs");
41
41
  const external_useStageNodeLabels_cjs_namespaceObject = require("./useStageNodeLabels.cjs");
42
- const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, hasContextMenu, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask })=>{
43
- const { execution, onTaskGroupModification, onTaskReorder, hideParallelOptions, loadingTaskIds } = props;
42
+ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask })=>{
43
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskReorder, hideParallelOptions, loadingTaskIds, getTaskContextMenuItems } = props;
44
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
44
45
  const labels = (0, external_useStageNodeLabels_cjs_namespaceObject.useStageNodeLabels)();
45
46
  const sequentialTaskIds = (0, external_react_namespaceObject.useMemo)(()=>sequentialTasks.map(({ task })=>task.id), [
46
47
  sequentialTasks
@@ -64,18 +65,21 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
64
65
  onTaskGroupModification,
65
66
  sequentialTaskGroups
66
67
  ]);
67
- const buildContextMenuItems = (0, external_react_namespaceObject.useCallback)((groupIndex, _, taskId)=>{
68
+ const buildContextMenuItems = (0, external_react_namespaceObject.useCallback)((groupIndex, task)=>{
68
69
  const taskGroup = sequentialTaskGroups[groupIndex] ?? [];
69
70
  const isParallel = taskGroup.length > 1;
70
71
  const items = [];
71
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, isParallel);
72
- if (replaceTaskMenuItem) {
73
- items.push(replaceTaskMenuItem);
74
- items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)());
75
- }
72
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, isParallel);
73
+ if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
74
+ const additionalMenuItems = getTaskContextMenuItems?.({
75
+ task,
76
+ taskGroupType: 'sequential',
77
+ isParallel
78
+ }) ?? [];
79
+ items.push(...additionalMenuItems);
76
80
  let groupIndexInAllTasks;
77
81
  let taskIndexInAllTasks;
78
- for (const [allTasksGroupIndex, group] of allTasks.entries())for (const [allTasksTaskIndex, task] of group.entries())if (task.id === taskId) {
82
+ for (const [allTasksGroupIndex, group] of allTasks.entries())for (const [allTasksTaskIndex, t] of group.entries())if (t.id === task.id) {
79
83
  groupIndexInAllTasks = allTasksGroupIndex;
80
84
  taskIndexInAllTasks = allTasksTaskIndex;
81
85
  break;
@@ -93,10 +97,11 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
93
97
  hideParallelOptions,
94
98
  labels: labels.contextMenu
95
99
  });
96
- return [
100
+ return items.length > 0 ? [
97
101
  ...items,
102
+ (0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)(),
98
103
  ...reGroupOptions
99
- ];
104
+ ] : reGroupOptions;
100
105
  }
101
106
  return items;
102
107
  }, [
@@ -105,6 +110,7 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
105
110
  hideParallelOptions,
106
111
  handleTaskRegroup,
107
112
  generateReplaceTaskMenuItemForTask,
113
+ getTaskContextMenuItems,
108
114
  allTasks,
109
115
  labels.contextMenu
110
116
  ]);
@@ -155,6 +161,12 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
155
161
  }),
156
162
  taskGroup.map((task, taskIndex)=>{
157
163
  const taskExecution = execution?.taskStatus?.[task.id];
164
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
165
+ task,
166
+ taskGroupType: 'sequential',
167
+ isParallel
168
+ }) ?? [];
169
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
158
170
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.DraggableTask, {
159
171
  task: task,
160
172
  taskExecution: taskExecution,
@@ -166,8 +178,8 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
166
178
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
167
179
  isDragDisabled: !onTaskReorder || isReadOnly,
168
180
  isTaskLoading: loadingTaskIds?.has(task.id),
169
- ...hasContextMenu && !isReadOnly && {
170
- getContextMenuItems: buildContextMenuItems
181
+ ...hasMenu && {
182
+ getContextMenuItems: ()=>buildContextMenuItems(groupIndex, task)
171
183
  }
172
184
  }, task.id);
173
185
  })
@@ -1,7 +1,7 @@
1
1
  import { type CSSProperties } from 'react';
2
2
  import type { NodeMenuItem } from '../NodeContextMenu';
3
3
  import type { StageNodeProps, StageTaskGroup, StageTaskItem } from './StageNode.types';
4
- export declare const StageNodeSequentialTaskGroups: ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, hasContextMenu, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask, }: {
4
+ export declare const StageNodeSequentialTaskGroups: ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask, }: {
5
5
  props: StageNodeProps;
6
6
  sequentialTaskGroups: StageTaskItem[][];
7
7
  sequentialTasks: StageTaskGroup[];
@@ -9,7 +9,6 @@ export declare const StageNodeSequentialTaskGroups: ({ props, sequentialTaskGrou
9
9
  isReadOnly: boolean;
10
10
  selectedTaskId?: string;
11
11
  taskWidthStyle?: CSSProperties;
12
- hasContextMenu: boolean;
13
12
  handleTaskClick: (e: React.MouseEvent, taskElementId: string) => void;
14
13
  handleReorderSequentialTasks: (newTasks: StageTaskItem[][]) => void;
15
14
  generateReplaceTaskMenuItemForTask: (taskId: string, isParallel: boolean) => NodeMenuItem | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeSequentialTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeSequentialTaskGroups.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,OAAO,CAAC;AAMjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvF,eAAO,MAAM,6BAA6B,GAAI,4MAY3C;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,oBAAoB,EAAE,aAAa,EAAE,EAAE,CAAC;IACxC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,4BAA4B,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC;IACpE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;CAC/B,mDAyLA,CAAC"}
1
+ {"version":3,"file":"StageNodeSequentialTaskGroups.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNodeSequentialTaskGroups.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,OAAO,CAAC;AAMjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWvD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvF,eAAO,MAAM,6BAA6B,GAAI,4LAW3C;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,oBAAoB,EAAE,aAAa,EAAE,EAAE,CAAC;IACxC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,4BAA4B,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC;IACpE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;CAC/B,mDA+MA,CAAC"}
@@ -11,8 +11,9 @@ import { StageAdditionalTasksHeaderSection, StageAdditionalTasksSection, StagePa
11
11
  import { getContextMenuItems, getDivider } from "./StageNodeTaskUtilities.js";
12
12
  import { StageTaskDragOverlay } from "./StageTaskDragOverlay.js";
13
13
  import { useStageNodeLabels } from "./useStageNodeLabels.js";
14
- const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, hasContextMenu, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask })=>{
15
- const { execution, onTaskGroupModification, onTaskReorder, hideParallelOptions, loadingTaskIds } = props;
14
+ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequentialTasks, allTasks, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderSequentialTasks, generateReplaceTaskMenuItemForTask })=>{
15
+ const { execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskReorder, hideParallelOptions, loadingTaskIds, getTaskContextMenuItems } = props;
16
+ const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
16
17
  const labels = useStageNodeLabels();
17
18
  const sequentialTaskIds = useMemo(()=>sequentialTasks.map(({ task })=>task.id), [
18
19
  sequentialTasks
@@ -36,18 +37,21 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
36
37
  onTaskGroupModification,
37
38
  sequentialTaskGroups
38
39
  ]);
39
- const buildContextMenuItems = useCallback((groupIndex, _, taskId)=>{
40
+ const buildContextMenuItems = useCallback((groupIndex, task)=>{
40
41
  const taskGroup = sequentialTaskGroups[groupIndex] ?? [];
41
42
  const isParallel = taskGroup.length > 1;
42
43
  const items = [];
43
- const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(taskId, isParallel);
44
- if (replaceTaskMenuItem) {
45
- items.push(replaceTaskMenuItem);
46
- items.push(getDivider());
47
- }
44
+ const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, isParallel);
45
+ if (replaceTaskMenuItem) items.push(replaceTaskMenuItem);
46
+ const additionalMenuItems = getTaskContextMenuItems?.({
47
+ task,
48
+ taskGroupType: 'sequential',
49
+ isParallel
50
+ }) ?? [];
51
+ items.push(...additionalMenuItems);
48
52
  let groupIndexInAllTasks;
49
53
  let taskIndexInAllTasks;
50
- for (const [allTasksGroupIndex, group] of allTasks.entries())for (const [allTasksTaskIndex, task] of group.entries())if (task.id === taskId) {
54
+ for (const [allTasksGroupIndex, group] of allTasks.entries())for (const [allTasksTaskIndex, t] of group.entries())if (t.id === task.id) {
51
55
  groupIndexInAllTasks = allTasksGroupIndex;
52
56
  taskIndexInAllTasks = allTasksTaskIndex;
53
57
  break;
@@ -65,10 +69,11 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
65
69
  hideParallelOptions,
66
70
  labels: labels.contextMenu
67
71
  });
68
- return [
72
+ return items.length > 0 ? [
69
73
  ...items,
74
+ getDivider(),
70
75
  ...reGroupOptions
71
- ];
76
+ ] : reGroupOptions;
72
77
  }
73
78
  return items;
74
79
  }, [
@@ -77,6 +82,7 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
77
82
  hideParallelOptions,
78
83
  handleTaskRegroup,
79
84
  generateReplaceTaskMenuItemForTask,
85
+ getTaskContextMenuItems,
80
86
  allTasks,
81
87
  labels.contextMenu
82
88
  ]);
@@ -127,6 +133,12 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
127
133
  }),
128
134
  taskGroup.map((task, taskIndex)=>{
129
135
  const taskExecution = execution?.taskStatus?.[task.id];
136
+ const customItems = isReadOnly || hasBuiltInTaskActions ? [] : getTaskContextMenuItems?.({
137
+ task,
138
+ taskGroupType: 'sequential',
139
+ isParallel
140
+ }) ?? [];
141
+ const hasMenu = !isReadOnly && (hasBuiltInTaskActions || customItems.length > 0);
130
142
  return /*#__PURE__*/ jsx(DraggableTask, {
131
143
  task: task,
132
144
  taskExecution: taskExecution,
@@ -138,8 +150,8 @@ const StageNodeSequentialTaskGroups = ({ props, sequentialTaskGroups, sequential
138
150
  projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
139
151
  isDragDisabled: !onTaskReorder || isReadOnly,
140
152
  isTaskLoading: loadingTaskIds?.has(task.id),
141
- ...hasContextMenu && !isReadOnly && {
142
- getContextMenuItems: buildContextMenuItems
153
+ ...hasMenu && {
154
+ getContextMenuItems: ()=>buildContextMenuItems(groupIndex, task)
143
155
  }
144
156
  }, task.id);
145
157
  })
@@ -1,6 +1,6 @@
1
1
  export { StageConnectionEdge } from './StageConnectionEdge';
2
2
  export { StageEdge } from './StageEdge';
3
3
  export { StageNode } from './StageNode';
4
- export type { StageHeaderChip, StageNodeCanvasProps, StageNodeProps, StageStatus, StageTaskItem, StageTaskStatus, } from './StageNode.types';
4
+ export type { StageHeaderChip, StageNodeCanvasProps, StageNodeProps, StageStatus, StageTaskContextMenuArgs, StageTaskItem, StageTaskStatus, } from './StageNode.types';
5
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,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,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,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}