import { useState } from 'react'; import { Button, Row, Column, Calendar, ToggleGroup, ToggleGroupItem } from '@umami/react-zen'; import { isAfter, isBefore, isSameDay, startOfDay, endOfDay } from 'date-fns'; import { useMessages } from '@/components/hooks'; const FILTER_DAY = 'filter-day'; const FILTER_RANGE = 'filter-range'; export function DatePickerForm({ startDate: defaultStartDate, endDate: defaultEndDate, minDate, maxDate, onChange, onClose, }) { const [selected, setSelected] = useState([ isSameDay(defaultStartDate, defaultEndDate) ? FILTER_DAY : FILTER_RANGE, ]); const [date, setDate] = useState(defaultStartDate || new Date()); const [startDate, setStartDate] = useState(defaultStartDate || new Date()); const [endDate, setEndDate] = useState(defaultEndDate || new Date()); const { formatMessage, labels } = useMessages(); const disabled = selected.includes(FILTER_DAY) ? isAfter(minDate, date) && isBefore(maxDate, date) : isAfter(startDate, endDate); const handleSave = () => { if (selected.includes(FILTER_DAY)) { onChange(`range:${startOfDay(date).getTime()}:${endOfDay(date).getTime()}`); } else { onChange(`range:${startOfDay(startDate).getTime()}:${endOfDay(endDate).getTime()}`); } }; return ( {formatMessage(labels.singleDay)} {formatMessage(labels.dateRange)} {selected.includes(FILTER_DAY) && ( )} {selected.includes(FILTER_RANGE) && ( )} ); }