refactor: extract shared helpers for RoleLive modules
Extract format_error and permission_set_badge_class functions into MvWeb.RoleLive.Helpers module to eliminate code duplication between Index and Show LiveViews.
This commit is contained in:
parent
e3cd400899
commit
32296625fe
4 changed files with 44 additions and 34 deletions
|
|
@ -16,6 +16,8 @@ defmodule MvWeb.RoleLive.Show do
|
|||
|
||||
require Ash.Query
|
||||
|
||||
import MvWeb.RoleLive.Helpers
|
||||
|
||||
on_mount {MvWeb.LiveHelpers, :ensure_user_role_loaded}
|
||||
|
||||
@impl true
|
||||
|
|
@ -27,10 +29,10 @@ defmodule MvWeb.RoleLive.Show do
|
|||
domain: Mv.Authorization,
|
||||
actor: socket.assigns[:current_user]
|
||||
) do
|
||||
{:ok, role} ->
|
||||
user_count = load_user_count(role, socket.assigns[:current_user])
|
||||
{:ok, role} ->
|
||||
user_count = load_user_count(role, socket.assigns[:current_user])
|
||||
|
||||
{:ok,
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:page_title, gettext("Show Role"))
|
||||
|> assign(:role, role)
|
||||
|
|
@ -50,6 +52,7 @@ defmodule MvWeb.RoleLive.Show do
|
|||
end
|
||||
rescue
|
||||
e in [Ash.Error.Invalid] ->
|
||||
# Handle exceptions that Ash.get might throw (e.g., policy violations)
|
||||
case e do
|
||||
%Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{} | _]} ->
|
||||
{:ok,
|
||||
|
|
@ -138,6 +141,7 @@ defmodule MvWeb.RoleLive.Show do
|
|||
end
|
||||
|
||||
# Recalculates user count for a specific role (used before deletion)
|
||||
@spec recalculate_user_count(Mv.Authorization.Role.t(), map() | nil) :: non_neg_integer()
|
||||
defp recalculate_user_count(role, actor) do
|
||||
opts = [domain: Mv.Accounts]
|
||||
opts = if actor, do: Keyword.put(opts, :actor, actor), else: opts
|
||||
|
|
@ -149,6 +153,7 @@ defmodule MvWeb.RoleLive.Show do
|
|||
end
|
||||
|
||||
# Loads user count for initial display (uses same logic as recalculate)
|
||||
@spec load_user_count(Mv.Authorization.Role.t(), map() | nil) :: non_neg_integer()
|
||||
defp load_user_count(role, actor) do
|
||||
recalculate_user_count(role, actor)
|
||||
end
|
||||
|
|
@ -209,16 +214,4 @@ defmodule MvWeb.RoleLive.Show do
|
|||
"""
|
||||
end
|
||||
|
||||
defp format_error(%Ash.Error.Invalid{} = error) do
|
||||
Enum.map_join(error.errors, ", ", fn e -> e.message end)
|
||||
end
|
||||
|
||||
defp format_error(error) when is_binary(error), do: error
|
||||
defp format_error(_error), do: gettext("An error occurred")
|
||||
|
||||
defp permission_set_badge_class("own_data"), do: "badge badge-neutral badge-sm"
|
||||
defp permission_set_badge_class("read_only"), do: "badge badge-info badge-sm"
|
||||
defp permission_set_badge_class("normal_user"), do: "badge badge-success badge-sm"
|
||||
defp permission_set_badge_class("admin"), do: "badge badge-error badge-sm"
|
||||
defp permission_set_badge_class(_), do: "badge badge-ghost badge-sm"
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue