From cf2d97d95e533b803cdc3b544eece1baead24991 Mon Sep 17 00:00:00 2001 From: Ugur Saglam <106508695+ugur-vaadin@users.noreply.github.com> Date: Fri, 12 Apr 2024 09:44:54 +0300 Subject: [PATCH] fix: do not move focus when focused in on grid via clicking (#7323) --- .../grid/src/vaadin-grid-keyboard-navigation-mixin.js | 10 ++++++---- packages/grid/test/keyboard-navigation.common.js | 11 +++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js b/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js index ac49625f65..0cf17dcf1d 100644 --- a/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js +++ b/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js @@ -814,10 +814,12 @@ export const KeyboardNavigationMixin = (superClass) => const rootTarget = e.composedPath()[0]; if (rootTarget === this.$.table || rootTarget === this.$.focusexit) { - // The focus enters the top (bottom) of the grid, meaning that user has - // tabbed (shift-tabbed) into the grid. Move the focus to - // the first (the last) focusable. - this._predictFocusStepTarget(rootTarget, rootTarget === this.$.table ? 1 : -1).focus(); + if (!this._isMousedown) { + // The focus enters the top (bottom) of the grid, meaning that user has + // tabbed (shift-tabbed) into the grid. Move the focus to + // the first (the last) focusable. + this._predictFocusStepTarget(rootTarget, rootTarget === this.$.table ? 1 : -1).focus(); + } this._setInteracting(false); } else { this._detectInteracting(e); diff --git a/packages/grid/test/keyboard-navigation.common.js b/packages/grid/test/keyboard-navigation.common.js index 5dd8a75a84..2afe8a8bba 100644 --- a/packages/grid/test/keyboard-navigation.common.js +++ b/packages/grid/test/keyboard-navigation.common.js @@ -539,6 +539,17 @@ describe('keyboard navigation', () => { expect(grid.shadowRoot.activeElement).to.equal(tabbableElements[3]); }); + it('should not enter grid on table click', () => { + const tabbableElements = getTabbableElements(grid.shadowRoot); + + // Click and focusin on table element + mouseDown(tabbableElements[0]); + focusin(tabbableElements[0], focusable); + + // Expect no focus on header cell + expect(grid.shadowRoot.activeElement).to.be.null; + }); + it('should set native focus to header on header cell click', () => { const tabbableElements = getTabbableElements(grid.shadowRoot); focusFirstHeaderCell();