UNPKG

tdesign-vue-next

Version:
1 lines 28.1 kB
{"version":3,"file":"submenu.mjs","sources":["../../../components/menu/submenu.tsx"],"sourcesContent":["import {\n defineComponent,\n computed,\n inject,\n ref,\n provide,\n onMounted,\n getCurrentInstance,\n watch,\n Slots,\n toRefs,\n reactive,\n nextTick,\n Transition,\n} from 'vue';\nimport props from './submenu-props';\nimport { TdMenuInterface, TdSubMenuInterface, TdMenuItem } from './types';\nimport FakeArrow from '../common-components/fake-arrow';\nimport { useRipple, useContent, useTNodeJSX, usePrefixClass, useCollapseAnimation } from '@tdesign/shared-hooks';\n\nimport { Popup, PopupPlacement } from '../popup';\nimport { isFunction } from 'lodash-es';\nimport { TdSubmenuProps } from './type';\n\nexport default defineComponent({\n name: 'TSubmenu',\n props,\n setup(props: TdSubmenuProps, { attrs, slots }) {\n const classPrefix = usePrefixClass();\n const renderTNodeJSX = useTNodeJSX();\n const renderContent = useContent();\n\n const instance = getCurrentInstance();\n const menu = inject<TdMenuInterface>('TdMenu');\n const { value } = toRefs(props);\n const { theme, activeValues, expandValues, isHead, open } = menu;\n\n const submenu = inject<TdSubMenuInterface>('TdSubmenu', {});\n const { setSubPopup, closeParentPopup } = submenu;\n\n const mode = computed(() => attrs.expandType || menu.mode.value);\n\n const menuItems = ref([]); // 因composition-api的缺陷,不用reactive, 详见:https://github.com/vuejs/composition-api/issues/637\n const isActive = computed(() => activeValues.value.indexOf(props.value) > -1);\n const popupVisible = ref(false);\n const isCursorInPopup = ref(false);\n const rippleColor = computed(() => (theme.value === 'light' ? '#E7E7E7' : '#383838'));\n const isOpen = computed(() => {\n if (mode.value === 'popup') {\n return popupVisible.value;\n }\n return expandValues ? expandValues.value?.includes(props.value) : false;\n });\n const isNested = ref(false); // 是否嵌套\n\n const popupWrapperRef = ref<HTMLElement>();\n const subPopupRef = ref<HTMLElement>();\n const submenuRef = ref<HTMLElement>();\n const transitionClass = usePrefixClass('slide-down');\n useRipple(submenuRef, rippleColor);\n\n const classes = computed(() => [\n `${classPrefix.value}-submenu`,\n {\n [`${classPrefix.value}-is-disabled`]: props.disabled,\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n },\n ]);\n const overlayInnerClassName = computed(() => [\n `${classPrefix.value}-menu__popup`,\n `${classPrefix.value}-is-${isHead ? 'horizontal' : 'vertical'}`,\n {\n [`${classPrefix.value}-is-opened`]: popupVisible.value,\n },\n props.popupProps?.overlayInnerClassName,\n ]);\n const overlayClassName = computed(() => [\n `${classPrefix.value}-menu--${theme.value}`,\n isHead && `${classPrefix.value}-is-head-menu`,\n { [`${classPrefix.value}-menu-is-nested`]: isNested.value },\n props.popupProps?.overlayClassName,\n ]);\n const submenuClass = computed(() => [\n `${classPrefix.value}-menu__item`,\n `${classPrefix.value}-menu__item-spacer`,\n `${classPrefix.value}-menu__item-spacer--${isHead && !isNested.value ? 'bottom' : 'right'}`,\n {\n [`${classPrefix.value}-is-disabled`]: props.disabled,\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n [`${classPrefix.value}-is-active`]: isActive.value,\n },\n ]);\n const subClass = computed(() => [\n `${classPrefix.value}-menu__sub`,\n {\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n },\n ]);\n const arrowClass = computed(() => [\n {\n [`${classPrefix.value}-fake-arrow--active`]: isOpen.value,\n },\n ]);\n\n provide<TdSubMenuInterface>(\n 'TdSubmenu',\n reactive({\n value,\n addMenuItem: (item: TdMenuItem) => {\n menuItems.value.push(item);\n if (submenu) {\n submenu.addMenuItem(item);\n }\n },\n setSubPopup: (ref: HTMLElement) => {\n subPopupRef.value = ref;\n },\n closeParentPopup: (e: MouseEvent) => {\n const related = e.relatedTarget as HTMLElement;\n if (loopInPopup(related)) return;\n handleMouseLeavePopup(e);\n },\n }),\n );\n\n const passSubPopupRefToParent = (val: HTMLElement) => {\n if (isFunction(setSubPopup)) {\n setSubPopup(val);\n }\n };\n\n // methods\n const handleMouseEnter = () => {\n if (props.disabled) return;\n setTimeout(() => {\n if (!popupVisible.value) {\n open(props.value);\n\n // popupVisible设置为TRUE之后打开popup,因此需要在nextTick中确保可以拿到ref值\n nextTick().then(() => {\n passSubPopupRefToParent(popupWrapperRef.value);\n });\n }\n popupVisible.value = true;\n }, 0);\n };\n\n const targetInPopup = (el: HTMLElement) => el?.classList.contains(`${classPrefix.value}-menu__popup`);\n const loopInPopup = (el: HTMLElement): boolean => {\n if (!el) return false;\n return targetInPopup(el) || loopInPopup(el.parentElement);\n };\n\n const handleMouseLeave = (e: MouseEvent) => {\n setTimeout(() => {\n const inPopup = targetInPopup(e.relatedTarget as HTMLElement);\n\n if (isCursorInPopup.value || inPopup) return;\n popupVisible.value = false;\n }, 0);\n };\n\n const handleMouseLeavePopup = (e: any) => {\n const { toElement, relatedTarget } = e;\n let target = toElement || relatedTarget;\n\n if (target === subPopupRef.value) return;\n\n const isSubmenu = (el: Element) => el === submenuRef.value;\n while (target !== null && target !== document && !isSubmenu(target)) {\n target = target.parentNode;\n }\n\n isCursorInPopup.value = false;\n\n if (!isSubmenu(target)) {\n popupVisible.value = false;\n }\n\n closeParentPopup?.(e);\n };\n const handleEnterPopup = () => {\n isCursorInPopup.value = true;\n };\n\n const handleSubmenuItemClick = () => {\n if (props.disabled) return;\n open(props.value);\n };\n\n const renderPopup = (triggerElement: Slots[]) => {\n let placement: PopupPlacement = 'right-top';\n if (!isNested.value && isHead) {\n placement = 'bottom-left';\n }\n\n const popupWrapper = (\n <div\n ref={popupWrapperRef}\n class={[\n `${classPrefix.value}-menu__spacer`,\n `${classPrefix.value}-menu__spacer--${!isNested.value && isHead ? 'top' : 'left'}`,\n ]}\n onMouseenter={handleEnterPopup}\n onMouseleave={handleMouseLeavePopup}\n >\n <ul class={`${classPrefix.value}-menu__popup-wrapper`}>{renderContent('default', 'content')}</ul>\n </div>\n );\n\n const slots = {\n content: () => popupWrapper,\n };\n\n const realPopup = (\n <Popup\n {...(props.popupProps ?? {})}\n overlayInnerClassName={[...overlayInnerClassName.value]}\n overlayClassName={[...overlayClassName.value]}\n visible={popupVisible.value}\n placement={placement}\n v-slots={slots}\n >\n <div ref={submenuRef} class={submenuClass.value}>\n {triggerElement}\n </div>\n </Popup>\n );\n\n return realPopup;\n };\n\n const renderHeadSubmenu = () => {\n const icon = renderTNodeJSX('icon');\n const normalSubmenu = [\n <div ref={submenuRef} class={submenuClass.value} onClick={handleSubmenuItemClick}>\n {icon}\n <span class={[`${classPrefix.value}-menu__content`]}>{renderTNodeJSX('title', { silent: true })}</span>\n </div>,\n <ul style=\"opacity: 0; width: 0; height: 0; overflow: hidden\">{renderContent('default', 'content')}</ul>,\n ];\n\n const needRotate = mode.value === 'popup' && isNested.value;\n\n const triggerElement = [\n icon,\n <span class={[`${classPrefix.value}-menu__content`]}>{renderTNodeJSX('title', { silent: true })}</span>,\n <FakeArrow\n overlayClassName={/menu/i.test(instance?.parent.proxy.$options.name) ? arrowClass.value : null}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)` }}\n />,\n ];\n\n return mode.value === 'normal' ? normalSubmenu : renderPopup(triggerElement);\n };\n\n const renderSubmenu = () => {\n const hasContent = slots.content || slots.default;\n const icon = renderTNodeJSX('icon');\n const child = renderContent('default', 'content');\n let parent = instance.parent;\n let paddingLeft = 44;\n\n while (parent && parent.type.name !== 'TMenu') {\n if (parent.type.name === 'TSubmenu') {\n paddingLeft += 16;\n }\n parent = parent.parent;\n }\n\n const { beforeEnter, enter, afterEnter, beforeLeave, leave, afterLeave } = useCollapseAnimation();\n\n const needRotate = mode.value === 'popup' && isNested.value;\n\n const normalSubmenu = [\n <div ref={submenuRef} class={submenuClass.value} onClick={handleSubmenuItemClick}>\n {icon}\n <span class={[`${classPrefix.value}-menu__content`]}>{renderTNodeJSX('title', { silent: true })}</span>\n {hasContent && (\n <FakeArrow\n overlayClassName={arrowClass.value}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)` }}\n />\n )}\n </div>,\n <Transition\n name={transitionClass.value}\n onBeforeEnter={beforeEnter}\n onEnter={enter}\n onAfterEnter={afterEnter}\n onBeforeLeave={beforeLeave}\n onLeave={leave}\n onAfterLeave={afterLeave}\n >\n <ul v-show={isOpen.value} class={subClass.value} style={{ '--padding-left': `${paddingLeft}px` }}>\n {child}\n </ul>\n </Transition>,\n ];\n\n const triggerElement = [\n icon,\n <span class={[`${classPrefix.value}-menu__content`]}>{renderTNodeJSX('title', { silent: true })}</span>,\n <FakeArrow\n overlayClassName={/menu/i.test(parent.proxy.$options.name) ? arrowClass.value : null}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)`, 'margin-left': 'auto' }}\n />,\n ];\n\n return mode.value === 'normal' ? normalSubmenu : renderPopup(triggerElement);\n };\n\n watch(popupVisible, (visible) => {\n menu.open(props.value, visible ? 'add' : 'remove');\n });\n\n watch(popupWrapperRef, () => {\n // 第一次触发nextTick会取空值,导致subPopupRef拿不到对应的DOM\n passSubPopupRefToParent(popupWrapperRef.value);\n });\n\n onMounted(() => {\n menu?.vMenu?.add({ value: props.value, parent: submenu?.value, vnode: slots.default });\n let node = instance.parent;\n\n while (node && !/^t(head)?menu/i.test(node?.type.name)) {\n if (/submenu/i.test(node?.type.name)) {\n isNested.value = true;\n break;\n }\n node = node?.parent;\n }\n });\n\n return () => {\n let child = null;\n let events = {};\n let virtualChild;\n\n if (mode.value === 'popup') {\n events = {\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave,\n };\n // popup模式下且存在多层的特殊封装场景中,需要将子节点挂载进行计算高亮\n if (activeValues.value.length < 2)\n virtualChild = <div style=\"display:none\">{renderContent('default', 'content')}</div>;\n }\n if (Object.keys(slots).length > 0) {\n child = isHead ? renderHeadSubmenu() : renderSubmenu();\n }\n\n return (\n <li class={classes.value} {...events}>\n {child}\n {virtualChild}\n </li>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","setup","attrs","_ref","slots","classPrefix","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderContent","useContent","instance","getCurrentInstance","menu","inject","_toRefs","toRefs","value","theme","activeValues","expandValues","isHead","open","submenu","setSubPopup","closeParentPopup","mode","computed","expandType","menuItems","ref","isActive","indexOf","popupVisible","isCursorInPopup","rippleColor","isOpen","_expandValues$value","includes","isNested","popupWrapperRef","subPopupRef","submenuRef","transitionClass","useRipple","classes","concat","_defineProperty","disabled","overlayInnerClassName","_props2$popupProps","popupProps","overlayClassName","_props2$popupProps2","submenuClass","subClass","arrowClass","provide","reactive","addMenuItem","item","push","e","related","relatedTarget","loopInPopup","handleMouseLeavePopup","passSubPopupRefToParent","val","isFunction","handleMouseEnter","setTimeout","nextTick","then","targetInPopup","el","classList","contains","parentElement","handleMouseLeave","inPopup","toElement","target","isSubmenu","document","parentNode","handleEnterPopup","handleSubmenuItemClick","renderPopup","triggerElement","_props2$popupProps3","placement","popupWrapper","_createVNode","content","realPopup","_toConsumableArray","_objectSpread","_default","renderHeadSubmenu","icon","normalSubmenu","silent","needRotate","test","parent","proxy","$options","transform","renderSubmenu","hasContent","child","paddingLeft","type","_useCollapseAnimation","useCollapseAnimation","beforeEnter","enter","afterEnter","beforeLeave","leave","afterLeave","FakeArrow","Transition","_withDirectives","_vShow","watch","visible","onMounted","_menu$vMenu","vMenu","add","vnode","node","_node","_node2","_node3","events","virtualChild","onMouseenter","onMouseleave","length","Object","keys","_mergeProps"],"mappings":"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"}