[slate-react]: fix selection bugs when multiple editors share value #4475
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
The
KEY_TO_ELEMENT
WeakMap must be scoped to the editor instance to avoid collisions between multiple editors in the same DOM that share the same editor value (object equality onNode
).This is solved by wrapping it in another WeakMap keyed on the editor object, that returns the
KEY_TO_ELEMENT
WeakMap for that editor.It could also be solved by just putting the
KEY_TO_ELEMENT
Weakmap directly on the editor instance, but I didn't want to tangle theReactEditor
interface with these (internal) things and keep using weak-maps only for this logic.Issue
Fixes:
#3380
#3997
#4129
Example
This will illustrate the problem:
Then try the same on the deployed preview: https://deploy-preview-4475--slatejs.netlify.app/examples/editable-voids to confirm the fix.
Checks
yarn test
.yarn lint
. (Fix errors withyarn fix
.)yarn start
.)yarn changeset add
.)