Refactor the duplicated Collection and Wishlist record show LiveViews so common record detail rendering and event handling live in shared web-layer helpers/components while preserving page-specific collection and wishlist behavior.
Acceptance Criteria
#1 Collection and Wishlist show pages reuse shared rendering for the common action bar, selected release row, release sheet, chat component, and edit modal.
#2 Collection and Wishlist show pages reuse shared handlers for common record actions, scrobble async handling, saved-record handling, chat-count refresh, and background record updates.
#3 Collection-specific behavior remains intact: notes, regenerate embeddings, purchased/listening details, similar records, print-enabled release sheet, and editable purchased_at field.
#4 Wishlist-specific behavior remains intact: purchase action, online store links, unreleased metadata, print-disabled release sheet, and hidden purchased_at field.
#5 Relevant focused tests or compile checks pass after the refactor.
#6 Architecture documentation reflects any new shared helper module added by the refactor.
Implementation Plan
Add MusicLibraryWeb.LiveHelpers.RecordShow for shared Collection/Wishlist show-page logic: common record assigns, delete navigation, scrobble release start/async result handling, saved-record assignment, chat-count refresh, background-update guard/toast, and shared page-title construction.
Extend MusicLibraryWeb.RecordComponents with focused shared components for the common show-page action bar, selected-release row, release sheet, chat component, and edit modal. Use slots for page-specific dropdown actions so collection and wishlist behavior stays explicit.
Refactor CollectionLive.Show and WishlistLive.Show to call the shared helper/components while keeping local page-specific sections and handlers: collection notes/regenerate/similar/listening details and wishlist purchase/online-store/current-date behavior.
Update docs/architecture.md to mention the new shared LiveHelpers.RecordShow module in the web utility modules table.
Run focused formatting/compile/tests for the touched LiveViews/components, then mark acceptance criteria based on the results.
Implementation Notes
Implemented shared LiveHelpers.RecordShow for common record loading, delete navigation, scrobble async handling, saved-record handling, chat refresh, and background update behavior. Added shared record show components for the action bar, selected release row, release sheet, chat component, and edit modal. Preserved collection-only notes/regenerate/listening/similar-record behavior and wishlist-only purchase/online-store/unreleased behavior. Verification: mix compile --warnings-as-errors, mix test test/music_library_web/live/collection_live/show_test.exs test/music_library_web/live/wishlist_live/show_test.exs, mix gettext.extract --check-up-to-date, mix format --check-formatted ..., and mix credo --strict all passed.
Final Summary
Refactored the Collection and Wishlist record show LiveViews to remove duplicated show-page rendering and lifecycle logic.
Changes:
Added MusicLibraryWeb.LiveHelpers.RecordShow for shared record loading, page title assignment, delete navigation, common action dispatch, scrobble async handling, saved-record handling, chat refreshes, and guarded background record updates.
Added shared RecordComponents functions for the common show action bar, selected release row, release sheet, record chat component, and edit modal.
Updated CollectionLive.Show and WishlistLive.Show to compose the shared helpers/components while keeping collection-only and wishlist-only sections explicit.
Updated gettext references after moving user-facing strings and documented LiveHelpers.RecordShow in docs/architecture.md.
Verification:
mix compile --warnings-as-errors
mix test test/music_library_web/live/collection_live/show_test.exs test/music_library_web/live/wishlist_live/show_test.exs
mix gettext.extract --check-up-to-date
mix format --check-formatted lib/music_library_web/live_helpers/record_show.ex lib/music_library_web/components/record_components.ex lib/music_library_web/live/collection_live/show.ex lib/music_library_web/live/wishlist_live/show.ex