From 32ffd9d804e92b18898312581b9d4af61e59512a Mon Sep 17 00:00:00 2001 From: Vaadin Bot Date: Thu, 12 May 2022 15:21:29 +0200 Subject: [PATCH] fix: do not throw on Tab if grid has tabindex (#3838) (#3839) Co-authored-by: Serhii Kulykov --- .../grid/src/vaadin-grid-keyboard-navigation-mixin.js | 5 +++++ packages/grid/test/keyboard-navigation.test.js | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js b/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js index 2318e57fcaa..184e15d6b05 100644 --- a/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js +++ b/packages/grid/src/vaadin-grid-keyboard-navigation-mixin.js @@ -617,6 +617,11 @@ export const KeyboardNavigationMixin = (superClass) => _onTabKeyDown(e) { const focusTarget = this._predictFocusStepTarget(e.composedPath()[0], e.shiftKey ? -1 : 1); + // Can be undefined if grid has tabindex + if (!focusTarget) { + return; + } + // Prevent focus-trap logic from intercepting the event. e.stopPropagation(); diff --git a/packages/grid/test/keyboard-navigation.test.js b/packages/grid/test/keyboard-navigation.test.js index b20e8531a15..de98e4ca827 100644 --- a/packages/grid/test/keyboard-navigation.test.js +++ b/packages/grid/test/keyboard-navigation.test.js @@ -2183,6 +2183,16 @@ describe('empty grid', () => { // Expect programmatic focus on focus exit element expect(grid.shadowRoot.activeElement).to.equal(grid.$.focusexit); }); + + it('should not throw on Shift + Tab when grid has tabindex', () => { + grid.setAttribute('tabindex', '0'); + + grid.focus(); + + expect(() => { + shiftTab(grid); + }).to.not.throw(Error); + }); }); describe('hierarchical data', () => {