import { Link as MLink, Tooltip } from "@mui/joy"; import { useState } from "react"; import { markdownServiceClient } from "@/grpcweb"; import { workspaceStore } from "@/store/v2"; import { LinkMetadata, Node } from "@/types/proto/api/v1/markdown_service"; import Renderer from "./Renderer"; interface Props { url: string; content?: Node[]; } 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 = ({ content, url }: Props) => { const workspaceMemoRelatedSetting = workspaceStore.state.memoRelatedSetting; const [initialized, setInitialized] = useState(false); const [showTooltip, setShowTooltip] = useState(false); const [linkMetadata, setLinkMetadata] = useState(); const handleMouseEnter = async () => { if (!workspaceMemoRelatedSetting.enableLinkPreview) { return; } setShowTooltip(true); if (!initialized) { try { const linkMetadata = await markdownServiceClient.getLinkMetadata({ link: url }); setLinkMetadata(linkMetadata); } catch (error) { console.error("Error fetching URL metadata:", error); } setInitialized(true); } }; return (
{linkMetadata?.title}

{linkMetadata?.title}

{linkMetadata.description && (

{linkMetadata.description}

)} {linkMetadata.image && ( {linkMetadata.title} )} ) } open={showTooltip} arrow > setShowTooltip(false)}> {content ? content.map((child, index) => ) : url}
); }; export default Link;