You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

98 lines
3.8 KiB

import { useParams } from "react-router-dom";
import Navbar from "../components/Navbar";
import { useEffect, useState } from "react";
import { getPlaylistById, deletePlaylist, deleteVideo } from "../services/playlist.service.js";
import VideoCard from "../components/VideoCard.jsx";
import VerificationModal from "../modals/VerificationModal.jsx";
import { useNavigate } from "react-router-dom";
export default function Playlist() {
const { id } = useParams();
const navigate = useNavigate();
const [alerts, setAlerts] = useState([]);
const [playlist, setPlaylist] = useState(null);
const [isDeletePlaylistModalOpen, setIsDeletePlaylistModalOpen] = useState(false);
const fetchPlaylistDetails = async () => {
const token = localStorage.getItem("token");
const data = await getPlaylistById(id, token, addAlert);
setPlaylist(data);
}
useEffect(() => {
fetchPlaylistDetails();
}, [id]);
const addAlert = (type, message) => {
const newAlert = { type, message, id: Date.now() }; // Add unique ID
setAlerts([...alerts, newAlert]);
};
const onCloseAlert = (alertToRemove) => {
setAlerts(alerts.filter(alert => alert !== alertToRemove));
};
const onDeletePlaylist = async () => {
const token = localStorage.getItem("token");
await deletePlaylist(id, token, addAlert);
setIsDeletePlaylistModalOpen(false);
navigate("/profile");
}
const onDeleteVideo = async (videoId) => {
const token = localStorage.getItem("token");
await deleteVideo(id, videoId, token, addAlert);
fetchPlaylistDetails();
}
return (
<div className="min-w-screen min-h-screen bg-linear-to-br from-left-gradient to-right-gradient">
<Navbar isSearchPage={false} alerts={alerts} onCloseAlert={onCloseAlert} />
<main className="px-36 w-full pt-[118px]">
<h1 className="font-bold font-montserrat text-3xl text-white" >{playlist && playlist.name}</h1>
{/* CONTROLS */}
<div className="mt-4">
<button
className="bg-primary px-3 py-2 rounded-sm text-white font-montserrat text-lg font-semibold cursor-pointer"
onClick={() => console.log("Modifier playlist")}
>
modifier
</button>
<button
className="bg-red-500 ml-4 px-3 py-2 rounded-sm text-white font-montserrat text-lg font-semibold cursor-pointer"
onClick={() => setIsDeletePlaylistModalOpen(true)}
>
supprimer
</button>
</div>
<div className="grid grid-cols-4 gap-8 mt-12">
{
playlist && playlist.videos && playlist.videos.length > 0 ? playlist.videos.map(video => (
<VideoCard
key={video.id}
video={video}
showControls={true}
onDelete={onDeleteVideo}
link={`/video/${video.id}?playlistId=${playlist.id}`}
/>
)) : (
<p className="text-white">Aucun vidéo trouvée dans cette playlist.</p>
)
}
</div>
</main>
<VerificationModal
title="Confirmer la suppression"
onConfirm={() => onDeletePlaylist()}
onCancel={() => setIsDeletePlaylistModalOpen(false)}
isOpen={isDeletePlaylistModalOpen}
/>
</div>
);
}