import { useState, useEffect } from "react"; import { toast } from "react-toastify"; import axiosInstance from "../../api/axiosInstance"; import type { CreatePlaylistModalProps } from "../../utils/types"; const CreatePlaylistModal = ({ isOpen, onClose, onSuccess, }: CreatePlaylistModalProps) => { const [playlistName, setPlaylistName] = useState(""); const [isClosing, setIsClosing] = useState(false); const [isOpening, setIsOpening] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(""); useEffect(() => { if (isOpen) { setIsClosing(false); setPlaylistName(""); setError(""); setIsOpening(true); setTimeout(() => setIsOpening(false), 10); } }, [isOpen]); const handleClose = () => { setIsClosing(true); setTimeout(() => { onClose(); setIsClosing(false); }, 200); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!playlistName.trim() || isSubmitting) return; setIsSubmitting(true); try { await axiosInstance.post( `/playlists?playlistName=${encodeURIComponent(playlistName.trim())}`, ); toast.success("Playlist created successfully!"); onSuccess(); handleClose(); } catch (err: any) { setError(err?.response?.data?.error || "Failed to create playlist"); } finally { setIsSubmitting(false); } }; if (!isOpen && !isClosing) return null; return (
e.stopPropagation()} >

Create Playlist

{ setPlaylistName(e.target.value); }} />

{error}

); }; export default CreatePlaylistModal;