Skip to content

Commit

Permalink
fix: sync state on undo when editor is unfocused (#5737)
Browse files Browse the repository at this point in the history
* fix: undo event when not focused

* chore: add changeset

* Add `HistoryEditor.withMerging` to docs (#5738)

* chore: just trigger test:integration

* chore: trigger test:integration

* fix: firefox test integration environment (#5742)

* fix: fix firefox test integration env

* chore: test ubuntu apt source

* chore: IMMUTABLE_INSTALLS ?

* fix: ubuntu version

* fix: undo event when not focused

* chore: add changeset

* chore: just trigger test:integration

* chore: trigger test:integration

---------

Co-authored-by: Ty Mick <5317080+TyMick@users.noreply.github.com>
  • Loading branch information
WindRunnerMax and TyMick authored Oct 16, 2024
1 parent 97ffee4 commit cd21bb1
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/curvy-seals-attack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'slate-react': patch
---

fix: sync built-in state on undo when editor is unfocused
25 changes: 24 additions & 1 deletion packages/slate-react/src/components/editable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1042,8 +1042,31 @@ export const Editable = forwardRef(
op()
}
deferredOperations.current = []

// COMPAT: Since `beforeinput` doesn't fully `preventDefault`,
// there's a chance that content might be placed in the browser's undo stack.
// This means undo can be triggered even when the div is not focused,
// and it only triggers the input event for the node. (2024/10/09)
if (!ReactEditor.isFocused(editor)) {
const native = event.nativeEvent as InputEvent
const maybeHistoryEditor: any = editor
if (
native.inputType === 'historyUndo' &&
typeof maybeHistoryEditor.undo === 'function'
) {
maybeHistoryEditor.undo()
return
}
if (
native.inputType === 'historyRedo' &&
typeof maybeHistoryEditor.redo === 'function'
) {
maybeHistoryEditor.redo()
return
}
}
},
[attributes.onInput]
[attributes.onInput, editor]
)}
onBlur={useCallback(
(event: React.FocusEvent<HTMLDivElement>) => {
Expand Down

0 comments on commit cd21bb1

Please sign in to comment.