1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-19 13:41:19 +02:00

When resolving a slate Point from a DOM selection (toSlatePoint), consider that a node is only void if it's within the same editor that is resolving the Point. (#4885)

If you have a nested editor setup. For example, one editor has a void node that contains another editor. In this case, a resolution of a selection by the nested editor previously would consider that the selection is for a void node since an ancestor void node does exist. However, this selection is only a void node in the context of this editor if the ancestor void node is contained in the editor.
This commit is contained in:
Ryan Mitts
2022-03-20 04:04:33 -07:00
committed by GitHub
parent 1433499e98
commit 07669dca4b
2 changed files with 17 additions and 1 deletions

View File

@@ -484,7 +484,16 @@ export const ReactEditor = {
let offset = 0
if (parentNode) {
const voidNode = parentNode.closest('[data-slate-void="true"]')
const editorEl = ReactEditor.toDOMNode(editor, editor)
const potentialVoidNode = parentNode.closest('[data-slate-void="true"]')
// Need to ensure that the closest void node is actually a void node
// within this editor, and not a void node within some parent editor. This can happen
// if this editor is within a void node of another editor ("nested editors", like in
// the "Editable Voids" example on the docs site).
const voidNode =
potentialVoidNode && editorEl.contains(potentialVoidNode)
? potentialVoidNode
: null
let leafNode = parentNode.closest('[data-slate-leaf]')
let domNode: DOMElement | null = null