From 3ebad4902db2bae4165772b355d15c8c6c7d24f3 Mon Sep 17 00:00:00 2001 From: Ulion Date: Sun, 7 Feb 2021 17:20:37 +0800 Subject: [PATCH 1/2] Fix wrong isRemote false caused by the incorrect promise schedule case. --- packages/client/src/automerge-editor.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/client/src/automerge-editor.ts b/packages/client/src/automerge-editor.ts index 541eb81..dccab63 100644 --- a/packages/client/src/automerge-editor.ts +++ b/packages/client/src/automerge-editor.ts @@ -141,7 +141,12 @@ export const AutomergeEditor = { e.onCursor && e.onCursor(updated.cursors) }) - Promise.resolve().then(_ => (e.isRemote = false)) + if (slateOps.length > 0) { + // XXX: only schedule set isRemote false when we did scheduled onChange by apply. + Promise.resolve().then(_ => (e.isRemote = false)) + } else { + e.isRemote = false + } } } catch (e) { console.error(e) From 8b0bd1d04d64fc5a1eec2e118c39780a42a74d38 Mon Sep 17 00:00:00 2001 From: Ulion Date: Mon, 8 Feb 2021 11:54:26 +0800 Subject: [PATCH 2/2] Continue fix for mixed apply remote operations ops and non-ops. --- packages/client/src/automerge-editor.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/client/src/automerge-editor.ts b/packages/client/src/automerge-editor.ts index dccab63..4cfbe8f 100644 --- a/packages/client/src/automerge-editor.ts +++ b/packages/client/src/automerge-editor.ts @@ -125,6 +125,8 @@ export const AutomergeEditor = { if (operations.length) { const slateOps = toSlateOp(operations, current) + // do not change isRemote flag for no-op case. + const wasRemote = e.isRemote e.isRemote = true Editor.withoutNormalizing(e, () => { @@ -145,7 +147,7 @@ export const AutomergeEditor = { // XXX: only schedule set isRemote false when we did scheduled onChange by apply. Promise.resolve().then(_ => (e.isRemote = false)) } else { - e.isRemote = false + e.isRemote = wasRemote } } } catch (e) {