winbox-ui-next
Version:
We Design Vue 2.0: A Vue.js 3 UI Library
133 lines (132 loc) • 4.12 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var vue = require("vue");
var subMenuInline = require("./sub-menu-inline.js");
var subMenuPop = require("./sub-menu-pop.js");
var useMenu = require("./hooks/use-menu.js");
var useLevel = require("./hooks/use-level.js");
var index = require("../icon/icon-down/index.js");
var index$1 = require("../icon/icon-right/index.js");
var useMenuContext = require("./hooks/use-menu-context.js");
var useMenuDataCollector = require("./hooks/use-menu-data-collector.js");
var SubMenu = vue.defineComponent({
name: "SubMenu",
props: {
key: {
type: String
},
title: {
type: String
},
selectable: {
type: Boolean
},
popup: {
type: [Boolean, Function],
default: false
},
popupMaxHeight: {
type: [Boolean, Number],
default: void 0
}
},
setup(props, {
attrs
}) {
const {
key
} = useMenu();
const {
level
} = useLevel["default"]();
const {
popup
} = vue.toRefs(props);
const menuContext = useMenuContext();
const computedPopup = vue.computed(() => {
const {
mode,
collapsed,
inTrigger
} = menuContext;
const forcePopup = !!(typeof popup.value === "function" ? popup.value(level.value) : popup.value);
return forcePopup || collapsed || inTrigger || mode !== "vertical";
});
const {
subMenuKeys,
menuItemKeys
} = useMenuDataCollector["default"]({
key: key.value,
type: "subMenu"
});
const isChildrenSelected = vue.computed(() => {
const selectedKeys = menuContext.selectedKeys || [];
const checkSelected = (menuKeys) => {
for (let i = 0; i < selectedKeys.length; i++) {
const selectedKey = selectedKeys[i];
if (menuKeys.includes(selectedKey)) {
return true;
}
}
return false;
};
return checkSelected(subMenuKeys.value) || checkSelected(menuItemKeys.value);
});
return {
subMenuKeys,
menuItemKeys,
isChildrenSelected,
props,
attrs,
computedKey: key,
computedPopup,
expandIconDown: vue.toRef(menuContext, "expandIconDown"),
expandIconRight: vue.toRef(menuContext, "expandIconRight")
};
},
render() {
const {
props,
attrs,
computedKey,
computedPopup,
expandIconDown,
expandIconRight,
isChildrenSelected
} = this;
const _slots = __spreadProps(__spreadValues({}, this.$slots), {
"expand-icon-down": this.$slots["expand-icon-down"] || expandIconDown || (() => vue.createVNode(index, null, null)),
"expand-icon-right": this.$slots["expand-icon-right"] || expandIconRight || (() => vue.createVNode(index$1, null, null))
});
return computedPopup ? vue.createVNode(subMenuPop, vue.mergeProps({
"key": computedKey,
"title": props.title,
"selectable": props.selectable,
"isChildrenSelected": isChildrenSelected,
"popupMaxHeight": props.popupMaxHeight
}, attrs), _slots) : vue.createVNode(subMenuInline, vue.mergeProps({
"key": computedKey,
"title": props.title,
"isChildrenSelected": isChildrenSelected
}, attrs), _slots);
}
});
module.exports = SubMenu;