import { CheckIcon } from 'lucide-react' import { useMemo, useState } from 'react' import { cn, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, ScrollArea, } from 'ui' import { findTimezoneByIana, TIMEZONES_BY_IANA } from '@/lib/constants/timezones' import { useTimezone } from '@/lib/datetime' import { guessLocalTimezone } from '@/lib/dayjs' import { useTrack } from '@/lib/telemetry/track' const AUTO_OPTION_VALUE = '__auto__' export const TimezoneDropdown = () => { const { timezone, storedTimezone, setTimezone, isAutoDetected } = useTimezone() const track = useTrack() const [open, setOpen] = useState(false) // The "Auto detect" row always advertises the browser's own timezone, even // when the user is currently overriding it with a manual pick. const browserTimezone = useMemo(() => guessLocalTimezone(), []) const triggerLabel = useMemo(() => { return findTimezoneByIana(timezone)?.text ?? timezone }, [timezone]) const handleSelect = (nextStored: string) => { setTimezone(nextStored) const resolvedNext = nextStored || guessLocalTimezone() track('timezone_picker_clicked', { previousTimezone: timezone, nextTimezone: resolvedNext, isAutoDetected: nextStored === '', source: 'user_dropdown', }) setOpen(false) } return (
Timezone {isAutoDetected ? `Auto (${timezone})` : triggerLabel}
No timezones found handleSelect('')} >
Auto detect {browserTimezone}
{TIMEZONES_BY_IANA.map((entry) => { const ianaName = entry.utc[0] const isSelected = !isAutoDetected && storedTimezone === ianaName return ( handleSelect(ianaName)} > {entry.text} ) })}
) }