From 4abe3b7e47be574840a07b066f8ceae989178766 Mon Sep 17 00:00:00 2001 From: Faye Date: Wed, 28 May 2025 23:46:21 +0200 Subject: [PATCH] fix: trim whitespace --- src/state/reducers/register.ts | 42 ++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/state/reducers/register.ts b/src/state/reducers/register.ts index 14daa52..c4357f7 100644 --- a/src/state/reducers/register.ts +++ b/src/state/reducers/register.ts @@ -43,9 +43,14 @@ const transformTicketLevel = (ticketType: TicketType, payload: GetAction>['payload']) => { - const { pronounsSelection, pronounsOther, dateOfBirth, ...rest } = payload as DeepNonNullable + const { pronounsSelection, pronounsOther, dateOfBirth, nickname, firstName, lastName, ...rest } = payload as DeepNonNullable + + const sanitize = (s: string) => s.replace(/[\r\n]+/gu, '').trim() return { + nickname: sanitize(nickname), + firstName: sanitize(firstName), + lastName: sanitize(lastName), pronouns: pronounsSelection === 'prefer-not-to-say' ? null : pronounsSelection === 'other' @@ -56,13 +61,40 @@ const transformPersonalInfo = (payload: GetAction>['payload']) => { + const { email, phoneNumber, telegramUsername, street, city, postalCode, stateOrProvince, ...rest } = payload as DeepNonNullable + const sanitize = (s: string | null | undefined) => typeof s === 'string' ? s.replace(/[\r\n]+/gu, '').trim() : '' + + return { + email: sanitize(email), + phoneNumber: sanitize(phoneNumber), + telegramUsername: typeof telegramUsername === 'string' ? sanitize(telegramUsername) : null, + street: sanitize(street), + city: sanitize(city), + postalCode: sanitize(postalCode), + stateOrProvince: typeof stateOrProvince === 'string' ? sanitize(stateOrProvince) : null, + ...rest, + } +} + +const transformOptionalInfo = (payload: GetAction>['payload']) => { + const { comments, ...rest } = payload as DeepNonNullable + + return { + comments: typeof comments === 'string' ? comments.trim() : comments, + ...rest, + } +} + const resetAddonsAndLevelInState = (state: Partial, ticketType: 'day' | 'full'): Partial => { if (state.ticketLevel) { - return { ...state, + return { + ...state, ticketLevel: { level: null, addons: determineDefaultAddons(ticketType), - } } + }, + } } else { return state } @@ -90,9 +122,9 @@ const registrationInfoReducer = (state: Partial, action: GetAc case SubmitForm('register-ticket-level').type: return { ...state, ticketLevel: transformTicketLevel(state.ticketType!, action.payload) } case SubmitForm('register-contact-info').type: - return { ...state, contactInfo: action.payload as DeepNonNullable } + return { ...state, contactInfo: transformContactInfo(action.payload) } case SubmitForm('register-optional-info').type: - return { ...state, optionalInfo: action.payload as DeepNonNullable } + return { ...state, optionalInfo: transformOptionalInfo(action.payload) } case SubmitForm('register-personal-info').type: return { ...state, personalInfo: transformPersonalInfo(action.payload) } case SetLocale.type: