refactor(front): change artist cover to correct type
This commit is contained in:
parent
a1a58eb767
commit
7c094c83a2
|
@ -1,16 +1,12 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useRouter } from 'vue-router'
|
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import { useStore } from '~/store'
|
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
|
||||||
import PlayButton from '~/components/audio/PlayButton.vue'
|
import PlayButton from '~/components/audio/PlayButton.vue'
|
||||||
import Card from '~/components/ui/Card.vue'
|
import Card from '~/components/ui/Card.vue'
|
||||||
import Spacer from '~/components/ui/Spacer.vue'
|
import Spacer from '~/components/ui/Spacer.vue'
|
||||||
|
|
||||||
import type { Artist, Cover, Track } from '~/types'
|
import type { Artist, Cover, Track, Album } from '~/types'
|
||||||
|
|
||||||
const play = defineEmit<[artist: Artist]>()
|
|
||||||
|
|
||||||
const albums = ref([] as Album[])
|
const albums = ref([] as Album[])
|
||||||
const tracks = ref([] as Track[])
|
const tracks = ref([] as Track[])
|
||||||
|
@ -25,30 +21,18 @@ const props = defineProps<Props>()
|
||||||
|
|
||||||
const { artist } = props
|
const { artist } = props
|
||||||
|
|
||||||
let navigate = () => {}
|
|
||||||
|
|
||||||
if (import.meta.env.PROD) {
|
|
||||||
const router = useRouter()
|
|
||||||
navigate = () =>
|
|
||||||
router.push({ name: 'library.artists.detail', params: { id: artist.id } })
|
|
||||||
}
|
|
||||||
|
|
||||||
const store = useStore()
|
|
||||||
|
|
||||||
|
|
||||||
const cover = computed(() => {
|
const cover = computed(() => {
|
||||||
const artistCover: Cover | undefined = artist.cover
|
const artistCover = artist.attachment_cover ?? undefined
|
||||||
|
|
||||||
const albumCover: Cover | undefined = artist.albums
|
const albumCover = albums.value?.find(
|
||||||
.find(album => album.cover?.urls.medium_square_crop)?.cover
|
(album: Album) => album.cover?.urls.medium_square_crop
|
||||||
|
)?.cover
|
||||||
|
|
||||||
const trackCover: Cover | undefined =
|
const trackCover = tracks.value?.find(
|
||||||
tracks.value?.find(
|
(track: Track) => track.cover
|
||||||
track => track.cover
|
)?.cover
|
||||||
)
|
|
||||||
?.cover
|
|
||||||
|
|
||||||
const fallback : Cover = {
|
const fallback: Cover = {
|
||||||
uuid: '',
|
uuid: '',
|
||||||
urls: {
|
urls: {
|
||||||
original: `${import.meta.env.BASE_URL}embed-default-cover.jpeg`,
|
original: `${import.meta.env.BASE_URL}embed-default-cover.jpeg`,
|
||||||
|
@ -57,10 +41,7 @@ const cover = computed(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return artistCover
|
return artistCover || albumCover || trackCover || fallback
|
||||||
|| albumCover
|
|
||||||
|| trackCover
|
|
||||||
|| fallback
|
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -76,7 +57,7 @@ const cover = computed(() => {
|
||||||
<template #topright>
|
<template #topright>
|
||||||
<PlayButton
|
<PlayButton
|
||||||
icon-only
|
icon-only
|
||||||
:is-playable="artist.is_playable"
|
:is-playable="Boolean(albums.find(album => album.is_playable))"
|
||||||
:artist="artist"
|
:artist="artist"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
@ -99,7 +80,7 @@ const cover = computed(() => {
|
||||||
<Spacer style="flex-grow: 1" />
|
<Spacer style="flex-grow: 1" />
|
||||||
<PlayButton
|
<PlayButton
|
||||||
:dropdown-only="true"
|
:dropdown-only="true"
|
||||||
:is-playable="artist.is_playable"
|
:is-playable="Boolean(albums.find(album => album.is_playable))"
|
||||||
:artist="artist"
|
:artist="artist"
|
||||||
discrete
|
discrete
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -32,8 +32,8 @@ const getRoute = (ac: ArtistCredit) => {
|
||||||
:to="getRoute(ac)"
|
:to="getRoute(ac)"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
v-if="ac.index === 0 && ac.artist.cover && ac.artist.cover.urls.original"
|
v-if="ac.index === 0 && ac.artist.attachment_cover && ac.artist.attachment_cover.urls.original"
|
||||||
v-lazy="store.getters['instance/absoluteUrl'](ac.artist.cover.urls.medium_square_crop)"
|
v-lazy="store.getters['instance/absoluteUrl'](ac.artist.attachment_cover.urls.medium_square_crop)"
|
||||||
alt=""
|
alt=""
|
||||||
:class="[{circular: ac.artist.content_category != 'podcast'}]"
|
:class="[{circular: ac.artist.content_category != 'podcast'}]"
|
||||||
>
|
>
|
||||||
|
|
|
@ -24,8 +24,8 @@ const route = computed(() => props.artist.channel
|
||||||
:to="route"
|
:to="route"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
v-if="artist.cover && artist.cover.urls.original"
|
v-if="artist.attachment_cover && artist.attachment_cover.urls.original"
|
||||||
v-lazy="store.getters['instance/absoluteUrl'](artist.cover.urls.medium_square_crop)"
|
v-lazy="store.getters['instance/absoluteUrl'](artist.attachment_cover.urls.medium_square_crop)"
|
||||||
alt=""
|
alt=""
|
||||||
:class="[{circular: artist.content_category != 'podcast'}]"
|
:class="[{circular: artist.content_category != 'podcast'}]"
|
||||||
>
|
>
|
||||||
|
|
|
@ -17,9 +17,9 @@ const { t } = useI18n()
|
||||||
|
|
||||||
const props = defineProps<Props>()
|
const props = defineProps<Props>()
|
||||||
|
|
||||||
const cover = computed(() => !props.artist.cover?.urls.original
|
const cover = computed(() => !props.artist.attachment_cover?.urls.original
|
||||||
? props.artist.albums.find(album => !!album.cover?.urls.original)?.cover
|
? props.artist.albums.find(album => !!album.cover?.urls.original)?.cover
|
||||||
: props.artist.cover
|
: props.artist.attachment_cover
|
||||||
)
|
)
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
|
|
|
@ -114,7 +114,7 @@ const labels = computed(() => ({
|
||||||
class="ui centered image"
|
class="ui centered image"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
v-else-if="!!track.artist_credit.length && track.artist_credit[0].artist.cover"
|
v-else-if="!!track.artist_credit.length && track.artist_credit[0].artist.attachment_cover"
|
||||||
v-lazy="getArtistCoverUrl(track.artist_credit)"
|
v-lazy="getArtistCoverUrl(track.artist_credit)"
|
||||||
alt=""
|
alt=""
|
||||||
class="ui centered image"
|
class="ui centered image"
|
||||||
|
|
|
@ -139,8 +139,8 @@ const hover = ref(false)
|
||||||
class="ui artist-track mini image"
|
class="ui artist-track mini image"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
v-else-if="showArt && track.artist_credit?.length && track.artist_credit[0].artist.cover?.urls.original"
|
v-else-if="showArt && track.artist_credit?.length && track.artist_credit[0].artist.attachment_cover?.urls.original"
|
||||||
v-lazy="store.getters['instance/absoluteUrl'](track.artist_credit[0].artist.cover.urls.medium_square_crop) "
|
v-lazy="store.getters['instance/absoluteUrl'](track.artist_credit[0].artist.attachment_cover.urls.medium_square_crop) "
|
||||||
alt=""
|
alt=""
|
||||||
class="ui artist-track mini image"
|
class="ui artist-track mini image"
|
||||||
>
|
>
|
||||||
|
|
|
@ -165,10 +165,10 @@ const remove = async () => {
|
||||||
class="channel-image"
|
class="channel-image"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
v-else-if="object.artist_credit && object.artist_credit[0] && object.artist_credit[0].artist.cover"
|
v-else-if="object.artist_credit && object.artist_credit[0] && object.artist_credit[0].artist.attachment_cover"
|
||||||
alt=""
|
alt=""
|
||||||
class="channel-image"
|
class="channel-image"
|
||||||
:src="object.artist_credit[0].artist.cover.urls.large_square_crop"
|
v-lazy="object.artist_credit[0].artist.attachment_cover.urls.large_square_crop"
|
||||||
/>
|
/>
|
||||||
<img
|
<img
|
||||||
v-else
|
v-else
|
||||||
|
@ -177,9 +177,10 @@ const remove = async () => {
|
||||||
src="../../assets/audio/default-cover.png"
|
src="../../assets/audio/default-cover.png"
|
||||||
>
|
>
|
||||||
<!-- ({target}) => target -->
|
<!-- ({target}) => target -->
|
||||||
<!-- Header (TODO: Put into Header component) -->
|
<!-- Header (TODO: Put into Header component) Hint: Header is heavier fontweight than h1! -->
|
||||||
<Layout stack style="flex: 1; gap: 8px;">
|
<Layout stack style="flex: 1; gap: 8px;">
|
||||||
<h1>{{ object.title }}</h1>
|
<h1>{{ object.title }}</h1>
|
||||||
|
<Header :h1="object.title" />
|
||||||
<artist-credit-label
|
<artist-credit-label
|
||||||
v-if="artistCredit"
|
v-if="artistCredit"
|
||||||
:artist-credit="artistCredit"
|
:artist-credit="artistCredit"
|
||||||
|
@ -232,6 +233,17 @@ const remove = async () => {
|
||||||
>
|
>
|
||||||
{{ labels.shuffle }}
|
{{ labels.shuffle }}
|
||||||
</Button>
|
</Button>
|
||||||
|
<DangerousButton
|
||||||
|
v-if="artistCredit[0] &&
|
||||||
|
store.state.auth.authenticated &&
|
||||||
|
artistCredit[0].artist.channel &&
|
||||||
|
artistCredit[0].artist.attributed_to?.full_username === store.state.auth.fullUsername"
|
||||||
|
:is-loading="isLoading"
|
||||||
|
@confirm="remove()"
|
||||||
|
icon="bi-trash"
|
||||||
|
>
|
||||||
|
{{ t('components.library.AlbumDropdown.button.delete') }}
|
||||||
|
</DangerousButton>
|
||||||
<Spacer h grow />
|
<Spacer h grow />
|
||||||
<TrackFavoriteIcon v-if="store.state.auth.authenticated" :album="object" />
|
<TrackFavoriteIcon v-if="store.state.auth.authenticated" :album="object" />
|
||||||
<TrackPlaylistIcon v-if="store.state.auth.authenticated" :album="object" />
|
<TrackPlaylistIcon v-if="store.state.auth.authenticated" :album="object" />
|
||||||
|
|
|
@ -59,16 +59,14 @@ const publicLibraries = computed(() => libraries.value?.filter(library => librar
|
||||||
|
|
||||||
|
|
||||||
const cover = computed(() => {
|
const cover = computed(() => {
|
||||||
const artistCover: Cover | undefined = object.value?.cover
|
const artistCover: Cover | undefined = object.value?.attachment_cover
|
||||||
|
|
||||||
const albumCover: Cover | undefined = object.value?.albums
|
const albumCover: Cover | undefined = object.value?.albums
|
||||||
.find(album => album.cover?.urls.large_square_crop)?.cover
|
.find(album => album.cover?.urls.large_square_crop)?.cover
|
||||||
|
|
||||||
const trackCover: Cover | undefined =
|
const trackCover = tracks.value?.find(
|
||||||
tracks.value?.find(
|
(track: Track) => track.cover
|
||||||
track => track.cover
|
)?.cover
|
||||||
)
|
|
||||||
?.cover
|
|
||||||
|
|
||||||
const fallback : Cover = {
|
const fallback : Cover = {
|
||||||
uuid: '',
|
uuid: '',
|
||||||
|
|
|
@ -125,7 +125,7 @@ export const useQueue = createGlobalState(() => {
|
||||||
coverUrl: (
|
coverUrl: (
|
||||||
(track.cover?.urls)
|
(track.cover?.urls)
|
||||||
|| (track.album?.cover?.urls)
|
|| (track.album?.cover?.urls)
|
||||||
|| ((track.artist_credit && track.artist_credit[0] && track.artist_credit[0].artist && track.artist_credit[0].artist.cover?.urls))
|
|| ((track.artist_credit && track.artist_credit[0] && track.artist_credit[0].artist && track.artist_credit[0].artist.attachment_cover?.urls))
|
||||||
|| {}
|
|| {}
|
||||||
)?.original ?? new URL('../../assets/audio/default-cover.png', import.meta.url).href,
|
)?.original ?? new URL('../../assets/audio/default-cover.png', import.meta.url).href,
|
||||||
sources: track.uploads.map(upload => ({
|
sources: track.uploads.map(upload => ({
|
||||||
|
|
Loading…
Reference in New Issue