<.header>
{gettext("Listing Roles")}
<:subtitle>
{gettext("Manage user roles and their permission sets.")}
<:actions>
<%= if can?(@current_user, :create, Mv.Authorization.Role) do %>
<.button variant="primary" navigate={~p"/admin/roles/new"}>
<.icon name="hero-plus" /> {gettext("New Role")}
<% end %>
<.table
id="roles"
rows={@roles}
row_click={fn role -> JS.navigate(~p"/admin/roles/#{role}") end}
row_tooltip={gettext("Click for role details")}
>
<:col :let={role} label={gettext("Name")}>
{role.name}
<%= if role.is_system_role do %>
{gettext("System Role")}
<% end %>
<:col :let={role} label={gettext("Description")}>
<%= if role.description do %>
{role.description}
<% else %>
{gettext("No description")}
<% end %>
<:col :let={role} label={gettext("Permission Set")}>
{role.permission_set_name}
<:col :let={role} label={gettext("Type")}>
<%= if role.is_system_role do %>
{gettext("System")}
<% else %>
{gettext("Custom")}
<% end %>
<:col :let={role} label={gettext("Users")}>
{get_user_count(role, @user_counts)}
<:action :let={role}>
<.link navigate={~p"/admin/roles/#{role}"}>{gettext("Show")}
<%= if can?(@current_user, :update, Mv.Authorization.Role) do %>
<.button variant="ghost" size="sm" navigate={~p"/admin/roles/#{role}/edit"}>
<.icon name="hero-pencil" class="size-4" />
{gettext("Edit role")}
<% end %>
<:action :let={role}>
<%= if can?(@current_user, :destroy, Mv.Authorization.Role) and not role.is_system_role do %>
<.button
variant="danger"
size="sm"
phx-click={JS.push("delete", value: %{id: role.id}) |> hide("#row-#{role.id}")}
data-confirm={gettext("Are you sure?")}
>
<.icon name="hero-trash" class="size-4" />
{gettext("Delete")}
<% else %>
<.tooltip
:if={role.is_system_role}
content={gettext("System roles cannot be deleted")}
position="left"
>
<% end %>