xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 5.49 kB
Source Map (JSON)
{"version":3,"file":"anchor-item.mjs","sources":["../../src/anchor/anchor-item.tsx"],"sourcesContent":["import { defineComponent, h, VNodeChild, onMounted, onUnmounted, inject, watch } from 'vue';\nimport { ANCHOR_SHARP_REGEXP } from './utils';\nimport props from './anchor-item-props';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { AnchorInjectionKey } from './constants';\nimport isFunction from 'lodash/isFunction';\nimport isString from 'lodash/isString';\n\nconst localProps = {\n ...props,\n href: {\n type: String,\n required: true,\n validator(v: string): boolean {\n return ANCHOR_SHARP_REGEXP.test(v);\n },\n },\n};\n\nexport default defineComponent({\n name: 'XAnchorItem',\n inject: {\n tAnchor: { default: undefined },\n },\n props: localProps,\n setup(props, { slots }) {\n const anchor = inject(AnchorInjectionKey, undefined);\n const CLASSNAME_PREFIX = usePrefixClass('anchor__item');\n const { STATUS } = useCommonClassName();\n const register = () => {\n anchor.registerLink(props.href as string);\n };\n const unregister = () => {\n const { href } = props;\n if (!href) return;\n anchor.unregisterLink(href);\n };\n const handleClick = (e: MouseEvent) => {\n const { href, title } = props;\n anchor.handleScrollTo(href);\n anchor.handleLinkClick({ href, title: isString(title) ? title : undefined, e });\n };\n const renderTitle = () => {\n const { title } = props;\n const { title: titleSlot } = slots;\n let titleVal: VNodeChild;\n if (isString(title)) {\n titleVal = title;\n } else if (isFunction(title)) {\n titleVal = title(h);\n } else if (titleSlot) {\n titleVal = titleSlot(null);\n }\n return titleVal;\n };\n watch(\n () => props.href,\n () => {\n unregister();\n register();\n },\n { immediate: true },\n );\n onMounted(() => {\n register();\n });\n onUnmounted(() => {\n unregister();\n });\n return () => {\n const { href, target } = props;\n const { default: children, title: titleSlot } = slots;\n const title = renderTitle();\n const titleAttr = isString(title) ? title : null;\n const active = anchor.active === href;\n const wrapperClass = {\n [CLASSNAME_PREFIX.value]: true,\n [STATUS.value.active]: active,\n };\n const titleClass = {\n [`${CLASSNAME_PREFIX.value}-link`]: true,\n };\n return (\n <div class={wrapperClass}>\n <a href={href} title={titleAttr} class={titleClass} target={target} onClick={handleClick}>\n {titleSlot ? titleSlot(null) : title}\n </a>\n {children && children(null)}\n </div>\n );\n };\n },\n});\n"],"names":["href","type","required","name","inject","tAnchor","props","setup","anchor","e","isString","titleVal","isFunction","watch","unregister","register","immediate","onMounted","onUnmounted","_createVNode"],"mappings":"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"}