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
79 lines
1.9 KiB
TypeScript
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)
|
|
}
|