import { useState, useCallback, useMemo, memo } from "react"; import JsonView from "./JsonView"; interface ResourceLinkViewProps { uri: string; name?: string; description?: string; mimeType?: string; resourceContent: string; onReadResource?: (uri: string) => void; } const ResourceLinkView = memo( ({ uri, name, description, mimeType, resourceContent, onReadResource, }: ResourceLinkViewProps) => { const [{ expanded, loading }, setState] = useState({ expanded: false, loading: false, }); const expandedContent = useMemo( () => expanded && resourceContent ? (
Resource:
) : null, [expanded, resourceContent], ); const handleClick = useCallback(() => { if (!onReadResource) return; if (!expanded) { setState((prev) => ({ ...prev, expanded: true, loading: true })); onReadResource(uri); setState((prev) => ({ ...prev, loading: false })); } else { setState((prev) => ({ ...prev, expanded: false })); } }, [expanded, onReadResource, uri]); const handleKeyDown = useCallback( (e: React.KeyboardEvent) => { if ((e.key === "Enter" || e.key === " ") && onReadResource) { e.preventDefault(); handleClick(); } }, [handleClick, onReadResource], ); return (
{uri}
{mimeType && ( {mimeType} )} {onReadResource && (
{name && (
{name}
)} {description && (

{description}

)}
{expandedContent}
); }, ); export default ResourceLinkView;