From 9cde9d0aa4f13fe0170a6bb63778238c31674db2 Mon Sep 17 00:00:00 2001 From: geoffrey45 Date: Sat, 8 Oct 2022 14:01:52 +0300 Subject: [PATCH] rewrite album view using @Akryum/vue-virtual-scroller --- src/main.ts | 16 +++--- src/utils/index.ts | 2 + src/utils/useCreateTrackProps.ts | 12 +++++ src/views/AlbumView/index.vue | 91 +++++++++++++++++++++++++------- src/views/FolderView.vue | 2 +- 5 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 src/utils/useCreateTrackProps.ts diff --git a/src/main.ts b/src/main.ts index 19622abc..72589134 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,30 +2,32 @@ import { createApp } from "vue"; import { createPinia } from "pinia"; import { - RecycleScroller, - DynamicScroller, - DynamicScrollerItem, - // @ts-ignore + RecycleScroller, + DynamicScroller, + DynamicScrollerItem, + // @ts-ignore } from "vue-virtual-scroller"; import { autoAnimatePlugin } from "@formkit/auto-animate/vue"; import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; -import "./assets/scss/index.scss"; -import "vue-virtual-scroller/dist/vue-virtual-scroller.css"; import App from "./App.vue"; import router from "./router"; import vTooltip from "./directives/vTooltip"; +import "./assets/scss/index.scss"; +import "vue-virtual-scroller/dist/vue-virtual-scroller.css"; + const app = createApp(App); const pinia = createPinia(); pinia.use(piniaPluginPersistedstate); app.use(pinia); app.use(router); -app.directive("tooltip", vTooltip); app.use(autoAnimatePlugin); + +app.directive("tooltip", vTooltip); app.component("RecycleScroller", RecycleScroller); app.component("DynamicScroller", DynamicScroller); app.component("DynamicScrollerItem", DynamicScrollerItem); diff --git a/src/utils/index.ts b/src/utils/index.ts index e57c261b..e498a205 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -5,6 +5,7 @@ import useFuse from "./useFuse"; import { readLocalStorage, writeLocalStorage } from "./useLocalStorage"; import putCommas from "./usePutCommas"; import useVisibility from "./useVisibility"; +import useCreateTrackProps from "./useCreateTrackProps"; export { readLocalStorage, @@ -13,6 +14,7 @@ export { focusElemByClass, useVisibility, formatSeconds, + useCreateTrackProps as createTrackProps, putCommas, useFuse, }; diff --git a/src/utils/useCreateTrackProps.ts b/src/utils/useCreateTrackProps.ts new file mode 100644 index 00000000..7e3561fd --- /dev/null +++ b/src/utils/useCreateTrackProps.ts @@ -0,0 +1,12 @@ +import { Track } from "@/interfaces"; +import queue from "@/stores/queue"; + +export default function createTrackProps(track: Track) { + return { + track, + index: track.index + 1, + isCurrent: queue().currenttrack?.hash === track.hash, + isCurrentPlaying: + queue().currenttrack?.hash === track.hash && queue().playing, + }; +} diff --git a/src/views/AlbumView/index.vue b/src/views/AlbumView/index.vue index 5d02e789..cf2d9f85 100644 --- a/src/views/AlbumView/index.vue +++ b/src/views/AlbumView/index.vue @@ -1,43 +1,89 @@ + + diff --git a/src/views/FolderView.vue b/src/views/FolderView.vue index f224a402..91fa4791 100644 --- a/src/views/FolderView.vue +++ b/src/views/FolderView.vue @@ -48,8 +48,8 @@ interface ScrollerItem { class songItem { id: string; - component = SongItem; props: any; + component = SongItem; constructor(track: Track) { this.id = track.trackid;