Files
web/apps/scandic-web/components/HotelReservation/MyStay/utils/ancillaries.ts
Joakim Jäderberg daf765f3d5 Merged in feature/wrap-logging (pull request #2511)
Feature/wrap logging

* feat: change all logging to go through our own logger function so that we can control log levels

* move packages/trpc to using our own logger

* merge


Approved-by: Linus Flood
2025-07-03 12:37:04 +00:00

109 lines
2.7 KiB
TypeScript

import { logger } from "@scandic-hotels/common/logger"
import type {
Ancillary,
SelectedAncillary,
} from "@/types/components/myPages/myStay/ancillaries"
import type { AncillaryFormData } from "@/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/schema"
import type { BreakfastData } from "@/stores/my-stay/add-ancillary-flow"
export const generateDeliveryOptions = () => {
const timeSlots = ["16:00-17:00", "17:00-18:00", "18:00-19:00", "19:00-20:00"]
return timeSlots.map((slot) => ({
label: slot,
value: slot,
}))
}
export function buildAncillaryPackages(
data: AncillaryFormData,
ancillary: SelectedAncillary | null
) {
const packages = []
if (ancillary?.id && data.quantityWithCard) {
packages.push({
code: ancillary.id,
quantity: data.quantityWithCard,
comment: data.optionalText || undefined,
})
}
if (ancillary?.loyaltyCode && data.quantityWithPoints) {
packages.push({
code: ancillary.loyaltyCode,
quantity: data.quantityWithPoints,
comment: data.optionalText || undefined,
})
}
return packages
}
const ancillarySessionKey = "ancillarySessionData"
export const getAncillarySessionData = ():
| {
formData?: AncillaryFormData
selectedAncillary?: Ancillary["ancillaryContent"][number] | null
packages: {
code: string
quantity: number
comment: string | undefined
}[]
isBreakfast: boolean
breakfastData: BreakfastData | null
}
| undefined => {
if (typeof window === "undefined") return undefined
try {
const storedData = sessionStorage.getItem(ancillarySessionKey)
return storedData ? JSON.parse(storedData) : undefined
} catch (error) {
logger.error("Error reading from session storage:", error)
return undefined
}
}
export function setAncillarySessionData({
formData,
selectedAncillary,
packages,
isBreakfast,
breakfastData,
}: {
formData?: AncillaryFormData
selectedAncillary?: Ancillary["ancillaryContent"][number] | null
packages: {
code: string
quantity: number
comment: string | undefined
}[]
isBreakfast: boolean
breakfastData: BreakfastData | null
}) {
if (typeof window === "undefined") return
try {
const currentData = getAncillarySessionData() || {}
sessionStorage.setItem(
ancillarySessionKey,
JSON.stringify({
...currentData,
formData,
selectedAncillary,
packages,
isBreakfast,
breakfastData,
})
)
} catch (error) {
logger.error("Error writing to session storage:", error)
}
}
export function clearAncillarySessionData() {
if (typeof window === "undefined") return
sessionStorage.removeItem(ancillarySessionKey)
}