Spaces:
Paused
Paused
| import { motion } from "framer-motion"; | |
| import { useTree } from "../../hooks"; | |
| import { treeTemplates } from "../../constants"; | |
| import { useAppSelector } from "../../store/hook"; | |
| import { theme_state } from "../../store/features/themeSlice"; | |
| import { compiler_state } from "../../store/features/compilerSlice"; | |
| import { TemplateSelectionSkeleton } from "../Skeleton/TemplateSelectionSkeleton"; | |
| import { modalVariant } from "./config"; | |
| const TemplateModal = () => { | |
| const { theme } = useAppSelector(theme_state); | |
| const { esbuildStatus } = useAppSelector(compiler_state); | |
| const { setTree } = useTree(); | |
| let arr = []; | |
| for (const item of Object.entries(treeTemplates)) { | |
| arr.push(item); | |
| } | |
| const templates = arr.map((template, key) => ( | |
| <button | |
| key={key} | |
| name={template[1].name} | |
| onClick={() => setTree(template[1])} | |
| className="p-2 rounded-sm" | |
| > | |
| <div className="flex pointer-events-none"> | |
| <img | |
| alt={template[1].name} | |
| src={template[1].iconSrc} | |
| className="h-9 w-9 rounded-sm" | |
| /> | |
| <div className="flex flex-col items-start justify-start pl-4"> | |
| <div>{template[1].name}</div> | |
| <div className="text-xs text-gray-400">{template[1].description}</div> | |
| </div> | |
| </div> | |
| </button> | |
| )); | |
| return ( | |
| <motion.div | |
| className="sm:mt-44 mx-auto h-full sm:h-auto sm:w-8/12 lg:w-6/12 sm:pb-20 sm:rounded-xl overflow-hidden glassmorphism" | |
| variants={modalVariant} | |
| initial="initial" | |
| animate="animate" | |
| exit="exit" | |
| transition={{ ease: "easeOut", duration: 0.3 }} | |
| onClick={(e) => e.stopPropagation()} | |
| > | |
| <div | |
| style={{ backgroundColor: theme.foreground }} | |
| className="border-b border-black h-10 flex items-center px-7" | |
| > | |
| <h1 className="text-xl">Templates</h1> | |
| </div> | |
| <div className="pt-6 px-7 flex flex-wrap gap-x-14 gap-y-8"> | |
| {esbuildStatus.isReady ? templates : <TemplateSelectionSkeleton />} | |
| </div> | |
| </motion.div> | |
| ); | |
| }; | |
| export default TemplateModal; | |