Skip to content

Commit 32b2f91

Browse files
author
wangqi
committed
feat(carp-module-cep): update ConditionExecutor and CodeExecutor
1 parent 1a71815 commit 32b2f91

9 files changed

Lines changed: 27 additions & 90 deletions

File tree

carp-ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"query-string": "^9.1.1",
8585
"rc-util": "^5.38.1",
8686
"react": "^18.2.0",
87+
"react-beautiful-dnd": "^13.1.1",
8788
"react-dom": "^18.2.0",
8889
"react-fittext": "^1.0.0",
8990
"react-resizable-panels": "^2.1.7",

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/container/workflow-page-container-module.ts

Lines changed: 0 additions & 35 deletions
This file was deleted.

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/container/workflow-page-contribution.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
import { forwardRef, useEffect, useRef } from 'react';
7+
import { PageContainer } from '@ant-design/pro-components';
78
import { history, useIntl, useLocation } from '@umijs/max';
89
import { EditorRenderer, FreeLayoutEditorProvider } from '@flowgram.ai/free-layout-editor';
910
import { DockedPanelLayer } from '@flowgram.ai/panel-manager-plugin';
@@ -12,11 +13,11 @@ import '@flowgram.ai/free-layout-editor/index.css';
1213
import './styles/index.css';
1314
import { nodeRegistries } from './nodes';
1415
import { useEditorProps } from './hooks';
15-
import { WorkflowPageContainerModule } from './container/workflow-page-container-module';
16+
import { WorkflowPageContainerModule } from '../container/workflow-page-container-module';
1617
import { WorkflowLoader } from '../render/workflow-loader';
17-
import { PageContainer } from '@ant-design/pro-components';
1818
import { WorkspaceCepAPI } from '@/services/workspace/cep/typings';
1919

20+
2021
const Editor = () => {
2122
const intl = useIntl()
2223
const urlParams = useLocation();

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/nodes/code/components/code.tsx

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
*/
55

66
import { Field } from '@flowgram.ai/free-layout-editor';
7-
import { TypeScriptCodeEditor } from '@flowgram.ai/form-materials';
7+
import { IJsonSchema, JsonSchemaEditor, TypeScriptCodeEditor } from '@flowgram.ai/form-materials';
88
import { Divider } from '@douyinfe/semi-ui';
99

1010
import { useIsSidebar, useNodeRenderContext } from '../../../hooks';
11+
import { FormItem } from '../../../form-components';
12+
import { CodeEditor } from '../mateterials/code-editor';
13+
import { CodeValue, DEFAULT_CODE_VALUE } from '../mateterials/code-editor/types';
1114

1215
export function Code() {
1316
const isSidebar = useIsSidebar();
@@ -20,15 +23,14 @@ export function Code() {
2023
return (
2124
<>
2225
<Divider />
23-
<Field<string> name="script.content">
24-
{({ field }) => (
25-
<TypeScriptCodeEditor
26-
value={field.value}
27-
onChange={(value) => field.onChange(value)}
28-
readonly={readonly}
29-
/>
30-
)}
31-
</Field>
26+
<Field<CodeValue> name="script" defaultValue={DEFAULT_CODE_VALUE} >
27+
{({ field, fieldState }) => (
28+
<CodeEditor
29+
codeValue={field.value}
30+
onChange={(value) => field.onChange(value)}
31+
readonly={readonly} />
32+
)}
33+
</Field>
3234
</>
3335
);
3436
}

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/nodes/code/form-meta.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: MIT
44
*/
55

6-
import { FormMeta, FormRenderProps } from '@flowgram.ai/free-layout-editor';
6+
import { FormMeta, FormRenderProps, I18n } from '@flowgram.ai/free-layout-editor';
77
import { createInferInputsPlugin } from '@flowgram.ai/form-materials';
88

99
import { FormHeader, FormContent } from '../../form-components';
@@ -12,11 +12,13 @@ import { Outputs } from './components/outputs';
1212
import { Inputs } from './components/inputs';
1313
import { Code } from './components/code';
1414
import { defaultFormMeta } from '../default-form-meta';
15+
import { InputNumberField, Section } from '../../../form';
1516

1617
export const FormRender = ({ form }: FormRenderProps<CodeNodeJSON>) => (
1718
<>
1819
<FormHeader />
1920
<FormContent>
21+
2022
<Inputs />
2123
<Code />
2224
<Outputs />

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/nodes/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ export enum WorkflowNodeType {
2424
Continue = 'continue',
2525
Break = 'break',
2626
Rule = 'rule',
27+
Demo = 'demo',
2728
}

carp-ui/src/pages/Workspace/Cep/Workflow/Detail/nodes/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { BlockStartNodeRegistry } from './block-start';
2525
import { BlockEndNodeRegistry } from './block-end';
2626
import { MultiConditionNodeRegistry } from "./multi-condition";
2727
import { RuleNodeRegistry } from "./rule";
28+
import { DemoNodeRegistry } from './demo';
2829
export { WorkflowNodeType } from './constants';
2930

3031
export const nodeRegistries: FlowNodeRegistry[] = [
@@ -44,4 +45,5 @@ export const nodeRegistries: FlowNodeRegistry[] = [
4445
GroupNodeRegistry,
4546
MultiConditionNodeRegistry,
4647
RuleNodeRegistry,
48+
DemoNodeRegistry,
4749
];

tools/docker/mysql/init.d/carp-cep.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ insert into `carp_cep_workflow` (`id`, `namespace`, `name`, `uuid`, `type`, `bod
6363
values (5, 'default', 'demo-code', 'c577cae5ade4443dab753afa13909c1f', 'user',
6464
'{"nodes":[{"id":"100001","type":"start","meta":{"position":{"x":0,"y":0}},"data":{"title":"Start","outputs":{"type":"object","properties":{"petId":{"type":"string","extra":{"index":1},"default":"20"}},"required":["petId"]}}},{"id":"900001","type":"end","meta":{"position":{"x":1760,"y":36}},"data":{"title":"End"}},{"id":"http_k3e6O","type":"http","meta":{"position":{"x":435,"y":-177.4}},"data":{"title":"HTTP_1","api":{"method":"GET","url":{"type":"template","content":"https://petstore.swagger.io/v2/pet/{{100001.petId}}"}},"body":{"bodyType":"none"},"headersValues":{},"paramsValues":{},"outputs":{"type":"object","properties":{"body":{"type":"string"},"headers":{"type":"object"},"statusCode":{"type":"integer"}}},"timeout":{"timeout":10000,"retryTimes":1},"headers":{"type":"object","properties":{}},"params":{"type":"object","properties":{}}}},{"id":"condition_R5KCg","type":"condition","meta":{"position":{"x":871,"y":-55}},"data":{"title":"Condition","conditions":[{"value":{"left":{"type":"ref","content":["http_k3e6O","statusCode"]},"operator":"eq","right":{"type":"constant","content":200,"schema":{"type":"number"}}},"key":"if_mVrfL"}]}},{"id":"code_mEXyi","type":"code","meta":{"position":{"x":1337,"y":-187}},"data":{"title":"Code_1","inputsValues":{"input":{"type":"ref","content":["100001","petId"],"extra":{"index":0}}},"script":{"language":"javascript","content":"// Here, you can retrieve input variables from the node using ''params'' and output results using ''ret''.\\n// ''params'' has been correctly injected into the environment.\\n// Here''s an example of getting the value of the parameter named ''input'' from the node input:\\n// const input = params.input;\\n// Here''s an example of outputting a ''ret'' object containing multiple data types:\\n// const ret = { \\"name\\": ''Xiaoming'', \\"hobbies\\": [\\"Reading\\", \\"Traveling\\"] };\\n\\nasync function main({ params }) {\\n // Build the output object\\n const ret = {\\n key0: params.input + params.input, // Concatenate the input parameter ''input'' twice\\n key1: [\\"hello\\", \\"world\\"], // Output an array\\n key2: { // Output an Object\\n key21: \\"hi\\"\\n },\\n };\\n\\n return ret;\\n}"},"outputs":{"type":"object","properties":{"key0":{"type":"string"},"key1":{"type":"array","items":{"type":"string"}},"key2":{"type":"object","properties":{"key21":{"type":"string"}}}}},"inputs":{"type":"object","properties":{"input":{"type":"string"}}}}}],"edges":[{"sourceNodeID":"100001","targetNodeID":"http_k3e6O"},{"sourceNodeID":"code_mEXyi","targetNodeID":"900001"},{"sourceNodeID":"condition_R5KCg","targetNodeID":"900001","sourcePortID":"else"},{"sourceNodeID":"http_k3e6O","targetNodeID":"condition_R5KCg"},{"sourceNodeID":"condition_R5KCg","targetNodeID":"code_mEXyi","sourcePortID":"if_mVrfL"}]}',
6565
null, 'sys', 'sys');
66+
insert into `carp_cep_workflow` (`id`, `namespace`, `name`, `uuid`, `type`, `body`, `remark`, `creator`, `editor`)
67+
VALUES (6, 'defafult', 'demo-rule', 'a4d26bee27d44c109ee88dcf849b402a', 'user',
68+
'{"nodes":[{"id":"100001","type":"start","meta":{"position":{"x":0,"y":0}},"data":{"title":"Start","outputs":{"type":"object","properties":{"petId":{"type":"integer","extra":{"index":1},"default":20},"result":{"type":"boolean","extra":{"index":2}},"action":{"type":"string","extra":{"index":3}}},"required":["petId"]}}},{"id":"900001","type":"end","meta":{"position":{"x":2973.4347640664196,"y":14.586512095692083}},"data":{"title":"End","inputsValues":{"result":{"type":"ref","content":["100001","result"],"extra":{"index":0}},"action":{"type":"ref","content":["100001","action"],"extra":{"index":1}}},"inputs":{"type":"object","properties":{"result":{"type":"boolean"},"action":{"type":"string"}}}}},{"id":"http_LOzxg","type":"http","meta":{"position":{"x":425.3821656050955,"y":-177.4}},"data":{"title":"HTTP_1","api":{"method":"GET","url":{"type":"template","content":"https://petstore.swagger.io/v2/pet/{{100001.petId}}"}},"body":{"bodyType":"none"},"headersValues":{},"paramsValues":{},"outputs":{"type":"object","properties":{"body":{"type":"string"},"headers":{"type":"object"},"statusCode":{"type":"integer"}}},"timeout":{"timeout":10000,"retryTimes":1},"headers":{"type":"object","properties":{}},"params":{"type":"object","properties":{}}}},{"id":"code_54HI-","type":"code","meta":{"position":{"x":851.608280254777,"y":-17.5}},"data":{"title":"Code_1","inputsValues":{"statusCode":{"type":"ref","content":["http_LOzxg","statusCode"],"extra":{"index":0}}},"script":{"language":"javascript","content":"// Here, you can retrieve input variables from the node using ''params'' and output results using ''ret''.\\n// ''params'' has been correctly injected into the environment.\\n// Here''s an example of getting the value of the parameter named ''input'' from the node input:\\n// const input = params.input;\\n// Here''s an example of outputting a ''ret'' object containing multiple data types:\\n// const ret = { \\"name\\": ''Xiaoming'', \\"hobbies\\": [\\"Reading\\", \\"Traveling\\"] };\\n\\nasync function main({ params }) {\\n // Build the output object\\n const ret = {\\n success: params.statusCode == 200 ? true : false\\n };\\n\\n return ret;\\n}"},"outputs":{"type":"object","properties":{"success":{"type":"boolean"}},"required":[]},"inputs":{"type":"object","properties":{"statusCode":{"type":"integer"}}}}},{"id":"multi_condition_cXAcu","type":"multi-condition","meta":{"position":{"x":1287.7259047158634,"y":-192}},"data":{"title":"multi_condition_1","branch":[{"logic":"and","conditions":[{"value":{"left":{"type":"ref","content":["code_54HI-","success"]},"operator":"eq","right":{"type":"constant","content":true,"schema":{"type":"boolean"}}},"key":"condition_cupTz4"},{"value":{"left":{"type":"ref","content":["http_LOzxg","body"]},"operator":"is_not_empty"},"key":"condition_mecHXU"}]},{"logic":"and","conditions":[{"value":{"left":{"type":"ref","content":["code_54HI-","success"]},"operator":"eq","right":{"type":"constant","content":true,"schema":{"type":"boolean"}}},"key":"condition_6b-h-s"},{"value":{"left":{"type":"ref","content":["http_LOzxg","body"]},"operator":"is_empty"},"key":"condition_0oQaMC"}]}]}},{"id":"variable_yIwsy","type":"variable","meta":{"position":{"x":1724.5548427753126,"y":-100.06698394780085}},"data":{"title":"Variable_1","assign":[{"operator":"assign","left":{"type":"ref","content":["100001","result"]},"right":{"type":"constant","content":true,"schema":{"type":"boolean"}}}],"outputs":{"type":"object","required":[],"properties":{}}}},{"id":"variable_mbnKV","type":"variable","meta":{"position":{"x":1724.5548427753126,"y":171.74469809539076}},"data":{"title":"Variable_5","assign":[{"operator":"assign","left":{"type":"ref","content":["100001","result"]},"right":{"type":"constant","content":true,"schema":{"type":"boolean"}}}],"outputs":{"type":"object","required":[],"properties":{}}}},{"id":"code_cM-td","type":"code","meta":{"position":{"x":1724.5548427753126,"y":50.8312101910828}},"data":{"title":"Code_2","inputsValues":{"input":{"type":"constant","content":""}},"script":{"language":"javascript","content":"// Here, you can retrieve input variables from the node using ''params'' and output results using ''ret''.\\n// ''params'' has been correctly injected into the environment.\\n// Here''s an example of getting the value of the parameter named ''input'' from the node input:\\n// const input = params.input;\\n// Here''s an example of outputting a ''ret'' object containing multiple data types:\\n// const ret = { \\"name\\": ''Xiaoming'', \\"hobbies\\": [\\"Reading\\", \\"Traveling\\"] };\\n\\nasync function main({ params }) {\\n // Build the output object\\n const ret = {\\n key0: params.input + params.input, // Concatenate the input parameter ''input'' twice\\n key1: [\\"hello\\", \\"world\\"], // Output an array\\n key2: { // Output an Object\\n key21: \\"hi\\"\\n },\\n };\\n\\n return ret;\\n}"},"outputs":{"type":"object","properties":{"key0":{"type":"string"},"key1":{"type":"array","items":{"type":"string"}},"key2":{"type":"object","properties":{"key21":{"type":"string"}}}}},"inputs":{"type":"object","properties":{"input":{"type":"string"}}}}},{"id":"variable_QefOy","type":"variable","meta":{"position":{"x":2143.398735306147,"y":68.3312101910828}},"data":{"title":"Variable_6","assign":[{"operator":"declare","left":"sum","right":{"type":"constant","content":0,"schema":{"type":"integer"}}}],"outputs":{"type":"object","required":[],"properties":{"sum":{"type":"integer"}}}}}],"edges":[{"sourceNodeID":"100001","targetNodeID":"http_LOzxg"},{"sourceNodeID":"variable_yIwsy","targetNodeID":"900001"},{"sourceNodeID":"variable_QefOy","targetNodeID":"900001"},{"sourceNodeID":"variable_mbnKV","targetNodeID":"900001"},{"sourceNodeID":"http_LOzxg","targetNodeID":"code_54HI-"},{"sourceNodeID":"code_54HI-","targetNodeID":"multi_condition_cXAcu"},{"sourceNodeID":"multi_condition_cXAcu","targetNodeID":"variable_yIwsy","sourcePortID":"branch.0"},{"sourceNodeID":"multi_condition_cXAcu","targetNodeID":"variable_mbnKV","sourcePortID":"else"},{"sourceNodeID":"multi_condition_cXAcu","targetNodeID":"code_cM-td","sourcePortID":"branch.1"},{"sourceNodeID":"code_cM-td","targetNodeID":"variable_QefOy"}]}',
69+
NULL, 'sys', 'sys');
70+
6671

6772

6873
drop table if exists carp_cep_function;

0 commit comments

Comments
 (0)