Skip to content
Snippets Groups Projects
Select Git revision
  • laminas_migration
  • master default protected
  • 5.x
  • ll-php8-bs5
  • release_5_bs5
  • ll-php8
  • 4.x
  • release_1.0.0.2
  • release_4.0.0
  • release_3.2.8
  • bootstrap4_migration
  • 1.0.0.3
  • 6.0.7
  • 6.0.6
  • 6.0.5
  • 6.0.4
  • 6.0.3
  • 6.0.2
  • 6.0.1
  • 5.1.1
  • 6.0.0
  • 5.1.0
  • 5.0.0
  • 4.0.2
  • 3.2.11
  • 4.0.1
  • 3.2.10
  • 4.0.0
  • 1.0.0.2
  • 3.2.9
  • 3.2.8
31 results

Module.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    unicaenVue.js 3.66 KiB
    import axios from 'axios';
    import flashMessenger from './flashMessenger';
    
    const unicaenVue = {
        axios: axios,
        flashMessenger: flashMessenger,
    
        /**
         * Crée une URL à partie d'une route, de paramètres de route (params) et de paramètres GET (query)
         *
         * @param String route
         * @param Object params
         * @param Object query
         * @returns String
         */
        url: (route, params, query) => {
            let baseUrl = window.__unicaenVueBaseUrl;
            // Remplacement des paramètres de routes par leurs valeurs
            if (params) {
                for (let p in params) {
                    route = route.replace(`:${p}`, params[p]);
                }
            }
    
            // traitement de la requête GET
            let getArgs = query ? new URLSearchParams(query).toString() : null;
    
            // Construction et retour de l'URL
            return baseUrl + route + (getArgs ? `?${getArgs}` : '');
        }
    };
    
    
    /* Tunning d'Axios pour gérer l'interconnexion avec le serveur avec gestion des alertes */
    unicaenVue.axios.interceptors.request.use(config => {
        if (config.submitter) {
            let msg = config.msg ? config.msg : 'Action en cours';
            if (config.popover != undefined) {
                config.popover.dispose();
            }
            config.popover = new bootstrap.Popover(config.submitter, {
                content: "<div class=\"spinner-border text-primary\" role=\"status\">\n" +
                    "  <span class=\"visually-hidden\">Loading...</span>\n" +
                    "</div> " + msg,
                html: true,
                trigger: 'focus'
            });
            config.popover.show();
        }
        return config;
    });
    
    unicaenVue.axios.interceptors.response.use(response => {
        response.messages = response.data.messages;
        response.data = response.data.data;
        response.hasErrors = response.messages && response.messages.error && response.messages.error.length > 0 ? true : false;
    
        if (response.config.popover) {
            var popover = response.config.popover;
    
            let content = '';
            for (ns in response.messages) {
                for (mid in response.messages[ns]) {
                    content += '<div class="alert fade show alert-' + (ns == 'error' ? 'danger' : ns) + '" role="alert">' + response.messages[ns][mid] + '</div>';
                }
            }
    
            // S'il y a un truc à afficher
            if (content) {
                popover._config.content = content;
                popover.setContent();
                setTimeout(() => {
                    popover.dispose();
                }, 3000)
            } else {
                // la popover est masquée si tout est fini
                popover.dispose();
            }
        }
        if (response.messages) {
            flashMessenger.toasts(response.messages);
        }
    
        return response;
    }, (error) => {
        let message = error.response.data;
    
        if (error.response.status == 403){
            message = '<h4>403 - Accès interdit</h4><br />Vous n\'êtes pas autorisé(e) à faire cette action.';
        }else if (error.response.status == 500) {
            const text = document.createElement("div");
            text.innerHTML = error.response.data;
    
            // on masque l'icône /!\ qui fait doublon si on en trouve
            const fasIcons = text.querySelectorAll('i.fas');
            fasIcons.forEach(icon => icon.style.display = "none");
    
            message = text.querySelector('.alert').innerHTML;
            if (message === undefined){
                message = error.response.data;
            }
        }else{
            message = error.response.data;
        }
    
        flashMessenger.toast(message, 'error');
    });
    
    unicaenVue.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
    
    
    // workaround pour rendre unicaenVue disponible de partout
    window.unicaenVue = unicaenVue;
    
    export default {
        unicaenVue
    }