@gadmin2n/schematics 0.0.143 → 0.0.145

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 (279) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/config/.types.d.ts +10 -0
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +2 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +140 -19
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +2 -2
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/data-mngt.seed.ts +0 -2
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +694 -327
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-outbox.ts +57 -0
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +35 -5
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflows.ts +224 -59
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +23 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +16 -5
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.spec.ts +98 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +26 -6
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +17 -2
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +1 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +3 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +0 -2
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +30 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +28 -6
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +63 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +151 -38
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +4 -1
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +16 -5
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +23 -6
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.spec.ts +130 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +62 -62
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +15 -1
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +70 -9
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +31 -7
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.spec.ts +30 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +28 -6
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +50 -3
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +26 -3
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +53 -47
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +0 -1
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.spec.ts +541 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +442 -200
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +1 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.spec.ts +150 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +56 -40
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +16 -60
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +13 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.spec.ts +44 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +6 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +258 -12
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +127 -14
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/manual-workflow-execution.spec.ts +85 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/manual-workflow-execution.ts +108 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +5 -5
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.spec.ts +96 -25
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.ts +77 -34
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +23 -34
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +0 -21
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-cancellation.spec.ts +245 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +639 -188
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +408 -235
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +1 -3
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +279 -95
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +360 -80
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-event-catalog.spec.ts +323 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution-idempotency.spec.ts +773 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +7 -13
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +0 -16
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.spec.ts +184 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +69 -138
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.spec.ts +113 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +59 -13
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-runtime.facade.ts +86 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-switch-config.spec.ts +25 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-switch-config.ts +45 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.spec.ts +78 -43
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +103 -40
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.dto.ts +57 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +3 -1
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +1000 -240
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +2184 -317
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +279 -2
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +5 -1
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +4 -1
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +5 -1
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +12 -3
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +10 -1
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +2 -24
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +3 -70
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +3 -1
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +25 -5
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/WorkflowActionButton.test.tsx +71 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/WorkflowActionButton.tsx +89 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +1 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +52 -12
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +12 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +2 -2
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +10 -33
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +13 -37
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +55 -7
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +14 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +10 -0
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/workflowAction.ts +19 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/index.ts +1 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +3 -1
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +1 -6
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useReferenceUpload.ts +95 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +2 -2
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +672 -110
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +2 -2
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +676 -114
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +13 -1
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +1 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasEditPage.tsx +38 -4
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +276 -376
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +126 -6
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.test.tsx +50 -0
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +48 -11
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +32 -34
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/RegisterBusinessEventModal.test.tsx +111 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/RegisterBusinessEventModal.tsx +167 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/business-events.css +99 -0
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/detail.test.tsx +106 -0
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/detail.tsx +324 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/index.test.tsx +73 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/business-events/index.tsx +359 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CanvasZoomControls.tsx +46 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +9 -1
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.test.tsx +105 -4
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +90 -48
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +3 -2
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.test.tsx +259 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +167 -103
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +142 -140
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +60 -15
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +25 -12
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +364 -200
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +220 -52
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeOutputSummary.test.tsx +260 -0
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeOutputSummary.tsx +300 -130
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +507 -33
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +630 -592
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +67 -70
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ReadonlyNodePanel.test.tsx +90 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ReadonlyNodePanel.tsx +325 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.test.tsx +52 -0
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +14 -9
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +2 -1
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +2 -1
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/WorkflowCodeEditor.test.tsx +42 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/WorkflowCodeEditor.tsx +76 -0
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/WorkflowWorkspaceHeader.tsx +56 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/parameter-binding-editor.css +46 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/workflow-code-editor.css +34 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +53 -7
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +123 -62
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connections.css +85 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connectionsApi.ts +29 -0
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.test.tsx +75 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +69 -36
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.test.tsx +494 -0
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +665 -194
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useReferencedNodeInstanceConfigs.test.tsx +92 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useReferencedNodeInstanceConfigs.ts +96 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.test.tsx +297 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +135 -65
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +53 -42
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +344 -155
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +79 -58
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/CreateNodeInstanceModal.tsx +123 -144
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +169 -98
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/node-instance-form.css +91 -0
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +54 -31
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/node-config.css +854 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +41 -14
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +75 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +3 -0
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +20 -2
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +2 -1
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +61 -66
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +33 -1
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +47 -15
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/BranchConfigEditors.test.tsx +104 -0
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +22 -52
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.test.tsx +72 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +78 -70
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CronTriggerConfigEditor.tsx +569 -0
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/DbExecuteConfigEditor.tsx +130 -0
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/DelayConfigEditor.tsx +100 -0
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/EventTriggerConfigEditor.tsx +620 -0
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +22 -45
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +25 -92
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +3 -11
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ForEachConfigEditor.test.tsx +58 -0
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ForEachConfigEditor.tsx +107 -0
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +212 -31
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +214 -304
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +175 -40
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +693 -293
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/IfElseConfigEditor.tsx +190 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ManualTriggerConfigEditor.test.tsx +152 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ManualTriggerConfigEditor.tsx +286 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ParallelConfigEditor.tsx +101 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ParameterBindingListEditor.tsx +99 -0
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SimplifiedNodeEditors.test.tsx +495 -0
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubWorkflowConfigEditor.test.tsx +124 -0
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubWorkflowConfigEditor.tsx +222 -0
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +2 -4
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SwitchConfigEditor.tsx +204 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +3 -1
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +9 -6
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/callable-workflow.ts +4 -0
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/code-config.css +96 -0
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/event-catalog.api.ts +117 -0
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/http-request-config.css +242 -0
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/human-approval-config.css +194 -0
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +264 -167
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +6 -9
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +19 -16
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +28 -4
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/useWorkflowFormValidation.test.tsx +59 -0
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/useWorkflowFormValidation.ts +24 -0
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/forEachConnection.test.ts +311 -0
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/forEachConnection.ts +198 -0
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/mainFlowConnection.test.ts +143 -0
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/mainFlowConnection.ts +19 -0
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +103 -5
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +158 -3
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +117 -9
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveEffectiveOutput.test.ts +70 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveEffectiveOutput.ts +48 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.test.ts +55 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +95 -22
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +148 -1
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +62 -11
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +19 -0
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +1 -1
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/subWorkflowChange.test.ts +45 -0
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/subWorkflowChange.ts +26 -0
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/validateWorkflowDsl.test.ts +502 -0
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/validateWorkflowDsl.ts +694 -0
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowDateTime.test.ts +27 -0
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowDateTime.ts +33 -0
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowHistory.test.ts +34 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowHistory.ts +52 -0
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowPublishError.test.ts +99 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowPublishError.ts +91 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowSkillPrompt.test.ts +74 -0
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/workflowSkillPrompt.ts +120 -0
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/workflow-ui.css +481 -0
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +1 -1
  248. package/package.json +1 -1
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowEventOutbox.ts +0 -62
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +0 -86
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-event-trigger.ts +0 -60
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +0 -183
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +0 -227
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.spec.ts +0 -82
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.ts +0 -111
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.spec.ts +0 -54
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.ts +0 -147
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.module.ts +0 -10
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.spec.ts +0 -350
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.ts +0 -110
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +0 -1
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +0 -106
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +0 -45
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +0 -43
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeTypeBadge.tsx +0 -36
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +0 -41
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +0 -47
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +0 -182
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +0 -34
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +0 -16
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +0 -25
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +0 -42
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +0 -208
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +0 -246
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/create.tsx +0 -111
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +0 -127
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/index.tsx +0 -4
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +0 -282
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +0 -74
@@ -1,106 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { Button, Empty, List, Modal, Space, Spin, Typography } from 'antd';
3
- import type { WorkflowNodeInstance, WorkflowNodeType } from '../types';
4
- import { useNodeInstanceLibrary } from '../hooks/useNodeInstanceLibrary';
5
- import { CreateNodeInstanceDrawer } from './CreateNodeInstanceDrawer';
6
- import { useTranslation } from 'react-i18next';
7
-
8
- interface Props {
9
- open: boolean;
10
- nodeType?: WorkflowNodeType;
11
- allowInline?: boolean;
12
- onCancel(): void;
13
- onInline?(): void;
14
- onSelect(instance: WorkflowNodeInstance): void;
15
- }
16
-
17
- export function InstanceRequiredDialog({
18
- open,
19
- nodeType,
20
- allowInline,
21
- onCancel,
22
- onInline,
23
- onSelect,
24
- }: Props) {
25
- const { t } = useTranslation('workflow');
26
- const [creating, setCreating] = useState(false);
27
- const { instances, loading } = useNodeInstanceLibrary(
28
- nodeType?.id,
29
- open && !creating && Boolean(nodeType),
30
- );
31
-
32
- useEffect(() => {
33
- if (!open) setCreating(false);
34
- }, [open]);
35
-
36
- return (
37
- <>
38
- <Modal
39
- open={open && !creating}
40
- title={t('nodeInstance.chooseNamed', {
41
- name: nodeType?.label ?? 'Node',
42
- })}
43
- footer={
44
- <Space>
45
- <Button onClick={onCancel}>{t('common.cancel')}</Button>
46
- {allowInline && (
47
- <Button onClick={onInline}>{t('nodeInstance.useInline')}</Button>
48
- )}
49
- <Button type="primary" onClick={() => setCreating(true)}>
50
- {t('nodeInstance.create')}
51
- </Button>
52
- </Space>
53
- }
54
- onCancel={onCancel}
55
- >
56
- {loading ? (
57
- <div style={{ padding: 32, textAlign: 'center' }}>
58
- <Spin />
59
- </div>
60
- ) : instances.length ? (
61
- <List
62
- dataSource={instances}
63
- renderItem={(instance) => (
64
- <List.Item
65
- actions={[
66
- <Button
67
- key="select"
68
- type="link"
69
- onClick={() => onSelect(instance)}
70
- >
71
- {t('nodeInstance.useInstance')}
72
- </Button>,
73
- ]}
74
- >
75
- <List.Item.Meta
76
- title={instance.name}
77
- description={
78
- instance.description ||
79
- t('nodeInstance.instanceCode', { code: instance.code })
80
- }
81
- />
82
- </List.Item>
83
- )}
84
- />
85
- ) : (
86
- <Empty
87
- description={
88
- <Typography.Text type="secondary">
89
- {t('nodeInstance.noEnabled')}
90
- </Typography.Text>
91
- }
92
- />
93
- )}
94
- </Modal>
95
- <CreateNodeInstanceDrawer
96
- open={open && creating}
97
- nodeType={nodeType}
98
- onCancel={() => setCreating(false)}
99
- onCreated={(instance) => {
100
- setCreating(false);
101
- onSelect(instance);
102
- }}
103
- />
104
- </>
105
- );
106
- }
@@ -1,45 +0,0 @@
1
- import { render, screen } from '@testing-library/react';
2
- import userEvent from '@testing-library/user-event';
3
- import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
4
- import i18n from '../../../i18n';
5
- import { LookupConnectionDialog } from './LookupConnectionDialog';
6
-
7
- describe('LookupConnectionDialog', () => {
8
- beforeAll(() => {
9
- Object.defineProperty(window, 'matchMedia', {
10
- writable: true,
11
- value: vi.fn().mockImplementation(() => ({
12
- matches: false,
13
- addListener: vi.fn(),
14
- removeListener: vi.fn(),
15
- addEventListener: vi.fn(),
16
- removeEventListener: vi.fn(),
17
- dispatchEvent: vi.fn(),
18
- })),
19
- });
20
- });
21
-
22
- beforeEach(async () => {
23
- await i18n.changeLanguage('en');
24
- });
25
-
26
- it('explains that the HTTP node owns its value sources', async () => {
27
- const onConfirm = vi.fn();
28
- render(
29
- <LookupConnectionDialog
30
- open
31
- apPortLabel="Direct manager"
32
- httpNodeLabel="Lookup manager"
33
- onCancel={vi.fn()}
34
- onConfirm={onConfirm}
35
- />,
36
- );
37
-
38
- expect(screen.getByText(/HTTP Request 会按自身配置/)).toBeInTheDocument();
39
- expect(screen.queryByRole('textbox')).not.toBeInTheDocument();
40
-
41
- await userEvent.click(screen.getByRole('button', { name: '创建连接' }));
42
-
43
- expect(onConfirm).toHaveBeenCalledWith();
44
- });
45
- });
@@ -1,43 +0,0 @@
1
- import React from 'react';
2
- import { Alert, Modal, Typography } from 'antd';
3
-
4
- interface Props {
5
- open: boolean;
6
- apPortLabel?: string;
7
- httpNodeLabel?: string;
8
- onCancel(): void;
9
- onConfirm(): void;
10
- }
11
-
12
- export function LookupConnectionDialog({
13
- open,
14
- apPortLabel,
15
- httpNodeLabel,
16
- onCancel,
17
- onConfirm,
18
- }: Props) {
19
- return (
20
- <Modal
21
- open={open}
22
- title="创建查询连接"
23
- okText="创建连接"
24
- cancelText="取消"
25
- onOk={() => onConfirm()}
26
- onCancel={onCancel}
27
- destroyOnHidden
28
- width={620}
29
- >
30
- <Alert
31
- type="info"
32
- showIcon
33
- message={`${apPortLabel ?? '审批人查询'} 将调用 ${httpNodeLabel ?? 'HTTP Request'}`}
34
- description="HTTP Request 会按自身配置,从上一个节点的结果、Workflow 启动数据或固定值中读取请求数据。"
35
- style={{ marginBottom: 18 }}
36
- />
37
- <Typography.Paragraph type="secondary">
38
- 连接后,请将 HTTP Response OUT 连接到 Code Data IN,再将 Code Result OUT
39
- 返回审批节点。
40
- </Typography.Paragraph>
41
- </Modal>
42
- );
43
- }
@@ -1,36 +0,0 @@
1
- import { useTranslation } from 'react-i18next';
2
-
3
- export function NodeTypeBadge({
4
- type,
5
- borderColor,
6
- }: {
7
- type?: string;
8
- borderColor: string;
9
- }) {
10
- const { t } = useTranslation('workflow');
11
- if (!type) return null;
12
-
13
- const typeName = t(`nodeTypes.${type}`, { defaultValue: type });
14
-
15
- return (
16
- <div
17
- style={{
18
- display: 'inline-flex',
19
- alignItems: 'center',
20
- maxWidth: '100%',
21
- marginBottom: 5,
22
- padding: '1px 7px',
23
- border: `1px solid ${borderColor}`,
24
- borderRadius: 999,
25
- background: 'rgba(255, 255, 255, 0.72)',
26
- color: '#595959',
27
- fontSize: 10,
28
- fontWeight: 500,
29
- lineHeight: '16px',
30
- whiteSpace: 'nowrap',
31
- }}
32
- >
33
- {t('nodeTypeBadge', { type: typeName })}
34
- </div>
35
- );
36
- }
@@ -1,41 +0,0 @@
1
- import { useCallback, useEffect, useState } from 'react';
2
- import { customRequest } from 'helpers/http';
3
- import type { WorkflowNodeInstance } from '../types';
4
-
5
- export function useNodeInstanceLibrary(nodeTypeId?: string, enabled = true) {
6
- const [instances, setInstances] = useState<WorkflowNodeInstance[]>([]);
7
- const [loading, setLoading] = useState(false);
8
- const [error, setError] = useState<Error>();
9
-
10
- const reload = useCallback(async () => {
11
- if (!nodeTypeId || !enabled) {
12
- setInstances([]);
13
- return;
14
- }
15
- setLoading(true);
16
- setError(undefined);
17
- try {
18
- const response = await customRequest<{ data: WorkflowNodeInstance[] }>(
19
- 'workflowNodeInstance/findMany',
20
- 'POST',
21
- {
22
- where: { nodeTypeId: Number(nodeTypeId), isEnabled: true },
23
- orderBy: { name: 'asc' },
24
- take: 100,
25
- },
26
- );
27
- setInstances(Array.isArray(response) ? response : (response.data ?? []));
28
- } catch (cause) {
29
- setError(cause instanceof Error ? cause : new Error(String(cause)));
30
- setInstances([]);
31
- } finally {
32
- setLoading(false);
33
- }
34
- }, [enabled, nodeTypeId]);
35
-
36
- useEffect(() => {
37
- void reload();
38
- }, [reload]);
39
-
40
- return { instances, loading, error, reload };
41
- }
@@ -1,47 +0,0 @@
1
- import { render, screen, waitFor } from '@testing-library/react';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
- import { customRequest } from 'helpers/http';
4
- import i18n from '../../../../i18n';
5
- import { ApproverSourceEditor } from './ApproverSourceEditor';
6
-
7
- vi.mock('helpers/http', () => ({ customRequest: vi.fn() }));
8
-
9
- describe('ApproverSourceEditor', () => {
10
- beforeEach(async () => {
11
- await i18n.changeLanguage('en');
12
- vi.mocked(customRequest).mockResolvedValue([
13
- {
14
- id: 'direct-manager',
15
- name: 'Direct manager',
16
- inputParameters: [
17
- { key: 'wecomId', label: 'WeCom ID', required: true },
18
- ],
19
- },
20
- ] as never);
21
- });
22
-
23
- it('shows an explicit Workflow-data binding with a readable preview', async () => {
24
- render(
25
- <ApproverSourceEditor
26
- value={[
27
- {
28
- workflowId: 'direct-manager',
29
- inputBindings: {
30
- wecomId: { source: 'WORKFLOW', path: 'wecomId' },
31
- },
32
- },
33
- ]}
34
- onChange={vi.fn()}
35
- />,
36
- );
37
-
38
- await waitFor(() =>
39
- expect(screen.getByText('Direct manager')).toBeInTheDocument(),
40
- );
41
- expect(
42
- screen.getAllByLabelText('WeCom ID value source')[0],
43
- ).toHaveTextContent('Workflow start data');
44
- expect(screen.getByLabelText('WeCom ID field path')).toHaveValue('wecomId');
45
- expect(screen.getByText('workflow.wecomId')).toBeInTheDocument();
46
- });
47
- });
@@ -1,182 +0,0 @@
1
- import {
2
- DeleteOutlined,
3
- RobotOutlined,
4
- ThunderboltOutlined,
5
- } from '@ant-design/icons';
6
- import { Alert, Button, Card, Empty, Select, Space, Typography } from 'antd';
7
- import { customRequest } from 'helpers/http';
8
- import { useEffect, useMemo, useState } from 'react';
9
- import { useTranslation } from 'react-i18next';
10
- import {
11
- addApproverSource,
12
- type ApproverSourceConfig,
13
- type CallableWorkflowOption,
14
- } from './approver-source';
15
- import type { ParameterBinding } from '../../types/parameter-binding';
16
- import { ParameterBindingEditor } from '../../components/ParameterBindingEditor';
17
-
18
- export function ApproverSourceEditor({
19
- value,
20
- onChange,
21
- disabled,
22
- }: {
23
- value: ApproverSourceConfig[];
24
- onChange(value: ApproverSourceConfig[]): void;
25
- disabled?: boolean;
26
- }) {
27
- const { t } = useTranslation('workflow');
28
- const [workflows, setWorkflows] = useState<CallableWorkflowOption[]>([]);
29
- const [loadFailed, setLoadFailed] = useState(false);
30
-
31
- useEffect(() => {
32
- customRequest<CallableWorkflowOption[]>('workflow/callable', 'GET')
33
- .then((items) => {
34
- setWorkflows(Array.isArray(items) ? items : []);
35
- setLoadFailed(false);
36
- })
37
- .catch(() => setLoadFailed(true));
38
- }, []);
39
-
40
- const byId = useMemo(
41
- () => new Map(workflows.map((workflow) => [workflow.id, workflow])),
42
- [workflows],
43
- );
44
-
45
- function updateBinding(
46
- workflowId: string,
47
- key: string,
48
- binding: ParameterBinding,
49
- ) {
50
- onChange(
51
- value.map((item) =>
52
- item.workflowId === workflowId
53
- ? {
54
- ...item,
55
- inputBindings: {
56
- ...item.inputBindings,
57
- [key]: binding,
58
- },
59
- }
60
- : item,
61
- ),
62
- );
63
- }
64
-
65
- return (
66
- <Space direction="vertical" size={10} style={{ width: '100%' }}>
67
- <div>
68
- <Typography.Text strong>
69
- {t('approval.automaticApprovers')}
70
- </Typography.Text>
71
- <Typography.Text
72
- type="secondary"
73
- style={{ display: 'block', fontSize: 12 }}
74
- >
75
- {t('approval.automaticApproversDescription')}
76
- </Typography.Text>
77
- </div>
78
- {loadFailed && (
79
- <Alert
80
- type="warning"
81
- showIcon
82
- message={t('approval.sourceLoadFailed')}
83
- />
84
- )}
85
- <Select<string>
86
- showSearch
87
- optionFilterProp="label"
88
- disabled={disabled || loadFailed}
89
- value={undefined}
90
- placeholder={t('approval.addAutomaticApprover')}
91
- suffixIcon={<ThunderboltOutlined />}
92
- options={workflows
93
- .filter(
94
- (workflow) =>
95
- !value.some((source) => source.workflowId === workflow.id),
96
- )
97
- .map((workflow) => ({
98
- value: workflow.id,
99
- label: workflow.name,
100
- }))}
101
- onChange={(workflowId) => {
102
- const workflow = byId.get(workflowId);
103
- if (workflow) onChange(addApproverSource(value, workflow));
104
- }}
105
- style={{ width: '100%' }}
106
- />
107
- {value.length === 0 ? (
108
- <Empty
109
- image={Empty.PRESENTED_IMAGE_SIMPLE}
110
- description={t('approval.noAutomaticApprovers')}
111
- />
112
- ) : (
113
- value.map((source) => {
114
- const workflow = byId.get(source.workflowId);
115
- return (
116
- <Card
117
- key={source.workflowId}
118
- size="small"
119
- title={
120
- <Space>
121
- <RobotOutlined style={{ color: '#1677ff' }} />
122
- <span>
123
- {workflow?.name ??
124
- t('approval.unknownSource', {
125
- id: source.workflowId,
126
- })}
127
- </span>
128
- </Space>
129
- }
130
- extra={
131
- <Button
132
- type="text"
133
- danger
134
- disabled={disabled}
135
- aria-label={t('common.delete')}
136
- icon={<DeleteOutlined />}
137
- onClick={() =>
138
- onChange(
139
- value.filter(
140
- (item) => item.workflowId !== source.workflowId,
141
- ),
142
- )
143
- }
144
- />
145
- }
146
- >
147
- {(workflow?.inputParameters ?? []).map((parameter) => (
148
- <div key={parameter.key} style={{ marginBottom: 10 }}>
149
- <Typography.Text style={{ fontSize: 12 }}>
150
- {parameter.label ?? parameter.key}
151
- {parameter.required ? ' *' : ''}
152
- </Typography.Text>
153
- <div style={{ marginTop: 6 }}>
154
- <ParameterBindingEditor
155
- name={parameter.label ?? parameter.key}
156
- defaultPath={parameter.key}
157
- value={
158
- source.inputBindings[parameter.key] ?? {
159
- source: 'WORKFLOW',
160
- path: parameter.key,
161
- }
162
- }
163
- disabled={disabled}
164
- onChange={(binding) =>
165
- updateBinding(source.workflowId, parameter.key, binding)
166
- }
167
- />
168
- </div>
169
- </div>
170
- ))}
171
- {workflow?.inputParameters.length === 0 && (
172
- <Typography.Text type="secondary">
173
- {t('approval.noSourceParameters')}
174
- </Typography.Text>
175
- )}
176
- </Card>
177
- );
178
- })
179
- )}
180
- </Space>
181
- );
182
- }
@@ -1,34 +0,0 @@
1
- import { render, screen } from '@testing-library/react';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
- import i18n from '../../../../i18n';
4
- import { ReturnResultConfigEditor } from './ReturnResultConfigEditor';
5
-
6
- const schema = { type: 'object' as const };
7
-
8
- describe('ReturnResultConfigEditor', () => {
9
- beforeEach(async () => {
10
- await i18n.changeLanguage('en');
11
- });
12
-
13
- it('explains its fixed behavior without exposing result configuration', () => {
14
- const onChange = vi.fn();
15
- render(
16
- <ReturnResultConfigEditor
17
- value={{}}
18
- onChange={onChange}
19
- schema={schema}
20
- />,
21
- );
22
-
23
- expect(
24
- screen.getByText('Returns the previous node result'),
25
- ).toBeInTheDocument();
26
- expect(
27
- screen.getByText(
28
- 'This node ends the Workflow and returns the connected previous node result to the caller. It has no settings.',
29
- ),
30
- ).toBeInTheDocument();
31
- expect(screen.queryByRole('radio')).toBeNull();
32
- expect(onChange).not.toHaveBeenCalled();
33
- });
34
- });
@@ -1,16 +0,0 @@
1
- import { Alert } from 'antd';
2
- import { useTranslation } from 'react-i18next';
3
- import type { WidgetProps } from '../schema-form/widget-registry';
4
-
5
- export function ReturnResultConfigEditor(_props: WidgetProps<unknown>) {
6
- const { t } = useTranslation('workflow');
7
-
8
- return (
9
- <Alert
10
- type="info"
11
- showIcon
12
- message={t('returnResult.fixedTitle')}
13
- description={t('returnResult.fixedHint')}
14
- />
15
- );
16
- }
@@ -1,25 +0,0 @@
1
- import { addApproverSource } from './approver-source';
2
-
3
- describe('automatic approver source config', () => {
4
- it('binds same-name parameters to Workflow data by default', () => {
5
- expect(
6
- addApproverSource([], {
7
- id: '12',
8
- name: '直属主管',
9
- inputParameters: [
10
- { key: 'employeeId', label: '申请人', required: true },
11
- ],
12
- }),
13
- ).toEqual([
14
- {
15
- workflowId: '12',
16
- inputBindings: {
17
- employeeId: {
18
- source: 'WORKFLOW',
19
- path: 'employeeId',
20
- },
21
- },
22
- },
23
- ]);
24
- });
25
- });
@@ -1,42 +0,0 @@
1
- import {
2
- workflowBinding,
3
- type ParameterBinding,
4
- } from '../../types/parameter-binding';
5
-
6
- export type CallableInputParameter = {
7
- key: string;
8
- label?: string;
9
- required?: boolean;
10
- };
11
-
12
- export type CallableWorkflowOption = {
13
- id: string;
14
- name: string;
15
- description?: string | null;
16
- inputParameters: CallableInputParameter[];
17
- };
18
-
19
- export type ApproverSourceConfig = {
20
- workflowId: string;
21
- inputBindings: Record<string, ParameterBinding>;
22
- };
23
-
24
- export function addApproverSource(
25
- current: ApproverSourceConfig[],
26
- workflow: CallableWorkflowOption,
27
- ): ApproverSourceConfig[] {
28
- if (current.some((source) => source.workflowId === workflow.id))
29
- return current;
30
- return [
31
- ...current,
32
- {
33
- workflowId: workflow.id,
34
- inputBindings: Object.fromEntries(
35
- workflow.inputParameters.map((parameter) => [
36
- parameter.key,
37
- workflowBinding(parameter.key),
38
- ]),
39
- ),
40
- },
41
- ];
42
- }