defmodule AshAdmin.Components.TopNav.ActorSelect do @moduledoc false use Surface.Component alias Surface.Components.LiveRedirect import AshAdmin.Helpers prop(authorizing, :boolean, required: true) prop(actor_paused, :boolean, required: true) prop(actor, :any, required: true) prop(actor_resources, :any, required: true) prop(toggle_authorizing, :event, required: true) prop(toggle_actor_paused, :event, required: true) prop(clear_actor, :event, required: true) prop(api, :any, required: true) prop(actor_api, :any, required: true) prop(prefix, :any, required: true) def render(assigns) do ~F"""
{user_display(@actor)}
{render_actor_link(assigns, @actor_resources)}
""" end defp render_actor_link(assigns, [{api, resource}]) do ~F""" Set {AshAdmin.Resource.name(resource)} """ end defp render_actor_link(assigns, apis_and_resources) do ~F"""
Set {AshAdmin.Resource.name(resource)} |
""" end defp user_display(actor) do name = AshAdmin.Resource.name(actor.__struct__) case Ash.Resource.Info.primary_key(actor.__struct__) do [field] -> "#{name}: #{Map.get(actor, field)}" fields -> Enum.map_join(fields, ", ", fn field -> "#{field}: #{Map.get(actor, field)}" end) end end end