D4-6: tag editor UI tests + delete confirmation overlay

This commit is contained in:
2026-05-30 20:30:39 +02:00
parent f6e1b679f0
commit c30757b3b7
5 changed files with 369 additions and 22 deletions

View File

@@ -104,6 +104,23 @@ defmodule BDS.Desktop.ShellLive.Bridges do
{:noreply, callbacks.refresh_content.(socket, socket.assigns.workbench)}
end
def handle_info({:confirm_tag_delete, tag_id, _tag_name, post_count}, socket, _callbacks) do
page_language = socket.assigns.page_language
suffix = if post_count == 1, do: "", else: "s"
message = "This tag is used in #{post_count} post#{suffix}. Delete anyway?"
overlay = %{
kind: :confirm_dialog,
title: BDS.Gettext.lgettext(page_language, "ui", "Delete Tag"),
message: message,
tag_id: tag_id,
confirm_action: :delete_tag
}
{:noreply, assign(socket, :shell_overlay, overlay)}
end
def handle_info(:settings_changed, socket, callbacks) do
{:noreply, callbacks.reload.(socket, socket.assigns.workbench)}
end

View File

@@ -6,7 +6,7 @@ defmodule BDS.Desktop.ShellLive.OverlayManager do
import Phoenix.Component, only: [assign: 3]
import Phoenix.LiveView, only: [send_update: 2]
alias BDS.{AI, Media, Metadata}
alias BDS.{AI, Media, Metadata, Tags}
alias BDS.Desktop.{Overlay}
alias BDS.Desktop.ShellLive.{
@@ -286,6 +286,25 @@ defmodule BDS.Desktop.ShellLive.OverlayManager do
{%{kind: :confirm_delete, title: title, entity_name: entity_name}, _tab} ->
close_overlay_with_output(socket, callbacks.append_output, title, entity_name)
{%{kind: :confirm_dialog, confirm_action: :delete_tag, tag_id: tag_id}, _tab} ->
case Tags.delete_tag(tag_id) do
{:ok, :deleted} ->
socket
|> assign(:shell_overlay, nil)
|> callbacks.reload.(socket.assigns.workbench)
{:error, reason} ->
socket
|> assign(:shell_overlay, nil)
|> callbacks.append_output.(
dgettext("ui", "Delete Tag"),
inspect(reason),
nil,
"error"
)
|> callbacks.reload.(socket.assigns.workbench)
end
{%{kind: :confirm_dialog, title: title, message: message}, _tab} ->
close_overlay_with_output(socket, callbacks.append_output, title, message)

View File

@@ -144,28 +144,17 @@ defmodule BDS.Desktop.ShellLive.TagsEditor do
def handle_event("delete_tag_editor", _params, socket) do
case socket.assigns.tags_editor.selected do
[tag_name] ->
case Repo.get_by(Tag,
project_id: socket.assigns.project_id,
name: tag_name
) do
project_id = socket.assigns.project_id
case Repo.get_by(Tag, project_id: project_id, name: tag_name) do
nil ->
{:noreply, socket}
%Tag{} = tag ->
case Tags.delete_tag(tag.id) do
{:ok, _deleted} ->
notify_parent(:tags_changed)
socket
|> put_in_tags_editor([:selected], [])
|> put_in_tags_editor([:edit_draft], %{})
|> load_data()
|> noreply()
{:error, reason} ->
notify_output(dgettext("ui", "Tags"), inspect(reason), "error")
{:noreply, socket}
end
%Tag{id: tag_id} ->
counts = tag_counts(project_id)
post_count = Map.get(counts, tag_name, 0)
Notify.parent({:confirm_tag_delete, tag_id, tag_name, post_count})
{:noreply, socket}
end
_other ->