Revert D63643856

Summary:
This diff reverts D63643856

`_highestMeasuredFrameIndex` is not properly invalidated causing issues with previous logic when data size shrinks.

bypass-github-export-checks

Changelog:
[General][Changed] - Revert "Fix onEndReached not being called when getItemLayout is present and we scroll past render window"

Reviewed By: NickGerleman

Differential Revision: D64009287

fbshipit-source-id: 8a21b57f5247fc743e65f9a730ff33a9a89d2bc1
This commit is contained in:
generatedunixname89002005232357
2024-10-08 12:13:10 -07:00
committed by Facebook GitHub Bot
parent cbc0978bb6
commit 6b2bbcf632
2 changed files with 5 additions and 27 deletions
@@ -1181,12 +1181,6 @@ class VirtualizedList extends StateSafePureComponent<Props, State> {
if (hiPriInProgress) {
this._hiPriInProgress = false;
}
// We only call `onEndReached` after we render the last cell, but when
// getItemLayout is present, we can scroll past the last rendered cell, and
// never trigger a new layout or bounds change, so we need to check again
// after rendering more cells.
this._maybeCallOnEdgeReached();
}
_cellRefs: {[string]: null | CellRenderer<any>} = {};
@@ -1497,20 +1491,11 @@ class VirtualizedList extends StateSafePureComponent<Props, State> {
const {
data,
getItemCount,
getItemLayout,
onStartReached,
onStartReachedThreshold,
onEndReached,
onEndReachedThreshold,
} = this.props;
// Wait until we have real metrics
if (
!this._listMetrics.hasContentLength() ||
this._scrollMetrics.visibleLength === 0
) {
return;
}
// If we have any pending scroll updates it means that the scroll metrics
// are out of date and we should not call any of the edge reached callbacks.
if (this.state.pendingScrollUpdateCount > 0) {
@@ -1553,9 +1538,6 @@ class VirtualizedList extends StateSafePureComponent<Props, State> {
if (
onEndReached &&
this.state.cellsAroundViewport.last === getItemCount(data) - 1 &&
(getItemLayout != null ||
this._listMetrics.getHighestMeasuredCellIndex() ===
getItemCount(data) - 1) &&
isWithinEndThreshold &&
this._listMetrics.getContentLength() !== this._sentEndForContentLength
) {
@@ -663,6 +663,11 @@ describe('VirtualizedList', () => {
renderItem: ({item}) => <item value={item.key} />,
getItem: (items, index) => items[index],
getItemCount: items => items.length,
getItemLayout: (items, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
}),
onEndReached,
};
@@ -689,15 +694,6 @@ describe('VirtualizedList', () => {
expect(onEndReached).not.toHaveBeenCalled();
await act(() => {
for (let i = 0; i < 20; ++i) {
simulateCellLayout(component, data, i, {
width: 10,
height: ITEM_HEIGHT,
x: 0,
y: i * ITEM_HEIGHT,
});
}
instance._onScroll({
timeStamp: 1000,
nativeEvent: {