Spaces:
Paused
Paused
import React from "react"; | |
import { motion, AnimatePresence } from "framer-motion"; | |
import { useAppDispatch, useAppSelector } from "../../store/hook"; | |
import { | |
modal_state, | |
close_modal, | |
ModalEnum, | |
} from "../../store/features/modalSlice"; | |
import AuthModal from "./AuthModal"; | |
import TemplateModal from "./TemplateModal"; | |
import SettingsModal from "./SettingsModal"; | |
export const RootModal = () => { | |
const { type, visible } = useAppSelector(modal_state); | |
const dispatch = useAppDispatch(); | |
const renderModal = (type: ModalEnum) => { | |
switch (type) { | |
case ModalEnum.AUTH: | |
return <AuthModal />; | |
case ModalEnum.TEMPLATE: | |
return <TemplateModal />; | |
case ModalEnum.SETTINGS: | |
return <SettingsModal />; | |
case ModalEnum.IDLE: | |
return <div />; | |
} | |
}; | |
return ( | |
<AnimatePresence exitBeforeEnter onExitComplete={() => null}> | |
{visible && ( | |
<motion.div | |
className="backdrop" | |
onClick={() => dispatch(close_modal())} | |
> | |
{renderModal(type)} | |
</motion.div> | |
)} | |
</AnimatePresence> | |
); | |
}; | |