refactor: fix credo warnings, update gettext
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
05c81af6e9
commit
5e0b6580ae
6 changed files with 487 additions and 83 deletions
|
|
@ -27,40 +27,46 @@ defmodule MvWeb.GroupLive.Form do
|
|||
action = if params["slug"], do: :update, else: :create
|
||||
resource = Mv.Membership.Group
|
||||
|
||||
unless can?(actor, action, resource) do
|
||||
{:ok, redirect(socket, to: ~p"/groups")}
|
||||
else
|
||||
socket =
|
||||
case params["slug"] do
|
||||
nil ->
|
||||
# New group
|
||||
socket
|
||||
|> assign(:group, nil)
|
||||
|> assign(:page_title, gettext("Create Group"))
|
||||
|> assign(:return_to, "index")
|
||||
|
||||
slug ->
|
||||
# Edit existing group
|
||||
case Membership.get_group_by_slug(slug, actor: actor) do
|
||||
{:ok, nil} ->
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group not found."))
|
||||
|> redirect(to: ~p"/groups")
|
||||
|
||||
{:ok, group} ->
|
||||
socket
|
||||
|> assign(:group, group)
|
||||
|> assign(:page_title, gettext("Edit Group"))
|
||||
|> assign(:return_to, "show")
|
||||
|
||||
{:error, _error} ->
|
||||
socket
|
||||
|> put_flash(:error, gettext("Failed to load group."))
|
||||
|> redirect(to: ~p"/groups")
|
||||
end
|
||||
end
|
||||
|
||||
if can?(actor, action, resource) do
|
||||
socket = load_group_for_form(socket, params, actor)
|
||||
{:ok, assign_form(socket)}
|
||||
else
|
||||
{:ok, redirect(socket, to: ~p"/groups")}
|
||||
end
|
||||
end
|
||||
|
||||
defp load_group_for_form(socket, params, actor) do
|
||||
case params["slug"] do
|
||||
nil ->
|
||||
# New group
|
||||
socket
|
||||
|> assign(:group, nil)
|
||||
|> assign(:page_title, gettext("Create Group"))
|
||||
|> assign(:return_to, "index")
|
||||
|
||||
slug ->
|
||||
# Edit existing group
|
||||
load_existing_group(socket, slug, actor)
|
||||
end
|
||||
end
|
||||
|
||||
defp load_existing_group(socket, slug, actor) do
|
||||
case Membership.get_group_by_slug(slug, actor: actor) do
|
||||
{:ok, nil} ->
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group not found."))
|
||||
|> redirect(to: ~p"/groups")
|
||||
|
||||
{:ok, group} ->
|
||||
socket
|
||||
|> assign(:group, group)
|
||||
|> assign(:page_title, gettext("Edit Group"))
|
||||
|> assign(:return_to, "show")
|
||||
|
||||
{:error, _error} ->
|
||||
socket
|
||||
|> put_flash(:error, gettext("Failed to load group."))
|
||||
|> redirect(to: ~p"/groups")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -23,15 +23,15 @@ defmodule MvWeb.GroupLive.Index do
|
|||
actor = current_actor(socket)
|
||||
|
||||
# Check if user can read groups
|
||||
unless can?(actor, :read, Mv.Membership.Group) do
|
||||
{:ok, redirect(socket, to: ~p"/members")}
|
||||
else
|
||||
if can?(actor, :read, Mv.Membership.Group) do
|
||||
groups = load_groups(actor)
|
||||
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:page_title, gettext("Groups"))
|
||||
|> assign(:groups, groups)}
|
||||
else
|
||||
{:ok, redirect(socket, to: ~p"/members")}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -30,28 +30,32 @@ defmodule MvWeb.GroupLive.Show do
|
|||
actor = current_actor(socket)
|
||||
|
||||
# Check if user can read groups
|
||||
unless can?(actor, :read, Mv.Membership.Group) do
|
||||
{:noreply, redirect(socket, to: ~p"/members")}
|
||||
if can?(actor, :read, Mv.Membership.Group) do
|
||||
load_group_by_slug(socket, slug, actor)
|
||||
else
|
||||
case Membership.get_group_by_slug(slug, actor: actor, load: [:members, :member_count]) do
|
||||
{:ok, nil} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group not found."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
{:noreply, redirect(socket, to: ~p"/members")}
|
||||
end
|
||||
end
|
||||
|
||||
{:ok, group} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:page_title, group.name)
|
||||
|> assign(:group, group)}
|
||||
defp load_group_by_slug(socket, slug, actor) do
|
||||
case Membership.get_group_by_slug(slug, actor: actor, load: [:members, :member_count]) do
|
||||
{:ok, nil} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group not found."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
|
||||
{:error, _error} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Failed to load group."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
end
|
||||
{:ok, group} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:page_title, group.name)
|
||||
|> assign(:group, group)}
|
||||
|
||||
{:error, _error} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Failed to load group."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -101,7 +105,12 @@ defmodule MvWeb.GroupLive.Show do
|
|||
<h2 class="text-lg font-semibold mb-2">{gettext("Members")}</h2>
|
||||
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
|
||||
<p class="mb-4">
|
||||
{gettext("Total: %{count} member(s)", count: @group.member_count || 0)}
|
||||
{ngettext(
|
||||
"Total: %{count} member",
|
||||
"Total: %{count} members",
|
||||
@group.member_count || 0,
|
||||
count: @group.member_count || 0
|
||||
)}
|
||||
</p>
|
||||
|
||||
<%= if Enum.empty?(@group.members || []) do %>
|
||||
|
|
@ -243,33 +252,7 @@ defmodule MvWeb.GroupLive.Show do
|
|||
|> redirect(to: ~p"/groups")}
|
||||
|
||||
{:ok, group} ->
|
||||
if socket.assigns.name_confirmation == group.name do
|
||||
case Membership.destroy_group(group, actor: actor) do
|
||||
:ok ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:info, gettext("Group deleted successfully."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
|
||||
{:error, error} ->
|
||||
error_message = format_error(error)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(
|
||||
:error,
|
||||
gettext("Failed to delete group: %{error}", error: error_message)
|
||||
)
|
||||
|> assign(:show_delete_modal, false)
|
||||
|> assign(:name_confirmation, "")}
|
||||
end
|
||||
else
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group name does not match."))
|
||||
|> assign(:show_delete_modal, false)
|
||||
|> assign(:name_confirmation, "")}
|
||||
end
|
||||
handle_delete_confirmation(socket, group, actor)
|
||||
|
||||
{:error, _error} ->
|
||||
{:noreply,
|
||||
|
|
@ -279,6 +262,40 @@ defmodule MvWeb.GroupLive.Show do
|
|||
end
|
||||
end
|
||||
|
||||
defp handle_delete_confirmation(socket, group, actor) do
|
||||
if socket.assigns.name_confirmation == group.name do
|
||||
perform_group_deletion(socket, group, actor)
|
||||
else
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:error, gettext("Group name does not match."))
|
||||
|> assign(:show_delete_modal, false)
|
||||
|> assign(:name_confirmation, "")}
|
||||
end
|
||||
end
|
||||
|
||||
defp perform_group_deletion(socket, group, actor) do
|
||||
case Membership.destroy_group(group, actor: actor) do
|
||||
:ok ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:info, gettext("Group deleted successfully."))
|
||||
|> redirect(to: ~p"/groups")}
|
||||
|
||||
{:error, error} ->
|
||||
error_message = format_error(error)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(
|
||||
:error,
|
||||
gettext("Failed to delete group: %{error}", error: error_message)
|
||||
)
|
||||
|> assign(:show_delete_modal, false)
|
||||
|> assign(:name_confirmation, "")}
|
||||
end
|
||||
end
|
||||
|
||||
defp format_error(%{message: message}) when is_binary(message), do: message
|
||||
defp format_error(error), do: inspect(error)
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue