UNPKG

vuestic-ui

Version:
1 lines 5.22 kB
{"version":3,"file":"useRouterLink.mjs","sources":["../../../../src/composables/useRouterLink.ts"],"sourcesContent":["import { computed, PropType, getCurrentInstance, type ExtractPropTypes } from 'vue'\n\nimport { useGlobalConfig } from '../services/global-config'\n\nexport const useRouterLinkProps = {\n tag: { type: String, default: 'span' },\n to: { type: [String, Object] as PropType<string | Record<string, any>>, default: undefined },\n replace: { type: Boolean, default: undefined },\n append: { type: Boolean, default: undefined },\n exact: { type: Boolean, default: undefined },\n activeClass: { type: String, default: undefined },\n exactActiveClass: { type: String, default: undefined },\n href: { type: String, default: undefined },\n target: { type: String, default: undefined },\n disabled: { type: Boolean, default: false },\n}\n\nexport const useRouterLink = (props: ExtractPropTypes<typeof useRouterLinkProps>) => {\n const currentInstance = getCurrentInstance()\n\n const globalProperties = computed(() => currentInstance?.appContext.config.globalProperties)\n const vueRouter = computed(() => globalProperties.value?.$router)\n const vueRoute = computed(() => globalProperties.value?.$route)\n\n const { getGlobalConfig } = useGlobalConfig()\n\n const tagComputed = computed(() => {\n if (props.disabled) { return props.tag }\n\n if (props.href && !props.to) { return 'a' }\n\n const globalConfig = getGlobalConfig()\n\n if (globalConfig.routerComponent && props.to) { return globalConfig.routerComponent }\n\n if (props.to && vueRouter.value !== undefined) { return 'router-link' }\n if (props.to && vueRouter.value === undefined) { return 'a' }\n\n return props.tag || 'div'\n })\n\n const isLinkTag = computed(() => {\n if (props.disabled) { return false }\n\n return Boolean(props.href || props.to)\n })\n\n const linkAttributesComputed = computed(() => {\n if (!isLinkTag.value) { return {} }\n\n return tagComputed.value === 'a'\n ? {\n target: props.target,\n href: hrefComputed.value,\n }\n : {\n target: props.target,\n to: props.to,\n replace: props.replace,\n append: props.append,\n activeClass: props.activeClass,\n exact: props.exact,\n exactActiveClass: props.exactActiveClass,\n }\n })\n\n const isActiveRouterLink = computed(() => {\n if (!vueRouter.value || !props.to) { return false }\n\n const to = vueRouter.value.resolve(props.to).href\n const currentHref = vueRouter.value.currentRoute.value.path\n\n return to.replace('#', '') === currentHref.replace('#', '')\n })\n\n const hrefComputed = computed(() => {\n if (props.href) { return props.href }\n\n if (vueRoute.value === undefined && props.to) {\n return props.to\n }\n\n // to resolve href on server for SEO optimization\n // https://github.com/nuxt/nuxt.js/issues/8204\n return props.to ? vueRouter.value?.resolve(props.to, vueRoute.value).href : undefined\n })\n\n return {\n isLinkTag,\n tagComputed,\n hrefComputed,\n isActiveRouterLink,\n linkAttributesComputed,\n }\n}\n"],"names":[],"mappings":"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"}