forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}