D4-6: tag editor UI tests + delete confirmation overlay
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user