import React from 'react'; import { Card, Divider, Form, Input, AutoComplete, Select, Switch, InputNumber } from 'antd'; import { INode } from '@antv/g6/lib/interface/item'; import { BehaviorNodeModel, BehaviorNodeTypeModel, ArgsDefType } from '../../common/BehaviorTreeModel'; import Settings from '../../main-process/Settings'; import { FormInstance } from 'antd/lib/form'; import Markdown from 'react-markdown'; const { Item } = Form; interface NodePanelProps { model: BehaviorNodeModel; settings: Settings; updateNode: (id: string) => void; } interface NodePanelState { } export default class NodePanel extends React.Component { formRef = React.createRef(); componentDidUpdate() { const { model, settings } = this.props; this.formRef.current.resetFields(); this.formRef.current.setFieldsValue(this.getInitialValues()); } getInitialValues() { const { model } = this.props; const initialValues: any = { name: model.name, desc: model.desc, debug: model.debug, customArgs: model.args ? JSON.stringify(model.args, null, " ") : '', }; if (model.args) { for (let k in model.args) { initialValues[`args.${k}`] = model.args[k]; } } if (model.input) { model.input.forEach((v, i) => { initialValues[`input.${i}`] = v; }) } if (model.output) { model.output.forEach((v, i) => { initialValues[`output.${i}`] = v; }) } return initialValues; } onFinish = (values: any) => { console.log('Success:', values); const { updateNode, model } = this.props; model.desc = values.desc; updateNode(model.id.toString()); }; onFinishFailed = (errorInfo: any) => { console.log('Failed:', errorInfo); }; handleSubmit = () => { console.log("handleSubmit"); this.formRef.current.submit(); } render() { console.log("render nodePanel"); const { model, settings } = this.props; const conf = settings.getNodeConf(model.name); const title = conf.desc; const options: any = []; settings.nodeConfig.map((e) => { options.push({ label: `${e.name}(${e.desc})`, value: e.name }); }) const layout = { labelCol: { span: 6 }, wrapperCol: { span: 18 }, }; return (
{ return option.label.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1 }} /> {this.renderInputs(conf)} {this.renderArgs(conf)} {this.renderOutputs(conf)}
) } renderArgs(conf: BehaviorNodeTypeModel) { if (!conf || !conf.args || conf.args.length == 0) { return null; } // 普通参数 const normalArgs = (e: ArgsDefType) => { const required = e.type.indexOf("?") == -1; if (e.type.indexOf("string") >= 0) { return ; } else if (e.type.indexOf("int") >= 0) { return ; } else if (e.type.indexOf("boolean") >= 0) { return ; } else if (e.type.indexOf("lua") >= 0) { return ; } } // 自定义参数 const customArgs = () => { return ( ) } return (

常量参数

{conf && conf.args && conf.args.map((e, i: number) => { const required = e.type.indexOf("?") == -1; return ( = 0 ? 'checked' : undefined} rules={[ { required, message: `${e.desc}(${e.name})为必填字段` } ]} > {normalArgs(e)} ) })} {customArgs()}
); } renderInputs(conf: BehaviorNodeTypeModel) { if (!conf.input || !conf.input || conf.input.length == 0) { return null; } return (

输入变量

{ conf.input.map((e, i) => { return ( ) }) }
) } renderOutputs(conf: BehaviorNodeTypeModel) { if (!conf.output || !conf.output || conf.output.length == 0) { return null; } return (

输出变量

{ conf.output.map((e, i) => { return ( ) }) }
) } }