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.'; } });