import { useMemo, useContext, useCallback } from 'react'; import { View } from 'react-native'; import { Text } from '../Text'; import { DisplayModeContext } from './DisplayModeContext'; import { resolveStateVariant } from '../../utils'; import { TouchableRipple } from '../TouchableRipple'; import { timePickerAmPmSwitcherStyles } from './utils'; export default function AmPmSwitcher({ onChange, hours, }: { hours: number; onChange: (newHours: number) => any; }) { const { setMode, mode } = useContext(DisplayModeContext); const { containerStyle, switchSeparatorStyle, isAM } = useMemo(() => { return { containerStyle: timePickerAmPmSwitcherStyles.container, switchSeparatorStyle: timePickerAmPmSwitcherStyles.switchSeparator, isAM: mode === 'AM', }; }, [mode]); const onSwitchButtonPress = useCallback( (period: 'AM' | 'PM') => { setMode(period); if (period === 'AM' && hours - 12 >= 0) { onChange(hours - 12); return; } if (period === 'PM' && hours + 12 <= 23) { onChange(hours + 12); } }, [hours, onChange, setMode], ); return ( onSwitchButtonPress('AM')} selected={isAM} disabled={isAM} /> onSwitchButtonPress('PM')} selected={!isAM} disabled={!isAM} /> ); } function SwitchButton({ label, onPress, selected, disabled, }: { label: string; onPress: (() => any) | undefined; selected: boolean; disabled: boolean; }) { timePickerAmPmSwitcherStyles.useVariants({ // TODO - fix ts issues state: resolveStateVariant({ selected, }), }); return ( {label} ); }