import { useCallback, useContext, useMemo } from 'react'; import cx from 'classnames'; import { parse, isSameDay } from 'date-fns'; import TimePicker from '../../TimePicker'; import Button from '../../../button'; import Pop from '../../../pop'; import PickerContext from '../../context/PickerContext'; import { formatDate } from '../../utils/index'; import useConfirmStatus from '../../hooks/useConfirmStatus'; import { IDisabledTime, IRangePanelProps } from '../../types'; import { DATE_FORMAT } from '../../constants'; const prefixCls = 'zent-datepicker-combined-panel-footer'; interface ICombinedDateRangeFooterProps extends Pick { format: string; disabledStartTimes: IDisabledTime; disabledEndTimes: IDisabledTime; disabledConfirm: boolean; hideConfirm?: boolean; } export const CombinedDateRangeFooter: React.FC = ({ selected, disabledStartTimes, disabledConfirm, disabledEndTimes, onSelected, format, hideConfirm = false, }) => { const { i18n, autoComplete } = useContext(PickerContext); const [start, end] = selected; const startTimeStatus = useConfirmStatus({ selected: formatDate(format, start), disabledTimeOption: (start && disabledStartTimes?.(start)) || {}, format, }); const endTimeStatus = useConfirmStatus({ selected: formatDate(format, end), disabledTimeOption: (end && disabledEndTimes?.(end)) || {}, format, }); const disabledStatus = useMemo( () => disabledConfirm || endTimeStatus || startTimeStatus, [disabledConfirm, endTimeStatus, startTimeStatus] ); const onStartTimeChange = useCallback( (val: string) => { const timeVal = selected[0] && parse(val, format, selected[0]); onSelected([timeVal, selected[1]]); }, [selected, format, onSelected] ); const onEndTimeChange = useCallback( (val: string) => { const timeVal = selected[1] && parse(val, format, selected[1]); onSelected([selected[0], timeVal]); }, [selected, format, onSelected] ); const confirmHandler = useCallback(() => { onSelected(selected, true); }, [selected, onSelected]); const confirmBtn = useMemo( () => ( ), [i18n, disabledStatus, confirmHandler] ); const confirmContent = useMemo(() => { if (hideConfirm) { return null; } if (disabledStatus) { return ( {confirmBtn} ); } return confirmBtn; }, [ confirmBtn, disabledStatus, end, hideConfirm, i18n.dateErrorPop, i18n.timeErrorPop, start, ]); return ( <>
{start ? formatDate(DATE_FORMAT, start) : i18n.start}
{i18n.to}
{end ? formatDate(DATE_FORMAT, end) : i18n.end}
{confirmContent} ); }; export default CombinedDateRangeFooter;