lib/auth/user_admin.ex

defmodule Legendary.Auth.UserAdmin do
  @moduledoc """
  Custom admin login for user records.
  """
  import Ecto.Query, only: [from: 2]
  alias Legendary.Auth.User
  alias Legendary.Core.Repo

  def custom_links(_schema) do
    # We add the funwithflags admin URL under this custom admin because kaffy
    #   doesn't have global custom links that work in this way and user is the
    #   closest fit.
    [
      %{name: "Feature Flags", url: "/admin/feature-flags", order: 2, location: :top, icon: "flag"},
    ]
  end

  def create_changeset(schema, attrs) do
    Legendary.Auth.User.admin_changeset(schema, attrs)
  end

  def update_changeset(schema, attrs) do
    Legendary.Auth.User.admin_changeset(schema, attrs)
  end

  def widgets(_schema, _conn) do
    user_count =
      (from u in User,
        select: count(u.id))
      |> Repo.one()

    [
      %{
        icon: "users",
        type: "tidbit",
        title: "Registered Users",
        content: user_count,
        width: 3
      }
    ]
  end

  def index(_) do
    [
      id: nil,
      email: nil,
      roles: %{value: fn u -> Enum.join(u.roles, ", ") end},
      display_name: nil,
      homepage_url: nil,
      email_confirmed_at: nil,
      inserted_at: nil,
      updated_at: nil,
    ]
  end

  def form_fields(_) do
    [
      email: nil,
      roles: nil,
      display_name: nil,
      homepage_url: nil,
    ]
  end
end