migrate admin forms to inline feedback
All checks were successful
deploy / deploy (push) Successful in 1m26s
All checks were successful
deploy / deploy (push) Successful in 1m26s
Replace put_flash calls with inline feedback for form saves: - Email settings: "Now send a test email" after saving - Settings: from address and signing secret saves - Page editor: save button shows "Saved" checkmark Inline feedback appears next to save buttons and auto-clears after 3 seconds. Banners (put_flash) remain for page-level outcomes like deletions, state changes, and async operations. Task 3 of notification overhaul. Theme editor skipped as it auto-saves. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,7 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
|> assign(:test_retryable, false)
|
||||
|> assign(:from_checklist, false)
|
||||
|> assign(:field_errors, flash_errors)
|
||||
|> assign(:save_status, :idle)
|
||||
|> assign(:form, to_form(%{}, as: :email))}
|
||||
end
|
||||
|
||||
@@ -93,6 +94,8 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
socket.assigns.current_scope.user.email
|
||||
) do
|
||||
{:ok, _adapter_info} ->
|
||||
Process.send_after(self(), :clear_save_status, 3000)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:adapter_key, adapter_key)
|
||||
@@ -102,7 +105,7 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
|> assign(:field_errors, %{})
|
||||
|> assign(:test_result, nil)
|
||||
|> assign(:test_error, nil)
|
||||
|> put_flash(:info, "Settings saved — send a test email to check it works")}
|
||||
|> assign(:save_status, :saved)}
|
||||
|
||||
{:error, field_errors} when is_map(field_errors) ->
|
||||
{:noreply, assign(socket, :field_errors, field_errors)}
|
||||
@@ -142,6 +145,10 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
# Swoosh test adapter sends {:email, ...} messages — ignore them
|
||||
def handle_info({:email, _}, socket), do: {:noreply, socket}
|
||||
|
||||
def handle_info(:clear_save_status, socket) do
|
||||
{:noreply, assign(socket, :save_status, :idle)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
@@ -235,6 +242,7 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
values={@all_values[adapter.key] || %{}}
|
||||
field_errors={if(@adapter_key == adapter.key, do: @field_errors, else: %{})}
|
||||
env_locked={@env_locked}
|
||||
save_status={if(@adapter_key == adapter.key, do: @save_status, else: :idle)}
|
||||
/>
|
||||
</.form>
|
||||
</section>
|
||||
@@ -336,6 +344,7 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
attr :values, :map, required: true
|
||||
attr :field_errors, :map, required: true
|
||||
attr :env_locked, :boolean, required: true
|
||||
attr :save_status, :atom, default: :idle
|
||||
|
||||
defp adapter_config(assigns) do
|
||||
~H"""
|
||||
@@ -377,6 +386,7 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
<.button phx-disable-with="Saving...">
|
||||
Save settings
|
||||
</.button>
|
||||
<.inline_feedback status={@save_status} message="Now send a test email" />
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user