From 300dc57a00c6437519ae0044384811efec653758 Mon Sep 17 00:00:00 2001 From: Joseph Rollins Date: Thu, 21 Sep 2023 15:40:02 -0700 Subject: [PATCH] Retain editor selection when using ReactEditor.focus() (#5516) * Retain editor selection on ReactEditor.focus() * Add changeset * Fix lint --- .changeset/selfish-frogs-press.md | 5 +++++ packages/slate-react/src/plugin/react-editor.ts | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/selfish-frogs-press.md diff --git a/.changeset/selfish-frogs-press.md b/.changeset/selfish-frogs-press.md new file mode 100644 index 000000000..48c48727b --- /dev/null +++ b/.changeset/selfish-frogs-press.md @@ -0,0 +1,5 @@ +--- +'slate-react': minor +--- + +Retain editor selection when using ReactEditor.focus() diff --git a/packages/slate-react/src/plugin/react-editor.ts b/packages/slate-react/src/plugin/react-editor.ts index 3653c99c0..1d77d16a7 100644 --- a/packages/slate-react/src/plugin/react-editor.ts +++ b/packages/slate-react/src/plugin/react-editor.ts @@ -417,6 +417,12 @@ export const ReactEditor: ReactEditorInterface = { IS_FOCUSED.set(editor, true) if (root.activeElement !== el) { + if (editor.selection && root instanceof Document) { + const domSelection = root.getSelection() + const domRange = ReactEditor.toDOMRange(editor, editor.selection) + domSelection?.removeAllRanges() + domSelection?.addRange(domRange) + } el.focus({ preventScroll: true }) } },