defmodule TarakanWeb.AccountLive.Confirmation do use TarakanWeb, :live_view alias Tarakan.Accounts @impl true def render(assigns) do ~H"""
<.header>Welcome {@account.email}
<.form for={@form} id="login_form" phx-mounted={JS.focus_first()} phx-submit="submit" action={~p"/accounts/log-in"} phx-trigger-action={@trigger_submit} class="space-y-3" > <.input field={@form[:remember_me]} type="checkbox" label="Stay logged in on this device" checked />
""" end @impl true def mount(%{"token" => token} = params, _session, socket) do return_to = case params do %{"return_to" => path} when is_binary(path) -> TarakanWeb.SafeRedirect.local_path(path, nil) _ -> nil end if account = Accounts.get_account_by_magic_link_token(token) do form = to_form(%{"token" => token}, as: "account") {:ok, assign(socket, account: account, form: form, trigger_submit: false, return_to: return_to ), temporary_assigns: [form: nil]} else next = if return_to, do: ~p"/accounts/log-in?#{[return_to: return_to]}", else: ~p"/accounts/log-in" {:ok, socket |> put_flash(:error, "Magic link is invalid or it has expired.") |> push_navigate(to: next)} end end @impl true def handle_event("submit", %{"account" => params}, socket) do params = if socket.assigns.return_to, do: Map.put(params, "return_to", socket.assigns.return_to), else: params {:noreply, assign(socket, form: to_form(params, as: "account"), trigger_submit: true)} end end