/* eslint-disable @next/next/no-img-element */ import Head from "next/head"; import { withIronSessionSsr } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; import { ToastContainer } from "react-toastify"; import Layout from "@/components/High/Layout"; import CodeGenerator from "./(admin)/CodeGenerator"; import ExamLoader from "./(admin)/ExamLoader"; import { Tab } from "@headlessui/react"; import clsx from "clsx"; import Lists from "./(admin)/Lists"; import BatchCodeGenerator from "./(admin)/BatchCodeGenerator"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import ExamGenerator from "./(admin)/ExamGenerator"; import BatchCreateUser from "./(admin)/BatchCreateUser"; import { checkAccess, getTypesOfUser } from "@/utils/permissions"; import usePermissions from "@/hooks/usePermissions"; import { useState } from "react"; import Modal from "@/components/Modal"; import IconCard from "@/dashboards/IconCard"; import { BsCode, BsCodeSquare, BsGearFill, BsPeopleFill, BsPersonFill } from "react-icons/bs"; import UserCreator from "./(admin)/UserCreator"; import CorporateGradingSystem from "./(admin)/CorporateGradingSystem"; import useGradingSystem from "@/hooks/useGrading"; import { CEFR_STEPS } from "@/resources/grading"; import { User } from "@/interfaces/user"; import { getUserPermissions } from "@/utils/permissions.be"; import { Permission, PermissionType } from "@/interfaces/permissions"; import { getUsers } from "@/utils/users.be"; import useUsers from "@/hooks/useUsers"; import { getEntitiesWithRoles, getEntityWithRoles } from "@/utils/entities.be"; import { mapBy, serialize, redirect } from "@/utils"; import { EntityWithRoles } from "@/interfaces/entity"; import { requestUser } from "@/utils/api"; import { isAdmin } from "@/utils/users"; export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => { const user = await requestUser(req, res) if (!user) return redirect("/login") if (shouldRedirectHome(user) || !checkAccess(user, ["admin", "developer", "corporate", "teacher", "mastercorporate"])) return redirect("/") const permissions = await getUserPermissions(user.id); const entities = isAdmin(user) ? await getEntitiesWithRoles() : await getEntitiesWithRoles(mapBy(user.entities, 'id')) const allUsers = await getUsers() return { props: serialize({ user, permissions, entities, allUsers }), }; }, sessionOptions); interface Props { user: User; permissions: PermissionType[]; entities: EntityWithRoles[]; allUsers: User[] } export default function Admin({ user, entities, permissions, allUsers }: Props) { const { gradingSystem, mutate } = useGradingSystem(); const [modalOpen, setModalOpen] = useState(); return ( <> Settings Panel | EnCoach setModalOpen(undefined)}> setModalOpen(undefined)} /> setModalOpen(undefined)}> setModalOpen(undefined)} /> setModalOpen(undefined)}> setModalOpen(undefined)} /> setModalOpen(undefined)}> setModalOpen(undefined)} /> setModalOpen(undefined)}> { mutate({ user: user.id, steps }); setModalOpen(undefined); }} />
{checkAccess(user, getTypesOfUser(["teacher"]), permissions, "viewCodes") && (
setModalOpen("createCode")} /> setModalOpen("batchCreateCode")} /> setModalOpen("createUser")} /> setModalOpen("batchCreateUser")} /> {checkAccess(user, ["admin", "corporate", "developer", "mastercorporate"]) && ( setModalOpen("gradingSystem")} /> )}
)}
); }