11import api from '@src/api' ;
22import CodeMirrorFormItem from '@src/components/CodeMirrorFormItem' ;
33import customMessage from '@src/components/Message' ;
4- import { Button , Divider , Drawer , Form , message , Space , Utils } from 'knowdesign' ;
4+ import { Button , Divider , Drawer , Form , message , Space , Utils , Select } from 'knowdesign' ;
55import React , { forwardRef , useEffect , useImperativeHandle , useState } from 'react' ;
66import { useParams } from 'react-router-dom' ;
77import { ConnectCluster , ConnectorPlugin , ConnectorPluginConfig , OperateInfo } from './AddConnector' ;
88
99const PLACEHOLDER = `配置格式如下
1010
1111{
12- "connectClusterName ": "", // Connect Cluster 名称
12+ "name ": "", // Connect Cluster 名称
1313 "config": { // 具体配置项
14- "name": "",
1514 "connector.class": "",
1615 "tasks.max": 1,
1716 ...
@@ -43,11 +42,16 @@ export default forwardRef((props: any, ref) => {
4342 const onOpen = ( type : 'create' | 'edit' , connectClusterName ?: string , defaultConfigs ?: { [ key : string ] : any } ) => {
4443 if ( defaultConfigs ) {
4544 setDefaultConfigs ( { ...defaultConfigs , connectClusterName } ) ;
45+ const connectorName = connectClusterName ;
46+ const connectClusterId = connectClusters . find ( ( cluster ) => cluster . label === connectClusterName ) . value ;
4647 form . setFieldsValue ( {
48+ connectClusterId,
49+ connectorName,
4750 configs : JSON . stringify (
4851 {
49- connectClusterName,
50- config : defaultConfigs ,
52+ // connectClusterName,
53+ name : defaultConfigs . name ,
54+ config : { ...defaultConfigs , name : undefined } ,
5155 } ,
5256 null ,
5357 2
@@ -63,10 +67,11 @@ export default forwardRef((props: any, ref) => {
6367 form . validateFields ( ) . then (
6468 ( data ) => {
6569 const postData = JSON . parse ( data . configs ) ;
66- postData . connectorName = postData . config . name ;
67- postData . connectClusterId = connectClusters . find ( ( cluster ) => cluster . label === postData . connectClusterName ) . value ;
68- delete postData . connectClusterName ;
69-
70+ postData . connectorName = postData . name ;
71+ postData . connectClusterId = data . connectClusterId ;
72+ postData . config . name = postData . name ;
73+ // delete postData.connectClusterName;
74+ delete postData . name ;
7075 Object . entries ( postData . config ) . forEach ( ( [ key , val ] ) => {
7176 if ( val === null ) {
7277 delete postData . config [ key ] ;
@@ -161,6 +166,26 @@ export default forwardRef((props: any, ref) => {
161166 }
162167 >
163168 < Form form = { form } layout = "vertical" >
169+ < Form . Item
170+ name = "connectClusterId"
171+ label = "Connect 集群"
172+ rules = { [
173+ {
174+ required : true ,
175+ validator ( rule , value ) {
176+ if ( ! value ) {
177+ return Promise . reject ( 'Connect 集群不能为空' ) ;
178+ } else {
179+ return Promise . resolve ( ) ;
180+ }
181+ } ,
182+ } ,
183+ ] }
184+ initialValue = { defaultConfigs ?. connectClusterId }
185+ className = "connector-json-connectCluster"
186+ >
187+ < Select options = { connectClusters } placeholder = "请选择 Connect 集群" disabled = { type === 'edit' } />
188+ </ Form . Item >
164189 < Form . Item
165190 name = "configs"
166191 validateTrigger = "onBlur"
@@ -175,40 +200,27 @@ export default forwardRef((props: any, ref) => {
175200 if ( typeof v !== 'object' ) {
176201 return Promise . reject ( '输入内容必须为 JSON' ) ;
177202 }
178- let connectClusterId = - 1 ;
179- // 校验 connectClusterName 字段
180- if ( ! v . connectClusterName ) {
181- return Promise . reject ( '内容缺少 connectClusterName 字段或字段内容为空 ' ) ;
203+ let connectClusterId = form . getFieldValue ( 'connectClusterId' ) ;
204+ // 校验 connectorName 字段
205+ if ( ! v . name ) {
206+ return Promise . reject ( '内容缺少 name 项 ' ) ;
182207 } else {
183- if ( type === 'edit' ) {
184- if ( v . connectClusterName !== defaultConfigs . connectClusterName ) {
185- return Promise . reject ( '编辑模式下不允许修改 connectClusterName 字段' ) ;
186- }
187- } else {
188- if ( ! connectClusters . length ) {
189- getConnectClusters ( ) ;
190- return Promise . reject ( 'connectClusterName 列表获取失败,请重试' ) ;
191- }
192- const targetConnectCluster = connectClusters . find ( ( cluster ) => cluster . label === v . connectClusterName ) ;
193- if ( ! targetConnectCluster ) {
194- return Promise . reject ( 'connectClusterName 不存在,请检查' ) ;
195- } else {
196- connectClusterId = targetConnectCluster . value ;
197- }
208+ if ( type === 'edit' && v . name !== defaultConfigs . name ) {
209+ return Promise . reject ( '编辑模式下不允许修改 name 字段' ) ;
198210 }
199211 }
200212
201213 if ( ! v . config || typeof v . config !== 'object' ) {
202214 return Promise . reject ( '内容缺少 config 字段或字段格式错误' ) ;
203215 } else {
204- // 校验 connectorName 字段
205- if ( ! v . config . name ) {
206- return Promise . reject ( 'config 字段下缺少 name 项' ) ;
207- } else {
208- if ( type === 'edit' && v . config . name !== defaultConfigs . name ) {
209- return Promise . reject ( '编辑模式下不允许修改 name 字段' ) ;
210- }
211- }
216+ // // 校验 connectorName 字段
217+ // if (!v.config.name) {
218+ // return Promise.reject('config 字段下缺少 name 项');
219+ // } else {
220+ // if (type === 'edit' && v.config.name !== defaultConfigs.name) {
221+ // return Promise.reject('编辑模式下不允许修改 name 字段');
222+ // }
223+ // }
212224 if ( ! v . config [ 'connector.class' ] ) {
213225 return Promise . reject ( 'config 字段下缺少 connector.class 项' ) ;
214226 } else if ( type === 'edit' && v . config [ 'connector.class' ] !== defaultConfigs [ 'connector.class' ] ) {
@@ -217,6 +229,10 @@ export default forwardRef((props: any, ref) => {
217229 }
218230
219231 if ( type === 'create' ) {
232+ // 校验创建时是否选择了connect集群
233+ if ( ! connectClusterId ) {
234+ return Promise . reject ( '请先选择 Connect 集群' ) ;
235+ }
220236 // 异步校验 connector 名称是否重复 以及 className 是否存在
221237 return Promise . all ( [
222238 Utils . request ( api . isConnectorExist ( connectClusterId , v . config . name ) ) ,
0 commit comments