import { useRef, useState } from 'react'; import { createPortal } from 'react-dom'; import { CalendarDaysIcon, XMarkIcon } from '@heroicons/react/24/outline'; import { formatDate } from '../../lib/utils'; import PersianCalendar from './PersianCalendar'; interface Props { value: string; // YYYY-MM-DD میلادی onChange: (v: string) => void; placeholder?: string; height?: number; minWidth?: number; /** انتخاب سال→ماه→روز را فعال می‌کند (پیش‌فرض خاموش). */ enableYearPicker?: boolean; } export default function PersianDatePicker({ value, onChange, placeholder = 'انتخاب تاریخ', height = 38, minWidth = 148, enableYearPicker = false }: Props) { const [open, setOpen] = useState(false); const triggerRef = useRef(null); const [pos, setPos] = useState<{ top: number; right: number } | null>(null); // تقویم را به body پورت می‌کنیم تا داخل مودال‌های overflow-scroll زیر کادر نرود. const toggle = () => { const r = triggerRef.current?.getBoundingClientRect(); if (r) setPos({ top: r.bottom, right: window.innerWidth - r.right }); setOpen((o) => !o); }; return (
{value ? formatDate(value) : placeholder} {value && ( { e.stopPropagation(); onChange(''); }} style={{ display: 'flex', alignItems: 'center', cursor: 'pointer', color: 'var(--text-3)' }} > )}
{open && pos && createPortal(
{ onChange(v); setOpen(false); }} onClose={() => setOpen(false)} enableYearPicker={enableYearPicker} />
, document.body, )}
); }