github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/shared/logic/notifications.ts (about) 1 export interface SuccessOutput { 2 title: string; 3 message: string; 4 } 5 6 export interface ErrorOutput { 7 code: number; 8 kind: string; 9 messageHtml: string; 10 } 11 12 type DialogOutput = SuccessOutput; 13 14 function arrayBufferToString(buffer: ArrayBuffer) { 15 const uintArray = new Uint8Array(buffer); 16 const encodedString = String.fromCharCode.apply(null, Array.from(uintArray)); 17 return decodeURIComponent(escape(encodedString)); 18 } 19 20 export class Output { 21 success: SuccessOutput | null = null; 22 error: ErrorOutput | null = null; 23 notification: DialogOutput | null = null; 24 25 private parseAxiosError(error: any): ErrorOutput { 26 let kind: string, 27 messageHtml: string, 28 code = null; 29 if (error.response) { 30 // The request was made and the server responded with a status code 31 // that falls out of the range of 2xx 32 kind = `Erreur côté serveur`; 33 code = error.response.status; 34 35 messageHtml = error.response.data.message; 36 if (!messageHtml) { 37 try { 38 const json = arrayBufferToString(error.response.data); 39 messageHtml = JSON.parse(json).message; 40 } catch (error) { 41 messageHtml = `Le format d'erreur du serveur n'a pu être décodé.<br/> 42 Détails : <i>${error}</i>`; 43 } 44 } 45 } else if (error.request) { 46 // The request was made but no response was received 47 // `error.request` is an instance of XMLHttpRequest in the browser and an instance of 48 // http.ClientRequest in node.js 49 kind = "Aucune réponse du serveur"; 50 messageHtml = 51 "La requête a bien été envoyée, mais le serveur n'a donné aucune réponse..."; 52 } else { 53 // Something happened in setting up the request that triggered an Error 54 kind = "Erreur du client"; 55 messageHtml = `La requête n'a pu être mise en place. <br/> 56 Détails : ${error.message} `; 57 } 58 return { kind, messageHtml, code }; 59 } 60 61 onAxiosError(error: any) { 62 this.error = this.parseAxiosError(error); 63 } 64 }