"use client" import { format, startOfMonth, startOfQuarter, subMonths, subWeeks } from "date-fns" import { CalendarIcon } from "lucide-react" import { useState } from "react" import { DateRange } from "react-day-picker" import { Button } from "@/components/ui/button" import { Calendar } from "@/components/ui/calendar" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" import { cn } from "@/lib/utils" export function DateRangePicker({ defaultDate, defaultRange = "all-time", onChange, }: { defaultDate?: DateRange defaultRange?: string onChange?: (date: DateRange | undefined) => void }) { const predefinedRanges = [ { code: "last-4-weeks", label: "Last 4 weeks", range: { from: subWeeks(new Date(), 4), to: new Date() }, }, { code: "last-12-months", label: "Last 12 months", range: { from: subMonths(new Date(), 12), to: new Date() }, }, { code: "month-to-date", label: "Month to date", range: { from: startOfMonth(new Date()), to: new Date() }, }, { code: "quarter-to-date", label: "Quarter to date", range: { from: startOfQuarter(new Date()), to: new Date() }, }, { code: `${new Date().getFullYear()}`, label: `${new Date().getFullYear()}`, range: { from: new Date(new Date().getFullYear(), 0, 1), to: new Date(), }, }, { code: `${new Date().getFullYear() - 1}`, label: `${new Date().getFullYear() - 1}`, range: { from: new Date(new Date().getFullYear() - 1, 0, 1), to: new Date(new Date().getFullYear(), 0, 1), }, }, { code: "all-time", label: "All time", range: { from: undefined, to: undefined }, }, ] const [rangeName, setRangeName] = useState(defaultDate?.from ? "custom" : defaultRange) const [dateRange, setDateRange] = useState(defaultDate) return (
{predefinedRanges.map(({ code, label }) => ( ))}
{ setRangeName("custom") setDateRange(newDateRange) onChange?.(newDateRange) }} numberOfMonths={2} />
) }