Files
web/packages/booking-flow/lib/stores/enter-details/helpers.ts
Linus Flood e54310b00f Merged in chore/export-name-from-file (pull request #3439)
chore(storagecleaner): import from file to avoid huge footprints on every page

* chore(storagecleaner): import from file to avoid huge footprints on every page


Approved-by: Anton Gunnarsson
2026-01-14 12:55:06 +00:00

79 lines
1.9 KiB
TypeScript

import { parsePhoneNumberFromString } from "libphonenumber-js"
import { logger } from "@scandic-hotels/common/logger"
import { detailsStorageName } from "./consts"
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)
}