import * as React from 'react'; import clsx from 'clsx'; import { useTheme, makeStyles } from '@material-ui/core/styles'; import ToolbarText from '../_shared/ToolbarText'; import { ToolbarButton } from '../_shared/ToolbarButton'; import PickerToolbar from '../_shared/PickerToolbar'; import { arrayIncludes } from '../_helpers/utils'; import { useUtils } from '../_shared/hooks/useUtils'; import { PickerOnChangeFn } from '../_shared/hooks/useViews'; import { withDefaultProps } from '../_shared/withDefaultProps'; import { ToolbarComponentProps } from '../Picker/SharedPickerProps'; import { convertToMeridiem, getMeridiem } from '../_helpers/time-utils'; const muiComponentConfig = { name: 'MuiPickersTimePickerToolbar' }; export const useStyles = makeStyles( { separator: { outline: 0, margin: '0 4px 0 2px', cursor: 'default', }, hourMinuteLabel: { display: 'flex', justifyContent: 'flex-end', alignItems: 'flex-end', }, hourMinuteLabelLandscape: { marginTop: 'auto', }, hourMinuteLabelReverse: { flexDirection: 'row-reverse', }, ampmSelection: { display: 'flex', flexDirection: 'column', marginRight: 'auto', marginLeft: 12, }, ampmLandscape: { margin: '4px 0 auto', flexDirection: 'row', justifyContent: 'space-around', flexBasis: '100%', }, ampmLabel: { fontSize: 17, }, penIconLandscape: { marginTop: 'auto', }, }, muiComponentConfig ); export function useMeridiemMode( date: TDate, ampm: boolean | undefined, onChange: PickerOnChangeFn ) { const utils = useUtils(); const meridiemMode = getMeridiem(date, utils); const handleMeridiemChange = React.useCallback( (mode: 'am' | 'pm') => { const timeWithMeridiem = convertToMeridiem(date, mode, Boolean(ampm), utils); onChange(timeWithMeridiem, 'partial'); }, [ampm, date, onChange, utils] ); return { meridiemMode, handleMeridiemChange }; } const clockTypographyVariant = 'h3'; export const TimePickerToolbar: React.FC = withDefaultProps( muiComponentConfig, ({ ampm, ampmInClock, date, isLandscape, isMobileKeyboardViewOpen, onChange, openView, setOpenView, toggleMobileKeyboardView, toolbarTitle = 'SELECT TIME', views, ...other }) => { const utils = useUtils(); const theme = useTheme(); const classes = useStyles(); const showAmPmControl = Boolean(ampm && !ampmInClock); const { meridiemMode, handleMeridiemChange } = useMeridiemMode(date, ampm, onChange); const formatHours = (time: unknown) => ampm ? utils.format(time, 'hours12h') : utils.format(time, 'hours24h'); const separator = ( ); return (
{arrayIncludes(views, 'hours') && ( setOpenView('hours')} selected={openView === 'hours'} value={date ? formatHours(date) : '--'} /> )} {arrayIncludes(views, ['hours', 'minutes']) && separator} {arrayIncludes(views, 'minutes') && ( setOpenView('minutes')} selected={openView === 'minutes'} value={date ? utils.format(date, 'minutes') : '--'} /> )} {arrayIncludes(views, ['minutes', 'seconds']) && separator} {arrayIncludes(views, 'seconds') && ( setOpenView('seconds')} selected={openView === 'seconds'} value={date ? utils.format(date, 'seconds') : '--'} /> )}
{showAmPmControl && (
handleMeridiemChange('am')} /> handleMeridiemChange('pm')} />
)}
); } ); export default TimePickerToolbar;