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

likyh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 90f5a0809 refactor(config-ui): use data scope config to replace data 
scope component (#5395)
90f5a0809 is described below

commit 90f5a080904470cc69d0094467ddcd13f75d2713
Author: 青湛 <[email protected]>
AuthorDate: Wed Jun 7 15:44:03 2023 +0800

    refactor(config-ui): use data scope config to replace data scope component 
(#5395)
---
 .../assets/icon.svg => images/plugin-icon.svg}     |   0
 config-ui/src/pages/connection/detail/index.tsx    |  27 ++--
 .../components/data-scope-select-remote/index.tsx  | 144 ++++++---------------
 .../components/data-scope-select-remote/styled.ts  |  13 +-
 .../plugins/components/scope-config-form/index.tsx |  10 +-
 config-ui/src/plugins/config.ts                    |  36 ------
 config-ui/src/plugins/register/ae/config.ts        |  27 ----
 config-ui/src/plugins/register/ae/index.ts         |  19 ---
 config-ui/src/plugins/register/azure/config.tsx    |  22 +++-
 .../src/plugins/register/azure/data-scope.tsx      |  56 --------
 config-ui/src/plugins/register/azure/index.ts      |   1 -
 config-ui/src/plugins/register/azure/types.ts      |  23 ----
 config-ui/src/plugins/register/base/config.ts      |  36 ------
 config-ui/src/plugins/register/base/index.ts       |  19 ---
 .../src/plugins/register/bitbucket/config.tsx      |  30 +++--
 .../src/plugins/register/bitbucket/data-scope.tsx  |  56 --------
 config-ui/src/plugins/register/bitbucket/index.ts  |   1 -
 config-ui/src/plugins/register/bitbucket/types.ts  |  24 ----
 config-ui/src/plugins/register/customize/config.ts |  27 ----
 config-ui/src/plugins/register/customize/index.ts  |  19 ---
 config-ui/src/plugins/register/dbt/config.ts       |  27 ----
 config-ui/src/plugins/register/dbt/index.ts        |  19 ---
 config-ui/src/plugins/register/dora/config.ts      |  27 ----
 config-ui/src/plugins/register/dora/index.ts       |  19 ---
 config-ui/src/plugins/register/feishu/config.ts    |  27 ----
 config-ui/src/plugins/register/feishu/index.ts     |  19 ---
 .../src/plugins/register/gitee/assets/icon.svg     |  21 ---
 config-ui/src/plugins/register/gitee/config.ts     |  30 -----
 config-ui/src/plugins/register/gitee/index.ts      |  19 ---
 .../plugins/register/gitextractor/assets/icon.svg  |  19 ---
 .../src/plugins/register/gitextractor/config.ts    |  30 -----
 .../src/plugins/register/gitextractor/index.ts     |  19 ---
 config-ui/src/plugins/register/github/config.tsx   |  47 ++++---
 .../src/plugins/register/github/data-scope.tsx     |  67 ----------
 config-ui/src/plugins/register/github/index.ts     |   1 -
 config-ui/src/plugins/register/github/styled.ts    |   6 -
 config-ui/src/plugins/register/github/types.ts     |  28 ----
 .../register/github_graphql/assets/icon.svg        |  21 ---
 .../src/plugins/register/github_graphql/config.ts  |  30 -----
 .../src/plugins/register/github_graphql/index.ts   |  19 ---
 config-ui/src/plugins/register/gitlab/config.tsx   |  21 ++-
 .../src/plugins/register/gitlab/data-scope.tsx     |  67 ----------
 config-ui/src/plugins/register/gitlab/index.ts     |   1 -
 config-ui/src/plugins/register/gitlab/styled.ts    |   6 -
 config-ui/src/plugins/register/gitlab/types.ts     |  32 -----
 config-ui/src/plugins/register/jenkins/config.ts   |  16 ++-
 config-ui/src/plugins/register/jenkins/index.ts    |   1 -
 config-ui/src/plugins/register/jira/config.tsx     |  20 ++-
 config-ui/src/plugins/register/jira/data-scope.tsx |  57 --------
 config-ui/src/plugins/register/jira/index.ts       |   1 -
 config-ui/src/plugins/register/jira/types.ts       |  26 ----
 config-ui/src/plugins/register/org/config.ts       |  27 ----
 config-ui/src/plugins/register/org/index.ts        |  19 ---
 .../src/plugins/register/pagerduty/config.tsx      |   8 +-
 .../src/plugins/register/pagerduty/data-scope.tsx  |  59 ---------
 config-ui/src/plugins/register/pagerduty/index.ts  |   1 -
 config-ui/src/plugins/register/pagerduty/styled.ts |  21 ---
 config-ui/src/plugins/register/pagerduty/types.ts  |  23 ----
 config-ui/src/plugins/register/refdiff/config.ts   |  27 ----
 config-ui/src/plugins/register/refdiff/index.ts    |  19 ---
 config-ui/src/plugins/register/sonarqube/config.ts |   8 +-
 .../src/plugins/register/sonarqube/data-scope.tsx  |  58 ---------
 config-ui/src/plugins/register/sonarqube/index.ts  |   1 -
 config-ui/src/plugins/register/sonarqube/types.ts  |  23 ----
 config-ui/src/plugins/register/starrocks/config.ts |  27 ----
 config-ui/src/plugins/register/starrocks/index.ts  |  19 ---
 config-ui/src/plugins/register/tapd/config.tsx     |  16 ++-
 config-ui/src/plugins/register/tapd/data-scope.tsx |   2 +-
 .../src/plugins/register/teambition/config.tsx     |  12 +-
 config-ui/src/plugins/register/webook/config.ts    |  13 +-
 config-ui/src/plugins/register/zentao/config.ts    |   8 +-
 .../src/plugins/register/zentao/data-scope.tsx     |  66 ----------
 config-ui/src/plugins/register/zentao/index.ts     |   1 -
 config-ui/src/plugins/register/zentao/types.ts     |  25 ----
 config-ui/src/plugins/types.ts                     |  17 ++-
 config-ui/src/plugins/utils.ts                     |  30 +++++
 config-ui/src/store/connections/context.tsx        |   4 +-
 77 files changed, 271 insertions(+), 1596 deletions(-)

diff --git a/config-ui/src/plugins/register/base/assets/icon.svg 
b/config-ui/src/images/plugin-icon.svg
similarity index 100%
rename from config-ui/src/plugins/register/base/assets/icon.svg
rename to config-ui/src/images/plugin-icon.svg
diff --git a/config-ui/src/pages/connection/detail/index.tsx 
b/config-ui/src/pages/connection/detail/index.tsx
index fb7179c44..9ed6548ac 100644
--- a/config-ui/src/pages/connection/detail/index.tsx
+++ b/config-ui/src/pages/connection/detail/index.tsx
@@ -16,7 +16,7 @@
  *
  */
 
-import { useEffect, useState } from 'react';
+import { useState, useEffect, useMemo } from 'react';
 import { useParams, useHistory, Link } from 'react-router-dom';
 import { Button, Icon, Intent } from '@blueprintjs/core';
 
@@ -26,6 +26,7 @@ import {
   ConnectionForm,
   ConnectionStatus,
   DataScopeSelectRemote,
+  getPluginConfig,
   getPluginId,
   ScopeConfigForm,
   ScopeConfigSelect,
@@ -67,6 +68,8 @@ const ConnectionDetail = ({ plugin, connectionId }: Props) => 
{
 
   const { unique, status, name, icon } = onGet(`${plugin}-${connectionId}`) || 
{};
 
+  const pluginConfig = useMemo(() => getPluginConfig(plugin), [plugin]);
+
   useEffect(() => {
     onTest(`${plugin}-${connectionId}`);
   }, [plugin, connectionId]);
@@ -75,6 +78,8 @@ const ConnectionDetail = ({ plugin, connectionId }: Props) => 
{
     setType(undefined);
   };
 
+  console.log(data);
+
   const handleShowTips = () => {
     setTips(
       <div>
@@ -196,7 +201,7 @@ const ConnectionDetail = ({ plugin, connectionId }: Props) 
=> {
         </div>
         <Buttons>
           <Button intent={Intent.PRIMARY} icon="add" text="Add Data Scope" 
onClick={handleShowCreateDataScopeDialog} />
-          {plugin !== 'tapd' && (
+          {plugin !== 'tapd' && pluginConfig.scopeConfig && (
             <Button
               disabled={!scopeIds.length}
               intent={Intent.PRIMARY}
@@ -236,14 +241,16 @@ const ConnectionDetail = ({ plugin, connectionId }: 
Props) => {
               render: (_, row) => (
                 <>
                   <span>{row.scopeConfigId ? row.scopeConfig?.name : 
'N/A'}</span>
-                  <IconButton
-                    icon="link"
-                    tooltip="Associate Scope Config"
-                    onClick={() => {
-                      
handleShowScopeConfigSelectDialog([row[getPluginId(plugin)]]);
-                      setScopeConfigId(row.scopeConfigId);
-                    }}
-                  />
+                  {pluginConfig.scopeConfig && (
+                    <IconButton
+                      icon="link"
+                      tooltip="Associate Scope Config"
+                      onClick={() => {
+                        
handleShowScopeConfigSelectDialog([row[getPluginId(plugin)]]);
+                        setScopeConfigId(row.scopeConfigId);
+                      }}
+                    />
+                  )}
                 </>
               ),
             },
diff --git 
a/config-ui/src/plugins/components/data-scope-select-remote/index.tsx 
b/config-ui/src/plugins/components/data-scope-select-remote/index.tsx
index d1c274497..bb1715c30 100644
--- a/config-ui/src/plugins/components/data-scope-select-remote/index.tsx
+++ b/config-ui/src/plugins/components/data-scope-select-remote/index.tsx
@@ -16,21 +16,16 @@
  *
  */
 
-import { useMemo, useState } from 'react';
+import React, { useMemo, useState } from 'react';
 import { Button, Intent } from '@blueprintjs/core';
 
-import { GitHubDataScope } from '@/plugins/register/github';
-import { JiraDataScope } from '@/plugins/register/jira';
-import { GitLabDataScope } from '@/plugins/register/gitlab';
-import { JenkinsDataScope } from '@/plugins/register/jenkins';
-import { BitbucketDataScope } from '@/plugins/register/bitbucket';
-import { AzureDataScope } from '@/plugins/register/azure';
-import { SonarQubeDataScope } from '@/plugins/register/sonarqube';
-import { PagerDutyDataScope } from '@/plugins/register/pagerduty';
-import { TapdDataScope } from '@/plugins/register/tapd';
-import { ZentaoDataScope } from '@/plugins/register/zentao';
+import { Buttons } from '@/components';
+import { getPluginId, getPluginConfig } from '@/plugins';
 import { operator } from '@/utils';
 
+import { DataScopeMillerColumns } from '../data-scope-miller-columns';
+import { DataScopeSearch } from '../data-scope-search';
+
 import * as API from './api';
 import * as S from './styled';
 
@@ -46,8 +41,20 @@ export const DataScopeSelectRemote = ({ plugin, 
connectionId, disabledScope, onS
   const [operating, setOperating] = useState(false);
   const [scope, setScope] = useState<any>([]);
 
+  const pluginConfig = useMemo(() => getPluginConfig(plugin), [plugin]);
+
   const error = useMemo(() => (!scope.length ? 'No Data Scope is Selected' : 
''), [scope]);
 
+  const selectedItems = useMemo(
+    () => scope.map((it: any) => ({ id: `${it[getPluginId(plugin)]}`, name: 
it.name, data: it })),
+    [scope],
+  );
+
+  const disabledItems = useMemo(
+    () => (disabledScope ?? []).map((it) => ({ id: 
`${it[getPluginId(plugin)]}`, name: it.name, data: it })),
+    [disabledScope],
+  );
+
   const handleSubmit = async () => {
     const [success, res] = await operator(
       async () =>
@@ -76,97 +83,30 @@ export const DataScopeSelectRemote = ({ plugin, 
connectionId, disabledScope, onS
 
   return (
     <S.Wrapper>
-      {plugin === 'github' && (
-        <GitHubDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'jira' && (
-        <JiraDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
+      <h3>{pluginConfig.dataScope.millerColumns.title}</h3>
+      <p>{pluginConfig.dataScope.millerColumns.subTitle}</p>
+      <DataScopeMillerColumns
+        title={pluginConfig.dataScope.millerColumns?.firstColumnTitle}
+        plugin={plugin}
+        connectionId={connectionId}
+        disabledItems={disabledItems}
+        selectedItems={selectedItems}
+        onChangeItems={setScope}
+      />
+      {pluginConfig.dataScope.search && (
+        <>
+          <h4>{pluginConfig.dataScope.search.title}</h4>
+          <p>{pluginConfig.dataScope.search.subTitle}</p>
+          <DataScopeSearch
+            plugin={plugin}
+            connectionId={connectionId}
+            disabledItems={disabledItems}
+            selectedItems={selectedItems}
+            onChangeItems={setScope}
+          />
+        </>
       )}
-
-      {plugin === 'gitlab' && (
-        <GitLabDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'jenkins' && (
-        <JenkinsDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'bitbucket' && (
-        <BitbucketDataScope
-          disabledItems={disabledScope}
-          connectionId={connectionId}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'azuredevops' && (
-        <AzureDataScope
-          disabledItems={disabledScope}
-          connectionId={connectionId}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'sonarqube' && (
-        <SonarQubeDataScope
-          disabledItems={disabledScope}
-          connectionId={connectionId}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'pagerduty' && (
-        <PagerDutyDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'tapd' && (
-        <TapdDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      {plugin === 'zentao' && (
-        <ZentaoDataScope
-          connectionId={connectionId}
-          disabledItems={disabledScope}
-          selectedItems={scope}
-          onChangeItems={setScope}
-        />
-      )}
-
-      <div className="action">
+      <Buttons position="bottom" align="right">
         <Button outlined intent={Intent.PRIMARY} text="Cancel" 
disabled={operating} onClick={onCancel} />
         <Button
           outlined
@@ -176,7 +116,7 @@ export const DataScopeSelectRemote = ({ plugin, 
connectionId, disabledScope, onS
           disabled={!!error}
           onClick={handleSubmit}
         />
-      </div>
+      </Buttons>
     </S.Wrapper>
   );
 };
diff --git 
a/config-ui/src/plugins/components/data-scope-select-remote/styled.ts 
b/config-ui/src/plugins/components/data-scope-select-remote/styled.ts
index e10dd267e..4bf74a53c 100644
--- a/config-ui/src/plugins/components/data-scope-select-remote/styled.ts
+++ b/config-ui/src/plugins/components/data-scope-select-remote/styled.ts
@@ -18,15 +18,4 @@
 
 import styled from 'styled-components';
 
-export const Wrapper = styled.div`
-  .action {
-    display: flex;
-    align-items: center;
-    justify-content: end;
-    margin-top: 36px;
-
-    .bp4-button + .bp4-button {
-      margin-left: 8px;
-    }
-  }
-`;
+export const Wrapper = styled.div``;
diff --git a/config-ui/src/plugins/components/scope-config-form/index.tsx 
b/config-ui/src/plugins/components/scope-config-form/index.tsx
index c1250f0e1..dd03c7223 100644
--- a/config-ui/src/plugins/components/scope-config-form/index.tsx
+++ b/config-ui/src/plugins/components/scope-config-form/index.tsx
@@ -66,12 +66,12 @@ export const ScopeConfigForm = ({
   const config = useMemo(() => getPluginConfig(plugin), []);
 
   useEffect(() => {
-    setHasRefDiff(!!config.transformation.refdiff);
-  }, [config.transformation]);
+    setHasRefDiff(!!config.scopeConfig?.transformation.refdiff);
+  }, [config.scopeConfig?.transformation]);
 
   useEffect(() => {
-    setEntities(config.entities);
-  }, [config.entities]);
+    setEntities(config.scopeConfig?.entities ?? []);
+  }, [config.scopeConfig?.entities]);
 
   useEffect(() => {
     if (!scopeConfigId) return;
@@ -147,7 +147,7 @@ export const ScopeConfigForm = ({
               required
             >
               <MultiSelector
-                items={transformEntities(config.entities)}
+                items={transformEntities(config.scopeConfig?.entities ?? [])}
                 getKey={(it) => it.value}
                 getName={(it) => it.label}
                 selectedItems={entities.map((it) => ({ label: 
EntitiesLabel[it], value: it }))}
diff --git a/config-ui/src/plugins/config.ts b/config-ui/src/plugins/config.ts
index 1f907f71b..a4a150beb 100644
--- a/config-ui/src/plugins/config.ts
+++ b/config-ui/src/plugins/config.ts
@@ -17,66 +17,30 @@
  */
 
 import type { PluginConfigType } from './types';
-import { BasePipelineConfig } from './register/base';
-import { AEConfig } from './register/ae';
 import { AzureConfig } from './register/azure';
 import { BitBucketConfig } from './register/bitbucket';
-import { CustomizeConfig } from './register/customize';
-import { DBTConfig } from './register/dbt';
-import { DORAConfig } from './register/dora';
-import { FeiShuConfig } from './register/feishu';
-import { GiteeConfig } from './register/gitee';
-import { GitExtractorConfig } from './register/gitextractor';
 import { GitHubConfig } from './register/github';
-import { GitHubGraphqlConfig } from './register/github_graphql';
 import { GitLabConfig } from './register/gitlab';
 import { JenkinsConfig } from './register/jenkins';
 import { JiraConfig } from './register/jira';
-import { OrgConfig } from './register/org';
 import { PagerDutyConfig } from './register/pagerduty';
-import { RefDiffConfig } from './register/refdiff';
 import { SonarQubeConfig } from './register/sonarqube';
-import { StarRocksConfig } from './register/starrocks';
 import { TAPDConfig } from './register/tapd';
 import { WebhookConfig } from './register/webook';
 import { TeambitionConfig } from './register/teambition';
 import { ZenTaoConfig } from './register/zentao';
 
 export const PluginConfig: PluginConfigType[] = [
-  AEConfig,
   AzureConfig,
   BitBucketConfig,
-  CustomizeConfig,
-  DBTConfig,
-  DORAConfig,
-  FeiShuConfig,
-  GiteeConfig,
-  GitExtractorConfig,
   GitHubConfig,
-  GitHubGraphqlConfig,
   GitLabConfig,
   JenkinsConfig,
   JiraConfig,
-  OrgConfig,
   PagerDutyConfig,
-  RefDiffConfig,
   SonarQubeConfig,
-  StarRocksConfig,
   TAPDConfig,
   TeambitionConfig,
   ZenTaoConfig,
   WebhookConfig,
 ].sort((a, b) => a.sort - b.sort);
-
-// get plugin config by plugin name
-export function getPluginConfig(pluginName: string): PluginConfigType {
-  let pluginConfig = PluginConfig.find((plugin) => plugin.plugin === 
pluginName) as PluginConfigType;
-  if (!pluginConfig) {
-    pluginConfig = {
-      ...BasePipelineConfig,
-      plugin: pluginName,
-      name: pluginName,
-    } as PluginConfigType;
-  }
-  return pluginConfig;
-}
diff --git a/config-ui/src/plugins/register/ae/config.ts 
b/config-ui/src/plugins/register/ae/config.ts
deleted file mode 100644
index efcf1b87b..000000000
--- a/config-ui/src/plugins/register/ae/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const AEConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'ae',
-  name: 'AE',
-};
diff --git a/config-ui/src/plugins/register/ae/index.ts 
b/config-ui/src/plugins/register/ae/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/ae/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/azure/config.tsx 
b/config-ui/src/plugins/register/azure/config.tsx
index 0686b3a9c..5014e5645 100644
--- a/config-ui/src/plugins/register/azure/config.tsx
+++ b/config-ui/src/plugins/register/azure/config.tsx
@@ -58,13 +58,21 @@ export const AzureConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CODE', 'CODEREVIEW', 'CROSS', 'CICD'],
-  transformation: {
-    deploymentPattern: '(deploy|push-image)',
-    productionPattern: 'prod(.*)',
-    refdiff: {
-      tagsLimit: 10,
-      tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+  dataScope: {
+    millerColumns: {
+      title: 'Add Repositories by Selecting from the Directory',
+      subTitle: 'The following directory lists out all repositories in your 
organizations.',
+    },
+  },
+  scopeConfig: {
+    entities: ['CODE', 'CODEREVIEW', 'CROSS', 'CICD'],
+    transformation: {
+      deploymentPattern: '(deploy|push-image)',
+      productionPattern: 'prod(.*)',
+      refdiff: {
+        tagsLimit: 10,
+        tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+      },
     },
   },
 };
diff --git a/config-ui/src/plugins/register/azure/data-scope.tsx 
b/config-ui/src/plugins/register/azure/data-scope.tsx
deleted file mode 100644
index 7659d7425..000000000
--- a/config-ui/src/plugins/register/azure/data-scope.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { AzureScopeType } from './types';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: AzureScopeType[];
-  selectedItems: AzureScopeType[];
-  onChangeItems: (selectedItems: AzureScopeType[]) => void;
-}
-
-export const AzureDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.id}`, name: it.name, 
data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.id}`, name: 
it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <>
-      <h4>Add Repositories by Selecting from the Directory</h4>
-      <p>The following directory lists out all repositories in your 
organizations.</p>
-      <DataScopeMillerColumns
-        plugin="azuredevops"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </>
-  );
-};
diff --git a/config-ui/src/plugins/register/azure/index.ts 
b/config-ui/src/plugins/register/azure/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/azure/index.ts
+++ b/config-ui/src/plugins/register/azure/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/azure/types.ts 
b/config-ui/src/plugins/register/azure/types.ts
deleted file mode 100644
index 075e59287..000000000
--- a/config-ui/src/plugins/register/azure/types.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type AzureScopeType = {
-  connectionId: ID;
-  id: ID;
-  name: string;
-};
diff --git a/config-ui/src/plugins/register/base/config.ts 
b/config-ui/src/plugins/register/base/config.ts
deleted file mode 100644
index 2cec50ce9..000000000
--- a/config-ui/src/plugins/register/base/config.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { PluginType } from '../../types';
-
-import Icon from './assets/icon.svg';
-
-export const BasePipelineConfig = {
-  type: PluginType.Pipeline,
-  plugin: undefined,
-  name: undefined,
-  icon: Icon,
-  sort: 101,
-  connection: {
-    docLink: '',
-    initialValues: {},
-    fields: [],
-  },
-  entities: [],
-  transformation: {},
-};
diff --git a/config-ui/src/plugins/register/base/index.ts 
b/config-ui/src/plugins/register/base/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/base/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/bitbucket/config.tsx 
b/config-ui/src/plugins/register/bitbucket/config.tsx
index 7518bd041..dd4a2dbf1 100644
--- a/config-ui/src/plugins/register/bitbucket/config.tsx
+++ b/config-ui/src/plugins/register/bitbucket/config.tsx
@@ -58,17 +58,25 @@ export const BitBucketConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
-  transformation: {
-    issueStatusTodo: 'new,open',
-    issueStatusInProgress: '',
-    issueStatusDone: 'closed',
-    issueStatusOther: 'on hold,wontfix,duplicate,invalid',
-    deploymentPattern: '',
-    productionPattern: '',
-    refdiff: {
-      tagsLimit: 10,
-      tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+  dataScope: {
+    millerColumns: {
+      title: 'Repositories *',
+      subTitle: 'Select the repositories you would like to sync.',
+    },
+  },
+  scopeConfig: {
+    entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
+    transformation: {
+      issueStatusTodo: 'new,open',
+      issueStatusInProgress: '',
+      issueStatusDone: 'closed',
+      issueStatusOther: 'on hold,wontfix,duplicate,invalid',
+      deploymentPattern: '',
+      productionPattern: '',
+      refdiff: {
+        tagsLimit: 10,
+        tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+      },
     },
   },
 };
diff --git a/config-ui/src/plugins/register/bitbucket/data-scope.tsx 
b/config-ui/src/plugins/register/bitbucket/data-scope.tsx
deleted file mode 100644
index d0130b213..000000000
--- a/config-ui/src/plugins/register/bitbucket/data-scope.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const BitbucketDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.bitbucketId}`, name: 
it.name, data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.bitbucketId}`, 
name: it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <>
-      <h3>Repositories *</h3>
-      <p>Select the repositories you would like to sync.</p>
-      <DataScopeMillerColumns
-        plugin="bitbucket"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </>
-  );
-};
diff --git a/config-ui/src/plugins/register/bitbucket/index.ts 
b/config-ui/src/plugins/register/bitbucket/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/bitbucket/index.ts
+++ b/config-ui/src/plugins/register/bitbucket/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/bitbucket/types.ts 
b/config-ui/src/plugins/register/bitbucket/types.ts
deleted file mode 100644
index db949a1f9..000000000
--- a/config-ui/src/plugins/register/bitbucket/types.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  bitbucketId: string;
-  name: string;
-  // and others
-};
diff --git a/config-ui/src/plugins/register/customize/config.ts 
b/config-ui/src/plugins/register/customize/config.ts
deleted file mode 100644
index 6def51839..000000000
--- a/config-ui/src/plugins/register/customize/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const CustomizeConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'customize',
-  name: 'customize',
-};
diff --git a/config-ui/src/plugins/register/customize/index.ts 
b/config-ui/src/plugins/register/customize/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/customize/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/dbt/config.ts 
b/config-ui/src/plugins/register/dbt/config.ts
deleted file mode 100644
index 90b1d3e63..000000000
--- a/config-ui/src/plugins/register/dbt/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const DBTConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'dbt',
-  name: 'DBT',
-};
diff --git a/config-ui/src/plugins/register/dbt/index.ts 
b/config-ui/src/plugins/register/dbt/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/dbt/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/dora/config.ts 
b/config-ui/src/plugins/register/dora/config.ts
deleted file mode 100644
index 5589dc87b..000000000
--- a/config-ui/src/plugins/register/dora/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const DORAConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'dora',
-  name: 'DORA',
-};
diff --git a/config-ui/src/plugins/register/dora/index.ts 
b/config-ui/src/plugins/register/dora/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/dora/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/feishu/config.ts 
b/config-ui/src/plugins/register/feishu/config.ts
deleted file mode 100644
index 6c1a347f7..000000000
--- a/config-ui/src/plugins/register/feishu/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const FeiShuConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'feishu',
-  name: 'FeiShu',
-};
diff --git a/config-ui/src/plugins/register/feishu/index.ts 
b/config-ui/src/plugins/register/feishu/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/feishu/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/gitee/assets/icon.svg 
b/config-ui/src/plugins/register/gitee/assets/icon.svg
deleted file mode 100644
index 7e81233d8..000000000
--- a/config-ui/src/plugins/register/gitee/assets/icon.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<svg width="100" height="100" viewBox="0 0 60 60" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
-    <path fill-rule="evenodd" clip-rule="evenodd"
-        d="M30 4C44.3597 4 56 15.6403 56 30C56 44.3597 44.3597 56 30 
56C15.6403 56 4 44.3597 4 30C4 15.6403 15.6403 4 30 4ZM43.1616 15.5556C43.1614 
15.5556 43.1611 15.5556 43.1608 15.5564H25.1856C19.8673 15.5564 15.5557 19.8677 
15.5557 25.1863V43.1615C15.5557 43.8706 16.1305 44.4454 16.8396 
44.4454H35.7781C40.5645 44.4454 44.4447 40.5653 44.4447 35.7789V28.3962C44.4447 
27.6871 43.8698 27.1123 43.1607 27.1123H28.3949C27.6859 27.1126 27.1112 27.6873 
27.1106 28.3962L27.1098 31.606C27.1093 3 [...]
-        fill="#7497F7" />
-</svg>
\ No newline at end of file
diff --git a/config-ui/src/plugins/register/gitee/config.ts 
b/config-ui/src/plugins/register/gitee/config.ts
deleted file mode 100644
index 39267405a..000000000
--- a/config-ui/src/plugins/register/gitee/config.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-import Icon from './assets/icon.svg';
-
-export const GiteeConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'gitee',
-  name: 'Gitee',
-  icon: Icon,
-};
diff --git a/config-ui/src/plugins/register/gitee/index.ts 
b/config-ui/src/plugins/register/gitee/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/gitee/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/gitextractor/assets/icon.svg 
b/config-ui/src/plugins/register/gitextractor/assets/icon.svg
deleted file mode 100644
index 97c0d6885..000000000
--- a/config-ui/src/plugins/register/gitextractor/assets/icon.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<svg xmlns="http://www.w3.org/2000/svg"; xml:space="preserve" width="97" 
height="97">
-    <path fill="#7497F7" d="M92.71 44.408 52.591 
4.291c-2.31-2.311-6.057-2.311-8.369 0l-8.33 8.332L46.459 23.19c2.456-.83 
5.272-.273 7.229 1.685 1.969 1.97 2.521 4.81 1.67 7.275l10.186 10.185c2.465-.85 
5.307-.3 7.275 1.671 2.75 2.75 2.75 7.206 0 9.958-2.752 2.751-7.208 2.751-9.961 
0-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997c.67.332 1.303.774 1.861 
1.332 2.75 2.75 2.75 7.206 0 9.959-2.75 2.749-7.209 2.749-9.957 
0-2.75-2.754-2.75-7.21 0-9.959.68-.679 1.467-1.193 2.307-1.537v-25.23 [...]
-</svg>
\ No newline at end of file
diff --git a/config-ui/src/plugins/register/gitextractor/config.ts 
b/config-ui/src/plugins/register/gitextractor/config.ts
deleted file mode 100644
index 20d746fd9..000000000
--- a/config-ui/src/plugins/register/gitextractor/config.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-import Icon from './assets/icon.svg';
-
-export const GitExtractorConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'gitextractor',
-  name: 'GitExtractor',
-  icon: Icon,
-};
diff --git a/config-ui/src/plugins/register/gitextractor/index.ts 
b/config-ui/src/plugins/register/gitextractor/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/gitextractor/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/github/config.tsx 
b/config-ui/src/plugins/register/github/config.tsx
index c488355ff..e765d53c9 100644
--- a/config-ui/src/plugins/register/github/config.tsx
+++ b/config-ui/src/plugins/register/github/config.tsx
@@ -96,23 +96,36 @@ export const GitHubConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
-  transformation: {
-    issueTypeRequirement: '(feat|feature|proposal|requirement)',
-    issueTypeBug: '(bug|broken)',
-    issueTypeIncident: '(incident|failure)',
-    issuePriority: '(highest|high|medium|low|p0|p1|p2|p3)',
-    issueComponent: 'component(.*)',
-    issueSeverity: 'severity(.*)',
-    deploymentPattern: '(deploy|push-image)',
-    productionPattern: 'prod(.*)',
-    prType: 'type(.*)',
-    prComponent: 'component(.*)',
-    prBodyClosePattern:
-      
'(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[s]*.*(((and
 )?(#|https://github.com/%s/%s/issues/)d+[ ]*)+)',
-    refdiff: {
-      tagsLimit: 10,
-      tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+  dataScope: {
+    millerColumns: {
+      title: 'Repositories *',
+      subTitle: 'Select the repositories you would like to sync.',
+      firstColumnTitle: 'Organizations/Owners',
+    },
+    search: {
+      title: 'Add repositories outside of your organizations',
+      subTitle: 'Search for repositories and add to them',
+    },
+  },
+  scopeConfig: {
+    entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
+    transformation: {
+      issueTypeRequirement: '(feat|feature|proposal|requirement)',
+      issueTypeBug: '(bug|broken)',
+      issueTypeIncident: '(incident|failure)',
+      issuePriority: '(highest|high|medium|low|p0|p1|p2|p3)',
+      issueComponent: 'component(.*)',
+      issueSeverity: 'severity(.*)',
+      deploymentPattern: '(deploy|push-image)',
+      productionPattern: 'prod(.*)',
+      prType: 'type(.*)',
+      prComponent: 'component(.*)',
+      prBodyClosePattern:
+        
'(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[s]*.*(((and
 )?(#|https://github.com/%s/%s/issues/)d+[ ]*)+)',
+      refdiff: {
+        tagsLimit: 10,
+        tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
+      },
     },
   },
 };
diff --git a/config-ui/src/plugins/register/github/data-scope.tsx 
b/config-ui/src/plugins/register/github/data-scope.tsx
deleted file mode 100644
index 1d5f3b85c..000000000
--- a/config-ui/src/plugins/register/github/data-scope.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns, DataScopeSearch } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-import * as S from './styled';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const GitHubDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.githubId}`, name: 
it.name, data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.githubId}`, 
name: it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <S.DataScope>
-      <h3>Repositories *</h3>
-      <p>Select the repositories you would like to sync.</p>
-      <DataScopeMillerColumns
-        title="Organizations/Owners"
-        plugin="github"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-      <h4>Add repositories outside of your organizations</h4>
-      <p>Search for repositories and add to them</p>
-      <DataScopeSearch
-        plugin="github"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </S.DataScope>
-  );
-};
diff --git a/config-ui/src/plugins/register/github/index.ts 
b/config-ui/src/plugins/register/github/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/github/index.ts
+++ b/config-ui/src/plugins/register/github/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/github/styled.ts 
b/config-ui/src/plugins/register/github/styled.ts
index 5c7dddadf..71be509e7 100644
--- a/config-ui/src/plugins/register/github/styled.ts
+++ b/config-ui/src/plugins/register/github/styled.ts
@@ -18,12 +18,6 @@
 
 import styled from 'styled-components';
 
-export const DataScope = styled.div`
-  h4 {
-    margin-top: 16px;
-  }
-`;
-
 export const Transformation = styled.div`
   .issue-tracking {
     .issue-type {
diff --git a/config-ui/src/plugins/register/github/types.ts 
b/config-ui/src/plugins/register/github/types.ts
deleted file mode 100644
index c382b868c..000000000
--- a/config-ui/src/plugins/register/github/types.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  githubId: number;
-  name: string;
-  ownerId: ID;
-  language: string;
-  description: string;
-  cloneUrl: string;
-  HTMLUrl: string;
-};
diff --git a/config-ui/src/plugins/register/github_graphql/assets/icon.svg 
b/config-ui/src/plugins/register/github_graphql/assets/icon.svg
deleted file mode 100644
index ec7bb7704..000000000
--- a/config-ui/src/plugins/register/github_graphql/assets/icon.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<svg width="100" height="100" viewBox="0 0 36 36" fill="none" 
xmlns="http://www.w3.org/2000/svg";>
-    <path
-        d="M18 3C9.7125 3 3 9.7125 3 18C2.9983 21.1489 3.98822 24.2184 5.82933 
26.773C7.67043 29.3276 10.2692 31.2376 13.257 32.232C14.007 32.3625 14.2875 
31.9125 14.2875 31.518C14.2875 31.1625 14.268 29.982 14.268 28.725C10.5 29.4195 
9.525 27.807 9.225 26.9625C9.0555 26.5305 8.325 25.2 7.6875 24.843C7.1625 
24.5625 6.4125 23.868 7.668 23.85C8.85 23.8305 9.693 24.9375 9.975 
25.3875C11.325 27.6555 13.482 27.018 14.343 26.625C14.475 25.65 14.868 24.9945 
15.3 24.6195C11.9625 24.2445 8.475 22 [...]
-        fill="#7497F7" />
-</svg>
\ No newline at end of file
diff --git a/config-ui/src/plugins/register/github_graphql/config.ts 
b/config-ui/src/plugins/register/github_graphql/config.ts
deleted file mode 100644
index ca1c8e911..000000000
--- a/config-ui/src/plugins/register/github_graphql/config.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-import Icon from './assets/icon.svg';
-
-export const GitHubGraphqlConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'github_graphql',
-  name: 'GitHubGraphql',
-  icon: Icon,
-};
diff --git a/config-ui/src/plugins/register/github_graphql/index.ts 
b/config-ui/src/plugins/register/github_graphql/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/github_graphql/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/gitlab/config.tsx 
b/config-ui/src/plugins/register/gitlab/config.tsx
index 19ebbe925..bd8656f88 100644
--- a/config-ui/src/plugins/register/gitlab/config.tsx
+++ b/config-ui/src/plugins/register/gitlab/config.tsx
@@ -66,9 +66,22 @@ export const GitLabConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
-  transformation: {
-    deploymentPattern: '(deploy|push-image)',
-    productionPattern: 'prod(.*)',
+  dataScope: {
+    millerColumns: {
+      title: 'Projects *',
+      subTitle: 'Select the project you would like to sync.',
+      firstColumnTitle: 'Subgroups/Projects',
+    },
+    search: {
+      title: 'Add repositories outside of your projects',
+      subTitle: 'Search for repositories and add to them',
+    },
+  },
+  scopeConfig: {
+    entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
+    transformation: {
+      deploymentPattern: '(deploy|push-image)',
+      productionPattern: 'prod(.*)',
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/gitlab/data-scope.tsx 
b/config-ui/src/plugins/register/gitlab/data-scope.tsx
deleted file mode 100644
index 13da84c89..000000000
--- a/config-ui/src/plugins/register/gitlab/data-scope.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns, DataScopeSearch } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-import * as S from './styled';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const GitLabDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.gitlabId}`, name: 
it.name, data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.gitlabId}`, 
name: it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <S.DataScope>
-      <h3>Projects *</h3>
-      <p>Select the project you would like to sync.</p>
-      <DataScopeMillerColumns
-        title="Subgroups/Projects"
-        plugin="gitlab"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-      <h4>Add repositories outside of your projects</h4>
-      <p>Search for repositories and add to them</p>
-      <DataScopeSearch
-        plugin="gitlab"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </S.DataScope>
-  );
-};
diff --git a/config-ui/src/plugins/register/gitlab/index.ts 
b/config-ui/src/plugins/register/gitlab/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/gitlab/index.ts
+++ b/config-ui/src/plugins/register/gitlab/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/gitlab/styled.ts 
b/config-ui/src/plugins/register/gitlab/styled.ts
index c53a287b9..3de9b32b9 100644
--- a/config-ui/src/plugins/register/gitlab/styled.ts
+++ b/config-ui/src/plugins/register/gitlab/styled.ts
@@ -18,12 +18,6 @@
 
 import styled from 'styled-components';
 
-export const DataScope = styled.div`
-  h4 {
-    margin-top: 16px;
-  }
-`;
-
 export const Transformation = styled.div``;
 
 export const CICD = styled.div`
diff --git a/config-ui/src/plugins/register/gitlab/types.ts 
b/config-ui/src/plugins/register/gitlab/types.ts
deleted file mode 100644
index 4b5ac3c67..000000000
--- a/config-ui/src/plugins/register/gitlab/types.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  gitlabId: ID;
-  name: string;
-  pathWithNamespace: string;
-  creatorId: ID;
-  defaultBranch: string;
-  description: string;
-  openIssuesCount: number;
-  starCount: number;
-  visibility: string;
-  webUrl: string;
-  httpUrlToRepo: string;
-};
diff --git a/config-ui/src/plugins/register/jenkins/config.ts 
b/config-ui/src/plugins/register/jenkins/config.ts
index ac63788a0..516b4703d 100644
--- a/config-ui/src/plugins/register/jenkins/config.ts
+++ b/config-ui/src/plugins/register/jenkins/config.ts
@@ -48,9 +48,17 @@ export const JenkinsConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CICD'],
-  transformation: {
-    deploymentPattern: '(deploy|push-image)',
-    productionPattern: 'prod(.*)',
+  dataScope: {
+    millerColumns: {
+      title: 'Jobs *',
+      subTitle: 'Select the jobs you would like to sync.',
+    },
+  },
+  scopeConfig: {
+    entities: ['CICD'],
+    transformation: {
+      deploymentPattern: '(deploy|push-image)',
+      productionPattern: 'prod(.*)',
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/jenkins/index.ts 
b/config-ui/src/plugins/register/jenkins/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/jenkins/index.ts
+++ b/config-ui/src/plugins/register/jenkins/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/jira/config.tsx 
b/config-ui/src/plugins/register/jira/config.tsx
index 47ec1c07e..98116836f 100644
--- a/config-ui/src/plugins/register/jira/config.tsx
+++ b/config-ui/src/plugins/register/jira/config.tsx
@@ -54,11 +54,19 @@ export const JiraConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['TICKET', 'CROSS'],
-  transformation: {
-    storyPointField: '',
-    typeMappings: {},
-    remotelinkCommitShaPattern: '',
-    remotelinkRepoPattern: [''],
+  dataScope: {
+    millerColumns: {
+      title: 'Boards *',
+      subTitle: 'Select the boards you would like to sync.',
+    },
+  },
+  scopeConfig: {
+    entities: ['TICKET', 'CROSS'],
+    transformation: {
+      storyPointField: '',
+      typeMappings: {},
+      remotelinkCommitShaPattern: '',
+      remotelinkRepoPattern: [''],
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/jira/data-scope.tsx 
b/config-ui/src/plugins/register/jira/data-scope.tsx
deleted file mode 100644
index 83a781b2a..000000000
--- a/config-ui/src/plugins/register/jira/data-scope.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const JiraDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.boardId}`, name: 
it.name, data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.boardId}`, 
name: it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <>
-      <h3>Boards *</h3>
-      <p>Select the boards you would like to sync.</p>
-      <DataScopeMillerColumns
-        plugin="jira"
-        columnCount={1}
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </>
-  );
-};
diff --git a/config-ui/src/plugins/register/jira/index.ts 
b/config-ui/src/plugins/register/jira/index.ts
index 14fdb67cd..5f16858cb 100644
--- a/config-ui/src/plugins/register/jira/index.ts
+++ b/config-ui/src/plugins/register/jira/index.ts
@@ -17,5 +17,4 @@
  */
 
 export * from './config';
-export * from './data-scope';
 export * from './transformation';
diff --git a/config-ui/src/plugins/register/jira/types.ts 
b/config-ui/src/plugins/register/jira/types.ts
deleted file mode 100644
index 6a81816b8..000000000
--- a/config-ui/src/plugins/register/jira/types.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  boardId: ID;
-  name: string;
-  projectId: ID;
-  self: string;
-  type: string;
-};
diff --git a/config-ui/src/plugins/register/org/config.ts 
b/config-ui/src/plugins/register/org/config.ts
deleted file mode 100644
index d39717a5b..000000000
--- a/config-ui/src/plugins/register/org/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const OrgConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'org',
-  name: 'Org',
-};
diff --git a/config-ui/src/plugins/register/org/index.ts 
b/config-ui/src/plugins/register/org/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/org/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/pagerduty/config.tsx 
b/config-ui/src/plugins/register/pagerduty/config.tsx
index 56d1f8a0a..cadaf33c6 100644
--- a/config-ui/src/plugins/register/pagerduty/config.tsx
+++ b/config-ui/src/plugins/register/pagerduty/config.tsx
@@ -53,6 +53,10 @@ export const PagerDutyConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['TICKET'],
-  transformation: null,
+  dataScope: {
+    millerColumns: {
+      title: 'PagerDuty Services *',
+      subTitle: 'You can either add services by searching or selecting from 
the following directory.',
+    },
+  },
 };
diff --git a/config-ui/src/plugins/register/pagerduty/data-scope.tsx 
b/config-ui/src/plugins/register/pagerduty/data-scope.tsx
deleted file mode 100644
index 1bd6d2f11..000000000
--- a/config-ui/src/plugins/register/pagerduty/data-scope.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-import * as S from './styled';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const PagerDutyDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: `${it.id}`, name: it.name, 
data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: `${it.id}`, name: 
it.name, data: it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <S.DataScope>
-      <h3>PagerDuty Services *</h3>
-      <p>You can either add services by searching or selecting from the 
following directory.</p>
-      <DataScopeMillerColumns
-        title="PagerDuty Services *"
-        columnCount={1}
-        plugin="pagerduty"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </S.DataScope>
-  );
-};
diff --git a/config-ui/src/plugins/register/pagerduty/index.ts 
b/config-ui/src/plugins/register/pagerduty/index.ts
index 46ed09889..de415db39 100644
--- a/config-ui/src/plugins/register/pagerduty/index.ts
+++ b/config-ui/src/plugins/register/pagerduty/index.ts
@@ -17,4 +17,3 @@
  */
 
 export * from './config';
-export * from './data-scope';
diff --git a/config-ui/src/plugins/register/pagerduty/styled.ts 
b/config-ui/src/plugins/register/pagerduty/styled.ts
deleted file mode 100644
index 2a80753ef..000000000
--- a/config-ui/src/plugins/register/pagerduty/styled.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import styled from 'styled-components';
-
-export const DataScope = styled.div``;
diff --git a/config-ui/src/plugins/register/pagerduty/types.ts 
b/config-ui/src/plugins/register/pagerduty/types.ts
deleted file mode 100644
index 85a835aba..000000000
--- a/config-ui/src/plugins/register/pagerduty/types.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  id: ID;
-  name: string;
-};
diff --git a/config-ui/src/plugins/register/refdiff/config.ts 
b/config-ui/src/plugins/register/refdiff/config.ts
deleted file mode 100644
index ff7864b87..000000000
--- a/config-ui/src/plugins/register/refdiff/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const RefDiffConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'refdiff',
-  name: 'RefDiff',
-};
diff --git a/config-ui/src/plugins/register/refdiff/index.ts 
b/config-ui/src/plugins/register/refdiff/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/refdiff/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/sonarqube/config.ts 
b/config-ui/src/plugins/register/sonarqube/config.ts
index f8dce2c3f..10a0f04cc 100644
--- a/config-ui/src/plugins/register/sonarqube/config.ts
+++ b/config-ui/src/plugins/register/sonarqube/config.ts
@@ -44,6 +44,10 @@ export const SonarQubeConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['CODEQUALITY', 'CROSS'],
-  transformation: null,
+  dataScope: {
+    millerColumns: {
+      title: 'Add Repositories by Selecting from the Directory',
+      subTitle: 'The following directory lists out all projects from 
SonarQube.',
+    },
+  },
 };
diff --git a/config-ui/src/plugins/register/sonarqube/data-scope.tsx 
b/config-ui/src/plugins/register/sonarqube/data-scope.tsx
deleted file mode 100644
index 3d22360af..000000000
--- a/config-ui/src/plugins/register/sonarqube/data-scope.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { SonarQubeScopeType } from './types';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: SonarQubeScopeType[];
-  selectedItems: SonarQubeScopeType[];
-  onChangeItems: (selectedItems: SonarQubeScopeType[]) => void;
-}
-
-export const SonarQubeDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () => props.selectedItems.map((it) => ({ id: it.projectKey, data: it })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () => (props.disabledItems ?? []).map((it) => ({ id: it.projectKey, data: 
it })),
-    [props.disabledItems],
-  );
-
-  return (
-    <>
-      <h4>Add Repositories by Selecting from the Directory</h4>
-      <p>The following directory lists out all projects from SonarQube.</p>
-      <DataScopeMillerColumns
-        columnCount={1}
-        title="Projects"
-        plugin="sonarqube"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </>
-  );
-};
diff --git a/config-ui/src/plugins/register/sonarqube/index.ts 
b/config-ui/src/plugins/register/sonarqube/index.ts
index 46ed09889..de415db39 100644
--- a/config-ui/src/plugins/register/sonarqube/index.ts
+++ b/config-ui/src/plugins/register/sonarqube/index.ts
@@ -17,4 +17,3 @@
  */
 
 export * from './config';
-export * from './data-scope';
diff --git a/config-ui/src/plugins/register/sonarqube/types.ts 
b/config-ui/src/plugins/register/sonarqube/types.ts
deleted file mode 100644
index 4b723c1dc..000000000
--- a/config-ui/src/plugins/register/sonarqube/types.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type SonarQubeScopeType = {
-  connectionId: ID;
-  projectKey: string;
-  name: string;
-};
diff --git a/config-ui/src/plugins/register/starrocks/config.ts 
b/config-ui/src/plugins/register/starrocks/config.ts
deleted file mode 100644
index b9346597b..000000000
--- a/config-ui/src/plugins/register/starrocks/config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import type { PluginConfigType } from '../../types';
-
-import { BasePipelineConfig } from '../base';
-
-export const StarRocksConfig: PluginConfigType = {
-  ...BasePipelineConfig,
-  plugin: 'starrocks',
-  name: 'StarRocks',
-};
diff --git a/config-ui/src/plugins/register/starrocks/index.ts 
b/config-ui/src/plugins/register/starrocks/index.ts
deleted file mode 100644
index de415db39..000000000
--- a/config-ui/src/plugins/register/starrocks/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './config';
diff --git a/config-ui/src/plugins/register/tapd/config.tsx 
b/config-ui/src/plugins/register/tapd/config.tsx
index 8be01df61..4b8b16353 100644
--- a/config-ui/src/plugins/register/tapd/config.tsx
+++ b/config-ui/src/plugins/register/tapd/config.tsx
@@ -71,9 +71,17 @@ export const TAPDConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['TICKET', 'CROSS'],
-  transformation: {
-    typeMappings: {},
-    statusMappings: {},
+  dataScope: {
+    millerColumns: {
+      title: 'Workspaces *',
+      subTitle: 'Type in the company ID to list all the workspaces you want to 
sync.',
+    },
+  },
+  scopeConfig: {
+    entities: ['TICKET', 'CROSS'],
+    transformation: {
+      typeMappings: {},
+      statusMappings: {},
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/tapd/data-scope.tsx 
b/config-ui/src/plugins/register/tapd/data-scope.tsx
index 4362b2f1d..4c718cbc9 100644
--- a/config-ui/src/plugins/register/tapd/data-scope.tsx
+++ b/config-ui/src/plugins/register/tapd/data-scope.tsx
@@ -32,7 +32,7 @@ interface Props {
   onChangeItems: (selectedItems: ScopeItemType[]) => void;
 }
 
-export const TapdDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
+export const DataScope = ({ connectionId, onChangeItems, ...props }: Props) => 
{
   const selectedItems = useMemo(
     () => props.selectedItems.map((it) => ({ id: `${it.id}`, name: it.name, 
data: it })),
     [props.selectedItems],
diff --git a/config-ui/src/plugins/register/teambition/config.tsx 
b/config-ui/src/plugins/register/teambition/config.tsx
index df4e29bec..8bae32a86 100644
--- a/config-ui/src/plugins/register/teambition/config.tsx
+++ b/config-ui/src/plugins/register/teambition/config.tsx
@@ -85,6 +85,14 @@ export const TeambitionConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['TICKET'],
-  transformation: {},
+  dataScope: {
+    millerColumns: {
+      title: '',
+      subTitle: '',
+    },
+  },
+  scopeConfig: {
+    entities: ['TICKET'],
+    transformation: {},
+  },
 };
diff --git a/config-ui/src/plugins/register/webook/config.ts 
b/config-ui/src/plugins/register/webook/config.ts
index 4aa4a557b..faeff4183 100644
--- a/config-ui/src/plugins/register/webook/config.ts
+++ b/config-ui/src/plugins/register/webook/config.ts
@@ -20,13 +20,22 @@ import type { PluginConfigType } from '../../types';
 import { PluginType } from '../../types';
 
 import Icon from './assets/icon.svg';
-import { BasePipelineConfig } from '../base';
 
 export const WebhookConfig: PluginConfigType = {
-  ...BasePipelineConfig,
   plugin: 'webhook',
   name: 'Webhook',
   type: PluginType.Connection,
   icon: Icon,
   sort: 100,
+  connection: {
+    docLink: '',
+    fields: [],
+    initialValues: {},
+  },
+  dataScope: {
+    millerColumns: {
+      title: '',
+      subTitle: '',
+    },
+  },
 };
diff --git a/config-ui/src/plugins/register/zentao/config.ts 
b/config-ui/src/plugins/register/zentao/config.ts
index 27f34b16a..64388d791 100644
--- a/config-ui/src/plugins/register/zentao/config.ts
+++ b/config-ui/src/plugins/register/zentao/config.ts
@@ -49,6 +49,10 @@ export const ZenTaoConfig: PluginConfigType = {
       },
     ],
   },
-  entities: ['TICKET'],
-  transformation: null,
+  dataScope: {
+    millerColumns: {
+      title: 'Repositories *',
+      subTitle: 'Select the repositories you would like to sync.',
+    },
+  },
 };
diff --git a/config-ui/src/plugins/register/zentao/data-scope.tsx 
b/config-ui/src/plugins/register/zentao/data-scope.tsx
deleted file mode 100644
index ab2f60ea4..000000000
--- a/config-ui/src/plugins/register/zentao/data-scope.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-import { useMemo } from 'react';
-
-import { DataScopeMillerColumns } from '@/plugins';
-
-import type { ScopeItemType } from './types';
-
-interface Props {
-  connectionId: ID;
-  disabledItems?: ScopeItemType[];
-  selectedItems: ScopeItemType[];
-  onChangeItems: (selectedItems: ScopeItemType[]) => void;
-}
-
-export const ZentaoDataScope = ({ connectionId, onChangeItems, ...props }: 
Props) => {
-  const selectedItems = useMemo(
-    () =>
-      props.selectedItems.map((it) => ({
-        id: it.type === 'project' ? `project/${it.id}` : `product/${it.id}`,
-        name: it.name,
-        data: it,
-      })),
-    [props.selectedItems],
-  );
-
-  const disabledItems = useMemo(
-    () =>
-      (props.disabledItems ?? []).map((it) => ({
-        id: it.type === 'project' ? `project/${it.id}` : `product/${it.id}`,
-        name: it.name,
-        data: it,
-      })),
-    [props.disabledItems],
-  );
-
-  return (
-    <>
-      <h3>Repositories *</h3>
-      <p>Select the repositories you would like to sync.</p>
-      <DataScopeMillerColumns
-        plugin="zentao"
-        connectionId={connectionId}
-        disabledItems={disabledItems}
-        selectedItems={selectedItems}
-        onChangeItems={onChangeItems}
-      />
-    </>
-  );
-};
diff --git a/config-ui/src/plugins/register/zentao/index.ts 
b/config-ui/src/plugins/register/zentao/index.ts
index 46ed09889..de415db39 100644
--- a/config-ui/src/plugins/register/zentao/index.ts
+++ b/config-ui/src/plugins/register/zentao/index.ts
@@ -17,4 +17,3 @@
  */
 
 export * from './config';
-export * from './data-scope';
diff --git a/config-ui/src/plugins/register/zentao/types.ts 
b/config-ui/src/plugins/register/zentao/types.ts
deleted file mode 100644
index 3b6c23b98..000000000
--- a/config-ui/src/plugins/register/zentao/types.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export type ScopeItemType = {
-  connectionId: ID;
-  id: string;
-  name: string;
-  type: 'product/normal' | 'product/branch' | 'product/platform' | 'project';
-  // and others
-};
diff --git a/config-ui/src/plugins/types.ts b/config-ui/src/plugins/types.ts
index 772368d46..5665f2092 100644
--- a/config-ui/src/plugins/types.ts
+++ b/config-ui/src/plugins/types.ts
@@ -33,6 +33,19 @@ export type PluginConfigType = {
     initialValues?: Record<string, any>;
     fields: any[];
   };
-  entities: string[];
-  transformation: any;
+  dataScope: {
+    millerColumns: {
+      title: string;
+      subTitle: string;
+      firstColumnTitle?: string;
+    };
+    search?: {
+      title?: string;
+      subTitle?: string;
+    };
+  };
+  scopeConfig?: {
+    entities: string[];
+    transformation: any;
+  };
 };
diff --git a/config-ui/src/plugins/utils.ts b/config-ui/src/plugins/utils.ts
index ac93c7e02..2c3303642 100644
--- a/config-ui/src/plugins/utils.ts
+++ b/config-ui/src/plugins/utils.ts
@@ -16,6 +16,11 @@
  *
  */
 
+import PluginIcon from '@/images/plugin-icon.svg';
+
+import { PluginConfig } from './config';
+import { PluginConfigType, PluginType } from './types';
+
 export const getPluginId = (plugin: string) => {
   switch (plugin) {
     case 'github':
@@ -34,3 +39,28 @@ export const getPluginId = (plugin: string) => {
       return 'id';
   }
 };
+
+export const getPluginConfig = (name: string): PluginConfigType => {
+  let pluginConfig = PluginConfig.find((plugin) => plugin.plugin === name) as 
PluginConfigType;
+  if (!pluginConfig) {
+    pluginConfig = {
+      type: PluginType.Pipeline,
+      plugin: name,
+      name: name,
+      icon: PluginIcon,
+      sort: 101,
+      connection: {
+        docLink: '',
+        initialValues: {},
+        fields: [],
+      },
+      dataScope: {
+        millerColumns: {
+          title: '',
+          subTitle: '',
+        },
+      },
+    };
+  }
+  return pluginConfig;
+};
diff --git a/config-ui/src/store/connections/context.tsx 
b/config-ui/src/store/connections/context.tsx
index caec3a22a..d9220e87b 100644
--- a/config-ui/src/store/connections/context.tsx
+++ b/config-ui/src/store/connections/context.tsx
@@ -47,7 +47,7 @@ export const ConnectionContextProvider = ({ children, 
...props }: Props) => {
   const queryConnection = async (plugin: string) => {
     try {
       const res = await API.getConnection(plugin);
-      const { name, icon, isBeta, entities } = plugins.find((p) => p.plugin 
=== plugin) as PluginConfigType;
+      const { name, icon, isBeta, scopeConfig } = plugins.find((p) => p.plugin 
=== plugin) as PluginConfigType;
 
       return res.map((connection) => ({
         ...connection,
@@ -55,7 +55,7 @@ export const ConnectionContextProvider = ({ children, 
...props }: Props) => {
         pluginName: name,
         icon,
         isBeta: isBeta ?? false,
-        entities,
+        entities: scopeConfig?.entities ?? [],
       }));
     } catch {
       return [];

Reply via email to