defmodule MusicLibraryWeb.StatsComponents do
use MusicLibraryWeb, :live_component
attr :record, MusicLibrary.Records.Record, required: true
attr :title, :string, required: true
attr :class, :string
def album_preview(assigns) do
~H"""
{@title}
{@record.title}
<.link
:for={artist <- @record.artists}
class="text-sm md:text-base text-zinc-600 dark:text-zinc-200 hover:text-zinc-500 dark:text-zinc-300 dark:hover:text-zinc-200"
navigate={~p"/artists/#{artist.musicbrainz_id}"}
>
{artist.name}
"""
end
attr :title, :string, required: true
attr :count, :integer, required: true
attr :path, :string, required: true
def counter(assigns) do
~H"""
{@title}
<.link
navigate={@path}
class="block text-2xl sm:text-3xl font-semibold text-center text-zinc-900 hover:text-zinc-500 dark:text-zinc-300 dark:hover:text-zinc-200"
>
{@count}
"""
end
attr :albums, :list, required: true
attr :collected_releases, :list, required: true
attr :wishlisted_releases, :list, required: true
def top_albums_by_period(assigns) do
~H"""
<.link
class="text-xs text-zinc-700 hover:text-zinc-500 dark:text-zinc-400 dark:hover:text-zinc-300 truncate"
navigate={~p"/artists/#{album.artist_musicbrainz_id}"}
>
{album.artist_name}
{album.album_title}
<.badge :if={album.album_musicbrainz_id == ""}>
{album.play_count}
<.badge :if={
album.album_musicbrainz_id !== "" and
!tracked_record?(
@collected_releases ++ @wishlisted_releases,
album.album_musicbrainz_id
)
}>
{album.play_count}
<.badge :if={tracked_record?(@collected_releases, album.album_musicbrainz_id)} color="green">
{album.play_count}
<.badge
:if={tracked_record?(@wishlisted_releases, album.album_musicbrainz_id)}
color="yellow"
>
{album.play_count}
"""
end
attr :artists, :list, required: true
def top_artists_by_period(assigns) do
~H"""
~p"/images/cover-not-found.png" <> "';"}
/>
<.icon name="hero-user" class="w-6 h-6 text-zinc-400" />
<.badge>
{artist.play_count}
"""
end
def refresh_lastfm_feed_button(assigns) do
~H"""
{gettext("Refresh LastFm Feed")}
<.icon name="hero-arrow-path" class="-mt-1 h-5 w-5" aria-hidden="true" data-slot="icon" />
"""
end
def tracked_record?(tracked_releases, release_id) do
Enum.find_value(tracked_releases, fn tracked_release ->
if tracked_release.release_id == release_id, do: tracked_release.record_id
end)
end
defp navigate_to_record(collected_releases, wishlisted_releases, musicbrainz_id) do
cond do
record_id = tracked_record?(collected_releases, musicbrainz_id) ->
JS.navigate(~p"/collection/#{record_id}")
record_id = tracked_record?(wishlisted_releases, musicbrainz_id) ->
JS.navigate(~p"/wishlist/#{record_id}")
true ->
nil
end
end
end