migrate remaining admin pages to inline feedback

Replace put_flash with inline feedback for form saves:
- Media library: metadata save shows "Saved" checkmark
- Product show: storefront controls save shows "Saved" checkmark
- Newsletter campaign form: draft save shows "Saved" checkmark

Page-level outcomes (uploads, deletes, async operations) remain as
flash/banner messages — these are the correct pattern for non-form
actions.

Completes Task 4 of notification overhaul.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-03-08 07:34:17 +00:00
parent 0834437340
commit db28cb8d9f
4 changed files with 23 additions and 14 deletions

View File

@@ -17,6 +17,7 @@ defmodule BerrypodWeb.Admin.Media do
|> assign(:edit_form, nil)
|> assign(:upload_alt, "")
|> assign(:confirm_delete, false)
|> assign(:metadata_status, :idle)
|> allow_upload(:media_upload,
accept: ~w(.png .jpg .jpeg .webp .svg .gif),
max_entries: 1,
@@ -114,7 +115,8 @@ defmodule BerrypodWeb.Admin.Media do
|> assign(:selected_image, Map.put(image, :data, nil))
|> assign(:selected_usages, usages)
|> assign(:edit_form, form)
|> assign(:confirm_delete, false)}
|> assign(:confirm_delete, false)
|> assign(:metadata_status, :idle)}
else
{:noreply, socket}
end
@@ -141,10 +143,10 @@ defmodule BerrypodWeb.Admin.Media do
socket
|> stream_insert(:images, updated_no_blob)
|> assign(:selected_image, updated_no_blob)
|> put_flash(:info, "Metadata updated")}
|> assign(:metadata_status, :saved)}
{:error, _changeset} ->
{:noreply, put_flash(socket, :error, "Failed to update metadata")}
{:noreply, assign(socket, :metadata_status, :error)}
end
end
@@ -398,9 +400,12 @@ defmodule BerrypodWeb.Admin.Media do
<.input field={@edit_form[:alt]} label="Alt text" placeholder="Describe this image..." />
<.input field={@edit_form[:caption]} label="Caption" placeholder="Optional caption..." />
<.input field={@edit_form[:tags]} label="Tags" placeholder="hero, homepage, banner..." />
<button type="submit" class="admin-btn admin-btn-primary admin-btn-sm">
Save metadata
</button>
<div class="admin-form-actions-sm">
<button type="submit" class="admin-btn admin-btn-primary admin-btn-sm">
Save metadata
</button>
<.inline_feedback status={@metadata_status} />
</div>
</.form>
<%= if @selected_usages != [] do %>