'use client' import { useMemo, useState } from 'react' import NewMCPCard from './create-card' import MCPCard from './provider-card' import MCPDetailPanel from './detail/provider-detail' import { useAllToolProviders, } from '@/service/use-tools' import type { ToolWithProvider } from '@/app/components/workflow/types' import cn from '@/utils/classnames' type Props = { searchText: string } function renderDefaultCard() { const defaultCards = Array.from({ length: 36 }, (_, index) => (
= 4 && index < 8 && 'opacity-50', index >= 8 && index < 12 && 'opacity-40', index >= 12 && index < 16 && 'opacity-30', index >= 16 && index < 20 && 'opacity-25', index >= 20 && index < 24 && 'opacity-20', )} >
)) return defaultCards } const MCPList = ({ searchText, }: Props) => { const { data: list = [] as ToolWithProvider[], refetch } = useAllToolProviders() const [isTriggerAuthorize, setIsTriggerAuthorize] = useState(false) const filteredList = useMemo(() => { return list.filter((collection) => { if (searchText) return Object.values(collection.name).some(value => (value as string).toLowerCase().includes(searchText.toLowerCase())) return collection.type === 'mcp' }) as ToolWithProvider[] }, [list, searchText]) const [currentProviderID, setCurrentProviderID] = useState() const currentProvider = useMemo(() => { return list.find(provider => provider.id === currentProviderID) }, [list, currentProviderID]) const handleCreate = async (provider: ToolWithProvider) => { await refetch() // update list setCurrentProviderID(provider.id) setIsTriggerAuthorize(true) } const handleUpdate = async (providerID: string) => { await refetch() // update list setCurrentProviderID(providerID) setIsTriggerAuthorize(true) } return ( <>
{filteredList.map(provider => ( ))} {!list.length && renderDefaultCard()}
{currentProvider && ( setCurrentProviderID(undefined)} onUpdate={refetch} isTriggerAuthorize={isTriggerAuthorize} onFirstCreate={() => setIsTriggerAuthorize(false)} /> )} ) } export default MCPList