From 70f7ec68ec489589524f497afbb307064a8788a5 Mon Sep 17 00:00:00 2001 From: Tomi Virkki Date: Tue, 6 Feb 2018 12:15:02 +0200 Subject: [PATCH] Only scroll to index when necessary --- src/vaadin-grid-keyboard-navigation-mixin.html | 6 ++---- test/keyboard-navigation.html | 8 ++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/vaadin-grid-keyboard-navigation-mixin.html b/src/vaadin-grid-keyboard-navigation-mixin.html index c2ff3c88a..4c894b5b9 100644 --- a/src/vaadin-grid-keyboard-navigation-mixin.html +++ b/src/vaadin-grid-keyboard-navigation-mixin.html @@ -124,11 +124,9 @@ } _ensureScrolledToIndex(index) { - const visibleItemsCount = this._lastVisibleIndex - this._firstVisibleIndex - 1; - if (index <= this._firstVisibleIndex) { + const targetRowInDom = Array.from(this.$.items.children).filter(child => child.index === index)[0]; + if (!targetRowInDom) { this._scrollToIndex(index); - } else if (index >= this._firstVisibleIndex + visibleItemsCount) { - this._scrollToIndex(index - visibleItemsCount); } } diff --git a/test/keyboard-navigation.html b/test/keyboard-navigation.html index ce303c030..2bc992a45 100644 --- a/test/keyboard-navigation.html +++ b/test/keyboard-navigation.html @@ -1163,6 +1163,14 @@ expect(grid.shadowRoot.activeElement).to.equal(getContainerCell(grid.$.header, 0, 0)); }); + it('should not scroll if the new focused item in viewport', () => { + focusItem(0); + ctrlEnd(); + const scrollTop = grid.$.table.scrollTop; + up(); + expect(grid.$.table.scrollTop).to.equal(scrollTop); + }); + describe('rotating focus indicator prevention', () => { it('should hide navigation mode when a focused row goes off screen', () => { focusItem(0);