Skip to content

Commit 3280919

Browse files
committed
Lexical: Improved diagram selection and keyboard usage
Fixes issues where drawings could not be removed via backspace or delete.
1 parent d149b80 commit 3280919

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

resources/js/wysiwyg/services/keyboard-handling.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ import {$getNearestNodeBlockParent, $getParentOfType} from "../utils/nodes";
1717
import {$setInsetForSelection} from "../utils/lists";
1818
import {$isListItemNode} from "@lexical/list";
1919
import {$isDetailsNode, DetailsNode} from "@lexical/rich-text/LexicalDetailsNode";
20+
import {$isDiagramNode} from "../utils/diagrams";
2021

2122
function isSingleSelectedNode(nodes: LexicalNode[]): boolean {
2223
if (nodes.length === 1) {
2324
const node = nodes[0];
24-
if ($isDecoratorNode(node) || $isImageNode(node) || $isMediaNode(node)) {
25+
if ($isDecoratorNode(node) || $isImageNode(node) || $isMediaNode(node) || $isDiagramNode(node)) {
2526
return true;
2627
}
2728
}

resources/js/wysiwyg/ui/decorators/diagram.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {EditorDecorator} from "../framework/decorator";
22
import {EditorUiContext} from "../framework/core";
3-
import {BaseSelection} from "lexical";
3+
import {BaseSelection, CLICK_COMMAND, COMMAND_PRIORITY_NORMAL} from "lexical";
44
import {DiagramNode} from "@lexical/rich-text/LexicalDiagramNode";
55
import {$selectionContainsNode, $selectSingleNode} from "../../utils/selection";
66
import {$openDrawingEditorForNode} from "../../utils/diagrams";
@@ -12,11 +12,17 @@ export class DiagramDecorator extends EditorDecorator {
1212
setup(context: EditorUiContext, element: HTMLElement) {
1313
const diagramNode = this.getNode();
1414
element.classList.add('editor-diagram');
15-
element.addEventListener('click', event => {
15+
16+
context.editor.registerCommand(CLICK_COMMAND, (event: MouseEvent): boolean => {
17+
if (!element.contains(event.target as HTMLElement)) {
18+
return false;
19+
}
20+
1621
context.editor.update(() => {
1722
$selectSingleNode(this.getNode());
18-
})
19-
});
23+
});
24+
return true;
25+
}, COMMAND_PRIORITY_NORMAL);
2026

2127
element.addEventListener('dblclick', event => {
2228
context.editor.getEditorState().read(() => {

0 commit comments

Comments
 (0)