From 7c76fe7120b28ddab0530fafba20f3d35a8115cb Mon Sep 17 00:00:00 2001 From: Yifeng Wang Date: Sat, 28 Apr 2018 06:54:31 +0800 Subject: [PATCH] Limit melding behavior in `insertFragmentAtRange` (#1366) * fix insert nested single block fragment * disable merging multi nested blocks --- packages/slate/src/changes/at-range.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/slate/src/changes/at-range.js b/packages/slate/src/changes/at-range.js index 5d429b90d..cc008d829 100644 --- a/packages/slate/src/changes/at-range.js +++ b/packages/slate/src/changes/at-range.js @@ -707,6 +707,20 @@ Changes.insertFragmentAtRange = (change, range, fragment, options = {}) => { return } + // If the fragment starts or ends with single nested block, (e.g., table), + // do not merge this fragment with existing blocks. + if ( + firstBlock != lastBlock && + Block.isBlock(fragment.nodes.first()) && + Block.isBlock(fragment.nodes.last()) && + (firstBlock != fragment.nodes.first() || lastBlock != fragment.nodes.last()) + ) { + fragment.nodes.reverse().forEach((node) => { + change.insertBlockAtRange(range, node, options) + }) + return + } + // If the first and last block aren't the same, we need to insert all of the // nodes after the fragment's first block at the index. if (firstBlock != lastBlock) {