templates/import_export/import-files.html.twig line 1

Open in your IDE?
  1. <style>
  2.     .mbody {
  3.         display: flex;
  4.         align-items: center;
  5.         justify-content: center;
  6.         background: #B13403;
  7.     }
  8.     .drag-area-page {
  9.         border: 2px dashed #fff;
  10.         height: 400px;
  11.         width: 700px;
  12.         border-radius: 5px;
  13.         display: flex;
  14.         align-items: center;
  15.         justify-content: center;
  16.         flex-direction: column;
  17.     }
  18.     .drag-area-page.active {
  19.         border: 2px solid #fff;
  20.     }
  21.     .drag-area-page .icon {
  22.         font-size: 100px;
  23.         color: #fff;
  24.     }
  25.     .drag-area-page header {
  26.         font-size: 24px;
  27.         font-weight: 500;
  28.         color: #fff;
  29.     }
  30.     .drag-area-page span {
  31.         font-size: 22px;
  32.         font-weight: 500;
  33.         color: #fff;
  34.         margin: 10px 0 15px;
  35.     }
  36.     .drag-area-page button {
  37.         padding: 10px 25px;
  38.         font-size: 20px;
  39.         font-weight: 500;
  40.         border: none;
  41.         outline: none;
  42.         background: #fff;
  43.         color: #5256ad;
  44.         border-radius: 5px;
  45.         cursor: pointer;
  46.     }
  47.     .drag-area-page img {
  48.         height: 100%;
  49.         width: 100%;
  50.         object-fit: cover;
  51.         border-radius: 5px;
  52.     }
  53. </style>
  54. <div class="modal fade" id="{{ modal }}" tabindex="-1" aria-labelledby="pageModalLabel" aria-hidden="true">
  55.     <div class="modal-dialog modal-dialog-centered">
  56.         <div class="modal-content">
  57.             <div class="modal-header">
  58.                 <h5 class="modal-title" id="pageModalLabel">Importer fichier CSV</h5>
  59.                 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  60.             </div>
  61.             <form action="{{ path }}" method="POST" id="mform_id" onsubmit="return mySubmitFunction{{modal}}(event)">
  62.                 <div class="modal-body mbody" style="max-height: 48rem;">
  63.                     <div class="drag-area-page">
  64.                         <div class="icon">
  65.                             <i class="fas fa-cloud-upload-alt"></i>
  66.                         </div>
  67.                         <header>Drag & Drop pour télécharger le fichier</header>
  68.                         <span>OU</span>
  69.                         <button type="button">Parcourir le Fichier</button>
  70.                         <input type="file" name="fileToUpload" id="fileToUpload" accept="text/csv" multiple hidden>
  71.                     </div>
  72.                 </div>
  73.                 <div class="modal-footer modal-footer-page">
  74.                     <input type="text" name="mfileToUpload" id="mfileToUpload" hidden>
  75.                     <input type="text" name="mfileNameToUpload" id="mfileNameToUpload" hidden>
  76.                     <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
  77.                     <button type="submit" class="btn btn-primary" onclick="return mySubmitFunctionbtn{{modal}}(event)">Importer</button>
  78.                 </div>
  79.             </form>
  80.         </div>
  81.     </div>
  82. </div>
  83. <script>
  84.     let submit{{modal}} = false;
  85.     let mdocument{{modal}} = document.querySelector("#{{modal}}");
  86.     // selecting all required elements
  87.     let modalf{{modal}} = mdocument{{modal}}.querySelector(".modal-footer-page"),
  88.         minput{{modal}} = modalf{{modal}}.querySelector("input"),
  89.         mnameinput{{modal}} = modalf{{modal}}.querySelector("#mfileNameToUpload");
  90.     let dropArea{{modal}} = mdocument{{modal}}.querySelector(".drag-area-page"),
  91.         dragText{{modal}} = dropArea{{modal}}.querySelector("header"),
  92.         button{{modal}} = dropArea{{modal}}.querySelector("button"),
  93.         input{{modal}} = dropArea{{modal}}.querySelector("input");
  94.     let file{{modal}}; // this is a global variable and we'll use it inside multiple functions
  95.     button{{modal}}.onclick = () => {
  96.         input{{modal}}.click(); // if user click on the button then the input also clicked
  97.     };
  98.     input{{modal}}.addEventListener("change", function () { // getting user select file and [0] this means if user select multiple files then we'll select only the first one
  99.         file{{modal}} = this.files;
  100.         dropArea{{modal}}.classList.add("active");
  101.         // file.forEach(showFile);
  102.         showFile{{modal}}(); // calling function
  103.     });
  104.     // If user Drag File Over DropArea
  105.     dropArea{{modal}}.addEventListener("dragover", (event) => {
  106.         event.preventDefault(); // preventing from default behaviour
  107.         dropArea{{modal}}.classList.add("active");
  108.         dragText{{modal}}.textContent = "Libérer pour télécharger le fichier";
  109.     });
  110.     // If user leave dragged File from DropArea
  111.     dropArea{{modal}}.addEventListener("dragleave", () => {
  112.         dropArea{{modal}}.classList.remove("active");
  113.         dragText{{modal}}.textContent = "Drag & Drop pour télécharger le fichier";
  114.     });
  115.     // If user drop File on DropArea
  116.     dropArea{{modal}}.addEventListener("drop", (event) => {
  117.         event.preventDefault();
  118.         // preventing from default behaviour
  119.         // getting user select file and [0] this means if user select multiple files then we'll select only the first one
  120.         file{{modal}} = event.dataTransfer.files;
  121.         input{{modal}}.files = event.dataTransfer.files;
  122.         // file.forEach(showFile);
  123.         showFile{{modal}}(); // calling function
  124.     });
  125.     function showFile{{modal}}() {
  126.         minput{{modal}}.value = [];
  127.         mnameinput{{modal}}.value = [];
  128.         dragText{{modal}}.innerHTML = '';
  129.         for (let index = 0; index < file{{modal}}.length; index++) {
  130.             // const element = file[index];
  131.             // console.log(file[index]);
  132.             let fileType = file{{modal}}[index].type;
  133.             // getting selected file type
  134.             // let fileURL = fileReader.result;
  135.             let validExtensions = ["text/csv", "application/vnd.ms-excel"]; // adding some valid image extensions in array
  136.             if (validExtensions.includes(fileType)) { // if user selected file is an image file
  137.                 let fileReader = new FileReader(); // creating new FileReader object
  138.                 fileReader.onload = () => {
  139.                     let fileURL = fileReader.result;
  140.                     let imgTag = `Fichier déposé avec succès  <br>`;
  141.                     filename = file{{modal}}[index].name;
  142.                     dragText{{modal}}.innerHTML += filename + ' , ';
  143.                     minput{{modal}}.value += "|[|" + fileURL;
  144.                     mnameinput{{modal}}.value += "|[|" + filename;
  145.                 };
  146.                 fileReader.readAsDataURL(file{{modal}}[index]);
  147.                 // submit = true;
  148.             } else {
  149.                 alert("Ceci n'est pas un fichier CSV!");
  150.                 alert(fileType);
  151.                 dropArea{{modal}}.classList.remove("active");
  152.                 dragText{{modal}}.textContent = "Drag & Drop pour télécharger le fichier";
  153.                 submit{{modal}} = false;
  154.                 minput{{modal}}.value = [];
  155.                 mnameinput{{modal}}.value = [];
  156.                 break;
  157.             }
  158.         }
  159.     }
  160.     function mySubmitFunctionbtn{{modal}}(e) {
  161.         submit{{modal}} = true;
  162.         mdocument.getElementById("mform_id").submit();
  163.     }
  164.     function mySubmitFunction{{modal}}(e) {
  165.         if (!submit{{modal}}) {
  166.             e.preventDefault();
  167.         }
  168.     }
  169. </script>