Merged in feat/LOY-158-signup-with-existing-email-error-handling (pull request #1441)

Feat/LOY-158 signup with existing email error handling

* feat(LOY-158): Add handling for email conflict during signup

- Implement specific error handling for email conflict in signup form
- Add localized error message for existing email accounts across language dictionaries
- Introduce new error type `conflictError` in trpc error handling

* fix(LOY-158): revert translation changes

* fix(LOY-158): Correct Finnish translation for cancellation message


Approved-by: Christian Andolf
This commit is contained in:
Chuma Mcphoy (We Ahead)
2025-02-27 14:30:03 +00:00
parent af7c5853db
commit 8061ab63a8
8 changed files with 27 additions and 2 deletions

View File

@@ -51,6 +51,15 @@ export default function SignupForm({ title }: SignUpFormProps) {
}
},
onError: (error) => {
if (error.data?.code === "CONFLICT") {
toast.error(
intl.formatMessage({
id: "An account with this email already exists. Please try signing in instead.",
})
)
return
}
toast.error(intl.formatMessage({ id: "Something went wrong!" }))
console.error("Component Signup error:", error)
},

View File

@@ -42,6 +42,7 @@
"Always open": "Altid åben",
"Amenities": "Faciliteter",
"Amusement park": "Forlystelsespark",
"An account with this email already exists. Please try signing in instead.": "En konto med denne e-mailadresse findes allerede. Log venligst ind i stedet.",
"An error occurred trying to manage your preferences, please try again later.": "Der opstod en fejl under forsøget på at administrere dine præferencer. Prøv venligst igen senere.",
"An error occurred when adding a credit card, please try again later.": "Der opstod en fejl under tilføjelse af et kreditkort. Prøv venligst igen senere.",
"An error occurred when trying to update profile.": "Der opstod en fejl under forsøg på at opdatere profilen.",

View File

@@ -42,6 +42,7 @@
"Always open": "Immer geöffnet",
"Amenities": "Annehmlichkeiten",
"Amusement park": "Vergnügungspark",
"An account with this email already exists. Please try signing in instead.": "Ein Konto mit dieser E-Mail-Adresse existiert bereits. Bitte melden Sie sich stattdessen an.",
"An error occurred trying to manage your preferences, please try again later.": "Beim Versuch, Ihre Einstellungen zu verwalten, ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.",
"An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.",
"An error occurred when trying to update profile.": "Beim Versuch, das Profil zu aktualisieren, ist ein Fehler aufgetreten.",

View File

@@ -43,6 +43,7 @@
"Always open": "Always open",
"Amenities": "Amenities",
"Amusement park": "Amusement park",
"An account with this email already exists. Please try signing in instead.": "An account with this email already exists. Please try signing in instead.",
"An error occurred trying to manage your preferences, please try again later.": "An error occurred trying to manage your preferences, please try again later.",
"An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.",
"An error occurred when trying to update profile.": "An error occurred when trying to update profile.",

View File

@@ -42,6 +42,7 @@
"Always open": "Aina auki",
"Amenities": "Mukavuudet",
"Amusement park": "Huvipuisto",
"An account with this email already exists. Please try signing in instead.": "Tällä sähköpostiosoitteella on jo olemassa tili. Ole hyvä ja kirjaudu sisään.",
"An error occurred trying to manage your preferences, please try again later.": "Asetusten hallinnassa tapahtui virhe. Yritä myöhemmin uudelleen.",
"An error occurred when adding a credit card, please try again later.": "Luottokorttia lisättäessä tapahtui virhe. Yritä myöhemmin uudelleen.",
"An error occurred when trying to update profile.": "Profiilia päivitettäessä tapahtui virhe.",

View File

@@ -42,6 +42,7 @@
"Always open": "Alltid åpen",
"Amenities": "Fasiliteter",
"Amusement park": "Tivoli",
"An account with this email already exists. Please try signing in instead.": "En konto med denne e-postadressen eksisterer allerede. Vennligst logg inn i stedet.",
"An error occurred trying to manage your preferences, please try again later.": "Det oppstod en feil under forsøket på å administrere innstillingene dine. Prøv igjen senere.",
"An error occurred when adding a credit card, please try again later.": "Det oppstod en feil ved å legge til et kredittkort. Prøv igjen senere.",
"An error occurred when trying to update profile.": "Det oppstod en feil under forsøk på å oppdatere profilen.",

View File

@@ -42,6 +42,7 @@
"Always open": "Alltid öppet",
"Amenities": "Bekvämligheter",
"Amusement park": "Nöjespark",
"An account with this email already exists. Please try signing in instead.": "Ett konto med denna e-postadress finns redan. Vänligen logga in istället.",
"An error occurred trying to manage your preferences, please try again later.": "Ett fel uppstod när du försökte hantera dina inställningar, försök igen senare.",
"An error occurred when adding a credit card, please try again later.": "Ett fel uppstod när ett kreditkort lades till, försök igen senare.",
"An error occurred when trying to update profile.": "Ett fel uppstod när du försökte uppdatera profilen.",

View File

@@ -16,6 +16,14 @@ export function forbiddenError(cause?: unknown) {
})
}
export function conflictError(cause?: unknown) {
return new TRPCError({
code: "CONFLICT",
message: `Conflict`,
cause,
})
}
export function badRequestError(cause?: unknown) {
return new TRPCError({
code: "BAD_REQUEST",
@@ -41,7 +49,7 @@ export function internalServerError(cause?: unknown) {
}
export const SESSION_EXPIRED = "SESSION_EXPIRED"
export class SessionExpiredError extends Error { }
export class SessionExpiredError extends Error {}
export function sessionExpiredError() {
return new TRPCError({
code: "UNAUTHORIZED",
@@ -51,7 +59,7 @@ export function sessionExpiredError() {
}
export const PUBLIC_UNAUTHORIZED = "PUBLIC_UNAUTHORIZED"
export class PublicUnauthorizedError extends Error { }
export class PublicUnauthorizedError extends Error {}
export function publicUnauthorizedError() {
return new TRPCError({
code: "UNAUTHORIZED",
@@ -68,6 +76,8 @@ export function serverErrorByStatus(status: number, cause?: unknown) {
return forbiddenError(cause)
case 404:
return notFound(cause)
case 409:
return conflictError(cause)
case 500:
default:
return internalServerError(cause)