diff --git a/backlog/tasks/ml-189 - Make-Release-components-dynamic-tag-type-safe.md b/backlog/tasks/ml-189 - Make-Release-components-dynamic-tag-type-safe.md index 57c23516..d939bc26 100644 --- a/backlog/tasks/ml-189 - Make-Release-components-dynamic-tag-type-safe.md +++ b/backlog/tasks/ml-189 - Make-Release-components-dynamic-tag-type-safe.md @@ -1,10 +1,10 @@ --- id: ML-189 title: Make Release component's dynamic tag type-safe -status: To Do +status: Done assignee: [] created_date: "2026-05-19 08:42" -updated_date: "2026-05-19 09:10" +updated_date: "2026-05-19 11:13" labels: - audit - liveview @@ -96,3 +96,26 @@ end 3. Run `mix test test/music_library_web/components/release_test.exs` — all existing Release component tests pass. 4. Confirm `on_release_loaded` no longer appears in either LiveView template or the Release component. + +## Final Summary + + + +### Changes + +**1. Release component** (`lib/music_library_web/components/release.ex`): + +- `notify_release_loaded/2` now always sends `{__MODULE__, {:loaded, release}}` — removed the nil-check and `on_release_loaded` attribute-based conditional. + +**2. ScrobbleLive.ReleaseShow** (`lib/music_library_web/live/scrobble_live/release_show.ex`): + +- Updated `handle_info` to match `{MusicLibraryWeb.Components.Release, {:loaded, release}}`. +- Removed `on_release_loaded={:release_loaded}` assign from the template. + +**3. CollectionLive.Show** (`lib/music_library_web/live/collection_live/show.ex`): + +- Added no-op `handle_info({MusicLibraryWeb.Components.Release, {:loaded, _release}}, socket)` to consume the message (previously silently dropped). + +All 21 tests pass (12 release component + 3 release_show + 6 collection_show). + + diff --git a/lib/music_library_web/components/release.ex b/lib/music_library_web/components/release.ex index b598319a..b52724ac 100644 --- a/lib/music_library_web/components/release.ex +++ b/lib/music_library_web/components/release.ex @@ -76,11 +76,8 @@ defmodule MusicLibraryWeb.Components.Release do )} end - defp notify_release_loaded(socket, release) do - case socket.assigns[:on_release_loaded] do - nil -> :ok - tag -> send(self(), {tag, release}) - end + defp notify_release_loaded(_socket, release) do + send(self(), {__MODULE__, {:loaded, release}}) end defp apply_pending_form_params(socket) do diff --git a/lib/music_library_web/live/collection_live/show.ex b/lib/music_library_web/live/collection_live/show.ex index d87b8072..773cae09 100644 --- a/lib/music_library_web/live/collection_live/show.ex +++ b/lib/music_library_web/live/collection_live/show.ex @@ -470,6 +470,10 @@ defmodule MusicLibraryWeb.CollectionLive.Show do RecordActions.handle_chats_changed(socket) end + def handle_info({MusicLibraryWeb.Components.Release, {:loaded, _release}}, socket) do + {:noreply, socket} + end + @impl true def handle_info({:update, record}, socket) do cond do diff --git a/lib/music_library_web/live/scrobble_live/release_show.ex b/lib/music_library_web/live/scrobble_live/release_show.ex index 5996ab19..24909cf1 100644 --- a/lib/music_library_web/live/scrobble_live/release_show.ex +++ b/lib/music_library_web/live/scrobble_live/release_show.ex @@ -38,7 +38,6 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do release_id={@release_id} show_print?={false} timezone={@timezone} - on_release_loaded={:release_loaded} /> """ @@ -65,7 +64,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do end @impl true - def handle_info({:release_loaded, release}, socket) do + def handle_info({MusicLibraryWeb.Components.Release, {:loaded, release}}, socket) do {:noreply, assign(socket, :page_title, page_title(release))} end