New store module for setting the document title. Each route changes the document title to its name

This commit is contained in:
2019-10-22 22:52:24 +02:00
parent 0fdaf5bd4e
commit 001c243f95
3 changed files with 46 additions and 11 deletions

View File

@@ -0,0 +1,37 @@
const capitalize = (string) => {
return string.includes(' ') ?
string.split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1).replace('_', ' ')).join(' ')
: string.charAt(0).toUpperCase() + string.slice(1)
}
const setDocumentTitle = (state) => {
document.title = `${state.emoji} ${state.titlePrefix} | ${capitalize(state.title)}`
}
export default {
namespaced: true,
state: {
emoji: '🍕',
titlePrefix: 'request',
title: undefined
},
getters: {},
mutations: {
SET_EMOJI: (state, emoji) => {
state.emoji = emoji
setDocumentTitle(state)
},
SET_TITLE: (state, title) => {
state.title = title
setDocumentTitle(state)
}
},
actions: {
updateEmoji({ commit }, emoji) {
commit('SET_EMOJI', emoji)
},
updateTitle({ commit }, title) {
commit('SET_TITLE', title)
}
}
}

View File

@@ -1,5 +1,6 @@
import Vue from 'vue' import Vue from 'vue'
import VueRouter from 'vue-router'; import VueRouter from 'vue-router';
import store from '@/store'
Vue.use(VueRouter) Vue.use(VueRouter)
@@ -18,19 +19,19 @@ let routes = [
{ {
name: 'list', name: 'list',
path: '/list/:name', path: '/list/:name',
component: (resolve) => require(['./components/MoviesList.vue'], resolve) component: (resolve) => require(['./components/ListPage.vue'], resolve)
}, },
{ {
name: 'request', name: 'request',
path: '/request/all', path: '/request/all',
components: { components: {
'request-router-view': require('./components/MoviesList.vue') 'request-router-view': require('./components/ListPage.vue')
} }
}, },
{ {
name: 'search', name: 'search',
path: '/search', path: '/search',
component: (resolve) => require(['./components/MoviesList.vue'], resolve) component: (resolve) => require(['./components/Search.vue'], resolve)
}, },
{ {
name: 'register', name: 'register',
@@ -47,13 +48,6 @@ let routes = [
path: '/signin', path: '/signin',
component: (resolve) => require(['./components/Signin.vue'], resolve) component: (resolve) => require(['./components/Signin.vue'], resolve)
}, },
{
name: 'settings',
path: '/profile/settings',
components: {
'search-router-view': require('./components/Settings.vue')
}
},
// { // {
// name: 'user-requests', // name: 'user-requests',
// path: '/profile/requests', // path: '/profile/requests',
@@ -84,6 +78,8 @@ const router = new VueRouter({
}); });
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
store.dispatch('documentTitle/updateTitle', to.name)
// Toggle mobile nav // Toggle mobile nav
if(document.querySelector('.nav__hamburger--active')){ if(document.querySelector('.nav__hamburger--active')){
document.querySelector('.nav__hamburger').classList.remove('nav__hamburger--active'); document.querySelector('.nav__hamburger').classList.remove('nav__hamburger--active');

View File

@@ -3,13 +3,15 @@ import Vuex from 'vuex'
import torrentModule from './modules/torrentModule.js' import torrentModule from './modules/torrentModule.js'
import darkmodeModule from './modules/darkmodeModule.js' import darkmodeModule from './modules/darkmodeModule.js'
import documentTitle from './modules/documentTitle.js'
Vue.use(Vuex) Vue.use(Vuex)
const store = new Vuex.Store({ const store = new Vuex.Store({
modules: { modules: {
torrentModule, torrentModule,
darkmodeModule darkmodeModule,
documentTitle
} }
}) })