github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/pages/equipier/controller.ts (about)

     1  import {
     2    adjustUrlOrigin,
     3    BaseController,
     4    UrlServerBase,
     5    fileMeta
     6  } from "@/shared/logic/controller";
     7  import Vue from "vue";
     8  import { ValidEvent } from "@/shared/utils";
     9  import Axios, { AxiosResponse } from "axios";
    10  import { Equipier } from "@/shared/logic/api";
    11  import {
    12    OptionnalBool,
    13    CharteIn,
    14    DataEquipier,
    15    EquipierEquipier,
    16    PublicDocument,
    17    AjouteDocumentIn,
    18    DatasJoomeo
    19  } from "@/shared/logic/types";
    20  
    21  export const UrlServerEquipier = adjustUrlOrigin();
    22  
    23  function parseId() {
    24    const chuncks = UrlServerEquipier.split("/");
    25    if (chuncks.length == 0) return { baseUrl: UrlServerEquipier, idCrypted: "" };
    26    const baseUrl = chuncks.slice(0, chuncks.length - 1).join("/");
    27    return { baseUrl, idCrypted: chuncks[chuncks.length - 1] };
    28  }
    29  const { baseUrl, idCrypted } = parseId();
    30  
    31  export class Controller extends BaseController {
    32    data: DataEquipier | null = null;
    33  
    34    async loadDatas() {
    35      try {
    36        const resp: AxiosResponse<DataEquipier> = await Axios.get(
    37          baseUrl + Equipier.DatasEquipier(idCrypted)
    38        );
    39        this.data = resp.data;
    40      } catch (error) {
    41        this.notifications.onAxiosError(error);
    42      }
    43    }
    44  
    45    async loadJoomeo() {
    46      try {
    47        const resp: AxiosResponse<DatasJoomeo> = await Axios.get(
    48          baseUrl + Equipier.DatasJoomeo(idCrypted)
    49        );
    50        return resp.data;
    51      } catch (error) {
    52        this.notifications.onAxiosError(error);
    53      }
    54    }
    55  
    56    async saveEquipier(event: ValidEvent) {
    57      if (this.data == null) return;
    58      event.spinning = true;
    59      try {
    60        let resp: AxiosResponse<EquipierEquipier> = await Axios.post(
    61          baseUrl + Equipier.UpdateEquipier(idCrypted),
    62          this.data.equipier
    63        );
    64        this.data.equipier = resp.data;
    65        this.notifications.success = {
    66          title: "Données enregistrées",
    67          message: "Les modifications ont bien été prises en comptes. Merci !"
    68        };
    69      } catch (error) {
    70        this.notifications.onAxiosError(error);
    71      } finally {
    72        event.spinning = false;
    73      }
    74    }
    75  
    76    async ajouteDocument(
    77      event: ValidEvent,
    78      file: File,
    79      idContrainteCrypted: string
    80    ) {
    81      if (this.data == null) return;
    82      const params: AjouteDocumentIn = {
    83        id_contrainte_crypted: idContrainteCrypted
    84      };
    85      const formData = fileMeta(file, params);
    86      try {
    87        let resp: AxiosResponse<PublicDocument> = await Axios.put(
    88          baseUrl + Equipier.AjouteDocumentEquipier(idCrypted),
    89          formData
    90        );
    91        this.notifications.success = {
    92          title: "Document ajouté",
    93          message: "Ton document a bien été ajouté. Merci !"
    94        };
    95        (this.data.pieces || []).forEach(p => {
    96          if (p.contrainte.id_crypted == idContrainteCrypted) {
    97            Vue.set(p, "docs", (p.docs || []).concat(resp.data));
    98          }
    99        });
   100      } catch (error) {
   101        this.notifications.onAxiosError(error);
   102      } finally {
   103        event.spinning = false;
   104      }
   105    }
   106  
   107    async updateCharte(event: ValidEvent, charte: OptionnalBool) {
   108      if (this.data == null) return;
   109      event.spinning = true;
   110      const params: CharteIn = { charte };
   111      try {
   112        await Axios.post(baseUrl + Equipier.UpdateCharte(idCrypted), params);
   113        this.data.equipier.charte = charte;
   114        this.notifications.success = {
   115          title: "Charte",
   116          message: "Ton avis a bien été pris en compte. Merci !"
   117        };
   118      } catch (error) {
   119        this.notifications.onAxiosError(error);
   120      } finally {
   121        event.spinning = false;
   122      }
   123    }
   124  
   125    get pieces() {
   126      if (this.data == null) return [];
   127      return this.data.pieces || [];
   128    }
   129  }
   130  
   131  // Main controller
   132  export const C = new Controller();