forked from didirus/AstralRinth
* refactor: migrate to common eslint+prettier configs * fix: prettier frontend * feat: config changes * fix: lint issues * fix: lint * fix: type imports * fix: cyclical import issue * fix: lockfile * fix: missing dep * fix: switch to tabs * fix: continue switch to tabs * fix: rustfmt parity * fix: moderation lint issue * fix: lint issues * fix: ui intl * fix: lint issues * Revert "fix: rustfmt parity" This reverts commit cb99d2376c321d813d4b7fc7e2a213bb30a54711. * feat: revert last rs
58 lines
1.4 KiB
Vue
58 lines
1.4 KiB
Vue
<script setup lang="ts">
|
|
import { CheckIcon, MailIcon } from '@modrinth/assets'
|
|
import { ButtonStyled } from '@modrinth/ui'
|
|
import { ref } from 'vue'
|
|
|
|
import { useBaseFetch } from '~/composables/fetch.js'
|
|
|
|
const auth = await useAuth()
|
|
const showSubscriptionConfirmation = ref(false)
|
|
const showSubscribeButton = useAsyncData(
|
|
async () => {
|
|
if (auth.value?.user) {
|
|
try {
|
|
const { subscribed } = await useBaseFetch('auth/email/subscribe', {
|
|
method: 'GET',
|
|
})
|
|
return !subscribed
|
|
} catch {
|
|
return true
|
|
}
|
|
} else {
|
|
return false
|
|
}
|
|
},
|
|
{ watch: [auth], server: false },
|
|
)
|
|
|
|
async function subscribe() {
|
|
try {
|
|
await useBaseFetch('auth/email/subscribe', {
|
|
method: 'POST',
|
|
})
|
|
showSubscriptionConfirmation.value = true
|
|
} catch {
|
|
// Ignored
|
|
} finally {
|
|
setTimeout(() => {
|
|
showSubscriptionConfirmation.value = false
|
|
showSubscribeButton.status.value = 'success'
|
|
showSubscribeButton.data.value = false
|
|
}, 2500)
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<ButtonStyled
|
|
v-if="showSubscribeButton.status.value === 'success' && showSubscribeButton.data.value"
|
|
color="brand"
|
|
type="outlined"
|
|
>
|
|
<button v-tooltip="`Subscribe to the Modrinth newsletter`" @click="subscribe">
|
|
<template v-if="!showSubscriptionConfirmation"> <MailIcon /> Subscribe </template>
|
|
<template v-else> <CheckIcon /> Subscribed! </template>
|
|
</button>
|
|
</ButtonStyled>
|
|
</template>
|