Take previously added/removed nodes into account when fetching child … #5396
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
When when a node has two child nodes that would violate the core constraints (i.e. two inline nodes as children of the Editor) this can cause other nodes to be deleted that do not violate any core constraints.
Example
Input:
Normalized result before this change:
Normalized result after this change:
See adapted unit tests for more examples.
Context
Disclaimer: I only know very little about Slates internal, so my understanding here might not be 100% correct.
Looks to me like the current logic for iterating children in the normalization uses two sets of variables
node
&i
andcurrentNode
&n
. I thinknode
&i
are referring to the state of the editor whennormalizeNode
was entered andcurrentNode
&n
are referring the "current" state, taking into account transforms from an earlier iteration.The transforms that are executed when a constraint violation is detected are always using
n
to construct the path to the transformed node, but the constraint was checked on the child node at indexi
instead, which leads to the wrong nodes being transformed.Checks
yarn test
.yarn lint
. (Fix errors withyarn fix
.)yarn start
.)yarn changeset add
.)