From 5d316ad7dc62af8b6d49cfe192847a786cbb81ed Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 24 Apr 2021 21:57:54 -0700 Subject: [PATCH] Fixed scrolling via jump list on series index --- frontend/src/Components/Table/VirtualTable.js | 23 ++++++------- .../Index/Overview/SeriesIndexOverview.js | 1 + .../Index/Overview/SeriesIndexOverviews.js | 34 +++++++++++-------- .../Index/Posters/SeriesIndexPosters.js | 29 ++++++++-------- 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/frontend/src/Components/Table/VirtualTable.js b/frontend/src/Components/Table/VirtualTable.js index b2d68a888..310459866 100644 --- a/frontend/src/Components/Table/VirtualTable.js +++ b/frontend/src/Components/Table/VirtualTable.js @@ -7,8 +7,6 @@ import { WindowScroller, Grid } from 'react-virtualized'; import hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder'; import styles from './VirtualTable.css'; -const ROW_HEIGHT = 38; - function overscanIndicesGetter(options) { const { cellCount, @@ -47,8 +45,7 @@ class VirtualTable extends Component { componentDidUpdate(prevProps, prevState) { const { - items, - scrollIndex + items } = this.props; const { @@ -59,13 +56,6 @@ class VirtualTable extends Component { // recomputeGridSize also forces Grid to discard its cache of rendered cells this._grid.recomputeGridSize(); } - - if (scrollIndex != null && scrollIndex !== prevProps.scrollIndex) { - this._grid.scrollToCell({ - rowIndex: scrollIndex, - columnIndex: 0 - }); - } } // @@ -96,6 +86,8 @@ class VirtualTable extends Component { header, headerHeight, rowRenderer, + rowHeight, + scrollIndex, ...otherProps } = this.props; @@ -125,6 +117,11 @@ class VirtualTable extends Component { if (!height) { return null; } + + const finalScrollTop = scrollIndex == null ? + scrollTop : + scrollIndex * rowHeight; + return ( ; } + let finalScrollTop = scrollTop; + + if (jumpToCharacter != null) { + const index = getIndexOfFirstCharacter(items, jumpToCharacter); + + if (index != null) { + if (index > 0) { + // Adjust 5px upwards so there is a gap between the bottom + // of the toolbar and top of the poster. + + finalScrollTop = rowHeight * index - 5; + } else { + finalScrollTop = 0; + } + + } + } + return (
; } + let finalScrollTop = scrollTop; + + if (jumpToCharacter != null) { + const index = getIndexOfFirstCharacter(items, jumpToCharacter); + + if (index != null) { + const row = Math.floor(index / columnCount); + + finalScrollTop = rowHeight * row; + } + } + return (