Files
web/packages/booking-flow/lib/stores/enter-details/helpers.ts
Anton Gunnarsson 27b3f41bff Merged in feat/refactor-enter-details-price-calculation (pull request #3183)
feat: Refactor enter details price calculation

* Refactor getTotalPrice and child functions

* Move price calculations from helper file to specific file


Approved-by: Linus Flood
2025-11-27 13:44:45 +00:00

79 lines
1.9 KiB
TypeScript

import { parsePhoneNumberFromString } from "libphonenumber-js"
import { logger } from "@scandic-hotels/common/logger"
import { detailsStorageName } from "."
import type { User } from "@scandic-hotels/trpc/types/user"
import type { PersistedState, RoomState } from "./types"
export function extractGuestFromUser(user: User) {
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,
firstName: user.firstName,
lastName: user.lastName,
join: false,
membershipNo: user.membership?.membershipNumber,
phoneNumber: user.phoneNumber ?? "",
phoneNumberCC,
}
}
export const checkRoomProgress = (steps: RoomState["steps"]) => {
return Object.values(steps)
.filter(Boolean)
.every((step) => step.isValid)
}
export function readFromSessionStorage(): PersistedState | undefined {
if (typeof window === "undefined") {
return undefined
}
try {
const storedData = sessionStorage.getItem(detailsStorageName)
if (!storedData) {
return undefined
}
const parsedData = JSON.parse(storedData) as PersistedState
if (!parsedData.booking || !parsedData.rooms) {
return undefined
}
return parsedData
} catch (error) {
logger.error("Error reading from session storage:", error)
return undefined
}
}
export function writeToSessionStorage(state: PersistedState) {
if (typeof window === "undefined") {
return
}
try {
sessionStorage.setItem(detailsStorageName, JSON.stringify(state))
} catch (error) {
logger.error("Error writing to session storage:", error)
}
}
export function clearSessionStorage() {
if (typeof window === "undefined") {
return
}
sessionStorage.removeItem(detailsStorageName)
}