@gadmin2n/schematics 0.0.139 → 0.0.141

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 (329) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +6 -34
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +199 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +9 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +191 -14
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +1 -1
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -2
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/gen-jwt.ts +8 -1
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +710 -121
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +125 -10
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.spec.ts +34 -1
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.ts +26 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +512 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +368 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.spec.ts +85 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.ts +157 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.spec.ts +59 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +27 -5
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +493 -21
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +426 -90
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/PageHeader.tsx +46 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +1 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.test.ts +10 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +18 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +32 -3
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +575 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +575 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +9 -15
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +141 -138
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +175 -119
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +209 -0
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +47 -150
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +21 -20
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +115 -118
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +61 -64
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +187 -200
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +210 -0
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +283 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
  248. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +180 -0
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +29 -35
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +4 -3
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +9 -17
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
  280. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
  281. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
  282. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +135 -0
  283. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +273 -0
  284. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
  285. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
  286. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
  287. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
  288. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
  289. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +81 -0
  290. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +281 -0
  291. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
  292. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
  293. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
  294. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
  295. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
  296. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
  297. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
  298. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
  299. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
  300. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
  301. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.test.tsx +152 -0
  302. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +438 -141
  303. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
  304. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
  305. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
  306. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
  307. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +77 -0
  308. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
  309. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
  310. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
  311. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
  312. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
  313. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
  314. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
  315. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
  316. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
  317. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
  318. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
  319. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
  320. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
  321. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +40 -5
  322. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
  323. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
  324. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
  325. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
  326. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
  327. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
  328. package/package.json +1 -1
  329. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
@@ -0,0 +1,706 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import Editor from '@monaco-editor/react';
3
+ import {
4
+ Alert,
5
+ Button,
6
+ Card,
7
+ Form,
8
+ Input,
9
+ InputNumber,
10
+ Modal,
11
+ Select,
12
+ Space,
13
+ Switch,
14
+ Typography,
15
+ message,
16
+ } from 'antd';
17
+ import {
18
+ AlignLeftOutlined,
19
+ ApiOutlined,
20
+ DeleteOutlined,
21
+ ExpandOutlined,
22
+ PlusOutlined,
23
+ } from '@ant-design/icons';
24
+ import { customRequest } from 'helpers/http';
25
+ import { useTranslation } from 'react-i18next';
26
+ import { ConnectionModal } from '../../connections/ConnectionModal';
27
+ import {
28
+ ParameterBindingEditor,
29
+ type SystemDataOption,
30
+ } from '../../components/ParameterBindingEditor';
31
+ import type { IntegrationConnection } from '../../connections/connection.types';
32
+ import type { ParameterBinding } from '../../types/parameter-binding';
33
+ import type { WidgetProps } from '../schema-form/widget-registry';
34
+
35
+ type HttpRequestConfig = {
36
+ connectionRef?: string;
37
+ method?: string;
38
+ path?: string;
39
+ queryBindings?: Record<string, ParameterBinding>;
40
+ headerBindings?: Record<string, ParameterBinding>;
41
+ bodyMode?: 'FIELDS' | 'JSON';
42
+ bodyBindings?: Record<string, ParameterBinding>;
43
+ body?: unknown;
44
+ timeoutSeconds?: number;
45
+ retryOnFail?: boolean;
46
+ maxRetries?: number;
47
+ retryInterval?: number;
48
+ };
49
+
50
+ const HTTP_REQUEST_DEFAULTS: HttpRequestConfig = {
51
+ method: 'GET',
52
+ path: '/',
53
+ timeoutSeconds: 30,
54
+ retryOnFail: false,
55
+ queryBindings: {},
56
+ headerBindings: {},
57
+ bodyMode: 'FIELDS',
58
+ bodyBindings: {},
59
+ };
60
+
61
+ export function HttpRequestConfigEditor({
62
+ value,
63
+ onChange,
64
+ disabled,
65
+ schema,
66
+ }: WidgetProps<HttpRequestConfig | undefined>) {
67
+ const { t } = useTranslation('workflow');
68
+ const config: HttpRequestConfig = {
69
+ ...HTTP_REQUEST_DEFAULTS,
70
+ ...value,
71
+ };
72
+ delete (config as Record<string, unknown>).inputParameters;
73
+ delete (config as Record<string, unknown>).query;
74
+ delete (config as Record<string, unknown>).headers;
75
+ if (value && value.bodyMode === undefined) delete config.body;
76
+ const requiredFields = new Set(schema.required ?? []);
77
+ const [connections, setConnections] = useState<IntegrationConnection[]>([]);
78
+ const [loadingConnections, setLoadingConnections] = useState(false);
79
+ const [creatingConnection, setCreatingConnection] = useState(false);
80
+ const systemOptions: SystemDataOption[] = [
81
+ { value: 'callback.token', label: t('systemData.callbackToken') },
82
+ {
83
+ value: 'approval.requestId',
84
+ label: t('systemData.approvalRequestId'),
85
+ },
86
+ { value: 'approval.channel', label: t('systemData.approvalChannel') },
87
+ {
88
+ value: 'approval.candidates',
89
+ label: t('systemData.approvalCandidates'),
90
+ },
91
+ {
92
+ value: 'approval.expiresAt',
93
+ label: t('systemData.approvalExpiresAt'),
94
+ },
95
+ { value: 'invocation.id', label: t('systemData.invocationId') },
96
+ {
97
+ value: 'caller.workflowInstanceId',
98
+ label: t('systemData.callerWorkflowInstanceId'),
99
+ },
100
+ ];
101
+
102
+ useEffect(() => {
103
+ const hasMissingDefault = Object.keys(HTTP_REQUEST_DEFAULTS).some(
104
+ (key) => value?.[key as keyof HttpRequestConfig] === undefined,
105
+ );
106
+ if (hasMissingDefault) onChange(config);
107
+ }, [onChange, value]);
108
+
109
+ useEffect(() => {
110
+ setLoadingConnections(true);
111
+ customRequest<IntegrationConnection[]>('integration-connections', 'GET')
112
+ .then(setConnections)
113
+ .catch((error) =>
114
+ message.error(error?.message ?? t('httpRequest.loadConnectionsFailed')),
115
+ )
116
+ .finally(() => setLoadingConnections(false));
117
+ }, []);
118
+
119
+ function update(patch: Partial<HttpRequestConfig>) {
120
+ onChange({ ...config, ...patch });
121
+ }
122
+
123
+ return (
124
+ <Space direction="vertical" size={16} style={{ width: '100%' }}>
125
+ <Card
126
+ size="small"
127
+ title={
128
+ <Space>
129
+ <ApiOutlined />
130
+ <span>{t('httpRequest.connectionOperation')}</span>
131
+ </Space>
132
+ }
133
+ >
134
+ <Typography.Paragraph type="secondary">
135
+ {t('httpRequest.connectionDescription')}
136
+ </Typography.Paragraph>
137
+ <div
138
+ style={{
139
+ display: 'grid',
140
+ gridTemplateColumns: 'minmax(260px, 1fr) auto',
141
+ gap: 10,
142
+ alignItems: 'end',
143
+ }}
144
+ >
145
+ <Form.Item
146
+ label={t('httpRequest.connection')}
147
+ required={requiredFields.has('connectionRef')}
148
+ style={{ marginBottom: 0 }}
149
+ >
150
+ <Select
151
+ value={config.connectionRef}
152
+ loading={loadingConnections}
153
+ disabled={disabled}
154
+ placeholder={t('httpRequest.chooseConnection')}
155
+ showSearch
156
+ optionFilterProp="label"
157
+ onChange={(connectionRef) => update({ connectionRef })}
158
+ options={connections.map((connection) => ({
159
+ value: connection.code,
160
+ label: `${connection.name} (${connection.code})`,
161
+ disabled: !connection.isEnabled,
162
+ }))}
163
+ />
164
+ </Form.Item>
165
+ <Button
166
+ icon={<PlusOutlined />}
167
+ disabled={disabled}
168
+ onClick={() => setCreatingConnection(true)}
169
+ >
170
+ {t('httpRequest.newConnection')}
171
+ </Button>
172
+ </div>
173
+ <div
174
+ style={{
175
+ display: 'grid',
176
+ gridTemplateColumns: '130px 1fr',
177
+ gap: 10,
178
+ marginTop: 14,
179
+ }}
180
+ >
181
+ <Form.Item
182
+ label={t('httpRequest.method')}
183
+ required={requiredFields.has('method')}
184
+ style={{ marginBottom: 0 }}
185
+ >
186
+ <Select
187
+ value={config.method}
188
+ disabled={disabled}
189
+ onChange={(method) => update({ method })}
190
+ options={['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'].map(
191
+ (method) => ({ value: method }),
192
+ )}
193
+ />
194
+ </Form.Item>
195
+ <Form.Item
196
+ label={t('httpRequest.path')}
197
+ required={requiredFields.has('path')}
198
+ style={{ marginBottom: 0 }}
199
+ >
200
+ <Input
201
+ value={config.path}
202
+ disabled={disabled}
203
+ placeholder="/departments/{{input.departmentId}}/approvers"
204
+ onChange={(event) => update({ path: event.target.value })}
205
+ />
206
+ </Form.Item>
207
+ </div>
208
+ <Alert
209
+ type="info"
210
+ showIcon
211
+ message={
212
+ <Space size={4} wrap>
213
+ <span>{t('httpRequest.pathTemplateHint')}</span>
214
+ <Typography.Text code>{'{{input.wecomId}}'}</Typography.Text>
215
+ <span>{t('httpRequest.templateOr')}</span>
216
+ <Typography.Text code>{'{{workflow.wecomId}}'}</Typography.Text>
217
+ </Space>
218
+ }
219
+ style={{ marginTop: 14 }}
220
+ />
221
+ </Card>
222
+
223
+ <Card size="small" title={t('httpRequest.requestData')}>
224
+ <Typography.Paragraph type="secondary">
225
+ {t('httpRequest.requestDataDescription')}
226
+ </Typography.Paragraph>
227
+ <Space direction="vertical" size={18} style={{ width: '100%' }}>
228
+ <BindingMapEditor
229
+ label={t('httpRequest.queryParameters')}
230
+ addLabel={t('httpRequest.addQueryParameter')}
231
+ keyPlaceholder="departmentId"
232
+ value={config.queryBindings ?? {}}
233
+ systemOptions={systemOptions}
234
+ disabled={disabled}
235
+ onChange={(queryBindings) => update({ queryBindings })}
236
+ />
237
+ <BindingMapEditor
238
+ label={t('httpRequest.headers')}
239
+ addLabel={t('httpRequest.addHeader')}
240
+ keyPlaceholder="X-Request-Source"
241
+ value={config.headerBindings ?? {}}
242
+ systemOptions={systemOptions}
243
+ disabled={disabled}
244
+ onChange={(headerBindings) => update({ headerBindings })}
245
+ />
246
+ <div>
247
+ <div
248
+ style={{
249
+ display: 'flex',
250
+ alignItems: 'center',
251
+ justifyContent: 'space-between',
252
+ marginBottom: 8,
253
+ }}
254
+ >
255
+ <Typography.Text strong>
256
+ {t('httpRequest.requestBody')}
257
+ </Typography.Text>
258
+ <Button
259
+ type="link"
260
+ size="small"
261
+ disabled={disabled}
262
+ onClick={() =>
263
+ update({
264
+ bodyMode: config.bodyMode === 'JSON' ? 'FIELDS' : 'JSON',
265
+ })
266
+ }
267
+ >
268
+ {config.bodyMode === 'JSON'
269
+ ? t('httpRequest.useFields')
270
+ : t('httpRequest.advancedJson')}
271
+ </Button>
272
+ </div>
273
+ {config.bodyMode === 'JSON' ? (
274
+ <>
275
+ <Typography.Paragraph type="secondary">
276
+ {t('httpRequest.advancedJsonHint')}{' '}
277
+ <Typography.Text code>{'{{input.field}}'}</Typography.Text>{' '}
278
+ {t('httpRequest.templateOr')}{' '}
279
+ <Typography.Text code>{'{{workflow.field}}'}</Typography.Text>{' '}
280
+ {t('httpRequest.templateOr')}{' '}
281
+ <Typography.Text code>
282
+ {'{{system.callback.token}}'}
283
+ </Typography.Text>
284
+ </Typography.Paragraph>
285
+ <JsonEditor
286
+ label={t('httpRequest.bodyJson')}
287
+ value={config.body ?? {}}
288
+ disabled={disabled}
289
+ onChange={(body) => update({ body })}
290
+ />
291
+ </>
292
+ ) : (
293
+ <BindingMapEditor
294
+ addLabel={t('httpRequest.addBodyField')}
295
+ keyPlaceholder="ticketId"
296
+ value={config.bodyBindings ?? {}}
297
+ systemOptions={systemOptions}
298
+ disabled={disabled}
299
+ onChange={(bodyBindings) => update({ bodyBindings })}
300
+ />
301
+ )}
302
+ </div>
303
+ </Space>
304
+ </Card>
305
+
306
+ <Card size="small" title={t('httpRequest.responseOut')}>
307
+ <Alert
308
+ type="info"
309
+ showIcon
310
+ message={t('httpRequest.responseReturned')}
311
+ description={t('httpRequest.responseDescription')}
312
+ />
313
+ </Card>
314
+
315
+ <Card size="small" title={t('httpRequest.timeoutRetry')}>
316
+ <div
317
+ style={{
318
+ display: 'grid',
319
+ gridTemplateColumns: '1fr 1fr 1fr',
320
+ gap: 16,
321
+ }}
322
+ >
323
+ <div>
324
+ <Typography.Text>{t('httpRequest.timeoutSeconds')}</Typography.Text>
325
+ <InputNumber
326
+ min={1}
327
+ max={300}
328
+ value={config.timeoutSeconds}
329
+ disabled={disabled}
330
+ onChange={(timeoutSeconds) =>
331
+ update({ timeoutSeconds: timeoutSeconds ?? 30 })
332
+ }
333
+ style={{ width: '100%', marginTop: 6 }}
334
+ />
335
+ </div>
336
+ <div>
337
+ <Typography.Text>{t('httpRequest.retryOnFailure')}</Typography.Text>
338
+ <div style={{ marginTop: 9 }}>
339
+ <Switch
340
+ checked={config.retryOnFail}
341
+ disabled={disabled}
342
+ onChange={(retryOnFail) => update({ retryOnFail })}
343
+ />
344
+ </div>
345
+ </div>
346
+ {config.retryOnFail && (
347
+ <div>
348
+ <Typography.Text>
349
+ {t('httpRequest.extraAttempts')}
350
+ </Typography.Text>
351
+ <InputNumber
352
+ min={0}
353
+ max={10}
354
+ value={config.maxRetries ?? 2}
355
+ disabled={disabled}
356
+ onChange={(maxRetries) =>
357
+ update({ maxRetries: maxRetries ?? 0 })
358
+ }
359
+ style={{ width: '100%', marginTop: 6 }}
360
+ />
361
+ </div>
362
+ )}
363
+ </div>
364
+ </Card>
365
+
366
+ <ConnectionModal
367
+ open={creatingConnection}
368
+ onCancel={() => setCreatingConnection(false)}
369
+ onSaved={(connection) => {
370
+ setConnections((current) => [connection, ...current]);
371
+ setCreatingConnection(false);
372
+ update({ connectionRef: connection.code });
373
+ }}
374
+ />
375
+ </Space>
376
+ );
377
+ }
378
+
379
+ function BindingMapEditor({
380
+ label,
381
+ addLabel,
382
+ keyPlaceholder,
383
+ value,
384
+ systemOptions,
385
+ disabled,
386
+ onChange,
387
+ }: {
388
+ label?: string;
389
+ addLabel: string;
390
+ keyPlaceholder: string;
391
+ value: Record<string, ParameterBinding>;
392
+ systemOptions: SystemDataOption[];
393
+ disabled?: boolean;
394
+ onChange(value: Record<string, ParameterBinding>): void;
395
+ }) {
396
+ const { t } = useTranslation('workflow');
397
+ const entries = Object.entries(value);
398
+
399
+ function replaceEntry(
400
+ index: number,
401
+ nextKey: string,
402
+ nextValue: ParameterBinding,
403
+ ) {
404
+ const nextEntries = [...entries];
405
+ nextEntries[index] = [nextKey, nextValue];
406
+ onChange(Object.fromEntries(nextEntries));
407
+ }
408
+
409
+ return (
410
+ <div>
411
+ {label && (
412
+ <Typography.Text strong style={{ display: 'block', marginBottom: 8 }}>
413
+ {label}
414
+ </Typography.Text>
415
+ )}
416
+ {entries.length > 0 && (
417
+ <div
418
+ style={{
419
+ display: 'grid',
420
+ gridTemplateColumns:
421
+ 'minmax(140px, 0.65fr) minmax(280px, 1.6fr) 32px',
422
+ gap: 8,
423
+ marginBottom: 6,
424
+ }}
425
+ >
426
+ <Typography.Text type="secondary">
427
+ {t('httpRequest.fieldName')}
428
+ </Typography.Text>
429
+ <Typography.Text type="secondary">
430
+ {t('httpRequest.value')}
431
+ </Typography.Text>
432
+ <span />
433
+ </div>
434
+ )}
435
+ <Space direction="vertical" size={8} style={{ width: '100%' }}>
436
+ {entries.map(([entryKey, entryValue], index) => (
437
+ <div
438
+ key={index}
439
+ style={{
440
+ display: 'grid',
441
+ gridTemplateColumns:
442
+ 'minmax(140px, 0.65fr) minmax(280px, 1.6fr) 32px',
443
+ gap: 8,
444
+ alignItems: 'start',
445
+ }}
446
+ >
447
+ <Input
448
+ value={entryKey}
449
+ disabled={disabled}
450
+ placeholder={keyPlaceholder}
451
+ onChange={(event) => {
452
+ const nextKey = event.target.value;
453
+ const nextValue =
454
+ entryValue.source !== 'FIXED' && entryValue.path === entryKey
455
+ ? { ...entryValue, path: nextKey }
456
+ : entryValue;
457
+ replaceEntry(index, nextKey, nextValue);
458
+ }}
459
+ />
460
+ <ParameterBindingEditor
461
+ name={entryKey || t('httpRequest.addField')}
462
+ defaultPath={entryKey}
463
+ value={entryValue}
464
+ systemOptions={systemOptions}
465
+ disabled={disabled}
466
+ onChange={(binding) => replaceEntry(index, entryKey, binding)}
467
+ />
468
+ <Button
469
+ type="text"
470
+ danger
471
+ icon={<DeleteOutlined />}
472
+ disabled={disabled}
473
+ aria-label={t('httpRequest.deleteField', {
474
+ name: entryKey || t('httpRequest.addField'),
475
+ })}
476
+ onClick={() =>
477
+ onChange(
478
+ Object.fromEntries(
479
+ entries.filter((_, current) => current !== index),
480
+ ),
481
+ )
482
+ }
483
+ />
484
+ </div>
485
+ ))}
486
+ <Button
487
+ type="dashed"
488
+ block
489
+ icon={<PlusOutlined />}
490
+ disabled={disabled}
491
+ onClick={() => {
492
+ const key = nextEntryKey(value, keyPlaceholder);
493
+ onChange({
494
+ ...value,
495
+ [key]: { source: 'INPUT', path: key },
496
+ });
497
+ }}
498
+ >
499
+ {addLabel}
500
+ </Button>
501
+ </Space>
502
+ </div>
503
+ );
504
+ }
505
+
506
+ function nextEntryKey(
507
+ value: Record<string, ParameterBinding>,
508
+ placeholder: string,
509
+ ) {
510
+ const base = placeholder || 'field';
511
+ if (!(base in value)) return base;
512
+ let index = 2;
513
+ while (`${base}_${index}` in value) index += 1;
514
+ return `${base}_${index}`;
515
+ }
516
+
517
+ function JsonEditor({
518
+ label,
519
+ value,
520
+ disabled,
521
+ onChange,
522
+ }: {
523
+ label: string;
524
+ value: unknown;
525
+ disabled?: boolean;
526
+ onChange(value: unknown): void;
527
+ }) {
528
+ const { t } = useTranslation('workflow');
529
+ const serializedValue = JSON.stringify(value ?? {}, null, 2);
530
+ const [text, setText] = useState(() => serializedValue);
531
+ const [error, setError] = useState<JsonError>();
532
+ const [expanded, setExpanded] = useState(false);
533
+ const lastEmittedValue = useRef<string>();
534
+
535
+ useEffect(() => {
536
+ if (serializedValue === lastEmittedValue.current) {
537
+ lastEmittedValue.current = undefined;
538
+ return;
539
+ }
540
+ setText(serializedValue);
541
+ setError(undefined);
542
+ }, [serializedValue]);
543
+
544
+ function changeText(next: string) {
545
+ setText(next);
546
+ const result = parseJson(next);
547
+ if (result.ok) {
548
+ setError(undefined);
549
+ lastEmittedValue.current = JSON.stringify(result.value, null, 2);
550
+ onChange(result.value);
551
+ } else {
552
+ setError(result.error);
553
+ }
554
+ }
555
+
556
+ function format() {
557
+ const result = parseJson(text);
558
+ if (!result.ok) {
559
+ setError(result.error);
560
+ return;
561
+ }
562
+ const formatted = JSON.stringify(result.value, null, 2);
563
+ setText(formatted);
564
+ setError(undefined);
565
+ lastEmittedValue.current = formatted;
566
+ onChange(result.value);
567
+ }
568
+
569
+ const editor = (height: string) => (
570
+ <Editor
571
+ height={height}
572
+ language="json"
573
+ value={text}
574
+ onChange={(next) => changeText(next ?? '')}
575
+ options={{
576
+ readOnly: disabled,
577
+ minimap: { enabled: false },
578
+ fontSize: 13,
579
+ lineNumbers: 'on',
580
+ lineNumbersMinChars: 3,
581
+ scrollBeyondLastLine: false,
582
+ automaticLayout: true,
583
+ tabSize: 2,
584
+ wordWrap: 'on',
585
+ folding: true,
586
+ formatOnPaste: true,
587
+ bracketPairColorization: { enabled: true },
588
+ guides: { bracketPairs: true },
589
+ padding: { top: 10, bottom: 10 },
590
+ }}
591
+ />
592
+ );
593
+
594
+ return (
595
+ <div>
596
+ <div
597
+ style={{
598
+ display: 'flex',
599
+ alignItems: 'center',
600
+ justifyContent: 'space-between',
601
+ gap: 8,
602
+ marginBottom: 6,
603
+ }}
604
+ >
605
+ <Typography.Text>{label}</Typography.Text>
606
+ <Space size={4}>
607
+ <Button
608
+ size="small"
609
+ icon={<AlignLeftOutlined />}
610
+ disabled={disabled || Boolean(error)}
611
+ onClick={format}
612
+ >
613
+ {t('httpRequest.formatJson')}
614
+ </Button>
615
+ <Button
616
+ size="small"
617
+ icon={<ExpandOutlined />}
618
+ onClick={() => setExpanded(true)}
619
+ >
620
+ {t('httpRequest.expandEditor')}
621
+ </Button>
622
+ </Space>
623
+ </div>
624
+ <div
625
+ style={{
626
+ height: 300,
627
+ overflow: 'hidden',
628
+ border: `1px solid ${error ? '#ff4d4f' : '#d9d9d9'}`,
629
+ borderRadius: 6,
630
+ }}
631
+ >
632
+ {editor('300px')}
633
+ </div>
634
+ {error && (
635
+ <Typography.Text
636
+ type="danger"
637
+ style={{ display: 'block', marginTop: 6 }}
638
+ >
639
+ {t('httpRequest.invalidJsonLocation', error)}
640
+ </Typography.Text>
641
+ )}
642
+ <Modal
643
+ open={expanded}
644
+ title={label}
645
+ width="calc(100vw - 96px)"
646
+ footer={null}
647
+ destroyOnHidden
648
+ onCancel={() => setExpanded(false)}
649
+ styles={{ body: { padding: 0 } }}
650
+ >
651
+ <div style={{ marginBottom: 8, textAlign: 'right' }}>
652
+ <Button
653
+ size="small"
654
+ icon={<AlignLeftOutlined />}
655
+ disabled={disabled || Boolean(error)}
656
+ onClick={format}
657
+ >
658
+ {t('httpRequest.formatJson')}
659
+ </Button>
660
+ </div>
661
+ <div
662
+ style={{
663
+ height: 'calc(100vh - 190px)',
664
+ overflow: 'hidden',
665
+ border: `1px solid ${error ? '#ff4d4f' : '#d9d9d9'}`,
666
+ borderRadius: 6,
667
+ }}
668
+ >
669
+ {editor('calc(100vh - 190px)')}
670
+ </div>
671
+ {error && (
672
+ <Typography.Text
673
+ type="danger"
674
+ style={{ display: 'block', marginTop: 6 }}
675
+ >
676
+ {t('httpRequest.invalidJsonLocation', error)}
677
+ </Typography.Text>
678
+ )}
679
+ </Modal>
680
+ </div>
681
+ );
682
+ }
683
+
684
+ type JsonError = { line: number; column: number };
685
+
686
+ function parseJson(
687
+ text: string,
688
+ ): { ok: true; value: unknown } | { ok: false; error: JsonError } {
689
+ try {
690
+ return { ok: true, value: JSON.parse(text || '{}') };
691
+ } catch (error) {
692
+ const message = error instanceof Error ? error.message : '';
693
+ const position = Number(
694
+ message.match(/position\s+(\d+)/i)?.[1] ?? text.length,
695
+ );
696
+ const beforeError = text.slice(0, Math.max(0, position));
697
+ const lines = beforeError.split('\n');
698
+ return {
699
+ ok: false,
700
+ error: {
701
+ line: lines.length,
702
+ column: (lines.at(-1)?.length ?? 0) + 1,
703
+ },
704
+ };
705
+ }
706
+ }