
<!-- 
	
-->
<template>
  <div v-if="!item.hidden" class="menu-wrapper">
	<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
		<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
			<li role="menuitem" :index="resolvePath(onlyOneChild.path, 4)" class="el-menu-item" :class="{'submenu-title-noDropdown':!isNest, 'menu-note':'true'}">
				<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
			</li>
		</app-link>
	</template>
	<ul v-else ref="subMenu" :index="resolvePath(item.path, 1)">
		<li role="menuitem" aria-haspopup="true" class="el-submenu" :class="{'main-node':item.isFirst}" @click="menuEvent($event, item)">
			<div v-if="item.meta" class="el-submenu__title" >
				<app-link v-if="isCustomPath(item.path)" :to="resolvePath(item.path, 3)">
					<item :icon="item.meta && item.meta.icon" :title="item.meta.title" />
				</app-link>
				<item v-else :icon="item.meta && item.meta.icon" :title="item.meta.title" />
				<i v-show="!item.isFirst" class="el-submenu__icon-arrow el-icon-arrow-right"></i>
			</div>
			<ul role="menu" class="el-menu el-menu--inline">
				<sidebar-item
					v-for="child in item.children"
					:key="child.path"
					:is-nest="true"
					:item="child"
					:base-path="resolvePath(child.path, 2)"
					class="nest-menu dir-menu"
				/>
			</ul>
		</li>
	</ul>
  </div>
</template>

<script>
import path from 'path'
import { isExternal } from '@/utils/validate'
import Item from './Item'
import AppLink from './Link'

export default {
	name: 'SidebarItem',
	components: { Item, AppLink },
	props: {
		// route object
		item: {
		  type: Object,
		  required: true
		},
		isNest: {
		  type: Boolean,
		  default: false
		},
		basePath: {
		  type: String,
		  default: ''
		},
	},
	data() {
		this.onlyOneChild = null;
		return {

		}
	},
	methods: {
		hasOneShowingChild(children, parent) {
		  children = children || []
		  const showingChildren = children.filter(item => {
			if (item.hidden) {
			  return false
			} else {
			  // Temp set(will be used if only has one showing child)
			  this.onlyOneChild = item
			  return true
			}
		  })

		  // When there is only one child router, the child router is displayed by default
		  if (showingChildren.length === 1) {
			return true
		  }

		  // Show parent if there are no child router to display
		  if (showingChildren.length === 0) {
			this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
			return true
		  }

		  return false
		},
		resolvePath(routePath, mark) {
			if (isExternal(routePath)) {
				return routePath
			}
			/* if (isExternal(this.basePath)) {
				return this.basePath
			} */
			return path.resolve(this.basePath, routePath)
		},
		isCustomPath(path){
			path = typeof path === 'string' ? path : '';
			var pathArr = path.split('/');
			return pathArr[pathArr.length-1] ? 0 : 1
		},
		menuEvent(e, item){
			var tag = e.target || e.srcElement;
			if(item.isFirst){
				var menu = this.$el.firstElementChild.firstElementChild.lastElementChild;
				
				// is-active
				var vms = this.$parent.$el.children;
				for(var vm of vms){
					vm.classList.contains('is-active') && vm.classList.remove('is-active');
					if(vm === this.$el){
						vm.classList.add('is-active');
					};
				};
				
				// hide menu
				menu.style.display = 'none';
				setTimeout(() => {
					menu.style.display = '';
				}, 50);
			};
		},
	}
}
</script>
<style lang="scss" scope>
@import "~@/assets/styles/mixin.scss";
@import "~@/assets/styles/variables.scss";

.cu-nav {
	height:.65rem;background-color:#2a3350;font-size:0;z-index:1001;max-height:50px;
	//width:$sideBarWidth !important;transition:width 0.28s;overflow:hidden;

	.el-menu{
		/* background-color:$leftMenuBg !important; */
		.el-menu-item{
			color:#fff;
		}
		.submenu-title-noDropdown{
			display:flex;align-items:center;
			&:hover{
				background:$subMenuHover !important;
				span, .svg-icon{color:#fff;}
			}
		}
	}
	.el-scrollbar__view{
		>.el-menu {
			display:flex;border:none;height:100%;/* width:100% !important; */
			>.menu-wrapper{
				height:100%;
				>a{
					>.el-menu-item{
						height:100%;
						background-color:$leftMenuBg;
					}
				}
				>ul{height:100%;}
			}
		}
	}

	.el-submenu{
		position:relative;
		&:hover{
			>.el-menu--inline{
				display:block;
			}
		}
		>.el-menu {
			position:absolute;top:100%;left:0;height:auto;min-width:100%;margin-top:3px;
		}
		.el-submenu{
			&:hover{
				.el-submenu__title{
					background:$subMenuHover !important;
					span{color:#fff;}
					.el-submenu__icon-arrow{color:#fff;}
				}
			}
		}
		.el-menu-item{
			&:hover{
				background:$subMenuHover !important;
				span, .svg-icon{color:#fff;}
			}
		}
	}

	.main-node{
		position:relative;height:100%;
		>.el-submenu__title{
			display:flex;align-items:center;color:#fff;height:100%;line-height:normal;/* line-height:.66rem; */
			border-bottom:2px solid transparent;
			span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-wrap:normal;}
			&:hover{
				background: $leftMenuHover !important;	
			}
		}
		.el-menu--inline{
			display:none;background-color:#f5f8ff;
			>.dir-menu{border-style:solid;border-width:0 1px;border-color:#888;}
			>.dir-menu:first-child{border-top-width:1px;}
			>.dir-menu:last-child{border-bottom-width:1px;}
		}
		>.el-menu{
			margin-top:0;
			.el-submenu__title{
				height:43px;line-height:43px;
			}
		}
		.menu-note, .el-submenu{
			//background:linear-gradient(to right, #0d225b, #092469, #082374) !important;
			color:#000;
		}
		.menu-note{
			padding:0 !important;min-width:auto;text-align:center;height:40px;line-height:40px;
			//background-color: $subMenuBg !important;
			span{margin-right:18px;color:#333;}
		}
		.dir-menu{
			a{ 
				display:block;width:100%;overflow:hidden;
			}
			.el-submenu{
				.el-menu--inline{
					position:absolute;top:0;left:100%;height:auto;width:auto;
				}
			}
		}
		.el-icon-arrow-right {
			right:4px;margin-top:-4px;
		}

		.router-link-active{
			span, .svg-icon{color:#258EF6;}
		}
	}

	.is-active{
		.main-node{
			>.el-submenu__title{
				border-bottom-color:rgb(255, 208, 75);
				color:rgb(255, 208, 75)
			}
		}
	}

	.el-scrollbar{
		overflow:visible;height:100%;display:flex;
		.scrollbar-wrapper {
			//overflow-x:hidden !important;
			overflow:visible;margin:0 !important;flex:1;
			>div{height:100%;}
		}
	}

	.el-scrollbar__bar.is-vertical {
	  right: 0;
	}

	.is-horizontal {
	  display: none;
	}

	.svg-icon {
		margin-right: 8px;
	}
}
</style>
