UBS/public/assets/js/admin/uploadStatus.js

23 lines
1 KiB
JavaScript

// Once the doc loads, find #import-status div, and start polling /admin/api/uploads to get full list
/* example response
{"51e4dd908c4d6dcffad46bc4b939712d":{"completed":true,"total":1,"processed":0},"b35467b9295d51c38d6cc4681cd18d02":{"completed":false,"total":18933,"processed":3383}}
*/
const poll = async function () {
try {
const pollResponse = await fetch(`/admin/api/uploads`);
const pollResult = await pollResponse.json();
const importStatus = document.getElementById('import-status');
importStatus.innerHTML = '';
for (const [uploadId, uploadData] of Object.entries(pollResult)) {
const div = document.createElement('div');
div.textContent = `${uploadId}: ${uploadData.processed}/${uploadData.total} Imported. ${((uploadData.processed / uploadData.total) * 100).toFixed(2)}% done.`;
importStatus.appendChild(div);
}
} catch (pollError) {
console.error('An error occurred while polling the upload status.');
}
setTimeout(poll, 250);
};
document.addEventListener('DOMContentLoaded', poll);