Files
Website/resources/js/components/SMFileLink.vue
2023-02-27 14:52:01 +10:00

43 lines
1.0 KiB
Vue

<template>
<a :href="computedUrl" :target="props.target" rel="noopener"
><slot></slot
></a>
</template>
<script setup lang="ts">
import { computed } from "vue";
import { useUserStore } from "../store/UserStore";
const props = defineProps({
href: {
type: String,
required: true,
},
target: {
type: String,
default: "_self",
},
});
const userStore = useUserStore();
/**
* Return the URL with a token param attached if the user is logged in and its a api media download request.
*/
const computedUrl = computed(() => {
const url = new URL(props.href);
const path = url.pathname;
const mediumRegex = /^\/media\/[a-zA-Z0-9]+\/download$/;
if (mediumRegex.test(path) && userStore.token) {
if (url.search) {
return `${props.href}&token=${encodeURIComponent(userStore.token)}`;
} else {
return `${props.href}?token=${encodeURIComponent(userStore.token)}`;
}
}
return props.href;
});
</script>