diff --git a/src/app/components/early-bird/EarlyBirdForm.vue b/src/app/components/early-bird/EarlyBirdForm.vue
index 37971a2988..16684c7cff 100644
--- a/src/app/components/early-bird/EarlyBirdForm.vue
+++ b/src/app/components/early-bird/EarlyBirdForm.vue
@@ -8,7 +8,7 @@
{{ t('description') }}
-
+
('error')
diff --git a/src/app/components/event/report/EventReportDrawer.vue b/src/app/components/event/report/EventReportDrawer.vue
index 26b6760bd1..687f4631d7 100644
--- a/src/app/components/event/report/EventReportDrawer.vue
+++ b/src/app/components/event/report/EventReportDrawer.vue
@@ -3,6 +3,7 @@
+
+
+
+ {{ t('somethingWentWrong') }}
+
+
+
@@ -43,6 +51,11 @@
{{ t('titleBlockConfirmation') }}
+
+
+ {{ t('reportingFailed') }}
+
+
@@ -89,6 +102,16 @@
+
+
+ {{ t('tryAgain') }}
+
+
@@ -108,15 +131,17 @@ const { accountId, event } = defineProps<{
// template
const templateForm = useTemplateRef('form')
+// stepper
+const { error, restart, step } = useStepper<
+ 'reportConfirmation' | 'blockConfirmation' | 'error'
+>({ initial: 'blockConfirmation' })
+
// drawer
const isOpen = defineModel()
const open = () => (isOpen.value = true)
-
-// stepper
-const { step } = useStepper<'reportConfirmation' | 'blockConfirmation'>()
const onAnimationEnd = (isOpen: boolean) => {
if (isOpen) return
- step.value = 'default'
+ restart()
}
// block
@@ -132,24 +157,16 @@ const blockOrganizer = async () => {
createdBy: accountId,
},
})
-
if (result.error) {
- // TODO: confirm design
- await showToast({
- icon: 'error',
- text: apiErrorMessages.value.join('\n'),
- title: t('globalError'),
- })
+ error.value = new Error(
+ apiErrorMessages.value.length > 0
+ ? apiErrorMessages.value.join('\n')
+ : t('globalError'),
+ )
return
}
-
if (!result.data) {
- // TODO: confirm design
- await showToast({
- icon: 'error',
- text: t('globalErrorNoData'),
- title: t('globalError'),
- })
+ error.value = new Error(t('globalError'))
return
}
@@ -176,9 +193,12 @@ de:
buttonReportSubmit: Meldung einreichen
contentBlockConfirmation: Der Benutzer {username} wurde blockiert.
contentReportConfirmation: Vielen Dank für die Meldung. Wir werden sie prüfen und dich über unsere Entscheidung benachrichtigen. Du kannst nun den Organisator {username} blockieren oder zur Event-Seite zurückkehren.
+ reportingFailed: Meldung fehlgeschlagen
+ somethingWentWrong: Etwas ist schief gelaufen.
titleBlockConfirmation: Benutzer blockiert
titleReport: Event melden
titleReportConfirmation: Meldung erhalten
+ tryAgain: Erneut versuchen
en:
buttonBlockConfirmation: Back to Dashboard
buttonReportCancel: Cancel
@@ -187,7 +207,10 @@ en:
buttonReportSubmit: Report
contentBlockConfirmation: The user {username} has been blocked.
contentReportConfirmation: Thank you for your report. We will review it and notify you about our decision. You can block the organizer {username} now or return to the event.
+ reportingFailed: Reporting Failed
+ somethingWentWrong: Something went wrong.
titleBlockConfirmation: User blocked
titleReport: Report event
titleReportConfirmation: Report received
+ tryAgain: Try Again
diff --git a/src/app/components/event/report/EventReportForm.vue b/src/app/components/event/report/EventReportForm.vue
index cec0559466..0ed3cf37c3 100644
--- a/src/app/components/event/report/EventReportForm.vue
+++ b/src/app/components/event/report/EventReportForm.vue
@@ -46,13 +46,11 @@ const reasons = [
{ label: t('drawerRadioOther'), value: 'other' },
]
const templateForm = useTemplateRef('form')
+const modelError = defineModel('error')
// report
const createReportMutation = useCreateReportMutation()
const api = getApiData([createReportMutation])
-const apiErrorMessages = computed(() =>
- getCombinedErrorMessages(api.value.errors),
-)
// form
const submit = () =>
@@ -75,32 +73,33 @@ const onSubmit = handleSubmit(async (values) => {
},
})
- if (result.error) {
- // TODO: confirm design
- await showToast({
- icon: 'error',
- text: apiErrorMessages.value.join('\n'),
- title: t('globalError'),
- })
- return
- }
+ if (result.error) return
if (!result.data) {
- // TODO: confirm design
- await showToast({
- icon: 'error',
- text: t('globalErrorNoData'),
- title: t('globalError'),
- })
+ modelError.value = new Error(t('globalErrorNoData'))
return
}
-
emit('submitSuccess')
})
defineExpose({
submit,
})
+
+watch(
+ () => api.value.errors,
+ (current) => {
+ modelError.value = current?.length
+ ? // TODO: Use appropriate error codes here
+ new Error(
+ getCombinedErrorMessages(current, {
+ // postgres55000: t('postgres55000'),
+ // postgresP0002: t('postgresP0002'),
+ })[0],
+ )
+ : undefined
+ },
+)
diff --git a/src/app/components/form/FormEarlyBird.vue b/src/app/components/form/FormEarlyBird.vue
index bb916ae7a9..22a342c54b 100644
--- a/src/app/components/form/FormEarlyBird.vue
+++ b/src/app/components/form/FormEarlyBird.vue
@@ -63,9 +63,9 @@ const emit = defineEmits<{
success: []
}>()
-const fireAlert = useFireAlert()
const { t } = useI18n()
const templateForm = useTemplateRef('form')
+const modelError = defineModel('error')
// form
const submit = () => {
@@ -83,14 +83,8 @@ const onSubmit = handleSubmit(async (values) => {
body: values,
})
emit('success')
- } catch (error) {
- // TODO: implement form error page
- await fireAlert({
- error,
- level: 'error',
- text: t('error'),
- title: t('globalError'),
- })
+ } catch {
+ modelError.value = new Error(t('globalError'))
}
})
@@ -102,12 +96,10 @@ defineExpose({
de:
agreement: Mit deiner Teilnahme stimmst du zu, dass wir deine Kontaktdaten speichern und dich im Rahmen des Programms kontaktieren dürfen.
- error: Die Anmeldung für das Early Bird-Programm scheint nicht geklappt zu haben. Bitte versuche es noch einmal oder wende dich an den Support, wenn das Problem weiterhin besteht.
emailAddress: E-Mail-Adresse
name: Name
en:
agreement: By participating, you agree that we may save your contact details and contact you as part of the program.
- error: The registration for the Early Bird program does not seem to have worked. Please try again or contact support if the problem persists.
emailAddress: Email address
name: Name
diff --git a/src/app/components/form/account/FormAccountSignIn.vue b/src/app/components/form/account/FormAccountSignIn.vue
index b0568e71a3..517004cbaf 100644
--- a/src/app/components/form/account/FormAccountSignIn.vue
+++ b/src/app/components/form/account/FormAccountSignIn.vue
@@ -131,14 +131,14 @@ de:
jwtStoreFail: Fehler beim Speichern der Authentifizierungsdaten!
passwordReset: Passwort zurücksetzen
postgres55000: Deine E-Mail-Adresse ist noch nicht verifiziert! Schau in dein E-Mail-Postfach, ggf. auch in den Spam-Ordner, oder kontaktiere den Support.
- postgresP0002: Anmeldung fehlgeschlagen! Hast du dich schon registriert? Überprüfe deine Eingaben auf Schreibfehler oder kontaktiere den Support.
+ postgresP0002: Hast du dich schon registriert? Überprüfe deine Eingaben auf Schreibfehler oder kontaktiere den Support.
register: Konto erstellen
signIn: Einloggen
en:
jwtStoreFail: Failed to store the authentication data!
passwordReset: I forgot my password
postgres55000: Your email address has not been verified yet! Check your email inbox, including the spam folder if necessary, or contact support.
- postgresP0002: Login failed! Have you registered yet? Check your input for spelling mistakes or contact support.
+ postgresP0002: Have you registered yet? Check your input for spelling mistakes or contact support.
register: Create an account
signIn: Log in
diff --git a/src/app/components/form/account/password/FormAccountPasswordReset.vue b/src/app/components/form/account/password/FormAccountPasswordReset.vue
index a05e67fa21..062af40446 100644
--- a/src/app/components/form/account/password/FormAccountPasswordReset.vue
+++ b/src/app/components/form/account/password/FormAccountPasswordReset.vue
@@ -1,11 +1,5 @@
(),
})
const isFormSent = ref(false)
+const modelError = defineModel('error')
// api data
const passwordResetMutation = useAccountPasswordResetMutation()
@@ -67,6 +62,21 @@ const v$ = useVuelidate(rules, form)
defineExpose({
submit,
})
+
+watch(
+ () => api.value.errors,
+ (current) => {
+ modelError.value = current?.length
+ ? new Error(
+ getCombinedErrorMessages(current, {
+ postgres22023: t('postgres22023'),
+ postgresP0002: t('postgresP0002'),
+ postgres55000: t('postgres55000'),
+ })[0],
+ )
+ : undefined
+ },
+)
diff --git a/src/app/components/form/account/password/FormAccountPasswordResetRequest.vue b/src/app/components/form/account/password/FormAccountPasswordResetRequest.vue
index b6f1f53b6a..d067f2933e 100644
--- a/src/app/components/form/account/password/FormAccountPasswordResetRequest.vue
+++ b/src/app/components/form/account/password/FormAccountPasswordResetRequest.vue
@@ -1,7 +1,6 @@
(),
})
const isFormSent = ref(false)
+const modelError = defineModel('error')
// api data
const passwordResetRequestMutation = useAccountPasswordResetRequestMutation()
-const api = getApiData([passwordResetRequestMutation])
// methods
const submit = async () => {
@@ -48,9 +47,12 @@ const submit = async () => {
emailAddress: form.emailAddress || '',
language: locale.value,
})
-
- if (result.error || !result.data) return
-
+ // Backend returns success even for invalid emails (security); only handle network errors
+ if (result.error || !result.data) {
+ modelError.value = new Error()
+ return
+ }
+ modelError.value = undefined
emit('success')
}
diff --git a/src/app/pages/account/create/index.vue b/src/app/pages/account/create/index.vue
index a755e8b332..7b2348b5cb 100644
--- a/src/app/pages/account/create/index.vue
+++ b/src/app/pages/account/create/index.vue
@@ -59,19 +59,21 @@
-
+
- {{ error }}
+
+ {{ error.message }}
+
- {{ t('tryAgain') }}
+ {{ t('globalTryAgain') }}
{{ t('backToRegistration') }}
@@ -83,17 +85,13 @@
@@ -132,7 +130,6 @@ de:
titlePrivacy: Datenschutzbestimmungen
titleTerms: Geschäftsbedingungen
titleVerification: E-Mail-Bestätigung erforderlich
- tryAgain: Bitte versuche es erneut
verificationButton: Warte auf dich…
verificationInstructions: Überprüfe deine E-Mails auf einen Bestätigungslink.
en:
@@ -144,7 +141,6 @@ en:
titlePrivacy: Privacy Policy
titleTerms: General Terms and Conditions
titleVerification: Email Verification Required
- tryAgain: Please try again
verificationButton: Waiting for you…
verificationInstructions: Check your emails for a verification link.
diff --git a/src/app/pages/account/password/reset/index.vue b/src/app/pages/account/password/reset/index.vue
index 59e6a32596..65dcd59a30 100644
--- a/src/app/pages/account/password/reset/index.vue
+++ b/src/app/pages/account/password/reset/index.vue
@@ -50,25 +50,40 @@
+
+
+
+
+ {{ error.message }}
+
+
+ {{ t('globalTryAgain') }}
+
+
+
+
+ {{ t('backToReset') }}
+
+
+
+
de:
+ backToReset: Zurück zur Passwortzurücksetzung
instructionsNew: Neues Passwort
instructionsSuccessHeading: Passwort erfolgreich zurückgesetzt
instructionsSuccessDescription: Du kannst dich jetzt mit deinem neuen Passwort anmelden
@@ -96,6 +116,7 @@ de:
signIn: Einloggen
title: Passwort zurücksetzen
en:
+ backToReset: Back to Reset Password
instructionsNew: Set a new password
instructionsSuccessHeading: Password reset successful
instructionsSuccessDescription: You can now log in using your new password.
diff --git a/src/app/pages/account/password/reset/request.vue b/src/app/pages/account/password/reset/request.vue
index d8bd8677cd..da3a02bd1e 100644
--- a/src/app/pages/account/password/reset/request.vue
+++ b/src/app/pages/account/password/reset/request.vue
@@ -19,6 +19,7 @@
@@ -46,31 +47,49 @@
+
+
+
+
+ {{ t('globalTryAgain') }}
+
+
+
+
+ {{ t('backToReset') }}
+
+
+
+
de:
+ backToReset: Zurück zur Passwortzurücksetzung
iconAltClose: X-Icon
instructionsInboxDescription: Überprüfe dein Postfach
instructionsInboxHeading: Befolge die Anweisungen in der E-Mail, um das Passwort zurückzusetzen.
@@ -78,6 +97,7 @@ de:
send: Link zum Zurücksetzen senden
title: Passwort zurücksetzen
en:
+ backToReset: Back to Reset Password
iconAltClose: X icon
instructionsInboxDescription: Follow the instructions in the email to reset your password.
instructionsInboxHeading: Check your inbox
diff --git a/src/app/pages/early-bird/create.vue b/src/app/pages/early-bird/create.vue
index 7cc0f2468c..72b4960616 100644
--- a/src/app/pages/early-bird/create.vue
+++ b/src/app/pages/early-bird/create.vue
@@ -19,22 +19,43 @@
-
+
+
+
+
+
+ {{ t('errorDescription') }}
+
+
+
+
+ {{ t('backToEarlyBird') }}
+
+
+
+
de:
back: zurück
+ backToEarlyBird: Zurück zur Registrierung
iconAltClose: Schließen
title: Früher Vogel Programm
+ errorDescription: Die Anmeldung für das Early Bird-Programm scheint nicht geklappt zu haben. Bitte versuche es noch einmal oder wende dich an den Support, wenn das Problem weiterhin besteht.
en:
back: back
+ backToEarlyBird: Back to Registration
iconAltClose: Close
title: Early Bird Program
+ errorDescription: The registration for the Early Bird program does not seem to have worked. Please try again or contact support if the problem persists.
diff --git a/src/app/pages/session/create/index.vue b/src/app/pages/session/create/index.vue
index f5cc9e996f..f8d6e88b05 100644
--- a/src/app/pages/session/create/index.vue
+++ b/src/app/pages/session/create/index.vue
@@ -17,9 +17,11 @@
- {{ error }}
+
+ {{ error.message }}
+
- {{ t('errorDescription') }}
+ {{ t('globalTryAgain') }}
@@ -31,14 +33,14 @@
name: 'support-contact',
})
"
- variant="secondary-critical"
+ variant="secondary"
>
{{ t('contactSupport') }}
{{ t('backToLogin') }}
@@ -50,22 +52,13 @@