Skip to content

Commit 87120d3

Browse files
committed
fix: prevent crash due to undefined animatedRef
1 parent 00a3b9a commit 87120d3

File tree

5 files changed

+51
-20
lines changed

5 files changed

+51
-20
lines changed

src/app/(screens)/events/advisory/[id].tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ export default function StudentAdvisoryEventDetail(): React.JSX.Element {
6161
const scrollOffset = useSharedValue(0)
6262
const scrollHandler = useAnimatedScrollHandler({
6363
onScroll: ({ contentOffset }) => {
64-
scrollOffset.value = contentOffset.y
64+
if (scrollOffset && typeof scrollOffset.value !== 'undefined') {
65+
scrollOffset.value = contentOffset.y
66+
}
6567
}
6668
})
6769

src/app/(screens)/events/career/[id].tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ export default function CareerServiceEvent(): React.JSX.Element {
6363

6464
const scrollHandler = useAnimatedScrollHandler({
6565
onScroll: (event) => {
66-
scrollOffset.value = event.contentOffset.y
66+
if (scrollOffset && typeof scrollOffset.value !== 'undefined') {
67+
scrollOffset.value = event.contentOffset.y
68+
}
6769
}
6870
})
6971

src/app/(screens)/events/cl/[id].tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ import { Linking } from 'react-native'
2626
import { Share } from 'react-native'
2727
import Animated, {
2828
interpolate,
29-
useAnimatedRef,
29+
useAnimatedScrollHandler,
3030
useAnimatedStyle,
31-
useScrollViewOffset
31+
useSharedValue
3232
} from 'react-native-reanimated'
3333
import { createStyleSheet, useStyles } from 'react-native-unistyles'
3434

@@ -92,14 +92,21 @@ export default function ClEventDetail(): React.JSX.Element {
9292
return <EventErrorView eventType="clEvents" />
9393
}
9494

95-
const ref = useAnimatedRef<Animated.ScrollView>()
96-
const scroll = useScrollViewOffset(ref)
95+
const scrollOffset = useSharedValue(0)
96+
const scrollHandler = useAnimatedScrollHandler({
97+
onScroll: (event) => {
98+
if (scrollOffset && typeof scrollOffset.value !== 'undefined') {
99+
scrollOffset.value = event.contentOffset.y
100+
}
101+
}
102+
})
103+
97104
const headerStyle = useAnimatedStyle(() => {
98105
return {
99106
transform: [
100107
{
101108
translateY: interpolate(
102-
scroll.value,
109+
scrollOffset.value,
103110
[0, 30, 65],
104111
[25, 25, 0],
105112
'clamp'
@@ -270,7 +277,8 @@ export default function ClEventDetail(): React.JSX.Element {
270277
<Animated.ScrollView
271278
style={styles.page}
272279
contentContainerStyle={styles.container}
273-
ref={ref}
280+
onScroll={scrollHandler}
281+
scrollEventThrottle={16}
274282
>
275283
<Stack.Screen
276284
options={{

src/app/(screens)/events/sports/[id].tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ import { useTranslation } from 'react-i18next'
2727
import { Linking, Platform, Share, Text, View } from 'react-native'
2828
import Animated, {
2929
interpolate,
30-
useAnimatedRef,
30+
useAnimatedScrollHandler,
3131
useAnimatedStyle,
32-
useScrollViewOffset
32+
useSharedValue
3333
} from 'react-native-reanimated'
3434
import { createStyleSheet, useStyles } from 'react-native-unistyles'
3535

@@ -52,14 +52,21 @@ export default function SportsEventDetail(): React.JSX.Element {
5252
const sportsEvent: UniversitySportsFieldsFragment | null | undefined =
5353
queryData?.flatMap((group) => group.data).find((event) => event.id === id)
5454

55-
const ref = useAnimatedRef<Animated.ScrollView>()
56-
const scroll = useScrollViewOffset(ref)
55+
const scrollOffset = useSharedValue(0)
56+
const scrollHandler = useAnimatedScrollHandler({
57+
onScroll: (event) => {
58+
if (scrollOffset && typeof scrollOffset.value !== 'undefined') {
59+
scrollOffset.value = event.contentOffset.y
60+
}
61+
}
62+
})
63+
5764
const headerStyle = useAnimatedStyle(() => {
5865
return {
5966
transform: [
6067
{
6168
translateY: interpolate(
62-
scroll.value,
69+
scrollOffset.value,
6370
[0, 30, 65],
6471
[25, 25, 0],
6572
'clamp'
@@ -226,7 +233,8 @@ export default function SportsEventDetail(): React.JSX.Element {
226233
<Animated.ScrollView
227234
style={styles.page}
228235
contentContainerStyle={styles.container}
229-
ref={ref}
236+
onScroll={scrollHandler}
237+
scrollEventThrottle={16}
230238
>
231239
<Stack.Screen
232240
options={{

src/app/(screens)/food/[id].tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import { useTranslation } from 'react-i18next'
2828
import { Alert, Linking, Platform, Share, Text, View } from 'react-native'
2929
import Animated, {
3030
interpolate,
31-
useAnimatedRef,
31+
useAnimatedScrollHandler,
3232
useAnimatedStyle,
33-
useScrollViewOffset
33+
useSharedValue
3434
} from 'react-native-reanimated'
3535
import { createStyleSheet, useStyles } from 'react-native-unistyles'
3636

@@ -104,14 +104,21 @@ export default function FoodDetail(): React.JSX.Element {
104104
}
105105
}, [foodData, i18n, userKind, navigation])
106106
)
107-
const ref = useAnimatedRef<Animated.ScrollView>()
108-
const scroll = useScrollViewOffset(ref)
107+
const scrollOffset = useSharedValue(0)
108+
const scrollHandler = useAnimatedScrollHandler({
109+
onScroll: (event) => {
110+
if (scrollOffset && typeof scrollOffset.value !== 'undefined') {
111+
scrollOffset.value = event.contentOffset.y
112+
}
113+
}
114+
})
115+
109116
const headerStyle = useAnimatedStyle(() => {
110117
return {
111118
transform: [
112119
{
113120
translateY: interpolate(
114-
scroll.value,
121+
scrollOffset.value,
115122
[0, 30, 65],
116123
[25, 25, 0],
117124
'clamp'
@@ -473,7 +480,11 @@ export default function FoodDetail(): React.JSX.Element {
473480
: ''
474481

475482
return (
476-
<Animated.ScrollView contentContainerStyle={styles.page} ref={ref}>
483+
<Animated.ScrollView
484+
style={styles.page}
485+
onScroll={scrollHandler}
486+
scrollEventThrottle={16}
487+
>
477488
<Stack.Screen
478489
options={{
479490
headerTitle: (props) => (

0 commit comments

Comments
 (0)