From 7e08b0e567cf25d7abd067600afa4d15971c7cd6 Mon Sep 17 00:00:00 2001 From: Geert Rademakes Date: Thu, 24 Apr 2025 22:51:21 +0200 Subject: [PATCH] Delete playlist added --- packages/frontend/src/App.tsx | 10 ++++ .../src/components/PlaylistManager.tsx | 48 +++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index fe59bdb..de72e21 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -140,6 +140,15 @@ export default function RekordboxReader() { document.body.removeChild(a); }; + const handlePlaylistDelete = async (name: string) => { + const updatedPlaylists = playlists.filter(p => p.name !== name); + const savedPlaylists = await api.savePlaylists(updatedPlaylists); + setPlaylists(savedPlaylists); + if (currentPlaylist === name) { + navigate("/"); // Navigate back to All Songs if the current playlist is deleted + } + }; + const displayedSongs = currentPlaylist === "All Songs" ? songs : songs.filter((song) => @@ -180,6 +189,7 @@ export default function RekordboxReader() { selectedItem={currentPlaylist} onPlaylistCreate={handleCreatePlaylist} onPlaylistSelect={handlePlaylistSelect} + onPlaylistDelete={handlePlaylistDelete} /> diff --git a/packages/frontend/src/components/PlaylistManager.tsx b/packages/frontend/src/components/PlaylistManager.tsx index 0abe1d0..6e17206 100644 --- a/packages/frontend/src/components/PlaylistManager.tsx +++ b/packages/frontend/src/components/PlaylistManager.tsx @@ -13,7 +13,13 @@ import { Text, useDisclosure, VStack, + Menu, + MenuButton, + MenuList, + MenuItem, + IconButton, } from "@chakra-ui/react"; +import { ChevronDownIcon, DeleteIcon } from "@chakra-ui/icons"; import React, { useState } from "react"; import { Playlist } from "../types/Playlist"; @@ -21,7 +27,8 @@ interface PlaylistManagerProps { playlists: Playlist[]; selectedItem: string | null; onPlaylistCreate: (name: string) => void; - onPlaylistSelect: (id: string | null) => void; + onPlaylistSelect: (name: string | null) => void; + onPlaylistDelete: (name: string) => void; } const getButtonStyles = (isSelected: boolean) => ({ @@ -48,6 +55,7 @@ export const PlaylistManager: React.FC = ({ selectedItem, onPlaylistCreate, onPlaylistSelect, + onPlaylistDelete, }) => { const { isOpen, onOpen, onClose } = useDisclosure(); const [newPlaylistName, setNewPlaylistName] = useState(""); @@ -70,13 +78,37 @@ export const PlaylistManager: React.FC = ({ All Songs {playlists.map((playlist) => ( - + + + + } + variant="ghost" + size="sm" + color="gray.400" + _hover={{ color: "white", bg: "whiteAlpha.200" }} + /> + + } + onClick={() => onPlaylistDelete(playlist.name)} + > + Delete Playlist + + + + ))}