From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/workflow/block-selector/all-tools.tsx |  155 +++++++++++----------------------------------------
 1 files changed, 34 insertions(+), 121 deletions(-)

diff --git a/app/components/workflow/block-selector/all-tools.tsx b/app/components/workflow/block-selector/all-tools.tsx
index 3ad0a41..aaa3811 100644
--- a/app/components/workflow/block-selector/all-tools.tsx
+++ b/app/components/workflow/block-selector/all-tools.tsx
@@ -1,66 +1,35 @@
 import {
-  useEffect,
   useMemo,
-  useRef,
   useState,
 } from 'react'
 import type {
   OnSelectBlock,
   ToolWithProvider,
 } from '../types'
-import type { ToolValue } from './types'
+import { useStore } from '../store'
 import { ToolTypeEnum } from './types'
 import Tools from './tools'
 import { useToolTabs } from './hooks'
-import ViewTypeSelect, { ViewType } from './view-type-select'
 import cn from '@/utils/classnames'
-import { useGetLanguage } from '@/context/i18n'
-import type { ListRef } from '@/app/components/workflow/block-selector/market-place-plugin/list'
-import PluginList, { type ListProps } from '@/app/components/workflow/block-selector/market-place-plugin/list'
-import ActionButton from '../../base/action-button'
-import { RiAddLine } from '@remixicon/react'
-import { PluginType } from '../../plugins/types'
-import { useMarketplacePlugins } from '../../plugins/marketplace/hooks'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
 
 type AllToolsProps = {
-  className?: string
-  toolContentClassName?: string
   searchText: string
-  tags: ListProps['tags']
-  buildInTools: ToolWithProvider[]
-  customTools: ToolWithProvider[]
-  workflowTools: ToolWithProvider[]
   onSelect: OnSelectBlock
-  supportAddCustomTool?: boolean
-  onAddedCustomTool?: () => void
-  onShowAddCustomCollectionModal?: () => void
-  selectedTools?: ToolValue[]
 }
-
-const DEFAULT_TAGS: AllToolsProps['tags'] = []
-
 const AllTools = ({
-  className,
-  toolContentClassName,
   searchText,
-  tags = DEFAULT_TAGS,
   onSelect,
-  buildInTools,
-  workflowTools,
-  customTools,
-  supportAddCustomTool,
-  onShowAddCustomCollectionModal,
-  selectedTools,
 }: AllToolsProps) => {
-  const language = useGetLanguage()
   const tabs = useToolTabs()
   const [activeTab, setActiveTab] = useState(ToolTypeEnum.All)
-  const [activeView, setActiveView] = useState<ViewType>(ViewType.flat)
-  const hasFilter = searchText || tags.length > 0
+  const buildInTools = useStore(s => s.buildInTools)
+  const customTools = useStore(s => s.customTools)
+  const workflowTools = useStore(s => s.workflowTools)
+
   const isMatchingKeywords = (text: string, keywords: string) => {
     return text.toLowerCase().includes(keywords.toLowerCase())
   }
+
   const tools = useMemo(() => {
     let mergedTools: ToolWithProvider[] = []
     if (activeTab === ToolTypeEnum.All)
@@ -72,95 +41,39 @@
     if (activeTab === ToolTypeEnum.Workflow)
       mergedTools = workflowTools
 
-    if (!hasFilter)
-      return mergedTools.filter(toolWithProvider => toolWithProvider.tools.length > 0)
-
     return mergedTools.filter((toolWithProvider) => {
-      return isMatchingKeywords(toolWithProvider.name, searchText) || toolWithProvider.tools.some((tool) => {
-        return tool.label[language].toLowerCase().includes(searchText.toLowerCase()) || tool.name.toLowerCase().includes(searchText.toLowerCase())
-      })
+      return isMatchingKeywords(toolWithProvider.name, searchText)
+        || toolWithProvider.tools.some((tool) => {
+          return Object.values(tool.label).some((label) => {
+            return isMatchingKeywords(label, searchText)
+          })
+        })
     })
-  }, [activeTab, buildInTools, customTools, workflowTools, searchText, language, hasFilter])
-
-  const {
-    queryPluginsWithDebounced: fetchPlugins,
-    plugins: notInstalledPlugins = [],
-  } = useMarketplacePlugins()
-
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-
-  useEffect(() => {
-    if (enable_marketplace) return
-    if (searchText || tags.length > 0) {
-      fetchPlugins({
-        query: searchText,
-        tags,
-        category: PluginType.tool,
-      })
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [searchText, tags, enable_marketplace])
-
-  const pluginRef = useRef<ListRef>(null)
-  const wrapElemRef = useRef<HTMLDivElement>(null)
-
+  }, [activeTab, buildInTools, customTools, workflowTools, searchText])
   return (
-    <div className={cn(className)}>
-      <div className='flex items-center justify-between border-b-[0.5px] border-divider-subtle bg-background-default-hover px-3 shadow-xs'>
-        <div className='flex h-8 items-center space-x-1'>
-          {
-            tabs.map(tab => (
-              <div
-                className={cn(
-                  'flex h-6 cursor-pointer items-center rounded-md px-2 hover:bg-state-base-hover',
-                  'text-xs font-medium text-text-secondary',
-                  activeTab === tab.key && 'bg-state-base-hover-alt',
-                )}
-                key={tab.key}
-                onClick={() => setActiveTab(tab.key)}
-              >
-                {tab.name}
-              </div>
-            ))
-          }
-        </div>
-        <ViewTypeSelect viewType={activeView} onChange={setActiveView} />
-        {supportAddCustomTool && (
-          <div className='flex items-center'>
-            <div className='mr-1.5 h-3.5 w-px  bg-divider-regular'></div>
-            <ActionButton
-              className='bg-components-button-primary-bg text-components-button-primary-text hover:bg-components-button-primary-bg hover:text-components-button-primary-text'
-              onClick={onShowAddCustomCollectionModal}
+    <div>
+      <div className='flex items-center px-3 h-8 space-x-1 bg-background-default-hover border-b-[0.5px] border-divider-subtle shadow-xs'>
+        {
+          tabs.map(tab => (
+            <div
+              className={cn(
+                'flex items-center px-2 h-6 rounded-md hover:bg-state-base-hover-alt cursor-pointer',
+                'system-xs-medium text-text-tertiary',
+                activeTab === tab.key && 'system-xs-semibold bg-state-base-hover-alt text-text-primary',
+              )}
+              key={tab.key}
+              onClick={() => setActiveTab(tab.key)}
             >
-              <RiAddLine className='h-4 w-4' />
-            </ActionButton>
-          </div>
-        )}
+              {tab.name}
+            </div>
+          ))
+        }
       </div>
-      <div
-        ref={wrapElemRef}
-        className='max-h-[464px] overflow-y-auto'
-        onScroll={pluginRef.current?.handleScroll}
-      >
-        <Tools
-          className={toolContentClassName}
-          showWorkflowEmpty={activeTab === ToolTypeEnum.Workflow}
-          tools={tools}
-          onSelect={onSelect}
-          viewType={activeView}
-          hasSearchText={!!searchText}
-          selectedTools={selectedTools}
-        />
-        {/* Plugins from marketplace */}
-        {enable_marketplace && <PluginList
-          ref={pluginRef}
-          wrapElemRef={wrapElemRef}
-          list={notInstalledPlugins}
-          searchText={searchText}
-          toolContentClassName={toolContentClassName}
-          tags={tags}
-        />}
-      </div>
+      <Tools
+        showWorkflowEmpty={activeTab === ToolTypeEnum.Workflow}
+        tools={tools}
+        onSelect={onSelect}
+      />
     </div>
   )
 }

--
Gitblit v1.8.0