funkwhale/front/src/components/library/Home.vue

118 wiersze
3.2 KiB
Vue
Czysty Zwykły widok Historia

<script setup lang="ts">
2022-09-08 14:32:45 +00:00
import { useI18n } from 'vue-i18n'
import { ref, computed } from 'vue'
import axios from 'axios'
import ChannelsWidget from '~/components/audio/ChannelsWidget.vue'
import PlaylistWidget from '~/components/playlists/Widget.vue'
import TrackWidget from '~/components/audio/track/Widget.vue'
import AlbumWidget from '~/components/audio/album/Widget.vue'
import useErrorHandler from '~/composables/useErrorHandler'
import useLogger from '~/composables/useLogger'
interface Props {
scope?: string
}
withDefaults(defineProps<Props>(), {
scope: 'all'
})
const artists = ref([])
const logger = useLogger()
2022-09-08 14:32:45 +00:00
const { t } = useI18n()
const labels = computed(() => ({
2022-09-17 02:14:35 +00:00
title: t('components.library.Home.title')
}))
const isLoading = ref(false)
const fetchData = async () => {
isLoading.value = true
2023-09-01 12:09:58 +00:00
const measureLoading = logger.time('Loading latest artists')
const params = {
ordering: '-creation_date',
playable: true
}
try {
2022-07-21 01:21:36 +00:00
const response = await axios.get('artists/', { params })
artists.value = response.data.results
} catch (error) {
useErrorHandler(error as Error)
}
isLoading.value = false
2023-09-01 12:09:58 +00:00
measureLoading()
}
fetchData()
</script>
<template>
2021-12-06 10:35:20 +00:00
<main
:key="$route?.name ?? undefined"
2021-12-06 10:35:20 +00:00
v-title="labels.title"
>
<section class="ui vertical stripe segment">
2018-02-20 23:05:33 +00:00
<div class="ui stackable three column grid">
<div class="column">
2021-12-06 10:35:20 +00:00
<track-widget
:url="'history/listenings/'"
:filters="{ scope, ordering: '-creation_date' }"
:websocket-handlers="['Listen']"
2021-12-06 10:35:20 +00:00
>
2022-05-01 13:24:23 +00:00
<template #title>
2022-09-22 23:26:59 +00:00
{{ $t('components.library.Home.header.recentlyListened') }}
2021-12-06 10:35:20 +00:00
</template>
2018-07-17 11:09:13 +00:00
</track-widget>
</div>
<div class="column">
2021-12-06 10:35:20 +00:00
<track-widget
:url="'favorites/tracks/'"
:filters="{scope: scope, ordering: '-creation_date'}"
>
2022-05-01 13:24:23 +00:00
<template #title>
2022-09-22 23:26:59 +00:00
{{ $t('components.library.Home.header.recentlyFavorited') }}
2021-12-06 10:35:20 +00:00
</template>
2018-07-17 11:09:13 +00:00
</track-widget>
</div>
2018-02-20 23:05:33 +00:00
<div class="column">
2021-12-06 10:35:20 +00:00
<playlist-widget
:url="'playlists/'"
:filters="{scope: scope, playable: true, ordering: '-modification_date'}"
>
2022-05-01 13:24:23 +00:00
<template #title>
2022-09-22 23:26:59 +00:00
{{ $t('components.library.Home.header.playlists') }}
2021-12-06 10:35:20 +00:00
</template>
2018-07-17 11:09:13 +00:00
</playlist-widget>
</div>
</div>
2021-12-06 10:35:20 +00:00
<div class="ui section hidden divider" />
2019-03-06 16:40:26 +00:00
<div class="ui stackable one column grid">
<div class="column">
<album-widget :filters="{scope: scope, playable: true, ordering: '-creation_date'}">
2022-05-01 13:24:23 +00:00
<template #title>
2022-09-22 23:26:59 +00:00
{{ $t('components.library.Home.header.recentlyAdded') }}
2021-12-06 10:35:20 +00:00
</template>
2018-07-17 11:09:13 +00:00
</album-widget>
2018-02-20 23:05:33 +00:00
</div>
</div>
<template v-if="scope === 'all'">
2021-12-06 10:35:20 +00:00
<h3 class="ui header">
2022-09-22 23:26:59 +00:00
{{ $t('components.library.Home.header.newChannels') }}
</h3>
2021-12-06 10:35:20 +00:00
<channels-widget
:show-modification-date="true"
:limit="12"
:filters="{ordering: '-creation_date', external: 'false'}"
/>
</template>
</section>
</main>
</template>