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)}
+ />