diff --git a/frontend/src/features/workspace/DocumentEditor.tsx b/frontend/src/features/workspace/DocumentEditor.tsx index da21364..2142b77 100644 --- a/frontend/src/features/workspace/DocumentEditor.tsx +++ b/frontend/src/features/workspace/DocumentEditor.tsx @@ -165,17 +165,28 @@ export const DocumentEditor: React.FC = ({ const [showFolderMenu, setShowFolderMenu] = useState(false); const [zoomedBlockId, setZoomedBlockId] = useState(null); + const titleInputRef = useRef(null); + const titleDebounceRef = useRef(null); + const docRef = useRef(doc); + docRef.current = doc; + useEffect(() => { - if (autoFocusTitle || (doc?.title === 'Neue Notiz' && !doc?.markdownCache)) { - const timer = setTimeout(() => { + if (!loading && (autoFocusTitle || (doc?.title === 'Neue Notiz' && (!doc?.blocks || doc?.blocks.length <= 1)))) { + const focusTitle = () => { if (titleInputRef.current) { titleInputRef.current.focus(); titleInputRef.current.select(); } - }, 60); - return () => clearTimeout(timer); + }; + focusTitle(); + const t1 = setTimeout(focusTitle, 50); + const t2 = setTimeout(focusTitle, 150); + return () => { + clearTimeout(t1); + clearTimeout(t2); + }; } - }, [autoFocusTitle]); + }, [loading, autoFocusTitle, doc?.id]); useEffect(() => { if (zoomedBlockId && !blocks.some((b) => b.id === zoomedBlockId)) { @@ -191,11 +202,6 @@ export const DocumentEditor: React.FC = ({ return computeBreadcrumbs(title || doc?.title || 'Dokument', blocks, zoomedBlockId); }, [title, doc?.title, blocks, zoomedBlockId]); - const titleInputRef = useRef(null); - const titleDebounceRef = useRef(null); - const docRef = useRef(doc); - docRef.current = doc; - // Crucial fix: Collaborator with write permission can edit! const canEdit = useMemo(() => { if (!doc) return true; @@ -342,7 +348,9 @@ export const DocumentEditor: React.FC = ({ // Fetch isolated document state on mount useEffect(() => { let isCancelled = false; - setLoading(true); + if (!initialDoc) { + setLoading(true); + } setError(null); api @@ -989,6 +997,7 @@ export const DocumentEditor: React.FC = ({ type="text" value={title} readOnly={!canEdit} + autoFocus={autoFocusTitle} onChange={handleTitleChange} onBlur={handleTitleBlur} placeholder="Titel der Notiz…"