fix(editor): stop title input losing characters while typing

The fork's server-authoritative WS redesign rebroadcasts PAGE_UPDATED
(updateOne) title changes to the whole space room including the author.
The author's own client applied that echo to the ["pages", slugId] cache,
which feeds the title prop; the setContent effect then overwrote the
in-progress title with the lagging echo, dropping just-typed characters
and jumping the cursor.

Guard the setContent effect so it skips while the title editor is focused
(and when destroyed): external/echo title updates are applied only when
the field is not being actively edited. Page navigation is unaffected
because TitleEditor remounts per page (key={page.id}) and seeds content
at creation.
This commit is contained in:
claude_code
2026-06-22 19:20:46 +03:00
parent e423c35676
commit f6a4df1b08

View File

@@ -152,7 +152,17 @@ export function TitleEditor({
const debounceUpdate = useDebouncedCallback(saveTitle, 500); const debounceUpdate = useDebouncedCallback(saveTitle, 500);
useEffect(() => { useEffect(() => {
if (titleEditor && title !== titleEditor.getText()) { // Do not overwrite the title while the user is actively editing it. The
// server rebroadcasts PAGE_UPDATED to the author too, and that echo can
// carry a title that lags behind what the user has just typed; resetting
// content from it here would drop in-progress characters and jump the
// cursor. Apply external title changes only when the field is not focused.
if (
titleEditor &&
!titleEditor.isDestroyed &&
!titleEditor.isFocused &&
title !== titleEditor.getText()
) {
titleEditor.commands.setContent(title); titleEditor.commands.setContent(title);
} }
}, [pageId, title, titleEditor]); }, [pageId, title, titleEditor]);