github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/pages/espace_perso/components/documents/ContraintesPersonne.vue (about) 1 <template> 2 <b-card class="mt-3" no-body> 3 <template v-slot:header> 4 <b>{{ personne.nom_prenom }}</b> 5 </template> 6 <b-card-text> 7 <div v-if="contraintes.length == 0" class="p-2 text-center"> 8 <i>Aucun document à fournir.</i> 9 </div> 10 <div v-else> 11 <div v-for="(contrainte, i) in contraintes" :key="i" class="p-2"> 12 <needed-document 13 :controller="controller" 14 :contrainte="contrainte.contrainte" 15 :documents="contrainte.docs || []" 16 @upload="uploadContraintesPersonne(contrainte, i, $event)" 17 @changed="onChange(contrainte, $event)" 18 > 19 <template v-slot:corner> 20 <h6 class="font-italic"> 21 {{ campsFromIds(contrainte.origine) }} 22 </h6> 23 </template> 24 </needed-document> 25 </div> 26 </div> 27 </b-card-text> 28 </b-card> 29 </template> 30 31 <script lang="ts"> 32 import Vue from "vue"; 33 import Component from "vue-class-component"; 34 import NeededDocument from "@/shared/NeededDocument.vue"; 35 36 import { C } from "../../logic/controller"; 37 import { 38 Personne, 39 PublicDocument, 40 PublicContrainte, 41 ContrainteWithOrigine, 42 Ids 43 } from "@/shared/logic/types"; 44 import { UrlServerBase, ControllerDocument } from "@/shared/logic/controller"; 45 import { isDocumentNull, nullDocument } from "@/shared/logic/utils"; 46 import { ValidEventFile } from "@/shared/utils"; 47 48 const ContraintesPersonneProps = Vue.extend({ 49 props: { 50 personne: Object as () => Personne 51 } 52 }); 53 54 @Component({ 55 components: { NeededDocument } 56 }) 57 export default class ContraintesPersonne extends ContraintesPersonneProps { 58 controller: ControllerDocument = C; 59 60 get contraintes() { 61 return this.personne.documents || []; 62 } 63 64 campsFromIds(ids: Ids) { 65 return (ids || []).map(id => C.data.camps[id].label).join(", "); 66 } 67 68 async uploadContraintesPersonne( 69 contrainte: ContrainteWithOrigine, 70 index: number, 71 event: ValidEventFile 72 ) { 73 const doc = await C.data.creeDocument( 74 { 75 id_personne: this.personne.id_crypted, 76 id_contrainte: contrainte.contrainte.id_crypted 77 }, 78 event.file 79 ); 80 event.event.spinning = false; 81 if (doc === undefined) return; 82 C.notifications.success = { 83 title: contrainte.contrainte.nom, 84 message: "Votre document a bien été ajouté. Merci !" 85 }; 86 const docs = (this.contraintes[index].docs || []).concat(doc); 87 (C.data.personnes[this.personne.id_crypted].documents || [])[ 88 index 89 ].docs = docs; 90 } 91 92 onChange(contrainte: ContrainteWithOrigine, docs: PublicDocument[]) { 93 contrainte.docs = docs; 94 } 95 } 96 </script> 97 98 <style scoped></style>