ML-189: simplify release-component notifications
- Use a tagged type - Leave skipping responsibility to subscribed process
This commit is contained in:
@@ -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 -->
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user