1- import { scrollTo , useSharedValue , useWorkletCallback } from 'react-native-reanimated' ;
1+ import { scrollTo , useSharedValue , useWorkletCallback , useAnimatedReaction } from 'react-native-reanimated' ;
22import { useBottomSheetInternal } from './useBottomSheetInternal' ;
33import { ANIMATION_STATE , SCROLLABLE_STATE , SHEET_STATE } from '../constants' ;
44import type {
@@ -16,7 +16,8 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
1616 scrollableRef ,
1717 scrollableContentOffsetY ,
1818 scrollBuffer ,
19- preserveScrollMomentum
19+ preserveScrollMomentum ,
20+ lockableScrollableContentOffsetY ,
2021) => {
2122 // hooks
2223 const {
@@ -25,10 +26,19 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
2526 animatedAnimationState,
2627 animatedScrollableContentOffsetY : rootScrollableContentOffsetY ,
2728 isScrollableLocked,
28- lockableScrollableContentOffsetY,
2929 } = useBottomSheetInternal ( ) ;
3030 const awaitingFirstScroll = useSharedValue ( false ) ;
3131 const scrollEnded = useSharedValue ( false ) ;
32+ const _lockableScrollableContentOffsetY = useSharedValue ( 0 ) ;
33+
34+ useAnimatedReaction (
35+ ( ) => _lockableScrollableContentOffsetY . value ,
36+ _lockableScrollableContentOffsetY => {
37+ if ( lockableScrollableContentOffsetY ) {
38+ lockableScrollableContentOffsetY . value = _lockableScrollableContentOffsetY ;
39+ }
40+ }
41+ ) ;
3242
3343 //#region callbacks
3444 const handleOnScroll : ScrollEventHandlerCallbackType < ScrollEventContextType > =
@@ -71,11 +81,11 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
7181 // @ts -ignore
7282 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
7383 scrollableContentOffsetY . value = lockPosition ;
74- lockableScrollableContentOffsetY . value = lockPosition ;
84+ _lockableScrollableContentOffsetY . value = lockPosition ;
7585 }
7686 return ;
7787 }
78- lockableScrollableContentOffsetY . value = event . contentOffset . y ;
88+ _lockableScrollableContentOffsetY . value = event . contentOffset . y ;
7989 } ,
8090 [
8191 scrollableRef ,
@@ -89,7 +99,7 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
8999 ( event , context ) => {
90100 const y = event . contentOffset . y ;
91101 scrollableContentOffsetY . value = y ;
92- lockableScrollableContentOffsetY . value = y ;
102+ _lockableScrollableContentOffsetY . value = y ;
93103 rootScrollableContentOffsetY . value = y ;
94104 context . initialContentOffsetY = y ;
95105 awaitingFirstScroll . value = true ;
@@ -150,12 +160,12 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
150160 // @ts -ignore
151161 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
152162 scrollableContentOffsetY . value = lockPosition ;
153- lockableScrollableContentOffsetY . value = lockPosition ;
163+ _lockableScrollableContentOffsetY . value = lockPosition ;
154164 return ;
155165 }
156166 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
157167 scrollableContentOffsetY . value = y ;
158- lockableScrollableContentOffsetY . value = y ;
168+ _lockableScrollableContentOffsetY . value = y ;
159169 rootScrollableContentOffsetY . value = y ;
160170 }
161171 } ,
@@ -178,13 +188,13 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
178188 // @ts -ignore
179189 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
180190 scrollableContentOffsetY . value = 0 ;
181- lockableScrollableContentOffsetY . value = 0 ;
191+ _lockableScrollableContentOffsetY . value = 0 ;
182192 }
183193 return ;
184194 }
185195 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
186196 scrollableContentOffsetY . value = y ;
187- lockableScrollableContentOffsetY . value = y ;
197+ _lockableScrollableContentOffsetY . value = y ;
188198 rootScrollableContentOffsetY . value = y ;
189199 }
190200 } ,
0 commit comments