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 01ee5c76b fix(config-ui): some bugs (#4587)
01ee5c76b is described below

commit 01ee5c76bc3b295415bde2e529b63912467d0cab
Author: 青湛 <[email protected]>
AuthorDate: Mon Mar 6 15:18:18 2023 +0800

    fix(config-ui): some bugs (#4587)
    
    * fix(config-ui): bp not properly filtered
    
    * fix(config-ui): rate limit lost default value
    
    * feat(config-ui): add default value for transformation
    
    * fix(config-ui): adjust the rules for project name
    
    * fix(config-ui): not reset value after project create
    
    * fix(config-ui): adjust the list page parameter pageSize
    
    * fix(config-ui): endpoint subLabel error for gitlab
    
    * feat(config-ui): add plugin customize
    
    * fix(config-ui): add default value for use-operator's formatReason
    
    * fix(config-ui): optimize the creation of webhook in the project
    
    * fix(config-ui): project name regular problem
    
    * fix(config-ui): project name regular problem
---
 config-ui/src/hooks/use-operator.ts                |  4 +-
 .../advanced-editor/example/customize.ts}          | 22 +++++++-
 .../components/advanced-editor/example/index.ts    | 14 ++++--
 config-ui/src/pages/blueprint/home/api.ts          |  7 ++-
 config-ui/src/pages/blueprint/home/use-home.ts     |  7 ++-
 .../src/pages/project/detail/panel/settings.tsx    |  2 +-
 config-ui/src/pages/project/detail/use-project.ts  |  2 +-
 config-ui/src/pages/project/home/index.tsx         |  7 ++-
 config-ui/src/pages/project/home/use-project.ts    |  4 +-
 .../connection-form/fields/rate-limit.tsx          |  2 +-
 config-ui/src/plugins/config.ts                    |  2 +
 .../src/plugins/register/bitbucket/config.tsx      |  7 ++-
 .../plugins/register/bitbucket/transformation.tsx  | 58 ++++++++++++----------
 .../register/customize/config.ts}                  | 10 +++-
 .../api.ts => plugins/register/customize/index.ts} |  4 +-
 config-ui/src/plugins/register/github/config.tsx   | 28 ++++++-----
 .../src/plugins/register/github/transformation.tsx | 28 +++++++----
 .../register/gitlab/components/ci-cd/index.tsx     |  4 +-
 config-ui/src/plugins/register/gitlab/config.tsx   |  6 +--
 config-ui/src/plugins/register/jenkins/config.ts   |  4 +-
 config-ui/src/plugins/register/jira/config.tsx     |  2 +-
 .../register/webook/create-dialog/use-create.ts    |  3 +-
 config-ui/src/store/connections/api.ts             |  4 +-
 config-ui/src/store/transformations/api.ts         |  8 ++-
 .../src/store/transformations/use-context-value.ts |  2 +-
 25 files changed, 155 insertions(+), 86 deletions(-)

diff --git a/config-ui/src/hooks/use-operator.ts 
b/config-ui/src/hooks/use-operator.ts
index 1dba1f79c..58e917457 100644
--- a/config-ui/src/hooks/use-operator.ts
+++ b/config-ui/src/hooks/use-operator.ts
@@ -24,7 +24,7 @@ export const useOperator = <T>(
   request: (paylod?: any) => Promise<T>,
   options?: {
     callback?: () => void;
-    formatReason?: () => string;
+    formatReason?: (err: unknown) => string;
     formatMessage?: () => string;
   },
 ) => {
@@ -33,7 +33,7 @@ export const useOperator = <T>(
   const handleSubmit = async (paylod?: any) => {
     const [success] = await operator(() => request(paylod), {
       setOperating,
-      formatReason: options?.formatReason,
+      formatReason: options?.formatReason ? options?.formatMessage : (err) => 
(err as any).response?.data?.message,
       formatMessage: options?.formatMessage,
     });
 
diff --git a/config-ui/src/store/transformations/api.ts 
b/config-ui/src/pages/blueprint/components/advanced-editor/example/customize.ts
similarity index 66%
copy from config-ui/src/store/transformations/api.ts
copy to 
config-ui/src/pages/blueprint/components/advanced-editor/example/customize.ts
index da7ad6e04..d3dd971ad 100644
--- a/config-ui/src/store/transformations/api.ts
+++ 
b/config-ui/src/pages/blueprint/components/advanced-editor/example/customize.ts
@@ -16,6 +16,24 @@
  *
  */
 
-import { request } from '@/utils';
+const customize = [
+  [
+    {
+      plugin: 'customize',
+      options: {
+        transformationRules: [
+          {
+            table: 'issues',
+            rawDataTable: '_raw_jira_api_issues',
+            rawDataParams: '{"ConnectionId":1,"BoardId":8}',
+            mapping: {
+              x_test: 'fields.status.name',
+            },
+          },
+        ],
+      },
+    },
+  ],
+];
 
-export const getTransformation = (plugin: string) => 
request(`/plugins/${plugin}/transformation_rules`);
+export default customize;
diff --git 
a/config-ui/src/pages/blueprint/components/advanced-editor/example/index.ts 
b/config-ui/src/pages/blueprint/components/advanced-editor/example/index.ts
index 454afea12..7da6da3ca 100644
--- a/config-ui/src/pages/blueprint/components/advanced-editor/example/index.ts
+++ b/config-ui/src/pages/blueprint/components/advanced-editor/example/index.ts
@@ -16,15 +16,16 @@
  *
  */
 
+import customize from './customize';
+import dbt from './dbt';
+import feishu from './feishu';
 import general from './general';
-import refdiff from './refdiff';
 import gitextractor from './gitextractor';
 import github from './github';
 import gitlab from './gitlab';
-import jira from './jira';
 import jenkins from './jenkins';
-import feishu from './feishu';
-import dbt from './dbt';
+import jira from './jira';
+import refdiff from './refdiff';
 import starrocks from './starrocks';
 import tapd from './tapd';
 import zentao from './zentao';
@@ -90,4 +91,9 @@ export const EXAMPLE_CONFIG = [
     name: 'Load StarRocks Configuration',
     config: starrocks,
   },
+  {
+    id: 'customize',
+    name: 'Load Customize Configuration',
+    config: customize,
+  },
 ];
diff --git a/config-ui/src/pages/blueprint/home/api.ts 
b/config-ui/src/pages/blueprint/home/api.ts
index 83ce14174..b31204b0e 100644
--- a/config-ui/src/pages/blueprint/home/api.ts
+++ b/config-ui/src/pages/blueprint/home/api.ts
@@ -18,4 +18,9 @@
 
 import { request } from '@/utils';
 
-export const getBlueprints = () => request('/blueprints');
+type GetBlueprintsParams = {
+  page: number;
+  pageSize: number;
+};
+
+export const getBlueprints = (params: GetBlueprintsParams) => 
request('/blueprints', { data: params });
diff --git a/config-ui/src/pages/blueprint/home/use-home.ts 
b/config-ui/src/pages/blueprint/home/use-home.ts
index ac55b02d0..0295666f8 100644
--- a/config-ui/src/pages/blueprint/home/use-home.ts
+++ b/config-ui/src/pages/blueprint/home/use-home.ts
@@ -35,7 +35,10 @@ export const useHome = () => {
   const getBlueprints = async () => {
     setLoading(true);
     try {
-      const res = await API.getBlueprints();
+      const res = await API.getBlueprints({
+        page: 1,
+        pageSize: 200,
+      });
       setBlueprints(res.blueprints);
     } finally {
       setLoading(false);
@@ -57,7 +60,7 @@ export const useHome = () => {
           case 'custom':
             return !presets.includes(bp.cronConfig);
           default:
-            return bp.cronConfig === type;
+            return !bp.isManual && bp.cronConfig === type;
         }
       }),
     );
diff --git a/config-ui/src/pages/project/detail/panel/settings.tsx 
b/config-ui/src/pages/project/detail/panel/settings.tsx
index f22045507..807e504fb 100644
--- a/config-ui/src/pages/project/detail/panel/settings.tsx
+++ b/config-ui/src/pages/project/detail/panel/settings.tsx
@@ -47,7 +47,7 @@ export const SettingsPanel = ({ project, onUpdate }: Props) 
=> {
       <S.Settings>
         <div className="block">
           <h3>Project Name *</h3>
-          <p>Edit your project name.</p>
+          <p>Edit your project name with letters, numbers, -, _ or /</p>
           <InputGroup value={name} onChange={(e) => setName(e.target.value)} />
         </div>
         <div className="block">
diff --git a/config-ui/src/pages/project/detail/use-project.ts 
b/config-ui/src/pages/project/detail/use-project.ts
index 01c1a3523..227b1ec23 100644
--- a/config-ui/src/pages/project/detail/use-project.ts
+++ b/config-ui/src/pages/project/detail/use-project.ts
@@ -55,7 +55,7 @@ export const useProject = (name: string) => {
   }, []);
 
   const handleUpdate = async (newName: string, enableDora: boolean) => {
-    if (!/^\w+$/.test(newName)) {
+    if (!/^(\w|-|\/)+$/.test(newName)) {
       toast.error('Please enter alphanumeric or underscore');
       return;
     }
diff --git a/config-ui/src/pages/project/home/index.tsx 
b/config-ui/src/pages/project/home/index.tsx
index eed3215f4..bad481272 100644
--- a/config-ui/src/pages/project/home/index.tsx
+++ b/config-ui/src/pages/project/home/index.tsx
@@ -37,7 +37,10 @@ export const ProjectHomePage = () => {
   const history = useHistory();
 
   const handleShowDialog = () => setIsOpen(true);
-  const handleHideDialog = () => setIsOpen(false);
+  const handleHideDialog = () => {
+    setIsOpen(false);
+    setName('');
+  };
 
   const { loading, operating, projects, onSave } = useProject<ProjectItem>({
     name,
@@ -111,7 +114,7 @@ export const ProjectHomePage = () => {
         <S.DialogInner>
           <div className="block">
             <h3>Project Name *</h3>
-            <p>Give your project a unique name.</p>
+            <p>Give your project a unique name with letters, numbers, -, _ or 
/</p>
             <InputGroup placeholder="Your Project Name" value={name} 
onChange={(e) => setName(e.target.value)} />
           </div>
           <div className="block">
diff --git a/config-ui/src/pages/project/home/use-project.ts 
b/config-ui/src/pages/project/home/use-project.ts
index 17245fa0d..be902d630 100644
--- a/config-ui/src/pages/project/home/use-project.ts
+++ b/config-ui/src/pages/project/home/use-project.ts
@@ -37,7 +37,7 @@ export const useProject = <T>({ name, enableDora, 
onHideDialog }: Props) => {
   const getProjects = async () => {
     setLoading(true);
     try {
-      const res = await API.getProjects({ page: 1, pageSize: 100 });
+      const res = await API.getProjects({ page: 1, pageSize: 200 });
       setProjects(
         res.projects.map((it: any) => ({
           name: it.name,
@@ -53,7 +53,7 @@ export const useProject = <T>({ name, enableDora, 
onHideDialog }: Props) => {
   }, []);
 
   const handleSave = async () => {
-    if (!/^\w+$/.test(name)) {
+    if (!/^(\w|-|\/)+$/.test(name)) {
       toast.error('Please enter alphanumeric or underscore');
       return;
     }
diff --git 
a/config-ui/src/plugins/components/connection-form/fields/rate-limit.tsx 
b/config-ui/src/plugins/components/connection-form/fields/rate-limit.tsx
index a92e72a4d..8e6e4f09b 100644
--- a/config-ui/src/plugins/components/connection-form/fields/rate-limit.tsx
+++ b/config-ui/src/plugins/components/connection-form/fields/rate-limit.tsx
@@ -70,7 +70,7 @@ export const ConnectionRateLimit = ({
 
   useEffect(() => {
     setChecked(value ? true : false);
-  }, []);
+  }, [value]);
 
   const handleChange = (e: React.FormEvent<HTMLInputElement>) => {
     const checked = (e.target as HTMLInputElement).checked;
diff --git a/config-ui/src/plugins/config.ts b/config-ui/src/plugins/config.ts
index 6cf92c667..b4d836e05 100644
--- a/config-ui/src/plugins/config.ts
+++ b/config-ui/src/plugins/config.ts
@@ -20,6 +20,7 @@ import type { PluginConfigType } from './types';
 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';
@@ -41,6 +42,7 @@ export const PluginConfig: PluginConfigType[] = [
   AEConfig,
   AzureConfig,
   BitBucketConfig,
+  CustomizeConfig,
   DBTConfig,
   DORAConfig,
   FeiShuConfig,
diff --git a/config-ui/src/plugins/register/bitbucket/config.tsx 
b/config-ui/src/plugins/register/bitbucket/config.tsx
index c3db9da8d..88ac22f37 100644
--- a/config-ui/src/plugins/register/bitbucket/config.tsx
+++ b/config-ui/src/plugins/register/bitbucket/config.tsx
@@ -62,10 +62,13 @@ export const BitBucketConfig: PluginConfigType = {
   transformation: {
     issueStatusTodo: 'new,open',
     issueStatusInProgress: '',
-    issueStatusDone: 'resolved,closed',
+    issueStatusDone: 'closed',
     issueStatusOther: 'on hold,wontfix,duplicate,invalid',
     productionPattern: '',
     deploymentPattern: '',
-    refdiff: null,
+    refdiff: {
+      tagsOrder: 10,
+      tagsPattern: /v\d+\.\d+(\.\d+(-rc)*\d*)*$/,
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/bitbucket/transformation.tsx 
b/config-ui/src/plugins/register/bitbucket/transformation.tsx
index 20bac6b3e..16a8d4332 100644
--- a/config-ui/src/plugins/register/bitbucket/transformation.tsx
+++ b/config-ui/src/plugins/register/bitbucket/transformation.tsx
@@ -16,17 +16,8 @@
  *
  */
 
-import React, {useMemo, useState} from 'react';
-import {
-  FormGroup,
-  InputGroup,
-  Tag,
-  Radio,
-  Icon,
-  Collapse,
-  Intent,
-  Checkbox,
-} from '@blueprintjs/core';
+import React, { useMemo, useState, useEffect } from 'react';
+import { FormGroup, InputGroup, Tag, Radio, Icon, Collapse, Intent, Checkbox } 
from '@blueprintjs/core';
 
 import { ExternalLink, HelpTooltip, Divider, MultiSelector } from 
'@/components';
 
@@ -42,12 +33,22 @@ const ALL_STATES = ['new', 'open', 'resolved', 'closed', 
'on hold', 'wontfix', '
 export const BitbucketTransformation = ({ transformation, setTransformation }: 
Props) => {
   const [enableCICD, setEnableCICD] = useState(false);
   const [openAdditionalSettings, setOpenAdditionalSettings] = useState(false);
-  const selectedStates = useMemo(() => [
-    ...transformation.issueStatusTodo ? 
transformation.issueStatusTodo.split(',') : [],
-    ...transformation.issueStatusInProgress ? 
transformation.issueStatusInProgress.split(',') : [],
-    ...transformation.issueStatusDone ? 
transformation.issueStatusDone.split(',') : [],
-    ...transformation.issueStatusOther ? 
transformation.issueStatusOther.split(',') : [],
-  ], [transformation]);
+
+  useEffect(() => {
+    if (transformation.refdiff) {
+      setOpenAdditionalSettings(true);
+    }
+  }, [transformation]);
+
+  const selectedStates = useMemo(
+    () => [
+      ...(transformation.issueStatusTodo ? 
transformation.issueStatusTodo.split(',') : []),
+      ...(transformation.issueStatusInProgress ? 
transformation.issueStatusInProgress.split(',') : []),
+      ...(transformation.issueStatusDone ? 
transformation.issueStatusDone.split(',') : []),
+      ...(transformation.issueStatusOther ? 
transformation.issueStatusOther.split(',') : []),
+    ],
+    [transformation],
+  );
 
   const handleChangeCICDEnable = (b: boolean) => {
     if (b) {
@@ -156,12 +157,19 @@ export const BitbucketTransformation = ({ transformation, 
setTransformation }: P
         </h3>
         <p>
           DevLake uses BitBucket{' '}
-          <ExternalLink 
link="https://support.atlassian.com/bitbucket-cloud/docs/set-up-and-monitor-deployments/";>deployments</ExternalLink>
-          {' '}as DevLake deployments. If you are NOT using BitBucket 
deployments, DevLake provides the option to detect deployments from BitBucket 
pipeline steps.{' '}
-          <ExternalLink 
link="https://devlake.apache.org/docs/Configuration/BitBucket#step-3---adding-transformation-rules-optional";>Learn
 more</ExternalLink>
+          <ExternalLink 
link="https://support.atlassian.com/bitbucket-cloud/docs/set-up-and-monitor-deployments/";>
+            deployments
+          </ExternalLink>{' '}
+          as DevLake deployments. If you are NOT using BitBucket deployments, 
DevLake provides the option to detect
+          deployments from BitBucket pipeline steps.{' '}
+          <ExternalLink 
link="https://devlake.apache.org/docs/Configuration/BitBucket#step-3---adding-transformation-rules-optional";>
+            Learn more
+          </ExternalLink>
         </p>
-        <Checkbox label="Detect Deployments from Pipeline steps in BitBucket" 
checked={enableCICD}
-                  onChange={(e) => handleChangeCICDEnable((e.target as 
HTMLInputElement).checked)}
+        <Checkbox
+          label="Detect Deployments from Pipeline steps in BitBucket"
+          checked={enableCICD}
+          onChange={(e) => handleChangeCICDEnable((e.target as 
HTMLInputElement).checked)}
         />
         {enableCICD && (
           <>
@@ -176,7 +184,7 @@ export const BitbucketTransformation = ({ transformation, 
setTransformation }: P
                 }
               >
                 <InputGroup
-                  placeholder="(?i)deploy"
+                  placeholder="(deploy|push-image)"
                   value={transformation.deploymentPattern}
                   onChange={(e) =>
                     setTransformation({
@@ -196,7 +204,7 @@ export const BitbucketTransformation = ({ transformation, 
setTransformation }: P
                 }
               >
                 <InputGroup
-                  placeholder="(?i)production"
+                  placeholder="production"
                   value={transformation.productionPattern}
                   onChange={(e) =>
                     setTransformation({
@@ -214,7 +222,7 @@ export const BitbucketTransformation = ({ transformation, 
setTransformation }: P
       {/* Additional Settings */}
       <div className="additional-settings">
         <h2 onClick={handleChangeAdditionalSettingsOpen}>
-          <Icon icon={openAdditionalSettings ? 'chevron-up' : 'chevron-down'} 
size={18} />
+          <Icon icon={!openAdditionalSettings ? 'chevron-up' : 'chevron-down'} 
size={18} />
           <span>Additional Settings</span>
         </h2>
         <Collapse isOpen={openAdditionalSettings}>
diff --git a/config-ui/src/pages/blueprint/home/api.ts 
b/config-ui/src/plugins/register/customize/config.ts
similarity index 78%
copy from config-ui/src/pages/blueprint/home/api.ts
copy to config-ui/src/plugins/register/customize/config.ts
index 83ce14174..e5bebbb5d 100644
--- a/config-ui/src/pages/blueprint/home/api.ts
+++ b/config-ui/src/plugins/register/customize/config.ts
@@ -16,6 +16,12 @@
  *
  */
 
-import { request } from '@/utils';
+import type { PluginConfigType } from '@/plugins';
 
-export const getBlueprints = () => request('/blueprints');
+import { BasePipelineConfig } from '../base';
+
+export const CustomizeConfig: PluginConfigType = {
+  ...BasePipelineConfig,
+  plugin: 'customize',
+  name: 'customize',
+};
diff --git a/config-ui/src/pages/blueprint/home/api.ts 
b/config-ui/src/plugins/register/customize/index.ts
similarity index 89%
copy from config-ui/src/pages/blueprint/home/api.ts
copy to config-ui/src/plugins/register/customize/index.ts
index 83ce14174..de415db39 100644
--- a/config-ui/src/pages/blueprint/home/api.ts
+++ b/config-ui/src/plugins/register/customize/index.ts
@@ -16,6 +16,4 @@
  *
  */
 
-import { request } from '@/utils';
-
-export const getBlueprints = () => request('/blueprints');
+export * from './config';
diff --git a/config-ui/src/plugins/register/github/config.tsx 
b/config-ui/src/plugins/register/github/config.tsx
index bd7f180ec..5732c2338 100644
--- a/config-ui/src/plugins/register/github/config.tsx
+++ b/config-ui/src/plugins/register/github/config.tsx
@@ -79,17 +79,21 @@ export const GitHubConfig: PluginConfigType = {
   },
   entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
   transformation: {
-    issueSeverity: '',
-    issueComponent: '',
-    issuePriority: '',
-    issueTypeRequirement: '',
-    issueTypeBug: '',
-    issueTypeIncident: '',
-    prType: '',
-    prComponent: '',
-    prBodyClosePattern: '',
-    productionPattern: '',
-    deploymentPattern: '',
-    refdiff: null,
+    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: 'production',
+    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: {
+      tagsOrder: 10,
+      tagsPattern: /v\d+\.\d+(\.\d+(-rc)*\d*)*$/,
+    },
   },
 };
diff --git a/config-ui/src/plugins/register/github/transformation.tsx 
b/config-ui/src/plugins/register/github/transformation.tsx
index 01d33df07..4dea066ff 100644
--- a/config-ui/src/plugins/register/github/transformation.tsx
+++ b/config-ui/src/plugins/register/github/transformation.tsx
@@ -16,7 +16,7 @@
  *
  */
 
-import React, { useState } from 'react';
+import React, { useEffect, useState } from 'react';
 import {
   FormGroup,
   InputGroup,
@@ -43,6 +43,12 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
   const [enableCICD, setEnableCICD] = useState(1);
   const [openAdditionalSettings, setOpenAdditionalSettings] = useState(false);
 
+  useEffect(() => {
+    if (transformation.refdiff) {
+      setOpenAdditionalSettings(true);
+    }
+  }, [transformation]);
+
   const handleChangeCICDEnable = (e: number) => {
     if (e === 0) {
       setTransformation({
@@ -91,7 +97,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
           <div className="list">
             <FormGroup inline label="Feature">
               <InputGroup
-                placeholder="(feat|feature|proposal|requirement)$"
+                placeholder="(feat|feature|proposal|requirement)"
                 value={transformation.issueTypeRequirement}
                 onChange={(e) =>
                   setTransformation({
@@ -103,7 +109,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
             </FormGroup>
             <FormGroup inline label="Bug">
               <InputGroup
-                placeholder="(bug|broken)$"
+                placeholder="(bug|broken)"
                 value={transformation.issueTypeBug}
                 onChange={(e) =>
                   setTransformation({
@@ -125,7 +131,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
               }
             >
               <InputGroup
-                placeholder="(incident|p0|p1|p2)$"
+                placeholder="(incident|failure)"
                 value={transformation.issueTypeIncident}
                 onChange={(e) =>
                   setTransformation({
@@ -147,7 +153,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
           }
         >
           <InputGroup
-            placeholder="(highest|high|medium|low)$"
+            placeholder="(highest|high|medium|low|p0|p1|p2|p3)"
             value={transformation.issuePriority}
             onChange={(e) =>
               setTransformation({
@@ -167,7 +173,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
           }
         >
           <InputGroup
-            placeholder="component(.*)$"
+            placeholder="component(.*)"
             value={transformation.issueComponent}
             onChange={(e) =>
               setTransformation({
@@ -187,7 +193,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
           }
         >
           <InputGroup
-            placeholder="severity(.*)$"
+            placeholder="severity(.*)"
             value={transformation.issueSeverity}
             onChange={(e) =>
               setTransformation({
@@ -233,7 +239,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
                   }
                 >
                   <InputGroup
-                    placeholder="^.*(deploy|push-image).*$"
+                    placeholder="(deploy|push-image)"
                     value={transformation.deploymentPattern}
                     onChange={(e) =>
                       setTransformation({
@@ -253,7 +259,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
                   }
                 >
                   <InputGroup
-                    placeholder="^.*product.*$"
+                    placeholder="production"
                     value={transformation.productionPattern}
                     onChange={(e) =>
                       setTransformation({
@@ -353,7 +359,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
         >
           <TextArea
             value={transformation.prBodyClosePattern}
-            
placeholder="(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\s]*.*(((and
 )?(#|https:\/\/github.com\/%s\/issues\/)\d+[ ]*)+)"
+            
placeholder="(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[s]*.*(((and
 )?(#|https://github.com/%s/%s/issues/)d+[ ]*)+)"
             onChange={(e) =>
               setTransformation({
                 ...transformation,
@@ -369,7 +375,7 @@ export const GitHubTransformation = ({ transformation, 
setTransformation }: Prop
       {/* Additional Settings */}
       <div className="additional-settings">
         <h2 onClick={handleChangeAdditionalSettingsOpen}>
-          <Icon icon={openAdditionalSettings ? 'chevron-up' : 'chevron-down'} 
size={18} />
+          <Icon icon={!openAdditionalSettings ? 'chevron-up' : 'chevron-down'} 
size={18} />
           <span>Additional Settings</span>
         </h2>
         <Collapse isOpen={openAdditionalSettings}>
diff --git a/config-ui/src/plugins/register/gitlab/components/ci-cd/index.tsx 
b/config-ui/src/plugins/register/gitlab/components/ci-cd/index.tsx
index 17aba5fe9..00fabc485 100644
--- a/config-ui/src/plugins/register/gitlab/components/ci-cd/index.tsx
+++ b/config-ui/src/plugins/register/gitlab/components/ci-cd/index.tsx
@@ -61,7 +61,7 @@ export const CiCd = ({ transformation, setTransformation }: 
Props) => {
             <p>A GitLab CI job with a name that matches the given regEx will 
be considered as a Deployment.</p>
             <FormGroup inline label="Deployment">
               <InputGroup
-                placeholder="(?i)deploy"
+                placeholder="(deploy|push-image)"
                 value={transformation.deploymentPattern}
                 onChange={(e) =>
                   setTransformation({
@@ -77,7 +77,7 @@ export const CiCd = ({ transformation, setTransformation }: 
Props) => {
             </p>
             <FormGroup inline label="Production">
               <InputGroup
-                placeholder="(?i)production"
+                placeholder="production"
                 value={transformation.productionPattern}
                 onChange={(e) =>
                   setTransformation({
diff --git a/config-ui/src/plugins/register/gitlab/config.tsx 
b/config-ui/src/plugins/register/gitlab/config.tsx
index 0518b2263..589d2afd5 100644
--- a/config-ui/src/plugins/register/gitlab/config.tsx
+++ b/config-ui/src/plugins/register/gitlab/config.tsx
@@ -45,7 +45,7 @@ export const GitLabConfig: PluginConfigType = {
           server: '(v11+)',
         },
         subLabel:
-          'If you are using GitLab Cloud, you do not need to enter the 
endpoint URL, which is https://gitlab.com/api/v4/.',
+          'If you are using GitLab Server, please enter the endpoint URL. E.g. 
https://gitlab.your-company.com/api/v4/',
       },
       {
         key: 'token',
@@ -70,7 +70,7 @@ export const GitLabConfig: PluginConfigType = {
   },
   entities: ['CODE', 'TICKET', 'CODEREVIEW', 'CROSS', 'CICD'],
   transformation: {
-    productionPattern: '',
-    deploymentPattern: '',
+    deploymentPattern: '(deploy|push-image)',
+    productionPattern: 'production',
   },
 };
diff --git a/config-ui/src/plugins/register/jenkins/config.ts 
b/config-ui/src/plugins/register/jenkins/config.ts
index 58dd0b7b7..2aca5d0f5 100644
--- a/config-ui/src/plugins/register/jenkins/config.ts
+++ b/config-ui/src/plugins/register/jenkins/config.ts
@@ -50,7 +50,7 @@ export const JenkinsConfig: PluginConfigType = {
   },
   entities: ['CICD'],
   transformation: {
-    productionPattern: '',
-    deploymentPattern: '',
+    deploymentPattern: '(deploy|push-image)',
+    productionPattern: 'production',
   },
 };
diff --git a/config-ui/src/plugins/register/jira/config.tsx 
b/config-ui/src/plugins/register/jira/config.tsx
index abf1a39c5..fff6dee17 100644
--- a/config-ui/src/plugins/register/jira/config.tsx
+++ b/config-ui/src/plugins/register/jira/config.tsx
@@ -86,7 +86,7 @@ export const JiraConfig: PluginConfigType = {
   entities: ['TICKET', 'CROSS'],
   transformation: {
     storyPointField: '',
-    remotelinkCommitShaPattern: '',
     typeMappings: {},
+    remotelinkCommitShaPattern: /commit\/([0-9a-f]{40})$/,
   },
 };
diff --git a/config-ui/src/plugins/register/webook/create-dialog/use-create.ts 
b/config-ui/src/plugins/register/webook/create-dialog/use-create.ts
index 13ff1abde..84a1ccd9d 100644
--- a/config-ui/src/plugins/register/webook/create-dialog/use-create.ts
+++ b/config-ui/src/plugins/register/webook/create-dialog/use-create.ts
@@ -49,7 +49,7 @@ export const useCreate = ({ onSubmitAfter }: UseCreateProps) 
=> {
       },
     );
 
-    if (success) {
+    if (success && !onSubmitAfter) {
       setStep(2);
       setRecord({
         postIssuesEndpoint: `${prefix}${res.postIssuesEndpoint}`,
@@ -60,6 +60,7 @@ export const useCreate = ({ onSubmitAfter }: UseCreateProps) 
=> {
         \\"start_time\\":\\"Optional, eg. 2020-01-01T12:00:00+00:00\\"
       }"`,
       });
+    } else if (success) {
       onSubmitAfter?.(res.id);
     }
   };
diff --git a/config-ui/src/store/connections/api.ts 
b/config-ui/src/store/connections/api.ts
index 5b7b7acde..e2ff846ef 100644
--- a/config-ui/src/store/connections/api.ts
+++ b/config-ui/src/store/connections/api.ts
@@ -18,6 +18,8 @@
 
 import { request } from '@/utils';
 
+export const getConnection = (plugin: string) => 
request(`/plugins/${plugin}/connections`);
+
 type TestConnectionPayload = {
   endpoint: string;
   proxy: string;
@@ -27,8 +29,6 @@ type TestConnectionPayload = {
   authMethod?: string;
 };
 
-export const getConnection = (plugin: string) => 
request(`/plugins/${plugin}/connections`);
-
 export const testConnection = (plugin: string, data: TestConnectionPayload) =>
   request(`/plugins/${plugin}/test`, {
     method: 'post',
diff --git a/config-ui/src/store/transformations/api.ts 
b/config-ui/src/store/transformations/api.ts
index da7ad6e04..92ab91588 100644
--- a/config-ui/src/store/transformations/api.ts
+++ b/config-ui/src/store/transformations/api.ts
@@ -18,4 +18,10 @@
 
 import { request } from '@/utils';
 
-export const getTransformation = (plugin: string) => 
request(`/plugins/${plugin}/transformation_rules`);
+type GetTransformationParams = {
+  page: number;
+  pageSize: number;
+};
+
+export const getTransformation = (plugin: string, params: 
GetTransformationParams) =>
+  request(`/plugins/${plugin}/transformation_rules`, { data: params });
diff --git a/config-ui/src/store/transformations/use-context-value.ts 
b/config-ui/src/store/transformations/use-context-value.ts
index a448d5496..6cf03ff84 100644
--- a/config-ui/src/store/transformations/use-context-value.ts
+++ b/config-ui/src/store/transformations/use-context-value.ts
@@ -34,7 +34,7 @@ export const useContextValue = () => {
 
   const getTransformation = async (plugin: string) => {
     try {
-      return await API.getTransformation(plugin);
+      return await API.getTransformation(plugin, { page: 1, pageSize: 200 });
     } catch {
       return [];
     }

Reply via email to