defmodule AshHqWeb.Pages.Register do @moduledoc "Log in page" use Surface.LiveComponent alias Surface.Components.{Form, LiveRedirect} alias Surface.Components.Form.{ Checkbox, ErrorTag, Field, Label, PasswordInput, Submit, TextInput } alias AshHqWeb.Router.Helpers, as: Routes data register_form, :map def render(assigns) do ~F"""

Register

{#if @register_form.submitted_once?}

Oops, something went wrong! Please check the errors below.

{/if}
{#if @register_form.submitted_once?} {/if}
{#if @register_form.submitted_once?} {/if}
{#if @register_form.submitted_once?} {/if}
Log In
Already Have an account?
""" end @impl true def update(assigns, socket) do {:ok, socket |> assign(assigns) |> assign_form()} end defp assign_form(socket) do assign(socket, register_form: AshPhoenix.Form.for_create( AshHq.Accounts.User, :register, as: "register", api: AshHq.Accounts ) ) end @impl true def handle_event("validate_register", %{"register" => params}, socket) do {:noreply, assign(socket, register_form: AshPhoenix.Form.validate(socket.assigns.register_form, params) )} end @impl true def handle_event("register", %{"register" => params}, socket) do case AshPhoenix.Form.submit(socket.assigns.register_form, params: params) do {:ok, user} -> token = AshHqWeb.UserAuth.create_token_for_user(user) {:noreply, redirect(socket, to: Routes.user_session_path(AshHqWeb.Endpoint, :log_in, %{ "log_in" => %{ "token" => Base.url_encode64(token, padding: false), "remember_me" => params["remember_me"] || "false" } }) )} {:error, form} -> {:noreply, assign(socket, log_in_form: form)} end end end