import { useState } from "react"; import { Calendar, ChevronLeft, ChevronRight, X } from "lucide-react"; import { Button } from "./ui/button"; import { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from "./ui/drawer"; import jMoment from "moment-jalaali"; interface PersianDatePickerProps { value?: string; // Format: YYYY/MM/DD onChange: (date: string) => void; placeholder?: string; label?: string; } const PersianDatePicker = ({ value, onChange, placeholder = "انتخاب تاریخ", label, }: PersianDatePickerProps) => { const [isOpen, setIsOpen] = useState(false); const [currentDate, setCurrentDate] = useState(jMoment()); const [selectedDate, setSelectedDate] = useState( value || null ); const persianMonths = [ "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", ]; const persianDaysOfWeek = ["ش", "ی", "د", "س", "چ", "پ", "ج"]; // Generate calendar days const generateCalendarDays = () => { const startOfMonth = currentDate.clone().startOf("jMonth"); const endOfMonth = currentDate.clone().endOf("jMonth"); const startOfWeek = startOfMonth.clone().startOf("week"); const endOfWeek = endOfMonth.clone().endOf("week"); const days = []; const currentDay = startOfWeek.clone(); while (currentDay.isSameOrBefore(endOfWeek)) { days.push(currentDay.clone()); currentDay.add(1, "day"); } return days; }; const handleDateSelect = (date: typeof jMoment) => { const dateString = date.format("jYYYY/jMM/jDD"); setSelectedDate(dateString); onChange(dateString); setIsOpen(false); }; const goToPreviousMonth = () => { setCurrentDate(currentDate.clone().subtract(1, "jMonth")); }; const goToNextMonth = () => { setCurrentDate(currentDate.clone().add(1, "jMonth")); }; const calendarDays = generateCalendarDays(); return ( <> {label &&

{label}

}
setIsOpen(false)} /> انتخاب تاریخ
{/* Month/Year Header */}

{persianMonths[currentDate.jMonth()]} {currentDate.jYear()}

{/* Days of Week Header */}
{persianDaysOfWeek.map((day) => (
{day}
))}
{/* Calendar Days */}
{calendarDays.map((day, index) => { const isCurrentMonth = day.jMonth() === currentDate.jMonth(); const isSelected = selectedDate === day.format("jYYYY/jMM/jDD"); const isToday = day.isSame(jMoment(), "day"); return ( ); })}
{/* Action Buttons */}
); }; export default PersianDatePicker;