Implement onScrollToTop event for Fabric (#42128)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42128

Scroll view was not emitting the `onScrollToTop` event when the user tapped on the status bar.
This change fixes this by adding the event to the C++ Event Emitter and by invoking it into the `RCTScrollViewComponentView`

## Changelog
[iOS][Added] - Add onScrollToTop event in Fabric

Reviewed By: sammy-SC

Differential Revision: D52509919

fbshipit-source-id: 7b72c927823fa971be99c4da4b0287d4e23a02b6
This commit is contained in:
Riccardo Cipolleschi
2024-01-03 08:08:30 -08:00
committed by Facebook GitHub Bot
parent 6cd1aaf3ae
commit 327df8a719
3 changed files with 10 additions and 0 deletions
@@ -472,6 +472,7 @@ static void RCTSendScrollEventForNativeAnimations_DEPRECATED(UIScrollView *scrol
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
_isUserTriggeredScrolling = NO;
static_cast<const ScrollViewEventEmitter &>(*_eventEmitter).onScrollToTop([self _scrollViewMetrics]);
[self _updateStateWithContentOffset];
}
@@ -64,6 +64,14 @@ void ScrollViewEventEmitter::onScroll(
});
}
void ScrollViewEventEmitter::onScrollToTop(
const ScrollViewMetrics& scrollViewMetrics) const {
dispatchUniqueEvent(
"scrollToTop", [scrollViewMetrics](jsi::Runtime& runtime) {
return scrollViewMetricsPayload(runtime, scrollViewMetrics);
});
}
void ScrollViewEventEmitter::onScrollBeginDrag(
const ScrollViewMetrics& scrollViewMetrics) const {
dispatchScrollViewEvent("scrollBeginDrag", scrollViewMetrics);
@@ -33,6 +33,7 @@ class ScrollViewEventEmitter : public ViewEventEmitter {
void onScrollEndDrag(const ScrollViewMetrics& scrollViewMetrics) const;
void onMomentumScrollBegin(const ScrollViewMetrics& scrollViewMetrics) const;
void onMomentumScrollEnd(const ScrollViewMetrics& scrollViewMetrics) const;
void onScrollToTop(const ScrollViewMetrics& scrollViewMetrics) const;
private:
void dispatchScrollViewEvent(