Fix toggling/scrobbling event handlers in scrobble anything show view

This commit is contained in:
Claudio Ortolina
2026-03-10 20:04:39 +00:00
parent a6727d5a16
commit fa535393e0
2 changed files with 24 additions and 2 deletions
@@ -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
@@ -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