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 }