Skip to content
Snippets Groups Projects
Select Git revision
  • 52667a32a19a3e4c77d22d28a9b19610f61d2492
  • master default protected
  • alc-scindage-donnees-pj
  • b24
  • ll-workflow
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • b23.0.1
  • b22
  • 24.8
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
41 results

FormAwareTrait.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
    }