@pega/cosmos-react-build 3.0.0-dev.9.1 → 3.0.0-rc.10

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 (240) hide show
  1. package/lib/components/AppHeader/AppHeader.d.ts +1 -1
  2. package/lib/components/AppHeader/AppHeader.d.ts.map +1 -1
  3. package/lib/components/AppHeader/AppHeader.js +7 -6
  4. package/lib/components/AppHeader/AppHeader.js.map +1 -1
  5. package/lib/components/AppHeader/AppHeader.styles.d.ts +1 -2
  6. package/lib/components/AppHeader/AppHeader.styles.d.ts.map +1 -1
  7. package/lib/components/AppHeader/AppHeader.styles.js +10 -12
  8. package/lib/components/AppHeader/AppHeader.styles.js.map +1 -1
  9. package/lib/components/AppHeader/BranchButton.d.ts.map +1 -1
  10. package/lib/components/AppHeader/BranchButton.js +22 -18
  11. package/lib/components/AppHeader/BranchButton.js.map +1 -1
  12. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  13. package/lib/components/AppShell/AppShell.js +19 -2
  14. package/lib/components/AppShell/AppShell.js.map +1 -1
  15. package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
  16. package/lib/components/AppShell/AppShell.styles.js +1 -3
  17. package/lib/components/AppShell/AppShell.styles.js.map +1 -1
  18. package/lib/components/DynamicContentEditor/DynamicContentEditor.d.ts.map +1 -1
  19. package/lib/components/DynamicContentEditor/DynamicContentEditor.js +50 -38
  20. package/lib/components/DynamicContentEditor/DynamicContentEditor.js.map +1 -1
  21. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts +2 -2
  22. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.d.ts.map +1 -1
  23. package/lib/components/DynamicContentEditor/DynamicContentEditor.types.js.map +1 -1
  24. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.d.ts +8 -0
  25. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.d.ts.map +1 -0
  26. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js +192 -0
  27. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js.map +1 -0
  28. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts +10 -0
  29. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts.map +1 -0
  30. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js +530 -0
  31. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js.map +1 -0
  32. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts +35 -0
  33. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts.map +1 -0
  34. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.js +2 -0
  35. package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.js.map +1 -0
  36. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts +13 -0
  37. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.d.ts.map +1 -0
  38. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js +51 -0
  39. package/lib/components/ExpressionBuilder/CodeEditor/getCodeSuggestions.js.map +1 -0
  40. package/lib/components/ExpressionBuilder/ExpressionBuilder.d.ts +6 -0
  41. package/lib/components/ExpressionBuilder/ExpressionBuilder.d.ts.map +1 -0
  42. package/lib/components/ExpressionBuilder/ExpressionBuilder.js +51 -0
  43. package/lib/components/ExpressionBuilder/ExpressionBuilder.js.map +1 -0
  44. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts +14 -0
  45. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts.map +1 -0
  46. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js +81 -0
  47. package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.js.map +1 -0
  48. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts +74 -0
  49. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.d.ts.map +1 -0
  50. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.js +2 -0
  51. package/lib/components/ExpressionBuilder/ExpressionBuilder.types.js.map +1 -0
  52. package/lib/components/ExpressionBuilder/ExpressionBuilderContext.d.ts +7 -0
  53. package/lib/components/ExpressionBuilder/ExpressionBuilderContext.d.ts.map +1 -0
  54. package/lib/components/ExpressionBuilder/ExpressionBuilderContext.js +6 -0
  55. package/lib/components/ExpressionBuilder/ExpressionBuilderContext.js.map +1 -0
  56. package/lib/components/ExpressionBuilder/ExpressionDetails.d.ts +6 -0
  57. package/lib/components/ExpressionBuilder/ExpressionDetails.d.ts.map +1 -0
  58. package/lib/components/ExpressionBuilder/ExpressionDetails.js +12 -0
  59. package/lib/components/ExpressionBuilder/ExpressionDetails.js.map +1 -0
  60. package/lib/components/ExpressionBuilder/ExpressionItem.d.ts +6 -0
  61. package/lib/components/ExpressionBuilder/ExpressionItem.d.ts.map +1 -0
  62. package/lib/components/ExpressionBuilder/ExpressionItem.js +39 -0
  63. package/lib/components/ExpressionBuilder/ExpressionItem.js.map +1 -0
  64. package/lib/components/ExpressionBuilder/ExpressionList.d.ts +6 -0
  65. package/lib/components/ExpressionBuilder/ExpressionList.d.ts.map +1 -0
  66. package/lib/components/ExpressionBuilder/ExpressionList.js +32 -0
  67. package/lib/components/ExpressionBuilder/ExpressionList.js.map +1 -0
  68. package/lib/components/ExpressionBuilder/index.d.ts +8 -0
  69. package/lib/components/ExpressionBuilder/index.d.ts.map +1 -0
  70. package/lib/components/ExpressionBuilder/index.js +6 -0
  71. package/lib/components/ExpressionBuilder/index.js.map +1 -0
  72. package/lib/components/FlowModeller/AddNode.d.ts +2 -2
  73. package/lib/components/FlowModeller/AddNode.d.ts.map +1 -1
  74. package/lib/components/FlowModeller/AddNode.js +26 -7
  75. package/lib/components/FlowModeller/AddNode.js.map +1 -1
  76. package/lib/components/FlowModeller/Connector.d.ts +3 -3
  77. package/lib/components/FlowModeller/Connector.d.ts.map +1 -1
  78. package/lib/components/FlowModeller/Connector.js +41 -4
  79. package/lib/components/FlowModeller/Connector.js.map +1 -1
  80. package/lib/components/FlowModeller/DeletePopover.d.ts.map +1 -1
  81. package/lib/components/FlowModeller/DeletePopover.js +56 -25
  82. package/lib/components/FlowModeller/DeletePopover.js.map +1 -1
  83. package/lib/components/FlowModeller/FlowModeller.d.ts +3 -23
  84. package/lib/components/FlowModeller/FlowModeller.d.ts.map +1 -1
  85. package/lib/components/FlowModeller/FlowModeller.js +94 -17
  86. package/lib/components/FlowModeller/FlowModeller.js.map +1 -1
  87. package/lib/components/FlowModeller/FlowModeller.types.d.ts +27 -0
  88. package/lib/components/FlowModeller/FlowModeller.types.d.ts.map +1 -0
  89. package/lib/components/FlowModeller/FlowModeller.types.js +2 -0
  90. package/lib/components/FlowModeller/FlowModeller.types.js.map +1 -0
  91. package/lib/components/FlowModeller/FlowModellerContext.d.ts +11 -0
  92. package/lib/components/FlowModeller/FlowModellerContext.d.ts.map +1 -0
  93. package/lib/components/FlowModeller/FlowModellerContext.js +8 -0
  94. package/lib/components/FlowModeller/FlowModellerContext.js.map +1 -0
  95. package/lib/components/FlowModeller/Node/Node.types.d.ts +13 -4
  96. package/lib/components/FlowModeller/Node/Node.types.d.ts.map +1 -1
  97. package/lib/components/FlowModeller/Node/Node.types.js.map +1 -1
  98. package/lib/components/FlowModeller/Node/NodeTemplate.styles.d.ts.map +1 -1
  99. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js +17 -8
  100. package/lib/components/FlowModeller/Node/NodeTemplate.styles.js.map +1 -1
  101. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts +1 -1
  102. package/lib/components/FlowModeller/Node/NodeTemplates.d.ts.map +1 -1
  103. package/lib/components/FlowModeller/Node/NodeTemplates.js +25 -12
  104. package/lib/components/FlowModeller/Node/NodeTemplates.js.map +1 -1
  105. package/lib/components/FlowModeller/Node.d.ts.map +1 -1
  106. package/lib/components/FlowModeller/Node.js +3 -4
  107. package/lib/components/FlowModeller/Node.js.map +1 -1
  108. package/lib/components/FlowModeller/Renderer/Renderer.d.ts.map +1 -1
  109. package/lib/components/FlowModeller/Renderer/Renderer.js +37 -6
  110. package/lib/components/FlowModeller/Renderer/Renderer.js.map +1 -1
  111. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts +3 -9
  112. package/lib/components/FlowModeller/Renderer/Renderer.types.d.ts.map +1 -1
  113. package/lib/components/FlowModeller/Renderer/Renderer.types.js.map +1 -1
  114. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts +5 -0
  115. package/lib/components/FlowModeller/Renderer/Utils/Graph.d.ts.map +1 -1
  116. package/lib/components/FlowModeller/Renderer/Utils/Graph.js.map +1 -1
  117. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts +2 -1
  118. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.d.ts.map +1 -1
  119. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js +19 -6
  120. package/lib/components/FlowModeller/Renderer/Utils/GraphLayout.js.map +1 -1
  121. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts +1 -2
  122. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.d.ts.map +1 -1
  123. package/lib/components/FlowModeller/Renderer/Utils/GraphTraversal.js.map +1 -1
  124. package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts +6 -5
  125. package/lib/components/FlowModeller/Utils/addNodeUtils.d.ts.map +1 -1
  126. package/lib/components/FlowModeller/Utils/addNodeUtils.js +57 -34
  127. package/lib/components/FlowModeller/Utils/addNodeUtils.js.map +1 -1
  128. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts +3 -2
  129. package/lib/components/FlowModeller/Utils/deleteNodeUtils.d.ts.map +1 -1
  130. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js +11 -1
  131. package/lib/components/FlowModeller/Utils/deleteNodeUtils.js.map +1 -1
  132. package/lib/components/FlowModeller/helper.d.ts +21 -2
  133. package/lib/components/FlowModeller/helper.d.ts.map +1 -1
  134. package/lib/components/FlowModeller/helper.js +91 -45
  135. package/lib/components/FlowModeller/helper.js.map +1 -1
  136. package/lib/components/FlowModeller/index.d.ts +4 -3
  137. package/lib/components/FlowModeller/index.d.ts.map +1 -1
  138. package/lib/components/FlowModeller/index.js.map +1 -1
  139. package/lib/components/ItemLibrary/ItemLibrary.d.ts.map +1 -1
  140. package/lib/components/ItemLibrary/ItemLibrary.js +1 -4
  141. package/lib/components/ItemLibrary/ItemLibrary.js.map +1 -1
  142. package/lib/components/LifeCycle/Category.d.ts +3 -20
  143. package/lib/components/LifeCycle/Category.d.ts.map +1 -1
  144. package/lib/components/LifeCycle/Category.js +15 -12
  145. package/lib/components/LifeCycle/Category.js.map +1 -1
  146. package/lib/components/LifeCycle/LifeCycle.d.ts +3 -19
  147. package/lib/components/LifeCycle/LifeCycle.d.ts.map +1 -1
  148. package/lib/components/LifeCycle/LifeCycle.js +14 -10
  149. package/lib/components/LifeCycle/LifeCycle.js.map +1 -1
  150. package/lib/components/LifeCycle/LifeCycle.types.d.ts +70 -2
  151. package/lib/components/LifeCycle/LifeCycle.types.d.ts.map +1 -1
  152. package/lib/components/LifeCycle/LifeCycle.types.js.map +1 -1
  153. package/lib/components/LifeCycle/LifeCycleContext.d.ts +9 -0
  154. package/lib/components/LifeCycle/LifeCycleContext.d.ts.map +1 -0
  155. package/lib/components/LifeCycle/LifeCycleContext.js +7 -0
  156. package/lib/components/LifeCycle/LifeCycleContext.js.map +1 -0
  157. package/lib/components/LifeCycle/LifeCycleList.d.ts +1 -5
  158. package/lib/components/LifeCycle/LifeCycleList.d.ts.map +1 -1
  159. package/lib/components/LifeCycle/LifeCycleList.js +3 -3
  160. package/lib/components/LifeCycle/LifeCycleList.js.map +1 -1
  161. package/lib/components/LifeCycle/Stage.d.ts +7 -25
  162. package/lib/components/LifeCycle/Stage.d.ts.map +1 -1
  163. package/lib/components/LifeCycle/Stage.js +81 -128
  164. package/lib/components/LifeCycle/Stage.js.map +1 -1
  165. package/lib/components/LifeCycle/Step.d.ts +11 -29
  166. package/lib/components/LifeCycle/Step.d.ts.map +1 -1
  167. package/lib/components/LifeCycle/Step.js +71 -136
  168. package/lib/components/LifeCycle/Step.js.map +1 -1
  169. package/lib/components/LifeCycle/Task.d.ts +9 -34
  170. package/lib/components/LifeCycle/Task.d.ts.map +1 -1
  171. package/lib/components/LifeCycle/Task.js +58 -98
  172. package/lib/components/LifeCycle/Task.js.map +1 -1
  173. package/lib/components/LifeCycle/index.d.ts +2 -2
  174. package/lib/components/LifeCycle/index.d.ts.map +1 -1
  175. package/lib/components/LifeCycle/index.js.map +1 -1
  176. package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts +9 -0
  177. package/lib/components/MobileBuildSummary/MobileBuildSummary.d.ts.map +1 -0
  178. package/lib/components/MobileBuildSummary/MobileBuildSummary.js +44 -0
  179. package/lib/components/MobileBuildSummary/MobileBuildSummary.js.map +1 -0
  180. package/lib/components/MobileBuildSummary/MobileBuildSummary.types.d.ts +29 -0
  181. package/lib/components/MobileBuildSummary/MobileBuildSummary.types.d.ts.map +1 -0
  182. package/lib/components/MobileBuildSummary/MobileBuildSummary.types.js +2 -0
  183. package/lib/components/MobileBuildSummary/MobileBuildSummary.types.js.map +1 -0
  184. package/lib/components/MobileBuildSummary/index.d.ts +3 -0
  185. package/lib/components/MobileBuildSummary/index.d.ts.map +1 -0
  186. package/lib/components/MobileBuildSummary/index.js +2 -0
  187. package/lib/components/MobileBuildSummary/index.js.map +1 -0
  188. package/lib/components/ObjectPreview/ObjectPreview.d.ts +1 -1
  189. package/lib/components/ObjectPreview/ObjectPreview.d.ts.map +1 -1
  190. package/lib/components/ObjectPreview/ObjectPreview.js +1 -1
  191. package/lib/components/ObjectPreview/ObjectPreview.js.map +1 -1
  192. package/lib/components/ObjectSelect/ObjectPicker.d.ts +9 -5
  193. package/lib/components/ObjectSelect/ObjectPicker.d.ts.map +1 -1
  194. package/lib/components/ObjectSelect/ObjectPicker.js +19 -5
  195. package/lib/components/ObjectSelect/ObjectPicker.js.map +1 -1
  196. package/lib/components/ObjectSelect/ObjectSelect.d.ts +10 -5
  197. package/lib/components/ObjectSelect/ObjectSelect.d.ts.map +1 -1
  198. package/lib/components/ObjectSelect/ObjectSelect.js +24 -8
  199. package/lib/components/ObjectSelect/ObjectSelect.js.map +1 -1
  200. package/lib/components/ObjectSelect/ObjectSummary.d.ts +6 -4
  201. package/lib/components/ObjectSelect/ObjectSummary.d.ts.map +1 -1
  202. package/lib/components/ObjectSelect/ObjectSummary.js +28 -33
  203. package/lib/components/ObjectSelect/ObjectSummary.js.map +1 -1
  204. package/lib/components/ObjectSelect/useCreateModal.d.ts +34 -0
  205. package/lib/components/ObjectSelect/useCreateModal.d.ts.map +1 -0
  206. package/lib/components/ObjectSelect/useCreateModal.js +61 -0
  207. package/lib/components/ObjectSelect/useCreateModal.js.map +1 -0
  208. package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
  209. package/lib/components/PageTemplates/PageTemplates.js +26 -8
  210. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  211. package/lib/components/Workbench/ConfigurationPanel.d.ts.map +1 -1
  212. package/lib/components/Workbench/ConfigurationPanel.js +4 -14
  213. package/lib/components/Workbench/ConfigurationPanel.js.map +1 -1
  214. package/lib/components/Workbench/Workbench.d.ts.map +1 -1
  215. package/lib/components/Workbench/Workbench.js +2 -2
  216. package/lib/components/Workbench/Workbench.js.map +1 -1
  217. package/lib/components/Workbench/Workbench.styles.d.ts +1 -0
  218. package/lib/components/Workbench/Workbench.styles.d.ts.map +1 -1
  219. package/lib/components/Workbench/Workbench.styles.js +4 -0
  220. package/lib/components/Workbench/Workbench.styles.js.map +1 -1
  221. package/lib/components/Workbench/Workbench.types.d.ts +2 -2
  222. package/lib/components/Workbench/Workbench.types.d.ts.map +1 -1
  223. package/lib/components/Workbench/Workbench.types.js.map +1 -1
  224. package/lib/index.d.ts +3 -0
  225. package/lib/index.d.ts.map +1 -1
  226. package/lib/index.js +3 -0
  227. package/lib/index.js.map +1 -1
  228. package/package.json +11 -8
  229. package/lib/components/FlowModeller/Renderer/Connectors.d.ts +0 -15
  230. package/lib/components/FlowModeller/Renderer/Connectors.d.ts.map +0 -1
  231. package/lib/components/FlowModeller/Renderer/Connectors.js +0 -49
  232. package/lib/components/FlowModeller/Renderer/Connectors.js.map +0 -1
  233. package/lib/components/FlowModeller/Renderer/Nodes.d.ts +0 -11
  234. package/lib/components/FlowModeller/Renderer/Nodes.d.ts.map +0 -1
  235. package/lib/components/FlowModeller/Renderer/Nodes.js +0 -31
  236. package/lib/components/FlowModeller/Renderer/Nodes.js.map +0 -1
  237. package/lib/components/ObjectSelect/ObjectConfig.d.ts +0 -18
  238. package/lib/components/ObjectSelect/ObjectConfig.d.ts.map +0 -1
  239. package/lib/components/ObjectSelect/ObjectConfig.js +0 -14
  240. package/lib/components/ObjectSelect/ObjectConfig.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GraphTraversal.d.ts","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/GraphTraversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEzE,UAAU,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;CAAG;AAE7D,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,cAAc;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACvC,CAAC;IACF,KAAK,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAqCjD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAyCjD,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,KAAK;IAYzD;;;;;;;OAOG;IAEH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,SAAS,cAAc,GAAG,cAAc,EACxF,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,GACV,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;CA4GjC"}
1
+ {"version":3,"file":"GraphTraversal.d.ts","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/GraphTraversal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEzE,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;CAAG;AAEpE,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,cAAc;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACvC,CAAC;IACF,KAAK,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAqCjD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAyCjD,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,KAAK;IAYzD;;;;;;;OAOG;IAEH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,EAAE,CAAC,SAAS,cAAc,GAAG,cAAc,EACxF,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,GAAG,EAAE,MAAM,GACV,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;CA4GjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphTraversal.js","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/GraphTraversal.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectorProps, DirectedGraph, GraphData, Node } from './Graph';\n\ninterface NestedArray<T> extends Array<T | NestedArray<T>> {}\n\nexport interface ConvergenceData<T extends Node, U extends ConnectorProps> {\n nodeId: string;\n connectors: NestedArray<string>;\n summary: {\n nodesinvolved: Record<string, T>;\n connectorsInvolved: Record<string, U>;\n };\n paths?: NestedArray<ConvergenceData<T, U>>;\n}\n\nexport default class GraphTraversal {\n static bfs(gd: GraphData, src?: string): string[] {\n const graph = new DirectedGraph(gd);\n\n if (!src) {\n const rootNodeId = GraphTraversal.findRootNode(graph);\n\n if (!rootNodeId) {\n throw Error('Invalid graph, cannot find root node.');\n }\n\n src = rootNodeId;\n }\n\n const queue: string[] = [src];\n const result: string[] = [];\n const map: Record<string, string> = {\n src\n }; // needed for duplicate comparision\n\n while (queue.length > 0) {\n const source = queue.shift();\n if (source !== undefined) {\n result.push(source);\n\n const nextNodes = graph.getNextNodes(source);\n nextNodes.forEach((node: Node) => {\n if (!map[node.id]) {\n queue.push(node.id);\n map[node.id] = node.id;\n }\n });\n }\n }\n\n return result;\n }\n\n static dfs(gd: GraphData, src?: string): string[] {\n const graph = new DirectedGraph(gd);\n\n // finding the start node automatically\n if (!src) {\n const rootNodeId = GraphTraversal.findRootNode(graph);\n\n if (!rootNodeId) {\n throw Error('Invalid graph, cannot find root node.');\n }\n\n src = rootNodeId;\n }\n\n const stack: string[] = [src];\n const result: string[] = [];\n const map: Record<string, string> = {\n src\n }; // needed for duplicate comparision\n\n while (stack.length > 0) {\n const source = stack.pop();\n if (source !== undefined) {\n result.push(source);\n\n const nextNodes = graph.getNextNodes(source);\n\n nextNodes.forEach(node => {\n if (map[node.id] === undefined) {\n stack.push(node.id);\n map[node.id] = node.id;\n }\n });\n }\n }\n\n return result;\n }\n\n // Assuming the given graph has no unconnected nodes and the graph is not cyclic(if start node have in-connectors(ie., cyclic), this will fail).\n // - returns first encountered node with no in-connectors as a rootnode, if more than one exists\n static findRootNode(graph: DirectedGraph): string | false {\n const nodes = graph.getNodes();\n\n for (let i = 0; i < nodes.length; i += 1) {\n if (graph.getPrevNodesCount(nodes[i].id) === 0) {\n return nodes[i].id;\n }\n }\n\n return false;\n }\n\n /**\n * Given the graphData and the source node with morethan one branch, It calculates the convergence node, involved connectors and paths\n * Assuming, goTo is not supported\n *\n * @param gd graphData to process on\n * @param src id of the source node. This needs to be a node with multiple branches\n * @returns id of the destination node or null if not found\n */\n // TODO-OPTIMIZE Memoize, for a given GraphData\n static getConvergenceData<T extends Node = Node, U extends ConnectorProps = ConnectorProps>(\n gd: GraphData<T, U>,\n src: string\n ): ConvergenceData<T, U> | false {\n const graph = new DirectedGraph<T, U>(gd);\n\n // return false, if there is no node with given source node id\n if (graph.getNode(src) === undefined || graph.getNextNodesCount(src) < 2) {\n return false;\n }\n\n // traverse the nodes -- and record the paths of each connector\n const path: ConvergenceData<T, U>[][] = []; // array of path-arrays\n const initialConnectors = graph.getOutConnectors(src);\n\n // iterate the initial set of connectors\n initialConnectors.forEach((item, index) => {\n path[index] = [];\n\n let currentConnector = item;\n // traverse through each connector and push the encountered nodes\n while (currentConnector && currentConnector.toNodeId !== undefined) {\n path[index].push({\n nodeId: currentConnector.toNodeId,\n connectors: [currentConnector.id],\n summary: {\n nodesinvolved: {\n [currentConnector.toNodeId]: graph.getNode(currentConnector.toNodeId)\n },\n connectorsInvolved: { [currentConnector.id]: currentConnector }\n }\n });\n\n const inConnectors = graph.getInConnectors(currentConnector.toNodeId);\n // if this node has multiple in connectors, that means this is a join [IMP TODO NOTE until we support goTo option]\n if (inConnectors.length > 1) {\n return;\n }\n\n let outConnectors = graph.getOutConnectors(currentConnector.toNodeId);\n\n let newCurrentNodeId = currentConnector.toNodeId;\n // check if this node has multiple branches and call recursively\n while (outConnectors.length > 1) {\n const result = GraphTraversal.getConvergenceData(gd, newCurrentNodeId);\n\n // handle resultNodeId val as false use case: just cancel futher processing and return false\n if (result === false) {\n return false;\n }\n\n // add result node to the path\n path[index].push(result);\n\n // handle, resultNode as destination shape of alternate connector too\n const tempInConnectors = graph.getInConnectors(result.nodeId);\n // if this node has multiple in connectors and more than expected count, that means this is a join [IMP TODO NOTE until we support goTo option]\n if (tempInConnectors.length > outConnectors.length) {\n return;\n }\n\n // handle, resultNode as decision shape\n outConnectors = graph.getOutConnectors(result.nodeId);\n newCurrentNodeId = result.nodeId;\n }\n\n // else if out connectors is 1\n currentConnector = outConnectors[0];\n }\n });\n\n // validate and return false if no convergence node found\n for (let i = 1; i < path.length; i += 1) {\n if (path[i][path[i].length - 1].nodeId !== path[i - 1][path[i - 1].length - 1].nodeId) {\n return false;\n }\n }\n\n const result: ConvergenceData<T, U> = {\n nodeId: path[0][path[0].length - 1].nodeId,\n connectors: [],\n paths: [],\n summary: {\n nodesinvolved: {},\n connectorsInvolved: {}\n }\n };\n\n for (let i = 0; i < path.length; i += 1) {\n const current = path[i];\n result.connectors.push(current[current.length - 1].connectors);\n\n if (result.paths !== undefined) {\n result.paths[i] = current;\n }\n\n current.forEach(item => {\n result.summary.nodesinvolved = {\n ...result.summary.nodesinvolved,\n ...item.summary.nodesinvolved\n };\n\n result.summary.connectorsInvolved = {\n ...result.summary.connectorsInvolved,\n ...item.summary.connectorsInvolved\n };\n });\n }\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"GraphTraversal.js","sourceRoot":"","sources":["../../../../../src/components/FlowModeller/Renderer/Utils/GraphTraversal.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectorProps, DirectedGraph, GraphData, Node } from './Graph';\n\nexport interface NestedArray<T> extends Array<T | NestedArray<T>> {}\n\nexport interface ConvergenceData<T extends Node, U extends ConnectorProps> {\n nodeId: string;\n connectors: NestedArray<string>;\n summary: {\n nodesinvolved: Record<string, T>;\n connectorsInvolved: Record<string, U>;\n };\n paths?: NestedArray<ConvergenceData<T, U>>;\n}\n\nexport default class GraphTraversal {\n static bfs(gd: GraphData, src?: string): string[] {\n const graph = new DirectedGraph(gd);\n\n if (!src) {\n const rootNodeId = GraphTraversal.findRootNode(graph);\n\n if (!rootNodeId) {\n throw Error('Invalid graph, cannot find root node.');\n }\n\n src = rootNodeId;\n }\n\n const queue: string[] = [src];\n const result: string[] = [];\n const map: Record<string, string> = {\n src\n }; // needed for duplicate comparision\n\n while (queue.length > 0) {\n const source = queue.shift();\n if (source !== undefined) {\n result.push(source);\n\n const nextNodes = graph.getNextNodes(source);\n nextNodes.forEach((node: Node) => {\n if (!map[node.id]) {\n queue.push(node.id);\n map[node.id] = node.id;\n }\n });\n }\n }\n\n return result;\n }\n\n static dfs(gd: GraphData, src?: string): string[] {\n const graph = new DirectedGraph(gd);\n\n // finding the start node automatically\n if (!src) {\n const rootNodeId = GraphTraversal.findRootNode(graph);\n\n if (!rootNodeId) {\n throw Error('Invalid graph, cannot find root node.');\n }\n\n src = rootNodeId;\n }\n\n const stack: string[] = [src];\n const result: string[] = [];\n const map: Record<string, string> = {\n src\n }; // needed for duplicate comparision\n\n while (stack.length > 0) {\n const source = stack.pop();\n if (source !== undefined) {\n result.push(source);\n\n const nextNodes = graph.getNextNodes(source);\n\n nextNodes.forEach(node => {\n if (map[node.id] === undefined) {\n stack.push(node.id);\n map[node.id] = node.id;\n }\n });\n }\n }\n\n return result;\n }\n\n // Assuming the given graph has no unconnected nodes and the graph is not cyclic(if start node have in-connectors(ie., cyclic), this will fail).\n // - returns first encountered node with no in-connectors as a rootnode, if more than one exists\n static findRootNode(graph: DirectedGraph): string | false {\n const nodes = graph.getNodes();\n\n for (let i = 0; i < nodes.length; i += 1) {\n if (graph.getPrevNodesCount(nodes[i].id) === 0) {\n return nodes[i].id;\n }\n }\n\n return false;\n }\n\n /**\n * Given the graphData and the source node with morethan one branch, It calculates the convergence node, involved connectors and paths\n * Assuming, goTo is not supported\n *\n * @param gd graphData to process on\n * @param src id of the source node. This needs to be a node with multiple branches\n * @returns id of the destination node or null if not found\n */\n // TODO-OPTIMIZE Memoize, for a given GraphData\n static getConvergenceData<T extends Node = Node, U extends ConnectorProps = ConnectorProps>(\n gd: GraphData<T, U>,\n src: string\n ): ConvergenceData<T, U> | false {\n const graph = new DirectedGraph<T, U>(gd);\n\n // return false, if there is no node with given source node id\n if (graph.getNode(src) === undefined || graph.getNextNodesCount(src) < 2) {\n return false;\n }\n\n // traverse the nodes -- and record the paths of each connector\n const path: ConvergenceData<T, U>[][] = []; // array of path-arrays\n const initialConnectors = graph.getOutConnectors(src);\n\n // iterate the initial set of connectors\n initialConnectors.forEach((item, index) => {\n path[index] = [];\n\n let currentConnector = item;\n // traverse through each connector and push the encountered nodes\n while (currentConnector && currentConnector.toNodeId !== undefined) {\n path[index].push({\n nodeId: currentConnector.toNodeId,\n connectors: [currentConnector.id],\n summary: {\n nodesinvolved: {\n [currentConnector.toNodeId]: graph.getNode(currentConnector.toNodeId)\n },\n connectorsInvolved: { [currentConnector.id]: currentConnector }\n }\n });\n\n const inConnectors = graph.getInConnectors(currentConnector.toNodeId);\n // if this node has multiple in connectors, that means this is a join [IMP TODO NOTE until we support goTo option]\n if (inConnectors.length > 1) {\n return;\n }\n\n let outConnectors = graph.getOutConnectors(currentConnector.toNodeId);\n\n let newCurrentNodeId = currentConnector.toNodeId;\n // check if this node has multiple branches and call recursively\n while (outConnectors.length > 1) {\n const result = GraphTraversal.getConvergenceData(gd, newCurrentNodeId);\n\n // handle resultNodeId val as false use case: just cancel futher processing and return false\n if (result === false) {\n return false;\n }\n\n // add result node to the path\n path[index].push(result);\n\n // handle, resultNode as destination shape of alternate connector too\n const tempInConnectors = graph.getInConnectors(result.nodeId);\n // if this node has multiple in connectors and more than expected count, that means this is a join [IMP TODO NOTE until we support goTo option]\n if (tempInConnectors.length > outConnectors.length) {\n return;\n }\n\n // handle, resultNode as decision shape\n outConnectors = graph.getOutConnectors(result.nodeId);\n newCurrentNodeId = result.nodeId;\n }\n\n // else if out connectors is 1\n currentConnector = outConnectors[0];\n }\n });\n\n // validate and return false if no convergence node found\n for (let i = 1; i < path.length; i += 1) {\n if (path[i][path[i].length - 1].nodeId !== path[i - 1][path[i - 1].length - 1].nodeId) {\n return false;\n }\n }\n\n const result: ConvergenceData<T, U> = {\n nodeId: path[0][path[0].length - 1].nodeId,\n connectors: [],\n paths: [],\n summary: {\n nodesinvolved: {},\n connectorsInvolved: {}\n }\n };\n\n for (let i = 0; i < path.length; i += 1) {\n const current = path[i];\n result.connectors.push(current[current.length - 1].connectors);\n\n if (result.paths !== undefined) {\n result.paths[i] = current;\n }\n\n current.forEach(item => {\n result.summary.nodesinvolved = {\n ...result.summary.nodesinvolved,\n ...item.summary.nodesinvolved\n };\n\n result.summary.connectorsInvolved = {\n ...result.summary.connectorsInvolved,\n ...item.summary.connectorsInvolved\n };\n });\n }\n\n return result;\n }\n}\n"]}
@@ -1,16 +1,17 @@
1
- import { AddNodeHandlerParams, RendererConnectorProps, RendererNodeProps } from '../Renderer/Renderer.types';
1
+ import { AddNodeHandlerParams } from '../Renderer/Renderer.types';
2
2
  import { ConnectorProps, DirectedGraph, GraphData, Node } from '../Renderer/Utils/Graph';
3
- export interface PlaceHolderNode extends RendererNodeProps {
3
+ import { PlottedGraphNode, PlottedGraphConnector } from '../Renderer/Utils/GraphLayout';
4
+ export interface PlaceHolderNode extends PlottedGraphNode {
4
5
  realConnectors: string[];
5
6
  }
6
- export interface PlaceHolderConnector extends RendererConnectorProps {
7
+ export interface PlaceHolderConnector extends PlottedGraphConnector {
7
8
  realConnectors: string[];
8
9
  }
9
10
  export declare const isPlaceHolderNode: (node: PlaceHolderNode | Node) => node is PlaceHolderNode;
10
11
  export declare const isPlaceHolderConnector: (connector: PlaceHolderConnector | ConnectorProps) => connector is PlaceHolderConnector;
11
12
  declare const PlaceHolderHelper: {
12
- insertAtConnectorsMerge: (graph: DirectedGraph, getNewPHNodeCB: (addNodeMeta: AddNodeHandlerParams) => RendererNodeProps, getNewPHConnectorCB: (fromNode: string, toNode: string, addNodeMeta: AddNodeHandlerParams) => RendererConnectorProps) => void;
13
- injectPlaceholderNodes: (graphData: GraphData<RendererNodeProps, RendererConnectorProps>, onGetNewNode: (metaData: AddNodeHandlerParams) => RendererNodeProps, onGetNewConnector: (fromNodeId: string, toNodeId: string, metaData: AddNodeHandlerParams) => RendererConnectorProps) => GraphData<RendererNodeProps, RendererConnectorProps>;
13
+ insertAtConnectorsMerge: (graph: DirectedGraph, getNewPHNodeCB: (addNodeMeta: AddNodeHandlerParams) => PlottedGraphNode, getNewPHConnectorCB: (fromNode: string, toNode: string, addNodeMeta: AddNodeHandlerParams) => PlottedGraphConnector) => void;
14
+ injectPlaceholderNodes: (graphData: GraphData<PlottedGraphNode, PlottedGraphConnector>, onGetNewNode: (metaData: AddNodeHandlerParams) => PlottedGraphNode, onGetNewConnector: (fromNodeId: string, toNodeId: string, metaData: AddNodeHandlerParams) => PlottedGraphConnector) => GraphData<PlottedGraphNode<any>, PlottedGraphConnector<any>>;
14
15
  };
15
16
  export default PlaceHolderHelper;
16
17
  //# sourceMappingURL=addNodeUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addNodeUtils.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/addNodeUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGzF,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAClE,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAGD,eAAO,MAAM,iBAAiB,SAAU,eAAe,GAAG,IAAI,4BAE7D,CAAC;AAGF,eAAO,MAAM,sBAAsB,cACtB,oBAAoB,GAAG,cAAc,sCAGjD,CAAC;AAEF,QAAA,MAAM,iBAAiB;qCAEZ,aAAa,gCACU,oBAAoB,KAAK,iBAAiB,kCAE5D,MAAM,UACR,MAAM,eACD,oBAAoB,KAC9B,sBAAsB;wCAgEhB,UAAU,iBAAiB,EAAE,sBAAsB,CAAC,2BACtC,oBAAoB,KAAK,iBAAiB,kCAErD,MAAM,YACR,MAAM,YACN,oBAAoB,KAC3B,sBAAsB;CA8D9B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"addNodeUtils.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/addNodeUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAGD,eAAO,MAAM,iBAAiB,SAAU,eAAe,GAAG,IAAI,4BAE7D,CAAC;AAGF,eAAO,MAAM,sBAAsB,cACtB,oBAAoB,GAAG,cAAc,sCAGjD,CAAC;AAwBF,QAAA,MAAM,iBAAiB;qCAEZ,aAAa,gCACU,oBAAoB,KAAK,gBAAgB,kCAE3D,MAAM,UACR,MAAM,eACD,oBAAoB,KAC9B,qBAAqB;wCAyEf,UAAU,gBAAgB,EAAE,qBAAqB,CAAC,2BACpC,oBAAoB,KAAK,gBAAgB,kCAEpD,MAAM,YACR,MAAM,YACN,oBAAoB,KAC3B,qBAAqB;CA8D7B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -8,6 +8,21 @@ export const isPlaceHolderNode = (node) => {
8
8
  export const isPlaceHolderConnector = (connector) => {
9
9
  return connector.realConnectors !== undefined;
10
10
  };
11
+ const countInvisibleConnectors = (graph, connectors) => {
12
+ let invisibleConnectorsCount = 0;
13
+ for (let i = 0; i < connectors.length; i += 1) {
14
+ if (Array.isArray(connectors[i]))
15
+ invisibleConnectorsCount += countInvisibleConnectors(graph, connectors[i]);
16
+ else {
17
+ const connectorData = graph.getConnector(connectors[i]);
18
+ const fromNode = graph.getNode(connectorData.fromNodeId);
19
+ if (fromNode?.type?.minConnectors === 0) {
20
+ invisibleConnectorsCount += 1;
21
+ }
22
+ }
23
+ }
24
+ return invisibleConnectorsCount;
25
+ };
11
26
  const PlaceHolderHelper = {
12
27
  insertAtConnectorsMerge: (graph, getNewPHNodeCB, getNewPHConnectorCB) => {
13
28
  const gd = graph.getGraphData();
@@ -22,42 +37,50 @@ const PlaceHolderHelper = {
22
37
  // iterate over the resultant connectors
23
38
  for (let i = 0; i < result.connectors.length; i += 1) {
24
39
  const connectorsToUpdate = result.connectors[i];
40
+ let invisibleConnectorsCount = 0;
41
+ /** Count number of invisible connectors originating from go to shapes forming a convergence/join
42
+ * compare invisible connectors count with connectors forming a convergence
43
+ */
25
44
  if (typeof connectorsToUpdate !== 'string' && connectorsToUpdate.length > 1) {
26
- let refConnectorIdsArray = [];
27
- connectorsToUpdate.forEach(itrConId => {
28
- let conId = itrConId;
29
- if (Array.isArray(conId)) {
30
- conId = itrConId[0];
31
- }
32
- const connector = graph.getConnector(conId);
33
- if (isPlaceHolderConnector(connector)) {
34
- refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];
35
- }
36
- else {
37
- refConnectorIdsArray.push(conId);
38
- }
39
- });
40
- const addNodeMeta = {
41
- refType: 'connector',
42
- refId: refConnectorIdsArray
43
- };
44
- const newNode = getNewPHNodeCB(addNodeMeta);
45
- const newPNode = {
46
- ...newNode,
47
- realConnectors: refConnectorIdsArray
48
- };
49
- graph.addNode(newPNode);
50
- connectorsToUpdate.forEach(item => {
51
- graph.setConnector(item, {
52
- toNodeId: newNode.id
45
+ invisibleConnectorsCount = countInvisibleConnectors(graph, connectorsToUpdate);
46
+ // ensure connectors converging are greater than invisible connectors
47
+ if (connectorsToUpdate.length > invisibleConnectorsCount) {
48
+ let refConnectorIdsArray = [];
49
+ connectorsToUpdate.forEach(itrConId => {
50
+ let conId = itrConId;
51
+ if (Array.isArray(conId)) {
52
+ conId = itrConId[0];
53
+ }
54
+ const connector = graph.getConnector(conId);
55
+ if (isPlaceHolderConnector(connector)) {
56
+ refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];
57
+ }
58
+ else {
59
+ refConnectorIdsArray.push(conId);
60
+ }
61
+ });
62
+ const addNodeMeta = {
63
+ refType: 'connector',
64
+ refId: refConnectorIdsArray
65
+ };
66
+ const newNode = getNewPHNodeCB(addNodeMeta);
67
+ const newPNode = {
68
+ ...newNode,
69
+ realConnectors: refConnectorIdsArray
70
+ };
71
+ graph.addNode(newPNode);
72
+ connectorsToUpdate.forEach(item => {
73
+ graph.setConnector(item, {
74
+ toNodeId: newNode.id
75
+ });
53
76
  });
54
- });
55
- const newConnector = getNewPHConnectorCB(newNode.id, result.nodeId, addNodeMeta);
56
- const newPConnector = {
57
- ...newConnector,
58
- realConnectors: refConnectorIdsArray
59
- };
60
- graph.addConnector(newPConnector);
77
+ const newConnector = getNewPHConnectorCB(newNode.id, result.nodeId, addNodeMeta);
78
+ const newPConnector = {
79
+ ...newConnector,
80
+ realConnectors: refConnectorIdsArray
81
+ };
82
+ graph.addConnector(newPConnector);
83
+ }
61
84
  }
62
85
  }
63
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"addNodeUtils.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/addNodeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { OmitStrict } from '@pega/cosmos-react-core';\n\nimport { AddNodeProps } from '../AddNode';\nimport {\n AddNodeHandlerParams,\n RendererConnectorProps,\n RendererNodeProps\n} from '../Renderer/Renderer.types';\nimport { ConnectorProps, DirectedGraph, GraphData, Node } from '../Renderer/Utils/Graph';\nimport GraphTraversal from '../Renderer/Utils/GraphTraversal';\n\nexport interface PlaceHolderNode extends RendererNodeProps {\n realConnectors: string[];\n}\nexport interface PlaceHolderConnector extends RendererConnectorProps {\n realConnectors: string[];\n}\n\n// type-guard PlaceHolderNode\nexport const isPlaceHolderNode = (node: PlaceHolderNode | Node): node is PlaceHolderNode => {\n return (node as PlaceHolderNode).realConnectors !== undefined;\n};\n\n// type-guard PlaceHolderConnector\nexport const isPlaceHolderConnector = (\n connector: PlaceHolderConnector | ConnectorProps\n): connector is PlaceHolderConnector => {\n return (connector as PlaceHolderConnector).realConnectors !== undefined;\n};\n\nconst PlaceHolderHelper = {\n insertAtConnectorsMerge: (\n graph: DirectedGraph,\n getNewPHNodeCB: (addNodeMeta: AddNodeHandlerParams) => RendererNodeProps,\n getNewPHConnectorCB: (\n fromNode: string,\n toNode: string,\n addNodeMeta: AddNodeHandlerParams\n ) => RendererConnectorProps\n ) => {\n const gd = graph.getGraphData();\n\n // process the graph and find the first node automatically. We can find it easily by iterating and finding the node with no in-connectors\n const bfs = GraphTraversal.bfs(gd);\n bfs.reverse().forEach(nodeId => {\n const node = graph.getNode(nodeId);\n\n // get the node's convergence data\n const result = GraphTraversal.getConvergenceData(graph.getGraphData(), node.id);\n\n // if node has more than one out-connector and has convergence data\n if (result !== false) {\n // iterate over the resultant connectors\n for (let i = 0; i < result.connectors.length; i += 1) {\n const connectorsToUpdate = result.connectors[i];\n\n if (typeof connectorsToUpdate !== 'string' && connectorsToUpdate.length > 1) {\n let refConnectorIdsArray: string[] = [];\n\n connectorsToUpdate.forEach(itrConId => {\n let conId = itrConId;\n if (Array.isArray(conId)) {\n conId = itrConId[0] as string;\n }\n\n const connector = graph.getConnector(conId);\n if (isPlaceHolderConnector(connector)) {\n refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];\n } else {\n refConnectorIdsArray.push(conId);\n }\n });\n\n const addNodeMeta: AddNodeHandlerParams = {\n refType: 'connector',\n refId: refConnectorIdsArray\n };\n const newNode = getNewPHNodeCB(addNodeMeta);\n const newPNode: PlaceHolderNode = {\n ...newNode,\n realConnectors: refConnectorIdsArray\n };\n graph.addNode(newPNode);\n\n connectorsToUpdate.forEach(item => {\n graph.setConnector(item as string, {\n toNodeId: newNode.id\n });\n });\n\n const newConnector = getNewPHConnectorCB(newNode.id, result.nodeId, addNodeMeta);\n const newPConnector: PlaceHolderConnector = {\n ...newConnector,\n realConnectors: refConnectorIdsArray\n };\n graph.addConnector(newPConnector);\n }\n }\n }\n });\n },\n injectPlaceholderNodes: (\n graphData: GraphData<RendererNodeProps, RendererConnectorProps>,\n onGetNewNode: (metaData: AddNodeHandlerParams) => RendererNodeProps,\n onGetNewConnector: (\n fromNodeId: string,\n toNodeId: string,\n metaData: AddNodeHandlerParams\n ) => RendererConnectorProps\n ) => {\n // gets GraphData<RendererNodeProps, RendererConnectorProps>\n const targetGraph = new DirectedGraph(graphData);\n\n // insert placeholder-nodes at connector convergence point for nodes with multiple out connectors.\n PlaceHolderHelper.insertAtConnectorsMerge(targetGraph, onGetNewNode, onGetNewConnector);\n\n // iterate all nodes with more than one in-connectors and insert addNode before current one.\n targetGraph.getNodes().forEach(node => {\n // should not add a node before a placeholder node\n if (isPlaceHolderNode(node)) {\n return;\n }\n\n if (targetGraph.getPrevNodesCount(node.id) > 1) {\n let refConnectorIdsArray: string[] = [];\n\n // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.\n targetGraph.getInConnectors(node.id).forEach(con => {\n const connector = targetGraph.getConnector(con.id);\n if (isPlaceHolderConnector(connector)) {\n refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];\n } else {\n refConnectorIdsArray.push(con.id);\n }\n });\n\n const metaData: AddNodeHandlerParams = {\n refType: 'connector',\n refId: refConnectorIdsArray\n };\n\n // create a new placeholder node\n const newNode: OmitStrict<AddNodeProps, 'highlight' | 'addNodeHandler'> =\n onGetNewNode(metaData);\n const placeHolderNode: PlaceHolderNode = {\n ...newNode,\n realConnectors: refConnectorIdsArray\n };\n\n targetGraph.addNode(placeHolderNode);\n\n // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.\n targetGraph.getInConnectors(node.id).forEach(con => {\n targetGraph.setConnector(con.id, {\n toNodeId: placeHolderNode.id\n });\n });\n\n const newConnector = onGetNewConnector(placeHolderNode.id, node.id, metaData);\n const placeholderConnector: PlaceHolderConnector = {\n ...newConnector,\n realConnectors: refConnectorIdsArray\n };\n\n targetGraph.addConnector(placeholderConnector);\n }\n });\n\n return targetGraph.getGraphData();\n }\n};\n\nexport default PlaceHolderHelper;\n"]}
1
+ {"version":3,"file":"addNodeUtils.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/addNodeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { OmitStrict } from '@pega/cosmos-react-core';\n\nimport { AddNodeProps } from '../AddNode';\nimport { AddNodeHandlerParams } from '../Renderer/Renderer.types';\nimport { ConnectorProps, DirectedGraph, GraphData, Node } from '../Renderer/Utils/Graph';\nimport { PlottedGraphNode, PlottedGraphConnector } from '../Renderer/Utils/GraphLayout';\nimport GraphTraversal, { NestedArray } from '../Renderer/Utils/GraphTraversal';\n\nexport interface PlaceHolderNode extends PlottedGraphNode {\n realConnectors: string[];\n}\nexport interface PlaceHolderConnector extends PlottedGraphConnector {\n realConnectors: string[];\n}\n\n// type-guard PlaceHolderNode\nexport const isPlaceHolderNode = (node: PlaceHolderNode | Node): node is PlaceHolderNode => {\n return (node as PlaceHolderNode).realConnectors !== undefined;\n};\n\n// type-guard PlaceHolderConnector\nexport const isPlaceHolderConnector = (\n connector: PlaceHolderConnector | ConnectorProps\n): connector is PlaceHolderConnector => {\n return (connector as PlaceHolderConnector).realConnectors !== undefined;\n};\n\nconst countInvisibleConnectors = (\n graph: DirectedGraph,\n connectors: NestedArray<string>\n): number => {\n let invisibleConnectorsCount = 0;\n for (let i = 0; i < connectors.length; i += 1) {\n if (Array.isArray(connectors[i]))\n invisibleConnectorsCount += countInvisibleConnectors(\n graph,\n connectors[i] as NestedArray<string>\n );\n else {\n const connectorData = graph.getConnector(connectors[i] as string);\n const fromNode = graph.getNode(connectorData.fromNodeId);\n if (fromNode?.type?.minConnectors === 0) {\n invisibleConnectorsCount += 1;\n }\n }\n }\n return invisibleConnectorsCount;\n};\n\nconst PlaceHolderHelper = {\n insertAtConnectorsMerge: (\n graph: DirectedGraph,\n getNewPHNodeCB: (addNodeMeta: AddNodeHandlerParams) => PlottedGraphNode,\n getNewPHConnectorCB: (\n fromNode: string,\n toNode: string,\n addNodeMeta: AddNodeHandlerParams\n ) => PlottedGraphConnector\n ) => {\n const gd = graph.getGraphData();\n\n // process the graph and find the first node automatically. We can find it easily by iterating and finding the node with no in-connectors\n const bfs = GraphTraversal.bfs(gd);\n bfs.reverse().forEach(nodeId => {\n const node = graph.getNode(nodeId);\n\n // get the node's convergence data\n const result = GraphTraversal.getConvergenceData(graph.getGraphData(), node.id);\n\n // if node has more than one out-connector and has convergence data\n if (result !== false) {\n // iterate over the resultant connectors\n for (let i = 0; i < result.connectors.length; i += 1) {\n const connectorsToUpdate = result.connectors[i];\n let invisibleConnectorsCount = 0;\n\n /** Count number of invisible connectors originating from go to shapes forming a convergence/join\n * compare invisible connectors count with connectors forming a convergence\n */\n if (typeof connectorsToUpdate !== 'string' && connectorsToUpdate.length > 1) {\n invisibleConnectorsCount = countInvisibleConnectors(graph, connectorsToUpdate);\n\n // ensure connectors converging are greater than invisible connectors\n if (connectorsToUpdate.length > invisibleConnectorsCount) {\n let refConnectorIdsArray: string[] = [];\n\n connectorsToUpdate.forEach(itrConId => {\n let conId = itrConId;\n if (Array.isArray(conId)) {\n conId = itrConId[0] as string;\n }\n\n const connector = graph.getConnector(conId);\n if (isPlaceHolderConnector(connector)) {\n refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];\n } else {\n refConnectorIdsArray.push(conId);\n }\n });\n\n const addNodeMeta: AddNodeHandlerParams = {\n refType: 'connector',\n refId: refConnectorIdsArray\n };\n const newNode = getNewPHNodeCB(addNodeMeta);\n const newPNode: PlaceHolderNode = {\n ...newNode,\n realConnectors: refConnectorIdsArray\n };\n graph.addNode(newPNode);\n\n connectorsToUpdate.forEach(item => {\n graph.setConnector(item as string, {\n toNodeId: newNode.id\n });\n });\n\n const newConnector = getNewPHConnectorCB(newNode.id, result.nodeId, addNodeMeta);\n const newPConnector: PlaceHolderConnector = {\n ...newConnector,\n realConnectors: refConnectorIdsArray\n };\n graph.addConnector(newPConnector);\n }\n }\n }\n }\n });\n },\n injectPlaceholderNodes: (\n graphData: GraphData<PlottedGraphNode, PlottedGraphConnector>,\n onGetNewNode: (metaData: AddNodeHandlerParams) => PlottedGraphNode,\n onGetNewConnector: (\n fromNodeId: string,\n toNodeId: string,\n metaData: AddNodeHandlerParams\n ) => PlottedGraphConnector\n ) => {\n // gets GraphData<RendererNodeProps, RendererConnectorProps>\n const targetGraph = new DirectedGraph(graphData);\n\n // insert placeholder-nodes at connector convergence point for nodes with multiple out connectors.\n PlaceHolderHelper.insertAtConnectorsMerge(targetGraph, onGetNewNode, onGetNewConnector);\n\n // iterate all nodes with more than one in-connectors and insert addNode before current one.\n targetGraph.getNodes().forEach(node => {\n // should not add a node before a placeholder node\n if (isPlaceHolderNode(node)) {\n return;\n }\n\n if (targetGraph.getPrevNodesCount(node.id) > 1) {\n let refConnectorIdsArray: string[] = [];\n\n // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.\n targetGraph.getInConnectors(node.id).forEach(con => {\n const connector = targetGraph.getConnector(con.id);\n if (isPlaceHolderConnector(connector)) {\n refConnectorIdsArray = [...refConnectorIdsArray, ...connector.realConnectors];\n } else {\n refConnectorIdsArray.push(con.id);\n }\n });\n\n const metaData: AddNodeHandlerParams = {\n refType: 'connector',\n refId: refConnectorIdsArray\n };\n\n // create a new placeholder node\n const newNode: OmitStrict<AddNodeProps, 'highlight' | 'addNodeHandler'> =\n onGetNewNode(metaData);\n const placeHolderNode: PlaceHolderNode = {\n ...newNode,\n realConnectors: refConnectorIdsArray\n };\n\n targetGraph.addNode(placeHolderNode);\n\n // connect all in-connectors to a new node and create a new connector that connects from new node to the actual toNodeId.\n targetGraph.getInConnectors(node.id).forEach(con => {\n targetGraph.setConnector(con.id, {\n toNodeId: placeHolderNode.id\n });\n });\n\n const newConnector = onGetNewConnector(placeHolderNode.id, node.id, metaData);\n const placeholderConnector: PlaceHolderConnector = {\n ...newConnector,\n realConnectors: refConnectorIdsArray\n };\n\n targetGraph.addConnector(placeholderConnector);\n }\n });\n\n return targetGraph.getGraphData();\n }\n};\n\nexport default PlaceHolderHelper;\n"]}
@@ -12,7 +12,7 @@ export interface DeleteNodeModalOption {
12
12
  export interface DeleteNodeModalResult {
13
13
  options: DeleteNodeModalOption[];
14
14
  selectedNodeId: string;
15
- destinationNodeId: string;
15
+ destinationNodeId?: string;
16
16
  allItems: GraphDataAsMap;
17
17
  }
18
18
  export interface DeleteNodeOutcome {
@@ -21,9 +21,10 @@ export interface DeleteNodeOutcome {
21
21
  connectors: ConnectorProps[];
22
22
  };
23
23
  deletes: GraphDataAsMap;
24
+ error: boolean;
24
25
  }
25
26
  declare const deleteNodeUtils: {
26
- getDeleteNodeOptions: (graph: DirectedGraph, nodeId: string) => DeleteNodeModalResult | undefined;
27
+ getDeleteNodeOptions: (graph: DirectedGraph, nodeId: string) => DeleteNodeModalResult;
27
28
  };
28
29
  export default deleteNodeUtils;
29
30
  //# sourceMappingURL=deleteNodeUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleteNodeUtils.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/deleteNodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,cAAc,EAAE,CAAC;KAC9B,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,QAAA,MAAM,eAAe;kCAEV,aAAa,UACZ,MAAM,KACb,qBAAqB,GAAG,SAAS;CAiFrC,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"deleteNodeUtils.d.ts","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/deleteNodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,cAAc,EAAE,CAAC;KAC9B,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,QAAA,MAAM,eAAe;kCACW,aAAa,UAAU,MAAM,KAAG,qBAAqB;CA0FpF,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -62,9 +62,19 @@ const deleteNodeUtils = {
62
62
  }
63
63
  };
64
64
  // ignore the destination node
65
- delete result.allItems.nodes[convergenceData.nodeId];
65
+ if (result.allItems)
66
+ delete result.allItems.nodes[convergenceData.nodeId];
66
67
  return result;
67
68
  }
69
+ return {
70
+ options: [],
71
+ selectedNodeId: nodeId,
72
+ destinationNodeId: undefined,
73
+ allItems: {
74
+ nodes: {},
75
+ connectors: {}
76
+ }
77
+ };
68
78
  }
69
79
  };
70
80
  export default deleteNodeUtils;
@@ -1 +1 @@
1
- {"version":3,"file":"deleteNodeUtils.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/deleteNodeUtils.ts"],"names":[],"mappings":"AAEA,OAAO,cAAmC,MAAM,kCAAkC,CAAC;AA4BnF,MAAM,eAAe,GAAG;IACtB,oBAAoB,EAAE,CACpB,KAAoB,EACpB,MAAc,EACqB,EAAE;QACrC,MAAM,eAAe,GACnB,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;QAElE,IAAI,eAAe,IAAI,eAAe,CAAC,KAAK,EAAE;YAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC/C,IACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACnB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,EACzC;oBACA,IAAI,KAAK,GAA4B,EAAE,CAAC;oBACxC,IAAI,UAAU,GAAiC,EAAE,CAAC;oBAElD,4BAA4B;oBAC5B,MAAM,SAAS,GAAG;wBAChB,KAAK,EAAE;4BACL,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa;yBACzC;wBACD,UAAU,EAAE;4BACV,GAAG,eAAe,CAAC,OAAO,CAAC,kBAAkB;yBAC9C;qBACF,CAAC;oBAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BACxB,KAAK,GAAG;gCACN,GAAG,KAAK;gCACR,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;6BAC9B,CAAC;4BAEF,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;4BAErC,4CAA4C;4BAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gCAC9B,OAAO,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC7B,CAAC,CAAC,CAAC;4BAEH,UAAU,GAAG;gCACX,GAAG,UAAU;gCACb,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB;6BACnC,CAAC;4BAEF,iDAAiD;4BACjD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gCACnC,OAAO,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;4BAClC,CAAC,CAAC,CAAC;yBACJ;oBACH,CAAC,CAAC,CAAC;oBAEH,8BAA8B;oBAC9B,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAE/C,OAAO;wBACL,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACpD,SAAS,EAAE;4BACT,KAAK;4BACL,UAAU;yBACX;wBACD,SAAS;qBACV,CAAC;iBACH;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,OAAkC;gBAC3C,cAAc,EAAE,MAAM;gBACtB,iBAAiB,EAAE,eAAe,CAAC,MAAM;gBACzC,QAAQ,EAAE;oBACR,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa;oBAC5C,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,kBAAkB;iBACvD;aACF,CAAC;YAEF,8BAA8B;YAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAErD,OAAO,MAA+B,CAAC;SACxC;IACH,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import { NodeProps } from '../Node/Node.types';\nimport { Node, ConnectorProps, DirectedGraph, GraphData } from '../Renderer/Utils/Graph';\nimport GraphTraversal, { ConvergenceData } from '../Renderer/Utils/GraphTraversal';\n\nexport interface GraphDataAsMap {\n nodes: Record<string, Node>;\n connectors: Record<string, ConnectorProps>;\n}\n\nexport interface DeleteNodeModalOption {\n connector: ConnectorProps;\n pathItems: GraphDataAsMap;\n restItems: GraphDataAsMap;\n}\n\nexport interface DeleteNodeModalResult {\n options: DeleteNodeModalOption[];\n selectedNodeId: string;\n destinationNodeId: string;\n allItems: GraphDataAsMap;\n}\n\nexport interface DeleteNodeOutcome {\n graphData: GraphData<NodeProps, ConnectorProps>;\n updates?: {\n connectors: ConnectorProps[];\n };\n deletes: GraphDataAsMap;\n}\n\nconst deleteNodeUtils = {\n getDeleteNodeOptions: (\n graph: DirectedGraph,\n nodeId: string\n ): DeleteNodeModalResult | undefined => {\n const convergenceData: ConvergenceData<Node, ConnectorProps> | false =\n GraphTraversal.getConvergenceData(graph.getGraphData(), nodeId);\n\n if (convergenceData && convergenceData.paths) {\n const options = convergenceData.paths.map(path => {\n if (\n Array.isArray(path) &&\n !Array.isArray(path[0]) &&\n typeof path[0].connectors[0] === 'string'\n ) {\n let nodes: GraphDataAsMap['nodes'] = {};\n let connectors: GraphDataAsMap['connectors'] = {};\n\n // rest of the overall items\n const restItems = {\n nodes: {\n ...convergenceData.summary.nodesinvolved\n },\n connectors: {\n ...convergenceData.summary.connectorsInvolved\n }\n };\n\n path.forEach(item => {\n if (!Array.isArray(item)) {\n nodes = {\n ...nodes,\n ...item.summary.nodesinvolved\n };\n\n delete nodes[convergenceData.nodeId];\n\n // remove the above nodes from the restItems\n Object.keys(nodes).forEach(id => {\n delete restItems.nodes[id];\n });\n\n connectors = {\n ...connectors,\n ...item.summary.connectorsInvolved\n };\n\n // remove the above connectors from the restItems\n Object.keys(connectors).forEach(id => {\n delete restItems.connectors[id];\n });\n }\n });\n\n // ignore the destination node\n delete restItems.nodes[convergenceData.nodeId];\n\n return {\n connector: graph.getConnector(path[0].connectors[0]),\n pathItems: {\n nodes,\n connectors\n },\n restItems\n };\n }\n return [];\n });\n\n const result = {\n options: options as DeleteNodeModalOption[],\n selectedNodeId: nodeId,\n destinationNodeId: convergenceData.nodeId,\n allItems: {\n nodes: convergenceData.summary.nodesinvolved,\n connectors: convergenceData.summary.connectorsInvolved\n }\n };\n\n // ignore the destination node\n delete result.allItems.nodes[convergenceData.nodeId];\n\n return result as DeleteNodeModalResult;\n }\n }\n};\n\nexport default deleteNodeUtils;\n"]}
1
+ {"version":3,"file":"deleteNodeUtils.js","sourceRoot":"","sources":["../../../../src/components/FlowModeller/Utils/deleteNodeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeProps } from '../Node/Node.types';\nimport { Node, ConnectorProps, DirectedGraph, GraphData } from '../Renderer/Utils/Graph';\nimport GraphTraversal, { ConvergenceData } from '../Renderer/Utils/GraphTraversal';\n\nexport interface GraphDataAsMap {\n nodes: Record<string, Node>;\n connectors: Record<string, ConnectorProps>;\n}\n\nexport interface DeleteNodeModalOption {\n connector: ConnectorProps;\n pathItems: GraphDataAsMap;\n restItems: GraphDataAsMap;\n}\n\nexport interface DeleteNodeModalResult {\n options: DeleteNodeModalOption[];\n selectedNodeId: string;\n destinationNodeId?: string;\n allItems: GraphDataAsMap;\n}\n\nexport interface DeleteNodeOutcome {\n graphData: GraphData<NodeProps, ConnectorProps>;\n updates?: {\n connectors: ConnectorProps[];\n };\n deletes: GraphDataAsMap;\n error: boolean;\n}\n\nconst deleteNodeUtils = {\n getDeleteNodeOptions: (graph: DirectedGraph, nodeId: string): DeleteNodeModalResult => {\n const convergenceData: ConvergenceData<Node, ConnectorProps> | false =\n GraphTraversal.getConvergenceData(graph.getGraphData(), nodeId);\n\n if (convergenceData && convergenceData.paths) {\n const options = convergenceData.paths.map(path => {\n if (\n Array.isArray(path) &&\n !Array.isArray(path[0]) &&\n typeof path[0].connectors[0] === 'string'\n ) {\n let nodes: GraphDataAsMap['nodes'] = {};\n let connectors: GraphDataAsMap['connectors'] = {};\n\n // rest of the overall items\n const restItems = {\n nodes: {\n ...convergenceData.summary.nodesinvolved\n },\n connectors: {\n ...convergenceData.summary.connectorsInvolved\n }\n };\n\n path.forEach(item => {\n if (!Array.isArray(item)) {\n nodes = {\n ...nodes,\n ...item.summary.nodesinvolved\n };\n\n delete nodes[convergenceData.nodeId];\n\n // remove the above nodes from the restItems\n Object.keys(nodes).forEach(id => {\n delete restItems.nodes[id];\n });\n\n connectors = {\n ...connectors,\n ...item.summary.connectorsInvolved\n };\n\n // remove the above connectors from the restItems\n Object.keys(connectors).forEach(id => {\n delete restItems.connectors[id];\n });\n }\n });\n\n // ignore the destination node\n delete restItems.nodes[convergenceData.nodeId];\n\n return {\n connector: graph.getConnector(path[0].connectors[0]),\n pathItems: {\n nodes,\n connectors\n },\n restItems\n };\n }\n return [];\n });\n\n const result: DeleteNodeModalResult = {\n options: options as DeleteNodeModalOption[],\n selectedNodeId: nodeId,\n destinationNodeId: convergenceData.nodeId,\n allItems: {\n nodes: convergenceData.summary.nodesinvolved,\n connectors: convergenceData.summary.connectorsInvolved\n }\n };\n\n // ignore the destination node\n if (result.allItems) delete result.allItems.nodes[convergenceData.nodeId];\n\n return result;\n }\n return {\n options: [],\n selectedNodeId: nodeId,\n destinationNodeId: undefined,\n allItems: {\n nodes: {},\n connectors: {}\n }\n };\n }\n};\n\nexport default deleteNodeUtils;\n"]}
@@ -8,13 +8,32 @@ export interface AddHelperParams {
8
8
  metaData: AddNodeHandlerParams;
9
9
  connectorsCount?: number;
10
10
  getNewNode?: () => NodeProps;
11
+ isBranchNode: boolean;
11
12
  getNewConnector?: (fromNodeId: string, toNodeId: string) => ConnectorProps;
12
13
  }
14
+ export interface NodeInfo<T extends NodeProps = NodeProps, U extends ConnectorProps = ConnectorProps> {
15
+ node: T;
16
+ inConnectors: U[];
17
+ outConnectors: U[];
18
+ }
13
19
  declare const helpers: {
14
- addConnector(graphData: GraphData<NodeProps, ConnectorProps>, nodeId: string, label?: string | undefined, getNewConnector?: AddHelperParams['getNewConnector']): GraphData<NodeProps, ConnectorProps<unknown>>;
20
+ addConnector(graphData: GraphData<NodeProps, ConnectorProps>, nodeId: string, label?: string, getNewConnector?: AddHelperParams['getNewConnector']): {
21
+ graphData: GraphData<NodeProps, ConnectorProps<unknown>>;
22
+ connector: ConnectorProps<unknown>;
23
+ } | {
24
+ graphData: {
25
+ nodes: never[];
26
+ connectors: never[];
27
+ };
28
+ connector: {};
29
+ };
15
30
  deleteConnector: (graphData: GraphData<NodeProps, ConnectorProps>, connector: ConnectorProps) => DeleteNodeOutcome;
16
- addNode: ({ graphData, nodeType, metaData, getNewNode, getNewConnector, connectorsCount }: AddHelperParams) => GraphData<NodeProps, ConnectorProps<unknown>>;
31
+ addNode: ({ graphData, nodeType, isBranchNode, metaData, getNewNode, getNewConnector, connectorsCount }: AddHelperParams) => {
32
+ graphData: GraphData<NodeProps, ConnectorProps<unknown>>;
33
+ node: NodeProps;
34
+ };
17
35
  deleteNode(graphData: GraphData<NodeProps, ConnectorProps>, nodeId: string): DeleteNodeOutcome | false;
36
+ selectNode(graphData: GraphData<NodeProps, ConnectorProps>, nodeId: NodeProps['id']): NodeInfo;
18
37
  };
19
38
  export default helpers;
20
39
  //# sourceMappingURL=helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/helper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAwB,EAAE,iBAAiB,EAAkB,MAAM,yBAAyB,CAAC;AAE7F,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,cAAc,CAAC;CAC5E;AAED,QAAA,MAAM,OAAO;4BAEE,UAAU,SAAS,EAAE,cAAc,CAAC,UACvC,MAAM,gDAEI,eAAe,CAAC,iBAAiB,CAAC;iCAwBzB,UAAU,SAAS,EAAE,cAAc,CAAC,aAAa,cAAc;+FAiDzF,eAAe;0BAgEL,UAAU,SAAS,EAAE,cAAc,CAAC,UACvC,MAAM,GACb,iBAAiB,GAAG,KAAK;CAwC7B,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/components/FlowModeller/helper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAwB,EAAE,iBAAiB,EAAkB,MAAM,yBAAyB,CAAC;AAE7F,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,SAAS,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,cAAc,CAAC;CAC5E;AAED,MAAM,WAAW,QAAQ,CACvB,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/B,CAAC,SAAS,cAAc,GAAG,cAAc;IAEzC,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,CAAC,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC,EAAE,CAAC;CACpB;AAED,QAAA,MAAM,OAAO;4BAEE,UAAU,SAAS,EAAE,cAAc,CAAC,UACvC,MAAM,UACN,MAAM,oBACI,eAAe,CAAC,iBAAiB,CAAC;;;;;;;;;;iCA4BzB,UAAU,SAAS,EAAE,cAAc,CAAC,aAAa,cAAc;6GA8EzF,eAAe;;;;0BA8DL,UAAU,SAAS,EAAE,cAAc,CAAC,UACvC,MAAM,GACb,iBAAiB,GAAG,KAAK;0BAkDN,UAAU,SAAS,EAAE,cAAc,CAAC,UAAU,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ;CAW/F,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -5,62 +5,85 @@ import deleteNodeUtils from './Utils/deleteNodeUtils';
5
5
  const helpers = {
6
6
  addConnector(graphData, nodeId, label, getNewConnector) {
7
7
  const graph = new DirectedGraph(graphData);
8
- const convergeData = GraphTraversal.getConvergenceData(graphData, nodeId);
9
- if (convergeData) {
8
+ const convergenceData = GraphTraversal.getConvergenceData(graphData, nodeId);
9
+ const outConnectors = graph.getOutConnectors(nodeId);
10
+ const convergenceNodeId = convergenceData ? convergenceData.nodeId : undefined;
11
+ const targetNodeId = outConnectors.length < 2 ? outConnectors[0].toNodeId : convergenceNodeId;
12
+ if (targetNodeId) {
10
13
  const newConnector = getNewConnector
11
- ? getNewConnector(nodeId, convergeData.nodeId)
14
+ ? getNewConnector(nodeId, targetNodeId)
12
15
  : {
13
16
  id: createUID(),
14
17
  fromNodeId: nodeId,
15
- toNodeId: convergeData.nodeId,
18
+ toNodeId: targetNodeId,
16
19
  label: label || ''
17
20
  };
18
21
  graph.addConnector(newConnector);
22
+ return {
23
+ graphData: graph.getGraphData(),
24
+ connector: newConnector
25
+ };
19
26
  }
20
- else {
21
- throw new Error('Invalid node, either the node does not exist or it does not support branches');
22
- }
23
- return graph.getGraphData();
27
+ return { graphData: { nodes: [], connectors: [] }, connector: {} };
24
28
  },
25
29
  deleteConnector: (graphData, connector) => {
26
30
  const nodeId = connector.fromNodeId;
27
31
  const graph = new DirectedGraph(graphData);
28
32
  const deleteOptionsResult = deleteNodeUtils.getDeleteNodeOptions(graph, nodeId);
29
33
  const deleteOptions = deleteOptionsResult.options;
30
- let targetBranch = null;
31
34
  let itemsToDelete = deleteOptionsResult.allItems;
32
- targetBranch = deleteOptions.find(current => {
33
- if (connector.id === current.connector.id) {
34
- return true;
35
- }
36
- return false;
37
- });
35
+ const targetNodeId = deleteOptionsResult?.destinationNodeId
36
+ ? deleteOptionsResult.destinationNodeId
37
+ : '';
38
+ const targetBranch = deleteOptions.find(deleteOption => connector.id === deleteOption.connector.id);
39
+ let flowConnectorExists = false;
38
40
  if (targetBranch) {
39
41
  itemsToDelete = targetBranch?.pathItems;
42
+ let visibleInConnectors = graph.getInConnectors(targetNodeId);
43
+ /** From the rest of the connectors check if any connector originating from a shape other than go to and
44
+ * is having the toNode as destination node ensuring the flow to continue
45
+ */
46
+ const restConnectors = targetBranch.restItems.connectors;
47
+ const connectors = Object.keys(restConnectors);
48
+ for (let i = 0; i < connectors.length; i += 1) {
49
+ const connectorData = restConnectors[connectors[i]];
50
+ if (connectorData &&
51
+ graph.getNode(connectorData.fromNodeId).type.minConnectors !== 0 &&
52
+ connectorData.toNodeId === deleteOptionsResult.destinationNodeId) {
53
+ flowConnectorExists = true;
54
+ break;
55
+ }
56
+ if (connectorData &&
57
+ graph.getNode(connectorData.fromNodeId).type.minConnectors === 0 &&
58
+ connectorData.toNodeId === deleteOptionsResult.destinationNodeId) {
59
+ visibleInConnectors = visibleInConnectors.filter(con => {
60
+ return (graph.getNode(con.fromNodeId).type.minConnectors !== 0 &&
61
+ con.id !== connectorData.id &&
62
+ !targetBranch.pathItems.connectors[con.id]);
63
+ });
64
+ }
65
+ }
66
+ if (!flowConnectorExists && visibleInConnectors.length >= 1) {
67
+ flowConnectorExists = true;
68
+ }
40
69
  }
41
- const resultGraphData = graph.getGraphData();
42
70
  // filter the highlighted nodes, including the selected node
43
- const nodes = resultGraphData.nodes.filter(item => {
44
- return itemsToDelete.nodes[item.id] === undefined;
45
- });
71
+ const nodes = graphData.nodes.filter(item => !itemsToDelete.nodes[item.id]);
46
72
  // filter the highlighted connectors
47
- const connectors = resultGraphData.connectors.filter(item => {
48
- // if not in items to delete, add to list
49
- if (itemsToDelete.connectors[item.id] === undefined) {
50
- return true;
51
- }
52
- return false;
53
- });
73
+ const connectors = graphData.connectors.filter(item => !itemsToDelete.connectors[item.id]);
54
74
  const outcome = {
55
75
  graphData: {
56
- nodes: nodes,
76
+ nodes,
57
77
  connectors
58
78
  },
59
- deletes: itemsToDelete
79
+ deletes: itemsToDelete,
80
+ error: false
60
81
  };
82
+ if (!flowConnectorExists)
83
+ outcome.error = true;
61
84
  return outcome;
62
85
  },
63
- addNode: ({ graphData, nodeType, metaData, getNewNode, getNewConnector, connectorsCount }) => {
86
+ addNode: ({ graphData, nodeType, isBranchNode, metaData, getNewNode, getNewConnector, connectorsCount }) => {
64
87
  const graph = new DirectedGraph(graphData);
65
88
  const newNode = getNewNode
66
89
  ? getNewNode()
@@ -100,7 +123,8 @@ const helpers = {
100
123
  minConnectors = connectorsCount;
101
124
  }
102
125
  else {
103
- minConnectors = nodeType.minConnectors !== undefined ? nodeType.minConnectors : 1;
126
+ minConnectors =
127
+ nodeType.minConnectors !== undefined && !isBranchNode ? nodeType.minConnectors : 1;
104
128
  }
105
129
  for (let i = 0; i < minConnectors; i += 1) {
106
130
  const newConnector = getNewConnector
@@ -109,16 +133,36 @@ const helpers = {
109
133
  id: createUID(),
110
134
  fromNodeId: newNode.id,
111
135
  toNodeId,
112
- label: nodeType.defaults?.connector[i].label
136
+ label: !isBranchNode ? nodeType.defaults?.connector[i].label : ''
113
137
  };
114
138
  graph.addConnector(newConnector);
115
139
  }
116
- // return the updated graphData
117
- return graph.getGraphData();
140
+ return {
141
+ graphData: graph.getGraphData(),
142
+ node: newNode
143
+ };
118
144
  },
119
145
  deleteNode(graphData, nodeId) {
120
146
  const graph = new DirectedGraph(graphData);
147
+ const node = graph.getNode(nodeId);
121
148
  const outConnectors = graph.getOutConnectors(nodeId);
149
+ const nodes = graph.getNodes();
150
+ const outcome = {
151
+ graphData: graph.getGraphData(),
152
+ deletes: {
153
+ nodes: {
154
+ [nodeId]: node
155
+ },
156
+ connectors: {}
157
+ },
158
+ error: false
159
+ };
160
+ for (let i = 0; i < nodes.length; i += 1) {
161
+ if (nodes[i].type.minConnectors === 0 && nodes[i].reference === nodeId) {
162
+ outcome.error = true;
163
+ return outcome;
164
+ }
165
+ }
122
166
  if (outConnectors.length > 1) {
123
167
  return false;
124
168
  }
@@ -131,21 +175,23 @@ const helpers = {
131
175
  connectorUpdates.push(con);
132
176
  });
133
177
  graph.removeConnector(outConnectors[0].id);
134
- const node = graph.getNode(nodeId);
135
178
  graph.deleteNode(nodeId, true);
136
- const outcome = {
137
- graphData: graph.getGraphData(),
138
- deletes: {
139
- nodes: {
140
- [nodeId]: node
141
- },
142
- connectors: {}
143
- },
144
- updates: {
145
- connectors: connectorUpdates
146
- }
179
+ outcome.graphData = graph.getGraphData();
180
+ outcome.updates = {
181
+ connectors: connectorUpdates
147
182
  };
148
183
  return outcome;
184
+ },
185
+ selectNode(graphData, nodeId) {
186
+ const graph = new DirectedGraph(graphData);
187
+ const selectedNode = graph.getNode(nodeId);
188
+ const outConnectors = graph.getOutConnectors(nodeId);
189
+ const inConnectors = graph.getInConnectors(nodeId);
190
+ return {
191
+ node: selectedNode,
192
+ inConnectors,
193
+ outConnectors
194
+ };
149
195
  }
150
196
  };
151
197
  export default helpers;