ML-169.10: async delete actions with initial implementation
This commit is contained in:
@@ -10,6 +10,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
||||
alias MusicLibrary.Collection
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibraryWeb.Components.AddRecord
|
||||
alias MusicLibraryWeb.ErrorMessages
|
||||
alias MusicLibraryWeb.LiveHelpers.IndexActions
|
||||
|
||||
defp index_config do
|
||||
@@ -323,6 +324,28 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_async({:delete_record, _id}, {:ok, {:ok, _record}}, socket) do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_async({:delete_record, id}, {:ok, {:error, reason}}, socket) do
|
||||
record = Records.get_record!(id)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> stream_insert(:records, record)
|
||||
|> put_toast(:error, gettext("Failed to delete: ") <> ErrorMessages.friendly_message(reason))}
|
||||
end
|
||||
|
||||
def handle_async({:delete_record, id}, {:exit, _reason}, socket) do
|
||||
record = Records.get_record!(id)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> stream_insert(:records, record)
|
||||
|> put_toast(:error, gettext("Delete failed, please try again"))}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("delete", %{"id" => id}, socket) do
|
||||
IndexActions.handle_delete(socket, id)
|
||||
|
||||
@@ -8,6 +8,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.Index do
|
||||
alias LastFm.Track
|
||||
alias MusicLibrary.Assets.Transform
|
||||
alias MusicLibrary.ListeningStats
|
||||
alias MusicLibraryWeb.ErrorMessages
|
||||
|
||||
@default_tracks_list_params %{
|
||||
query: "",
|
||||
@@ -298,9 +299,13 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.Index do
|
||||
|
||||
def handle_event("delete", %{"scrobbled-at-uts" => scrobbled_at_uts}, socket) do
|
||||
track = ListeningStats.get_track!(scrobbled_at_uts)
|
||||
{:ok, _} = ListeningStats.delete_track(track)
|
||||
stream_element = %{track: track}
|
||||
socket = stream_delete(socket, :tracks, stream_element)
|
||||
|
||||
{:noreply, stream_delete(socket, :tracks, %{track: track})}
|
||||
{:noreply,
|
||||
start_async(socket, {:delete_track, scrobbled_at_uts}, fn ->
|
||||
{ListeningStats.delete_track(track), stream_element}
|
||||
end)}
|
||||
end
|
||||
|
||||
def handle_event("search", %{"query" => query}, socket) do
|
||||
@@ -317,6 +322,22 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.Index do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_async({:delete_track, _uts}, {:ok, {{:ok, _track}, _element}}, socket) do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_async({:delete_track, _uts}, {:ok, {{:error, reason}, element}}, socket) do
|
||||
{:noreply,
|
||||
socket
|
||||
|> stream_insert(:tracks, element)
|
||||
|> put_toast(:error, gettext("Failed to delete: ") <> ErrorMessages.friendly_message(reason))}
|
||||
end
|
||||
|
||||
def handle_async({:delete_track, _uts}, {:exit, _reason}, socket) do
|
||||
{:noreply, put_toast(socket, :error, gettext("Delete failed, please try again"))}
|
||||
end
|
||||
|
||||
defp parse_order("scrobbled_at"), do: :scrobbled_at
|
||||
defp parse_order("title"), do: :title
|
||||
defp parse_order("artist"), do: :artist
|
||||
|
||||
@@ -7,6 +7,7 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
||||
alias MusicLibrary.Records
|
||||
alias MusicLibrary.Wishlist
|
||||
alias MusicLibraryWeb.Components.AddRecord
|
||||
alias MusicLibraryWeb.ErrorMessages
|
||||
alias MusicLibraryWeb.LiveHelpers.IndexActions
|
||||
|
||||
defp index_config do
|
||||
@@ -230,6 +231,29 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_async({:delete_record, _id}, {:ok, {:ok, _record}}, socket) do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_async({:delete_record, id}, {:ok, {:error, reason}}, socket) do
|
||||
record = Records.get_record!(id)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> stream_insert(:records, record)
|
||||
|> put_toast(:error, gettext("Failed to delete: ") <> ErrorMessages.friendly_message(reason))}
|
||||
end
|
||||
|
||||
def handle_async({:delete_record, id}, {:exit, _reason}, socket) do
|
||||
record = Records.get_record!(id)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> stream_insert(:records, record)
|
||||
|> put_toast(:error, gettext("Delete failed, please try again"))}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("delete", %{"id" => id}, socket) do
|
||||
IndexActions.handle_delete(socket, id)
|
||||
|
||||
Reference in New Issue
Block a user