| 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 }) | 
|         } | 
|       } | 
|     } | 
|   } | 
| } |