in src/Frontend/src/components/groups/Groups.tsx [171:226]
header: t("table.headers.actions"),
cell: ({ row }) => {
const group = row.original
return (
<div className="flex justify-center">
<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">
<RBACWrapper requiredScopes={[SCOPE_ADMIN]}>
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs"
onClick={() => editById(group.id)}
>
{t('table.buttons.edit')}
<LucideEdit className="w-4 h-4" />
</DropdownMenuItem>
</RBACWrapper>
<RBACWrapper requiredScopes={[SCOPE_USER_IMPERSONATE]}>
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs px-2 gap-2"
onClick={() => router.push(`/users/exams?groups=${group.id}`)}
>
{t('table.buttons.go_to_exams')}
<NotepadTextIcon className="w-4 h-4" />
</DropdownMenuItem>
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs px-2 gap-2"
onClick={() => router.push(`/users/results?groups=${group.id}`)}
>
{t('table.buttons.go_to_results')}
<LucideLineChart className="w-4 h-4" />
</DropdownMenuItem>
</RBACWrapper>
<RBACWrapper requiredScopes={[SCOPE_ADMIN]}>
<DropdownMenuSeparator />
<DropdownMenuItem
className="cursor-pointer flex justify-between text-xs"
onClick={() => deleteById(group.id)}
>
{t('table.buttons.delete')}
<LucideTrash2 className="w-4 h-4" />
</DropdownMenuItem>
</RBACWrapper>
</DropdownMenuContent>
</DropdownMenu>
</div>
);
}