import React, {Fragment, ReactNode, useRef, useState} from 'react'; import {AnimatePresence, m} from 'framer-motion'; import {DatePickerField} from '../date-picker-field'; import {DateRangePickerState} from '../use-date-range-picker-state'; import {Calendar} from '../../calendar/calendar'; import {DialogFooter} from '@common/ui/overlays/dialog/dialog-footer'; import {Button} from '@common/ui/buttons/button'; import {useDialogContext} from '@common/ui/overlays/dialog/dialog-context'; import {Dialog} from '@common/ui/overlays/dialog/dialog'; import {DialogBody} from '@common/ui/overlays/dialog/dialog-body'; import {ArrowRightAltIcon} from '@common/icons/material/ArrowRightAlt'; import {DateSegmentList} from '../../segments/date-segment-list'; import {Trans} from '@common/i18n/trans'; import {FormattedDateTimeRange} from '@common/i18n/formatted-date-time-range'; import {DatePresetList} from './date-range-preset-list'; import {useIsTabletMediaQuery} from '@common/utils/hooks/is-tablet-media-query'; import {Switch} from '@common/ui/forms/toggle/switch'; import {DateRangeComparePresetList} from '@common/ui/forms/input-field/date/date-range-picker/dialog/date-range-compare-preset-list'; interface DateRangeDialogProps { state: DateRangePickerState; compareState?: DateRangePickerState; compareVisibleDefault?: boolean; showInlineDatePickerField?: boolean; } export function DateRangeDialog({ state, compareState, showInlineDatePickerField = false, compareVisibleDefault = false, }: DateRangeDialogProps) { const isTablet = useIsTabletMediaQuery(); const {close} = useDialogContext(); const initialStateRef = useRef(state); const hasPlaceholder = state.isPlaceholder.start || state.isPlaceholder.end; const [compareVisible, setCompareVisible] = useState(compareVisibleDefault); const footer = ( ) : undefined } > ); return ( {!isTablet && (
{ state.setSelectedValue(preset); if (state.closeDialogOnSelection) { close(preset); } }} /> {!!compareState && ( setCompareVisible(e.target.checked)} > {compareVisible && ( { compareState.setSelectedValue(preset); }} /> )} )}
)}
{!state.closeDialogOnSelection && footer}
); } interface CustomRangePanelProps { state: DateRangePickerState; compareState?: DateRangePickerState; showInlineDatePickerField?: boolean; compareVisible: boolean; } function Calendars({ state, compareState, showInlineDatePickerField, compareVisible, }: CustomRangePanelProps) { return ( {showInlineDatePickerField && (
{!!compareState && compareVisible && ( } /> )}
)}
); } interface InlineDatePickerFieldProps { state: DateRangePickerState; label?: ReactNode; } function InlineDatePickerField({state, label}: InlineDatePickerFieldProps) { const {selectedValue, setSelectedValue} = state; return ( { setSelectedValue({...selectedValue, start: newValue}); }} /> { setSelectedValue({...selectedValue, end: newValue}); }} /> ); }