sloanelybutsurely.com/lib/web/live/user_registration_live.ex
2025-03-25 13:06:28 -04:00

64 lines
1.8 KiB
Elixir

defmodule Web.UserRegistrationLive do
@moduledoc false
use Web, :live_view
alias Core.Accounts
def mount(_params, _session, socket) do
changeset = Accounts.change_user_registration(%Schema.User{})
socket =
socket
|> assign(trigger_submit: false)
|> assign_form(changeset)
{:ok, socket, temporary_assigns: [form: nil], layout: false}
end
def handle_event("save", %{"user" => user_params}, socket) do
socket =
case Accounts.register_user(user_params) do
{:ok, user} ->
changeset = Accounts.change_user_registration(user)
socket |> assign(trigger_submit: true) |> assign_form(changeset)
{:error, %Ecto.Changeset{} = changeset} ->
assign_form(socket, changeset)
end
{:noreply, socket}
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
def render(assigns) do
~H"""
<div class="mx-auto max-w-sm">
<header class="text-center">finish installation</header>
<.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"
>
<.input field={@form[:username]} type="text" label="username" />
<.input field={@form[:password]} type="password" label="password" />
<.button type="submit">create administrator</.button>
</.form>
</div>
"""
end
defp assign_form(socket, %Ecto.Changeset{} = changeset) do
form = to_form(changeset, as: "user")
assign(socket, form: form)
end
end