diff --git a/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts b/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts index 277c2739908..35994561efa 100644 --- a/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts +++ b/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts @@ -40,7 +40,7 @@ const clickhouseTargetTypes = [ value: item, })); -export default class HiveSink extends SinkInfo implements DataWithBackend { +export default class ClickhouseSink extends SinkInfo implements DataWithBackend { @FormField({ type: 'input', rules: [{ required: true }], diff --git a/inlong-dashboard/src/metas/sinks/es.tsx b/inlong-dashboard/src/metas/sinks/defaults/Es.ts similarity index 81% rename from inlong-dashboard/src/metas/sinks/es.tsx rename to inlong-dashboard/src/metas/sinks/defaults/Es.ts index bb104a2d44c..4367ac5118b 100644 --- a/inlong-dashboard/src/metas/sinks/es.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/Es.ts @@ -18,9 +18,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { sourceFields } from '../common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; +import { DataWithBackend } from '@/metas/DataWithBackend'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const esTypes = [ 'text', @@ -40,21 +43,20 @@ const esTypes = [ value: item, })); -export const es: FieldItemType[] = [ - { - name: 'indexName', +export default class EsSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Es.IndexName'), rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { - name: 'enableCreateResource', + }) + @TableColumn() + @I18n('meta.Sinks.Es.IndexName') + indexName: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -71,93 +73,109 @@ export const es: FieldItemType[] = [ }, ], }), - }, - { - name: 'username', + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { - name: 'password', + }) + @TableColumn() + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - type: 'input', - label: i18n.t('meta.Sinks.Es.Host'), - name: 'host', + }) + @TableColumn() + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ + type: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'port', + }) + @TableColumn() + @I18n('meta.Sinks.Es.Host') + host: string; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.Es.Port'), initialValue: 9200, + rules: [{ required: true }], props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, max: 65535, + disabled: [110, 130].includes(values?.status), }), - rules: [{ required: true }], - }, - { - name: 'flushInterval', + }) + @TableColumn() + @I18n('meta.Sinks.Es.Port') + port: number; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.Es.FlushInterval'), initialValue: 1, + rules: [{ required: true }], + suffix: i18n.t('meta.Sinks.Es.FlushIntervalUnit'), props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, + disabled: [110, 130].includes(values?.status), }), - rules: [{ required: true }], - suffix: i18n.t('meta.Sinks.Es.FlushIntervalUnit'), - }, - { - name: 'flushRecord', + }) + @TableColumn() + @I18n('meta.Sinks.Es.FlushInterval') + flushInterval: number; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.Es.FlushRecord'), initialValue: 1000, + rules: [{ required: true }], + suffix: i18n.t('meta.Sinks.Es.FlushRecordUnit'), props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, + disabled: [110, 130].includes(values?.status), }), - rules: [{ required: true }], - suffix: i18n.t('meta.Sinks.Es.FlushRecordUnit'), - }, - { - name: 'retryTime', + }) + @TableColumn() + @I18n('meta.Sinks.Es.FlushRecord') + flushRecord: number; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.Es.RetryTimes'), initialValue: 3, + rules: [{ required: true }], + suffix: i18n.t('meta.Sinks.Es.RetryTimesUnit'), props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, + disabled: [110, 130].includes(values?.status), }), - rules: [{ required: true }], - suffix: i18n.t('meta.Sinks.Es.RetryTimesUnit'), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Es.RetryTimes') + retryTime: number; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/greenplum.tsx b/inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts similarity index 85% rename from inlong-dashboard/src/metas/sinks/greenplum.tsx rename to inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts index 8af638901cf..6b3313cd291 100644 --- a/inlong-dashboard/src/metas/sinks/greenplum.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts @@ -16,9 +16,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { sourceFields } from '../common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; +import { DataWithBackend } from '@/metas/DataWithBackend'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const fieldTypesConf = { SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'), @@ -55,41 +58,43 @@ const greenplumFieldTypes = Object.keys(fieldTypesConf).reduce( [], ); -export const greenplum: FieldItemType[] = [ - { +export default class GreenplumSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'jdbc:postgresql://127.0.0.1:5432/write', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Greenplum.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Greenplum.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Greenplum.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -106,36 +111,42 @@ export const greenplum: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', - canDelete: ![110, 130].includes(values?.status), + editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/hbase.tsx b/inlong-dashboard/src/metas/sinks/defaults/HBase.ts similarity index 76% rename from inlong-dashboard/src/metas/sinks/hbase.tsx rename to inlong-dashboard/src/metas/sinks/defaults/HBase.ts index e1c39d4c888..b9ff6c231f1 100644 --- a/inlong-dashboard/src/metas/sinks/hbase.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/HBase.ts @@ -16,9 +16,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { DataWithBackend } from '@/metas/DataWithBackend'; +import { SinkInfo } from '../common/SinkInfo'; +import { sourceFields } from '../common/sourceFields'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const hbaseFieldTypes = [ 'int', @@ -35,103 +38,114 @@ const hbaseFieldTypes = [ value: item, })); -export const hbase: FieldItemType[] = [ - { +export default class HBaseSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.HBase.Namespace'), - name: 'namespace', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.Namespace') + namespace: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.HBase.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.HBase.RowKey'), - name: 'rowKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.RowKey') + rowKey: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.HBase.ZkQuorum'), - name: 'zkQuorum', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: '127.0.0.1:2181,127.0.0.2:2181', }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.ZkQuorum') + zkQuorum: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.HBase.ZkNodeParent'), - name: 'zkNodeParent', - initialValue: '/hbase', rules: [{ required: true }], + initialValue: '/hbase', props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.ZkNodeParent') + zkNodeParent: string; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.HBase.BufferFlushMaxSize'), - name: 'bufferFlushMaxSize', - initialValue: 2, rules: [{ required: true }], + initialValue: 2, + suffix: 'mb', props: values => ({ disabled: [110, 130].includes(values?.status), - min: 1, }), - suffix: 'mb', - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.BufferFlushMaxSize') + bufferFlushMaxSize: number; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.HBase.BufferFlushMaxRows'), - name: 'bufferFlushMaxRows', - initialValue: 1000, rules: [{ required: true }], + initialValue: 1000, props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, + disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.HBase.BufferFlushMaxRows') + bufferFlushMaxRows: number; + + @FormField({ type: 'inputnumber', - label: i18n.t('meta.Sinks.HBase.BufferFlushInterval'), - name: 'bufferFlushInterval', - initialValue: 1, rules: [{ required: true }], + initialValue: 1, + suffix: i18n.t('meta.Sinks.HBase.FlushIntervalUnit'), props: values => ({ - disabled: [110, 130].includes(values?.status), min: 1, + disabled: [110, 130].includes(values?.status), }), - suffix: i18n.t('meta.Sinks.HBase.FlushIntervalUnit'), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.HBase.BufferFlushInterval') + bufferFlushInterval: number; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', - canDelete: ![110, 130].includes(values?.status), + editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/iceberg.tsx b/inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts similarity index 85% rename from inlong-dashboard/src/metas/sinks/iceberg.tsx rename to inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts index 458dcb644f2..7a944c70503 100644 --- a/inlong-dashboard/src/metas/sinks/iceberg.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts @@ -18,9 +18,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { sourceFields } from '../common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; +import { DataWithBackend } from '@/metas/DataWithBackend'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const icebergFieldTypes = [ 'string', @@ -98,31 +101,31 @@ const matchPartitionStrategies = fieldType => { return data.filter(item => !item.disabled); }; -export const iceberg: FieldItemType[] = [ - { - name: 'dbName', +export default class IcebergSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Iceberg.DbName'), rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { - name: 'tableName', + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.DbName') + dbName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Iceberg.TableName'), rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.TableName') + tableName: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -139,33 +142,38 @@ export const iceberg: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: 'Catalog URI', - name: 'catalogUri', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'thrift://127.0.0.1:9083', }), - }, - { + }) + @TableColumn() + @I18n('Catalog URI') + catalogUri: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Iceberg.Warehouse'), - name: 'warehouse', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'hdfs://127.0.0.1:9000/user/iceberg/warehouse', }), - }, - { - name: 'fileFormat', - type: 'radio', - label: i18n.t('meta.Sinks.Iceberg.FileFormat'), - initialValue: 'Parquet', + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.Warehouse') + warehouse: string; + + @FormField({ + type: 'select', rules: [{ required: true }], + initialValue: 'Parquet', props: values => ({ disabled: [110, 130].includes(values?.status), options: [ @@ -183,11 +191,15 @@ export const iceberg: FieldItemType[] = [ }, ], }), - }, - { - name: 'extList', - label: i18n.t('meta.Sinks.Iceberg.ExtList'), + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.FileFormat') + fileFormat: string; + + @FormField({ type: EditableTable, + rules: [{ required: true }], + initialValue: [], props: values => ({ size: 'small', columns: [ @@ -207,13 +219,16 @@ export const iceberg: FieldItemType[] = [ }, ], }), - initialValue: [], - }, - { - name: 'dataConsistency', + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.ExtList') + extList: string; + + @FormField({ type: 'select', - label: i18n.t('meta.Sinks.Iceberg.DataConsistency'), + rules: [{ required: true }], initialValue: 'EXACTLY_ONCE', + isPro: true, props: values => ({ disabled: [110, 130].includes(values?.status), options: [ @@ -227,18 +242,21 @@ export const iceberg: FieldItemType[] = [ }, ], }), - isPro: true, - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Iceberg.DataConsistency') + dataConsistency: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts b/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts index 8ccf526b877..2fe41b67c9e 100644 --- a/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts +++ b/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts @@ -22,7 +22,7 @@ import { SinkInfo } from '../common/SinkInfo'; const { I18n, FormField, TableColumn } = DataWithBackend; -export default class HiveSink extends SinkInfo implements DataWithBackend { +export default class KafkaSink extends SinkInfo implements DataWithBackend { @FormField({ type: 'input', rules: [{ required: true }], diff --git a/inlong-dashboard/src/metas/sinks/mysql.tsx b/inlong-dashboard/src/metas/sinks/defaults/Mysql.ts similarity index 86% rename from inlong-dashboard/src/metas/sinks/mysql.tsx rename to inlong-dashboard/src/metas/sinks/defaults/Mysql.ts index 28f8c48e21f..898ade5611c 100644 --- a/inlong-dashboard/src/metas/sinks/mysql.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/Mysql.ts @@ -16,9 +16,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { sourceFields } from '../common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; +import { DataWithBackend } from '@/metas/DataWithBackend'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const fieldTypesConf = { TINYINT: (m, d) => (1 <= m && m <= 4 ? '' : '1<=M<=4'), @@ -55,41 +58,43 @@ const fieldTypes = Object.keys(fieldTypesConf).reduce( [], ); -export const mysql: FieldItemType[] = [ - { +export default class HiveSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'jdbc:mysql://127.0.0.1:3306/write', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.MySQL.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.MySQL.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.MySQL.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -106,35 +111,42 @@ export const mysql: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/oracle.tsx b/inlong-dashboard/src/metas/sinks/defaults/Oracle.ts similarity index 86% rename from inlong-dashboard/src/metas/sinks/oracle.tsx rename to inlong-dashboard/src/metas/sinks/defaults/Oracle.ts index 495ac91c823..f351c992c3c 100644 --- a/inlong-dashboard/src/metas/sinks/oracle.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/Oracle.ts @@ -17,8 +17,12 @@ import i18n from '@/i18n'; import type { FieldItemType } from '@/metas/common'; +import { DataWithBackend } from '@/metas/DataWithBackend'; +import { SinkInfo } from '../common/SinkInfo'; +import { sourceFields } from '../common/sourceFields'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const fieldTypesConf = { BINARY_FLOAT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'), @@ -51,41 +55,43 @@ const oracleFieldTypes = Object.keys(fieldTypesConf).reduce( [], ); -export const oracle: FieldItemType[] = [ - { +export default class OracleSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'jdbc:oracle:thin://127.0.0.1:1521/db_name', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Oracle.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Oracle.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Oracle.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Oracle.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -102,36 +108,42 @@ export const oracle: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/postgreSql.tsx b/inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts similarity index 86% rename from inlong-dashboard/src/metas/sinks/postgreSql.tsx rename to inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts index dcac339c366..59e68d4f562 100644 --- a/inlong-dashboard/src/metas/sinks/postgreSql.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts @@ -16,9 +16,12 @@ */ import i18n from '@/i18n'; -import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { DataWithBackend } from '@/metas/DataWithBackend'; +import { SinkInfo } from '../common/SinkInfo'; +import { sourceFields } from '../common/sourceFields'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const fieldTypesConf = { SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'), @@ -55,51 +58,54 @@ const postgreSqlFieldTypes = Object.keys(fieldTypesConf).reduce( [], ); -export const postgreSql: FieldItemType[] = [ - { +export default class HiveSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'jdbc:postgresql://127.0.0.1:5432/db_name', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.PostgreSQL.DbName'), - name: 'dbName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.PostgreSQL.DbName') + dbName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.PostgreSQL.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.PostgreSQL.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.PostgreSQL.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.PostgreSQL.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -116,35 +122,42 @@ export const postgreSql: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @TableColumn() + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/sqlServer.tsx b/inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts similarity index 85% rename from inlong-dashboard/src/metas/sinks/sqlServer.tsx rename to inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts index 108f20ac6a0..41fbd37b5e0 100644 --- a/inlong-dashboard/src/metas/sinks/sqlServer.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts @@ -18,7 +18,11 @@ import i18n from '@/i18n'; import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; +import { DataWithBackend } from '@/metas/DataWithBackend'; +import { sourceFields } from '../common/sourceFields'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const fieldTypesConf = { CHAR: (m, d) => (1 <= m && m <= 8000 ? '' : '1 <= M <= 8000'), @@ -56,62 +60,68 @@ const sqlserverFieldTypes = Object.keys(fieldTypesConf).reduce( [], ); -export const sqlServer: FieldItemType[] = [ - { +export default class SqlServerSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), placeholder: 'jdbc:sqlserver://127.0.0.1:1433;database=db_name', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.SQLServer.SchemaName'), - name: 'schemaName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.SQLServer.SchemaName') + schemaName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.SQLServer.ServerTimezone'), - name: 'serverTimezone', - initialValue: 'UTC', rules: [{ required: true }], + initialValue: 'UTC', props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.SQLServer.ServerTimezone') + serverTimezone: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.SQLServer.TableName'), - name: 'tableName', rules: [{ required: true }], + initialValue: 'UTC', props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.SQLServer.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.SQLServer.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], + initialValue: 'UTC', props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.SQLServer.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -128,11 +138,12 @@ export const sqlServer: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.SQLServer.AllMigration'), - name: 'allMigration', rules: [{ required: true }], initialValue: true, props: values => ({ @@ -148,35 +159,40 @@ export const sqlServer: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.AllMigration') + allMigration: boolean; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx b/inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts similarity index 81% rename from inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx rename to inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts index a790336f72b..628a364fe8b 100644 --- a/inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx +++ b/inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts @@ -18,7 +18,11 @@ import i18n from '@/i18n'; import type { FieldItemType } from '@/metas/common'; import EditableTable from '@/components/EditableTable'; -import { sourceFields } from './common/sourceFields'; +import { DataWithBackend } from '@/metas/DataWithBackend'; +import { sourceFields } from '../common/sourceFields'; +import { SinkInfo } from '../common/SinkInfo'; + +const { I18n, FormField, TableColumn } = DataWithBackend; const tdsqlPostgreSQLFieldTypes = [ 'SMALLINT', @@ -49,51 +53,54 @@ const tdsqlPostgreSQLFieldTypes = [ value: item, })); -export const tdsqlPostgreSQL: FieldItemType[] = [ - { +export default class TDSQLPostgreSqlSink extends SinkInfo implements DataWithBackend { + @FormField({ type: 'input', - label: 'JDBC URL', - name: 'jdbcUrl', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), - placeholder: 'jdbc:postgresql://127.0.0.1:5432/db_name', + placeholder: 'jdbc:sqlserver://127.0.0.1:1433;database=db_name', }), - }, - { + }) + @TableColumn() + @I18n('JDBC URL') + jdbcUrl: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.TDSQLPostgreSQL.SchemaName'), - name: 'schemaName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.TDSQLPostgreSQL.SchemaName') + schemaName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.TDSQLPostgreSQL.TableName'), - name: 'tableName', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.TDSQLPostgreSQL.TableName') + tableName: string; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.TDSQLPostgreSQL.PrimaryKey'), - name: 'primaryKey', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - _renderTable: true, - }, - { + }) + @TableColumn() + @I18n('meta.Sinks.TDSQLPostgreSQL.PrimaryKey') + primaryKey: string; + + @FormField({ type: 'radio', - label: i18n.t('meta.Sinks.EnableCreateResource'), - name: 'enableCreateResource', rules: [{ required: true }], initialValue: 1, tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'), @@ -110,35 +117,40 @@ export const tdsqlPostgreSQL: FieldItemType[] = [ }, ], }), - }, - { + }) + @I18n('meta.Sinks.EnableCreateResource') + enableCreateResource: number; + + @FormField({ type: 'input', - label: i18n.t('meta.Sinks.Username'), - name: 'username', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { + }) + @I18n('meta.Sinks.Username') + username: string; + + @FormField({ type: 'password', - label: i18n.t('meta.Sinks.Password'), - name: 'password', rules: [{ required: true }], props: values => ({ disabled: [110, 130].includes(values?.status), }), - }, - { - name: 'sinkFieldList', + }) + @I18n('meta.Sinks.Password') + password: string; + + @FormField({ type: EditableTable, props: values => ({ size: 'small', editing: ![110, 130].includes(values?.status), columns: getFieldListColumns(values), }), - }, -]; + }) + sinkFieldList: Record[]; +} const getFieldListColumns = sinkValues => { return [ diff --git a/inlong-dashboard/src/metas/sinks/defaults/index.ts b/inlong-dashboard/src/metas/sinks/defaults/index.ts index 0cda577dabf..c48571b27bf 100644 --- a/inlong-dashboard/src/metas/sinks/defaults/index.ts +++ b/inlong-dashboard/src/metas/sinks/defaults/index.ts @@ -35,14 +35,59 @@ export const allDefaultSinks: MetaExportWithBackendList = [ value: 'DORIS', LoadEntity: () => import('./Doris'), }, + { + label: 'Elasticsearch', + value: 'ELASTICSEARCH', + LoadEntity: () => import('./Es'), + }, + { + label: 'Greenplum', + value: 'GREENPLUM', + LoadEntity: () => import('./Greenplum'), + }, { label: 'Hive', value: 'HIVE', LoadEntity: () => import('./Hive'), }, + { + label: 'HBase', + value: 'HBASE', + LoadEntity: () => import('./HBase'), + }, + { + label: 'Iceberg', + value: 'ICEBERG', + LoadEntity: () => import('./Iceberg'), + }, { label: 'Kafka', value: 'KAFKA', LoadEntity: () => import('./Kafka'), }, + { + label: 'MySQL', + value: 'MYSQL', + LoadEntity: () => import('./Mysql'), + }, + { + label: 'Oracle', + value: 'ORACLE', + LoadEntity: () => import('./Oracle'), + }, + { + label: 'PostgreSQL', + value: 'POSTGRESQL', + LoadEntity: () => import('./PostgreSql'), + }, + { + label: 'SQLServer', + value: 'SQLSERVER', + LoadEntity: () => import('./SQLServer'), + }, + { + label: 'TDSQLPostgreSQL', + value: 'TDSQLPOSTGRESQL', + LoadEntity: () => import('./TDSQLPostgreSql'), + }, ];