diff --git a/ui/nuxeo-data-grid/nuxeo-data-grid.js b/ui/nuxeo-data-grid/nuxeo-data-grid.js index 0756fa70b..c71468602 100644 --- a/ui/nuxeo-data-grid/nuxeo-data-grid.js +++ b/ui/nuxeo-data-grid/nuxeo-data-grid.js @@ -218,16 +218,42 @@ import { PageProviderDisplayBehavior } from '../nuxeo-page-provider-display-beha type: Boolean, value: false, }, + + _lastIndex: { + type: Number, + value: 0, + }, + + _lastIndexValue: { + type: Number, + value: 0, + }, }; } static get observers() { - return ['_fetchMissingItems(loading)']; + return ['_fetchMissingItems(loading)', '_lastIndexChanged(lastIndex)']; } ready() { super.ready(); this.addEventListener('iron-resize', this._fetchMissingItems); + this.addEventListener('keydown', this._handleKeyDown); + } + + _handleKeyDown(event) { + if (event.key === 'Tab') { + if ( + this.$.list.lastVisibleIndex === this._lastIndexValue || + this.$.list.lastVisibleIndex === this._lastIndexValue - 1 + ) { + this.$.list.scrollTop = 0; + } + } + } + + _lastIndexChanged(lastIndex) { + this._lastIndexValue = lastIndex; } // WEBUI-159: Check if there are more items in viewport than the ones set by the provider and load them.