From eb30a80c81bd385f9902548b14df2a3c17e2dd5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Kwas=CC=81niewski?= Date: Tue, 18 Apr 2023 09:51:51 -0700 Subject: [PATCH] fix: make sure initialScrollIndex is bigger than 0 (#36844) Summary: Hey, `adjustCellsAroundViewport` function was checking if `props.initialScrollIndex` is truthy and -1 was returning true. This caused bugs with rendering for tvOS: https://github.com/react-native-tvos/react-native-tvos/pull/485 There are warnings in the code about `initalScrollIndex` being smaller than 0 but this if statement would still allow that. ## Changelog: [General] [Fixed] - Make sure initialScrollToIndex is bigger than 0 when adjusting cells Pull Request resolved: https://github.com/facebook/react-native/pull/36844 Test Plan: Pass -1 as initialScrollToIndex. Check that this code is executed. Reviewed By: cipolleschi Differential Revision: D44856266 Pulled By: NickGerleman fbshipit-source-id: 781a1c0efeae93f00766eede4a42559dcd066d7d --- .../Lists/VirtualizedList.js | 5 +- .../VirtualizedList-test.js.snap | 53 ++++++++++++++++--- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/packages/virtualized-lists/Lists/VirtualizedList.js b/packages/virtualized-lists/Lists/VirtualizedList.js index de44f303b07ce9..2aca79a2ea2503 100644 --- a/packages/virtualized-lists/Lists/VirtualizedList.js +++ b/packages/virtualized-lists/Lists/VirtualizedList.js @@ -616,7 +616,7 @@ class VirtualizedList extends StateSafePureComponent { ), }; } else { - // If we have a non-zero initialScrollIndex and run this before we've scrolled, + // If we have a positive non-zero initialScrollIndex and run this before we've scrolled, // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex. // So let's wait until we've scrolled the view to the right place. And until then, // we will trust the initialScrollIndex suggestion. @@ -627,7 +627,8 @@ class VirtualizedList extends StateSafePureComponent { // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case // where the list is shorter than the visible area) if ( - props.initialScrollIndex && + props.initialScrollIndex != null && + props.initialScrollIndex > 0 && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON ) { diff --git a/packages/virtualized-lists/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap b/packages/virtualized-lists/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap index b59f291eb6dbbe..cd174da04cca2c 100644 --- a/packages/virtualized-lists/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap +++ b/packages/virtualized-lists/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap @@ -3122,12 +3122,53 @@ exports[`gracefully handles negative initialScrollIndex 1`] = ` /> + onFocusCapture={[Function]} + style={null} + > + + + + + + + + + + + + + + + + + `;