import React from "react"; import { Button } from "src/components/Button"; import useKeyPress from "src/hooks/useKeyPress"; import * as Styled from "./styles"; type ControlProps = React.PropsWithChildren<{ setVisible: (status: boolean) => void; }>; export type ReactComponent = React.FC>; type ModalTypes = { Header: ReactComponent; Content: ReactComponent; Controls: React.FC; }; export interface ModalProps { visible: boolean; setVisible: | React.Dispatch> | ((visible: boolean) => void); size?: "md" | "lg"; } const Header: ReactComponent = ({ children }) => { return ( {children} ); }; const Content: ReactComponent = ({ children }) => { return {children}; }; const Controls: React.FC = ({ children, setVisible }) => { const handleEspacePress = useKeyPress("Escape"); React.useEffect(() => { if (handleEspacePress) setVisible(false); }, [handleEspacePress, setVisible]); return ( {children} ); }; const Modal: React.FC> & ModalTypes = ({ children, visible, setVisible, size = "md", }) => { const onClick = (e: React.SyntheticEvent) => { if (e.currentTarget === e.target) { setVisible(false); } }; if (!visible) return null; return ( {children} ); }; Modal.Header = Header; Modal.Content = Content; Modal.Controls = Controls; export { Modal };