<style>
.mbody {
display: flex;
align-items: center;
justify-content: center;
background: #B13403;
}
.drag-area {
border: 2px dashed #fff;
height: 400px;
width: 700px;
border-radius: 5px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.drag-area.active {
border: 2px solid #fff;
}
.drag-area .icon {
font-size: 100px;
color: #fff;
}
.drag-area header {
font-size: 24px;
font-weight: 500;
color: #fff;
}
.drag-area span {
font-size: 22px;
font-weight: 500;
color: #fff;
margin: 10px 0 15px;
}
.drag-area button {
padding: 10px 25px;
font-size: 20px;
font-weight: 500;
border: none;
outline: none;
background: #fff;
color: #5256ad;
border-radius: 5px;
cursor: pointer;
}
.drag-area img {
height: 100%;
width: 100%;
object-fit: cover;
border-radius: 5px;
}
</style>
<div class="modal fade" id="pageModal" tabindex="-1" aria-labelledby="pageModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="pageModalLabel">Importer fichier CSV</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
{% set url = ea_url()
.setDashboard('App\\Controller\\Admin\\DashboardController')
.setController('App\\Controller\\Content\\Page\\PageCrudController')
.setAction('import') %}
<form action="{{url}}" method="POST" id="mform_id" onsubmit="return mySubmitFunction(event)">
<div class="modal-body mbody" style="max-height: 48rem;">
<div class="drag-area">
<div class="icon">
<i class="fas fa-cloud-upload-alt"></i>
</div>
<header>Drag & Drop pour télécharger le fichier</header>
<span>OU</span>
<button type="button">Parcourir le Fichier</button>
<input type="file" name="fileToUpload" id="fileToUpload" accept="text/csv" multiple hidden>
</div>
</div>
<div class="modal-footer">
<input type="text" name="mfileToUpload" id="mfileToUpload" hidden>
<input type="text" name="mfileNameToUpload" id="mfileNameToUpload" hidden>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary" onclick="return mySubmitFunctionbtn(event)">Importer</button>
</div>
</form>
</div>
</div>
</div>
<script>
let submit = false;
// selecting all required elements
let modalf = document.querySelector(".modal-footer"),
minput = modalf.querySelector("input"),
mnameinput = modalf.querySelector("#mfileNameToUpload");
let dropArea = document.querySelector(".drag-area"),
dragText = dropArea.querySelector("header"),
button = dropArea.querySelector("button"),
input = dropArea.querySelector("input");
let file; // this is a global variable and we'll use it inside multiple functions
button.onclick = () => {
input.click(); // if user click on the button then the input also clicked
};
input.addEventListener("change", function () { // getting user select file and [0] this means if user select multiple files then we'll select only the first one
file = this.files;
dropArea.classList.add("active");
//file.forEach(showFile);
showFile(); // calling function
});
// If user Drag File Over DropArea
dropArea.addEventListener("dragover", (event) => {
event.preventDefault(); // preventing from default behaviour
dropArea.classList.add("active");
dragText.textContent = "Libérer pour télécharger le fichier";
});
// If user leave dragged File from DropArea
dropArea.addEventListener("dragleave", () => {
dropArea.classList.remove("active");
dragText.textContent = "Drag & Drop pour télécharger le fichier";
});
// If user drop File on DropArea
dropArea.addEventListener("drop", (event) => {
event.preventDefault();
// preventing from default behaviour
// getting user select file and [0] this means if user select multiple files then we'll select only the first one
file = event.dataTransfer.files;
input.files = event.dataTransfer.files;
//file.forEach(showFile);
showFile(); // calling function
});
function showFile() {
minput.value = [];
mnameinput.value = [];
dragText.innerHTML = '';
for (let index = 0; index < file.length; index++) {
//const element = file[index];
//console.log(file[index]);
let fileType = file[index].type; // getting selected file type
//let fileURL = fileReader.result;
let validExtensions = ["text/csv", "application/vnd.ms-excel"]; // adding some valid image extensions in array
if (validExtensions.includes(fileType)) { // if user selected file is an image file
let fileReader = new FileReader(); // creating new FileReader object
fileReader.onload = () => {
let fileURL = fileReader.result;
let imgTag = `Fichier déposé avec succès <br>`;
filename = file[index].name;
dragText.innerHTML += filename + ' , ' ;
minput.value += "|[|" + fileURL;
mnameinput.value += "|[|" + filename;
};
fileReader.readAsDataURL(file[index]);
// submit = true;
} else {
alert("Ceci n'est pas un fichier CSV!");
dropArea.classList.remove("active");
dragText.textContent = "Drag & Drop pour télécharger le fichier";
submit = false;
minput.value = [];
mnameinput.value = [];
break;
}
}
}
function mySubmitFunctionbtn(e) {
submit = true;
document.getElementById("mform_id").submit();
}
function mySubmitFunction(e) {
if (!submit) {
e.preventDefault();
}
}
</script>