import { useCallback } from "react"; import { ChevronRight } from "lucide-react"; import { DocumentPage } from "@/client/components/editor/document-page"; import { CanvasPage } from "@/client/components/canvas/canvas-page"; import { DEFAULT_PAGE_TITLE } from "@/shared/constants"; import { PageBreadcrumbs } from "@/client/components/ui/page-breadcrumbs"; import { PageChrome, PageEmojiIcon } from "@/client/components/ui/page-chrome"; import { PageCover } from "@/client/components/ui/page-cover"; import { PageErrorState } from "@/client/components/ui/page-error-state"; import { PageLoadingSkeleton } from "@/client/components/ui/page-loading-skeleton"; import { Skeleton } from "@/client/components/ui/skeleton"; import { useDocumentTitle } from "@/client/hooks/use-document-title"; import { useOnline } from "@/client/hooks/use-online"; import { useActivePageActions, useActivePageState, useActivePageSync, } from "@/client/components/active-page/use-active-page"; import { useSharedPagePresentation } from "@/client/components/share/use-share-view"; import { deriveSharePageAffordance } from "@/client/lib/affordance/share-page"; function SharedBreadcrumbSkeleton() { return ( ); } export function SharePageView() { const activePageState = useActivePageState(); const { patchPage } = useActivePageActions(); const { setSyncProvider } = useActivePageSync(); const presentation = useSharedPagePresentation(); const online = useOnline(); const handleTitleChange = useCallback( (titleOverride: string) => { patchPage({ title: titleOverride }); }, [patchPage], ); useDocumentTitle(presentation.displayTitle || DEFAULT_PAGE_TITLE); if (activePageState.kind === "unavailable") { return ( presentation.navigate(presentation.rootPageId), }} /> ); } if (presentation.isPageLoading || !presentation.page) { return ( ); } const page = presentation.page; const showBreadcrumbSlot = presentation.isAncestorTrailLoading || presentation.ancestors.length > 0; const pageAffordance = deriveSharePageAffordance({ pageKind: page.kind, pageAccess: presentation.isViewOnly ? "view" : "edit", workspaceId: presentation.workspaceId, online, }); const sharedChrome = ; if (pageAffordance.kind === "doc") { return ( ); } return ( ); } interface SharedPageChromeProps { presentation: ReturnType; showBreadcrumbSlot: boolean; } function SharedPageChrome({ presentation, showBreadcrumbSlot }: SharedPageChromeProps) { const breadcrumb = showBreadcrumbSlot ? ( presentation.isAncestorTrailLoading ? ( ) : ( ) ) : null; return ( ) : null } breadcrumb={breadcrumb} icon={presentation.displayIcon ? : null} /> ); }