defmodule Web.UserRegistrationLive do @moduledoc false use Web, :live_view alias Core.Accounts def render(assigns) do # ~H""" # <div class="mx-auto max-w-sm"> # <.header class="text-center"> # Register for an account # <:subtitle> # Already registered? # <.link navigate={~p/admin/users/log_in"} class="font-semibold text-brand hover:underline"> # Log in # </.link> # to your account now. # </:subtitle> # </.header> # <.simple_form # for={@form} # id="registration_form" # phx-submit="save" # phx-change="validate" # phx-trigger-action={@trigger_submit} # action={~p/admin/users/log_in?_action=registered"} # method="post" # > # <.error :if={@check_errors}> # Oops, something went wrong! Please check the errors below. # </.error> # <.input field={@form[:email]} type="email" label="Email" required /> # <.input field={@form[:password]} type="password" label="Password" required /> # <:actions> # <.button phx-disable-with="Creating account..." class="w-full">Create an account</.button> # </:actions> # </.simple_form> # </div> # """ ~H""" <pre>UserRegistrationLive</pre> """ end def mount(_params, _session, socket) do changeset = Accounts.change_user_registration(%Schema.User{}) socket = socket |> assign(trigger_submit: false, check_errors: false) |> assign_form(changeset) {:ok, socket, temporary_assigns: [form: nil]} end def handle_event("save", %{"user" => user_params}, socket) do case Accounts.register_user(user_params) do {:ok, user} -> changeset = Accounts.change_user_registration(user) {:noreply, socket |> assign(trigger_submit: true) |> assign_form(changeset)} {:error, %Ecto.Changeset{} = changeset} -> {:noreply, socket |> assign(check_errors: true) |> assign_form(changeset)} end end def handle_event("validate", %{"user" => user_params}, socket) do changeset = Accounts.change_user_registration(%Schema.User{}, user_params) {:noreply, assign_form(socket, Map.put(changeset, :action, :validate))} end defp assign_form(socket, %Ecto.Changeset{} = changeset) do form = to_form(changeset, as: "user") if changeset.valid? do assign(socket, form: form, check_errors: false) else assign(socket, form: form) end end end