import * as React from "react"; import { format } from "date-fns"; import { CalendarIcon, ChevronLeft, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export interface MonthYearPickerProps { date?: Date; onSelect?: (date: Date | undefined) => void; placeholder?: string; disabled?: boolean; className?: string; fromYear?: number; toYear?: number; } export function MonthYearPicker({ date, onSelect, placeholder = "Pick month and year", disabled = false, className, fromYear = 1800, toYear = new Date().getFullYear(), }: MonthYearPickerProps) { const [open, setOpen] = React.useState(false); const [tempMonth, setTempMonth] = React.useState(date?.getMonth() ?? new Date().getMonth()); const [tempYear, setTempYear] = React.useState(date?.getFullYear() ?? new Date().getFullYear()); const months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; const years = Array.from( { length: toYear - fromYear + 1 }, (_, i) => toYear - i ); const handleSelect = () => { const newDate = new Date(tempYear, tempMonth, 1); onSelect?.(newDate); setOpen(false); }; const handleClear = () => { onSelect?.(undefined); setOpen(false); }; React.useEffect(() => { if (date) { setTempMonth(date.getMonth()); setTempYear(date.getFullYear()); } }, [date]); return (
); }