fix: allow any type of phone number

This commit is contained in:
Simon Emanuelsson
2025-05-22 17:21:13 +02:00
committed by Michael Zetterberg
parent 79e669020a
commit 9580281421
22 changed files with 400 additions and 459 deletions

View File

@@ -1,4 +1,5 @@
import isEqual from "fast-deep-equal"
import { parsePhoneNumberFromString } from "libphonenumber-js"
import {
sumPackages,
@@ -16,6 +17,13 @@ import type { PersistedState, RoomState } from "@/types/stores/enter-details"
import type { SafeUser } from "@/types/user"
export function extractGuestFromUser(user: NonNullable<SafeUser>) {
let phoneNumberCC = ""
if (user.phoneNumber) {
const parsedPhoneNumber = parsePhoneNumberFromString(user.phoneNumber)
if (parsedPhoneNumber?.country) {
phoneNumberCC = parsedPhoneNumber.country.toLowerCase()
}
}
return {
countryCode: user.address.countryCode?.toString(),
email: user.email,
@@ -24,6 +32,7 @@ export function extractGuestFromUser(user: NonNullable<SafeUser>) {
join: false,
membershipNo: user.membership?.membershipNumber,
phoneNumber: user.phoneNumber ?? "",
phoneNumberCC,
}
}

View File

@@ -4,6 +4,7 @@ import { useContext } from "react"
import { create, useStore } from "zustand"
import { REDEMPTION } from "@/constants/booking"
import { getDefaultCountryFromLang } from "@/constants/languages"
import { dt } from "@/lib/dt"
import {
@@ -34,6 +35,7 @@ import type {
RoomState,
} from "@/types/stores/enter-details"
import type { SafeUser } from "@/types/user"
import type { Lang } from "@/constants/routes/hotelReservation"
const defaultGuestState = {
countryCode: "",
@@ -44,6 +46,7 @@ const defaultGuestState = {
lastName: "",
membershipNo: "",
phoneNumber: "",
phoneNumberCC: "",
zipCode: "",
}
@@ -53,7 +56,8 @@ export function createDetailsStore(
initialState: InitialState,
searchParams: string,
user: SafeUser,
breakfastPackages: BreakfastPackages
breakfastPackages: BreakfastPackages,
lang: Lang
) {
const isMember = !!user
const isRedemption =
@@ -328,6 +332,8 @@ export function createDetailsStore(
currentRoom.guest.firstName = data.firstName
currentRoom.guest.join = data.join
currentRoom.guest.lastName = data.lastName
currentRoom.guest.phoneNumber = data.phoneNumber
currentRoom.guest.phoneNumberCC = data.phoneNumberCC
if (data.specialRequest?.comment) {
currentRoom.specialRequest.comment =
@@ -339,7 +345,6 @@ export function createDetailsStore(
} else {
currentRoom.guest.membershipNo = data.membershipNo
}
currentRoom.guest.phoneNumber = data.phoneNumber
// Only valid for room 1
if (idx === 0 && data.join && !isMember) {
@@ -397,7 +402,10 @@ export function createDetailsStore(
guest:
isMember && idx === 0
? deepmerge(defaultGuestState, extractGuestFromUser(user))
: defaultGuestState,
: {
...defaultGuestState,
phoneNumberCC: getDefaultCountryFromLang(lang),
},
roomPrice: getRoomPrice(room.roomRate, isMember && idx === 0),
specialRequest: {
comment: "",