import { FC, useCallback, useState } from 'react'; import { Button } from 'components/button'; import { Dropdown } from 'components'; import { Divider } from 'components/divider'; import { Container, Row } from 'components/layout'; import { timezones } from 'assets/timezones'; import { differenceInHours } from 'date-fns'; import { MyProfileFragment } from 'expo-schema'; import { useProfile } from 'hooks'; export const Timezone: FC = ({ handleUpdate }) => { const { profile } = useProfile(); const [timezone, setTimezone] = useState( Intl.DateTimeFormat().resolvedOptions().timeZone || profile?.timezone ); const getLabel = useCallback((zone) => { if (!zone) { return ''; } const zoneDate = new Date().toLocaleString('en-US', { timeZone: zone }); const timeZoneDateTime = new Date(zoneDate); const myDate = new Date(); const localOffsetRaw = myDate.getTimezoneOffset(); let localOffset = localOffsetRaw / 60; if (localOffset < 0) { localOffset = localOffset * -1; } const differ = differenceInHours(timeZoneDateTime, myDate); if (differ < 0) { // timezone is behind local time localOffset = differ + localOffset; } else { localOffset = differ - localOffset; } let offSet = ''; if (localOffset >= 0) { offSet = `+${localOffset}`; } else { offSet = localOffset.toString(); } return `(UTC${offSet} ${zone})`; }, []); const handleTimezone = useCallback( (zone) => { setTimezone(zone); handleUpdate({ timezone: zone } as MyProfileFragment); }, [handleUpdate] ); const localTimezones = timezones.map((zone) => { return { value: zone, label: getLabel(zone), }; }); return (