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

130 lines
3.5 KiB
Vue
Raw Normal View History

<template>
2021-12-06 11:35:20 +01:00
<main
:key="$route.name"
2021-12-06 11:35:20 +01:00
v-title="labels.title"
>
<section class="ui vertical stripe segment">
2018-02-21 00:05:33 +01:00
<div class="ui stackable three column grid">
<div class="column">
2021-12-06 11:35:20 +01:00
<track-widget
:url="'history/listenings/'"
:filters="{scope: scope, ordering: '-creation_date'}"
>
2022-05-01 15:24:23 +02:00
<template #title>
2021-12-06 11:35:20 +01:00
<translate translate-context="Content/Home/Title">
Recently listened
</translate>
</template>
2018-07-17 11:09:13 +00:00
</track-widget>
</div>
<div class="column">
2021-12-06 11:35:20 +01:00
<track-widget
:url="'favorites/tracks/'"
:filters="{scope: scope, ordering: '-creation_date'}"
>
2022-05-01 15:24:23 +02:00
<template #title>
2021-12-06 11:35:20 +01:00
<translate translate-context="Content/Home/Title">
Recently favorited
</translate>
</template>
2018-07-17 11:09:13 +00:00
</track-widget>
</div>
2018-02-21 00:05:33 +01:00
<div class="column">
2021-12-06 11:35:20 +01:00
<playlist-widget
:url="'playlists/'"
:filters="{scope: scope, playable: true, ordering: '-modification_date'}"
>
2022-05-01 15:24:23 +02:00
<template #title>
2021-12-06 11:35:20 +01:00
<translate translate-context="*/*/*">
Playlists
</translate>
</template>
2018-07-17 11:09:13 +00:00
</playlist-widget>
</div>
</div>
2021-12-06 11:35:20 +01:00
<div class="ui section hidden divider" />
2019-03-06 17:40:26 +01:00
<div class="ui stackable one column grid">
<div class="column">
<album-widget :filters="{scope: scope, playable: true, ordering: '-creation_date'}">
2022-05-01 15:24:23 +02:00
<template #title>
2021-12-06 11:35:20 +01:00
<translate translate-context="Content/Home/Title">
Recently added
</translate>
</template>
2018-07-17 11:09:13 +00:00
</album-widget>
2018-02-21 00:05:33 +01:00
</div>
</div>
<template v-if="scope === 'all'">
2021-12-06 11:35:20 +01:00
<h3 class="ui header">
<translate translate-context="*/*/*">
New channels
</translate>
</h3>
2021-12-06 11:35:20 +01:00
<channels-widget
:show-modification-date="true"
:limit="12"
:filters="{ordering: '-creation_date', external: 'false'}"
/>
</template>
</section>
</main>
</template>
<script>
2021-12-06 11:35:20 +01:00
import axios from 'axios'
2022-04-23 09:37:43 +02:00
import ChannelsWidget from '~/components/audio/ChannelsWidget.vue'
import TrackWidget from '~/components/audio/track/Widget.vue'
import AlbumWidget from '~/components/audio/album/Widget.vue'
import PlaylistWidget from '~/components/playlists/Widget.vue'
import useLogger from '~/composables/useLogger'
const logger = useLogger()
2021-12-06 11:35:20 +01:00
const ARTISTS_URL = 'artists/'
export default {
2021-12-06 11:35:20 +01:00
name: 'Library',
components: {
2018-07-17 11:09:13 +00:00
TrackWidget,
AlbumWidget,
PlaylistWidget,
2021-12-06 11:35:20 +01:00
ChannelsWidget
},
2021-12-06 11:35:20 +01:00
props: {
scope: { type: String, default: 'all' }
},
data () {
return {
artists: [],
2021-12-06 11:35:20 +01:00
isLoadingArtists: false
}
},
2018-07-01 21:50:50 +02:00
computed: {
2021-12-06 11:35:20 +01:00
labels () {
2018-07-01 21:50:50 +02:00
return {
2021-12-06 11:35:20 +01:00
title: this.$pgettext('Head/Home/Title', 'Library')
2018-07-01 21:50:50 +02:00
}
}
},
2021-12-06 11:35:20 +01:00
created () {
this.fetchArtists()
},
methods: {
2021-12-06 11:35:20 +01:00
fetchArtists () {
const self = this
this.isLoadingArtists = true
2021-12-06 11:35:20 +01:00
const params = {
ordering: '-creation_date',
playable: true
}
2021-12-06 11:35:20 +01:00
const url = ARTISTS_URL
logger.time('Loading latest artists')
axios.get(url, { params: params }).then(response => {
self.artists = response.data.results
logger.timeEnd('Loading latest artists')
self.isLoadingArtists = false
})
}
}
}
</script>