From b3e722099cd0dfa3e1bb10058933e7243e902307 Mon Sep 17 00:00:00 2001 From: matthewlipski Date: Mon, 30 Sep 2024 11:38:54 +0200 Subject: [PATCH 1/2] Made table handles hide when selection is active --- .../TableHandles/TableHandlesPlugin.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts index bf40dade8c..d7ce9f26c8 100644 --- a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts +++ b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts @@ -127,6 +127,7 @@ export class TableHandlesView< }; pmView.dom.addEventListener("mousemove", this.mouseMoveHandler); + pmView.dom.addEventListener("mouseup", this.mouseUpHandler); pmView.root.addEventListener( "dragover", @@ -145,6 +146,16 @@ export class TableHandlesView< return; } + // Prevents table handles from showing while a selection is active. + if (!this.pmView.state.selection.empty) { + if (this.state?.show) { + this.state.show = false; + this.emitUpdate(); + } + + return; + } + const target = domCellAround(event.target as HTMLElement); if (!target || !this.editor.isEditable) { @@ -231,6 +242,11 @@ export class TableHandlesView< return false; }; + mouseUpHandler = (event: MouseEvent) => { + // Have to wait for changes from view to propagate to state. + setTimeout(() => this.mouseMoveHandler(event), 10); + }; + dragOverHandler = (event: DragEvent) => { if (this.state?.draggingState === undefined) { return; From ba5e8f2d942380621f4fec01c15309a36580d68d Mon Sep 17 00:00:00 2001 From: matthewlipski Date: Mon, 30 Sep 2024 14:37:58 +0200 Subject: [PATCH 2/2] Changed logic --- .../TableHandles/TableHandlesPlugin.ts | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts index d7ce9f26c8..b8e069b5e5 100644 --- a/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts +++ b/packages/core/src/extensions/TableHandles/TableHandlesPlugin.ts @@ -107,6 +107,8 @@ export class TableHandlesView< public menuFrozen = false; + public mouseState: "up" | "down" | "selecting" = "up"; + public prevWasEditable: boolean | null = null; constructor( @@ -127,7 +129,8 @@ export class TableHandlesView< }; pmView.dom.addEventListener("mousemove", this.mouseMoveHandler); - pmView.dom.addEventListener("mouseup", this.mouseUpHandler); + pmView.dom.addEventListener("mousedown", this.viewMousedownHandler); + pmView.dom.addEventListener("mouseup", this.viewMouseupHandler); pmView.root.addEventListener( "dragover", @@ -141,18 +144,30 @@ export class TableHandlesView< pmView.root.addEventListener("scroll", this.scrollHandler, true); } + viewMousedownHandler = () => { + this.mouseState = "down"; + }; + + viewMouseupHandler = (event: MouseEvent) => { + this.mouseState = "up"; + this.mouseMoveHandler(event); + }; + mouseMoveHandler = (event: MouseEvent) => { if (this.menuFrozen) { return; } - // Prevents table handles from showing while a selection is active. - if (!this.pmView.state.selection.empty) { + if (this.mouseState === "down") { + this.mouseState = "selecting"; + if (this.state?.show) { this.state.show = false; this.emitUpdate(); } + } + if (this.mouseState === "selecting") { return; } @@ -242,11 +257,6 @@ export class TableHandlesView< return false; }; - mouseUpHandler = (event: MouseEvent) => { - // Have to wait for changes from view to propagate to state. - setTimeout(() => this.mouseMoveHandler(event), 10); - }; - dragOverHandler = (event: DragEvent) => { if (this.state?.draggingState === undefined) { return;