refactor: use core components
This commit is contained in:
parent
f0be98316c
commit
b7c93f19cb
26 changed files with 1080 additions and 954 deletions
|
|
@ -39,72 +39,64 @@ defmodule MvWeb.GroupLive.Index do
|
|||
def render(assigns) do
|
||||
~H"""
|
||||
<Layouts.app flash={@flash} current_user={@current_user}>
|
||||
<div class="flex items-center justify-between mb-6">
|
||||
<h1 class="text-2xl font-bold">{gettext("Groups")}</h1>
|
||||
<%= if can?(@current_user, :create, Mv.Membership.Group) do %>
|
||||
<.button navigate={~p"/groups/new"} variant="primary">
|
||||
<.icon name="hero-plus" class="size-4 mr-2" />
|
||||
{gettext("Create Group")}
|
||||
</.button>
|
||||
<.header>
|
||||
{gettext("Groups")}
|
||||
<:actions>
|
||||
<%= if can?(@current_user, :create, Mv.Membership.Group) do %>
|
||||
<.button navigate={~p"/groups/new"} variant="primary">
|
||||
<.icon name="hero-plus" class="size-4 mr-2" />
|
||||
{gettext("Create Group")}
|
||||
</.button>
|
||||
<% end %>
|
||||
</:actions>
|
||||
</.header>
|
||||
|
||||
<div class="mt-6 space-y-6">
|
||||
<%= if Enum.empty?(@groups) do %>
|
||||
<div class="text-center py-12">
|
||||
<p class="text-base-content/60 italic">{gettext("No groups")}</p>
|
||||
</div>
|
||||
<% else %>
|
||||
<.table
|
||||
id="groups-table"
|
||||
rows={@groups}
|
||||
row_id={fn group -> "group-#{group.id}" end}
|
||||
row_click={fn group -> JS.navigate(~p"/groups/#{group.slug}") end}
|
||||
>
|
||||
<:col :let={group} label={gettext("Name")}>
|
||||
{group.name}
|
||||
</:col>
|
||||
<:col :let={group} label={gettext("Description")}>
|
||||
<%= if group.description do %>
|
||||
{group.description}
|
||||
<% else %>
|
||||
<span class="text-base-content/50 italic">—</span>
|
||||
<% end %>
|
||||
</:col>
|
||||
<:col :let={group} label={gettext("Members")} class="text-right">
|
||||
{group.member_count || 0}
|
||||
</:col>
|
||||
<:action :let={group}>
|
||||
<.button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
navigate={~p"/groups/#{group.slug}"}
|
||||
>
|
||||
{gettext("View")}
|
||||
</.button>
|
||||
<%= if can?(@current_user, :update, Mv.Membership.Group) do %>
|
||||
<.button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
navigate={~p"/groups/#{group.slug}/edit"}
|
||||
>
|
||||
{gettext("Edit group")}
|
||||
</.button>
|
||||
<% end %>
|
||||
</:action>
|
||||
</.table>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= if Enum.empty?(@groups) do %>
|
||||
<div class="text-center py-12">
|
||||
<p class="text-base-content/70">{gettext("No groups")}</p>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="table table-zebra">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{gettext("Name")}</th>
|
||||
<th>{gettext("Description")}</th>
|
||||
<th>{gettext("Members")}</th>
|
||||
<th>{gettext("Actions")}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<%= for group <- @groups do %>
|
||||
<tr>
|
||||
<td>
|
||||
{group.name}
|
||||
</td>
|
||||
<td>
|
||||
<%= if group.description do %>
|
||||
{group.description}
|
||||
<% else %>
|
||||
<span class="text-base-content/50 italic">—</span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<%= if group.member_count do %>
|
||||
{group.member_count}
|
||||
<% else %>
|
||||
0
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<div class="flex gap-2">
|
||||
<.link navigate={~p"/groups/#{group.slug}"} class="btn btn-sm btn-ghost">
|
||||
{gettext("View")}
|
||||
</.link>
|
||||
<%= if can?(@current_user, :update, Mv.Membership.Group) do %>
|
||||
<.link
|
||||
navigate={~p"/groups/#{group.slug}/edit"}
|
||||
class="btn btn-sm btn-ghost"
|
||||
>
|
||||
{gettext("Edit")}
|
||||
</.link>
|
||||
<% end %>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<% end %>
|
||||
</Layouts.app>
|
||||
"""
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue