From 5aa13a2141388e719e24590a44aee7ef1d3c9abc Mon Sep 17 00:00:00 2001 From: Ajay Bura <32841439+ajbura@users.noreply.github.com> Date: Sat, 21 Oct 2023 14:42:37 +0530 Subject: [PATCH] fix backward delete with previous empty line --- src/app/components/editor/keyboard.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app/components/editor/keyboard.ts b/src/app/components/editor/keyboard.ts index 7031749e..2ea2dbe1 100644 --- a/src/app/components/editor/keyboard.ts +++ b/src/app/components/editor/keyboard.ts @@ -1,6 +1,6 @@ import { isKeyHotkey } from 'is-hotkey'; import { KeyboardEvent } from 'react'; -import { Editor, Range } from 'slate'; +import { Editor, Element as SlateElement, Range, Transforms } from 'slate'; import { isAnyMarkActive, isBlockActive, removeAllMark, toggleBlock, toggleMark } from './utils'; import { BlockType, MarkType } from './types'; @@ -31,6 +31,9 @@ export const toggleKeyboardShortcut = (editor: Editor, event: KeyboardEvent<Elem if (startPoint.offset !== 0) return false; const [parentNode, parentPath] = Editor.parent(editor, startPoint); + const parentLocation = { at: parentPath }; + const [previousNode] = Editor.previous(editor, parentLocation) ?? []; + const [nextNode] = Editor.next(editor, parentLocation) ?? []; if (Editor.isEditor(parentNode)) return false; @@ -45,14 +48,20 @@ export const toggleKeyboardShortcut = (editor: Editor, event: KeyboardEvent<Elem ) { // exit formatting only when line block // is first of last of it's parent - const parentLocation = { at: parentPath }; - const [previousNode] = Editor.previous(editor, parentLocation) ?? []; - const [nextNode] = Editor.next(editor, parentLocation) ?? []; if (!previousNode || !nextNode) { toggleBlock(editor, BlockType.Paragraph); return true; } } + // Unwrap paragraph children to put them + // in previous none paragraph element + if (SlateElement.isElement(previousNode) && previousNode.type !== BlockType.Paragraph) { + Transforms.unwrapNodes(editor, { + at: startPoint, + }); + } + Editor.deleteBackward(editor); + return true; } if (isKeyHotkey('mod+e', event) || isKeyHotkey('escape', event)) {