defmodule MusicLibraryWeb.ArtistLive.Show do use MusicLibraryWeb, :live_view import MusicLibraryWeb.RecordComponents, only: [record_grid: 1, country_label: 1, artist_image: 1] alias MusicLibrary.{Artists, Chats, Records} alias MusicLibrary.Artists.ArtistInfo alias MusicLibraryWeb.ArtistLive.Biography alias MusicLibraryWeb.ErrorMessages attr :country, :map, required: true defp country_flag(assigns) do ~H""" {country_label(@country.code)} {@country.name} """ end attr :lastfm_artist_info, :map, required: true defp on_tour_link(assigns) do ~H""" <.badge variant="soft" class="mr-2">{gettext("On Tour")} """ end attr :play_count, :integer, required: true defp play_count(assigns) do ~H""" 0} class="grow text-xs font-medium text-zinc-700 dark:text-zinc-300"> {ngettext("1 scrobble", "%{count} scrobbles", @play_count)} {gettext("No scrobbles")} """ end attr :title, :string, required: true attr :artists, :list, required: true defp artist_grid(assigns) do ~H"""
{artist.name}
{@artist.musicbrainz_id}
<.button
href={MusicBrainz.Artist.url(@artist.musicbrainz_id)}
target="_blank"
rel="noopener noreferrer"
variant="ghost"
size="xs"
>
<.icon name="hero-arrow-top-right-on-square" class="icon" aria-hidden="true" />
{gettext("MusicBrainz")}
<.button
variant="ghost"
size="xs"
phx-click={
JS.dispatch("music_library:clipcopy", to: "#mb-#{@artist.musicbrainz_id}")
|> JS.transition("animate-shake")
}
>
<.icon name="hero-clipboard-document" class="icon" aria-hidden="true" />
{gettext("Copy MB ID")}
{@biography.description}
{@biography.summary_html}
<.link class="mt-2 block text-sm font-medium text-zinc-900 dark:text-zinc-400" phx-click={Fluxon.open_dialog("bio")} > <.icon name="hero-arrow-right-end-on-rectangle" class="-mt-1 mr-1 size-5" aria-hidden="true" data-slot="icon" /> {gettext("Read more")}