/* 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 CodeGenerator from "./(admin)/CodeGenerator"; import ExamLoader from "./(admin)/ExamLoader"; import Lists from "./(admin)/Lists"; import BatchCodeGenerator from "./(admin)/BatchCodeGenerator"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import BatchCreateUser from "./(admin)/Lists/BatchCreateUser"; import { checkAccess, getTypesOfUser } from "@/utils/permissions"; import { useState } from "react"; import Modal from "@/components/Modal"; import IconCard from "@/components/IconCard"; import { BsCode, BsCodeSquare, BsGearFill, BsPeopleFill, BsPersonFill, } from "react-icons/bs"; import UserCreator from "./(admin)/UserCreator"; import CorporateGradingSystem from "./(admin)/CorporateGradingSystem"; import { CEFR_STEPS } from "@/resources/grading"; import { User } from "@/interfaces/user"; import { getUserPermissions } from "@/utils/permissions.be"; import { PermissionType } from "@/interfaces/permissions"; import { getUsers } from "@/utils/users.be"; import { getEntitiesWithRoles } 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"; import { getGradingSystemByEntities, getGradingSystemByEntity, } from "@/utils/grading.be"; import { Grading } from "@/interfaces"; import { useRouter } from "next/router"; import { useAllowedEntities } from "@/hooks/useEntityPermissions"; 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, entities, allUsers] = await Promise.all([ getUserPermissions(user.id), isAdmin(user) ? await getEntitiesWithRoles() : await getEntitiesWithRoles(mapBy(user.entities, "id")), getUsers(), ]); const gradingSystems = await getGradingSystemByEntities( mapBy(entities, "id") ); const entitiesGrading = entities.map( (e) => gradingSystems.find((g) => g.entity === e.id) || { entity: e.id, steps: CEFR_STEPS, } ); return { props: serialize({ user, permissions, entities, allUsers, entitiesGrading, }), }; }, sessionOptions); interface Props { user: User; permissions: PermissionType[]; entities: EntityWithRoles[]; allUsers: User[]; entitiesGrading: Grading[]; } export default function Admin({ user, entities, permissions, allUsers, entitiesGrading, }: Props) { const [modalOpen, setModalOpen] = useState(); const router = useRouter(); const entitiesAllowCreateUser = useAllowedEntities( user, entities, "create_user" ); const entitiesAllowCreateUsers = useAllowedEntities( user, entities, "create_user_batch" ); const entitiesAllowCreateCode = useAllowedEntities( user, entities, "create_code" ); const entitiesAllowCreateCodes = useAllowedEntities( user, entities, "create_code_batch" ); const entitiesAllowEditGrading = useAllowedEntities( user, entities, "edit_grading_system" ); return ( <> Settings Panel | EnCoach <> setModalOpen(undefined)} maxWidth="max-w-[85%]" > setModalOpen(undefined)} /> setModalOpen(undefined)} > setModalOpen(undefined)} /> setModalOpen(undefined)} > setModalOpen(undefined)} /> setModalOpen(undefined)} > setModalOpen(undefined)} /> setModalOpen(undefined)} > router.replace(router.asPath)} />
{checkAccess( user, getTypesOfUser(["teacher"]), permissions, "viewCodes" ) && (
setModalOpen("createCode")} disabled={entitiesAllowCreateCode.length === 0} /> setModalOpen("batchCreateCode")} disabled={entitiesAllowCreateCodes.length === 0} /> setModalOpen("createUser")} disabled={entitiesAllowCreateUser.length === 0} /> setModalOpen("batchCreateUser")} disabled={entitiesAllowCreateUsers.length === 0} /> {checkAccess(user, [ "admin", "corporate", "developer", "mastercorporate", ]) && ( setModalOpen("gradingSystem")} disabled={entitiesAllowEditGrading.length === 0} /> )}
)}
); }