71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
import Vue from 'vue';
|
|
import axios from 'axios';
|
|
import VueAxios from 'vue-axios';
|
|
import GetTextPlugin from 'vue-gettext';
|
|
import translations from '../../translations/translations.json';
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// Configure localization
|
|
Vue.use(GetTextPlugin, {
|
|
defaultLanguage: 'en_US',
|
|
translations: translations,
|
|
silent: true
|
|
});
|
|
|
|
if (typeof App.locale !== 'undefined') {
|
|
Vue.config.language = App.locale;
|
|
}
|
|
|
|
// Configure auto-CSRF on requests
|
|
if (typeof App.api_csrf !== 'undefined') {
|
|
axios.defaults.headers.common['X-API-CSRF'] = App.api_csrf;
|
|
}
|
|
|
|
Vue.use(VueAxios, axios);
|
|
|
|
Vue.prototype.$eventHub = new Vue();
|
|
});
|
|
|
|
export default function (component) {
|
|
return function (el, props) {
|
|
return new Vue({
|
|
el: el,
|
|
created () {
|
|
let handleAxiosError = (error) => {
|
|
let notifyMessage = this.$gettext('An error occurred and your request could not be completed.');
|
|
if (error.response) {
|
|
// Request made and server responded
|
|
notifyMessage = error.response.data.message;
|
|
console.error(notifyMessage);
|
|
} else if (error.request) {
|
|
// The request was made but no response was received
|
|
console.error(error.request);
|
|
} else {
|
|
// Something happened in setting up the request that triggered an Error
|
|
console.error('Error', error.message);
|
|
}
|
|
|
|
if (typeof this.$notifyError === 'function') {
|
|
this.$notifyError(notifyMessage);
|
|
}
|
|
};
|
|
|
|
axios.interceptors.request.use((config) => {
|
|
return config;
|
|
}, (error) => {
|
|
handleAxiosError(error);
|
|
return Promise.reject(error);
|
|
});
|
|
|
|
axios.interceptors.response.use((response) => {
|
|
return response;
|
|
}, (error) => {
|
|
handleAxiosError(error);
|
|
return Promise.reject(error);
|
|
});
|
|
},
|
|
render: createElement => createElement(component, { props: props })
|
|
});
|
|
};
|
|
}
|