'use client' import { useCallback, useState } from 'react' import { useBoolean } from 'ahooks' import { useTranslation } from 'react-i18next' import { useAppContext } from '@/context/app-context' import { RiHammerFill } from '@remixicon/react' import Indicator from '@/app/components/header/indicator' import Icon from '@/app/components/plugins/card/base/card-icon' import { useFormatTimeFromNow } from './hooks' import type { ToolWithProvider } from '../../workflow/types' import Confirm from '@/app/components/base/confirm' import MCPModal from './modal' import OperationDropdown from './detail/operation-dropdown' import { useDeleteMCP, useUpdateMCP } from '@/service/use-tools' import cn from '@/utils/classnames' type Props = { currentProvider?: ToolWithProvider data: ToolWithProvider handleSelect: (providerID: string) => void onUpdate: () => void } const MCPCard = ({ currentProvider, data, onUpdate, handleSelect, }: Props) => { const { t } = useTranslation() const { formatTimeFromNow } = useFormatTimeFromNow() const { isCurrentWorkspaceManager } = useAppContext() const { mutate: updateMCP } = useUpdateMCP({ onSuccess: onUpdate, }) const { mutate: deleteMCP } = useDeleteMCP({ onSuccess: onUpdate, }) const [isOperationShow, setIsOperationShow] = useState(false) const [isShowUpdateModal, { setTrue: showUpdateModal, setFalse: hideUpdateModal, }] = useBoolean(false) const [isShowDeleteConfirm, { setTrue: showDeleteConfirm, setFalse: hideDeleteConfirm, }] = useBoolean(false) const [deleting, { setTrue: showDeleting, setFalse: hideDeleting, }] = useBoolean(false) const handleUpdate = useCallback(async (form: any) => { const res = await updateMCP({ ...form, provider_id: data.id, }) if ((res as any)?.result === 'success') { hideUpdateModal() onUpdate() } }, [data, updateMCP, hideUpdateModal, onUpdate]) const handleDelete = useCallback(async () => { showDeleting() const res = await deleteMCP(data.id) hideDeleting() if ((res as any)?.result === 'success') { hideDeleteConfirm() onUpdate() } }, [showDeleting, deleteMCP, data.id, hideDeleting, hideDeleteConfirm, onUpdate]) return (