xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 8.33 kB
Source Map (JSON)
{"version":3,"file":"menu-item.mjs","sources":["../../src/menu/menu-item.tsx"],"sourcesContent":["import { defineComponent, computed, inject, onMounted, ref, toRefs, getCurrentInstance } from 'vue';\nimport props from './menu-item-props';\nimport { TdMenuInterface, TdSubMenuInterface } from './const';\nimport { renderContent, renderTNodeJSX } from '../utils/render-tnode';\nimport { emitEvent } from '../utils/event';\nimport useRipple from '../hooks/useRipple';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport Tooltip from '../tooltip';\n\nexport default defineComponent({\n name: 'XMenuItem',\n props: { ...props },\n emits: ['click'],\n setup(props, ctx) {\n const { href, target = '_self' } = toRefs(props);\n const classPrefix = usePrefixClass();\n const menu = inject<TdMenuInterface>('TdMenu');\n const itemRef = ref<HTMLElement>();\n useRipple(itemRef);\n const submenu = inject<TdSubMenuInterface>('TdSubmenu', null);\n const active = computed(() => menu.activeValue.value === props.value);\n const collapsed = computed(() => menu.collapsed?.value);\n const classes = computed(() => [\n `${classPrefix.value}-menu__item`,\n {\n [`${classPrefix.value}-is-active`]: active.value,\n [`${classPrefix.value}-is-disabled`]: props.disabled,\n [`${classPrefix.value}-menu__item--plain`]: !ctx.slots.icon && !props.icon,\n [`${classPrefix.value}-submenu__item`]: !!submenu && !menu.isHead,\n },\n ]);\n // lifetimes\n onMounted(() => {\n menu?.vMenu?.add({ value: props.value, parent: submenu?.value, vnode: ctx.slots.default });\n });\n\n return {\n classPrefix,\n menu,\n active,\n collapsed,\n classes,\n itemRef,\n href,\n target,\n };\n },\n methods: {\n handleClick(e: MouseEvent) {\n e.stopPropagation();\n if (this.disabled) return;\n this.menu.select(this.value);\n emitEvent(this, 'click', { e, value: this.value });\n if (this.to || (this.routerLink && this.href)) {\n const router = this.router || this.$router;\n const methods: string = this.replace ? 'replace' : 'push';\n router[methods](this.to || this.href).catch((err: Error) => {\n // vue-router 3.1.0+ push/replace cause NavigationDuplicated error\n // https://github.com/vuejs/vue-router/issues/2872\n // 当前path和目标path相同时,会抛出NavigationDuplicated的错误\n if (\n err.name !== 'NavigationDuplicated' &&\n !err.message.includes('Avoided redundant navigation to current location')\n ) {\n throw err;\n }\n });\n }\n },\n },\n render() {\n const router: any = this.router || this.$router;\n\n const liContent = (\n <li ref=\"itemRef\" class={this.classes} onClick={this.handleClick}>\n {renderTNodeJSX(this, 'icon')}\n {this.routerLink ? (\n <a\n href={this.href ? this.href : this.to ? router?.resolve(this.to).href : ''}\n target={this.target}\n class={`${this.classPrefix}-menu__item-link`}\n onClick={(e) => e.preventDefault()}\n >\n <span class={`${this.classPrefix}-menu__content`}>{renderContent(this, 'default', 'content')}</span>\n </a>\n ) : this.href ? (\n <a\n href={this.href}\n target={this.target}\n class={`${this.classPrefix}-menu__item-link`}\n onClick={(e) => this.disabled && e.preventDefault()}\n >\n <span class={`${this.classPrefix}-menu__content`}>{renderContent(this, 'default', 'content')}</span>\n </a>\n ) : (\n <span class={`${this.classPrefix}-menu__content`}>{renderContent(this, 'default', 'content')}</span>\n )}\n </li>\n );\n\n const instance = getCurrentInstance();\n const node = instance.parent;\n // 菜单收起,且只有本身为一级菜单才需要显示 tooltip\n if (this.collapsed && /tmenu/i.test(node?.type.name)) {\n return (\n <Tooltip content={() => renderContent(this, 'default', 'content')} placement=\"right\">\n {liContent}\n </Tooltip>\n );\n }\n return liContent;\n },\n});\n"],"names":["_isVNode","name","props","setup","target","onMounted","menu","parent","classPrefix","active","collapsed","classes","itemRef","href","methods","emitEvent","e","router","_createVNode"],"mappings":"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"}