import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import EditorLayout from '../components/EditorLayout.jsx'; import StatusBadge from '../components/StatusBadge.jsx'; import { ApiError, fetchViewDocument, friendlyErrorMessage } from '../lib/api.js'; import { downloadDocument } from '../lib/download.js'; import { STR } from '../lib/strings.js'; import LinkErrorPage from './LinkErrorPage.jsx'; export default function SharedViewPage() { const { token } = useParams(); const [doc, setDoc] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; (async () => { setLoading(true); setError(null); try { const data = await fetchViewDocument(token); if (!cancelled) setDoc(data); } catch (err) { if (!cancelled) setError(err); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, [token]); if (loading) { return (

{STR.LOADING_DOCUMENT}

); } if (error instanceof ApiError) { if (error.status === 410) { return ( ); } if (error.status === 404) { return ( ); } } if (error || !doc) { return ( ); } const saveLabel = doc.mode === 'org' ? STR.DOWNLOAD_ORG : STR.DOWNLOAD_MD; return (

{doc.title}

{STR.BADGE_SHARED} {STR.BADGE_READONLY}

{STR.SHARED_VIEW}

); }