defmodule MicrowavepropWeb.UserManagementLive.Edit do @moduledoc "Admin edit page for a single user (roles, suspension)." use MicrowavepropWeb, :live_view alias Microwaveprop.Accounts @impl true def render(assigns) do ~H""" <.header> Edit user <:subtitle>{@user.callsign} · {@user.email} <.form for={@form} id="user-form" phx-change="validate" phx-submit="save"> <.input field={@form[:callsign]} type="text" label="Callsign" required /> <.input field={@form[:name]} type="text" label="Name" required /> <.input field={@form[:email]} type="email" label="Email" required /> """ end @impl true def mount(%{"id" => id}, _session, socket) do user = Accounts.get_user!(id) {:ok, socket |> assign(:page_title, "Edit user") |> assign(:user, user) |> assign(:form, to_form(Accounts.change_admin_user(user)))} end @impl true def handle_event("validate", %{"user" => params}, socket) do changeset = Accounts.change_admin_user(socket.assigns.user, params) {:noreply, assign(socket, form: to_form(changeset, action: :validate))} end def handle_event("save", %{"user" => params}, socket) do case Accounts.admin_update_user(socket.assigns.user, params) do {:ok, _user} -> {:noreply, socket |> put_flash(:info, "User updated") |> push_navigate(to: ~p"/users")} {:error, changeset} -> {:noreply, assign(socket, form: to_form(changeset))} end end end