Commit e6f5c06d by G

a better atlernative for modals, the modal to show is provided to the function showModal.

parent e9a622bf
...@@ -8,6 +8,9 @@ export interface ImodalsManagerContext { ...@@ -8,6 +8,9 @@ export interface ImodalsManagerContext {
closeLoadingModal(): void; closeLoadingModal(): void;
showErrorModal(): void; showErrorModal(): void;
closeErrorModal(): void; closeErrorModal(): void;
showModal(element: React.ReactElement): void;
closeModal(): void;
} }
export const ModalsManagerContext = createContext<ImodalsManagerContext>({ export const ModalsManagerContext = createContext<ImodalsManagerContext>({
...@@ -15,6 +18,8 @@ export const ModalsManagerContext = createContext<ImodalsManagerContext>({ ...@@ -15,6 +18,8 @@ export const ModalsManagerContext = createContext<ImodalsManagerContext>({
closeLoadingModal: () => {}, closeLoadingModal: () => {},
showErrorModal: () => {}, showErrorModal: () => {},
closeErrorModal: () => {}, closeErrorModal: () => {},
showModal: () => {},
closeModal: () => {},
}); });
export const ModalsManagerProvider = ({ children }: { children: React.ReactNode }) => { export const ModalsManagerProvider = ({ children }: { children: React.ReactNode }) => {
...@@ -22,6 +27,8 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode ...@@ -22,6 +27,8 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode
const [loadingModalVisible, setLoadingModalVisible] = useState(false); const [loadingModalVisible, setLoadingModalVisible] = useState(false);
const [errorModalVisible, setErrorModalVisible] = useState(false); const [errorModalVisible, setErrorModalVisible] = useState(false);
const [modalElement, setModalElement] = useState<React.ReactElement | null>(null);
const showLoadingModal = () => { const showLoadingModal = () => {
setShowBackdrop(true); setShowBackdrop(true);
setLoadingModalVisible(true); setLoadingModalVisible(true);
...@@ -42,6 +49,16 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode ...@@ -42,6 +49,16 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode
setErrorModalVisible(false); setErrorModalVisible(false);
}; };
const showModal = (element: React.ReactElement) => {
setModalElement(element);
setShowBackdrop(true);
};
const closeModal = () => {
setModalElement(null);
setShowBackdrop(false);
};
return ( return (
<ModalsManagerContext.Provider <ModalsManagerContext.Provider
value={{ value={{
...@@ -49,10 +66,13 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode ...@@ -49,10 +66,13 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode
closeLoadingModal, closeLoadingModal,
showErrorModal, showErrorModal,
closeErrorModal, closeErrorModal,
showModal,
closeModal,
}} }}
> >
{children} {children}
{showBackdrop && <OverlayBackdrop />} {showBackdrop && <OverlayBackdrop />}
{modalElement && modalElement}
{loadingModalVisible && <LoadingModal />} {loadingModalVisible && <LoadingModal />}
{errorModalVisible && <ErrorModal />} {errorModalVisible && <ErrorModal />}
...@@ -60,7 +80,7 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode ...@@ -60,7 +80,7 @@ export const ModalsManagerProvider = ({ children }: { children: React.ReactNode
); );
}; };
export const useOverlayContext = () => { export const useModalsManagerContext = () => {
return useContext(ModalsManagerContext); return useContext(ModalsManagerContext);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment