/* 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} from "@/utils/users"; import {convertToUsers, getGroupsForUser} from "@/utils/groups.be"; import {countEntityUsers, getEntityUsers, getSpecificUsers} from "@/utils/users.be"; import {checkAccess, getTypesOfUser} from "@/utils/permissions"; import Link from "next/link"; import {uniq} from "lodash"; import {BsPlus} from "react-icons/bs"; import CardList from "@/components/High/CardList"; import {getEntitiesWithRoles} from "@/utils/entities.be"; import {EntityWithRoles} from "@/interfaces/entity"; import Separator from "@/components/Low/Separator"; type EntitiesWithCount = {entity: EntityWithRoles; users: User[]; count: number}; export const getServerSideProps = withIronSessionSsr(async ({req}) => { const user = req.session.user; if (!user) { return { redirect: { destination: "/login", permanent: false, }, }; } if (shouldRedirectHome(user)) { return { redirect: { destination: "/", permanent: false, }, }; } const entities = await getEntitiesWithRoles( checkAccess(user, getTypesOfUser(["admin", "developer"])) ? user.entities.map((x) => x.id) : undefined, ); const entitiesWithCount = await Promise.all( entities.map(async (e) => ({entity: e, count: await countEntityUsers(e.id), users: await getEntityUsers(e.id, 5)})), ); return { props: {user, entities: JSON.parse(JSON.stringify(entitiesWithCount))}, }; }, sessionOptions); const SEARCH_FIELDS: string[][] = [["entity", "label"]]; interface Props { user: User; entities: EntitiesWithCount[]; } export default function Home({user, entities}: Props) { const renderCard = ({entity, users, count}: EntitiesWithCount) => ( Entity: {entity.label} Members ({count}): {users.map(getUserName).join(", ")} {count > 5 ? and {count - 5} more : ""} ); const firstCard = () => ( Create Entity ); return ( <> Entities | EnCoach {user && (

Entities

list={entities} searchFields={SEARCH_FIELDS} renderCard={renderCard} firstCard={firstCard} />
)} ); }