diff --git a/lib/music_brainz/release_search_result.ex b/lib/music_brainz/release_search_result.ex index 759ed0a7..3224895d 100644 --- a/lib/music_brainz/release_search_result.ex +++ b/lib/music_brainz/release_search_result.ex @@ -8,8 +8,8 @@ defmodule MusicBrainz.ReleaseSearchResult do %__MODULE__{ id: r["id"], title: r["title"], - release_group: parse_release_group(r["release-group"]), - artists: Enum.map_join(r["artist-credit"], ", ", fn ac -> ac["artist"]["name"] end), + release_group: r["release-group"] && parse_release_group(r["release-group"]), + artists: Enum.map_join(r["artist-credit"] || [], ", ", fn ac -> ac["artist"]["name"] end), date: r["date"], barcode: r["barcode"], media: parse_media(r["media"]) @@ -36,7 +36,7 @@ defmodule MusicBrainz.ReleaseSearchResult do } end - defp parse_media(media) do + def parse_media(media) do Enum.map(media, fn m -> %{ format: m["format"], diff --git a/lib/music_library/records/record.ex b/lib/music_library/records/record.ex index 960bb36a..1e6b9696 100644 --- a/lib/music_library/records/record.ex +++ b/lib/music_library/records/record.ex @@ -80,9 +80,13 @@ defmodule MusicLibrary.Records.Record do end def selected_release(record) do + find_release(record, record.selected_release_id) + end + + def find_release(record, release_id) do record |> releases() - |> Enum.find(fn release -> release.id == record.selected_release_id end) + |> Enum.find(fn release -> release.id == release_id end) end def changeset(record, attrs) do diff --git a/lib/music_library_web/components/form_component.ex b/lib/music_library_web/components/form_component.ex index 22e578ae..420729de 100644 --- a/lib/music_library_web/components/form_component.ex +++ b/lib/music_library_web/components/form_component.ex @@ -2,7 +2,7 @@ defmodule MusicLibraryWeb.FormComponent do use MusicLibraryWeb, :live_component import MusicLibraryWeb.RecordComponents, - only: [format_label: 1, type_label: 1, release_label: 1] + only: [format_label: 1, type_label: 1, release_label: 1, release_summary: 1] alias MusicLibrary.Records alias MusicLibrary.Records.{Cover, Record} @@ -45,7 +45,11 @@ defmodule MusicLibraryWeb.FormComponent do field={@form[:selected_release_id]} label={gettext("Selected Release")} options={selected_release_id_options(@record)} - /> + > + <:option :let={{_label, value}}> + <.release_option release={Records.Record.find_release(@record, value)} /> + +
<.input field={@form[:release_date]} label={gettext("Release Date")} /> <.date_time_picker @@ -124,6 +128,20 @@ defmodule MusicLibraryWeb.FormComponent do """ end + attr :release, :map, required: true + + defp release_option(assigns) do + ~H""" +
+ <.release_summary release={@release} /> +
+ """ + end + @impl true def update(%{record: record} = assigns, socket) do {:ok, diff --git a/lib/music_library_web/components/record_components.ex b/lib/music_library_web/components/record_components.ex index 836b02e7..6460bd84 100644 --- a/lib/music_library_web/components/record_components.ex +++ b/lib/music_library_web/components/record_components.ex @@ -280,12 +280,45 @@ defmodule MusicLibraryWeb.RecordComponents do """ end + attr :release, :map, required: true + + def release_summary(assigns) do + ~H""" +
+
+ + {@release.catalog_number} + + <.format_badge release={@release} /> +
+
+ {@release.date} + {country_label(@release.country)} +
+
+ {@release.disambiguation} +
+
+ """ + end + + attr :release, :map, required: true + + defp format_badge(assigns) do + ~H""" + <.badge> + {@release |> ReleaseSearchResult.format() |> format_label()} + + """ + end + def format_label(:cd), do: gettext("CD") def format_label(:backup), do: gettext("Backup") def format_label(:vinyl), do: gettext("Vinyl") def format_label(:blu_ray), do: gettext("Blu-ray") def format_label(:dvd), do: gettext("DVD") def format_label(:multi), do: gettext("Multi") + def format_label(:digital_download), do: gettext("Digital Download") def type_label(:album), do: gettext("Album") def type_label(:ep), do: gettext("EP") diff --git a/lib/music_library_web/live/collection_live/show.ex b/lib/music_library_web/live/collection_live/show.ex index 160b24c6..5d5d3503 100644 --- a/lib/music_library_web/live/collection_live/show.ex +++ b/lib/music_library_web/live/collection_live/show.ex @@ -7,7 +7,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do close_actions_menu: 1, format_label: 1, type_label: 1, - selected_release_label: 1 + release_summary: 1 ] alias MusicLibrary.{Records, ScrobbleActivity} diff --git a/lib/music_library_web/live/collection_live/show.html.heex b/lib/music_library_web/live/collection_live/show.html.heex index 746ba5c3..b112d5f6 100644 --- a/lib/music_library_web/live/collection_live/show.html.heex +++ b/lib/music_library_web/live/collection_live/show.html.heex @@ -216,11 +216,22 @@
{gettext("Collected release")}
-
- {selected_release_label(@record)} +
+ + {gettext("No release selected")} + + + <.release_summary + :if={@record.selected_release_id} + release={Records.Record.selected_release(@record)} + />