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}
);
}