import * as React from "react"; import { useList } from "react-use"; import { useRequiredContext } from "../use-required-context"; import Modal, { ModalProps } from "./modal"; export interface ModalProviderProps { children?: React.ReactNode; } const ModalContext = React.createContext<{ render: (el: ModalProps) => void; } | null>(null); ModalContext.displayName = ""; export const useModalContext = () => { return useRequiredContext(ModalContext); }; const ModalProvider: React.VoidFunctionComponent = ({ children, }) => { const [modals, { push, removeAt, updateAt }] = useList([]); const removeModalAt = (index: number) => { updateAt(index, { ...modals[index], visible: false }); setTimeout(() => { removeAt(index); }, 500); }; return ( { push(props); }, }} > {children} {modals.map((props, i) => ( { props.onOk?.(); removeModalAt(i); }} onCancel={() => { props.onCancel?.(); removeModalAt(i); }} /> ))} ); }; export default ModalProvider;