71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| import Sidebar from './SideBar.vue';
 | |
| import SidebarItem from './SidebarItem.vue';
 | |
| 
 | |
| const SidebarStore = {
 | |
|   showSidebar: true,
 | |
|   sidebarLinks: [],
 | |
|   isMinimized: false,
 | |
|   breakpoint: 1200,
 | |
|   displaySidebar(value) {
 | |
|     if (window.innerWidth > this.breakpoint) {
 | |
|       return;
 | |
|     }
 | |
|     this.showSidebar = value;
 | |
|     let docClasses = document.body.classList
 | |
|     if (value) {
 | |
|       docClasses.add('g-sidenav-pinned')
 | |
|       docClasses.add('g-sidenav-show')
 | |
|       docClasses.remove('g-sidenav-hidden')
 | |
|     } else {
 | |
|       docClasses.add('g-sidenav-hidden')
 | |
|       docClasses.remove('g-sidenav-pinned')
 | |
|     }
 | |
|   },
 | |
|   toggleMinimize() {
 | |
|     this.isMinimized = !this.isMinimized;
 | |
|     let docClasses = document.body.classList
 | |
|     if (this.isMinimized) {
 | |
|       docClasses.add('g-sidenav-hidden')
 | |
|       docClasses.remove('g-sidenav-pinned')
 | |
|     } else {
 | |
|       docClasses.add('g-sidenav-pinned')
 | |
|       docClasses.remove('g-sidenav-hidden')
 | |
|     }
 | |
|   },
 | |
|   onMouseEnter() {
 | |
|     if (this.isMinimized) {
 | |
|       document.body.classList.add('g-sidenav-show')
 | |
|       document.body.classList.remove('g-sidenav-hidden')
 | |
|     }
 | |
|   },
 | |
|   onMouseLeave() {
 | |
|     if (this.isMinimized) {
 | |
|       let docClasses = document.body.classList
 | |
|       docClasses.remove('g-sidenav-show')
 | |
|       docClasses.add('g-sidenav-hide')
 | |
|       setTimeout(() => {
 | |
|         docClasses.remove('g-sidenav-hide')
 | |
|         docClasses.add('g-sidenav-hidden')
 | |
|       }, 300)
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| const SidebarPlugin = {
 | |
|   install(Vue, options) {
 | |
|     if (options && options.sidebarLinks) {
 | |
|       SidebarStore.sidebarLinks = options.sidebarLinks;
 | |
|     }
 | |
|     let app = new Vue({
 | |
|       data: {
 | |
|         sidebarStore: SidebarStore
 | |
|       }
 | |
|     });
 | |
|     Vue.prototype.$sidebar = app.sidebarStore;
 | |
|     Vue.component('side-bar', Sidebar);
 | |
|     Vue.component('sidebar-item', SidebarItem);
 | |
|   }
 | |
| };
 | |
| 
 | |
| export default SidebarPlugin;
 |