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>