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;