import { ref, watch } from 'vue' import { orderBy } from 'lodash-es' import type { Playlist } from '../types' import { useMainStore } from '../store/main' import { usePlaylistStore } from '../store/playlist' import { EditPlaylistModal } from '../components/EditPlaylistModal.vine' import { PlaylistList } from '../components/PlaylistList.vine' import { type ConfirmDialogExpose, ConfirmDialog } from '../components/ConfirmDialog.vine' export const PlaylistsView = () => { const mainStore = useMainStore(), playlistStore = usePlaylistStore(), showAddModal = ref(false), editingPlaylist = ref(null), confirmDialog = ref(null), playlists = ref([]), closeModal = () => { editingPlaylist.value = null showAddModal.value = false }, startCreate = () => { editingPlaylist.value = null showAddModal.value = true }, openEditPlaylist = (playlist: Playlist) => { editingPlaylist.value = playlist showAddModal.value = true }, createPlaylist = async (name: string) => { await playlistStore.create(name) closeModal() }, updatePlaylist = async (playlist: Playlist) => { await playlistStore.update(playlist) closeModal() }, deletePlaylist = async (id: string) => { if (!confirmDialog.value) return const userConfirmed = await confirmDialog.value.open( 'Remove Playlist', 'Do you really want to remove the playlist?' ) if (!userConfirmed) return await playlistStore.delete(id) } watch( playlistStore, async () => { mainStore.isLoading = true playlists.value = playlistStore.playlists mainStore.isLoading = false }, { deep: true, immediate: true } ) return vine`
Playlists
` }