44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
![]() |
import { defineComponent, inject } from 'vue';
|
||
![]() |
import { SubMenu as VcSubMenu } from '../vc-menu';
|
||
![]() |
import classNames from '../_util/classNames';
|
||
![]() |
import Omit from 'omit.js';
|
||
|
import { getSlot } from '../_util/props-util';
|
||
![]() |
|
||
![]() |
export type MenuTheme = 'light' | 'dark';
|
||
|
|
||
|
export interface MenuContextProps {
|
||
|
inlineCollapsed?: boolean;
|
||
|
theme?: MenuTheme;
|
||
|
}
|
||
|
|
||
|
export default defineComponent({
|
||
![]() |
name: 'ASubMenu',
|
||
|
isSubMenu: true,
|
||
![]() |
inheritAttrs: false,
|
||
![]() |
props: { ...VcSubMenu.props },
|
||
![]() |
setup() {
|
||
|
return {
|
||
![]() |
menuPropsContext: inject<MenuContextProps>('menuPropsContext', {}),
|
||
![]() |
};
|
||
![]() |
},
|
||
|
methods: {
|
||
|
onKeyDown(e) {
|
||
![]() |
(this.$refs.subMenu as any).onKeyDown(e);
|
||
![]() |
},
|
||
|
},
|
||
|
|
||
|
render() {
|
||
![]() |
const { $slots, $attrs } = this;
|
||
![]() |
const { rootPrefixCls, popupClassName } = this.$props;
|
||
|
const { theme: antdMenuTheme } = this.menuPropsContext;
|
||
|
const props = {
|
||
![]() |
...this.$props,
|
||
|
popupClassName: classNames(`${rootPrefixCls}-${antdMenuTheme}`, popupClassName),
|
||
![]() |
ref: 'subMenu',
|
||
![]() |
...$attrs,
|
||
|
...Omit($slots, ['default']),
|
||
![]() |
};
|
||
![]() |
return <VcSubMenu {...props}>{getSlot(this)}</VcSubMenu>;
|
||
![]() |
},
|
||
![]() |
});
|