This is an automated email from the ASF dual-hosted git repository.

leezng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 7f4eb56f55 [INLONG-8046][Dashboard] Support batch import of sink 
fields (#8053)
7f4eb56f55 is described below

commit 7f4eb56f55c9bfdcfe8dd6e48413627262525b9b
Author: feat <[email protected]>
AuthorDate: Wed Jun 14 10:16:27 2023 +0800

    [INLONG-8046][Dashboard] Support batch import of sink fields (#8053)
---
 .../src/plugins/sinks/defaults/ClickHouse.ts       |  2 +
 .../src/plugins/sinks/defaults/Doris.ts            |  2 +
 .../src/plugins/sinks/defaults/Elasticsearch.ts    |  2 +
 .../src/plugins/sinks/defaults/Greenplum.ts        |  2 +
 .../src/plugins/sinks/defaults/HBase.ts            |  2 +
 .../src/plugins/sinks/defaults/Hive.ts             |  2 +
 .../src/plugins/sinks/defaults/Hudi.ts             |  2 +
 .../src/plugins/sinks/defaults/Iceberg.ts          |  2 +
 .../src/plugins/sinks/defaults/Kudu.ts             |  2 +
 .../src/plugins/sinks/defaults/MySQL.ts            |  2 +
 .../src/plugins/sinks/defaults/Oracle.ts           |  2 +
 .../src/plugins/sinks/defaults/PostgreSQL.ts       |  2 +
 .../src/plugins/sinks/defaults/Redis.ts            |  2 +
 .../src/plugins/sinks/defaults/SQLServer.ts        |  2 +
 .../src/plugins/sinks/defaults/StarRocks.ts        |  2 +
 .../src/plugins/sinks/defaults/TDSQLPostgreSQL.ts  |  2 +
 .../src/ui/components/EditableTable/index.tsx      | 65 +++++++++++++++++-----
 17 files changed, 84 insertions(+), 13 deletions(-)

diff --git a/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
index 8b082ad173..780f61da5b 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/ClickHouse.ts
@@ -321,6 +321,8 @@ export default class ClickHouseSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
index 514934a8a1..cf2b9c8136 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Doris.ts
@@ -177,6 +177,8 @@ export default class DorisSink extends SinkInfo implements 
DataWithBackend, Rend
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
index e2a49cfae0..5d19d7dce9 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Elasticsearch.ts
@@ -166,6 +166,8 @@ export default class ElasticsearchSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
index a156585e29..dde187f908 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Greenplum.ts
@@ -150,6 +150,8 @@ export default class GreenplumSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
index 8de96c1f39..fa9b71e5d0 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/HBase.ts
@@ -146,6 +146,8 @@ export default class HBaseSink extends SinkInfo implements 
DataWithBackend, Rend
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertKey: 'fieldName',
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
index 004cd7d883..99548215cc 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Hive.ts
@@ -244,6 +244,8 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
       size: 'small',
       columns: getFieldListColumns(values),
       canDelete: ![110, 130].includes(values?.status),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
index b54b7a3803..f0b2056322 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Hudi.ts
@@ -244,6 +244,8 @@ export default class HudiSink extends SinkInfo implements 
DataWithBackend, Rende
     type: EditableTable,
     props: values => ({
       size: 'small',
+      canBatchAdd: true,
+      upsetByFieldKey: true,
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
     }),
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
index 7f23b5b71d..2a1b29a146 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Iceberg.ts
@@ -247,6 +247,8 @@ export default class IcebergSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
index d895796e19..5ab325174b 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Kudu.ts
@@ -188,6 +188,8 @@ export default class KuduSink extends SinkInfo implements 
DataWithBackend, Rende
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
index 54780f8bd0..5d62467345 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/MySQL.ts
@@ -136,6 +136,8 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
index bbd08d8ed6..4f7c9baa1d 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Oracle.ts
@@ -143,6 +143,8 @@ export default class OracleSink extends SinkInfo implements 
DataWithBackend, Ren
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
index 5c6bb76613..6159eda722 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/PostgreSQL.ts
@@ -158,6 +158,8 @@ export default class HiveSink extends SinkInfo implements 
DataWithBackend, Rende
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
index 6b95d4a488..0d89d644b8 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Redis.ts
@@ -276,6 +276,8 @@ export default class RedisSink extends SinkInfo implements 
DataWithBackend, Rend
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
index 958992a797..f5e696a2fc 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/SQLServer.ts
@@ -195,6 +195,8 @@ export default class SqlServerSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
index 6a20aeb7bc..eaa754d193 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/StarRocks.ts
@@ -168,6 +168,8 @@ export default class StarRocksSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts 
b/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
index 785922467a..244b854dab 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/TDSQLPostgreSQL.ts
@@ -153,6 +153,8 @@ export default class TDSQLPostgreSQLSink
       size: 'small',
       editing: ![110, 130].includes(values?.status),
       columns: getFieldListColumns(values),
+      canBatchAdd: true,
+      upsertByFieldKey: true,
     }),
   })
   sinkFieldList: Record<string, unknown>[];
diff --git a/inlong-dashboard/src/ui/components/EditableTable/index.tsx 
b/inlong-dashboard/src/ui/components/EditableTable/index.tsx
index 262a0d208b..2eda1d9c94 100644
--- a/inlong-dashboard/src/ui/components/EditableTable/index.tsx
+++ b/inlong-dashboard/src/ui/components/EditableTable/index.tsx
@@ -69,6 +69,10 @@ export interface EditableTableProps
   // Can add a new line? Default: true.
   canAdd?: boolean;
   canBatchAdd?: boolean;
+  upsetByFieldKey?: boolean;
+  fieldNameKey?: string;
+  fieldTypeKey?: string;
+  fieldCommentKey?: string;
 }
 
 const getRowInitialValue = (columns: EditableTableProps['columns']) =>
@@ -106,6 +110,10 @@ const EditableTable = ({
   canDelete = true,
   canAdd = true,
   canBatchAdd = false,
+  upsetByFieldKey = false,
+  fieldNameKey = 'fieldName',
+  fieldTypeKey = 'fieldType',
+  fieldCommentKey = 'fieldComment',
   ...rest
 }: EditableTableProps) => {
   if (!id) {
@@ -169,23 +177,54 @@ const EditableTable = ({
   };
 
   const onAppendByParseField = (fields: RowType[]) => {
-    const newRecord: RecordType[] = fields?.map((field: RowType) => ({
-      _etid: Math.random().toString(),
-      ...field,
-    }));
-    const newData = data.concat(newRecord);
-    setData(newData);
-    triggerChange(newData);
+    // append empty row if upsertKey not null
+    if (upsetByFieldKey) {
+      let index: number = 0;
+      data.forEach(item => {
+        if (item[fieldNameKey] === '') {
+          item[fieldNameKey] = fields[index]['fieldName'];
+          item[fieldTypeKey] = fields[index]['fieldType'];
+          item[fieldCommentKey] = fields[index]['fieldComment'];
+          index++;
+        }
+      });
+
+      setData(data);
+      triggerChange(data);
+    } else {
+      const newRecord: RecordType[] = fields?.map((field: RowType) => ({
+        _etid: Math.random().toString(),
+        ...field,
+      }));
+      const newData = data.concat(newRecord);
+
+      setData(newData);
+      triggerChange(newData);
+    }
   };
 
   const onOverrideByParseField = (fields: RowType[]) => {
-    const newData = fields?.map(field => ({
-      _etid: Math.random().toString(),
-      ...field,
-    }));
+    // append empty row if upsertKey not null
+    if (upsetByFieldKey) {
+      let index: number = 0;
+      data.forEach(item => {
+        item[fieldNameKey] = fields[index]['fieldName'];
+        item[fieldTypeKey] = fields[index]['fieldType'];
+        item[fieldCommentKey] = fields[index]['fieldComment'];
+        index++;
+      });
 
-    setData(newData);
-    triggerChange(newData);
+      setData(data);
+      triggerChange(data);
+    } else {
+      const newData = fields?.map(field => ({
+        _etid: Math.random().toString(),
+        ...field,
+      }));
+
+      setData(newData);
+      triggerChange(newData);
+    }
   };
 
   const onTextChange = (object: Record<string, unknown>, { _etid }: 
RecordType) => {

Reply via email to