in src/Frontend/src/components/users/Users.tsx [205:266]
header: t("table.headers.actions"),
cell: ({ row }) => {
const user = row.original
return (
<>
<div className="flex justify-center">
<RBACWrapper requiredScopes={[SCOPE_USER_IMPERSONATE]}>
{pathname.includes('results') ?
<Button
variant={"secondary"}
className="flex text-xs gap-1"
onClick={() => results(user)}
disabled={calculateDisabledResult(user)}
>
<LucideLineChart className="w-4 h-4" />
{t('table.buttons.go_to_results')}
</Button>
:
<Button
variant={"secondary"}
className="flex text-xs gap-1"
onClick={() => impersonate(user)}
disabled={calculateDisabledExams(user)}
>
<LucideBookCopy className="w-4 h-4" />
{t('table.buttons.go_to_exams')}
</Button>
}
</RBACWrapper>
<RBACWrapper requiredScopes={[SCOPE_ADMIN]}>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" className="h-8 w-8 p-0">
<span className="sr-only">{t('table.messages.open')}</span>
<MoreHorizontal className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs"
onClick={() => editById(user.id)}
>
{t('table.buttons.edit')}
<LucideEdit className="w-4 h-4" />
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs"
onClick={() => deleteById(user.id)}
>
{t('table.buttons.delete')}
<LucideTrash2 className="w-4 h-4" />
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</RBACWrapper>
</div>
</>
);
}