Added Error Toasts Fix #52
Some checks failed
Build and Push Docker Images / build-backend (push) Successful in 16s
Build and Push Docker Images / build-frontend (push) Has been cancelled

This commit is contained in:
2026-01-14 15:10:37 +01:00
parent bcf460cfd5
commit 3128893ba2

View File

@@ -1,31 +1,86 @@
export default defineNuxtPlugin(() => { export default defineNuxtPlugin(() => {
const config = useRuntimeConfig() const config = useRuntimeConfig()
const toast = useToast()
const api = $fetch.create({ const api = $fetch.create({
baseURL: config.public.apiBase, baseURL: config.public.apiBase,
credentials: "include", credentials: "include",
async onRequest({options}) {
// Token aus Cookie holen
let token: string | null | undefined = ""
token = useCookie("token").value async onRequest({ options }) {
const token = useCookie("token").value
// Falls im Request explizit ein anderer JWT übergeben wird
if (options.context?.jwt) {
// Falls im Request explizit ein anderer JWT übergeben wird → diesen verwenden options.headers = {
if (options.context && (options.context as any).jwt) { ...options.headers,
token = (options.context as any).jwt Authorization: `Bearer ${options.context.jwt}`,
} }
} else if (token) {
if (token) {
options.headers = { options.headers = {
...options.headers, ...options.headers,
Authorization: `Bearer ${token}`, Authorization: `Bearer ${token}`,
} }
} }
},
async onRequestError({error}) {
toast.add({
title: "Fehler",
description: "Eine Anfrage konnte nicht ausgeführt werden.",
color: 'red',
icon: 'i-heroicons-exclamation-triangle-20-solid',
timeout: 5000 // Bleibt 5 Sekunden sichtbar
})
},
async onResponseError({ response }) {
// Toasts nur im Client anzeigen
console.log(response)
if (!process.client) return
const status = response.status
let title = "Fehler"
let description = "Ein unerwarteter Fehler ist aufgetreten."
switch (status) {
case 400:
title = "Anfrage fehlerhaft"
description = "Die Daten konnten nicht korrekt verarbeitet werden."
break
case 401:
title = "Nicht angemeldet"
description = "Deine Sitzung ist abgelaufen oder ungültig."
// Optional: useCookie('token').value = null
break
case 403:
title = "Zugriff verweigert"
description = "Du hast keine Berechtigung für diesen Bereich."
break
case 404:
title = "Nicht gefunden"
description = "Die gesuchte Ressource wurde nicht gefunden."
break
case 500:
title = "Server-Fehler"
description = "Internes Problem. Bitte versuche es später erneut."
break
}
// Nuxt UI Toast Notification
toast.add({
title: title,
description: description,
color: 'red',
icon: 'i-heroicons-exclamation-triangle-20-solid',
timeout: 5000 // Bleibt 5 Sekunden sichtbar
})
} }
}) })
return { provide: { api } } return {
provide: {
api
}
}
}) })