defmodule AprsmeWeb.UserRegistrationLive do @moduledoc false use AprsmeWeb, :live_view import AprsmeWeb.CoreComponents, only: [translate_error: 1, simple_form: 1] alias Aprsme.Accounts alias Aprsme.Accounts.User def render(assigns) do ~H"""

{gettext("Register for an account")}

{gettext("Already registered?")} <.link navigate={~p"/users/log_in"} class="font-semibold text-indigo-600 hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300" > {gettext("Sign in")} {gettext("to your account now.")}

<.simple_form :let={f} id="registration_form" for={@changeset} phx-submit="save" phx-change="validate" phx-trigger-action={@trigger_submit} action={~p"/users/log_in?_action=registered"} method="post" as={:user} >

{gettext("Oops, something went wrong! Please check the errors below.")}

{translate_error(Keyword.get(@changeset.errors, :email))}

{translate_error(Keyword.get(@changeset.errors, :callsign))}

{translate_error(Keyword.get(@changeset.errors, :password))}

""" end def mount(_params, _session, socket) do changeset = Accounts.change_user_registration(%User{}) socket = assign(socket, changeset: changeset, trigger_submit: false) {:ok, socket, temporary_assigns: [changeset: nil]} end def handle_event("save", %{"user" => user_params}, socket) do case Accounts.register_user(user_params) do {:ok, user} -> case Accounts.deliver_user_confirmation_instructions( user, &url(~p"/users/confirm/#{&1}") ) do {:ok, _} -> changeset = Accounts.change_user_registration(user) {:noreply, assign(socket, trigger_submit: true, changeset: changeset)} {:error, _reason} -> {:noreply, put_flash(socket, :error, "Failed to send email. Please try again later.")} end {:error, %Ecto.Changeset{} = changeset} -> {:noreply, assign(socket, :changeset, changeset)} end end def handle_event("validate", %{"user" => user_params}, socket) do changeset = Accounts.change_user_registration(%User{}, user_params) {:noreply, assign(socket, changeset: Map.put(changeset, :action, :validate))} end end