76 lines
3.8 KiB
JavaScript
Raw Normal View History

2024-01-29 09:26:07 +08:00
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NMenuOption = exports.menuItemProps = void 0;
const vue_1 = require("vue");
const vooks_1 = require("vooks");
const _utils_1 = require("../../_utils");
const tooltip_1 = require("../../tooltip");
const MenuOptionContent_1 = __importDefault(require("./MenuOptionContent"));
const use_menu_child_1 = require("./use-menu-child");
const use_menu_child_props_1 = require("./use-menu-child-props");
exports.menuItemProps = Object.assign(Object.assign({}, use_menu_child_props_1.useMenuChildProps), { tmNode: {
type: Object,
required: true
}, disabled: Boolean, icon: Function, onClick: Function });
exports.NMenuOption = (0, vue_1.defineComponent)({
name: 'MenuOption',
props: exports.menuItemProps,
setup(props) {
const MenuChild = (0, use_menu_child_1.useMenuChild)(props);
const { NSubmenu, NMenu } = MenuChild;
const { props: menuProps, mergedClsPrefixRef, mergedCollapsedRef } = NMenu;
const submenuDisabledRef = NSubmenu
? NSubmenu.mergedDisabledRef
: { value: false };
const mergedDisabledRef = (0, vue_1.computed)(() => {
return submenuDisabledRef.value || props.disabled;
});
function doClick(e) {
const { onClick } = props;
if (onClick)
onClick(e);
}
function handleClick(e) {
if (!mergedDisabledRef.value) {
NMenu.doSelect(props.internalKey, props.tmNode.rawNode);
doClick(e);
}
}
return {
mergedClsPrefix: mergedClsPrefixRef,
dropdownPlacement: MenuChild.dropdownPlacement,
paddingLeft: MenuChild.paddingLeft,
iconMarginRight: MenuChild.iconMarginRight,
maxIconSize: MenuChild.maxIconSize,
activeIconSize: MenuChild.activeIconSize,
mergedTheme: NMenu.mergedThemeRef,
menuProps,
dropdownEnabled: (0, vooks_1.useMemo)(() => {
2024-08-02 18:19:39 +08:00
return (props.root
&& mergedCollapsedRef.value
&& menuProps.mode !== 'horizontal'
&& !mergedDisabledRef.value);
2024-01-29 09:26:07 +08:00
}),
selected: (0, vooks_1.useMemo)(() => {
if (NMenu.mergedValueRef.value === props.internalKey)
return true;
return false;
}),
mergedDisabled: mergedDisabledRef,
handleClick
};
},
render() {
const { mergedClsPrefix, mergedTheme, tmNode, menuProps: { renderLabel, nodeProps } } = this;
const attrs = nodeProps === null || nodeProps === void 0 ? void 0 : nodeProps(tmNode.rawNode);
return ((0, vue_1.h)("div", Object.assign({}, attrs, { role: "menuitem", class: [`${mergedClsPrefix}-menu-item`, attrs === null || attrs === void 0 ? void 0 : attrs.class] }),
(0, vue_1.h)(tooltip_1.NTooltip, { theme: mergedTheme.peers.Tooltip, themeOverrides: mergedTheme.peerOverrides.Tooltip, trigger: "hover", placement: this.dropdownPlacement, disabled: !this.dropdownEnabled || this.title === undefined, internalExtraClass: ['menu-tooltip'] }, {
default: () => renderLabel ? renderLabel(tmNode.rawNode) : (0, _utils_1.render)(this.title),
trigger: () => ((0, vue_1.h)(MenuOptionContent_1.default, { tmNode: tmNode, clsPrefix: mergedClsPrefix, paddingLeft: this.paddingLeft, iconMarginRight: this.iconMarginRight, maxIconSize: this.maxIconSize, activeIconSize: this.activeIconSize, selected: this.selected, title: this.title, extra: this.extra, disabled: this.mergedDisabled, icon: this.icon, onClick: this.handleClick }))
})));
}
});