diff --git a/front/src/components/library/ArtistBase.vue b/front/src/components/library/ArtistBase.vue index c02d4b853..09479a50d 100644 --- a/front/src/components/library/ArtistBase.vue +++ b/front/src/components/library/ArtistBase.vue @@ -4,6 +4,7 @@ import type { Track, Album, Artist, Library } from '~/types' import { computed, ref, watch } from 'vue' import { useI18n } from 'vue-i18n' import { useRouter, useRoute } from 'vue-router' +import { sum } from 'lodash-es' import { getDomain } from '~/utils' import { useStore } from '~/store' @@ -11,8 +12,9 @@ import axios from 'axios' import useReport from '~/composables/moderation/useReport' import useLogger from '~/composables/useLogger' +import HumanDuration from '~/components/common/HumanDuration.vue' import EmbedWizard from '~/components/audio/EmbedWizard.vue' -import SemanticModal from '~/components/semantic/Modal.vue' +import TrackFavoriteIcon from '~/components/favorites/TrackFavoriteIcon.vue' import Loader from '~/components/ui/Loader.vue' import Button from '~/components/ui/Button.vue' import OptionsButton from '~/components/ui/button/Options.vue' @@ -21,6 +23,9 @@ import RadioButton from '~/components/radios/Button.vue' import Popover from '~/components/ui/Popover.vue' import PopoverItem from '~/components/ui/popover/PopoverItem.vue' import TagsList from '~/components/tags/List.vue' +import Layout from '~/components/ui/Layout.vue' +import Modal from '~/components/ui/Modal.vue' +import Spacer from '~/components/ui/Spacer.vue' interface Props { @@ -56,9 +61,10 @@ const cover = computed(() => object.value?.cover?.urls.original ? object.value.cover : object.value?.albums.find(album => album.cover?.urls.original)?.cover ) -const headerStyle = computed(() => cover.value?.urls.original - ? { backgroundImage: `url(${store.getters['instance/absoluteUrl'](cover.value.urls.original)})` } - : '' +const imageUrl = computed(() => cover.value?.urls.original + ? store.getters['instance/absoluteUrl'] + (cover.value.urls.original) + : `${import.meta.env.BASE_URL}embed-default-cover.jpeg` ) const { t } = useI18n() @@ -95,75 +101,58 @@ const fetchData = async () => { isLoading.value = false } +const totalDuration = computed(() => sum((tracks.value ?? []).map(track => track.uploads[0]?.duration ?? 0))) + watch(() => props.id, fetchData, { immediate: true }) diff --git a/front/src/components/library/ArtistDetail.vue b/front/src/components/library/ArtistDetail.vue index 04deb1d09..eeb10fccb 100644 --- a/front/src/components/library/ArtistDetail.vue +++ b/front/src/components/library/ArtistDetail.vue @@ -11,8 +11,16 @@ import axios from 'axios' import LibraryWidget from '~/components/federation/LibraryWidget.vue' import TrackTable from '~/components/audio/track/Table.vue' +import TagsList from '~/components/tags/List.vue' import AlbumCard from '~/components/album/Card.vue' +import Layout from '~/components/ui/Layout.vue' +import Section from '~/components/ui/Section.vue' +import Heading from "~/components/ui/Heading.vue"; +import Loader from '~/components/ui/Loader.vue' +import Link from '~/components/ui/Link.vue' +import Spacer from '~/components/ui/Spacer.vue' import Button from '~/components/ui/Button.vue' +import Alert from '~/components/ui/Alert.vue' import useErrorHandler from '~/composables/useErrorHandler' @@ -62,87 +70,71 @@ const loadMoreAlbums = async () => { diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue index 5e1ce7d67..10b53b52c 100644 --- a/front/src/components/library/Artists.vue +++ b/front/src/components/library/Artists.vue @@ -1,5 +1,4 @@