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