From bcba3dc6e89d8f67a4895626277f46d78faaa5e6 Mon Sep 17 00:00:00 2001 From: Tomi Virkki Date: Wed, 14 Oct 2020 12:07:35 +0300 Subject: [PATCH 1/4] fix: Make sure children are requested for new expanded parents --- src/vaadin-grid-data-provider-mixin.html | 3 +-- test/data-provider.html | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/vaadin-grid-data-provider-mixin.html b/src/vaadin-grid-data-provider-mixin.html index b204a55a2..a6104f788 100644 --- a/src/vaadin-grid-data-provider-mixin.html +++ b/src/vaadin-grid-data-provider-mixin.html @@ -382,8 +382,7 @@ .forEach(row => { const cachedItem = this._cache.getItemForIndex(row.index); if (cachedItem) { - this._toggleAttribute('loading', false, row); - this._updateItem(row, cachedItem); + this._getItem(row.index, row); } }); diff --git a/test/data-provider.html b/test/data-provider.html index 1866eb1a1..88244b966 100644 --- a/test/data-provider.html +++ b/test/data-provider.html @@ -303,6 +303,20 @@ expect(grid.dataProvider.getCall(0).args[0].parentItem).to.be.undefined; }); + it('should request items when scrolled to an expanded parent', done => { + grid.size = 51; + grid.dataProvider = sinon.spy(infiniteDataProvider); + grid.itemIdPath = 'value'; + grid.expandedItems = [{value: 'foo50'}]; + flushGrid(grid); + animationFrameFlush(() => { + grid.$.table.scrollTop = 10000; + flushGrid(grid); + expect(grid.dataProvider.lastCall.args[0].parentItem).to.be.ok; + done(); + }) + }); + it('should request pages from 0', () => { expect(grid.dataProvider.getCall(0).args[0].page).to.equal(0); expect(grid.dataProvider.getCall(1).args[0].page).to.equal(1); From 68baff26c3dcaa5634bdbbc785efc23afc8c45f6 Mon Sep 17 00:00:00 2001 From: Tomi Virkki Date: Wed, 14 Oct 2020 12:44:04 +0300 Subject: [PATCH 2/4] Fix a linter issue --- test/data-provider.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/data-provider.html b/test/data-provider.html index 88244b966..d545dd2cd 100644 --- a/test/data-provider.html +++ b/test/data-provider.html @@ -314,7 +314,7 @@ flushGrid(grid); expect(grid.dataProvider.lastCall.args[0].parentItem).to.be.ok; done(); - }) + }); }); it('should request pages from 0', () => { From 71a4367ac409ed035639a5e1d6f52e52fcf7a6d7 Mon Sep 17 00:00:00 2001 From: Tomi Virkki Date: Thu, 15 Oct 2020 17:07:14 +0300 Subject: [PATCH 3/4] fix: restore pendingScrollToIndex --- src/vaadin-grid-data-provider-mixin.html | 6 ++++++ src/vaadin-grid-scroll-mixin.html | 3 +++ test/scroll-to-index.html | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/vaadin-grid-data-provider-mixin.html b/src/vaadin-grid-data-provider-mixin.html index a6104f788..87d8e2417 100644 --- a/src/vaadin-grid-data-provider-mixin.html +++ b/src/vaadin-grid-data-provider-mixin.html @@ -387,6 +387,12 @@ }); this._increasePoolIfNeeded(0); + + if (this.__pendingScrollToIndex) { + const index = this.__pendingScrollToIndex; + delete this.__pendingScrollToIndex; + this.scrollToIndex(index); + } } ); diff --git a/src/vaadin-grid-scroll-mixin.html b/src/vaadin-grid-scroll-mixin.html index 11941c7aa..dc57106cf 100644 --- a/src/vaadin-grid-scroll-mixin.html +++ b/src/vaadin-grid-scroll-mixin.html @@ -131,6 +131,9 @@ */ scrollToIndex(index) { this._accessIronListAPI(() => super.scrollToIndex(index)); + if (this._cache.isLoading()) { + this.__pendingScrollToIndex = index; + } } /** @private */ diff --git a/test/scroll-to-index.html b/test/scroll-to-index.html index 470178273..1751a42b8 100644 --- a/test/scroll-to-index.html +++ b/test/scroll-to-index.html @@ -148,6 +148,22 @@ expect(cell.parentElement.index).to.equal(targetIndex); }); + it('should continue scrolling after child items get loaded', done => { + grid.size = 50; + grid.expandedItems = ['foo49']; + grid.dataProvider = ({page, parentItem}, cb) => { + setTimeout(() => { + const scope = parentItem || ''; + cb(Array(...new Array(grid.pageSize)).map((_, index) => scope + 'foo' + index)); + if (parentItem) { + expect(grid._firstVisibleIndex).to.be.above(75); + done(); + } + }); + }; + grid.scrollToIndex(100); + }); + }); }); From c98de27a3a10ac9c7a2ddc2b5290aeef689da329 Mon Sep 17 00:00:00 2001 From: Tomi Virkki Date: Fri, 16 Oct 2020 10:48:07 +0300 Subject: [PATCH 4/4] Revert "fix: restore pendingScrollToIndex" This reverts commit 71a4367ac409ed035639a5e1d6f52e52fcf7a6d7. --- src/vaadin-grid-data-provider-mixin.html | 6 ------ src/vaadin-grid-scroll-mixin.html | 3 --- test/scroll-to-index.html | 16 ---------------- 3 files changed, 25 deletions(-) diff --git a/src/vaadin-grid-data-provider-mixin.html b/src/vaadin-grid-data-provider-mixin.html index 87d8e2417..a6104f788 100644 --- a/src/vaadin-grid-data-provider-mixin.html +++ b/src/vaadin-grid-data-provider-mixin.html @@ -387,12 +387,6 @@ }); this._increasePoolIfNeeded(0); - - if (this.__pendingScrollToIndex) { - const index = this.__pendingScrollToIndex; - delete this.__pendingScrollToIndex; - this.scrollToIndex(index); - } } ); diff --git a/src/vaadin-grid-scroll-mixin.html b/src/vaadin-grid-scroll-mixin.html index dc57106cf..11941c7aa 100644 --- a/src/vaadin-grid-scroll-mixin.html +++ b/src/vaadin-grid-scroll-mixin.html @@ -131,9 +131,6 @@ */ scrollToIndex(index) { this._accessIronListAPI(() => super.scrollToIndex(index)); - if (this._cache.isLoading()) { - this.__pendingScrollToIndex = index; - } } /** @private */ diff --git a/test/scroll-to-index.html b/test/scroll-to-index.html index 1751a42b8..470178273 100644 --- a/test/scroll-to-index.html +++ b/test/scroll-to-index.html @@ -148,22 +148,6 @@ expect(cell.parentElement.index).to.equal(targetIndex); }); - it('should continue scrolling after child items get loaded', done => { - grid.size = 50; - grid.expandedItems = ['foo49']; - grid.dataProvider = ({page, parentItem}, cb) => { - setTimeout(() => { - const scope = parentItem || ''; - cb(Array(...new Array(grid.pageSize)).map((_, index) => scope + 'foo' + index)); - if (parentItem) { - expect(grid._firstVisibleIndex).to.be.above(75); - done(); - } - }); - }; - grid.scrollToIndex(100); - }); - }); });