mirror of
https://codeberg.org/JasterV/spazio-solazzo.git
synced 2026-04-26 18:20:03 +00:00
74 lines
2.2 KiB
Elixir
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
|