import { useState, useCallback } from 'react' import { useTranslation } from 'react-i18next' import { Tool } from '@/types' import { ChevronDown, ChevronRight, Play, Loader } from '@/components/icons/LucideIcons' import { callTool, ToolCallResult } from '@/services/toolService' import DynamicForm from './DynamicForm' import ToolResult from './ToolResult' interface ToolCardProps { server: string tool: Tool } const ToolCard = ({ tool, server }: ToolCardProps) => { const { t } = useTranslation() const [isExpanded, setIsExpanded] = useState(false) const [showRunForm, setShowRunForm] = useState(false) const [isRunning, setIsRunning] = useState(false) const [result, setResult] = useState(null) // Generate a unique key for localStorage based on tool name and server const getStorageKey = useCallback(() => { return `mcphub_tool_form_${server ? `${server}_` : ''}${tool.name}` }, [tool.name, server]) // Clear form data from localStorage const clearStoredFormData = useCallback(() => { localStorage.removeItem(getStorageKey()) }, [getStorageKey]) const handleRunTool = async (arguments_: Record) => { setIsRunning(true) try { const result = await callTool({ toolName: tool.name, arguments: arguments_, }, server) setResult(result) // Clear form data on successful submission // clearStoredFormData() } catch (error) { setResult({ success: false, error: error instanceof Error ? error.message : 'Unknown error occurred', }) } finally { setIsRunning(false) } } const handleCancelRun = () => { setShowRunForm(false) // Clear form data when cancelled clearStoredFormData() setResult(null) } const handleCloseResult = () => { setResult(null) } return (
setIsExpanded(!isExpanded)} >

{tool.name} {tool.description || t('tool.noDescription')}

{isExpanded && (
{/* Schema Display */} {!showRunForm && (

{t('tool.inputSchema')}

                {JSON.stringify(tool.inputSchema, null, 2)}
              
)} {/* Run Form */} {showRunForm && (

{t('tool.runToolWithName', { name: tool.name })}

{/* Tool Result */} {result && (
)}
)}
)}
) } export default ToolCard