"use client"; import React, { useState } from "react"; import { DayPicker, DateRange } from "react-day-picker"; import "react-day-picker/dist/style.css"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "./select"; // --- Helper function to replace date-fns/addDays --- // Uses native JavaScript Date methods to add days to a given date. const addDays = (date: Date, days: number): Date => { const result = new Date(date); result.setDate(result.getDate() + days); return result; }; const Calendar = () => { const [mode, setMode] = useState<"single" | "multiple" | "range">("single"); const today = new Date(); // Use our new helper function instead of the one from date-fns const nextMonth = addDays(today, 30); const [singleDate, setSingleDate] = useState(today); const [multipleDates, setMultipleDates] = useState([ today, ]); const [range, setRange] = useState({ from: today, // Use our new helper function here as well to: addDays(today, 7), }); const handleModeChange = (value: "single" | "multiple" | "range") => { setMode(value); }; // This logic uses native Date methods, so it doesn't need to change. const disabledDays = [ new Date(2025, 6, 25), // July 25, 2025 (Month is 0-indexed) new Date(2025, 6, 26), // July 26, 2025 { from: new Date(2025, 6, 28), // July 28, 2025 to: new Date(2025, 6, 30), // July 30, 2025 }, (date: Date) => date.getDay() === 0 || date.getDay() === 6, // disable weekends (Sunday and Saturday) ]; const commonDayPickerProps = { className: "rounded-lg border p-4", weekStartsOn: 1 as const, // Monday // locale: enUS, // This is removed as react-day-picker defaults to English defaultMonth: today, fromDate: today, toDate: nextMonth, disabled: disabledDays, showOutsideDays: true, initialFocus: true, }; return (
{mode === "single" && ( )} {mode === "multiple" && ( )} {mode === "range" && ( )}
{mode === "single" && singleDate && (

Selected:{" "} {/* toLocaleDateString is a native method, so this works perfectly */} {singleDate.toLocaleDateString("en-US")}

)} {mode === "multiple" && multipleDates && (

Selected:{" "} {multipleDates.map((date) => ( {date.toLocaleDateString("en-US")} ))}

)} {mode === "range" && range && (

From:{" "} {range.from?.toLocaleDateString("en-US") || "—"}{" "} to: {range.to?.toLocaleDateString("en-US") || "—"}

)}
); }; export default Calendar;