mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at verify-code 2.3 kB view raw
1import React from 'react' 2import {View} from 'react-native' 3import RNPickerSelect, {PickerSelectProps} from 'react-native-picker-select' 4import {useQueryClient} from '@tanstack/react-query' 5 6import {sanitizeAppLanguageSetting} from '#/locale/helpers' 7import {APP_LANGUAGES} from '#/locale/languages' 8import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences' 9import {resetPostsFeedQueries} from '#/state/queries/post-feed' 10import {atoms as a, useTheme} from '#/alf' 11import {ChevronBottom_Stroke2_Corner0_Rounded as ChevronDown} from '#/components/icons/Chevron' 12 13export function AppLanguageDropdown() { 14 const t = useTheme() 15 16 const queryClient = useQueryClient() 17 const langPrefs = useLanguagePrefs() 18 const setLangPrefs = useLanguagePrefsApi() 19 const sanitizedLang = sanitizeAppLanguageSetting(langPrefs.appLanguage) 20 21 const onChangeAppLanguage = React.useCallback( 22 (value: Parameters<PickerSelectProps['onValueChange']>[0]) => { 23 if (!value) return 24 if (sanitizedLang !== value) { 25 setLangPrefs.setAppLanguage(sanitizeAppLanguageSetting(value)) 26 } 27 setLangPrefs.setPrimaryLanguage(value) 28 setLangPrefs.setContentLanguage(value) 29 30 // reset feeds to refetch content 31 resetPostsFeedQueries(queryClient) 32 }, 33 [sanitizedLang, setLangPrefs, queryClient], 34 ) 35 36 return ( 37 <View style={a.relative}> 38 <RNPickerSelect 39 placeholder={{}} 40 value={sanitizedLang} 41 onValueChange={onChangeAppLanguage} 42 items={APP_LANGUAGES.filter(l => Boolean(l.code2)).map(l => ({ 43 label: l.name, 44 value: l.code2, 45 key: l.code2, 46 }))} 47 useNativeAndroidPickerStyle={false} 48 style={{ 49 inputAndroid: { 50 color: t.atoms.text_contrast_medium.color, 51 fontSize: 16, 52 paddingRight: 12 + 4, 53 }, 54 inputIOS: { 55 color: t.atoms.text.color, 56 fontSize: 16, 57 paddingRight: 12 + 4, 58 }, 59 }} 60 /> 61 62 <View 63 style={[ 64 a.absolute, 65 a.inset_0, 66 {left: 'auto'}, 67 {pointerEvents: 'none'}, 68 a.align_center, 69 a.justify_center, 70 ]}> 71 <ChevronDown fill={t.atoms.text.color} size="xs" /> 72 </View> 73 </View> 74 ) 75}