1
- import { scrollTo , useSharedValue , useWorkletCallback } from 'react-native-reanimated' ;
1
+ import { scrollTo , useSharedValue , useWorkletCallback , useAnimatedReaction } from 'react-native-reanimated' ;
2
2
import { useBottomSheetInternal } from './useBottomSheetInternal' ;
3
3
import { ANIMATION_STATE , SCROLLABLE_STATE , SHEET_STATE } from '../constants' ;
4
4
import type {
@@ -16,7 +16,8 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
16
16
scrollableRef ,
17
17
scrollableContentOffsetY ,
18
18
scrollBuffer ,
19
- preserveScrollMomentum
19
+ preserveScrollMomentum ,
20
+ lockableScrollableContentOffsetY ,
20
21
) => {
21
22
// hooks
22
23
const {
@@ -25,10 +26,19 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
25
26
animatedAnimationState,
26
27
animatedScrollableContentOffsetY : rootScrollableContentOffsetY ,
27
28
isScrollableLocked,
28
- lockableScrollableContentOffsetY,
29
29
} = useBottomSheetInternal ( ) ;
30
30
const awaitingFirstScroll = useSharedValue ( false ) ;
31
31
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
+ ) ;
32
42
33
43
//#region callbacks
34
44
const handleOnScroll : ScrollEventHandlerCallbackType < ScrollEventContextType > =
@@ -71,11 +81,11 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
71
81
// @ts -ignore
72
82
scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
73
83
scrollableContentOffsetY . value = lockPosition ;
74
- lockableScrollableContentOffsetY . value = lockPosition ;
84
+ _lockableScrollableContentOffsetY . value = lockPosition ;
75
85
}
76
86
return ;
77
87
}
78
- lockableScrollableContentOffsetY . value = event . contentOffset . y ;
88
+ _lockableScrollableContentOffsetY . value = event . contentOffset . y ;
79
89
} ,
80
90
[
81
91
scrollableRef ,
@@ -89,7 +99,7 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
89
99
( event , context ) => {
90
100
const y = event . contentOffset . y ;
91
101
scrollableContentOffsetY . value = y ;
92
- lockableScrollableContentOffsetY . value = y ;
102
+ _lockableScrollableContentOffsetY . value = y ;
93
103
rootScrollableContentOffsetY . value = y ;
94
104
context . initialContentOffsetY = y ;
95
105
awaitingFirstScroll . value = true ;
@@ -150,12 +160,12 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
150
160
// @ts -ignore
151
161
scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
152
162
scrollableContentOffsetY . value = lockPosition ;
153
- lockableScrollableContentOffsetY . value = lockPosition ;
163
+ _lockableScrollableContentOffsetY . value = lockPosition ;
154
164
return ;
155
165
}
156
166
if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
157
167
scrollableContentOffsetY . value = y ;
158
- lockableScrollableContentOffsetY . value = y ;
168
+ _lockableScrollableContentOffsetY . value = y ;
159
169
rootScrollableContentOffsetY . value = y ;
160
170
}
161
171
} ,
@@ -178,13 +188,13 @@ export const useScrollEventsHandlersDefault: ScrollEventsHandlersHookType = (
178
188
// @ts -ignore
179
189
scrollTo ( scrollableRef , 0 , lockPosition , false ) ;
180
190
scrollableContentOffsetY . value = 0 ;
181
- lockableScrollableContentOffsetY . value = 0 ;
191
+ _lockableScrollableContentOffsetY . value = 0 ;
182
192
}
183
193
return ;
184
194
}
185
195
if ( animatedAnimationState . value !== ANIMATION_STATE . RUNNING ) {
186
196
scrollableContentOffsetY . value = y ;
187
- lockableScrollableContentOffsetY . value = y ;
197
+ _lockableScrollableContentOffsetY . value = y ;
188
198
rootScrollableContentOffsetY . value = y ;
189
199
}
190
200
} ,
0 commit comments