diff --git a/lib/music_library_web/components/release_component.ex b/lib/music_library_web/components/release_component.ex index bc5608f7..28e1f384 100644 --- a/lib/music_library_web/components/release_component.ex +++ b/lib/music_library_web/components/release_component.ex @@ -10,7 +10,8 @@ defmodule MusicLibraryWeb.ReleaseComponent do def mount(socket) do {:ok, socket - |> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?())} + |> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?()) + |> assign(:already_scrobbled, false)} end @impl true @@ -25,6 +26,10 @@ defmodule MusicLibraryWeb.ReleaseComponent do end)} end + def update(%{already_scrobbled: _already_scrobbled} = assigns, socket) do + {:ok, assign(socket, assigns)} + end + @impl true def render(assigns) do ~H""" @@ -40,6 +45,7 @@ defmodule MusicLibraryWeb.ReleaseComponent do <.button :if={@can_scrobble?} size="sm" + disabled={@already_scrobbled} phx-click="scrobble_release" phx-target={@myself} phx-disable-with={gettext("Scrobbling...")} @@ -79,6 +85,7 @@ defmodule MusicLibraryWeb.ReleaseComponent do <.button :if={@can_scrobble?} size="sm" + disabled={@already_scrobbled} phx-click="scrobble_medium" phx-value-number={medium.number} phx-target={@myself} @@ -135,8 +142,11 @@ defmodule MusicLibraryWeb.ReleaseComponent do release_with_tracks_async_result && release_with_tracks_async_result.result do case ScrobbleActivity.scrobble_release(release_with_tracks, finished_at: DateTime.utc_now()) do {:ok, _} -> + send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000) + {:noreply, socket + |> assign(:already_scrobbled, true) |> put_flash(:info, gettext("Release scrobbled successfully"))} {:error, reason} -> @@ -162,8 +172,11 @@ defmodule MusicLibraryWeb.ReleaseComponent do finished_at: DateTime.utc_now() ) do {:ok, _} -> + send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000) + {:noreply, socket + |> assign(:already_scrobbled, true) |> put_flash(:info, gettext("Disc scrobbled successfully"))} {:error, reason} ->