diff --git a/lib/music_library_web/live/scrobble_live/show.ex b/lib/music_library_web/live/scrobble_live/show.ex index 1fb5a3e0..9ed34556 100644 --- a/lib/music_library_web/live/scrobble_live/show.ex +++ b/lib/music_library_web/live/scrobble_live/show.ex @@ -4,6 +4,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do import(MusicLibraryWeb.Components.Release, only: [medium: 1, scrobble_button_label: 1]) import MusicLibraryWeb.RecordComponents, only: [country_label: 1] + alias MusicBrainz.Release alias MusicLibrary.ScrobbleActivity alias MusicLibraryWeb.ErrorMessages @@ -162,7 +163,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do end end - def handle_event("scrobble_medium", %{"medium_number" => number}, socket) do + def handle_event("scrobble_medium", %{"number" => number}, socket) do {number, ""} = Integer.parse(number) case ScrobbleActivity.scrobble_medium(number, socket.assigns.release, @@ -213,6 +214,27 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do end end + def handle_event("toggle_medium", %{"medium-number" => number}, socket) do + {number, ""} = Integer.parse(number) + selected_tracks = socket.assigns.selected_tracks + release = socket.assigns.release + + medium_tracks = + release + |> Release.medium_tracks(number) + |> Enum.map(& &1.id) + |> MapSet.new() + + updated_tracks = + if MapSet.subset?(medium_tracks, selected_tracks) do + MapSet.difference(selected_tracks, medium_tracks) + else + MapSet.union(selected_tracks, medium_tracks) + end + + {:noreply, assign(socket, :selected_tracks, updated_tracks)} + end + def handle_event("toggle_track", %{"track-id" => track_id}, socket) do selected_tracks = socket.assigns.selected_tracks diff --git a/test/music_library_web/live/scrobble_live/show_test.exs b/test/music_library_web/live/scrobble_live/show_test.exs index 21b6a963..f64d5754 100644 --- a/test/music_library_web/live/scrobble_live/show_test.exs +++ b/test/music_library_web/live/scrobble_live/show_test.exs @@ -90,7 +90,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.ShowTest do session |> unwrap(fn view -> - render_click(view, "scrobble_medium", %{"medium_number" => "1"}) + render_click(view, "scrobble_medium", %{"number" => "1"}) end) |> assert_has("#toast-group", "Disc scrobbled successfully") end