@@ -24,7 +24,7 @@ import Color from 'color'
24
24
import { LinearGradient } from 'expo-linear-gradient'
25
25
import { router } from 'expo-router'
26
26
import type React from 'react'
27
- import { memo , useContext , useMemo , useState } from 'react'
27
+ import { memo , useContext , useDeferredValue , useMemo , useState } from 'react'
28
28
import { useTranslation } from 'react-i18next'
29
29
import { Platform , Pressable , StyleSheet , Text , View } from 'react-native'
30
30
import { createStyleSheet , useStyles } from 'react-native-unistyles'
@@ -44,27 +44,33 @@ export const MealEntry = memo(
44
44
( state ) => state . allergenSelection
45
45
)
46
46
const foodLanguage = useFoodFilterStore ( ( state ) => state . foodLanguage )
47
+
48
+ // Use deferredValue for filter properties to prevent UI blocking
49
+ const deferredPreferences = useDeferredValue ( preferencesSelection )
50
+ const deferredAllergens = useDeferredValue ( allergenSelection )
51
+ const deferredFoodLanguage = useDeferredValue ( foodLanguage )
52
+
47
53
const { t, i18n } = useTranslation ( 'food' )
48
54
const { styles, theme } = useStyles ( stylesheet )
49
55
const userAllergens = useMemo (
50
56
( ) =>
51
57
convertRelevantAllergens (
52
58
meal . allergens ?? [ ] ,
53
- allergenSelection ,
59
+ deferredAllergens ,
54
60
i18n . language
55
61
) ,
56
- [ meal . allergens , allergenSelection , i18n . language ]
62
+ [ meal . allergens , deferredAllergens , i18n . language ]
57
63
)
58
64
const { userKind = USER_GUEST } =
59
65
useContext < UserKindContextType > ( UserKindContext )
60
66
const userFlags = useMemo (
61
67
( ) =>
62
68
convertRelevantFlags (
63
69
meal . flags ?? [ ] ,
64
- preferencesSelection ,
70
+ deferredPreferences ,
65
71
i18n . language
66
72
) ,
67
- [ meal . flags , preferencesSelection , i18n . language ]
73
+ [ meal . flags , deferredPreferences , i18n . language ]
68
74
)
69
75
const setSelectedMeal = useRouteParamsStore (
70
76
( state ) => state . setSelectedMeal
@@ -74,10 +80,10 @@ export const MealEntry = memo(
74
80
price !== '' ? getUserSpecificLabel ( userKind ?? 'guest' , t ) : ''
75
81
76
82
const isNotConfigured =
77
- allergenSelection . length === 1 &&
78
- allergenSelection [ 0 ] === 'not-configured'
83
+ deferredAllergens . length === 1 &&
84
+ deferredAllergens [ 0 ] === 'not-configured'
79
85
const hasSelectedAllergens =
80
- allergenSelection . length > 0 && ! isNotConfigured
86
+ deferredAllergens . length > 0 && ! isNotConfigured
81
87
const hasUserAllergens = userAllergens . length > 0 && ! isNotConfigured
82
88
const hasNoMealAllergens = hasSelectedAllergens && meal . allergens === null
83
89
@@ -157,7 +163,7 @@ export const MealEntry = memo(
157
163
< Text style = { styles . title } numberOfLines = { 2 } >
158
164
{ mealName (
159
165
meal . name ,
160
- foodLanguage ,
166
+ deferredFoodLanguage ,
161
167
i18n . language as LanguageKey
162
168
) }
163
169
</ Text >
0 commit comments