Moved hamburger logic to store & auto hide on route change

This commit is contained in:
2022-01-14 17:02:00 +01:00
parent 5431b5be40
commit 9f3745b71c
5 changed files with 38 additions and 23 deletions

View File

@@ -6,11 +6,11 @@
<SearchInput />
<Hamburger @click="toggleNav" />
<Hamburger />
<NavigationIcon class="desktop-only" :route="profileRoute" />
<div class="nav__list mobile-only" :class="{ open: hamburgerMenuOpen }">
<div class="nav__list mobile-only" :class="{ open: isOpen }">
<NavigationIcons>
<NavigationIcon :route="profileRoute" />
</NavigationIcons>
@@ -43,17 +43,12 @@ export default {
},
data() {
return {
listTypes: storage.homepageLists,
hamburgerMenuOpen: false
listTypes: storage.homepageLists
};
},
methods: {
toggleNav() {
this.hamburgerMenuOpen = !this.hamburgerMenuOpen;
}
},
computed: {
...mapGetters("user", ["loggedIn"]),
...mapGetters("hamburger", ["isOpen"]),
profileRoute() {
return {
title: !this.loggedIn ? "Signin" : "Profile",

View File

@@ -1,9 +1,9 @@
<template>
<div
class="nav__hamburger"
:class="{ open }"
@click="toggleNav"
@keydown.enter="toggleNav"
:class="{ open: isOpen }"
@click="toggle"
@keydown.enter="toggle"
tabindex="0"
>
<div v-for="_ in 3" class="bar"></div>
@@ -11,17 +11,14 @@
</template>
<script>
import { mapGetters, mapActions } from "vuex";
export default {
data() {
return {
open: false
};
computed: {
...mapGetters("hamburger", ["isOpen"])
},
methods: {
toggleNav() {
this.open = !this.open;
this.$emit("click", this.open);
}
...mapActions("hamburger", ["toggle"])
}
};
</script>

19
src/modules/hamburger.js Normal file
View File

@@ -0,0 +1,19 @@
export default {
namespaced: true,
state: {
open: false
},
getters: {
isOpen: state => state.open
},
mutations: {
SET_OPEN: state => (state.open = true),
SET_CLOSE: state => (state.open = false),
TOGGLE: state => (state.open = !state.open)
},
actions: {
open: ({ commit }) => commit("SET_OPEN"),
close: ({ commit }) => commit("SET_CLOSE"),
toggle: ({ commit }) => commit("TOGGLE")
}
};

View File

@@ -84,11 +84,13 @@ const router = new VueRouter({
});
const loggedIn = () => store.getters["user/loggedIn"];
const isOpen = () => store.getters["user/isOpen"];
const popupIsOpen = () => store.getters["popup/isOpen"];
const hamburgerIsOpen = () => store.getters["hamburger/isOpen"];
router.beforeEach((to, from, next) => {
store.dispatch("documentTitle/updateTitle", to.name);
if (isOpen()) store.dispatch("popup/close");
if (popupIsOpen()) store.dispatch("popup/close");
if (hamburgerIsOpen()) store.dispatch("hamburger/close");
// Toggle mobile nav
if (document.querySelector(".nav__hamburger--active")) {

View File

@@ -6,6 +6,7 @@ import documentTitle from "./modules/documentTitle";
import torrentModule from "./modules/torrentModule";
import user from "./modules/user";
import popup from "./modules/popup";
import hamburger from "./modules/hamburger";
Vue.use(Vuex);
@@ -15,7 +16,8 @@ const store = new Vuex.Store({
documentTitle,
torrentModule,
user,
popup
popup,
hamburger
}
});