diff --git a/themes/vuetober/package.json b/themes/vuetober/package.json index 8408b0b2..6ba5c7fc 100644 --- a/themes/vuetober/package.json +++ b/themes/vuetober/package.json @@ -10,20 +10,22 @@ "dependencies": { "axios": "^0.19.2", "bootstrap": "^4.5.0", - "bootstrap-vue": "^2.14.0", + "bootstrap-vue": "^2.15.0", "core-js": "^3.6.5", - "moment": "^2.25.3", + "moment": "^2.26.0", + "smartlook-client": "^4.4.0", "vee-validate": "^3.3.0", "vue": "^2.6.11", - "vue-router": "^3.1.5", + "vue-gtag": "^1.6.2", + "vue-router": "^3.3.1", "vuex": "^3.4.0" }, "devDependencies": { - "@vue/cli-plugin-babel": "^4.3.1", - "@vue/cli-plugin-eslint": "^4.3.1", - "@vue/cli-plugin-router": "^4.3.1", - "@vue/cli-plugin-vuex": "^4.3.1", - "@vue/cli-service": "^4.3.1", + "@vue/cli-plugin-babel": "^4.4.1", + "@vue/cli-plugin-eslint": "^4.4.1", + "@vue/cli-plugin-router": "^4.4.1", + "@vue/cli-plugin-vuex": "^4.4.1", + "@vue/cli-service": "^4.4.1", "@vue/eslint-config-airbnb": "^5.0.2", "babel-eslint": "^10.0.3", "eslint": "^6.7.2", @@ -31,7 +33,7 @@ "eslint-plugin-vue": "^6.2.2", "sass": "^1.26.5", "sass-loader": "^8.0.2", - "stylelint": "^13.4.0", + "stylelint": "^13.5.0", "stylelint-config-recommended-scss": "^4.2.0", "stylelint-scss": "^3.17.2", "stylelint-webpack-plugin": "^2.0.0", diff --git a/themes/vuetober/src/custom.js b/themes/vuetober/src/custom.js index a6d2f0ff..94afe96b 100644 --- a/themes/vuetober/src/custom.js +++ b/themes/vuetober/src/custom.js @@ -1,5 +1,7 @@ import Vue from 'vue'; +import Axios from 'axios'; + import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'; import './custom.scss'; @@ -7,48 +9,58 @@ import { ValidationProvider, extend } from 'vee-validate'; import * as rules from 'vee-validate/dist/rules'; import { messages } from 'vee-validate/dist/locale/sk.json'; -import Axios from 'axios'; +import SmartlookClient from 'smartlook-client'; + +import router from './router'; +import store from './store'; -export function setup() { - Vue.use(BootstrapVue); - Vue.use(IconsPlugin); - Object.keys(rules).forEach((rule) => { - extend(rule, { - ...rules[rule], // copies rule configuration - message: messages[rule], // assign message +const custom = { + setup() { + Vue.use(BootstrapVue); + Vue.use(IconsPlugin); + + Object.keys(rules).forEach((rule) => { + extend(rule, { + ...rules[rule], // copies rule configuration + message: messages[rule], // assign message + }); + }); + + extend('upperCase', { + validate: (value) => value !== value.toLowerCase(), + message: '{_field_} musí obsahovať veľké písmeno', }); - }); - - extend('upperCase', { - validate: (value) => value !== value.toLowerCase(), - message: '{_field_} musí obsahovať veľké písmeno', - }); - extend('containsNumber', { - validate: (value) => /\d/.test(value), - message: '{_field_} musí obsahovať číslicu', - }); - - Vue.component('ValidationProvider', ValidationProvider); -} - -export function created(router, store) { - const token = localStorage.getItem('token'); - if (token) { - // eslint-disable-next-line dot-notation - Axios.defaults.headers.common['Authorization'] = `Bearer ${ - token - }`; - } - - Axios.interceptors.response.use( - (response) => response, - (error) => { - if ((error.response.status === 401 && error.response.data.error === 'token_expired') - || (error.response.status === 400 && error.response.data.error === 'token_invalid')) { - store.dispatch('logout').finally(() => router.push('/')); - } - return Promise.reject(error); - }, - ); -} + extend('containsNumber', { + validate: (value) => /\d/.test(value), + message: '{_field_} musí obsahovať číslicu', + }); + + Vue.component('ValidationProvider', ValidationProvider); + }, + + created() { + const token = localStorage.getItem('token'); + if (token) { + // eslint-disable-next-line dot-notation + Axios.defaults.headers.common['Authorization'] = `Bearer ${ + token + }`; + } + + SmartlookClient.init('fc12e3b81c44e9f5321d50d48848f14a85ac8786'); + + Axios.interceptors.response.use( + (response) => response, + (error) => { + if ((error.response.status === 401 && error.response.data.error === 'token_expired') + || (error.response.status === 400 && error.response.data.error === 'token_invalid')) { + store.dispatch('logout').finally(() => router.push('/')); + } + return Promise.reject(error); + }, + ); + }, +}; + +export default custom; diff --git a/themes/vuetober/src/main.js b/themes/vuetober/src/main.js index 907d63cf..99431b9a 100644 --- a/themes/vuetober/src/main.js +++ b/themes/vuetober/src/main.js @@ -4,9 +4,9 @@ import App from './App.vue'; import router from './router'; import store from './store'; -import { setup, created } from './custom'; +import Custom from './custom'; -setup(); +Custom.setup(); Vue.config.productionTip = false; @@ -15,6 +15,6 @@ new Vue({ store, render: (h) => h(App), created() { - created(router, store); + Custom.created(); }, }).$mount('#app'); diff --git a/themes/vuetober/src/router/index.js b/themes/vuetober/src/router/index.js index 707211dc..691f2e0e 100644 --- a/themes/vuetober/src/router/index.js +++ b/themes/vuetober/src/router/index.js @@ -1,7 +1,9 @@ import Vue from 'vue'; import VueRouter from 'vue-router'; +import VueGtag from 'vue-gtag'; import store from '../store/index'; + Vue.use(VueRouter); const routes = [ @@ -53,4 +55,8 @@ const router = new VueRouter({ routes, }); +Vue.use(VueGtag, { + config: { id: 'UA-167888903-1' }, +}, router); + export default router;