import type { NodeViewProps } from "@tiptap/react"; import { NodeViewWrapper } from "@tiptap/react"; import { Loader2 } from "lucide-react"; import { PageMentionContent } from "@/shared/editor/presentation/page-mention"; import { getPageMentionViewState } from "../../lib/page-mention/view-state"; import { usePageMentionEntry, usePageMentionNavigate } from "@/client/components/page-mention/context"; export function PageMentionView({ node }: NodeViewProps) { const pageId = node.attrs.pageId as string | null; const entry = usePageMentionEntry(pageId); const navigate = usePageMentionNavigate(); if (!pageId) { return ( ); } const viewState = getPageMentionViewState(entry); const canNavigate = viewState.kind === "accessible"; const handleClick = (e: React.MouseEvent) => { if (viewState.kind !== "accessible") return; e.preventDefault(); navigate(pageId); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (viewState.kind !== "accessible") return; if (e.key === "Enter" || e.key === " ") { e.preventDefault(); navigate(pageId); } }; if (viewState.kind === "restricted") { return ( ); } if (viewState.kind === "pending") { return ( } label={viewState.label} /> ); } return ( ); }