|
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> |
|
); |
|
}; |
|
|