/* eslint-disable @next/next/no-img-element */ import CardList from "@/components/High/CardList"; import { useEntityPermission } from "@/hooks/useEntityPermissions"; import { EntityWithRoles, Role} from "@/interfaces/entity"; import { User} from "@/interfaces/user"; import {sessionOptions} from "@/lib/session"; import { redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; import {getEntityWithRoles} from "@/utils/entities.be"; import {shouldRedirectHome} from "@/utils/navigation.disabled"; import { doesEntityAllow} from "@/utils/permissions"; import {getEntityUsers} from "@/utils/users.be"; import axios from "axios"; import clsx from "clsx"; import {withIronSessionSsr} from "iron-session/next"; import Head from "next/head"; import Link from "next/link"; import {useRouter} from "next/router"; import {Divider} from "primereact/divider"; import { BsChevronLeft, BsPlus, } from "react-icons/bs"; import {toast, ToastContainer} from "react-toastify"; export const getServerSideProps = withIronSessionSsr(async ({req, res, params}) => { const user = await requestUser(req, res) if (!user) return redirect("/login") if (shouldRedirectHome(user)) return redirect("/") const {id} = params as {id: string}; const entity = await getEntityWithRoles(id); if (!entity) return redirect("/entities") if (!doesEntityAllow(user, entity, "view_entity_roles")) return redirect(`/entities/${id}`) const users = await getEntityUsers(id); return { props: serialize({ user, entity, roles: entity.roles, users, }), }; }, sessionOptions); interface Props { user: User; entity: EntityWithRoles; roles: Role[]; users: User[]; } export default function Home({user, entity, roles, users}: Props) { const router = useRouter(); const canCreateRole = useEntityPermission(user, entity, "create_entity_role") const createRole = () => { if (!canCreateRole) return const label = prompt("What is the name of this new role?") if (!label) return axios.post('/api/roles', {label, permissions: [], entityID: entity.id}) .then((result) => { toast.success(`'${label}' role created successfully!`) router.push(`/entities/${entity.id}/roles/${result.data.id}`) }) .catch(() => { toast.error("Something went wrong!") }) } const firstCard = () => ( ); const renderCard = (role: Role) => { const usersWithRole = users.filter((x) => x.entities.map((x) => x.role).includes(role.id)); return (
{role.label} {usersWithRole.length} members
{role.permissions.length} Permissions ); }; return ( <> {entity.label} | EnCoach <>

{entity.label}

Roles
); }