Files
element-plus/packages/components/menu/src/useMenu.ts
三咲智子 c86c2b0fe9 style: eslint enable prefer-template (#3414)
* style: eslint enable prefer-template

* chore: apply eslint rules
2021-09-17 09:18:24 +08:00

51 lines
1.3 KiB
TypeScript

import { computed, ComputedRef, inject } from 'vue'
import type { ComponentInternalInstance } from 'vue'
import type { RootMenuProvider } from './menu.type'
export default function useMenu(
instance: ComponentInternalInstance,
currentIndex: ComputedRef<string>
) {
const rootMenu = inject<RootMenuProvider>('rootMenu')
const indexPath = computed(() => {
let parent = instance.parent
const path = [currentIndex.value]
while (parent.type.name !== 'ElMenu') {
if (parent.props.index) {
path.unshift(parent.props.index as string)
}
parent = parent.parent
}
return path
})
const parentMenu = computed(() => {
let parent = instance.parent
while (parent && ['ElMenu', 'ElSubMenu'].indexOf(parent.type.name) === -1) {
parent = parent.parent
}
return parent
})
const paddingStyle = computed(() => {
let parent = instance.parent
if (rootMenu.props.mode !== 'vertical') return {}
let padding = 20
if (rootMenu.props.collapse) {
padding = 20
} else {
while (parent && parent.type.name !== 'ElMenu') {
if (parent.type.name === 'ElSubMenu') {
padding += 20
}
parent = parent.parent
}
}
return { paddingLeft: `${padding}px` }
})
return { parentMenu, paddingStyle, indexPath }
}