From cf91d3d947aacb4f30073274ba04b0c79f099e61 Mon Sep 17 00:00:00 2001 From: Simon Emanuelsson Date: Wed, 19 Mar 2025 10:01:05 +0100 Subject: [PATCH] fix: we showed duplicate rooms because every bed represents a room --- .../SelectRate/HotelInfoCard/index.tsx | 147 +++++++------- .../RoomSelectionPanel/RoomCard/index.tsx | 26 +-- .../SelectRate/RoomsContainer/index.tsx | 9 +- .../HotelReservation/SelectRate/index.tsx | 28 ++- .../HotelReservation/SelectRate/utils.ts | 38 +--- .../providers/BookingConfirmationProvider.tsx | 1 + .../server/routers/hotels/input.ts | 2 +- .../server/routers/hotels/output.ts | 137 +++++++++++++ .../server/routers/hotels/query.ts | 190 ++++++++++-------- .../schemas/roomAvailability/configuration.ts | 5 +- .../selectRate/hotelInfoCard.ts | 4 +- .../selectRate/roomsContainer.ts | 3 +- 12 files changed, 356 insertions(+), 234 deletions(-) diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx b/apps/scandic-web/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx index 961a56681..ee81ed1ea 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx +++ b/apps/scandic-web/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx @@ -17,94 +17,89 @@ import styles from "./hotelInfoCard.module.css" import type { HotelInfoCardProps } from "@/types/components/hotelReservation/selectRate/hotelInfoCard" -export default async function HotelInfoCard({ hotelData }: HotelInfoCardProps) { - const hotel = hotelData?.hotel +export default async function HotelInfoCard({ hotel }: HotelInfoCardProps) { const intl = await getIntl() - const sortedFacilities = hotel?.detailedFacilities + const sortedFacilities = hotel.detailedFacilities .sort((a, b) => b.sortOrder - a.sortOrder) .slice(0, 5) - const galleryImages = mapApiImagesToGalleryImages(hotel?.galleryImages || []) + const galleryImages = mapApiImagesToGalleryImages(hotel.galleryImages || []) return (
- {hotel && ( -
-
- - {hotel.ratings?.tripAdvisor && ( - - )} -
-
-
- - {hotel.name} - -
- - {intl.formatMessage( - { - id: "{address}, {city} ∙ {distanceToCityCenterInKm} km to city center", - }, - { - address: hotel.address.streetAddress, - city: hotel.address.city, - distanceToCityCenterInKm: getSingleDecimal( - hotel.location.distanceToCentre / 1000 - ), - } - )} - - - {hotel.hotelContent.texts.descriptions?.medium} - -
-
- -
-
- - {intl.formatMessage({ id: "At the hotel" })} - - {sortedFacilities?.map((facility) => { - const IconComponent = mapFacilityToIcon(facility.id) - return ( -
- {IconComponent && ( - - )} - {facility.name} -
- ) - })} -
- +
+
+ + {hotel.ratings?.tripAdvisor && ( + + )} +
+
+
+ + {hotel.name} + +
+ + {intl.formatMessage( + { + id: "{address}, {city} ∙ {distanceToCityCenterInKm} km to city center", + }, + { + address: hotel.address.streetAddress, + city: hotel.address.city, + distanceToCityCenterInKm: getSingleDecimal( + hotel.location.distanceToCentre / 1000 + ), + } + )} + + + {hotel.hotelContent.texts.descriptions?.medium} +
-
- )} - {hotel?.specialAlerts.map((alert) => { - return ( -
- +
+
+ + {intl.formatMessage({ id: "At the hotel" })} + + {sortedFacilities?.map((facility) => { + const IconComponent = mapFacilityToIcon(facility.id) + return ( +
+ {IconComponent && ( + + )} + {facility.name} +
+ ) + })} +
+
- ) - })} +
+
+ {hotel.specialAlerts.map((alert) => ( +
+ +
+ ))}
) } diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/Rooms/RoomSelectionPanel/RoomCard/index.tsx b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/Rooms/RoomSelectionPanel/RoomCard/index.tsx index 625034de6..f4f66bf79 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/Rooms/RoomSelectionPanel/RoomCard/index.tsx +++ b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/Rooms/RoomSelectionPanel/RoomCard/index.tsx @@ -69,8 +69,6 @@ function getBreakfastMessage( export default function RoomCard({ roomConfiguration }: RoomCardProps) { const intl = useIntl() - const lessThanFiveRoomsLeft = - roomConfiguration.roomsLeft > 0 && roomConfiguration.roomsLeft < 5 const searchParams = useSearchParams() const bookingCode = searchParams.get("bookingCode") @@ -85,6 +83,8 @@ export default function RoomCard({ roomConfiguration }: RoomCardProps) { })) const { isMainRoom, roomAvailability, roomNr, selectedPackage } = useRoomContext() + const showLowInventory = + roomConfiguration.roomsLeft > 0 && roomConfiguration.roomsLeft < 5 if (!roomAvailability || !("rateDefinitions" in roomAvailability)) { return null @@ -177,7 +177,7 @@ export default function RoomCard({ roomConfiguration }: RoomCardProps) {
  • - {lessThanFiveRoomsLeft ? ( + {showLowInventory ? ( {intl.formatMessage( @@ -211,16 +211,16 @@ export default function RoomCard({ roomConfiguration }: RoomCardProps) { {occupancy.max === occupancy.min ? intl.formatMessage( - { id: "{guests, plural, one {# guest} other {# guests}}" }, - { guests: occupancy.max } - ) + { id: "{guests, plural, one {# guest} other {# guests}}" }, + { guests: occupancy.max } + ) : intl.formatMessage( - { id: "{min}-{max} guests" }, - { - min: occupancy.min, - max: occupancy.max, - } - )} + { id: "{min}-{max} guests" }, + { + min: occupancy.min, + max: occupancy.max, + } + )} )} @@ -293,7 +293,7 @@ export default function RoomCard({ roomConfiguration }: RoomCardProps) { title={rateTitle} rateTitle={ product.public && - product.public?.rateType !== RateTypeEnum.Regular + product.public?.rateType !== RateTypeEnum.Regular ? rateDefinition?.title : undefined } diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/index.tsx b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/index.tsx index c006006e2..42da1c5a6 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/index.tsx +++ b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/index.tsx @@ -17,7 +17,6 @@ export function RoomsContainer({ childArray, fromDate, hotelData, - hotelId, isUserLoggedIn, toDate, }: RoomsContainerProps) { @@ -29,7 +28,7 @@ export function RoomsContainer({ const { data: roomsAvailability, isPending: isLoadingAvailability } = useRoomsAvailability( adultArray, - hotelId, + hotelData.hotel.id, fromDateString, toDateString, lang, @@ -42,7 +41,7 @@ export function RoomsContainer({ childArray, fromDateString, toDateString, - hotelId, + hotelData.hotel.id, lang ) @@ -50,10 +49,6 @@ export function RoomsContainer({ return } - if (!hotelData?.hotel) { - return null - } - if (packages === null) { // TODO: Log packages error console.error("[RoomsContainer] unable to fetch packages") diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/index.tsx b/apps/scandic-web/components/HotelReservation/SelectRate/index.tsx index d7b759ef9..ceab19826 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/index.tsx +++ b/apps/scandic-web/components/HotelReservation/SelectRate/index.tsx @@ -5,9 +5,7 @@ import { Suspense } from "react" import { getHotel } from "@/lib/trpc/memoizedRequests" import { auth } from "@/auth" -import HotelInfoCard, { - HotelInfoCardSkeleton, -} from "@/components/HotelReservation/SelectRate/HotelInfoCard" +import HotelInfoCard from "@/components/HotelReservation/SelectRate/HotelInfoCard" import { RoomsContainer } from "@/components/HotelReservation/SelectRate/RoomsContainer" import TrackingSDK from "@/components/TrackingSDK" import { setLang } from "@/i18n/serverContext" @@ -33,17 +31,21 @@ export default async function SelectRatePage({ const { adultsInRoom, childrenInRoom, hotel, noOfRooms, selectHotelParams } = searchDetails - const { fromDate, toDate } = getValidDates( - selectHotelParams.fromDate, - selectHotelParams.toDate - ) - const hotelData = await getHotel({ hotelId: hotel.id, isCardOnlyPayment: false, language: params.lang, }) + if (!hotelData) { + return notFound() + } + + const { fromDate, toDate } = getValidDates( + selectHotelParams.fromDate, + selectHotelParams.toDate + ) + const session = await auth() const isUserLoggedIn = isValidSession(session) @@ -59,20 +61,17 @@ export default async function SelectRatePage({ hotel.id, hotel.name, noOfRooms, - hotelData?.hotel.address.country, - hotelData?.hotel.address.city, + hotelData.hotel.address.country, + hotelData.hotel.address.city, selectHotelParams.city ) const booking = convertSearchParamsToObj(searchParams) - const hotelId = +hotel.id const suspenseKey = stringify(searchParams) return ( <> - }> - - + diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/utils.ts b/apps/scandic-web/components/HotelReservation/SelectRate/utils.ts index 8025d2033..8d073bed2 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/utils.ts +++ b/apps/scandic-web/components/HotelReservation/SelectRate/utils.ts @@ -6,38 +6,22 @@ import type { ChildrenInRoom } from "@/utils/hotelSearchDetails" export function useRoomsAvailability( adultsCount: number[], - hotelId: number, + hotelId: string, fromDateString: string, toDateString: string, lang: Lang, childArray: ChildrenInRoom, bookingCode?: string ) { - const roomsAvailability = - trpc.hotel.availability.roomsCombinedAvailability.useQuery({ - adultsCount, - bookingCode, - childArray, - hotelId, - lang, - roomStayEndDate: toDateString, - roomStayStartDate: fromDateString, - }) - - const data = roomsAvailability.data?.map((ra) => { - if (ra.status === "fulfilled") { - return ra.value - } - return { - details: ra.reason, - error: "request_failure", - } + return trpc.hotel.availability.roomsCombinedAvailability.useQuery({ + adultsCount, + bookingCode, + childArray, + hotelId, + lang, + roomStayEndDate: toDateString, + roomStayStartDate: fromDateString, }) - - return { - ...roomsAvailability, - data, - } } export function useHotelPackages( @@ -45,14 +29,14 @@ export function useHotelPackages( childArray: ChildrenInRoom, fromDateString: string, toDateString: string, - hotelId: number, + hotelId: string, lang: Lang ) { return trpc.hotel.packages.get.useQuery({ adults: adultArray[0], // Using the first adult count children: childArray?.[0]?.length, // Using the first children count endDate: toDateString, - hotelId: hotelId.toString(), + hotelId, packageCodes: [ RoomPackageCodeEnum.ACCESSIBILITY_ROOM, RoomPackageCodeEnum.PET_ROOM, diff --git a/apps/scandic-web/providers/BookingConfirmationProvider.tsx b/apps/scandic-web/providers/BookingConfirmationProvider.tsx index ced2145ca..5d62b267e 100644 --- a/apps/scandic-web/providers/BookingConfirmationProvider.tsx +++ b/apps/scandic-web/providers/BookingConfirmationProvider.tsx @@ -29,6 +29,7 @@ export default function BookingConfirmationProvider({ rooms, vat, } + storeRef.current = createBookingConfirmationStore(initialData) } diff --git a/apps/scandic-web/server/routers/hotels/input.ts b/apps/scandic-web/server/routers/hotels/input.ts index ce79467bb..fcf43d666 100644 --- a/apps/scandic-web/server/routers/hotels/input.ts +++ b/apps/scandic-web/server/routers/hotels/input.ts @@ -40,7 +40,7 @@ export const roomsCombinedAvailabilityInputSchema = z.object({ .nullable() ) .nullish(), - hotelId: z.number(), + hotelId: z.string(), lang: z.nativeEnum(Lang), rateCode: z.string().optional(), roomStayEndDate: z.string(), diff --git a/apps/scandic-web/server/routers/hotels/output.ts b/apps/scandic-web/server/routers/hotels/output.ts index a90713acb..91a0fbc11 100644 --- a/apps/scandic-web/server/routers/hotels/output.ts +++ b/apps/scandic-web/server/routers/hotels/output.ts @@ -33,6 +33,7 @@ import type { import type { Product, RateDefinition, + RoomConfiguration, } from "@/types/trpc/routers/hotel/roomAvailability" // NOTE: Find schema at: https://aks-test.scandichotels.com/hotel/swagger/v1/index.html @@ -145,6 +146,142 @@ const statusLookup = { [AvailabilityEnum.NotAvailable]: 2, } +function sortRoomConfigs(a: RoomConfiguration, b: RoomConfiguration) { + // @ts-expect-error - array indexing + return statusLookup[a.status] - statusLookup[b.status] +} + +export const roomsCombinedAvailabilitySchema = z + .object({ + data: z.object({ + attributes: z.object({ + checkInDate: z.string(), + checkOutDate: z.string(), + hotelId: z.number(), + mustBeGuaranteed: z.boolean().optional(), + occupancy: occupancySchema.optional(), + rateDefinitions: z.array(rateDefinitionSchema), + roomConfigurations: z + .array(roomConfigurationSchema) + .transform((data) => { + // Initial sort to guarantee if one bed is NotAvailable and whereas + // the other is Available to make sure data is added to the correct + // roomConfig + const configs = data.sort(sortRoomConfigs) + const roomConfigs = new Map() + for (const roomConfig of configs) { + if (roomConfigs.has(roomConfig.roomType)) { + const currentRoomConf = roomConfigs.get(roomConfig.roomType) + if (currentRoomConf) { + currentRoomConf.features = roomConfig.features.reduce( + (feats, feature) => { + const currentFeatureIndex = feats.findIndex( + (f) => f.code === feature.code + ) + if (currentFeatureIndex !== -1) { + feats[currentFeatureIndex].inventory = + feats[currentFeatureIndex].inventory + + feature.inventory + } else { + feats.push(feature) + } + return feats + }, + currentRoomConf.features + ) + currentRoomConf.roomsLeft = + currentRoomConf.roomsLeft + roomConfig.roomsLeft + roomConfigs.set(currentRoomConf.roomType, currentRoomConf) + } + } else { + roomConfigs.set(roomConfig.roomType, roomConfig) + } + } + return Array.from(roomConfigs.values()) + }), + }), + relationships: relationshipsSchema.optional(), + type: z.string().optional(), + }), + }) + .transform(({ data: { attributes } }) => { + const rateDefinitions = attributes.rateDefinitions + const cancellationRuleLookup = rateDefinitions.reduce((acc, val) => { + // @ts-expect-error - index of cancellationRule TS + acc[val.rateCode] = cancellationRules[val.cancellationRule] + return acc + }, {}) + + const roomConfigurations = attributes.roomConfigurations + .map((room) => { + if (room.products.length) { + room.breakfastIncludedInAllRatesMember = room.products.every( + (product) => + everyRateHasBreakfastIncluded(product, rateDefinitions, "member") + ) + room.breakfastIncludedInAllRatesPublic = room.products.every( + (product) => + everyRateHasBreakfastIncluded(product, rateDefinitions, "public") + ) + + room.products = room.products.map((product) => { + const publicRate = product.public + if (publicRate?.rateCode) { + const publicRateDefinition = rateDefinitions.find( + (rateDefinition) => + rateDefinition.rateCode === publicRate.rateCode + ) + if (publicRateDefinition) { + const rate = getRate(publicRateDefinition) + if (rate) { + product.rate = rate + if (rate === "flex") { + product.isFlex = true + } + } + } + } + + const memberRate = product.member + if (memberRate?.rateCode) { + const memberRateDefinition = rateDefinitions.find( + (rate) => rate.rateCode === memberRate.rateCode + ) + if (memberRateDefinition) { + const rate = getRate(memberRateDefinition) + if (rate) { + product.rate = rate + if (rate === "flex") { + product.isFlex = true + } + } + } + } + + return product + }) + + // CancellationRule is the same for public and member per product + // Sorting to guarantee order based on rate + room.products = room.products.sort( + (a, b) => + // @ts-expect-error - index + cancellationRuleLookup[a.public?.rateCode || a.member?.rateCode] - + // @ts-expect-error - index + cancellationRuleLookup[b.public?.rateCode || b.member?.rateCode] + ) + } + + return room + }) + .sort(sortRoomConfigs) + + return { + ...attributes, + roomConfigurations, + } + }) + export const roomsAvailabilitySchema = z .object({ data: z.object({ diff --git a/apps/scandic-web/server/routers/hotels/query.ts b/apps/scandic-web/server/routers/hotels/query.ts index 513225536..3e0b124ca 100644 --- a/apps/scandic-web/server/routers/hotels/query.ts +++ b/apps/scandic-web/server/routers/hotels/query.ts @@ -50,6 +50,7 @@ import { packagesSchema, ratesSchema, roomsAvailabilitySchema, + roomsCombinedAvailabilitySchema, } from "./output" import tempRatesData from "./tempRatesData.json" import { @@ -495,95 +496,110 @@ export const hotelQueryRouter = router({ roomsCombinedAvailability: serviceProcedure .input(roomsCombinedAvailabilityInputSchema) - .query(async ({ input, ctx }) => { - const { lang } = input - const apiLang = toApiLang(lang) - const { - adultsCount, - bookingCode, - childArray, - hotelId, - rateCode, - roomStayEndDate, - roomStayStartDate, - } = input + .query( + async ({ + ctx, + input: { + adultsCount, + bookingCode, + childArray, + hotelId, + lang, + rateCode, + roomStayEndDate, + roomStayStartDate, + }, + }) => { + const apiLang = toApiLang(lang) - const metricsData = { - hotelId, - roomStayStartDate, - roomStayEndDate, - adultsCount, - childArray: childArray ? JSON.stringify(childArray) : undefined, - bookingCode, - } + const metricsData = { + hotelId, + roomStayStartDate, + roomStayEndDate, + adultsCount, + childArray: childArray ? JSON.stringify(childArray) : undefined, + bookingCode, + } - metrics.roomsCombinedAvailability.counter.add(1, metricsData) + metrics.roomsCombinedAvailability.counter.add(1, metricsData) - console.info( - "api.hotels.roomsCombinedAvailability start", - JSON.stringify({ query: { hotelId, params: metricsData } }) - ) + console.info( + "api.hotels.roomsCombinedAvailability start", + JSON.stringify({ query: { hotelId, params: metricsData } }) + ) - const availabilityResponses = await Promise.allSettled( - adultsCount.map(async (adultCount: number, idx: number) => { - const kids = childArray?.[idx] - const params: Record = { - roomStayStartDate, - roomStayEndDate, - adults: adultCount, - ...(kids?.length && { - children: generateChildrenString(kids), - }), - ...(bookingCode && { bookingCode }), - language: apiLang, - } - - const apiResponse = await api.get( - api.endpoints.v1.Availability.hotel(hotelId.toString()), - { - headers: { - Authorization: `Bearer ${ctx.serviceToken}`, - }, - }, - params - ) - - if (!apiResponse.ok) { - const text = await apiResponse.text() - metrics.roomsCombinedAvailability.fail.add(1, metricsData) - console.error("Failed API call", { params, text }) - return { error: "http_error", details: text } - } - - const apiJson = await apiResponse.json() - const validateAvailabilityData = - roomsAvailabilitySchema.safeParse(apiJson) - - if (!validateAvailabilityData.success) { - console.error("Validation error", { - params, - error: validateAvailabilityData.error, - }) - metrics.roomsCombinedAvailability.fail.add(1, metricsData) - return { - error: "validation_error", - details: validateAvailabilityData.error, + const availabilityResponses = await Promise.allSettled( + adultsCount.map(async (adultCount: number, idx: number) => { + const kids = childArray?.[idx] + const params: Record = { + roomStayStartDate, + roomStayEndDate, + adults: adultCount, + ...(kids?.length && { + children: generateChildrenString(kids), + }), + ...(bookingCode && { bookingCode }), + language: apiLang, } - } - if (rateCode) { - validateAvailabilityData.data.mustBeGuaranteed = - validateAvailabilityData.data.rateDefinitions.find( - (rate) => rate.rateCode === rateCode - )?.mustBeGuaranteed - } + const apiResponse = await api.get( + api.endpoints.v1.Availability.hotel(hotelId.toString()), + { + headers: { + Authorization: `Bearer ${ctx.serviceToken}`, + }, + }, + params + ) - return validateAvailabilityData.data + if (!apiResponse.ok) { + const text = await apiResponse.text() + metrics.roomsCombinedAvailability.fail.add(1, metricsData) + console.error("Failed API call", { params, text }) + return { error: "http_error", details: text } + } + + const apiJson = await apiResponse.json() + const validateAvailabilityData = + roomsCombinedAvailabilitySchema.safeParse(apiJson) + + if (!validateAvailabilityData.success) { + console.error("Validation error", { + params, + error: validateAvailabilityData.error, + }) + metrics.roomsCombinedAvailability.fail.add(1, metricsData) + return { + error: "validation_error", + details: validateAvailabilityData.error, + } + } + + if (rateCode) { + validateAvailabilityData.data.mustBeGuaranteed = + validateAvailabilityData.data.rateDefinitions.find( + (rate) => rate.rateCode === rateCode + )?.mustBeGuaranteed + } + + return validateAvailabilityData.data + }) + ) + metrics.roomsCombinedAvailability.success.add(1, metricsData) + + const data = availabilityResponses.map((availability) => { + if (availability.status === "fulfilled") { + return availability.value + } + return { + details: availability.reason, + error: "request_failure", + } }) - ) - metrics.roomsCombinedAvailability.success.add(1, metricsData) - return availabilityResponses - }), + + return data + } + ), room: serviceProcedure .input(selectedRoomAvailabilityInputSchema) .query(async ({ input, ctx }) => { @@ -771,9 +787,9 @@ export const hotelQueryRouter = router({ type: matchingRoom.mainBed.type, extraBed: matchingRoom.fixedExtraBed ? { - type: matchingRoom.fixedExtraBed.type, - description: matchingRoom.fixedExtraBed.description, - } + type: matchingRoom.fixedExtraBed.type, + description: matchingRoom.fixedExtraBed.description, + } : undefined, } } @@ -1102,9 +1118,9 @@ export const hotelQueryRouter = router({ return hotelData ? { - ...hotelData, - url: hotelPage?.url ?? null, - } + ...hotelData, + url: hotelPage?.url ?? null, + } : null }) ) diff --git a/apps/scandic-web/server/routers/hotels/schemas/roomAvailability/configuration.ts b/apps/scandic-web/server/routers/hotels/schemas/roomAvailability/configuration.ts index da0c82c04..25e0723f5 100644 --- a/apps/scandic-web/server/routers/hotels/schemas/roomAvailability/configuration.ts +++ b/apps/scandic-web/server/routers/hotels/schemas/roomAvailability/configuration.ts @@ -45,8 +45,5 @@ export const roomConfigurationSchema = z } } - // Creating a new objekt since data is frozen (readony) - // and can cause errors to be thrown if trying to manipulate - // object elsewhere - return { ...data } + return data }) diff --git a/apps/scandic-web/types/components/hotelReservation/selectRate/hotelInfoCard.ts b/apps/scandic-web/types/components/hotelReservation/selectRate/hotelInfoCard.ts index 211d4af2e..fb5071870 100644 --- a/apps/scandic-web/types/components/hotelReservation/selectRate/hotelInfoCard.ts +++ b/apps/scandic-web/types/components/hotelReservation/selectRate/hotelInfoCard.ts @@ -1,5 +1,5 @@ -import type { HotelData } from "@/types/hotel" +import type { Hotel } from "@/types/hotel" export interface HotelInfoCardProps { - hotelData: HotelData | null + hotel: Hotel } diff --git a/apps/scandic-web/types/components/hotelReservation/selectRate/roomsContainer.ts b/apps/scandic-web/types/components/hotelReservation/selectRate/roomsContainer.ts index bf669a881..4c005ecda 100644 --- a/apps/scandic-web/types/components/hotelReservation/selectRate/roomsContainer.ts +++ b/apps/scandic-web/types/components/hotelReservation/selectRate/roomsContainer.ts @@ -8,8 +8,7 @@ export interface RoomsContainerProps { bookingCode?: string childArray: ChildrenInRoom fromDate: Date - hotelData: HotelData | null - hotelId: number + hotelData: HotelData isUserLoggedIn: boolean toDate: Date }