import { Link as MLink, Tooltip } from "@mui/joy"; import { useState } from "react"; import { markdownServiceClient } from "@/grpcweb"; import { LinkMetadata } from "@/types/proto/api/v1/markdown_service"; interface Props { url: string; text?: string; } const getFaviconWithGoogleS2 = (url: string) => { try { const urlObject = new URL(url); return `https://www.google.com/s2/favicons?sz=128&domain=${urlObject.hostname}`; } catch (error) { return undefined; } }; const Link: React.FC = ({ text, url }: Props) => { const [initialized, setInitialized] = useState(false); const [showTooltip, setShowTooltip] = useState(false); const [linkMetadata, setLinkMetadata] = useState(); const handleMouseEnter = async () => { if (!initialized) { try { const linkMetadata = await markdownServiceClient.getLinkMetadata({ link: url }); setLinkMetadata(linkMetadata); } catch (error) { console.error("Error fetching URL metadata:", error); } setInitialized(true); } setTimeout(() => setShowTooltip(true), 0); }; return (
{linkMetadata?.title}

{linkMetadata?.title}

{linkMetadata.description && (

{linkMetadata.description}

)} ) } open={showTooltip} arrow > setShowTooltip(false)}> {text || url}
); }; export default Link;