feat: implémenter processBatch et downloadAllAsZip

This commit is contained in:
2026-05-27 10:06:57 +02:00
parent 3ff71b0ef9
commit 205faeede2
2 changed files with 35 additions and 2 deletions
+15 -1
View File
@@ -1,3 +1,17 @@
/**
* Traite un tableau d'items avec au plus `concurrency` appels simultanés.
* @param {any[]} items
* @param {(item: any) => Promise<void>} processFn
* @param {number} concurrency
* @returns {Promise<void>}
*/
export async function processBatch(items, processFn, concurrency = 3) { export async function processBatch(items, processFn, concurrency = 3) {
throw new Error('Not implemented'); const queue = [...items];
const workers = Array.from({ length: concurrency }, async () => {
while (queue.length > 0) {
const item = queue.shift();
if (item !== undefined) await processFn(item);
}
});
await Promise.all(workers);
} }
+20 -1
View File
@@ -1,3 +1,22 @@
/**
* Compresse les fichiers en ZIP et déclenche le téléchargement.
* @param {{ name: string, blob: Blob }[]} processedFiles
* @returns {Promise<void>}
*/
export async function downloadAllAsZip(processedFiles) { export async function downloadAllAsZip(processedFiles) {
throw new Error('Not implemented'); const zip = new JSZip();
for (const { name, blob } of processedFiles) {
zip.file(name, 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);
} }