101 lines
2.6 KiB
JavaScript
101 lines
2.6 KiB
JavaScript
document.addEventListener("DOMContentLoaded", () => {
|
|
const dropzones = document.querySelectorAll("[data-import-dropzone]");
|
|
const uploadButtons = document.querySelectorAll(
|
|
"[data-import-upload-trigger]"
|
|
);
|
|
const resetButtons = document.querySelectorAll("[data-import-reset]");
|
|
const feedbackEl = document.querySelector("#import-upload-feedback");
|
|
|
|
function showFeedback(message, type = "info") {
|
|
if (!feedbackEl) return;
|
|
feedbackEl.textContent = message;
|
|
feedbackEl.classList.remove("hidden", "success", "error", "info");
|
|
feedbackEl.classList.add(type);
|
|
}
|
|
|
|
function hideFeedback() {
|
|
if (!feedbackEl) return;
|
|
feedbackEl.textContent = "";
|
|
feedbackEl.classList.add("hidden");
|
|
}
|
|
|
|
dropzones.forEach((zone) => {
|
|
const input = zone.querySelector("input[type='file']");
|
|
const uploadButton = zone
|
|
.closest("[data-import-upload]")
|
|
.querySelector("[data-import-upload-trigger]");
|
|
const resetButton = zone
|
|
.closest("[data-import-upload]")
|
|
.querySelector("[data-import-reset]");
|
|
|
|
function enableUpload() {
|
|
if (uploadButton) {
|
|
uploadButton.disabled = false;
|
|
}
|
|
if (resetButton) {
|
|
resetButton.hidden = false;
|
|
}
|
|
}
|
|
|
|
function disableUpload() {
|
|
if (uploadButton) {
|
|
uploadButton.disabled = true;
|
|
}
|
|
if (resetButton) {
|
|
resetButton.hidden = true;
|
|
}
|
|
}
|
|
|
|
zone.addEventListener("dragover", (event) => {
|
|
event.preventDefault();
|
|
zone.classList.add("dragover");
|
|
});
|
|
|
|
zone.addEventListener("dragleave", () => {
|
|
zone.classList.remove("dragover");
|
|
});
|
|
|
|
zone.addEventListener("drop", (event) => {
|
|
event.preventDefault();
|
|
zone.classList.remove("dragover");
|
|
if (!event.dataTransfer?.files?.length) {
|
|
return;
|
|
}
|
|
input.files = event.dataTransfer.files;
|
|
enableUpload();
|
|
hideFeedback();
|
|
});
|
|
|
|
input.addEventListener("change", () => {
|
|
if (input.files?.length) {
|
|
enableUpload();
|
|
hideFeedback();
|
|
} else {
|
|
disableUpload();
|
|
}
|
|
});
|
|
|
|
resetButton?.addEventListener("click", () => {
|
|
input.value = "";
|
|
disableUpload();
|
|
hideFeedback();
|
|
});
|
|
|
|
uploadButton?.addEventListener("click", () => {
|
|
if (!input.files?.length) {
|
|
showFeedback(
|
|
"Please select a CSV or XLSX file before uploading.",
|
|
"error"
|
|
);
|
|
return;
|
|
}
|
|
|
|
showFeedback("Uploading…", "info");
|
|
uploadButton.disabled = true;
|
|
uploadButton.classList.add("loading");
|
|
|
|
// Actual upload logic handled separately (e.g., fetch).
|
|
});
|
|
});
|
|
});
|