import type { SubMenuProvider } from '../types';
|
|
import { computed, getCurrentInstance } from 'vue';
|
|
import { findComponentUpward } from '../utils';
|
|
function useMenu() {
|
const instance = getCurrentInstance();
|
if (!instance) {
|
throw new Error('instance is required');
|
}
|
|
/**
|
* @zh_CN 获取所有父级菜单链路
|
*/
|
const parentPaths = computed(() => {
|
let parent = instance.parent;
|
const paths: string[] = [instance.props.path as string];
|
while (parent?.type.name !== 'Menu') {
|
if (parent?.props.path) {
|
paths.unshift(parent.props.path as string);
|
}
|
parent = parent?.parent ?? null;
|
}
|
|
return paths;
|
});
|
|
const parentMenu = computed(() => {
|
return findComponentUpward(instance, ['Menu', 'SubMenu']);
|
});
|
|
return {
|
parentMenu,
|
parentPaths,
|
};
|
}
|
|
function useMenuStyle(menu?: SubMenuProvider) {
|
const subMenuStyle = computed(() => {
|
return {
|
'--menu-level': menu ? (menu?.level ?? 0 + 1) : 0,
|
};
|
});
|
return subMenuStyle;
|
}
|
|
export { useMenu, useMenuStyle };
|