11import { State } from 'react-native-gesture-handler' ;
2- import { scrollTo , useSharedValue , useWorkletCallback } from 'react-native-reanimated' ;
2+ import { scrollTo , useAnimatedReaction , useSharedValue , useWorkletCallback } from 'react-native-reanimated' ;
33import { ANIMATION_STATE , SCROLLABLE_STATE , SHEET_STATE } from '../constants' ;
44import type {
55 ScrollEventHandlerCallbackType ,
@@ -17,7 +17,8 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
1717 scrollableRef ,
1818 scrollableContentOffsetY ,
1919 scrollBuffer ,
20- preserveScrollMomentum
20+ preserveScrollMomentum ,
21+ lockableScrollableContentOffsetY ,
2122) => {
2223 // hooks
2324 const {
@@ -27,10 +28,19 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
2728 animatedHandleGestureState,
2829 animatedScrollableContentOffsetY : rootScrollableContentOffsetY ,
2930 isScrollableLocked,
30- lockableScrollableContentOffsetY,
3131 } = useBottomSheetInternal ( ) ;
3232 const awaitingFirstScroll = useSharedValue ( false ) ;
3333 const scrollEnded = useSharedValue ( false ) ;
34+ const _lockableScrollableContentOffsetY = useSharedValue ( 0 ) ;
35+
36+ useAnimatedReaction (
37+ ( ) => _lockableScrollableContentOffsetY . value ,
38+ _lockableScrollableContentOffsetY => {
39+ if ( lockableScrollableContentOffsetY ) {
40+ lockableScrollableContentOffsetY . value = _lockableScrollableContentOffsetY ;
41+ }
42+ }
43+ ) ;
3444
3545 //#region callbacks
3646 const handleOnScroll : ScrollEventHandlerCallbackType < ScrollEventContextType > =
@@ -82,11 +92,11 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
8292 // @ts -ignore
8393 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
8494 scrollableContentOffsetY . value = lockPosition ;
85- lockableScrollableContentOffsetY . value = lockPosition ;
95+ _lockableScrollableContentOffsetY . value = lockPosition ;
8696 }
8797 return ;
8898 }
89- lockableScrollableContentOffsetY . value = event . contentOffset . y ;
99+ _lockableScrollableContentOffsetY . value = y ;
90100 } ,
91101 [
92102 scrollableRef ,
@@ -100,7 +110,7 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
100110 ( event , context ) => {
101111 const y = event . contentOffset . y ;
102112 scrollableContentOffsetY . value = y ;
103- lockableScrollableContentOffsetY . value = y ;
113+ _lockableScrollableContentOffsetY . value = y ;
104114 rootScrollableContentOffsetY . value = y ;
105115 context . initialContentOffsetY = y ;
106116 awaitingFirstScroll . value = true ;
@@ -161,13 +171,13 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
161171 // @ts -ignore
162172 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
163173 scrollableContentOffsetY . value = lockPosition ;
164- lockableScrollableContentOffsetY . value = lockPosition ;
174+ _lockableScrollableContentOffsetY . value = lockPosition ;
165175 return ;
166176 }
167177
168178 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
169179 scrollableContentOffsetY . value = y ;
170- lockableScrollableContentOffsetY . value = y ;
180+ _lockableScrollableContentOffsetY . value = y ;
171181 rootScrollableContentOffsetY . value = y ;
172182 }
173183 } ,
@@ -190,14 +200,14 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
190200 // @ts -ignore
191201 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
192202 scrollableContentOffsetY . value = 0 ;
193- lockableScrollableContentOffsetY . value = 0 ;
203+ _lockableScrollableContentOffsetY . value = 0 ;
194204 }
195205 return ;
196206 }
197207
198208 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
199209 scrollableContentOffsetY . value = y ;
200- lockableScrollableContentOffsetY . value = y ;
210+ _lockableScrollableContentOffsetY . value = y ;
201211 rootScrollableContentOffsetY . value = y ;
202212 }
203213 } ,
0 commit comments