import store from '@/store'; const { body } = document; const WIDTH = 992; // refer to Bootstrap's responsive design export default { watch: { $route(route) { if (this.device === 'mobile' && this.sidebar.opened) { store.dispatch('app/closeSideBar', { withoutAnimation: false }); } } }, beforeMount() { window.addEventListener('resize', this.$_resizeHandler); }, beforeDestroy() { window.removeEventListener('resize', this.$_resizeHandler); }, mounted() { const isMobile = this.$_isMobile(); if (isMobile) { store.dispatch('app/toggleDevice', 'mobile'); store.dispatch('app/closeSideBar', { withoutAnimation: true }); } }, methods: { // use $_ for mixins properties // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential $_isMobile() { const rect = body.getBoundingClientRect(); return rect.width - 1 < WIDTH; }, $_resizeHandler() { if (!document.hidden) { const isMobile = this.$_isMobile(); store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop'); if (isMobile) { store.dispatch('app/closeSideBar', { withoutAnimation: true }); } } } } };