add some stuff to home page

This commit is contained in:
Thomas Amland 2020-07-27 14:29:27 +02:00
parent d46ba950e7
commit 7ec1cac749
3 changed files with 58 additions and 4 deletions

View File

@ -1,9 +1,59 @@
<template> <template>
<div></div> <div>
<Spinner v-if="loading"/>
<template v-else>
<div v-for="section in sections" :key="section.key" class="mb-4">
<h1>{{ section.name }}</h1>
<Tiles :items="$data[section.key]" v-slot="{ item }" square>
<div class="text-truncate">
<router-link :to="{name: 'album', params: { id: item.id } }">
<strong>{{ item.name }}</strong>
</router-link>
</div>
<div class="text-truncate text-muted">
<router-link :to="{name: 'artist', params: { id: item.artistId } }">
{{ item.artist }}
</router-link>
</div>
</Tiles>
</div>
</template>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
data() {
return {
sections: [
{ name: "Recently played", key: "recent" },
{ name: "Recently added", key: "newest" },
{ name: "Most played", key: "frequent" },
{ name: "Random", key: "random" },
],
loading: true as boolean,
recent: [],
newest: [],
frequent: [],
random: [],
}
},
created() {
const size = 10;
this.$api.getAlbums("recent", size).then(result => {
this.recent = result;
this.loading = false;
});
this.$api.getAlbums("newest", size).then(result => {
this.newest = result
});
this.$api.getAlbums("frequent", size).then(result => {
this.frequent = result
});
this.$api.getAlbums("random", 50).then(result => {
this.random = result
});
}
}); });
</script> </script>

View File

@ -19,6 +19,7 @@
<script lang="ts"> <script lang="ts">
import Vue from "vue"; import Vue from "vue";
import AlbumCard from "./AlbumCard.vue"; import AlbumCard from "./AlbumCard.vue";
import { AlbumSort } from '@/shared/api';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -48,7 +49,7 @@ export default Vue.extend({
watch: { watch: {
sort: { sort: {
immediate: true, immediate: true,
handler(value: string) { handler(value: AlbumSort) {
this.albums = null; this.albums = null;
this.$api.getAlbums(value).then(albums => { this.$api.getAlbums(value).then(albums => {
this.albums = albums; this.albums = albums;

View File

@ -1,6 +1,8 @@
import axios, { AxiosRequestConfig, AxiosInstance } from "axios" import axios, { AxiosRequestConfig, AxiosInstance } from "axios"
import { AuthService } from '@/auth/service'; import { AuthService } from '@/auth/service';
export type AlbumSort = "alphabeticalByName" | "newest" | "recent" | "frequent" | "random"
export class API { export class API {
readonly http: AxiosInstance; readonly http: AxiosInstance;
@ -80,11 +82,12 @@ export class API {
}))); })));
} }
async getAlbums(sort: string) {
async getAlbums(sort: AlbumSort, size: number = 500) {
const params = { const params = {
type: sort, type: sort,
offset: "0", offset: "0",
size: "500", size: size,
}; };
const data = await this.get("rest/getAlbumList2", params); const data = await this.get("rest/getAlbumList2", params);
return data.albumList2.album.map((item: any) => ({ return data.albumList2.album.map((item: any) => ({