github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/directeurs/src/views/inscrits.ts (about)

     1  // implémente une classe de base permettant
     2  // de grouper les fonctions des inscrits simples ou non
     3  
     4  import Vue from "vue";
     5  import { C } from "@/logic/controller";
     6  import { Inscrit, MessageKind, Bus } from "@/logic/types";
     7  import { Formatter } from "@/logic/formatter";
     8  
     9  export const COULEUR_INFO = "#8ad5ed";
    10  
    11  export class BaseInscrits extends Vue {
    12    COULEUR_ATTENTE = "#FF610F";
    13    COULEUR_ANNIVERSAIRE = "#dcb920";
    14    COULEUR_INFO = COULEUR_INFO;
    15  
    16    C = C; // reactivity
    17    asI = (item: Inscrit) => item; // for type checking in template
    18    fmt = Formatter;
    19  
    20    hasInfo(item: Inscrit) {
    21      return item.info != "" || this.has_messages(item);
    22    }
    23  
    24    /** Renvoie true pour les dossiers avec des messages "persos" */
    25    has_messages(item: Inscrit) {
    26      return (
    27        (item.responsable.messages || []).filter(
    28          m => m.kind == MessageKind.MCentre || m.kind == MessageKind.MResponsable
    29        ).length > 0
    30      );
    31    }
    32  
    33    get nbInscrits() {
    34      return C.inscrits.filter(r => !r.is_attente).length;
    35    }
    36    get nbAttente() {
    37      return C.inscrits.filter(r => r.is_attente).length;
    38    }
    39    get nbInfos() {
    40      return C.inscrits.filter(r => this.hasInfo(r)).length;
    41    }
    42    get nbTemporaires() {
    43      return C.inscrits.filter(
    44        r => r.responsable.valide && !r.responsable.inscription_valide
    45      ).length;
    46    }
    47  
    48    get anniversaires() {
    49      return C.inscrits.filter(r => r.has_anniversaire).map(Formatter.nomPrenom);
    50    }
    51  
    52    get mailToInscrits() {
    53      const { mails, mailsCopie } = C.mailsInscrits();
    54      return "mailto:?bcc=" + mails.concat(...mailsCopie).join(",");
    55    }
    56  
    57    async copyMailsToClipboard() {
    58      const { mails, mailsCopie } = C.mailsInscrits();
    59      const mailsText = mails.concat(...mailsCopie).join(",");
    60      try {
    61        await navigator.clipboard.writeText(mailsText);
    62        C.notifications.success = "Adresses mails copiées dans le presse-papier.";
    63      } catch (err) {
    64        C.notifications.error = {
    65          code: 0,
    66          kind: "Accès au presse-papier",
    67          messageHtml: String(err)
    68        };
    69      }
    70    }
    71  }
    72  
    73  export function matchesBus(critere: Bus, value: Bus) {
    74    let match = critere == value;
    75    if (critere == Bus.BAller || critere == Bus.BRetour) {
    76      match = match || value == Bus.BAllerRetour;
    77    }
    78    return match;
    79  }