From b5a6e60146ef1959f93cb0d6e89bb8c84e01e946 Mon Sep 17 00:00:00 2001 From: Mo Date: Thu, 4 Jan 2024 12:06:31 -0600 Subject: [PATCH] chore: await local propagation before replacing plain text contents --- .../NoteView/PlainEditor/PlainEditor.tsx | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/web/src/javascripts/Components/NoteView/PlainEditor/PlainEditor.tsx b/packages/web/src/javascripts/Components/NoteView/PlainEditor/PlainEditor.tsx index 6f0cca3d8..cbcfa9b3e 100644 --- a/packages/web/src/javascripts/Components/NoteView/PlainEditor/PlainEditor.tsx +++ b/packages/web/src/javascripts/Components/NoteView/PlainEditor/PlainEditor.tsx @@ -55,6 +55,8 @@ export const PlainEditor = forwardRef( const isAdjustingMobileCursor = useRef(false) const note = useRef(controller.item) + const [isPendingLocalPropagation, setIsPendingLocalPropagation] = useState(false) + const tabObserverDisposer = useRef() const mutationObserver = useRef(null) @@ -79,27 +81,40 @@ export const PlainEditor = forwardRef( throw Error('Editor received changes for non-current note') } - if ( - isPayloadSourceRetrieved(source) || - editorText == undefined || - updatedNote.editorIdentifier !== note.current.editorIdentifier || - updatedNote.noteType !== note.current.noteType - ) { - setEditorText(updatedNote.text) + if (!isPendingLocalPropagation) { + if ( + isPayloadSourceRetrieved(source) || + editorText == undefined || + updatedNote.editorIdentifier !== note.current.editorIdentifier || + updatedNote.noteType !== note.current.noteType + ) { + setEditorText(updatedNote.text) + } } note.current = updatedNote }) return disposer - }, [controller, editorText, controller.item.uuid, controller.item.editorIdentifier, controller.item.noteType]) + }, [ + controller, + editorText, + controller.item.uuid, + controller.item.editorIdentifier, + controller.item.noteType, + isPendingLocalPropagation, + ]) const onTextAreaChange: ChangeEventHandler = ({ currentTarget }) => { const text = currentTarget.value setEditorText(text) - void controller.saveAndAwaitLocalPropagation({ text: text, isUserModified: true }) + setIsPendingLocalPropagation(true) + + void controller.saveAndAwaitLocalPropagation({ text: text, isUserModified: true }).then(() => { + setIsPendingLocalPropagation(false) + }) } const onContentFocus = useCallback(() => {