import { computed } from 'vue' import type { Album } from '../types' import { useSubsonicApi } from '../subsonicApi' import { useCacheStore } from '../store/cache' import { usePlayerStore } from '../store/player' import { useFavouriteStore } from '../store/favourite' import { sleep } from '../utils' export const AlbumList = ({ items, tileSize = 200, allowHScroll = false, twoRows = false, titleOnly = false, }: { items: Album[], tileSize?: number, allowHScroll?: boolean, twoRows?: boolean, titleOnly?: boolean, }) => { const subsonicApi = useSubsonicApi(), favouriteStore = useFavouriteStore(), playerStore = usePlayerStore(), cacheStore = useCacheStore(), isFavourite = (id: string) => favouriteStore.get('album', id), dragstart = (id: string, event: DragEvent) => (event.dataTransfer?.setData('application/x-album-id', id)), playNow = async(id: string) => { playerStore.setShuffle(false) return playerStore.playTrackList((await subsonicApi.getAlbumDetails(id)).tracks!) }, toggleFavourite = async(id: string) => { favouriteStore.toggle('album', id) await sleep(300) const album = await subsonicApi.getAlbumDetails(id) if (!album) return if (isFavourite(id)) { await cacheStore.cacheAlbum(album) } else { await cacheStore.clearAlbumCache(album) } } return vine` ` }