Detail_Filtre.vue 3.31 KB
Newer Older
1 2 3
<template>
  <div id="detail_filtre">
    <button id="effacerFiltres" v-on:click="effacer_Filtres"></button>
4 5
    <div id="filtresChoisis" v-for="(index) in filtres_Choisis" :key="index.filtre">
      <span class="filtreChoisi"> {{index.filtre}} <button class="supprimerFiltre" v-on:click="supprimer($event, index)"></button></span>
6 7 8 9 10 11 12 13
    </div>

  </div>
</template>

<script>
export default {
  name: "Detail_Filtre",
14 15 16 17
  props: {
    // Variable de stockage des nouveaux filtres
    nouveau_filtre: {}
},
18
  methods: {
19 20 21 22
    /**
     * @vuese
     * Supprimer un filtre (en l'enlevant de l'array filtres_choisis)
     */
23
    supprimer: function (e, index) {
24
      e.target.parentElement.remove()
25
      this.filtres_Choisis = this.filtres_Choisis.filter(filtre => filtre !== index)
26
      // On transmet la liste des filtres maj (à destination finale de Volet_Base, pour mise à jour des contenus)
27 28
      this.$emit("filtresChoisis", {filtres: this.filtres_Choisis})

29
    },
30 31 32 33
    /**
     * @vuese
     * Dégage tous les filtres choisis
     */
34 35
    effacer_Filtres: function () {
      this.filtres_Choisis = []
36 37
      // On transmet la liste des filtres maj (à destination finale de Volet_Base, pour mise à jour des contenus)
      this.$emit("filtresChoisis", {filtres: this.filtres_Choisis})
38
    },
39 40 41 42
    /**
     * @vuese
     * Le filtre date n'étant présent (au maximum) qu'en un seul exemplaire à chaque fois, une fonction pour le supprimer de la liste (pour le remettre par la suite)
     */
43 44 45
    changer_filtre_date: function() {
      this.filtres_Choisis = this.filtres_Choisis.filter(filtre => filtre.type !== 'date')
    },
46 47 48 49
    /**
     * @vuese
     * Permet de détecter un éventuel doublon dans les filtres (ce qu'on veut éviter)
     */
50 51
    filtreDejaPresent: function(nomFiltre) {
      return this.filtres_Choisis.filter(filtre => filtre.filtre === nomFiltre).length > 0
52 53 54
    }
  },
  watch: {
55 56 57 58
    /**
     * @vuese
     * Fonction de traitement dès qu'on réceptionne un nouveau filtre
     */
59
    nouveau_filtre: function(newVal) { // watch it
60 61 62 63 64 65 66 67 68 69 70 71 72
      if (this.filtres_Choisis.length > 0){
        if (this.filtreDejaPresent(newVal.filtre.filtre)){
          return
        }

        else if(newVal.filtre.type === 'date'){
          this.changer_filtre_date()
          if (newVal.filtre.filtre === "Toutes les périodes"){
            return
          }
        }
      }
      this.filtres_Choisis.push(newVal.filtre)
73
      // si les écueils ci dessus sont évités, on ajoute le filtre et on envoie l'array maj à Volet_Base, qui gère l'affichage des contenus
74 75
      this.$emit("filtresChoisis", {filtres: this.filtres_Choisis})

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
    }
  }
  ,  data: function () {
    return {
      filtres_Choisis: [],
    }
  }
}
// <span class="filtreChoisi">' + e.target.innerText + '<button class="supprimerFiltre"></button></span>

</script>

<style scoped>

.supprimerFiltre {
  background: white url(../assets/img/croix.png);
  background-size: cover;
  border: none;
}

#detail_filtre {
  display: flex;
  flex-direction: row;
  padding: 1px;
  margin: 1px;
  flex-flow: wrap;
}

.filtreChoisi{
  padding: 1px;
  border: 1px solid black;
  display: inline-flex;
  margin: 1px;
  align-items: center;
}

#effacerFiltres {
  height: 15px;
  width: 15px;
  margin: 5px 2px 2px;
  background: white url(../assets/img/balai.png);
  background-size: cover;
  border: none;
}

</style>