/* 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)/Lists/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 { 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"; 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 = await getUserPermissions(user.id); const entities = isAdmin(user) ? await getEntitiesWithRoles() : await getEntitiesWithRoles(mapBy(user.entities, 'id')) const allUsers = await 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') 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")} /> )}
)}
); }