/* eslint-disable @next/next/no-img-element */ import Head from "next/head"; import {withIronSessionSsr} from "iron-session/next"; import {sessionOptions} from "@/lib/session"; import useUser from "@/hooks/useUser"; import {toast, ToastContainer} from "react-toastify"; import Layout from "@/components/High/Layout"; import {RadioGroup} from "@headlessui/react"; import {MODULE_ARRAY} from "@/utils/moduleUtils"; import clsx from "clsx"; import {capitalize} from "lodash"; import {FormEvent, useState} from "react"; import {Module} from "@/interfaces"; import Input from "@/components/Low/Input"; import Button from "@/components/Low/Button"; import {getExamById} from "@/utils/exams"; import useExamStore from "@/stores/examStore"; import {useRouter} from "next/router"; import ShortUniqueId from "short-unique-id"; import {Type} from "@/interfaces/user"; import axios from "axios"; export const getServerSideProps = withIronSessionSsr(({req, res}) => { const user = req.session.user; if (!user || !user.isVerified) { res.setHeader("location", "/login"); res.statusCode = 302; res.end(); return { props: { user: null, }, }; } if (user.type !== "developer") { res.setHeader("location", "/"); res.statusCode = 302; res.end(); return { props: { user: null, }, }; } return { props: {user: req.session.user}, }; }, sessionOptions); const ExamLoader = () => { const [selectedModule, setSelectedModule] = useState(); const [examId, setExamId] = useState(); const [isLoading, setIsLoading] = useState(false); const setExams = useExamStore((state) => state.setExams); const setSelectedModules = useExamStore((state) => state.setSelectedModules); const router = useRouter(); const loadExam = async (e?: FormEvent) => { if (e) e.preventDefault(); setIsLoading(true); if (selectedModule && examId) { const exam = await getExamById(selectedModule, examId.trim()); if (!exam) { toast.error("Unknown Exam ID! Please make sure you selected the right module and entered the right exam ID", { toastId: "invalid-exam-id", }); setIsLoading(false); return; } setExams([exam]); setSelectedModules([selectedModule]); router.push("/exercises"); } setIsLoading(false); }; return (
{MODULE_ARRAY.map((module) => ( {({checked}) => ( {capitalize(module)} )} ))}
); }; const CodeGenerator = () => { const [generatedCode, setGeneratedCode] = useState(); const generateCode = (type: Type) => { const uid = new ShortUniqueId(); const code = uid.randomUUID(6); axios .post("/api/code", {type, code}) .then(({data, status}) => { if (data.ok) { toast.success(`Successfully generated a ${capitalize(type)} code!`, {toastId: "success"}); setGeneratedCode(code); return; } if (status === 403) { toast.error(`You do not have permission to generate a ${capitalize(type)} code!`, {toastId: "forbidden"}); } }) .catch(({response: {status}}) => { if (status === 403) { toast.error(`You do not have permission to generate a ${capitalize(type)} code!`, {toastId: "forbidden"}); return; } toast.error(`Something went wrong, please try again later!`, {toastId: "error"}); }); }; return (
{ if (generatedCode) navigator.clipboard.writeText(generatedCode); }}> {generatedCode}
{generatedCode && Give this code to the user to complete their registration}
); }; export default function Admin() { const {user} = useUser({redirectTo: "/login"}); return ( <> Admin Panel | EnCoach {user && (
)} ); }