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:
@@ -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]);
|
||||||
|
|||||||
Reference in New Issue
Block a user