@gadmin2n/schematics 0.0.142 → 0.0.144

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 (140) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +5 -23
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +4 -2
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +36 -1
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/agenda.seed.ts +14 -14
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/bootstrap.ts +18 -13
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/canvas.seed.ts +14 -14
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +1 -1
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +67 -404
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +16 -40
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflows.ts +12 -124
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.module.ts +3 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +0 -21
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +3 -10
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +1 -2
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-callback.controller.spec.ts +48 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-callback.controller.ts +96 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +1 -59
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +8 -43
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +0 -23
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +2 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +2 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +7 -3
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +2 -2
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +18 -123
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +4 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +3 -10
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +1 -2
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +0 -10
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +12 -4
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +1 -1
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +42 -209
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +108 -225
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +0 -2
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +27 -22
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +9 -1
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.spec.ts +30 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +8 -15
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +0 -2
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/runtime-connectivity-probe.service.spec.ts +14 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/runtime-connectivity-probe.service.ts +37 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +41 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +53 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.module.ts +7 -2
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/workflow-runtime-health.controller.ts +21 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +2 -2
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +16 -88
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +23 -59
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +125 -39
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +95 -28
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +0 -20
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.spec.ts +23 -26
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.ts +6 -52
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +2 -2
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +24 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +26 -21
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +0 -1
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +0 -1
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflow-runtime-config.service.spec.ts +32 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflow-runtime-config.service.ts +41 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflowRuntimeConfig.module.ts +10 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.build.json +10 -1
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/README.md +16 -12
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +1 -1
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/PageHeader.tsx +1 -1
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +19 -19
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +1 -1
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +15 -11
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +0 -6
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +3 -3
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +1 -1
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +1 -1
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +1 -1
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +1 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +85 -95
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +85 -95
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +2 -2
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +21 -2
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +21 -2
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +14 -66
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +4 -4
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +3 -3
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +3 -3
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.test.tsx +29 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +4 -2
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +4 -6
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +3 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +3 -1
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +4 -6
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +23 -92
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeOutputSummary.tsx +200 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +61 -136
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +96 -195
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeTypeBadge.tsx +36 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/CreateNodeInstanceModal.tsx +5 -10
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +47 -22
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +7 -5
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +8 -6
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/node-config.css +35 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +1 -6
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +1 -4
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +1 -1
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +1 -1
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +82 -259
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +1 -2
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +7 -6
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +77 -71
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +10 -57
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +8 -273
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.test.tsx +54 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +110 -20
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +4 -34
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +3 -10
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +2 -37
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +26 -2
  115. package/package.json +1 -1
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +0 -89
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +0 -68
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +0 -177
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +0 -283
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +0 -10
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +0 -84
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +0 -141
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +0 -16
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +0 -210
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +0 -39
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +0 -104
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +0 -98
  128. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/AssignRolesModal.tsx +0 -0
  129. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/CreatePageModal.tsx +0 -0
  130. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/EditPageModal.tsx +0 -0
  131. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/PageDetailDrawer.tsx +0 -0
  132. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/PageFormModal.tsx +0 -0
  133. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/CreateModal.tsx +0 -0
  134. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/EditModal.tsx +0 -0
  135. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/ResourceDetailDrawer.tsx +0 -0
  136. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/modal.tsx +0 -0
  137. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/CreateModal.tsx +0 -0
  138. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/EditModal.tsx +0 -0
  139. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/RoleDetailDrawer.tsx +0 -0
  140. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/modal.tsx +0 -0
@@ -17,6 +17,8 @@ import {
17
17
  type AiGenerateResult,
18
18
  } from './CreateNodeInstanceModal';
19
19
  import type { WorkflowNodeType } from '../../types';
20
+ import { useTranslation } from 'react-i18next';
21
+ import '../node-config.css';
20
22
 
21
23
  const { Title } = Typography;
22
24
  import { useIsAgentAllowed } from 'config/agentAllowed';
@@ -44,6 +46,7 @@ export function NodeInstanceForm({
44
46
  }: NodeInstanceFormProps) {
45
47
  const [aiModalOpen, setAiModalOpen] = useState(false);
46
48
  const [schemaError, setSchemaError] = useState<Error | null>(null);
49
+ const { t } = useTranslation('workflow');
47
50
  const isDev = useIsAgentAllowed();
48
51
  const allowAiGeneration = isDev && !disableNodeType;
49
52
 
@@ -70,10 +73,10 @@ export function NodeInstanceForm({
70
73
 
71
74
  if (hasExistingValues) {
72
75
  Modal.confirm({
73
- title: '覆盖确认',
74
- content: 'AI 生成的内容将覆盖当前填写的内容,是否继续?',
75
- okText: '确认覆盖',
76
- cancelText: '取消',
76
+ title: t('nodeInstance.overwriteTitle'),
77
+ content: t('nodeInstance.overwriteContent'),
78
+ okText: t('nodeInstance.overwriteConfirm'),
79
+ cancelText: t('common.cancel'),
77
80
  onOk: () => applyAiData(data),
78
81
  });
79
82
  } else {
@@ -94,12 +97,13 @@ export function NodeInstanceForm({
94
97
 
95
98
  return (
96
99
  <div
100
+ className="workflow-node-config"
97
101
  style={{
98
102
  background: 'var(--ant-color-bg-layout)',
99
103
  minHeight: 'calc(100vh - 64px)',
100
104
  }}
101
105
  >
102
- <Card style={{ marginBottom: 16 }}>
106
+ <Card style={{ marginBottom: 12 }}>
103
107
  <div
104
108
  style={{
105
109
  display: 'flex',
@@ -123,21 +127,26 @@ export function NodeInstanceForm({
123
127
  icon={<RobotOutlined />}
124
128
  onClick={() => setAiModalOpen(true)}
125
129
  >
126
- AI 自动生成
130
+ {t('editor.aiGenerate')}
127
131
  </Button>
128
132
  )}
129
133
  </div>
130
134
  </Card>
131
135
 
132
- <Card style={{ padding: '24px 32px' }}>
133
- <Form form={form} layout="vertical" style={{ maxWidth: 760 }}>
136
+ <Card styles={{ body: { padding: '20px 24px' } }}>
137
+ <Form form={form} layout="vertical" style={{ maxWidth: 720 }}>
134
138
  <Form.Item
135
139
  name="nodeTypeId"
136
- label="Node Type"
137
- rules={[{ required: true, message: 'Please select a node type' }]}
140
+ label={t('nodeInstance.nodeType')}
141
+ rules={[
142
+ {
143
+ required: true,
144
+ message: t('nodeInstance.nodeTypeRequired'),
145
+ },
146
+ ]}
138
147
  >
139
148
  <Select
140
- placeholder="Select node type"
149
+ placeholder={t('nodeInstance.selectNodeType')}
141
150
  disabled={disableNodeType}
142
151
  showSearch
143
152
  optionFilterProp="label"
@@ -153,29 +162,38 @@ export function NodeInstanceForm({
153
162
  type="secondary"
154
163
  style={{ marginTop: -16, marginBottom: 24 }}
155
164
  >
156
- Node type cannot be changed after the instance is created.
165
+ {t('nodeInstance.typeImmutable')}
157
166
  </Typography.Paragraph>
158
167
  )}
159
168
 
160
169
  <Form.Item
161
170
  name="name"
162
- label="Instance Name"
163
- rules={[{ required: true, message: 'Please enter a name' }]}
171
+ label={t('nodeInstance.instanceNameLabel')}
172
+ rules={[
173
+ { required: true, message: t('nodeInstance.nameRequired') },
174
+ ]}
164
175
  >
165
- <Input placeholder="e.g. Send Slack to #general" />
176
+ <Input placeholder={t('nodeInstance.instanceNameExample')} />
166
177
  </Form.Item>
167
178
 
168
- <Form.Item name="description" label="Description">
169
- <Input.TextArea rows={2} placeholder="Optional description" />
179
+ <Form.Item name="description" label={t('common.description')}>
180
+ <Input.TextArea
181
+ autoSize={{ minRows: 2, maxRows: 4 }}
182
+ placeholder={t('common.optionalDescription')}
183
+ />
170
184
  </Form.Item>
171
185
 
172
- <Form.Item name="isEnabled" label="Enabled" valuePropName="checked">
186
+ <Form.Item
187
+ name="isEnabled"
188
+ label={t('common.enabled')}
189
+ valuePropName="checked"
190
+ >
173
191
  <Switch />
174
192
  </Form.Item>
175
193
 
176
194
  {selectedNodeType?.configSchema && (
177
- <Title level={5} style={{ color: 'var(--ant-color-text-secondary)' }}>
178
- Configuration
195
+ <Title level={5} style={{ margin: '4px 0 12px', fontSize: 14 }}>
196
+ {t('editor.parameters')}
179
197
  </Title>
180
198
  )}
181
199
  <SchemaForm
@@ -185,8 +203,15 @@ export function NodeInstanceForm({
185
203
  onSchemaError={handleSchemaError}
186
204
  />
187
205
 
188
- <div style={{ marginTop: 24, display: 'flex', gap: 12 }}>
189
- <Button onClick={onBack}>Cancel</Button>
206
+ <div
207
+ style={{
208
+ marginTop: 20,
209
+ display: 'flex',
210
+ justifyContent: 'flex-end',
211
+ gap: 8,
212
+ }}
213
+ >
214
+ <Button onClick={onBack}>{t('common.cancel')}</Button>
190
215
  <Button
191
216
  type="primary"
192
217
  loading={submitting}
@@ -5,9 +5,11 @@ import { customRequest } from 'helpers/http';
5
5
  import { NodeInstanceForm } from './components/NodeInstanceForm';
6
6
  import { schemaConfigDefaults } from './schema-form/schema-defaults';
7
7
  import type { WorkflowNodeType } from '../types';
8
+ import { useTranslation } from 'react-i18next';
8
9
 
9
10
  export default function NodeInstanceCreatePage() {
10
11
  const navigate = useNavigate();
12
+ const { t } = useTranslation('workflow');
11
13
  const [form] = Form.useForm();
12
14
  const [nodeTypes, setNodeTypes] = useState<WorkflowNodeType[]>([]);
13
15
  const [loading, setLoading] = useState(true);
@@ -45,7 +47,7 @@ export default function NodeInstanceCreatePage() {
45
47
  typeof config !== 'object' ||
46
48
  Array.isArray(config)
47
49
  ) {
48
- message.error('Configuration must be a JSON object');
50
+ message.error(t('nodeInstance.configObjectRequired'));
49
51
  return;
50
52
  }
51
53
  setSubmitting(true);
@@ -56,11 +58,11 @@ export default function NodeInstanceCreatePage() {
56
58
  config,
57
59
  isEnabled: values.isEnabled ?? true,
58
60
  });
59
- message.success('Created successfully');
61
+ message.success(t('nodeInstance.created'));
60
62
  navigate('/admin/workflow/node-instances');
61
63
  } catch (e: any) {
62
64
  if (e?.errorFields) return;
63
- message.error(e?.message ?? 'Create failed');
65
+ message.error(e?.message ?? t('nodeInstance.createFailed'));
64
66
  } finally {
65
67
  setSubmitting(false);
66
68
  }
@@ -81,8 +83,8 @@ export default function NodeInstanceCreatePage() {
81
83
  <NodeInstanceForm
82
84
  form={form}
83
85
  nodeTypes={nodeTypes}
84
- title="Create Node Instance"
85
- submitText="Create"
86
+ title={t('nodeInstance.create')}
87
+ submitText={t('common.create')}
86
88
  submitting={submitting}
87
89
  onSubmit={handleSubmit}
88
90
  onBack={() => navigate('/admin/workflow/node-instances')}
@@ -4,6 +4,7 @@ import { useNavigate, useParams } from 'react-router-dom';
4
4
  import { customRequest } from 'helpers/http';
5
5
  import { NodeInstanceForm } from './components/NodeInstanceForm';
6
6
  import type { WorkflowNodeInstance, WorkflowNodeType } from '../types';
7
+ import { useTranslation } from 'react-i18next';
7
8
 
8
9
  type NodeInstance = WorkflowNodeInstance;
9
10
 
@@ -14,6 +15,7 @@ function normalizeDescription(value: string | null | undefined): string | null {
14
15
  export default function NodeInstanceEditPage() {
15
16
  const { id } = useParams<{ id: string }>();
16
17
  const navigate = useNavigate();
18
+ const { t } = useTranslation('workflow');
17
19
  const [form] = Form.useForm();
18
20
  const [nodeTypes, setNodeTypes] = useState<WorkflowNodeType[]>([]);
19
21
  const [loading, setLoading] = useState(true);
@@ -50,11 +52,11 @@ export default function NodeInstanceEditPage() {
50
52
  config: recordRes.config,
51
53
  });
52
54
  } catch (e: any) {
53
- message.error(e?.message ?? 'Failed to load');
55
+ message.error(e?.message ?? t('nodeInstance.loadFailed'));
54
56
  } finally {
55
57
  setLoading(false);
56
58
  }
57
- }, [id, form]);
59
+ }, [id, form, t]);
58
60
 
59
61
  useEffect(() => {
60
62
  fetchData();
@@ -74,11 +76,11 @@ export default function NodeInstanceEditPage() {
74
76
 
75
77
  setSubmitting(true);
76
78
  await customRequest(`workflowNodeInstance/${id}`, 'PATCH', update);
77
- message.success('Changes saved');
79
+ message.success(t('nodeInstance.updated'));
78
80
  navigate('/admin/workflow/node-instances');
79
81
  } catch (e: any) {
80
82
  if (e?.errorFields) return;
81
- message.error(e?.message ?? 'Update failed');
83
+ message.error(e?.message ?? t('nodeInstance.updateFailed'));
82
84
  } finally {
83
85
  setSubmitting(false);
84
86
  }
@@ -98,8 +100,8 @@ export default function NodeInstanceEditPage() {
98
100
  <NodeInstanceForm
99
101
  form={form}
100
102
  nodeTypes={nodeTypes}
101
- title={record?.name || 'Edit Node Instance'}
102
- submitText="Save"
103
+ title={record?.name || t('nodeInstance.edit')}
104
+ submitText={t('common.save')}
103
105
  submitting={submitting}
104
106
  disableNodeType
105
107
  onSubmit={handleSubmit}
@@ -0,0 +1,35 @@
1
+ .workflow-node-config .ant-form-item {
2
+ margin-bottom: 12px;
3
+ }
4
+
5
+ .workflow-node-config .ant-card-small > .ant-card-head {
6
+ min-height: 36px;
7
+ padding-inline: 12px;
8
+ }
9
+
10
+ .workflow-node-config .ant-card-small > .ant-card-body {
11
+ padding: 12px;
12
+ }
13
+
14
+ .workflow-node-config .ant-alert-with-description {
15
+ padding: 8px 12px;
16
+ }
17
+
18
+ .workflow-node-config .ant-alert-with-description .ant-alert-message {
19
+ margin-bottom: 2px;
20
+ }
21
+
22
+ .workflow-node-config .ant-divider-horizontal {
23
+ margin: 12px 0;
24
+ }
25
+
26
+ .workflow-node-config .ant-typography.ant-typography-secondary {
27
+ line-height: 1.5;
28
+ }
29
+
30
+ .workflow-node-config__section-title {
31
+ display: block;
32
+ margin-bottom: 8px;
33
+ font-size: 13px;
34
+ font-weight: 600;
35
+ }
@@ -1,5 +1,4 @@
1
1
  import { Input, InputNumber, Select, Switch } from 'antd';
2
- import { ApprovalRequestTriggerConfigEditor } from '../widgets/ApprovalRequestTriggerConfigEditor';
3
2
  import { ApprovalRuleEditor } from '../widgets/ApprovalRuleEditor';
4
3
  import { CallableInputParametersEditor } from '../widgets/CallableInputParametersEditor';
5
4
  import { CodeConfigEditor } from '../widgets/CodeConfigEditor';
@@ -9,8 +8,6 @@ import { HttpRequestConfigEditor } from '../widgets/HttpRequestConfigEditor';
9
8
  import { HumanApprovalConfigEditor } from '../widgets/HumanApprovalConfigEditor';
10
9
  import { ReturnResultConfigEditor } from '../widgets/ReturnResultConfigEditor';
11
10
  import { SubjectPicker } from '../widgets/SubjectPicker';
12
- import { SubmitApprovalResultConfigEditor } from '../widgets/SubmitApprovalResultConfigEditor';
13
- import { SubmitExternalResultConfigEditor } from '../widgets/SubmitExternalResultConfigEditor';
14
11
  import {
15
12
  widgetRegistry,
16
13
  type WidgetComponent,
@@ -95,6 +92,7 @@ function SelectWidget({
95
92
  onChange={onChange}
96
93
  disabled={disabled}
97
94
  allowClear
95
+ style={{ width: '100%' }}
98
96
  options={(schema.enum ?? []).map((option) => ({
99
97
  label: String(option),
100
98
  value: option,
@@ -116,10 +114,7 @@ const DEFAULT_WIDGETS = {
116
114
  'code-config': CodeConfigEditor,
117
115
  'callable-input-parameters': CallableInputParametersEditor,
118
116
  'return-result-config': ReturnResultConfigEditor,
119
- 'approval-request-trigger-config': ApprovalRequestTriggerConfigEditor,
120
117
  'external-request-config': ExternalRequestConfigEditor,
121
- 'submit-approval-result-config': SubmitApprovalResultConfigEditor,
122
- 'submit-external-result-config': SubmitExternalResultConfigEditor,
123
118
  'external-wait-config': ExternalWaitConfigEditor,
124
119
  } as const;
125
120
 
@@ -29,10 +29,7 @@ export function ApproverSourceEditor({
29
29
  const [loadFailed, setLoadFailed] = useState(false);
30
30
 
31
31
  useEffect(() => {
32
- customRequest<CallableWorkflowOption[]>(
33
- 'workflow/callable?resultType=APPROVAL_SUBJECTS',
34
- 'GET',
35
- )
32
+ customRequest<CallableWorkflowOption[]>('workflow/callable', 'GET')
36
33
  .then((items) => {
37
34
  setWorkflows(Array.isArray(items) ? items : []);
38
35
  setLoadFailed(false);
@@ -32,7 +32,7 @@ export function CodeConfigEditor({
32
32
  }
33
33
 
34
34
  return (
35
- <Space direction="vertical" size={16} style={{ width: '100%' }}>
35
+ <Space direction="vertical" size={12} style={{ width: '100%' }}>
36
36
  <Card size="small" title={t('code.javascript')}>
37
37
  <Typography.Paragraph type="secondary">
38
38
  {t('code.description')}
@@ -70,7 +70,7 @@ export function ExternalRequestConfigEditor({
70
70
  }
71
71
 
72
72
  return (
73
- <Space direction="vertical" size={16} style={{ width: '100%' }}>
73
+ <Space direction="vertical" size={12} style={{ width: '100%' }}>
74
74
  <Alert
75
75
  type="info"
76
76
  showIcon