23 lines
1 KiB
JavaScript
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); |