Show record sets in records detail pages

This commit is contained in:
Claudio Ortolina
2026-02-13 12:00:12 +00:00
parent dc072a0b81
commit 8862e1d374
7 changed files with 82 additions and 3 deletions
+11
View File
@@ -167,6 +167,17 @@ defmodule MusicLibrary.RecordSets do
{:ok, get_record_set!(record_set.id)}
end
def list_record_sets_for_record(record_id) do
from(rs in RecordSet,
join: i in RecordSetItem,
on: i.record_set_id == rs.id,
where: i.record_id == ^record_id,
order_by: [asc: rs.name],
preload: [items: :record]
)
|> Repo.all()
end
defp record_sets_search_query(""), do: from(rs in RecordSet)
defp record_sets_search_query(query) do
@@ -15,8 +15,9 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
similar_records: 1
]
alias MusicLibrary.{Records, ScrobbleActivity}
alias MusicLibrary.{Records, RecordSets, ScrobbleActivity}
alias MusicLibrary.Records.Similarity
alias MusicLibrary.RecordSets.RecordSet
alias Phoenix.LiveView.JS
@impl true
@@ -45,12 +46,15 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
socket
end
record_sets = RecordSets.list_record_sets_for_record(record.id)
{:noreply,
socket
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)
|> assign(:last_listened_track, last_listened_track)
|> assign(:play_count, play_count)
|> assign(:record_sets, record_sets)
|> assign_embedding_text()
|> assign_similar_records()}
end
@@ -263,6 +263,24 @@
</li>
</ul>
</.dl_row>
<.dl_row :if={@record_sets != []} label={gettext("Record sets")}>
<ul>
<li :for={record_set <- @record_sets} class="flex items-baseline gap-2">
<.link
navigate={~p"/record-sets/#{record_set}"}
class="text-zinc-700 hover:text-zinc-500 dark:text-zinc-400 dark:hover:text-zinc-300 hover:underline"
>
{record_set.name}
</.link>
<span class="text-xs text-zinc-500 dark:text-zinc-400">
{gettext(
"%{collected}/%{total} collected",
RecordSet.count_by_status(record_set)
)}
</span>
</li>
</ul>
</.dl_row>
<.dl_row label={gettext("Inserted at")}>
{Records.Record.format_as_date(@record.inserted_at)}
</.dl_row>
@@ -13,7 +13,8 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
]
alias MusicLibrary.OnlineStoreTemplates
alias MusicLibrary.Records
alias MusicLibrary.{Records, RecordSets}
alias MusicLibrary.RecordSets.RecordSet
@impl true
def mount(%{"id" => record_id}, _session, socket) do
@@ -34,11 +35,14 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
record = Records.get_record!(id)
online_store_templates = OnlineStoreTemplates.list_enabled_templates()
record_sets = RecordSets.list_record_sets_for_record(record.id)
{:noreply,
socket
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|> assign(:record, record)
|> assign(:online_store_templates, online_store_templates)}
|> assign(:online_store_templates, online_store_templates)
|> assign(:record_sets, record_sets)}
end
@impl true
@@ -224,6 +224,24 @@
</li>
</ul>
</.dl_row>
<.dl_row :if={@record_sets != []} label={gettext("Record sets")}>
<ul>
<li :for={record_set <- @record_sets} class="flex items-baseline gap-2">
<.link
navigate={~p"/record-sets/#{record_set}"}
class="text-zinc-700 hover:text-zinc-500 dark:text-zinc-400 dark:hover:text-zinc-300 hover:underline"
>
{record_set.name}
</.link>
<span class="text-xs text-zinc-500 dark:text-zinc-400">
{gettext(
"%{collected}/%{total} collected",
RecordSet.count_by_status(record_set)
)}
</span>
</li>
</ul>
</.dl_row>
<.dl_row label={gettext("Inserted at")}>
{Records.Record.format_as_date(@record.inserted_at)}
</.dl_row>