import { Component, Vue, Watch } from 'vue-property-decorator' import { AppModule, DeviceType } from '../../store/modules/app' import { isMobile } from '../../utils/services' @Component({ name: 'ResizeMixin' }) export default class extends Vue { get device() { return AppModule.device } get sidebar() { return AppModule.sidebar } @Watch('$route') private onRouteChange() { if (this.device === DeviceType.Mobile && this.sidebar.opened) { AppModule.CloseSideBar(false) } } beforeMount() { window.addEventListener('resize', this.resizeHandler) } mounted() { const _isMobile = isMobile() if (_isMobile) { AppModule.ToggleDevice(DeviceType.Mobile) AppModule.CloseSideBar(true) } } beforeDestroy() { window.removeEventListener('resize', this.resizeHandler) } private resizeHandler() { if (!document.hidden) { const _isMobile = isMobile() AppModule.ToggleDevice(_isMobile ? DeviceType.Mobile : DeviceType.Desktop) if (_isMobile) { AppModule.CloseSideBar(true) } } } }