import * as React from "react"; import { format, parse } from "date-fns"; import { Calendar as CalendarIcon } from "lucide-react"; import { Calendar } from "./calendar"; import { Popover, PopoverContent, PopoverTrigger } from "./popover"; import { Button } from "./button"; export interface DatePickerProps { value?: string; // YYYY-MM-DD format onChange?: (value: string) => void; placeholder?: string; disabled?: boolean; minDate?: Date; maxDate?: Date; className?: string; error?: boolean; } export const DatePicker: React.FC = ({ value, onChange, placeholder = "Select date", disabled = false, minDate, maxDate, className = "", error = false, }) => { const [open, setOpen] = React.useState(false); // Parse date safely - check if value is valid and parse correctly let selectedDate: Date | undefined = undefined; if (value && value.trim()) { try { const parsed = parse(value, "yyyy-MM-dd", new Date()); // Check if parsed date is valid if (!isNaN(parsed.getTime())) { selectedDate = parsed; } } catch (e) { // Invalid date format, leave as undefined selectedDate = undefined; } } const handleSelect = (date: Date | undefined) => { if (date) { onChange?.(format(date, "yyyy-MM-dd")); setOpen(false); } }; // Format display value safely let displayValue = ""; if (selectedDate && !isNaN(selectedDate.getTime())) { try { displayValue = format(selectedDate, "MMM dd, yyyy"); } catch (e) { displayValue = ""; } } return ( ); };