Bluesky app fork with some witchin' additions 馃挮
at main 1.4 kB view raw
1import React from 'react' 2import {msg} from '@lingui/macro' 3import {useLingui} from '@lingui/react' 4 5import {sanitizeAppLanguageSetting} from '#/locale/helpers' 6import {APP_LANGUAGES} from '#/locale/languages' 7import * as Select from '#/components/Select' 8 9export function LanguageSelect({ 10 value, 11 onChange, 12 items = APP_LANGUAGES.map(l => ({ 13 label: l.name, 14 value: l.code2, 15 })), 16 label, 17}: { 18 value?: string 19 onChange: (value: string) => void 20 items?: {label: string; value: string}[] 21 label?: string 22}) { 23 const {_} = useLingui() 24 25 const handleOnChange = React.useCallback( 26 (value: string) => { 27 if (!value) return 28 onChange(sanitizeAppLanguageSetting(value)) 29 }, 30 [onChange], 31 ) 32 33 return ( 34 <Select.Root 35 value={value ? sanitizeAppLanguageSetting(value) : undefined} 36 onValueChange={handleOnChange}> 37 <Select.Trigger label={_(msg`Select language`)}> 38 <Select.ValueText placeholder={_(msg`Select language`)} /> 39 <Select.Icon /> 40 </Select.Trigger> 41 <Select.Content 42 label={label} 43 renderItem={({label, value}) => ( 44 <Select.Item value={value} label={label}> 45 <Select.ItemIndicator /> 46 <Select.ItemText>{label}</Select.ItemText> 47 </Select.Item> 48 )} 49 items={items} 50 /> 51 </Select.Root> 52 ) 53}