defmodule MicrowavepropWeb.UserManagementLive.Index do @moduledoc false use MicrowavepropWeb, :live_view alias Microwaveprop.Accounts @impl true def render(assigns) do ~H""" <.header> Users <:subtitle>Manage registered accounts and admin flags. <.table id="users" rows={@streams.users}> <:col :let={{_id, user}} label="Callsign">{user.callsign} <:col :let={{_id, user}} label="Name">{user.name} <:col :let={{_id, user}} label="Email">{user.email} <:col :let={{_id, user}} label="Admin"> <%= if user.is_admin do %> admin <% else %> <% end %> <:col :let={{_id, user}} label="Confirmed"> <%= if user.confirmed_at do %> {Calendar.strftime(user.confirmed_at, "%Y-%m-%d")} <% else %> pending <% end %> <:action :let={{_id, user}}> <.link navigate={~p"/users/#{user.id}/edit"}>Edit <:action :let={{id, user}}> <.link :if={user.id != @current_scope.user.id} phx-click={JS.push("delete", value: %{id: user.id}) |> hide("##{id}")} data-confirm={"Delete user #{user.callsign}? This cannot be undone."} > Delete """ end @impl true def mount(_params, _session, socket) do {:ok, socket |> assign(:page_title, "Users") |> stream(:users, Accounts.list_users())} end @impl true def handle_event("delete", %{"id" => id}, socket) do user = Accounts.get_user!(id) if user.id == socket.assigns.current_scope.user.id do {:noreply, put_flash(socket, :error, "You cannot delete your own account here.")} else {:ok, _} = Accounts.delete_user(user) {:noreply, stream_delete(socket, :users, user)} end end end