'use client' import type { FC } from 'react' import React, { useCallback, useState } from 'react' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import { useFetchPluginListOrBundleList } from '@/service/use-plugins' import { PLUGIN_TYPE_SEARCH_MAP } from '../../marketplace/plugin-type-switch' import SearchBox from '@/app/components/plugins/marketplace/search-box' import { useTranslation } from 'react-i18next' import cn from '@/utils/classnames' import ToolItem from './tool-item' type Props = { trigger: React.ReactNode value: string[] onChange: (value: string[]) => void isShow: boolean onShowChange: (isShow: boolean) => void } const ToolPicker: FC = ({ trigger, value, onChange, isShow, onShowChange, }) => { const { t } = useTranslation() const toggleShowPopup = useCallback(() => { onShowChange(!isShow) }, [onShowChange, isShow]) const tabs = [ { key: PLUGIN_TYPE_SEARCH_MAP.all, name: t('plugin.category.all'), }, { key: PLUGIN_TYPE_SEARCH_MAP.model, name: t('plugin.category.models'), }, { key: PLUGIN_TYPE_SEARCH_MAP.tool, name: t('plugin.category.tools'), }, { key: PLUGIN_TYPE_SEARCH_MAP.agent, name: t('plugin.category.agents'), }, { key: PLUGIN_TYPE_SEARCH_MAP.extension, name: t('plugin.category.extensions'), }, { key: PLUGIN_TYPE_SEARCH_MAP.bundle, name: t('plugin.category.bundles'), }, ] const [pluginType, setPluginType] = useState(PLUGIN_TYPE_SEARCH_MAP.all) const [query, setQuery] = useState('') const [tags, setTags] = useState([]) const { data } = useFetchPluginListOrBundleList({ query, tags, category: pluginType, }) const isBundle = pluginType === PLUGIN_TYPE_SEARCH_MAP.bundle const list = (isBundle ? data?.data?.bundles : data?.data?.plugins) || [] const handleCheckChange = useCallback((pluginId: string) => { return () => { const newValue = value.includes(pluginId) ? value.filter(id => id !== pluginId) : [...value, pluginId] onChange(newValue) } }, [onChange, value]) return ( {trigger}
{ tabs.map(tab => (
setPluginType(tab.key)} > {tab.name}
)) }
{list.length > 0 && (
{list.map(item => ( ))}
)}
) } export default React.memo(ToolPicker)