From 24a7f917fe83453264612e9275d9ae611959596c Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Sat, 31 Oct 2020 11:34:02 -0400 Subject: [PATCH] fix: opRemove on reconnect --- packages/bridge/src/convert/constants.ts | 1 + packages/bridge/src/convert/index.ts | 3 +-- packages/bridge/src/convert/remove.ts | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 packages/bridge/src/convert/constants.ts diff --git a/packages/bridge/src/convert/constants.ts b/packages/bridge/src/convert/constants.ts new file mode 100644 index 0000000..6cc4c05 --- /dev/null +++ b/packages/bridge/src/convert/constants.ts @@ -0,0 +1 @@ +export const rootKey = '00000000-0000-0000-0000-000000000000' diff --git a/packages/bridge/src/convert/index.ts b/packages/bridge/src/convert/index.ts index 61c837d..e942939 100644 --- a/packages/bridge/src/convert/index.ts +++ b/packages/bridge/src/convert/index.ts @@ -8,6 +8,7 @@ import opCreate from './create' import { toJS } from '../utils' import { SyncDoc } from '../model' +import { rootKey } from './constants' const byAction = { create: opCreate, @@ -16,8 +17,6 @@ const byAction = { insert: opInsert } -const rootKey = '00000000-0000-0000-0000-000000000000' - const toSlateOp = (ops: Automerge.Diff[], doc: SyncDoc) => { const iterate = (acc: [any, any[]], op: Automerge.Diff): any => { const action = byAction[op.action] diff --git a/packages/bridge/src/convert/remove.ts b/packages/bridge/src/convert/remove.ts index aa538e3..bb7518a 100644 --- a/packages/bridge/src/convert/remove.ts +++ b/packages/bridge/src/convert/remove.ts @@ -3,6 +3,7 @@ import { Element } from 'slate' import { toSlatePath, toJS } from '../utils' import { getTarget } from '../path' +import { rootKey } from './constants' const removeTextOp = (op: Automerge.Diff) => (map: any, doc: Element) => { const { index, path, obj } = op @@ -73,6 +74,8 @@ const opRemove = (op: Automerge.Diff, [map, ops]: any) => { const key = path[path.length - 1] if (key === 'cursors') return [map, ops] + // if we don't have a valid key and this is the root obj no slate op is needed + if (key === undefined && obj === rootKey) return [map, ops] const fn = key === 'text' ? removeTextOp : removeNodeOp