import { MutableRefObject, useEffect } from "react" import { MainViewSong, SongProps } from "./MainView" import { invoke } from "@tauri-apps/api/core" import { Song } from "../bindings/Song" import { appWindow, contextMenuPosition } from "./App" import { Menu } from "@tauri-apps/api/menu" export interface PlaylistInfo { uuid: string, name: string, } export interface PlaylistHeadProps { playlists: JSX.Element[] setPlaylists: React.Dispatch>, setViewName: React.Dispatch>, setLibrary: React.Dispatch>, playlistsInfo: MutableRefObject, setSelected: (props: SongProps) => void, } export function PlaylistHead({ playlists, setPlaylists, setViewName, setLibrary, playlistsInfo, setSelected }: PlaylistHeadProps) { function getPlaylist(playlist: PlaylistInfo) { invoke('get_playlist', { uuid: playlist.uuid }).then((list) => { setLibrary([...(list as Song[]).map((song, i) => { // console.log(song); const reload = () => getPlaylist(playlist) return ( ) })]) }) setViewName( playlist.name ) } useEffect(() => { const unlisten = appWindow.listen("playlists_gotten", (_res) => { const res = _res.payload; // console.log(event); playlistsInfo.current = [...res]; // console.log(playlistsInfo, res); setPlaylists([ ...res.map( (list) => { const _getPlaylist = () => getPlaylist(list) const deletePlaylist = () => { invoke('delete_playlist', { uuid: list.uuid }).then(() => {}); invoke('get_playlists').then(() => {}); } async function menuHandler(event: React.MouseEvent) { event.preventDefault(); const menu = await Menu.new({ items: [ { id: "delete_playlist" + list.uuid, text: "Delete Playlist", action: deletePlaylist } ] }); menu.popup(await contextMenuPosition(event)); } return ( ) }) ]) }) return () => { unlisten.then((f) => f()) } }, []); let handle_import = () => { invoke('import_playlist').then((_res) => { let res = _res as PlaylistInfo; setPlaylists([ ...playlists, ]) // console.log(res.name); }) } return (
{ playlists }
) }