diff options
Diffstat (limited to 'src/app/(main)/settings/preferences/TimezoneSetting.tsx')
| -rw-r--r-- | src/app/(main)/settings/preferences/TimezoneSetting.tsx | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/app/(main)/settings/preferences/TimezoneSetting.tsx b/src/app/(main)/settings/preferences/TimezoneSetting.tsx new file mode 100644 index 0000000..cf20b20 --- /dev/null +++ b/src/app/(main)/settings/preferences/TimezoneSetting.tsx @@ -0,0 +1,44 @@ +import { Button, ListItem, Row, Select } from '@umami/react-zen'; +import { useState } from 'react'; +import { useMessages, useTimezone } from '@/components/hooks'; +import { getTimezone } from '@/lib/date'; + +const timezones = Intl.supportedValuesOf('timeZone'); + +export function TimezoneSetting() { + const [search, setSearch] = useState(''); + const { formatMessage, labels } = useMessages(); + const { timezone, saveTimezone } = useTimezone(); + const items = search + ? timezones.filter(n => n.toLowerCase().includes(search.toLowerCase())) + : timezones; + + const handleReset = () => saveTimezone(getTimezone()); + + const handleOpen = isOpen => { + if (isOpen) { + setSearch(''); + } + }; + + return ( + <Row gap> + <Select + value={timezone} + onChange={(value: any) => saveTimezone(value)} + allowSearch={true} + onSearch={setSearch} + onOpenChange={handleOpen} + listProps={{ style: { maxHeight: 300 } }} + > + {items.map((item: any) => ( + <ListItem key={item} id={item}> + {item} + </ListItem> + ))} + {!items.length && <ListItem></ListItem>} + </Select> + <Button onPress={handleReset}>{formatMessage(labels.reset)}</Button> + </Row> + ); +} |