import { useEffect, useRef } from 'react'; /** * Универсальный Modal компонент * Простой и надёжный - работает как HistoryModal */ function Modal({ show, onClose, onOpen, title, children, footer, size = 'md', backdrop = true, keyboard = true, scrollable = false, centered = false, className = '' }) { const modalRef = useRef(null); // Управление классом modal-open на body useEffect(() => { if (show) { document.body.classList.add('modal-open'); setTimeout(() => modalRef.current?.focus(), 100); onOpen?.(); } else { document.body.classList.remove('modal-open'); } return () => { document.body.classList.remove('modal-open'); }; }, [show, onOpen]); // Обработка ESC useEffect(() => { if (keyboard && show) { const handleEsc = (e) => { if (e.key === 'Escape') { onClose?.(); } }; document.addEventListener('keydown', handleEsc); return () => document.removeEventListener('keydown', handleEsc); } }, [keyboard, show, onClose]); if (!show) return null; const handleBackdropClick = (e) => { if (backdrop && e.target === e.currentTarget) { onClose?.(); } }; return ( <> {/* Modal Backdrop */}
{/* Modal */}