/
dedaMazai
/
reactGoodPattern
Обзор
Документация
Войти
/
dedaMazai
/
reactGoodPattern
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/shared/ui/Modal/Modal.tsx
58 строк
1 KB
Andrei Chipizubov
fix
23 май 2023, 18:39
23 май 2023, 18:39
36dbff3
Код
Авторство
О чём код?
import { ReactNode } from 'react'; import { classNames, Mods } from '@/shared/lib/classNames/classNames'; import { useModal } from '@/shared/lib/hooks/useModal/useModal'; import { Portal } from '../Portal/Portal'; import cls from './Modal.module.scss'; import { Overlay } from '../Overlay/Overlay'; interface ModalProps { className?: string; children?: ReactNode; isOpen?: boolean; onClose?: () => void; lazy?: boolean; } const ANIMATION_DELAY = 200; export const Modal = (props: ModalProps) => { const { className, children, isOpen, onClose, lazy, } = props; const { close, isClosing, isMounted, } = useModal({ animationDelay: ANIMATION_DELAY, onClose, isOpen, }); const mods: Mods = { [cls.opened]: isOpen, [cls.isClosing]: isClosing, }; if (lazy && !isMounted) { return null; } return ( <Portal> <div className={classNames(cls.Modal, mods, ['app_modal'])}> <Overlay onClick={close} /> <div className={classNames(cls.content, {}, [className])} > {children} </div> </div> </Portal> ); };