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();