/** * Compresse les fichiers en ZIP et déclenche le téléchargement. * Si un fichier possède un `folder`, il est placé dans le sous-dossier correspondant. * @param {{ name: string, blob: Blob, folder?: string }[]} processedFiles * @returns {Promise} */ export async function downloadAllAsZip(processedFiles) { const zip = new JSZip(); for (const { name, blob, folder } of processedFiles) { const path = folder ? `${folder}/${name}` : name; zip.file(path, blob); } const zipBlob = await zip.generateAsync({ type: 'blob' }); const url = URL.createObjectURL(zipBlob); const a = document.createElement('a'); a.href = url; a.download = `photos-produits-${new Date().toISOString().slice(0, 10)}.zip`; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(() => URL.revokeObjectURL(url), 10_000); }