UBS/public/assets/js/admin/import.js

62 lines
2.1 KiB
JavaScript

var messageElement = null;
var pollInterval = null;
var uploadId = null;
const poll = async function () {
try {
const pollResponse = await fetch(`/admin/api/uploads/${uploadId}`);
const pollResult = await pollResponse.json();
if (!pollResult.completed) {
messageElement.className = 'alert alert-info';
const percentage = ((pollResult.processed / pollResult.total) * 100).toFixed(2);
messageElement.textContent = `${pollResult.processed}/${pollResult.total} Imported. ${percentage}% done. You can leave this page.`;
} else {
clearInterval(pollInterval);
messageElement.className = 'alert alert-success';
messageElement.textContent = 'Import completed successfully. Redirecting...';
setTimeout(() => {
window.location.href = '/admin';
}, 1000);
}
} catch (pollError) {
clearInterval(pollInterval);
messageElement.className = 'alert alert-danger';
messageElement.textContent = 'An error occurred while polling the upload status.';
}
};
document.getElementById('banForm').addEventListener('submit', async function (event) {
event.preventDefault();
if (pollInterval !== null) {
return; // Upload already in progress
}
const form = event.target;
const formData = new FormData(form);
messageElement = document.getElementById('message');
messageElement.className = 'alert alert-info';
messageElement.textContent = 'Uploading... Please Wait';
messageElement.style.display = 'block';
try {
const response = await fetch(event.target.action, {
method: 'POST',
body: formData
});
const result = await response.json();
if (result.success) {
Array.from(form.elements).forEach(element => element.disabled = true);
uploadId = result.id;
if (uploadId) {
poll(); // Start polling
pollInterval = setInterval(poll, 250); // Poll every 5 seconds
}
} else {
messageElement.className = 'alert alert-danger';
messageElement.textContent = result.message || 'Failed to import file.';
}
} catch (error) {
messageElement.className = 'alert alert-danger';
messageElement.textContent = 'An error occurred while importing the file.';
}
});