Show record sets in records detail pages
This commit is contained in:
@@ -167,6 +167,17 @@ defmodule MusicLibrary.RecordSets do
|
|||||||
{:ok, get_record_set!(record_set.id)}
|
{:ok, get_record_set!(record_set.id)}
|
||||||
end
|
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(""), do: from(rs in RecordSet)
|
||||||
|
|
||||||
defp record_sets_search_query(query) do
|
defp record_sets_search_query(query) do
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
similar_records: 1
|
similar_records: 1
|
||||||
]
|
]
|
||||||
|
|
||||||
alias MusicLibrary.{Records, ScrobbleActivity}
|
alias MusicLibrary.{Records, RecordSets, ScrobbleActivity}
|
||||||
alias MusicLibrary.Records.Similarity
|
alias MusicLibrary.Records.Similarity
|
||||||
|
alias MusicLibrary.RecordSets.RecordSet
|
||||||
alias Phoenix.LiveView.JS
|
alias Phoenix.LiveView.JS
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -45,12 +46,15 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
socket
|
socket
|
||||||
end
|
end
|
||||||
|
|
||||||
|
record_sets = RecordSets.list_record_sets_for_record(record.id)
|
||||||
|
|
||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|
||||||
|> assign(:record, record)
|
|> assign(:record, record)
|
||||||
|> assign(:last_listened_track, last_listened_track)
|
|> assign(:last_listened_track, last_listened_track)
|
||||||
|> assign(:play_count, play_count)
|
|> assign(:play_count, play_count)
|
||||||
|
|> assign(:record_sets, record_sets)
|
||||||
|> assign_embedding_text()
|
|> assign_embedding_text()
|
||||||
|> assign_similar_records()}
|
|> assign_similar_records()}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -263,6 +263,24 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</.dl_row>
|
</.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")}>
|
<.dl_row label={gettext("Inserted at")}>
|
||||||
{Records.Record.format_as_date(@record.inserted_at)}
|
{Records.Record.format_as_date(@record.inserted_at)}
|
||||||
</.dl_row>
|
</.dl_row>
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
]
|
]
|
||||||
|
|
||||||
alias MusicLibrary.OnlineStoreTemplates
|
alias MusicLibrary.OnlineStoreTemplates
|
||||||
alias MusicLibrary.Records
|
alias MusicLibrary.{Records, RecordSets}
|
||||||
|
alias MusicLibrary.RecordSets.RecordSet
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def mount(%{"id" => record_id}, _session, socket) do
|
def mount(%{"id" => record_id}, _session, socket) do
|
||||||
@@ -34,11 +35,14 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
record = Records.get_record!(id)
|
record = Records.get_record!(id)
|
||||||
online_store_templates = OnlineStoreTemplates.list_enabled_templates()
|
online_store_templates = OnlineStoreTemplates.list_enabled_templates()
|
||||||
|
|
||||||
|
record_sets = RecordSets.list_record_sets_for_record(record.id)
|
||||||
|
|
||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|
|> assign(:page_title, page_title(socket.assigns.live_action, record))
|
||||||
|> assign(:record, record)
|
|> assign(:record, record)
|
||||||
|> assign(:online_store_templates, online_store_templates)}
|
|> assign(:online_store_templates, online_store_templates)
|
||||||
|
|> assign(:record_sets, record_sets)}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|||||||
@@ -224,6 +224,24 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</.dl_row>
|
</.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")}>
|
<.dl_row label={gettext("Inserted at")}>
|
||||||
{Records.Record.format_as_date(@record.inserted_at)}
|
{Records.Record.format_as_date(@record.inserted_at)}
|
||||||
</.dl_row>
|
</.dl_row>
|
||||||
|
|||||||
@@ -1946,3 +1946,15 @@ msgstr ""
|
|||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Try a different search term or check the spelling"
|
msgid "Try a different search term or check the spelling"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/show.html.heex
|
||||||
|
#: lib/music_library_web/live/wishlist_live/show.html.heex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "%{collected}/%{total} collected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/show.html.heex
|
||||||
|
#: lib/music_library_web/live/wishlist_live/show.html.heex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Record sets"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
@@ -1946,3 +1946,15 @@ msgstr ""
|
|||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Try a different search term or check the spelling"
|
msgid "Try a different search term or check the spelling"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/show.html.heex
|
||||||
|
#: lib/music_library_web/live/wishlist_live/show.html.heex
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
|
msgid "%{collected}/%{total} collected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/show.html.heex
|
||||||
|
#: lib/music_library_web/live/wishlist_live/show.html.heex
|
||||||
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
|
msgid "Record sets"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user