11import type { Key } from '../../../_util/type' ;
2- import type { ComputedRef , CSSProperties , InjectionKey , Ref , UnwrapRef } from 'vue' ;
2+ import type { ComputedRef , CSSProperties , InjectionKey , PropType , Ref , UnwrapRef } from 'vue' ;
3+ import { toRef } from 'vue' ;
4+ import { watchEffect } from 'vue' ;
35import { defineComponent , inject , provide } from 'vue' ;
46import type {
57 BuiltinPlacements ,
@@ -31,8 +33,6 @@ export interface MenuContextProps {
3133 selectedSubMenuEventKeys : Ref < string [ ] > ;
3234 rtl ?: ComputedRef < boolean > ;
3335
34- locked ?: Ref < boolean > ;
35-
3636 inlineCollapsed : Ref < boolean > ;
3737 antdMenuTheme ?: ComputedRef < MenuTheme > ;
3838
@@ -44,7 +44,7 @@ export interface MenuContextProps {
4444 // // Disabled
4545 disabled ?: ComputedRef < boolean > ;
4646 // // Used for overflow only. Prevent hidden node trigger open
47- overflowDisabled ?: ComputedRef < boolean > ;
47+ overflowDisabled ?: Ref < boolean > ;
4848
4949 // // Active
5050 activeKeys : Ref < Key [ ] > ;
@@ -108,10 +108,25 @@ const MenuContextProvider = defineComponent({
108108 name : 'MenuContextProvider' ,
109109 inheritAttrs : false ,
110110 props : {
111- props : Object ,
111+ mode : { type : String as PropType < MenuMode > , default : undefined } ,
112+ overflowDisabled : { type : Boolean , default : undefined } ,
113+ isRootMenu : { type : Boolean , default : undefined } ,
112114 } ,
113115 setup ( props , { slots } ) {
114- useProvideMenu ( { ...useInjectMenu ( ) , ...props . props } ) ;
116+ const menuContext = useInjectMenu ( ) ;
117+ const newContext = { ...menuContext } ;
118+ watchEffect ( ( ) => {
119+ if ( props . mode !== undefined ) {
120+ newContext . mode = toRef ( props , 'mode' ) ;
121+ }
122+ if ( props . isRootMenu !== undefined ) {
123+ newContext . isRootMenu = props . isRootMenu ;
124+ }
125+ if ( props . overflowDisabled !== undefined ) {
126+ newContext . overflowDisabled = toRef ( props , 'overflowDisabled' ) ;
127+ }
128+ } ) ;
129+ useProvideMenu ( newContext ) ;
115130 return ( ) => slots . default ?.( ) ;
116131 } ,
117132} ) ;
0 commit comments