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  }