feat: refactor of my stay

This commit is contained in:
Simon Emanuelsson
2025-04-25 14:08:14 +02:00
committed by Simon.Emanuelsson
parent b5deb84b33
commit ec087a3d15
208 changed files with 5458 additions and 4569 deletions

View File

@@ -12,9 +12,9 @@ import {
import { dt } from "@/lib/dt"
import { useAddAncillaryStore } from "@/stores/my-stay/add-ancillary-flow"
import MySavedCards from "@/components/HotelReservation/EnterDetails/Payment/MySavedCards"
import PaymentOption from "@/components/HotelReservation/EnterDetails/Payment/PaymentOption"
import PaymentOptionsGroup from "@/components/HotelReservation/EnterDetails/Payment/PaymentOptionsGroup"
import MySavedCards from "@/components/HotelReservation/MySavedCards"
import PaymentOption from "@/components/HotelReservation/PaymentOption"
import Alert from "@/components/TempDesignSystem/Alert"
import Checkbox from "@/components/TempDesignSystem/Form/Checkbox"
import Link from "@/components/TempDesignSystem/Link"
@@ -144,8 +144,8 @@ export default function ConfirmationStep({
label={
savedCreditCards?.length
? intl.formatMessage({
defaultMessage: "OTHER",
})
defaultMessage: "OTHER",
})
: undefined
}
>

View File

@@ -1,6 +1,6 @@
import { useIntl } from "react-intl"
import { generateDeliveryOptions } from "@/components/HotelReservation/MyStay/Ancillaries/utils"
import { generateDeliveryOptions } from "@/components/HotelReservation/MyStay/utils/ancillaries"
import Input from "@/components/TempDesignSystem/Form/Input"
import Select from "@/components/TempDesignSystem/Form/Select"
import Body from "@/components/TempDesignSystem/Text/Body"

View File

@@ -19,6 +19,13 @@ import {
useAddAncillaryStore,
} from "@/stores/my-stay/add-ancillary-flow"
import {
buildAncillaryPackages,
clearAncillarySessionData,
generateDeliveryOptions,
getAncillarySessionData,
setAncillarySessionData,
} from "@/components/HotelReservation/MyStay/utils/ancillaries"
import Image from "@/components/Image"
import LoadingSpinner from "@/components/LoadingSpinner"
import Modal from "@/components/Modal"
@@ -33,13 +40,6 @@ import {
trackGlaAncillaryAttempt,
} from "@/utils/tracking/myStay"
import {
buildAncillaryPackages,
clearAncillarySessionData,
generateDeliveryOptions,
getAncillarySessionData,
setAncillarySessionData,
} from "../../utils"
import { type AncillaryFormData, ancillaryFormSchema } from "../schema"
import ActionButtons from "./ActionButtons"
import PriceDetails from "./PriceDetails"
@@ -124,10 +124,7 @@ export default function AddAncillaryFlowModal({
const addAncillary = trpc.booking.packages.useMutation()
const { guaranteeBooking, isLoading, handleGuaranteeError } =
useGuaranteeBooking({
confirmationNumber: booking.confirmationNumber,
isAncillaryFlow: true,
})
useGuaranteeBooking(booking.confirmationNumber, true)
function validateTermsAndConditions(data: AncillaryFormData): boolean {
if (!data.termsAndConditions) {

View File

@@ -5,18 +5,17 @@ import { useEffect } from "react"
import { trpc } from "@/lib/trpc/client"
import {
buildAncillaryPackages,
clearAncillarySessionData,
getAncillarySessionData,
} from "@/components/HotelReservation/MyStay/utils/ancillaries"
import LoadingSpinner from "@/components/LoadingSpinner"
import {
trackAncillaryFailed,
trackAncillarySuccess,
} from "@/utils/tracking/myStay"
import {
buildAncillaryPackages,
clearAncillarySessionData,
getAncillarySessionData,
} from "../utils"
import type { Lang } from "@/constants/languages"
export default function GuaranteeAncillaryHandler({

View File

@@ -1,82 +0,0 @@
import type {
Ancillary,
SelectedAncillary,
} from "@/types/components/myPages/myStay/ancillaries"
import type { AncillaryFormData } from "./AddAncillaryFlow/schema"
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
}
| undefined => {
if (typeof window === "undefined") return undefined
try {
const storedData = sessionStorage.getItem(ancillarySessionKey)
return storedData ? JSON.parse(storedData) : undefined
} catch (error) {
console.error("Error reading from session storage:", error)
return undefined
}
}
export function setAncillarySessionData({
formData,
selectedAncillary,
}: {
formData?: AncillaryFormData
selectedAncillary?: Ancillary["ancillaryContent"][number] | null
}) {
if (typeof window === "undefined") return
try {
const currentData = getAncillarySessionData() || {}
sessionStorage.setItem(
ancillarySessionKey,
JSON.stringify({ ...currentData, formData, selectedAncillary })
)
} catch (error) {
console.error("Error writing to session storage:", error)
}
}
export function clearAncillarySessionData() {
if (typeof window === "undefined") return
sessionStorage.removeItem(ancillarySessionKey)
}