ML-189: simplify release-component notifications

- Use a tagged type
- Leave skipping responsibility to subscribed process
This commit is contained in:
Claudio Ortolina
2026-05-19 12:18:07 +01:00
parent 73046bb0f5
commit f1fde63d42
4 changed files with 32 additions and 9 deletions
@@ -1,10 +1,10 @@
--- ---
id: ML-189 id: ML-189
title: Make Release component's dynamic tag type-safe title: Make Release component's dynamic tag type-safe
status: To Do status: Done
assignee: [] assignee: []
created_date: "2026-05-19 08:42" created_date: "2026-05-19 08:42"
updated_date: "2026-05-19 09:10" updated_date: "2026-05-19 11:13"
labels: labels:
- audit - audit
- liveview - liveview
@@ -96,3 +96,26 @@ end
3. Run `mix test test/music_library_web/components/release_test.exs` — all existing Release component tests pass. 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. 4. Confirm `on_release_loaded` no longer appears in either LiveView template or the Release component.
<!-- SECTION:NOTES:END --> <!-- SECTION:NOTES:END -->
## Final Summary
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
### 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).
<!-- SECTION:FINAL_SUMMARY:END -->
+2 -5
View File
@@ -76,11 +76,8 @@ defmodule MusicLibraryWeb.Components.Release do
)} )}
end end
defp notify_release_loaded(socket, release) do defp notify_release_loaded(_socket, release) do
case socket.assigns[:on_release_loaded] do send(self(), {__MODULE__, {:loaded, release}})
nil -> :ok
tag -> send(self(), {tag, release})
end
end end
defp apply_pending_form_params(socket) do defp apply_pending_form_params(socket) do
@@ -470,6 +470,10 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
RecordActions.handle_chats_changed(socket) RecordActions.handle_chats_changed(socket)
end end
def handle_info({MusicLibraryWeb.Components.Release, {:loaded, _release}}, socket) do
{:noreply, socket}
end
@impl true @impl true
def handle_info({:update, record}, socket) do def handle_info({:update, record}, socket) do
cond do cond do
@@ -38,7 +38,6 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do
release_id={@release_id} release_id={@release_id}
show_print?={false} show_print?={false}
timezone={@timezone} timezone={@timezone}
on_release_loaded={:release_loaded}
/> />
</Layouts.app> </Layouts.app>
""" """
@@ -65,7 +64,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do
end end
@impl true @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))} {:noreply, assign(socket, :page_title, page_title(release))}
end end