"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import { X, Plus, Music2 } from "lucide-react"; import { GradientSpinner } from "./GradientSpinner"; interface PlaylistSelectorProps { isOpen: boolean; onClose: () => void; onSelectPlaylist: (playlistId: string) => Promise; isLoading?: boolean; loadingMessage?: string; } export function PlaylistSelector({ isOpen, onClose, onSelectPlaylist, isLoading: isSaving, loadingMessage, }: PlaylistSelectorProps) { const [playlists, setPlaylists] = useState([]); const [newPlaylistName, setNewPlaylistName] = useState(""); const [isPublic, setIsPublic] = useState(false); const [isCreating, setIsCreating] = useState(false); const [isLoading, setIsLoading] = useState(false); useEffect(() => { if (isOpen) { loadPlaylists(); } }, [isOpen]); const loadPlaylists = async () => { try { setIsLoading(true); const data = await api.getPlaylists(); setPlaylists(Array.isArray(data) ? data : []); } catch (error) { console.error("Failed to load playlists:", error); } finally { setIsLoading(false); } }; const handleCreatePlaylist = async () => { if (!newPlaylistName.trim()) return; try { setIsCreating(true); const playlist = await api.createPlaylist( newPlaylistName.trim(), isPublic ); await onSelectPlaylist(playlist.id); setNewPlaylistName(""); setIsPublic(false); window.dispatchEvent( new CustomEvent("playlist-created", { detail: playlist }) ); onClose(); } catch (error) { console.error("Failed to create playlist:", error); } finally { setIsCreating(false); } }; const handleSelectPlaylist = async (playlistId: string) => { try { await onSelectPlaylist(playlistId); window.dispatchEvent( new CustomEvent("playlist-updated", { detail: { playlistId } }) ); await loadPlaylists(); onClose(); } catch (error) { console.error("Failed to add to playlist:", error); } }; if (!isOpen) return null; return (
e.stopPropagation()} >

Add to Playlist

{isSaving && (
{loadingMessage || "Adding..."}
)}
{isLoading ? (
) : playlists.length === 0 ? (

No playlists yet

Create one below to get started

) : ( playlists.map((playlist) => ( )) )}

Create New Playlist

setNewPlaylistName(e.target.value)} onKeyDown={(e) => e.key === "Enter" && handleCreatePlaylist() } className="flex-1 px-4 py-3 bg-white/5 border border-white/10 rounded-lg text-white placeholder-gray-500 focus:outline-none focus:border-[#ecb200] focus:bg-white/10 transition-all" />
); }