import clsx from 'clsx'; import React, { useCallback, useEffect, useState } from 'react'; import styles from './Modal.module.scss'; interface IProps { children: React.ReactNode; isOpen?: boolean; onClose: () => void; size?: 'sm' | 'md' | 'lg' | 'xl'; type?: 'default' | 'primary' | 'success' | 'info' | 'warning' | 'danger'; } export const Modal: React.FC = ({ children, isOpen, onClose, size = 'lg', type }) => { const style = { display: 'none' }; if (isOpen) { style.display = 'block'; } const [modal, setModal] = useState(null); // On click outside const handleClickOutside = useCallback( (event: MouseEvent) => { if (modal && !modal.contains(event.target as Node)) { onClose(); } }, [modal, onClose], ); // On click outside useEffect(() => { document.addEventListener('click', handleClickOutside, true); return () => document.removeEventListener('click', handleClickOutside, true); }, [handleClickOutside]); // Close on escape const handleEscape = useCallback( (event: KeyboardEvent) => { if (event.key === 'Escape') { onClose(); } }, [onClose], ); // Close on escape useEffect(() => { document.addEventListener('keydown', handleEscape, true); return () => document.removeEventListener('keydown', handleEscape, true); }, [handleEscape]); return (
); };