@pega/cosmos-react-build 2.1.4 → 3.0.0-dev.10.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.
Files changed (234) hide show
  1. package/lib/components/AppHeader/AppHeader.d.ts +6 -4
  2. package/lib/components/AppHeader/AppHeader.d.ts.map +1 -1
  3. package/lib/components/AppHeader/AppHeader.js +10 -8
  4. package/lib/components/AppHeader/AppHeader.js.map +1 -1
  5. package/lib/components/AppHeader/AppHeader.styles.d.ts +1 -1
  6. package/lib/components/AppHeader/AppHeader.styles.d.ts.map +1 -1
  7. package/lib/components/AppHeader/AppHeader.styles.js +7 -18
  8. package/lib/components/AppHeader/AppHeader.styles.js.map +1 -1
  9. package/lib/components/AppHeader/BranchButton.d.ts +19 -0
  10. package/lib/components/AppHeader/BranchButton.d.ts.map +1 -0
  11. package/lib/components/AppHeader/BranchButton.js +87 -0
  12. package/lib/components/AppHeader/BranchButton.js.map +1 -0
  13. package/lib/components/AppHeader/index.d.ts +1 -0
  14. package/lib/components/AppHeader/index.d.ts.map +1 -1
  15. package/lib/components/AppHeader/index.js +1 -0
  16. package/lib/components/AppHeader/index.js.map +1 -1
  17. package/lib/components/AppShell/AppShell.d.ts +1 -0
  18. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  19. package/lib/components/AppShell/AppShell.js +15 -20
  20. package/lib/components/AppShell/AppShell.js.map +1 -1
  21. package/lib/components/AppShell/AppShell.styles.d.ts +1 -0
  22. package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
  23. package/lib/components/AppShell/AppShell.styles.js +17 -2
  24. package/lib/components/AppShell/AppShell.styles.js.map +1 -1
  25. package/lib/components/AppShell/AppShell.types.d.ts +6 -9
  26. package/lib/components/AppShell/AppShell.types.d.ts.map +1 -1
  27. package/lib/components/AppShell/AppShell.types.js.map +1 -1
  28. package/lib/components/AppShell/AppShellContext.d.ts +1 -0
  29. package/lib/components/AppShell/AppShellContext.d.ts.map +1 -1
  30. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts +9 -0
  31. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts.map +1 -0
  32. package/lib/components/DynamicContentEditor/DynamicContentEditor.js +235 -0
  33. package/lib/components/DynamicContentEditor/DynamicContentEditor.js.map +1 -0
  34. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts +23 -0
  35. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts.map +1 -0
  36. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js +2 -0
  37. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js.map +1 -0
  38. package/lib/components/DynamicContentEditor/PegaCustomElement.d.ts +308 -0
  39. package/lib/components/DynamicContentEditor/PegaCustomElement.d.ts.map +1 -0
  40. package/lib/components/DynamicContentEditor/PegaCustomElement.js +23 -0
  41. package/lib/components/DynamicContentEditor/PegaCustomElement.js.map +1 -0
  42. package/lib/components/DynamicContentEditor/index.d.ts +3 -0
  43. package/lib/components/DynamicContentEditor/index.d.ts.map +1 -0
  44. package/lib/components/DynamicContentEditor/index.js +2 -0
  45. package/lib/components/DynamicContentEditor/index.js.map +1 -0
  46. package/lib/components/FlowModeller/AddNode.d.ts +9 -7
  47. package/lib/components/FlowModeller/AddNode.d.ts.map +1 -1
  48. package/lib/components/FlowModeller/AddNode.js +9 -3
  49. package/lib/components/FlowModeller/AddNode.js.map +1 -1
  50. package/lib/components/FlowModeller/Connector.d.ts +7 -0
  51. package/lib/components/FlowModeller/Connector.d.ts.map +1 -0
  52. package/lib/components/FlowModeller/Connector.js +34 -0
  53. package/lib/components/FlowModeller/Connector.js.map +1 -0
  54. package/lib/components/FlowModeller/DeletePopover.d.ts +19 -0
  55. package/lib/components/FlowModeller/DeletePopover.d.ts.map +1 -0
  56. package/lib/components/FlowModeller/DeletePopover.js +105 -0
  57. package/lib/components/FlowModeller/DeletePopover.js.map +1 -0
  58. package/lib/components/FlowModeller/FlowModeller.d.ts +6 -2
  59. package/lib/components/FlowModeller/FlowModeller.d.ts.map +1 -1
  60. package/lib/components/FlowModeller/FlowModeller.js +110 -58
  61. package/lib/components/FlowModeller/FlowModeller.js.map +1 -1
  62. package/lib/components/FlowModeller/Node/Node.types.d.ts +18 -12
  63. package/lib/components/FlowModeller/Node/Node.types.d.ts.map +1 -1
  64. package/lib/components/FlowModeller/Node/Node.types.js +2 -3
  65. package/lib/components/FlowModeller/Node/Node.types.js.map +1 -1
  66. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts +7 -4
  67. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts.map +1 -1
  68. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js +21 -11
  69. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js.map +1 -1
  70. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts +1 -1
  71. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts.map +1 -1
  72. package/lib/components/FlowModeller/Node/NodeTemplates.js +37 -18
  73. package/lib/components/FlowModeller/Node/NodeTemplates.js.map +1 -1
  74. package/lib/components/FlowModeller/Node.d.ts +5 -0
  75. package/lib/components/FlowModeller/Node.d.ts.map +1 -0
  76. package/lib/components/FlowModeller/Node.js +22 -0
  77. package/lib/components/FlowModeller/Node.js.map +1 -0
  78. package/lib/components/FlowModeller/Renderer/Connectors.d.ts +2 -0
  79. package/lib/components/FlowModeller/Renderer/Connectors.d.ts.map +1 -1
  80. package/lib/components/FlowModeller/Renderer/Connectors.js +5 -3
  81. package/lib/components/FlowModeller/Renderer/Connectors.js.map +1 -1
  82. package/lib/components/FlowModeller/Renderer/Nodes.d.ts +2 -0
  83. package/lib/components/FlowModeller/Renderer/Nodes.d.ts.map +1 -1
  84. package/lib/components/FlowModeller/Renderer/Nodes.js +3 -3
  85. package/lib/components/FlowModeller/Renderer/Nodes.js.map +1 -1
  86. package/lib/components/FlowModeller/Renderer/Renderer.d.ts.map +1 -1
  87. package/lib/components/FlowModeller/Renderer/Renderer.js +2 -2
  88. package/lib/components/FlowModeller/Renderer/Renderer.js.map +1 -1
  89. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts +10 -4
  90. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts.map +1 -1
  91. package/lib/components/FlowModeller/Renderer/Renderer.types.js.map +1 -1
  92. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts +3 -3
  93. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts.map +1 -1
  94. package/lib/components/FlowModeller/Renderer/Utils/Graph.js +7 -1
  95. package/lib/components/FlowModeller/Renderer/Utils/Graph.js.map +1 -1
  96. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts +8 -4
  97. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts.map +1 -1
  98. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js +23 -3
  99. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js.map +1 -1
  100. package/lib/components/FlowModeller/Utils/{AddNodeUtils.d.ts → addNodeUtils.d.ts} +1 -1
  101. package/lib/components/FlowModeller/Utils/{AddNodeUtils.d.ts.map → addNodeUtils.d.ts.map} +1 -1
  102. package/lib/components/FlowModeller/Utils/{AddNodeUtils.js → addNodeUtils.js} +1 -1
  103. package/lib/components/FlowModeller/Utils/addNodeUtils.js.map +1 -0
  104. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts +29 -0
  105. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts.map +1 -0
  106. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js +71 -0
  107. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js.map +1 -0
  108. package/lib/components/FlowModeller/helper.d.ts +4 -7
  109. package/lib/components/FlowModeller/helper.d.ts.map +1 -1
  110. package/lib/components/FlowModeller/helper.js +67 -43
  111. package/lib/components/FlowModeller/helper.js.map +1 -1
  112. package/lib/components/FlowModeller/index.d.ts +5 -1
  113. package/lib/components/FlowModeller/index.d.ts.map +1 -1
  114. package/lib/components/FlowModeller/index.js +5 -1
  115. package/lib/components/FlowModeller/index.js.map +1 -1
  116. package/lib/components/ItemLibrary/ItemLibrary.d.ts +25 -0
  117. package/lib/components/ItemLibrary/ItemLibrary.d.ts.map +1 -0
  118. package/lib/components/{FlowModeller/NodeLibrary.js → ItemLibrary/ItemLibrary.js} +26 -12
  119. package/lib/components/ItemLibrary/ItemLibrary.js.map +1 -0
  120. package/lib/components/ItemLibrary/index.d.ts +3 -0
  121. package/lib/components/ItemLibrary/index.d.ts.map +1 -0
  122. package/lib/components/ItemLibrary/index.js +3 -0
  123. package/lib/components/ItemLibrary/index.js.map +1 -0
  124. package/lib/components/LifeCycle/Category.d.ts.map +1 -1
  125. package/lib/components/LifeCycle/Category.js +11 -8
  126. package/lib/components/LifeCycle/Category.js.map +1 -1
  127. package/lib/components/LifeCycle/LifeCycle.d.ts.map +1 -1
  128. package/lib/components/LifeCycle/LifeCycle.js +5 -5
  129. package/lib/components/LifeCycle/LifeCycle.js.map +1 -1
  130. package/lib/components/LifeCycle/LifeCycle.types.d.ts +14 -5
  131. package/lib/components/LifeCycle/LifeCycle.types.d.ts.map +1 -1
  132. package/lib/components/LifeCycle/LifeCycle.types.js +78 -1
  133. package/lib/components/LifeCycle/LifeCycle.types.js.map +1 -1
  134. package/lib/components/LifeCycle/LifeCycleList.d.ts +4 -3
  135. package/lib/components/LifeCycle/LifeCycleList.d.ts.map +1 -1
  136. package/lib/components/LifeCycle/LifeCycleList.js +6 -3
  137. package/lib/components/LifeCycle/LifeCycleList.js.map +1 -1
  138. package/lib/components/LifeCycle/Stage.d.ts +6 -10
  139. package/lib/components/LifeCycle/Stage.d.ts.map +1 -1
  140. package/lib/components/LifeCycle/Stage.js +47 -55
  141. package/lib/components/LifeCycle/Stage.js.map +1 -1
  142. package/lib/components/LifeCycle/Step.d.ts +5 -6
  143. package/lib/components/LifeCycle/Step.d.ts.map +1 -1
  144. package/lib/components/LifeCycle/Step.js +31 -43
  145. package/lib/components/LifeCycle/Step.js.map +1 -1
  146. package/lib/components/LifeCycle/Task.d.ts +6 -1
  147. package/lib/components/LifeCycle/Task.d.ts.map +1 -1
  148. package/lib/components/LifeCycle/Task.js +26 -10
  149. package/lib/components/LifeCycle/Task.js.map +1 -1
  150. package/lib/components/LifeCycle/index.d.ts +1 -2
  151. package/lib/components/LifeCycle/index.d.ts.map +1 -1
  152. package/lib/components/LifeCycle/index.js.map +1 -1
  153. package/lib/components/ObjectPreview/ObjectPreview.d.ts +16 -0
  154. package/lib/components/ObjectPreview/ObjectPreview.d.ts.map +1 -0
  155. package/lib/components/ObjectPreview/ObjectPreview.js +25 -0
  156. package/lib/components/ObjectPreview/ObjectPreview.js.map +1 -0
  157. package/lib/components/ObjectPreview/index.d.ts +3 -0
  158. package/lib/components/ObjectPreview/index.d.ts.map +1 -0
  159. package/lib/components/ObjectPreview/index.js +3 -0
  160. package/lib/components/ObjectPreview/index.js.map +1 -0
  161. package/lib/components/ObjectSelect/ObjectConfig.d.ts +18 -0
  162. package/lib/components/ObjectSelect/ObjectConfig.d.ts.map +1 -0
  163. package/lib/components/ObjectSelect/ObjectConfig.js +14 -0
  164. package/lib/components/ObjectSelect/ObjectConfig.js.map +1 -0
  165. package/lib/components/ObjectSelect/ObjectPicker.d.ts +11 -0
  166. package/lib/components/ObjectSelect/ObjectPicker.d.ts.map +1 -0
  167. package/lib/components/ObjectSelect/ObjectPicker.js +26 -0
  168. package/lib/components/ObjectSelect/ObjectPicker.js.map +1 -0
  169. package/lib/components/ObjectSelect/ObjectSelect.d.ts +27 -0
  170. package/lib/components/ObjectSelect/ObjectSelect.d.ts.map +1 -0
  171. package/lib/components/ObjectSelect/ObjectSelect.js +25 -0
  172. package/lib/components/ObjectSelect/ObjectSelect.js.map +1 -0
  173. package/lib/components/ObjectSelect/ObjectSummary.d.ts +22 -0
  174. package/lib/components/ObjectSelect/ObjectSummary.d.ts.map +1 -0
  175. package/lib/components/ObjectSelect/ObjectSummary.js +50 -0
  176. package/lib/components/ObjectSelect/ObjectSummary.js.map +1 -0
  177. package/lib/components/ObjectSelect/index.d.ts +3 -0
  178. package/lib/components/ObjectSelect/index.d.ts.map +1 -0
  179. package/lib/components/ObjectSelect/index.js +2 -0
  180. package/lib/components/ObjectSelect/index.js.map +1 -0
  181. package/lib/components/PageTemplates/GalleryPage.js +4 -4
  182. package/lib/components/PageTemplates/GalleryPage.js.map +1 -1
  183. package/lib/components/PageTemplates/PageTemplates.d.ts +3 -3
  184. package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
  185. package/lib/components/PageTemplates/PageTemplates.js +29 -47
  186. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  187. package/lib/components/SummaryCard/SummaryCard.d.ts +2 -3
  188. package/lib/components/SummaryCard/SummaryCard.d.ts.map +1 -1
  189. package/lib/components/SummaryCard/SummaryCard.js +3 -4
  190. package/lib/components/SummaryCard/SummaryCard.js.map +1 -1
  191. package/lib/components/Workbench/ConfigurationPanel.d.ts.map +1 -1
  192. package/lib/components/Workbench/ConfigurationPanel.js +3 -4
  193. package/lib/components/Workbench/ConfigurationPanel.js.map +1 -1
  194. package/lib/components/Workbench/Toolbar.d.ts +1 -5
  195. package/lib/components/Workbench/Toolbar.d.ts.map +1 -1
  196. package/lib/components/Workbench/Toolbar.js +8 -8
  197. package/lib/components/Workbench/Toolbar.js.map +1 -1
  198. package/lib/components/Workbench/UtilityPanel.js +1 -1
  199. package/lib/components/Workbench/UtilityPanel.js.map +1 -1
  200. package/lib/components/Workbench/Workbench.d.ts.map +1 -1
  201. package/lib/components/Workbench/Workbench.js +2 -3
  202. package/lib/components/Workbench/Workbench.js.map +1 -1
  203. package/lib/components/Workbench/Workbench.styles.d.ts +2 -3
  204. package/lib/components/Workbench/Workbench.styles.d.ts.map +1 -1
  205. package/lib/components/Workbench/Workbench.styles.js +23 -23
  206. package/lib/components/Workbench/Workbench.styles.js.map +1 -1
  207. package/lib/components/Workbench/Workbench.types.d.ts +0 -2
  208. package/lib/components/Workbench/Workbench.types.d.ts.map +1 -1
  209. package/lib/components/Workbench/Workbench.types.js.map +1 -1
  210. package/lib/index.d.ts +7 -1
  211. package/lib/index.d.ts.map +1 -1
  212. package/lib/index.js +7 -1
  213. package/lib/index.js.map +1 -1
  214. package/lib/utils/index.d.ts +2 -0
  215. package/lib/utils/index.d.ts.map +1 -0
  216. package/lib/utils/index.js +2 -0
  217. package/lib/utils/index.js.map +1 -0
  218. package/lib/utils/utils.d.ts +14 -0
  219. package/lib/utils/utils.d.ts.map +1 -0
  220. package/lib/utils/utils.js +13 -0
  221. package/lib/utils/utils.js.map +1 -0
  222. package/package.json +19 -15
  223. package/lib/components/FlowModeller/NodeLibrary.d.ts +0 -13
  224. package/lib/components/FlowModeller/NodeLibrary.d.ts.map +0 -1
  225. package/lib/components/FlowModeller/NodeLibrary.js.map +0 -1
  226. package/lib/components/FlowModeller/Utils/AddNodeUtils.js.map +0 -1
  227. package/lib/components/Visual/Visual.d.ts +0 -17
  228. package/lib/components/Visual/Visual.d.ts.map +0 -1
  229. package/lib/components/Visual/Visual.js +0 -28
  230. package/lib/components/Visual/Visual.js.map +0 -1
  231. package/lib/components/Visual/index.d.ts +0 -3
  232. package/lib/components/Visual/index.d.ts.map +0 -1
  233. package/lib/components/Visual/index.js +0 -3
  234. package/lib/components/Visual/index.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect, forwardRef } from 'react';
3
+ import styled from 'styled-components';
4
+ import { Button, Select, Option, Text, Flex, useI18n, Icon, Popover } from '@pega/cosmos-react-core';
5
+ import { DirectedGraph } from './Renderer/Utils/Graph';
6
+ import deleteNodeUtils from './Utils/deleteNodeUtils';
7
+ export const StyledDeletePopover = styled(Popover) `
8
+ max-width: 25rem;
9
+ `;
10
+ const DeletePopover = forwardRef(({ show, target, flowGraphData, rendererGraphData, nodeId, onChange, onSubmit, onCancel }, ref) => {
11
+ const [currentSelection, setCurrentSelection] = useState(0);
12
+ const t = useI18n();
13
+ const graph = new DirectedGraph(rendererGraphData);
14
+ const deleteOptionsResult = deleteNodeUtils.getDeleteNodeOptions(graph, nodeId);
15
+ const deleteOptions = deleteOptionsResult.options;
16
+ useEffect(() => {
17
+ const itemsToDelete = deleteOptions[currentSelection].restItems;
18
+ // add the actual node to be deleted also, to the list
19
+ itemsToDelete.nodes[nodeId] = graph.getNode(nodeId);
20
+ onChange?.(itemsToDelete, deleteOptions[currentSelection].pathItems);
21
+ }, [rendererGraphData]);
22
+ const onChangeHandler = (ev) => {
23
+ const newSelection = ev.target.selectedIndex >= deleteOptions.length ? -1 : ev.target.selectedIndex;
24
+ setCurrentSelection(newSelection);
25
+ let itemsToDelete = deleteOptionsResult.allItems;
26
+ let itemsToRetain;
27
+ if (newSelection !== -1) {
28
+ itemsToDelete = deleteOptions[newSelection].restItems;
29
+ itemsToRetain = deleteOptions[newSelection].pathItems;
30
+ }
31
+ // add the actual node to be deleted also, to the list
32
+ itemsToDelete.nodes[nodeId] = graph.getNode(nodeId);
33
+ onChange?.(itemsToDelete, itemsToRetain, ev);
34
+ };
35
+ const submitHandler = (ev) => {
36
+ const finalGraph = new DirectedGraph(flowGraphData);
37
+ const finalDeleteOptionsResult = deleteNodeUtils.getDeleteNodeOptions(finalGraph, nodeId);
38
+ let newTargetNode = finalGraph.getNode(finalDeleteOptionsResult.destinationNodeId);
39
+ let itemsToDelete = finalDeleteOptionsResult.allItems;
40
+ const selectedOption = currentSelection === -1 ? undefined : deleteOptions[currentSelection];
41
+ let finalMetaData = selectedOption;
42
+ if (selectedOption) {
43
+ finalMetaData = finalDeleteOptionsResult.options.find(current => {
44
+ if (selectedOption.connector.id === current.connector.id) {
45
+ return true;
46
+ }
47
+ return false;
48
+ });
49
+ if (finalMetaData) {
50
+ // get the ref of the first node of the retaining path
51
+ newTargetNode = finalGraph.getNode(finalMetaData.connector.toNodeId);
52
+ itemsToDelete = finalMetaData.restItems;
53
+ }
54
+ }
55
+ // get the in-connectors of the selected node
56
+ const nodeInConnectors = finalGraph.getInConnectors(nodeId);
57
+ // iterate and set the targetNode to the above first node instead of the selected node.
58
+ nodeInConnectors.forEach(con => {
59
+ finalGraph.setConnector(con.id, {
60
+ toNodeId: newTargetNode.id
61
+ });
62
+ });
63
+ const resultGraphData = finalGraph.getGraphData();
64
+ itemsToDelete.nodes[nodeId] = finalGraph.getNode(nodeId);
65
+ // filter the highlighted nodes, including the selected node
66
+ const nodes = resultGraphData.nodes.filter(item => {
67
+ return itemsToDelete.nodes[item.id] === undefined;
68
+ });
69
+ if (finalMetaData) {
70
+ itemsToDelete.connectors[finalMetaData.connector.id] = finalMetaData.connector;
71
+ }
72
+ // filter the highlighted connectors
73
+ const connectors = resultGraphData.connectors.filter(item => {
74
+ // if not in items to delete, add to list
75
+ if (itemsToDelete.connectors[item.id] === undefined) {
76
+ return true;
77
+ }
78
+ return false;
79
+ });
80
+ const outcome = {
81
+ graphData: {
82
+ nodes: nodes,
83
+ connectors
84
+ },
85
+ updates: {
86
+ connectors: nodeInConnectors
87
+ },
88
+ deletes: itemsToDelete
89
+ };
90
+ onSubmit?.(outcome, ev);
91
+ };
92
+ const onCancelHandler = () => {
93
+ onCancel?.();
94
+ };
95
+ return (_jsx(StyledDeletePopover, { show: show, target: target, placement: 'right-end', ref: ref, modifiers: [
96
+ {
97
+ name: 'offset',
98
+ options: { offset: [0, 8] }
99
+ }
100
+ ], children: _jsxs(Flex, { container: { gap: 2, pad: 2, direction: 'column' }, children: [_jsxs(Flex, { container: { alignItems: 'center', justify: 'between' }, children: [_jsx(Text, { variant: 'h4', children: t('delete_decision_step_title') }), _jsx(Button, { variant: 'simple', icon: true, label: t('close'), onClick: onCancelHandler, children: _jsx(Icon, { name: 'times' }) })] }), _jsx(Text, { children: t('delete_decision_step') }), _jsxs(Select, { id: 'select-demo', label: t('delete_decision_step_outcome'), required: true, onChange: onChangeHandler, children: [deleteOptions.map((item, index) => {
101
+ return (_jsx(Option, { selected: currentSelection === index, children: item.connector.label ? item.connector.label : item.connector.id }, item.connector.id));
102
+ }), _jsx(Option, { selected: currentSelection === -1, children: t('delete_all_outcomes') }, 'none')] }), _jsxs(Flex, { container: { direction: 'row', justify: 'between' }, children: [_jsx(Button, { onClick: onCancelHandler, children: t('cancel') }), _jsx(Button, { variant: 'primary', onClick: submitHandler, children: t('delete') })] })] }) }));
103
+ });
104
+ export default DeletePopover;
105
+ //# sourceMappingURL=DeletePopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeletePopover.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/DeletePopover.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, ChangeEventHandler, ChangeEvent, useEffect, forwardRef, Ref } from 'react';\nimport styled from 'styled-components';\n\nimport {\n Button,\n Select,\n Option,\n Text,\n Flex,\n useI18n,\n Icon,\n Popover,\n PopoverProps\n} from '@pega/cosmos-react-core';\n\nimport { DirectedGraph, GraphData } from './Renderer/Utils/Graph';\nimport deleteNodeUtils, { GraphDataAsMap, DeleteNodeOutcome } from './Utils/deleteNodeUtils';\nimport { NodeProps } from './Node/Node.types';\n\nexport interface DeleteNodePopoverProps {\n show: boolean;\n target: PopoverProps['target'];\n flowGraphData: GraphData;\n rendererGraphData: GraphData;\n nodeId: string;\n onChange?: (\n itemsToDelete: GraphDataAsMap,\n itemsToRetain: GraphDataAsMap | undefined,\n ev?: ChangeEvent\n ) => void;\n ref?: Ref<HTMLDivElement>;\n onSubmit?: (outcome: DeleteNodeOutcome, ev: Event) => void;\n onCancel?: () => void;\n}\n\nexport const StyledDeletePopover = styled(Popover)`\n max-width: 25rem;\n`;\n\nconst DeletePopover = forwardRef(\n (\n {\n show,\n target,\n flowGraphData,\n rendererGraphData,\n nodeId,\n onChange,\n onSubmit,\n onCancel\n }: DeleteNodePopoverProps,\n ref: DeleteNodePopoverProps['ref']\n ) => {\n const [currentSelection, setCurrentSelection] = useState<number>(0);\n\n const t = useI18n();\n\n const graph = new DirectedGraph(rendererGraphData);\n const deleteOptionsResult = deleteNodeUtils.getDeleteNodeOptions(graph, nodeId);\n const deleteOptions = deleteOptionsResult!.options;\n\n useEffect(() => {\n const itemsToDelete = deleteOptions[currentSelection].restItems;\n\n // add the actual node to be deleted also, to the list\n itemsToDelete.nodes[nodeId] = graph.getNode(nodeId);\n\n onChange?.(itemsToDelete, deleteOptions[currentSelection].pathItems);\n }, [rendererGraphData]);\n\n const onChangeHandler: ChangeEventHandler = (ev: ChangeEvent<HTMLSelectElement>) => {\n const newSelection =\n ev.target.selectedIndex >= deleteOptions.length ? -1 : ev.target.selectedIndex;\n\n setCurrentSelection(newSelection);\n\n let itemsToDelete = deleteOptionsResult!.allItems;\n\n let itemsToRetain;\n\n if (newSelection !== -1) {\n itemsToDelete = deleteOptions[newSelection].restItems;\n itemsToRetain = deleteOptions[newSelection].pathItems;\n }\n\n // add the actual node to be deleted also, to the list\n itemsToDelete.nodes[nodeId] = graph.getNode(nodeId);\n\n onChange?.(itemsToDelete, itemsToRetain, ev);\n };\n\n const submitHandler = (ev: Event) => {\n const finalGraph = new DirectedGraph(flowGraphData);\n const finalDeleteOptionsResult = deleteNodeUtils.getDeleteNodeOptions(finalGraph, nodeId);\n\n let newTargetNode = finalGraph.getNode(finalDeleteOptionsResult!.destinationNodeId);\n let itemsToDelete = finalDeleteOptionsResult!.allItems;\n\n const selectedOption = currentSelection === -1 ? undefined : deleteOptions[currentSelection];\n let finalMetaData = selectedOption;\n\n if (selectedOption) {\n finalMetaData = finalDeleteOptionsResult!.options.find(current => {\n if (selectedOption.connector.id === current.connector.id) {\n return true;\n }\n\n return false;\n });\n\n if (finalMetaData) {\n // get the ref of the first node of the retaining path\n newTargetNode = finalGraph.getNode(finalMetaData.connector.toNodeId);\n itemsToDelete = finalMetaData.restItems;\n }\n }\n\n // get the in-connectors of the selected node\n const nodeInConnectors = finalGraph.getInConnectors(nodeId);\n // iterate and set the targetNode to the above first node instead of the selected node.\n nodeInConnectors.forEach(con => {\n finalGraph.setConnector(con.id, {\n toNodeId: newTargetNode.id\n });\n });\n\n const resultGraphData = finalGraph.getGraphData();\n\n itemsToDelete.nodes[nodeId] = finalGraph.getNode(nodeId);\n // filter the highlighted nodes, including the selected node\n const nodes = resultGraphData.nodes.filter(item => {\n return itemsToDelete.nodes[item.id] === undefined;\n });\n\n if (finalMetaData) {\n itemsToDelete.connectors[finalMetaData.connector.id] = finalMetaData.connector;\n }\n // filter the highlighted connectors\n const connectors = resultGraphData.connectors.filter(item => {\n // if not in items to delete, add to list\n if (itemsToDelete.connectors[item.id] === undefined) {\n return true;\n }\n\n return false;\n });\n\n const outcome: DeleteNodeOutcome = {\n graphData: {\n nodes: nodes as NodeProps[],\n connectors\n },\n updates: {\n connectors: nodeInConnectors\n },\n deletes: itemsToDelete\n };\n\n onSubmit?.(outcome, ev);\n };\n\n const onCancelHandler = () => {\n onCancel?.();\n };\n\n return (\n <StyledDeletePopover\n show={show}\n target={target}\n placement='right-end'\n ref={ref}\n modifiers={[\n {\n name: 'offset',\n options: { offset: [0, 8] }\n }\n ]}\n >\n <Flex container={{ gap: 2, pad: 2, direction: 'column' }}>\n <Flex container={{ alignItems: 'center', justify: 'between' }}>\n <Text variant='h4'>{t('delete_decision_step_title')}</Text>\n <Button variant='simple' icon label={t('close')} onClick={onCancelHandler}>\n <Icon name='times' />\n </Button>\n </Flex>\n <Text>{t('delete_decision_step')}</Text>\n <Select\n id='select-demo'\n label={t('delete_decision_step_outcome')}\n required\n onChange={onChangeHandler}\n >\n {deleteOptions.map((item, index) => {\n return (\n <Option key={item.connector.id} selected={currentSelection === index}>\n {item.connector.label ? item.connector.label : item.connector.id}\n </Option>\n );\n })}\n\n <Option key='none' selected={currentSelection === -1}>\n {t('delete_all_outcomes')}\n </Option>\n </Select>\n\n <Flex container={{ direction: 'row', justify: 'between' }}>\n <Button onClick={onCancelHandler}>{t('cancel')}</Button>\n <Button variant='primary' onClick={submitHandler}>\n {t('delete')}\n </Button>\n </Flex>\n </Flex>\n </StyledDeletePopover>\n );\n }\n);\n\nexport default DeletePopover;\n"]}
@@ -1,7 +1,7 @@
1
1
  import { PropsWithoutRef, MouseEvent } from 'react';
2
2
  import { Action } from '@pega/cosmos-react-core';
3
3
  import { GraphData, ConnectorProps } from './Renderer/Utils/Graph';
4
- import { AddNodeHandlerParams } from './Renderer/Renderer.types';
4
+ import { AddNodeHandlerParams, RendererProps } from './Renderer/Renderer.types';
5
5
  import { ActionParams, NodeProps, NodeLibraryItem, NodeType } from './Node/Node.types';
6
6
  export interface FlowModellerProps {
7
7
  graphData: GraphData<NodeProps, ConnectorProps>;
@@ -13,9 +13,13 @@ export interface FlowModellerProps {
13
13
  onNodeClick?: (nodeId: string) => void;
14
14
  /** Callback for actions on Node */
15
15
  onNodeActionClick?: (param: ActionParams, e: MouseEvent) => void;
16
+ /** Callback for node deletion */
17
+ onDelete?: (param: ActionParams, e: MouseEvent) => void;
16
18
  /** Types of nodes */
17
19
  nodeLibrary: NodeLibraryItem[];
20
+ /** Highlights */
21
+ highlightData?: RendererProps['highlights'];
18
22
  }
19
- declare const FlowModeller: ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, nodeLibrary, actions }: PropsWithoutRef<FlowModellerProps>) => JSX.Element;
23
+ declare const FlowModeller: ({ graphData, highlightData, onNodeActionClick, onNodeAdd, nodeLibrary, onNodeClick, onDelete, actions }: PropsWithoutRef<FlowModellerProps>) => JSX.Element;
20
24
  export default FlowModeller;
21
25
  //# sourceMappingURL=FlowModeller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowModeller.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,UAAU,EAMX,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,MAAM,EAOP,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,YAAY,EACZ,SAAS,EACT,eAAe,EAGf,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtE,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,qBAAqB;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAsED,QAAA,MAAM,YAAY,mFAOf,gBAAgB,iBAAiB,CAAC,gBAuMpC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FlowModeller.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,UAAU,EAKX,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,MAAM,EAMP,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,oBAAoB,EAGpB,aAAa,EACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,YAAY,EACZ,SAAS,EACT,eAAe,EAGf,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACtE,kDAAkD;IAClD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACxD,qBAAqB;IACrB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,iBAAiB;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CAC7C;AAiFD,QAAA,MAAM,YAAY,4GASf,gBAAgB,iBAAiB,CAAC,gBA8OpC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,15 +1,18 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useReducer, useCallback } from 'react';
3
- import styled, { css } from 'styled-components';
4
- import { createUID, useElement, useOuterEvent, Flex, Text, defaultThemeProp } from '@pega/cosmos-react-core';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useReducer, useCallback, useRef } from 'react';
3
+ import { createUID, useElement, useOuterEvent, useI18n } from '@pega/cosmos-react-core';
4
+ import ItemLibrary from '../ItemLibrary/ItemLibrary';
5
5
  import FlowRenderer from './Renderer/Renderer';
6
- import { StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';
7
6
  import { START_NODETYPE, STOP_NODETYPE } from './Node/Node.types';
8
- import NodeLibrary from './NodeLibrary';
9
- import PlaceHolderHelper, { isPlaceHolderConnector } from './Utils/AddNodeUtils';
7
+ import PlaceHolderHelper from './Utils/addNodeUtils';
10
8
  import { AddButton } from './AddNode';
9
+ import FlowModellerHelper from './helper';
10
+ import DeletePopover from './DeletePopover';
11
+ import Connector from './Connector';
12
+ import Node from './Node';
11
13
  const initState = {
12
14
  showLib: false,
15
+ activeItem: null,
13
16
  activeAddBtnMeta: {
14
17
  target: null,
15
18
  meta: {
@@ -18,8 +21,9 @@ const initState = {
18
21
  }
19
22
  },
20
23
  graphData: { nodes: [], connectors: [] },
21
- connectorComponent: () => _jsx(_Fragment, {}, void 0),
22
- nodeComponent: () => _jsx(_Fragment, {}, void 0)
24
+ highlightItems: undefined,
25
+ showDeletePopover: false,
26
+ deleteProps: undefined
23
27
  };
24
28
  const reducer = (state, action) => {
25
29
  switch (action.type) {
@@ -28,6 +32,11 @@ const reducer = (state, action) => {
28
32
  return action.payload.show === state.showLib
29
33
  ? state
30
34
  : { ...state, showLib: action.payload.show };
35
+ case 'setActiveItem':
36
+ return {
37
+ ...state,
38
+ activeItem: action.payload.target
39
+ };
31
40
  case 'setActiveAddButton':
32
41
  state.activeAddBtnMeta = {
33
42
  ...action.payload
@@ -40,30 +49,40 @@ const reducer = (state, action) => {
40
49
  return {
41
50
  ...state,
42
51
  graphData: action.payload.graphData,
43
- connectorComponent: action.payload.connectorComponent,
44
- nodeComponent: action.payload.nodeComponent
52
+ highlightItems: action.payload.highlightItems
53
+ };
54
+ case 'highlight':
55
+ // minor optimization to avoid unnecessary re-render
56
+ if (action.payload.hideDeletePopover === !state.showDeletePopover) {
57
+ return state;
58
+ }
59
+ return {
60
+ ...state,
61
+ highlightItems: action.payload.highlightItems,
62
+ showDeletePopover: action.payload.hideDeletePopover !== true && state.showDeletePopover
63
+ };
64
+ case 'showDeletePopover':
65
+ return {
66
+ ...state,
67
+ showDeletePopover: action.payload.showDeletePopover,
68
+ deleteProps: action.payload.deleteProps
45
69
  };
46
70
  default:
47
71
  return state;
48
72
  }
49
73
  };
50
- const StyledLabel = styled(Text)(({ theme }) => {
51
- return css `
52
- border-radius: ${theme.base['border-radius']};
53
- background: ${theme.base.colors.slate.dark};
54
- color: ${theme.base.colors.white};
55
- text-align: center;
56
- padding: calc(0.5 * ${theme.base.spacing});
57
- overflow: hidden;
58
- text-overflow: ellipsis;
59
- max-width: 32ch;
60
- white-space: nowrap;
61
- `;
62
- });
63
- StyledLabel.defaultProps = defaultThemeProp;
64
- const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, nodeLibrary, actions }) => {
74
+ const FlowModeller = ({ graphData, highlightData, onNodeActionClick, onNodeAdd, nodeLibrary, onNodeClick, onDelete, actions }) => {
65
75
  const [state, dispatch] = useReducer(reducer, initState);
66
76
  const [popoverEl, setPopoverEl] = useElement(null);
77
+ const [deletePopoverEl, setDeletePopoverEl] = useElement(null);
78
+ const stateRef = useRef(initState);
79
+ // stateRef always refers to the same state obj
80
+ // "fixed" callbacks can refer to this object whenever
81
+ // it need the current value. Note: the callbacks will not
82
+ // be reactive - they will not re-run the instant state changes,
83
+ // but they *will* see the current value whenever they do run
84
+ stateRef.current = state;
85
+ const t = useI18n();
67
86
  const onNodeCreate = (el, meta) => {
68
87
  dispatch({
69
88
  type: 'setActiveAddButton',
@@ -81,13 +100,61 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
81
100
  }
82
101
  });
83
102
  };
103
+ const closeDeleteModel = () => {
104
+ // un-highlight the nodes and connectors
105
+ dispatch({
106
+ type: 'highlight',
107
+ payload: {
108
+ highlightItems: undefined,
109
+ hideDeletePopover: true
110
+ }
111
+ });
112
+ };
113
+ const onDeleteWrapper = useCallback((params, e) => {
114
+ const result = FlowModellerHelper.deleteNode(graphData, params.nodeId);
115
+ if (result) {
116
+ onDelete?.({ ...params, additionalData: result }, e);
117
+ }
118
+ else {
119
+ dispatch({
120
+ type: 'showDeletePopover',
121
+ payload: {
122
+ showDeletePopover: true,
123
+ deleteProps: {
124
+ flowGraphData: graphData,
125
+ rendererGraphData: stateRef.current.graphData,
126
+ nodeId: params.nodeId,
127
+ target: {
128
+ getBoundingClientRect: () => document
129
+ .getElementById(`modeller-node-${stateRef.current.deleteProps?.nodeId}`)
130
+ ?.getBoundingClientRect()
131
+ },
132
+ onChange: highlights => {
133
+ dispatch({
134
+ type: 'highlight',
135
+ payload: {
136
+ highlightItems: highlights
137
+ }
138
+ });
139
+ },
140
+ onSubmit: outcome => {
141
+ // un-highlight the nodes and connectors
142
+ closeDeleteModel();
143
+ onDelete?.({ ...params, additionalData: outcome }, e);
144
+ },
145
+ onCancel: closeDeleteModel
146
+ }
147
+ }
148
+ });
149
+ }
150
+ }, [graphData, state.graphData]);
84
151
  useEffect(() => {
85
152
  const onGetNewPHNode = metaData => {
86
153
  return {
87
154
  id: createUID(),
88
155
  children: (_jsx(AddButton, { addNodeHandler: (e) => {
89
156
  onNodeCreate(e.currentTarget, metaData);
90
- } }, void 0)),
157
+ } })),
91
158
  position: { x: 0, y: 0 },
92
159
  dimensions: { width: 1, height: 0 }
93
160
  };
@@ -97,33 +164,11 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
97
164
  id: createUID(),
98
165
  fromNodeId,
99
166
  toNodeId,
100
- points: []
101
- };
102
- };
103
- const Connector = props => {
104
- const { id, labelLayout } = props;
105
- const refId = isPlaceHolderConnector(props)
106
- ? props.realConnectors
107
- : id.toString();
108
- const metaData = {
109
- refType: 'connector',
110
- refId
167
+ points: [],
168
+ data: {
169
+ onNodeCreate
170
+ }
111
171
  };
112
- return (_jsxs(_Fragment, { children: [labelLayout?.value && (_jsx(Flex, { container: { justify: 'center' }, children: _jsx(StyledLabel, { children: labelLayout.value }, void 0) }, void 0)), _jsx(AddButton, { addNodeHandler: (e) => {
113
- onNodeCreate(e.currentTarget, metaData);
114
- } }, void 0)] }, void 0));
115
- };
116
- const Node = ({ id, type, label, description, additionalData }) => {
117
- if (!type) {
118
- return _jsx("div", {}, void 0);
119
- }
120
- if (type?.id === START_NODETYPE.id) {
121
- return _jsx(StartNode, { id: id, type: type, label: label.toUpperCase() }, void 0);
122
- }
123
- if (type?.id === STOP_NODETYPE.id) {
124
- return _jsx(EndNode, { id: id, type: type, label: label.toUpperCase() }, void 0);
125
- }
126
- return (_jsx(DefaultNode, { id: id, label: label, type: type, description: description, onActionClick: onNodeActionClick, onClick: onNodeClick, actions: actions, additionalData: additionalData }, void 0));
127
172
  };
128
173
  const flowNodes = graphData.nodes.map(node => {
129
174
  const flowNode = {
@@ -135,6 +180,13 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
135
180
  position: {
136
181
  x: 0,
137
182
  y: 0
183
+ },
184
+ data: {
185
+ isActive: state.activeItem?.id === node.id,
186
+ actions,
187
+ onDelete: onDeleteWrapper,
188
+ onActionClick: onNodeActionClick,
189
+ onClick: onNodeClick
138
190
  }
139
191
  };
140
192
  if (node.type.id === START_NODETYPE.id || node.type.id === STOP_NODETYPE.id) {
@@ -148,7 +200,8 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
148
200
  ...connector,
149
201
  points: [],
150
202
  data: {
151
- label: connector.label
203
+ label: connector.label,
204
+ onNodeCreate
152
205
  }
153
206
  };
154
207
  });
@@ -157,9 +210,7 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
157
210
  dispatch({
158
211
  type: 'setGraphData',
159
212
  payload: {
160
- graphData: newGraphData,
161
- connectorComponent: Connector,
162
- nodeComponent: Node
213
+ graphData: newGraphData
163
214
  }
164
215
  });
165
216
  }, [graphData]);
@@ -177,6 +228,7 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
177
228
  }
178
229
  }, [closeMenu]);
179
230
  useOuterEvent('mousedown', [popoverEl], closeMenu);
231
+ useOuterEvent('mousedown', [deletePopoverEl], closeDeleteModel);
180
232
  useEffect(() => {
181
233
  document.addEventListener('keydown', onKeydown);
182
234
  return () => {
@@ -184,7 +236,7 @@ const FlowModeller = ({ graphData, onNodeActionClick, onNodeClick, onNodeAdd, no
184
236
  };
185
237
  }, []);
186
238
  const items = nodeLibrary !== undefined ? nodeLibrary : [];
187
- return (_jsxs("div", { children: [_jsx(FlowRenderer, { graphData: state.graphData, connector: state.connectorComponent, node: state.nodeComponent }, void 0), _jsx(NodeLibrary, { show: state.showLib, target: state.activeAddBtnMeta.target, items: items, onClick: onLibraryItemSelect, ref: setPopoverEl }, void 0)] }, void 0));
239
+ return (_jsxs("div", { children: [_jsx(FlowRenderer, { graphData: state.graphData, connector: Connector, node: Node, highlights: highlightData ?? state.highlightItems }), state.showDeletePopover && state.deleteProps && (_jsx(DeletePopover, { show: state.showDeletePopover, ref: setDeletePopoverEl, ...state.deleteProps })), _jsx(ItemLibrary, { show: state.showLib, target: state.activeAddBtnMeta.target, placeholder: t('search_nodes'), items: items, onClick: onLibraryItemSelect, ref: setPopoverEl, position: 'bottom' })] }));
188
240
  };
189
241
  export default FlowModeller;
190
242
  //# sourceMappingURL=FlowModeller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowModeller.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,SAAS,EAET,UAAU,EAGV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAEL,SAAS,EACT,UAAU,EACV,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAIL,cAAc,EACd,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,iBAAiB,EAAE,EACxB,sBAAsB,EAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AA2BtC,MAAM,SAAS,GAAkB;IAC/B,OAAO,EAAE,KAAK;IACd,gBAAgB,EAAE;QAChB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;SACV;KACF;IACD,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACxC,kBAAkB,EAAE,GAAG,EAAE,CAAC,2BAAK;IAC/B,aAAa,EAAE,GAAG,EAAE,CAAC,2BAAK;CAC3B,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAE,MAAsC,EAAE,EAAE;IAC/E,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,aAAa;YAChB,sEAAsE;YACtE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO;gBAC1C,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,oBAAoB;YACvB,KAAK,CAAC,gBAAgB,GAAG;gBACvB,GAAG,MAAM,CAAC,OAAO;aAClB,CAAC;YACF,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,GAAG,KAAK;gBACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;gBACnC,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB;gBACrD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa;aAC5C,CAAC;QACJ;YACE,OAAO,KAAK,CAAC;KAChB;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7C,OAAO,GAAG,CAAA;qBACS,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;kBAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;aACjC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;;0BAEV,KAAK,CAAC,IAAI,CAAC,OAAO;;;;;GAKzC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE5C,MAAM,YAAY,GAAG,CAAC,EACpB,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,WAAW,EACX,OAAO,EAC4B,EAAE,EAAE;IACvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAA8B,OAAO,EAAE,SAAS,CAAC,CAAC;IACtF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,UAAU,CAAc,IAAI,CAAC,CAAC;IAEhE,MAAM,YAAY,GAAG,CAAC,EAAyC,EAAE,IAA0B,EAAE,EAAE;QAC7F,QAAQ,CAAC;YACP,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;gBACP,MAAM,EAAE,EAAE;gBACV,IAAI;aACL;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,QAAQ,CAAC;YACP,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE;gBACP,IAAI,EAAE,KAAK;aACZ;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAA0D,QAAQ,CAAC,EAAE;YACvF,OAAO;gBACL,EAAE,EAAE,SAAS,EAAE;gBACf,QAAQ,EAAE,CACR,KAAC,SAAS,IACR,cAAc,EAAE,CAAC,CAAgC,EAAE,EAAE;wBACnD,YAAY,CAAC,CAAC,CAAC,aAA4B,EAAE,QAAQ,CAAC,CAAC;oBACzD,CAAC,WACD,CACH;gBACD,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACxB,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;aACpC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAIK,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YACrD,OAAO;gBACL,EAAE,EAAE,SAAS,EAAE;gBACf,UAAU;gBACV,QAAQ;gBACR,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,SAAS,GAA+B,KAAK,CAAC,EAAE;YACpD,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;YAElC,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC;gBACzC,CAAC,CAAE,KAA8B,CAAC,cAAc;gBAChD,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YAElB,MAAM,QAAQ,GAAyB;gBACrC,OAAO,EAAE,WAAW;gBACpB,KAAK;aACN,CAAC;YAEF,OAAO,CACL,8BACG,WAAW,EAAE,KAAK,IAAI,CACrB,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YACpC,KAAC,WAAW,cAAE,WAAW,CAAC,KAAK,WAAe,WACzC,CACR,EACD,KAAC,SAAS,IACR,cAAc,EAAE,CAAC,CAAgC,EAAE,EAAE;4BACnD,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;wBAC1C,CAAC,WACD,YACD,CACJ,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,IAAI,GAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE;YAC/E,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,uBAAO,CAAC;aAChB;YACD,IAAI,IAAI,EAAE,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE;gBAClC,OAAO,KAAC,SAAS,IAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,WAAI,CAAC;aACtE;YACD,IAAI,IAAI,EAAE,EAAE,KAAK,aAAa,CAAC,EAAE,EAAE;gBACjC,OAAO,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,WAAI,CAAC;aACpE;YACD,OAAO,CACL,KAAC,WAAW,IACV,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,WAC9B,CACH,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,SAAS,GAAwB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAChE,MAAM,QAAQ,GAAsB;gBAClC,GAAG,IAAI;gBACP,UAAU,EAAE;oBACV,KAAK,EAAE,GAAG;oBACV,MAAM,EAAE,GAAG;iBACZ;gBACD,QAAQ,EAAE;oBACR,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,CAAC;iBACL;aACF,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,EAAE;gBAC3E,QAAQ,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC/B,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;aACjC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAA6B,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChF,OAAO;gBACL,GAAG,SAAS;gBACZ,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE;oBACJ,KAAK,EAAE,SAAS,CAAC,KAAK;iBACvB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,YAAY,GAChB,iBAAiB,CAAC,sBAAsB,CACtC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,EAChC,cAAc,EACd,mBAAmB,CACpB,CAAC;QAEJ,QAAQ,CAAC;YACP,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE;gBACP,SAAS,EAAE,YAAY;gBACvB,kBAAkB,EAAE,SAAS;gBAC7B,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB;;OAEG;IACH,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,OAAwB,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7C,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACzB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,CAAgB,EAAE,EAAE;QACnB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YACtB,SAAS,EAAE,CAAC;SACb;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAEnD,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAsB,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,OAAO,CACL,0BACE,KAAC,YAAY,IACX,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,SAAS,EAAE,KAAK,CAAC,kBAAkB,EACnC,IAAI,EAAE,KAAK,CAAC,aAAa,WACzB,EACF,KAAC,WAAW,IACV,IAAI,EAAE,KAAK,CAAC,OAAO,EACnB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,mBAAmB,EAC5B,GAAG,EAAE,YAAY,WACjB,YACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import {\n PropsWithoutRef,\n useEffect,\n MouseEvent,\n useReducer,\n FC,\n Reducer,\n useCallback,\n ComponentType\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Action,\n createUID,\n useElement,\n useOuterEvent,\n Flex,\n Text,\n defaultThemeProp\n} from '@pega/cosmos-react-core';\n\nimport { GraphData, ConnectorProps } from './Renderer/Utils/Graph';\nimport {\n AddNodeHandlerParams,\n RendererConnectorProps,\n RendererNodeProps\n} from './Renderer/Renderer.types';\nimport FlowRenderer from './Renderer/Renderer';\nimport { StartNode, EndNode, DefaultNode } from './Node/NodeTemplates';\nimport {\n ActionParams,\n NodeProps,\n NodeLibraryItem,\n START_NODETYPE,\n STOP_NODETYPE,\n NodeType\n} from './Node/Node.types';\nimport NodeLibrary from './NodeLibrary';\nimport PlaceHolderHelper, {\n isPlaceHolderConnector,\n PlaceHolderConnector\n} from './Utils/AddNodeUtils';\nimport { AddButton } from './AddNode';\n\nexport interface FlowModellerProps {\n graphData: GraphData<NodeProps, ConnectorProps>;\n /** Node actions */\n actions?: Action[];\n /** Callback to add node from connector */\n onNodeAdd: (nodeType: NodeType, params: AddNodeHandlerParams) => void;\n /** Callback for handling the click on the node */\n onNodeClick?: (nodeId: string) => void;\n /** Callback for actions on Node */\n onNodeActionClick?: (param: ActionParams, e: MouseEvent) => void;\n /** Types of nodes */\n nodeLibrary: NodeLibraryItem[];\n}\n\ntype ModellerState = {\n showLib: boolean;\n activeAddBtnMeta: {\n target: null; // we will maintain ref of an Element\n meta: AddNodeHandlerParams;\n };\n graphData: GraphData<RendererNodeProps, RendererConnectorProps>;\n connectorComponent: ComponentType<RendererConnectorProps>;\n nodeComponent: ComponentType<RendererNodeProps>;\n};\n\nconst initState: ModellerState = {\n showLib: false,\n activeAddBtnMeta: {\n target: null,\n meta: {\n refType: 'node',\n refId: ''\n }\n },\n graphData: { nodes: [], connectors: [] },\n connectorComponent: () => <></>,\n nodeComponent: () => <></>\n};\n\nconst reducer = (state: ModellerState, action: { type: string; payload: any }) => {\n switch (action.type) {\n case 'showLibrary':\n // minor optimization, not to update state.. if no change in the value\n return action.payload.show === state.showLib\n ? state\n : { ...state, showLib: action.payload.show };\n case 'setActiveAddButton':\n state.activeAddBtnMeta = {\n ...action.payload\n };\n return {\n ...state,\n showLib: true\n };\n case 'setGraphData':\n return {\n ...state,\n graphData: action.payload.graphData,\n connectorComponent: action.payload.connectorComponent,\n nodeComponent: action.payload.nodeComponent\n };\n default:\n return state;\n }\n};\n\nconst StyledLabel = styled(Text)(({ theme }) => {\n return css`\n border-radius: ${theme.base['border-radius']};\n background: ${theme.base.colors.slate.dark};\n color: ${theme.base.colors.white};\n text-align: center;\n padding: calc(0.5 * ${theme.base.spacing});\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 32ch;\n white-space: nowrap;\n `;\n});\n\nStyledLabel.defaultProps = defaultThemeProp;\n\nconst FlowModeller = ({\n graphData,\n onNodeActionClick,\n onNodeClick,\n onNodeAdd,\n nodeLibrary,\n actions\n}: PropsWithoutRef<FlowModellerProps>) => {\n const [state, dispatch] = useReducer<Reducer<ModellerState, any>>(reducer, initState);\n const [popoverEl, setPopoverEl] = useElement<HTMLElement>(null);\n\n const onNodeCreate = (el: HTMLElement | SVGForeignObjectElement, meta: AddNodeHandlerParams) => {\n dispatch({\n type: 'setActiveAddButton',\n payload: {\n target: el,\n meta\n }\n });\n };\n\n const closeMenu = () => {\n dispatch({\n type: 'showLibrary',\n payload: {\n show: false\n }\n });\n };\n\n useEffect(() => {\n const onGetNewPHNode: (metaData: AddNodeHandlerParams) => RendererNodeProps = metaData => {\n return {\n id: createUID(),\n children: (\n <AddButton\n addNodeHandler={(e: MouseEvent<HTMLButtonElement>) => {\n onNodeCreate(e.currentTarget as HTMLElement, metaData);\n }}\n />\n ),\n position: { x: 0, y: 0 },\n dimensions: { width: 1, height: 0 }\n };\n };\n\n const onGetNewPHConnector: (\n fromNodeId: string,\n toNodeId: string,\n metaData: AddNodeHandlerParams\n ) => RendererConnectorProps = (fromNodeId, toNodeId) => {\n return {\n id: createUID(),\n fromNodeId,\n toNodeId,\n points: []\n };\n };\n\n const Connector: FC<RendererConnectorProps> = props => {\n const { id, labelLayout } = props;\n\n const refId = isPlaceHolderConnector(props)\n ? (props as PlaceHolderConnector).realConnectors\n : id.toString();\n\n const metaData: AddNodeHandlerParams = {\n refType: 'connector',\n refId\n };\n\n return (\n <>\n {labelLayout?.value && (\n <Flex container={{ justify: 'center' }}>\n <StyledLabel>{labelLayout.value}</StyledLabel>\n </Flex>\n )}\n <AddButton\n addNodeHandler={(e: MouseEvent<HTMLButtonElement>) => {\n onNodeCreate(e.currentTarget, metaData);\n }}\n />\n </>\n );\n };\n const Node: FC<NodeProps> = ({ id, type, label, description, additionalData }) => {\n if (!type) {\n return <div />;\n }\n if (type?.id === START_NODETYPE.id) {\n return <StartNode id={id} type={type} label={label.toUpperCase()} />;\n }\n if (type?.id === STOP_NODETYPE.id) {\n return <EndNode id={id} type={type} label={label.toUpperCase()} />;\n }\n return (\n <DefaultNode\n id={id}\n label={label}\n type={type}\n description={description}\n onActionClick={onNodeActionClick}\n onClick={onNodeClick}\n actions={actions}\n additionalData={additionalData}\n />\n );\n };\n\n const flowNodes: RendererNodeProps[] = graphData.nodes.map(node => {\n const flowNode: RendererNodeProps = {\n ...node,\n dimensions: {\n width: 280,\n height: 120\n },\n position: {\n x: 0,\n y: 0\n }\n };\n\n if (node.type.id === START_NODETYPE.id || node.type.id === STOP_NODETYPE.id) {\n flowNode.dimensions.width = 58;\n flowNode.dimensions.height = 58;\n }\n return flowNode;\n });\n\n const connectors: RendererConnectorProps[] = graphData.connectors.map(connector => {\n return {\n ...connector,\n points: [],\n data: {\n label: connector.label\n }\n };\n });\n\n // inject the placeholderAddNodes dynamically\n const newGraphData: GraphData<RendererNodeProps, RendererConnectorProps> =\n PlaceHolderHelper.injectPlaceholderNodes(\n { nodes: flowNodes, connectors },\n onGetNewPHNode,\n onGetNewPHConnector\n );\n\n dispatch({\n type: 'setGraphData',\n payload: {\n graphData: newGraphData,\n connectorComponent: Connector,\n nodeComponent: Node\n }\n });\n }, [graphData]);\n\n /**\n * Library popover functionality\n */\n const onLibraryItemSelect = useCallback(\n (libItem: NodeLibraryItem) => {\n const metaData = state.activeAddBtnMeta.meta;\n closeMenu();\n onNodeAdd(libItem.type, metaData);\n },\n [state.activeAddBtnMeta]\n );\n\n const onKeydown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeMenu();\n }\n },\n [closeMenu]\n );\n\n useOuterEvent('mousedown', [popoverEl], closeMenu);\n\n useEffect(() => {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }, []);\n\n const items: NodeLibraryItem[] = nodeLibrary !== undefined ? nodeLibrary : [];\n\n return (\n <div>\n <FlowRenderer\n graphData={state.graphData}\n connector={state.connectorComponent}\n node={state.nodeComponent}\n />\n <NodeLibrary\n show={state.showLib}\n target={state.activeAddBtnMeta.target}\n items={items}\n onClick={onLibraryItemSelect}\n ref={setPopoverEl}\n />\n </div>\n );\n};\n\nexport default FlowModeller;\n"]}
1
+ {"version":3,"file":"FlowModeller.js","sourceRoot":"","sources":["../../../src/components/FlowModeller/FlowModeller.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n PropsWithoutRef,\n useEffect,\n MouseEvent,\n useReducer,\n Reducer,\n useCallback,\n useRef\n} from 'react';\n\nimport {\n PopoverProps,\n Action,\n createUID,\n useElement,\n useOuterEvent,\n useI18n,\n OmitStrict\n} from '@pega/cosmos-react-core';\n\nimport ItemLibrary, { LibraryItem } from '../ItemLibrary/ItemLibrary';\n\nimport { GraphData, ConnectorProps } from './Renderer/Utils/Graph';\nimport {\n AddNodeHandlerParams,\n RendererConnectorProps,\n RendererNodeProps,\n RendererProps\n} from './Renderer/Renderer.types';\nimport FlowRenderer from './Renderer/Renderer';\nimport {\n ActionParams,\n NodeProps,\n NodeLibraryItem,\n START_NODETYPE,\n STOP_NODETYPE,\n NodeType,\n NodeComponentData\n} from './Node/Node.types';\nimport PlaceHolderHelper from './Utils/addNodeUtils';\nimport { AddButton } from './AddNode';\nimport FlowModellerHelper from './helper';\nimport DeletePopover, { DeleteNodePopoverProps } from './DeletePopover';\nimport Connector from './Connector';\nimport Node from './Node';\nimport { DeleteNodeModalOption, DeleteNodeOutcome } from './Utils/deleteNodeUtils';\n\nexport interface FlowModellerProps {\n graphData: GraphData<NodeProps, ConnectorProps>;\n /** Node actions */\n actions?: Action[];\n /** Callback to add node from connector */\n onNodeAdd: (nodeType: NodeType, params: AddNodeHandlerParams) => void;\n /** Callback for handling the click on the node */\n onNodeClick?: (nodeId: string) => void;\n /** Callback for actions on Node */\n onNodeActionClick?: (param: ActionParams, e: MouseEvent) => void;\n /** Callback for node deletion */\n onDelete?: (param: ActionParams, e: MouseEvent) => void;\n /** Types of nodes */\n nodeLibrary: NodeLibraryItem[];\n /** Highlights */\n highlightData?: RendererProps['highlights'];\n}\n\ntype ModellerState = {\n showLib: boolean;\n activeItem: Element | null;\n activeAddBtnMeta: {\n target: null; // we will maintain ref of an Element\n meta: AddNodeHandlerParams;\n };\n graphData: GraphData<RendererNodeProps, RendererConnectorProps>;\n highlightItems?: DeleteNodeModalOption['pathItems'];\n showDeletePopover: boolean;\n deleteProps:\n | OmitStrict<DeleteNodePopoverProps & { target: PopoverProps['target'] }, 'show'>\n | undefined;\n};\n\nconst initState: ModellerState = {\n showLib: false,\n activeItem: null,\n activeAddBtnMeta: {\n target: null,\n meta: {\n refType: 'node',\n refId: ''\n }\n },\n graphData: { nodes: [], connectors: [] },\n highlightItems: undefined,\n showDeletePopover: false,\n deleteProps: undefined\n};\n\nconst reducer = (state: ModellerState, action: { type: string; payload: any }) => {\n switch (action.type) {\n case 'showLibrary':\n // minor optimization, not to update state.. if no change in the value\n return action.payload.show === state.showLib\n ? state\n : { ...state, showLib: action.payload.show };\n case 'setActiveItem':\n return {\n ...state,\n activeItem: action.payload.target\n };\n case 'setActiveAddButton':\n state.activeAddBtnMeta = {\n ...action.payload\n };\n return {\n ...state,\n showLib: true\n };\n case 'setGraphData':\n return {\n ...state,\n graphData: action.payload.graphData,\n highlightItems: action.payload.highlightItems\n };\n case 'highlight':\n // minor optimization to avoid unnecessary re-render\n if (action.payload.hideDeletePopover === !state.showDeletePopover) {\n return state;\n }\n\n return {\n ...state,\n highlightItems: action.payload.highlightItems,\n showDeletePopover: action.payload.hideDeletePopover !== true && state.showDeletePopover\n };\n case 'showDeletePopover':\n return {\n ...state,\n showDeletePopover: action.payload.showDeletePopover,\n deleteProps: action.payload.deleteProps\n };\n default:\n return state;\n }\n};\n\nconst FlowModeller = ({\n graphData,\n highlightData,\n onNodeActionClick,\n onNodeAdd,\n nodeLibrary,\n onNodeClick,\n onDelete,\n actions\n}: PropsWithoutRef<FlowModellerProps>) => {\n const [state, dispatch] = useReducer<Reducer<ModellerState, any>>(reducer, initState);\n const [popoverEl, setPopoverEl] = useElement<HTMLElement>(null);\n const [deletePopoverEl, setDeletePopoverEl] = useElement<HTMLElement>(null);\n\n const stateRef = useRef<ModellerState>(initState);\n\n // stateRef always refers to the same state obj\n // \"fixed\" callbacks can refer to this object whenever\n // it need the current value. Note: the callbacks will not\n // be reactive - they will not re-run the instant state changes,\n // but they *will* see the current value whenever they do run\n stateRef.current = state;\n\n const t = useI18n();\n\n const onNodeCreate = (el: HTMLElement | SVGForeignObjectElement, meta: AddNodeHandlerParams) => {\n dispatch({\n type: 'setActiveAddButton',\n payload: {\n target: el,\n meta\n }\n });\n };\n\n const closeMenu = () => {\n dispatch({\n type: 'showLibrary',\n payload: {\n show: false\n }\n });\n };\n\n const closeDeleteModel = () => {\n // un-highlight the nodes and connectors\n dispatch({\n type: 'highlight',\n payload: {\n highlightItems: undefined,\n hideDeletePopover: true\n }\n });\n };\n\n const onDeleteWrapper = useCallback(\n (params: ActionParams, e: MouseEvent) => {\n const result: DeleteNodeOutcome | false = FlowModellerHelper.deleteNode(\n graphData,\n params.nodeId\n );\n\n if (result) {\n onDelete?.({ ...params, additionalData: result }, e);\n } else {\n dispatch({\n type: 'showDeletePopover',\n payload: {\n showDeletePopover: true,\n deleteProps: {\n flowGraphData: graphData,\n rendererGraphData: stateRef.current.graphData,\n nodeId: params.nodeId,\n target: {\n getBoundingClientRect: () =>\n document\n .getElementById(`modeller-node-${stateRef.current.deleteProps?.nodeId}`)\n ?.getBoundingClientRect()\n } as PopoverProps['target'],\n onChange: highlights => {\n dispatch({\n type: 'highlight',\n payload: {\n highlightItems: highlights\n }\n });\n },\n onSubmit: outcome => {\n // un-highlight the nodes and connectors\n closeDeleteModel();\n onDelete?.({ ...params, additionalData: outcome }, e);\n },\n onCancel: closeDeleteModel\n } as ModellerState['deleteProps']\n }\n });\n }\n },\n [graphData, state.graphData]\n );\n\n useEffect(() => {\n const onGetNewPHNode: (metaData: AddNodeHandlerParams) => RendererNodeProps = metaData => {\n return {\n id: createUID(),\n children: (\n <AddButton\n addNodeHandler={(e: MouseEvent<HTMLButtonElement>) => {\n onNodeCreate(e.currentTarget as HTMLElement, metaData);\n }}\n />\n ),\n position: { x: 0, y: 0 },\n dimensions: { width: 1, height: 0 }\n };\n };\n\n const onGetNewPHConnector: (\n fromNodeId: string,\n toNodeId: string,\n metaData: AddNodeHandlerParams\n ) => RendererConnectorProps = (fromNodeId, toNodeId) => {\n return {\n id: createUID(),\n fromNodeId,\n toNodeId,\n points: [],\n data: {\n onNodeCreate\n }\n };\n };\n\n const flowNodes: RendererNodeProps[] = graphData.nodes.map(node => {\n const flowNode: RendererNodeProps = {\n ...node,\n dimensions: {\n width: 280,\n height: 120\n },\n position: {\n x: 0,\n y: 0\n },\n data: {\n isActive: state.activeItem?.id === node.id,\n actions,\n onDelete: onDeleteWrapper,\n onActionClick: onNodeActionClick,\n onClick: onNodeClick\n } as NodeComponentData\n };\n\n if (node.type.id === START_NODETYPE.id || node.type.id === STOP_NODETYPE.id) {\n flowNode.dimensions.width = 58;\n flowNode.dimensions.height = 58;\n }\n return flowNode;\n });\n\n const connectors: RendererConnectorProps[] = graphData.connectors.map(connector => {\n return {\n ...connector,\n points: [],\n data: {\n label: connector.label,\n onNodeCreate\n }\n };\n });\n\n // inject the placeholderAddNodes dynamically\n const newGraphData: GraphData<RendererNodeProps, RendererConnectorProps> =\n PlaceHolderHelper.injectPlaceholderNodes(\n { nodes: flowNodes, connectors },\n onGetNewPHNode,\n onGetNewPHConnector\n );\n\n dispatch({\n type: 'setGraphData',\n payload: {\n graphData: newGraphData\n }\n });\n }, [graphData]);\n\n /**\n * Library popover functionality\n */\n const onLibraryItemSelect = useCallback(\n (libItem: LibraryItem) => {\n const metaData = state.activeAddBtnMeta.meta;\n closeMenu();\n onNodeAdd((libItem as NodeLibraryItem).type, metaData);\n },\n [state.activeAddBtnMeta]\n );\n\n const onKeydown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n closeMenu();\n }\n },\n [closeMenu]\n );\n\n useOuterEvent('mousedown', [popoverEl], closeMenu);\n useOuterEvent('mousedown', [deletePopoverEl], closeDeleteModel);\n\n useEffect(() => {\n document.addEventListener('keydown', onKeydown);\n\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }, []);\n\n const items: NodeLibraryItem[] = nodeLibrary !== undefined ? nodeLibrary : [];\n\n return (\n <div>\n <FlowRenderer\n graphData={state.graphData}\n connector={Connector}\n node={Node}\n highlights={highlightData ?? state.highlightItems}\n />\n {state.showDeletePopover && state.deleteProps && (\n <DeletePopover\n show={state.showDeletePopover}\n ref={setDeletePopoverEl}\n {...state.deleteProps}\n />\n )}\n <ItemLibrary\n show={state.showLib}\n target={state.activeAddBtnMeta.target}\n placeholder={t('search_nodes')}\n items={items}\n onClick={onLibraryItemSelect}\n ref={setPopoverEl}\n position='bottom'\n />\n </div>\n );\n};\n\nexport default FlowModeller;\n"]}
@@ -1,11 +1,10 @@
1
- import { Ref, MouseEvent } from 'react';
2
- import { Action, MenuItemProps, OmitStrict } from '@pega/cosmos-react-core';
1
+ import { MouseEvent, KeyboardEvent } from 'react';
2
+ import { Action, OmitStrict } from '@pega/cosmos-react-core';
3
3
  import { Node } from '../Renderer/Utils/Graph';
4
- export interface NodeType {
4
+ import { ItemVisual, LibraryItem } from '../../ItemLibrary/ItemLibrary';
5
+ export interface NodeType extends ItemVisual {
5
6
  id: string;
6
7
  name: string;
7
- color: string;
8
- icon: string;
9
8
  minConnectors: number;
10
9
  defaults: {
11
10
  node: OmitStrict<NodeProps, 'type' | 'id'>;
@@ -24,16 +23,23 @@ export interface NodeProps extends Node {
24
23
  /** Additional data for Node */
25
24
  additionalData?: AdditionalDataItemProps[];
26
25
  type: NodeType;
26
+ highlight?: boolean;
27
+ error?: string;
27
28
  }
28
- export interface NodeComponentProps extends NodeProps {
29
+ export interface ModellerNodeComponentProps<NodeComponentData> extends NodeProps {
30
+ data: NodeComponentData;
31
+ }
32
+ export interface NodeComponentData {
29
33
  /** Callback for the node actions click */
30
- onActionClick?: (params: ActionParams, e: MouseEvent) => void;
34
+ onActionClick?: (params: ActionParams, e: MouseEvent | KeyboardEvent) => void;
31
35
  /** Callback for the node click */
32
- onClick?: (nodeId: NodeProps['id']) => void;
36
+ onClick?: (nodeId: NodeProps['id'], e: MouseEvent | KeyboardEvent) => void;
37
+ /** Callback for node deletion */
38
+ onDelete?: (params: ActionParams, e: MouseEvent | KeyboardEvent) => void;
33
39
  /** Actions for the node click */
34
40
  actions?: Action[];
35
- /** Ref of the node */
36
- ref?: Ref<HTMLElement>;
41
+ }
42
+ export interface NodeComponentProps extends NodeProps, NodeComponentData {
37
43
  }
38
44
  export interface AdditionalDataItemProps {
39
45
  id: string;
@@ -43,9 +49,9 @@ export interface AdditionalDataItemProps {
43
49
  export interface ActionParams {
44
50
  actionId: string;
45
51
  nodeId: NodeProps['id'];
52
+ additionalData?: unknown;
46
53
  }
47
- export interface NodeLibraryItem extends MenuItemProps {
48
- id: string;
54
+ export interface NodeLibraryItem extends LibraryItem {
49
55
  type: NodeType;
50
56
  items?: NodeLibraryItem[];
51
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Node.types.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,MAAM,WAAW,QAAQ;IAEvB,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3C,SAAS,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;KACL,CAAC;CACH;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAE3C,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9D,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5C,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,QAY3B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,QAY1B,CAAC"}
1
+ {"version":3,"file":"Node.types.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,WAAW,QAAS,SAAQ,UAAU;IAE1C,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3C,SAAS,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;SACf,EAAE,CAAC;KACL,CAAC;CACH;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAE3C,IAAI,EAAE,QAAQ,CAAC;IAEf,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B,CAAC,iBAAiB,CAAE,SAAQ,SAAS;IAC9E,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;IAC9E,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;IAC3E,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;IACzE,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS,EAAE,iBAAiB;CAAG;AAE3E,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,EAAE,QAY3B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,QAY1B,CAAC"}
@@ -1,8 +1,7 @@
1
- import { themeDefinition } from '@pega/cosmos-react-core';
2
1
  export const START_NODETYPE = Object.freeze({
3
2
  id: 'start',
4
3
  name: 'start',
5
- color: themeDefinition.base.colors.green.medium.$value,
4
+ color: 'green',
6
5
  icon: 'circle',
7
6
  minConnectors: 1,
8
7
  defaults: {
@@ -15,7 +14,7 @@ export const START_NODETYPE = Object.freeze({
15
14
  export const STOP_NODETYPE = Object.freeze({
16
15
  id: 'stop',
17
16
  name: 'stop',
18
- color: themeDefinition.base.colors.red.light.$value,
17
+ color: 'red',
19
18
  icon: 'circle',
20
19
  minConnectors: 0,
21
20
  defaults: {
@@ -1 +1 @@
1
- {"version":3,"file":"Node.types.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA+D7F,MAAM,CAAC,MAAM,cAAc,GAAa,MAAM,CAAC,MAAM,CAAC;IACpD,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;IACtD,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,OAAO;SACf;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAa,MAAM,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM;IACnD,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;SACd;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC","sourcesContent":["import { Ref, MouseEvent } from 'react';\n\nimport { Action, MenuItemProps, OmitStrict, themeDefinition } from '@pega/cosmos-react-core';\n\nimport { Node } from '../Renderer/Utils/Graph';\n\nexport interface NodeType {\n /* node type id. this must be unique */\n id: string;\n /* human readable name of the type */\n name: string;\n /* color that represents the type */\n color: string;\n /* icon that represents the type */\n icon: string;\n /* min no. of connectors */\n minConnectors: number;\n defaults: {\n node: OmitStrict<NodeProps, 'type' | 'id'>;\n connector: {\n label: string;\n }[];\n };\n}\n\nexport interface NodeProps extends Node {\n /** Unique id for Node */\n id: string;\n /** Label for Node */\n label: string;\n /** Description for Node */\n description?: string;\n /** Additional data for Node */\n additionalData?: AdditionalDataItemProps[];\n /* type of the Node */\n type: NodeType;\n}\n\nexport interface NodeComponentProps extends NodeProps {\n /** Callback for the node actions click */\n onActionClick?: (params: ActionParams, e: MouseEvent) => void;\n /** Callback for the node click */\n onClick?: (nodeId: NodeProps['id']) => void;\n /** Actions for the node click */\n actions?: Action[];\n /** Ref of the node */\n ref?: Ref<HTMLElement>;\n}\n\nexport interface AdditionalDataItemProps {\n id: string;\n label: string;\n value: string;\n}\nexport interface ActionParams {\n actionId: string;\n nodeId: NodeProps['id'];\n}\n\nexport interface NodeLibraryItem extends MenuItemProps {\n id: string;\n type: NodeType;\n items?: NodeLibraryItem[];\n}\n\nexport const START_NODETYPE: NodeType = Object.freeze({\n id: 'start',\n name: 'start',\n color: themeDefinition.base.colors.green.medium.$value,\n icon: 'circle',\n minConnectors: 1,\n defaults: {\n node: {\n label: 'Start'\n },\n connector: []\n }\n});\n\nexport const STOP_NODETYPE: NodeType = Object.freeze({\n id: 'stop',\n name: 'stop',\n color: themeDefinition.base.colors.red.light.$value,\n icon: 'circle',\n minConnectors: 0,\n defaults: {\n node: {\n label: 'Stop'\n },\n connector: []\n }\n});\n"]}
1
+ {"version":3,"file":"Node.types.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Node/Node.types.ts"],"names":[],"mappings":"AAwEA,MAAM,CAAC,MAAM,cAAc,GAAa,MAAM,CAAC,MAAM,CAAC;IACpD,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,OAAO;SACf;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAa,MAAM,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM;SACd;QACD,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC","sourcesContent":["import { MouseEvent, KeyboardEvent } from 'react';\n\nimport { Action, OmitStrict } from '@pega/cosmos-react-core';\n\nimport { Node } from '../Renderer/Utils/Graph';\nimport { ItemVisual, LibraryItem } from '../../ItemLibrary/ItemLibrary';\n\nexport interface NodeType extends ItemVisual {\n /* node type id. this must be unique */\n id: string;\n /* human readable name of the type */\n name: string;\n /* min no. of connectors */\n minConnectors: number;\n defaults: {\n node: OmitStrict<NodeProps, 'type' | 'id'>;\n connector: {\n label: string;\n }[];\n };\n}\n\nexport interface NodeProps extends Node {\n /** Unique id for Node */\n id: string;\n /** Label for Node */\n label: string;\n /** Description for Node */\n description?: string;\n /** Additional data for Node */\n additionalData?: AdditionalDataItemProps[];\n /* type of the Node */\n type: NodeType;\n /* highlight the component */\n highlight?: boolean;\n /* error message for node */\n error?: string;\n}\n\nexport interface ModellerNodeComponentProps<NodeComponentData> extends NodeProps {\n data: NodeComponentData;\n}\n\nexport interface NodeComponentData {\n /** Callback for the node actions click */\n onActionClick?: (params: ActionParams, e: MouseEvent | KeyboardEvent) => void;\n /** Callback for the node click */\n onClick?: (nodeId: NodeProps['id'], e: MouseEvent | KeyboardEvent) => void;\n /** Callback for node deletion */\n onDelete?: (params: ActionParams, e: MouseEvent | KeyboardEvent) => void;\n /** Actions for the node click */\n actions?: Action[];\n}\n\nexport interface NodeComponentProps extends NodeProps, NodeComponentData {}\n\nexport interface AdditionalDataItemProps {\n id: string;\n label: string;\n value: string;\n}\nexport interface ActionParams {\n actionId: string;\n nodeId: NodeProps['id'];\n additionalData?: unknown;\n}\n\nexport interface NodeLibraryItem extends LibraryItem {\n type: NodeType;\n items?: NodeLibraryItem[];\n}\n\nexport const START_NODETYPE: NodeType = Object.freeze({\n id: 'start',\n name: 'start',\n color: 'green',\n icon: 'circle',\n minConnectors: 1,\n defaults: {\n node: {\n label: 'Start'\n },\n connector: []\n }\n});\n\nexport const STOP_NODETYPE: NodeType = Object.freeze({\n id: 'stop',\n name: 'stop',\n color: 'red',\n icon: 'circle',\n minConnectors: 0,\n defaults: {\n node: {\n label: 'Stop'\n },\n connector: []\n }\n});\n"]}