import * as Dialog from "@radix-ui/react-dialog" import * as Portal from "@radix-ui/react-portal" import clsx from "clsx" import React from "react" import { useWindowDimensions } from "../../../hooks/use-window-dimensions" import Button from "../../fundamentals/button" import CrossIcon from "../../fundamentals/icons/cross-icon" type ModalState = { portalRef: any isLargeModal?: boolean } export const ModalContext = React.createContext({ portalRef: undefined, isLargeModal: true, }) export type ModalProps = { isLargeModal?: boolean handleClose: () => void open?: boolean children?: React.ReactNode } type ModalChildProps = { className?: string style?: React.CSSProperties children?: React.ReactNode } type ModalHeaderProps = { handleClose: () => void children?: React.ReactNode } type ModalType = React.FC & { Body: React.FC Header: React.FC Footer: React.FC Content: React.FC } const Overlay: React.FC = ({ children }) => { return ( {children} ) } const Content: React.FC = ({ children }) => { const { height } = useWindowDimensions() const style = { maxHeight: height - 64, } return ( {children} ) } const Modal: ModalType = ({ open = true, handleClose, isLargeModal = true, children, }) => { const portalRef = React.useRef(null) return ( {children} ) } Modal.Body = ({ children, className, style }) => { const { isLargeModal } = React.useContext(ModalContext) return (
e.stopPropagation()} > {children}
) } Modal.Content = ({ children, className }) => { const { isLargeModal } = React.useContext(ModalContext) const { height } = useWindowDimensions() const style = { maxHeight: height - 90 - 141, } return (
{children}
) } Modal.Header = ({ handleClose = undefined, children }) => { return (
e.stopPropagation()} >
{children}
{handleClose && ( )}
) } Modal.Footer = ({ children, className }) => { const { isLargeModal } = React.useContext(ModalContext) return (
e.stopPropagation()} className={clsx( "bottom-0 flex w-full px-7 pb-5", { "border-grey-20 border-t pt-4": isLargeModal, }, className )} > {children}
) } export default Modal