Skip to content

Commit

Permalink
Simplify delay behaviour, add JSDoc comments
Browse files Browse the repository at this point in the history
  • Loading branch information
ddelange committed Aug 5, 2024
1 parent 9cd46a8 commit b11cee7
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions client/src/utils/download.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
// adapted from https://github.com/sindresorhus/multi-download/blob/v4.0.0/index.js
// Adapted from https://github.com/sindresorhus/multi-download/blob/v4.0.0/index.js
// to take File as input https://developer.mozilla.org/en-US/docs/Web/API/File

/**
* Creates a promise that resolves after the specified number of milliseconds
*/
const delay = milliseconds => new Promise(resolve => {
setTimeout(resolve, milliseconds);
});

/**
* Downloads a single file
* @param file - An instance of the File type representing the file to download
*/
const download = async (file) => {
const a = document.createElement('a');
const url = URL.createObjectURL(file);
Expand All @@ -12,21 +20,22 @@ const download = async (file) => {
a.style.display = 'none';
document.body.append(a);
a.click();

// Chrome requires the timeout
await delay(100);
await delay(100); // for Chrome
a.remove();

URL.revokeObjectURL(url);
};

/**
* Initiates multiple file downloads with a constant delay between each one
* @param files - An array of instances of the File type representing the files to download
*/
const multiDownload = async (files) => {
if (!files) {
throw new Error('`files` required');
}
};

for (const [index, file] of files.entries()) {
await delay(index * 1000); // eslint-disable-line no-await-in-loop
for (const file of files) {
await delay(1000);
download(file);
}
}
};

0 comments on commit b11cee7

Please sign in to comment.