File size: 1,121 Bytes
3c3f089
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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>
  );
};