62 lines
2.1 KiB
JavaScript
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.';
|
|
}
|
|
}); |