fix(LinkCustom): improve prop binding and prevent error with externals

This commit is contained in:
Benjamin Canac
2023-07-19 13:08:11 +02:00
parent 0f06b7c3fe
commit 914d156103

View File

@@ -1,41 +1,51 @@
<template>
<button v-if="!$attrs.to" v-bind="$attrs" :class="inactiveClass">
<button v-if="!to" v-bind="$attrs" :class="inactiveClass">
<slot />
</button>
<NuxtLink
v-else
v-slot="{ href, navigate, exact, isActive, isExactActive }"
:to="$attrs.to"
v-slot="{ href, target, rel, navigate, exact, isActive, isExactActive, isExternal }"
v-bind="$props"
custom
>
<a
v-bind="$attrs"
:href="href"
:rel="rel"
:target="target"
:class="resolveLinkClass({ isActive, isExactActive })"
@click="navigate"
@click="(e) => !isExternal && navigate(e)"
>
<slot v-bind="{ isActive: exact ? isExactActive : isActive }" />
</a>
</NuxtLink>
</template>
<script setup lang="ts">
const props = defineProps({
activeClass: {
type: String,
default: ''
<script lang="ts">
import { defineComponent } from 'vue'
import { NuxtLink } from '#components'
export default defineComponent({
inheritAttrs: false,
props: {
...NuxtLink.props,
inactiveClass: {
type: String,
default: undefined
}
},
inactiveClass: {
type: String,
default: ''
setup (props) {
function resolveLinkClass ({ isActive, isExactActive }: { isActive: boolean, isExactActive: boolean }) {
if (isActive || isExactActive) {
return props.activeClass
}
return props.inactiveClass
}
return {
resolveLinkClass
}
}
})
function resolveLinkClass ({ isActive, isExactActive }: { isActive: boolean, isExactActive: boolean }) {
if (isActive || isExactActive) {
return props.activeClass
}
return props.inactiveClass
}
</script>