UNPKG

zmp-vue

Version:

Build full featured iOS & Android apps using ZMP & Vue

150 lines (124 loc) 4.68 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _vue = require("vue"); var _utils = require("../shared/utils"); var _mixins = require("../shared/mixins"); var _useRouteProps = require("../shared/use-route-props"); var _useIcon = require("../shared/use-icon"); var _zmp = require("../shared/zmp"); var _useTooltip = require("../shared/use-tooltip"); var _useIcon2 = _interopRequireDefault(require("./use-icon")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var _hoisted_1 = { key: 0, class: "menu-item-content" }; function render(_ctx, _cache) { var _component_zmp_use_icon = (0, _vue.resolveComponent)("zmp-use-icon"); return (0, _vue.openBlock)(), (0, _vue.createBlock)((0, _vue.resolveDynamicComponent)(_ctx.tag), (0, _vue.mergeProps)({ ref: "elRef", class: _ctx.classes }, _ctx.attrs, { onClick: _ctx.onClick }), { default: (0, _vue.withCtx)(function () { return [_ctx.text || _ctx.$slots.text || _ctx.icon ? ((0, _vue.openBlock)(), (0, _vue.createBlock)("div", _hoisted_1, [(0, _vue.createTextVNode)((0, _vue.toDisplayString)(_ctx.text) + " ", 1), _ctx.icon ? ((0, _vue.openBlock)(), (0, _vue.createBlock)(_component_zmp_use_icon, { key: 0, icon: _ctx.icon }, null, 8, ["icon"])) : (0, _vue.createCommentVNode)("", true), (0, _vue.renderSlot)(_ctx.$slots, "text")])) : (0, _vue.createCommentVNode)("", true), (0, _vue.renderSlot)(_ctx.$slots, "default")]; }), _: 3 }, 16, ["class", "onClick"]); } var _default = { name: 'zmp-menu-item', render: render, components: { zmpUseIcon: _useIcon2.default }, props: _extends({ text: String, iconOnly: Boolean, href: String, link: Boolean, target: String, dropdown: Boolean, tooltip: String, tooltipTrigger: String }, _mixins.colorProps, _mixins.routerProps, _mixins.actionsProps, _mixins.iconProps), emits: ['click', 'menu:opened', 'menu:closed'], setup: function setup(props, _ref) { var slots = _ref.slots, emit = _ref.emit; var elRef = (0, _vue.ref)(null); (0, _useTooltip.useTooltip)(elRef, props); var onClick = function onClick(e) { emit('click', e); }; var onOpened = function onOpened(el) { if (elRef.value !== el) return; emit('menu:opened', el); }; var onClosed = function onClosed(el) { if (elRef.value !== el) return; emit('menu:closed', el); }; (0, _useRouteProps.useRouteProps)(elRef, props); var attachEvents = function attachEvents() { (0, _zmp.zmpready)(function () { _zmp.zmp.on('menuOpened', onOpened); _zmp.zmp.on('menuClosed', onClosed); }); }; var detachEvents = function detachEvents() { _zmp.zmp.off('menuOpened', onOpened); _zmp.zmp.off('menuClosed', onOpened); }; (0, _vue.onMounted)(function () { return attachEvents(); }); (0, _vue.onBeforeUnmount)(function () { return detachEvents(); }); var icon = (0, _vue.computed)(function () { return (0, _useIcon.useIcon)(props); }); var tag = (0, _vue.computed)(function () { var isLink = props.link || props.href || props.href === ''; return isLink ? 'a' : 'div'; }); var classes = (0, _vue.computed)(function () { var iconOnlyComputed; if (props.iconOnly || !props.text && !slots.text) { iconOnlyComputed = true; } else { iconOnlyComputed = false; } var isDropdown = props.dropdown || props.dropdown === ''; return (0, _utils.classNames)({ 'menu-item': true, 'menu-item-dropdown': isDropdown, 'icon-only': iconOnlyComputed }, (0, _mixins.colorClasses)(props), (0, _mixins.routerClasses)(props), (0, _mixins.actionsClasses)(props)); }); var attrs = (0, _vue.computed)(function () { var hrefComputed = props.href; if (typeof hrefComputed === 'undefined' && props.link) hrefComputed = '#'; return _extends({ href: hrefComputed, target: props.target }, (0, _mixins.routerAttrs)(props), (0, _mixins.actionsAttrs)(props)); }); return { tag: tag, classes: classes, attrs: attrs, icon: icon, onClick: onClick, elRef: elRef }; } }; exports.default = _default;