From 3a0693869d10793620e0073b0782dd34ac5aea89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Thu, 26 Aug 2021 22:32:32 +0200 Subject: [PATCH] fix: fix focus on iOS, fix #1806 --- packages/core/src/commands/focus.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/core/src/commands/focus.ts b/packages/core/src/commands/focus.ts index a5e78aea..00b078c5 100644 --- a/packages/core/src/commands/focus.ts +++ b/packages/core/src/commands/focus.ts @@ -2,6 +2,7 @@ import { EditorState, Selection, TextSelection } from 'prosemirror-state' import { RawCommands, FocusPosition } from '../types' import minMax from '../utilities/minMax' import isTextSelection from '../helpers/isTextSelection' +import isiOS from '../utilities/isiOS' function resolveSelection(state: EditorState, position: FocusPosition = null) { if (!position) { @@ -48,11 +49,18 @@ export const focus: RawCommands['focus'] = (position = null) => ({ dispatch, }) => { const delayedFocus = () => { + // focus within `requestAnimationFrame` breaks focus on iOS + // so we have to call this + if (isiOS()) { + (view.dom as HTMLElement).focus() + } + // For React we have to focus asynchronously. Otherwise wild things happen. // see: https://github.com/ueberdosis/tiptap/issues/1520 requestAnimationFrame(() => { if (!editor.isDestroyed) { view.focus() + editor.commands.scrollIntoView() } }) }