11import { State } from 'react-native-gesture-handler' ;
2- import { scrollTo , useWorkletCallback } from 'react-native-reanimated' ;
2+ import { scrollTo , useWorkletCallback , useSharedValue , useAnimatedReaction } from 'react-native-reanimated' ;
33import { ANIMATION_STATE , SCROLLABLE_STATE , SHEET_STATE } from '../constants' ;
44import type {
55 ScrollEventHandlerCallbackType ,
@@ -14,7 +14,8 @@ export type ScrollEventContextType = {
1414
1515export const useScrollEventsHandlersDefault : ScrollEventsHandlersHookType = (
1616 scrollableRef ,
17- scrollableContentOffsetY
17+ scrollableContentOffsetY ,
18+ lockableScrollableContentOffsetY
1819) => {
1920 // hooks
2021 const {
@@ -25,6 +26,17 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
2526 animatedScrollableContentOffsetY : rootScrollableContentOffsetY ,
2627 } = useBottomSheetInternal ( ) ;
2728
29+ const _lockableScrollableContentOffsetY = useSharedValue ( 0 ) ;
30+
31+ useAnimatedReaction (
32+ ( ) => _lockableScrollableContentOffsetY . value ,
33+ _lockableScrollableContentOffsetY => {
34+ if ( lockableScrollableContentOffsetY ) {
35+ lockableScrollableContentOffsetY . value = _lockableScrollableContentOffsetY ;
36+ }
37+ }
38+ ) ;
39+
2840 //#region callbacks
2941 const handleOnScroll : ScrollEventHandlerCallbackType < ScrollEventContextType > =
3042 useWorkletCallback (
@@ -56,8 +68,10 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
5668 // @ts -ignore
5769 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
5870 scrollableContentOffsetY . value = lockPosition ;
71+ _lockableScrollableContentOffsetY . value = lockPosition ;
5972 return ;
6073 }
74+ _lockableScrollableContentOffsetY . value = y ;
6175 } ,
6276 [
6377 scrollableRef ,
@@ -70,6 +84,7 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
7084 useWorkletCallback (
7185 ( { contentOffset : { y } } , context ) => {
7286 scrollableContentOffsetY . value = y ;
87+ _lockableScrollableContentOffsetY . value = y ;
7388 rootScrollableContentOffsetY . value = y ;
7489 context . initialContentOffsetY = y ;
7590
@@ -103,11 +118,13 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
103118 // @ts -ignore
104119 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
105120 scrollableContentOffsetY . value = lockPosition ;
121+ _lockableScrollableContentOffsetY . value = lockPosition ;
106122 return ;
107123 }
108124
109125 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
110126 scrollableContentOffsetY . value = y ;
127+ _lockableScrollableContentOffsetY . value = y ;
111128 rootScrollableContentOffsetY . value = y ;
112129 }
113130 } ,
@@ -129,11 +146,13 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
129146 // @ts -ignore
130147 scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
131148 scrollableContentOffsetY . value = 0 ;
149+ _lockableScrollableContentOffsetY . value = 0 ;
132150 return ;
133151 }
134152
135153 if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
136154 scrollableContentOffsetY . value = y ;
155+ _lockableScrollableContentOffsetY . value = y ;
137156 rootScrollableContentOffsetY . value = y ;
138157 }
139158 } ,
0 commit comments