adrema/resources/js/stores/menuStore.js

50 lines
1.5 KiB
JavaScript

import {defineStore} from 'pinia';
import {router} from '@inertiajs/vue3';
export const menuStore = defineStore('menu', {
state: () => ({
visible: false,
overflowVisible: false,
tooltipsVisible: false,
}),
getters: {
isShifted: (state) => state.visible || state.overflowVisible,
hideable: (state) => state.overflowVisible && !state.visible,
},
actions: {
menuListener() {
var x = window.matchMedia('(min-width: 1024px)');
if (x.matches && !this.visible) {
this.visible = true;
this.overflowVisible = false;
return;
}
if (!x.matches && this.visible) {
this.visible = false;
this.overflowVisible = false;
return;
}
this.tooltipsVisible = !window.matchMedia('(min-width: 1280px)').matches;
},
startInertiaListener() {
window.addEventListener('resize', this.menuListener);
this.menuListener();
router.on('before', () => {
if (!window.matchMedia('(min-width: 1024px)').matches) {
this.visible = false;
this.overflowVisible = false;
}
});
},
toggle() {
this.overflowVisible = !this.overflowVisible;
},
hide() {
this.overflowVisible = false;
},
},
});