12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import type { MenuProvider, SubMenuProvider } from '../types';
- import { getCurrentInstance, inject, provide } from 'vue';
- import { findComponentUpward } from '../utils';
- const menuContextKey = Symbol('menuContext');
- /**
- * @zh_CN Provide menu context
- */
- function createMenuContext(injectMenuData: MenuProvider) {
- provide(menuContextKey, injectMenuData);
- }
- /**
- * @zh_CN Provide menu context
- */
- function createSubMenuContext(injectSubMenuData: SubMenuProvider) {
- const instance = getCurrentInstance();
- provide(`subMenu:${instance?.uid}`, injectSubMenuData);
- }
- /**
- * @zh_CN Inject menu context
- */
- function useMenuContext() {
- const instance = getCurrentInstance();
- if (!instance) {
- throw new Error('instance is required');
- }
- const rootMenu = inject(menuContextKey) as MenuProvider;
- return rootMenu;
- }
- /**
- * @zh_CN Inject menu context
- */
- function useSubMenuContext() {
- const instance = getCurrentInstance();
- if (!instance) {
- throw new Error('instance is required');
- }
- const parentMenu = findComponentUpward(instance, ['Menu', 'SubMenu']);
- const subMenu = inject(`subMenu:${parentMenu?.uid}`) as SubMenuProvider;
- return subMenu;
- }
- export {
- createMenuContext,
- createSubMenuContext,
- useMenuContext,
- useSubMenuContext,
- };
|