import { eachMonthOfInterval, endOfYear, format, startOfYear } from "date-fns" import { Calendar as CalendarIcon } from "lucide-react" import * as React from "react" import { Button } from "@/components/ui/button" import { Calendar } from "@/components/ui/calendar" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { cn } from "@/lib/utils" interface DatePickerProps { date: Date | undefined setDate: (date: Date | undefined) => void } export function DatePicker({ date, setDate }: DatePickerProps) { const [month, setMonth] = React.useState(date ? date.getMonth() : new Date().getMonth()) const [year, setYear] = React.useState(date ? date.getFullYear() : new Date().getFullYear()) const years = React.useMemo(() => { const currentYear = new Date().getFullYear() return Array.from({ length: currentYear - 1900 + 1 }, (_, i) => currentYear - i) }, []) const months = React.useMemo(() => { if (year) { return eachMonthOfInterval({ start: startOfYear(new Date(year, 0, 1)), end: endOfYear(new Date(year, 0, 1)) }) } return [] }, [year]) React.useEffect(() => { if (date) { setMonth(date.getMonth()) setYear(date.getFullYear()) } }, [date]) const handleYearChange = (selectedYear: string) => { const newYear = Number.parseInt(selectedYear, 10) setYear(newYear) if (date) { const newDate = new Date(date) newDate.setFullYear(newYear) setDate(newDate) } } const handleMonthChange = (selectedMonth: string) => { const newMonth = Number.parseInt(selectedMonth, 10) setMonth(newMonth) if (date) { const newDate = new Date(date) newDate.setMonth(newMonth) setDate(newDate) } else { setDate(new Date(year, newMonth, 1)) } } return (
{ setMonth(newMonth.getMonth()) setYear(newMonth.getFullYear()) }} initialFocus />
) }