From 9054d3a381e9ff3638fdf4ed3e466809d1764eb7 Mon Sep 17 00:00:00 2001 From: Jason Tamulonis Date: Wed, 27 May 2020 17:19:41 -0700 Subject: [PATCH] Fix path transform against sibling move operations (#3675) --- packages/slate/src/interfaces/path.ts | 6 ++++++ .../move_node/ends-after-to-ends-equal.js | 15 +++++++++++++++ .../move_node/ends-before-to-ends-equal.js | 15 +++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js create mode 100644 packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js diff --git a/packages/slate/src/interfaces/path.ts b/packages/slate/src/interfaces/path.ts index 33e18312a..dd2f6e6be 100755 --- a/packages/slate/src/interfaces/path.ts +++ b/packages/slate/src/interfaces/path.ts @@ -391,6 +391,12 @@ export const Path = { } return copy.concat(p.slice(op.length)) + } else if (Path.isSibling(op, p) && Path.equals(onp, p)) { + if (Path.endsBefore(op, p)) { + p[op.length - 1] -= 1 + } else { + p[op.length - 1] += 1 + } } else if ( Path.endsBefore(onp, p) || Path.equals(onp, p) || diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js b/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js new file mode 100644 index 000000000..68cf796ce --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [0, 1] + +const op = { + type: 'move_node', + path: [0, 3], + newPath: [0, 1], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [0, 2] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js b/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js new file mode 100644 index 000000000..0ae955f5a --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [0, 1] + +const op = { + type: 'move_node', + path: [0, 0], + newPath: [0, 1], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [0, 0]