"use client"; import { useTranslations } from "next-intl"; import { useEffect, useState } from "react"; import { errorToast } from "../../../../components"; import { getRoleId } from "../../../../roles"; import { Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "../../../../shadcnui"; import { UserInterface } from "../../../user"; import { UserService } from "../../../user/data/user.service"; import { RoleInterface } from "../../data"; import { RoleService } from "../../data/role.service"; type RemoveUserFromRoleProps = { user: UserInterface; role: RoleInterface; refresh: () => Promise; }; export function RemoveUserFromRole({ role, user, refresh }: RemoveUserFromRoleProps) { const [open, setOpen] = useState(false); const [canRemove, setCanRemove] = useState(false); const t = useTranslations(); useEffect(() => { async function checkCompanyAdminDeletability(): Promise { const roleUsers = await UserService.findAllUsersByRole({ roleId: role.id, }); if (roleUsers.length > 1) setCanRemove(true); } if (role.id !== getRoleId().CompanyAdministrator) { setCanRemove(true); return; } checkCompanyAdminDeletability(); }, [role]); const remove = async () => { try { await RoleService.removeUserFromRole({ roleId: role.id, userId: user.id, }); setOpen(false); refresh(); } catch (error) { errorToast({ title: t(`common.errors.error`), error: error }); } }; const roleName = t(`role.roles`, { role: role.id.replaceAll(`-`, ``) }); return ( { e.stopPropagation(); e.preventDefault(); setOpen(true); }} > {t(`role.remove_user.title`)} {t(`role.remove_user.title`)} {canRemove ? t(`role.remove_user.subtitle_allowed`) : t(`role.remove_user.subtitle_not_allowed`)} {canRemove ? ( <> {t(`role.remove_user.description_allowed`, { role: roleName, user: user.name })}
) : ( <>{t(`role.remove_user.description_not_allowed`, { role: roleName, user: user.name })} )}
); }