/* 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 { GroupWithUsers, User } from "@/interfaces/user"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getUserName, isAdmin } from "@/utils/users"; import { convertToUsers, getGroupsForEntities } from "@/utils/groups.be"; import { getSpecificUsers } from "@/utils/users.be"; import Link from "next/link"; import { uniq } from "lodash"; import { BsFillMortarboardFill, BsPlus } from "react-icons/bs"; import CardList from "@/components/High/CardList"; import Separator from "@/components/Low/Separator"; import { mapBy, redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; import { findAllowedEntities } from "@/utils/permissions"; import { getEntities, getEntitiesWithRoles } from "@/utils/entities.be"; import { useAllowedEntities } from "@/hooks/useEntityPermissions"; import { EntityWithRoles } from "@/interfaces/entity"; import { FaPersonChalkboard } from "react-icons/fa6"; export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => { const user = await requestUser(req, res) if (!user) return redirect("/login") if (shouldRedirectHome(user)) return redirect("/") const entityIDS = mapBy(user.entities, "id"); const entities = await getEntitiesWithRoles(isAdmin(user) ? undefined : entityIDS) const allowedEntities = findAllowedEntities(user, entities, "view_classrooms") const groups = await getGroupsForEntities(mapBy(allowedEntities, 'id')); const users = await getSpecificUsers(uniq(groups.flatMap((g) => [...g.participants, g.admin]))); const groupsWithUsers: GroupWithUsers[] = groups.map((g) => convertToUsers(g, users.filter(x => isAdmin(user) ? true : !isAdmin(x)))); return { props: serialize({ user, groups: groupsWithUsers, entities: allowedEntities }), }; }, sessionOptions); const SEARCH_FIELDS = [ ["name"], ["admin", "name"], ["admin", "email"], ["admin", "corporateInformation", "companyInformation", "name"], ["participants", "name"], ["participants", "email"], ["participants", "corporateInformation", "companyInformation", "name"], ]; interface Props { user: User; groups: GroupWithUsers[]; entities: EntityWithRoles[] } export default function Home({ user, groups, entities }: Props) { const entitiesAllowCreate = useAllowedEntities(user, entities, 'create_classroom') const renderCard = (group: GroupWithUsers) => (