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 8730476d refactor(config-ui): use multi-selector to replace the 
original (#3843)
8730476d is described below

commit 8730476d1bdad6a599469e5870dc15b3875dbc02
Author: 青湛 <[email protected]>
AuthorDate: Fri Dec 2 12:41:36 2022 +0800

    refactor(config-ui): use multi-selector to replace the original (#3843)
---
 .../components/gitlab/project-selector/index.tsx   | 78 +++++-----------------
 .../use-gitlab-project-selector.ts                 | 19 +-----
 2 files changed, 19 insertions(+), 78 deletions(-)

diff --git a/config-ui/src/components/gitlab/project-selector/index.tsx 
b/config-ui/src/components/gitlab/project-selector/index.tsx
index 62ca6243..31566606 100644
--- a/config-ui/src/components/gitlab/project-selector/index.tsx
+++ b/config-ui/src/components/gitlab/project-selector/index.tsx
@@ -17,8 +17,9 @@
  */
 
 import React from 'react'
-import { MultiSelect } from '@blueprintjs/select'
-import { Checkbox, MenuItem, Intent } from '@blueprintjs/core'
+import { Checkbox } from '@blueprintjs/core'
+
+import { MultiSelector } from '@/components'
 
 import type { ItemType } from './use-gitlab-project-selector'
 import {
@@ -28,79 +29,32 @@ import {
 import * as S from './styled'
 
 interface Props extends UseGitLabProjectSelectorProps {
-  disabledItemIds?: Array<ItemType['id']>
+  selectedItems: Array<ItemType>
+  onChangeItems: (items: Array<ItemType>) => void
 }
 
 export const GitLabProjectSelector = ({
   connectionId,
-  disabledItemIds,
   selectedItems,
   onChangeItems
 }: Props) => {
-  const {
-    loading,
-    items,
-    search,
-    membership,
-    onSearch,
-    onChangeMembership,
-    onSelect,
-    onRemove
-  } = useGitLabProjectSelector({
-    connectionId,
-    selectedItems,
-    onChangeItems
-  })
-
-  const tagRenderer = (item: any) => {
-    return <span>{item.shortTitle || item.title}</span>
-  }
-
-  const itemRenderer = (item: ItemType, { handleClick }: any) => {
-    const selected = !![
-      ...selectedItems.map((it) => it.id),
-      ...(disabledItemIds ?? [])
-    ].find((id) => id === item.id)
-
-    return (
-      <MenuItem
-        key={item.key}
-        text={
-          <Checkbox label={item.title} checked={selected} disabled={selected} 
/>
-        }
-        disabled={selected}
-        onClick={handleClick}
-      />
-    )
-  }
+  const { loading, items, membership, onSearch, onChangeMembership } =
+    useGitLabProjectSelector({
+      connectionId
+    })
 
   return (
     <S.Container>
-      <MultiSelect
-        className='selector'
-        placeholder='Select Projects'
-        popoverProps={{ usePortal: false, minimal: true, isOpen: !!search }}
-        resetOnSelect
-        fill
+      <MultiSelector
+        placeholder='Select Projects...'
         items={items}
+        getKey={(it) => `${it.id}`}
+        getName={(it) => it.shortTitle || it.title}
         selectedItems={selectedItems}
-        tagInputProps={{
-          tagProps: {
-            intent: Intent.PRIMARY,
-            minimal: true
-          }
-        }}
-        noResults={
-          <MenuItem
-            disabled={true}
-            text={loading ? 'Fetching...' : 'No Projects Available.'}
-          />
-        }
-        tagRenderer={tagRenderer}
-        itemRenderer={itemRenderer}
+        onChangeItems={onChangeItems}
+        loading={loading}
+        noResult='No Projects Available.'
         onQueryChange={onSearch}
-        onItemSelect={onSelect}
-        onRemove={onRemove}
       />
       <Checkbox
         className='checkbox'
diff --git 
a/config-ui/src/components/gitlab/project-selector/use-gitlab-project-selector.ts
 
b/config-ui/src/components/gitlab/project-selector/use-gitlab-project-selector.ts
index 527ccd36..667939ba 100644
--- 
a/config-ui/src/components/gitlab/project-selector/use-gitlab-project-selector.ts
+++ 
b/config-ui/src/components/gitlab/project-selector/use-gitlab-project-selector.ts
@@ -31,17 +31,13 @@ export type ItemType = {
 
 export interface UseGitLabProjectSelectorProps {
   connectionId: string
-  selectedItems: Array<ItemType>
-  onChangeItems: (items: Array<ItemType>) => void
 }
 
 export const useGitLabProjectSelector = ({
-  connectionId,
-  selectedItems,
-  onChangeItems
+  connectionId
 }: UseGitLabProjectSelectorProps) => {
   const [loading, setLoading] = useState(false)
-  const [items, setItems] = useState([])
+  const [items, setItems] = useState<ItemType[]>([])
   const [search, setSearch] = useState('')
   const [membership, setMembership] = useState(true)
 
@@ -77,23 +73,14 @@ export const useGitLabProjectSelector = ({
     () => ({
       loading,
       items,
-      search,
       membership,
       onSearch(s: string) {
         setSearch(s)
       },
       onChangeMembership(e: React.ChangeEvent<HTMLInputElement>) {
         setMembership(e.target.checked)
-      },
-      onSelect(item: ItemType) {
-        const newItems = [...selectedItems, item]
-        onChangeItems(newItems)
-      },
-      onRemove(item: ItemType) {
-        const newItems = selectedItems.filter((it) => item.id !== it.id)
-        onChangeItems(newItems)
       }
     }),
-    [loading, items, search, membership]
+    [loading, items, membership]
   )
 }

Reply via email to