diff --git a/package-lock.json b/package-lock.json index d5a58c2..19b3842 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14805,6 +14805,7 @@ "version": "0.453.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.453.0.tgz", "integrity": "sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==", + "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } diff --git a/src/components/Cart.js b/src/components/Cart.js index 40c733c..a678de7 100644 --- a/src/components/Cart.js +++ b/src/components/Cart.js @@ -1,7 +1,8 @@ -import React, { useState } from 'react'; -import { useSelector, useDispatch } from 'react-redux'; -import { removePoster } from '../services/action'; -import DeleteIcon from '@material-ui/icons/Delete'; +import React, { useState } from "react"; +import { useSelector, useDispatch } from "react-redux"; +import { removePoster } from "../services/action"; +import DeleteIcon from "@material-ui/icons/Delete"; +import { Camera } from "lucide-react"; const apiUrl = process.env.REACT_APP_API_URL; @@ -10,11 +11,11 @@ const Cart = () => { const selectedPosters = useSelector((state) => { const selections = state.posterSelections; return Object.entries(selections).flatMap(([movieId, posters]) => - posters.map((posterId) => ({ movieId, posterId })) + posters.map((posterId) => ({ movieId, posterId })) ); }); - const [downloadFormat, setDownloadFormat] = useState('zip'); + const [downloadFormat, setDownloadFormat] = useState("zip"); const handleRemovePoster = (movieId, posterId) => { dispatch(removePoster(movieId, posterId)); @@ -23,9 +24,9 @@ const Cart = () => { const handleDownload = async () => { try { const response = await fetch(`${apiUrl}/api/download-posters`, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, body: JSON.stringify({ posters: selectedPosters, @@ -33,70 +34,94 @@ const Cart = () => { }), }); - if (!response.ok) throw new Error('Download failed'); + if (!response.ok) throw new Error("Download failed"); - const contentType = response.headers.get('content-type'); - if (contentType && contentType.includes('application/zip')) { + const contentType = response.headers.get("content-type"); + if (contentType && contentType.includes("application/zip")) { const blob = await response.blob(); const url = window.URL.createObjectURL(blob); - const link = document.createElement('a'); + const link = document.createElement("a"); link.href = url; - link.download = 'posters.zip'; + link.download = "posters.zip"; document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); } else { - throw new Error('Invalid response format'); + throw new Error("Invalid response format"); } } catch (error) { - console.error('Failed to download posters:', error); + console.error("Failed to download posters:", error); } }; + const totalSlots = 4; + const posterSlots = [...Array(totalSlots)].map((_, index) => { + if (index < selectedPosters.length) { + return selectedPosters[index]; + } + return null; + }); + return ( -
Emplacement disponible