fix(ReservationList): prevent FlatList from rendering with empty data #2748
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #2750
Problem
The Agenda's ReservationList has a scrolling bug where only the first ~10-20 items render and users can't scroll further. This happens intermittently and is hard to reproduce consistently.
Root Cause
React Native's FlatList has a known issue where it gets "stuck" if initially rendered with empty data (facebook/react-native#39421).
In ReservationList, the state is initialized with
reservations: []in the constructor, and the FlatList renders beforecomponentDidMountpopulates the data. By then, the FlatList is already broken.Solution
Show the loading indicator until
this.state.reservationshas actual data. This ensures the FlatList is never mounted with an empty array.Testing
Tested on a production app with hundreds of agenda items. Before the fix, scrolling would stop after ~20 items. After the fix, all items render and scroll correctly.