Initial Commit

This commit is contained in:
2026-10-03 20:07:49 +02:00
commit a1346c98b1
427 changed files with 59320 additions and 0 deletions
@@ -0,0 +1,51 @@
<script setup lang="ts">
import { toast } from 'vue-sonner'
import { Button } from '@/components/ui/button'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
const props = defineProps<{ uploadId: string, enabled: boolean }>()
const emit = defineEmits<{ change: [uploadId: string, enabled: boolean] }>()
const busy = shallowRef(false)
const label = computed(() => props.enabled
? 'Benachrichtigungen für diesen Thread deaktivieren'
: 'Benachrichtigungen für diesen Thread aktivieren')
async function toggle() {
if (busy.value) return
busy.value = true
const uploadId = props.uploadId
try {
const result = await $fetch<{ enabled: boolean }>(`/api/uploads/${uploadId}/subscription`, {
method: 'PUT',
body: { enabled: !props.enabled },
})
emit('change', uploadId, result.enabled)
toast.success(result.enabled ? 'Thread-Benachrichtigungen aktiviert' : 'Thread-Benachrichtigungen deaktiviert')
}
catch {
toast.error('Abonnement konnte nicht geändert werden')
}
finally {
busy.value = false
}
}
</script>
<template>
<Tooltip>
<TooltipTrigger as-child>
<Button
type="button"
:variant="enabled ? 'secondary' : 'ghost'"
size="icon"
:disabled="busy"
:aria-label="label"
:aria-pressed="enabled"
@click="toggle"
>
<Icon :name="enabled ? 'ph:bell-fill' : 'ph:bell-slash-fill'" />
</Button>
</TooltipTrigger>
<TooltipContent>{{ label }}</TooltipContent>
</Tooltip>
</template>