spazio-solazzo/lib/spazio_solazzo_web/live/user/profile_live.ex
2026-01-10 19:03:02 +01:00

74 lines
2.2 KiB
Elixir

defmodule SpazioSolazzoWeb.ProfileLive do
use SpazioSolazzoWeb, :live_view
alias AshPhoenix.Form
alias SpazioSolazzo.Accounts
def mount(_params, _session, socket) do
current_user = socket.assigns.current_user
profile_form =
Accounts.form_to_update_profile(current_user, actor: current_user)
|> to_form()
{:ok,
socket
|> assign(:profile_form, profile_form)
|> assign(:delete_history, false)
|> assign(:show_delete_modal, false)}
end
def handle_event("validate_profile", %{"form" => params}, socket) do
form = AshPhoenix.Form.validate(socket.assigns.profile_form, params)
{:noreply, assign(socket, :profile_form, form)}
end
def handle_event("save_profile", %{"form" => form_params}, socket) do
case Form.submit(socket.assigns.profile_form, params: form_params) do
{:ok, updated_user} ->
{:noreply,
socket
|> assign(:current_user, updated_user)
|> assign(:profile_form, to_form(form_params))
|> put_flash(:info, "Profile updated successfully")}
{:error, form} ->
{:noreply,
socket
|> assign(:profile_form, form)
|> put_flash(:error, "Something went wrong")}
end
end
def handle_event("toggle_delete_history", _params, socket) do
{:noreply, assign(socket, :delete_history, not socket.assigns.delete_history)}
end
def handle_event("show_delete_modal", _params, socket) do
{:noreply, assign(socket, :show_delete_modal, true)}
end
def handle_event("hide_delete_modal", _params, socket) do
{:noreply, assign(socket, :show_delete_modal, false)}
end
def handle_event(
"confirm_delete_account",
_params,
%{assigns: %{current_user: current_user, delete_history: delete_history}} = socket
) do
case Accounts.terminate_account(current_user, delete_history, actor: current_user) do
:ok ->
{:noreply,
socket
|> put_flash(:info, "Your account has been deleted")
|> redirect(to: "/sign-out")}
{:error, _error} ->
{:noreply,
socket
|> assign(:show_delete_modal, false)
|> put_flash(:error, "Failed to delete account. Please try again.")}
end
end
end