import React, { useEffect, useState } from "react"; import ReactCSSTransitionGroup from "react-addons-css-transition-group"; import PropTypes from "prop-types"; import { NgIf } from "./"; import { debounce, nop } from "../helpers/"; import "./modal.scss"; export function Modal({ isActive = false, children = null, className = null, onQuit = nop }) { const calculateMarginTop = () => { let size = 300; const $box = document.querySelector("#modal-box > div"); if($box) size = $box.offsetHeight; size = Math.round((document.body.offsetHeight - size) / 2); if(size < 0) return 0; if(size > 250) return 250; return size; }; const resizeHandler = debounce(() => { setMarginTop(calculateMarginTop()) }, 100) const keydownHandler = (e) => { if(e.keyCode === 27){ onQuit(); } }; const onClick = (e) => { if(e.target.getAttribute("id") === "modal-box"){ onQuit(); } }; const [marginTop, setMarginTop] = useState(calculateMarginTop()); useEffect(() => { window.addEventListener("resize", resizeHandler); window.addEventListener("keydown", keydownHandler); return () => { window.removeEventListener("resize", resizeHandler); window.removeEventListener("keydown", keydownHandler); } }); return ( ); }