diff --git a/apps/scandic-web/server/routers/hotels/output.ts b/apps/scandic-web/server/routers/hotels/output.ts
index 4f3df6c62..bc466d5f2 100644
--- a/apps/scandic-web/server/routers/hotels/output.ts
+++ b/apps/scandic-web/server/routers/hotels/output.ts
@@ -95,14 +95,25 @@ export const hotelSchema = z
export const hotelsAvailabilitySchema = z.object({
data: z.array(
z.object({
- attributes: z.object({
- checkInDate: z.string(),
- checkOutDate: z.string(),
- hotelId: z.number(),
- occupancy: occupancySchema,
- productType: productTypeSchema,
- status: z.string(),
- }),
+ attributes: z
+ .object({
+ bookingCode: z.string().nullish(),
+ checkInDate: z.string(),
+ checkOutDate: z.string(),
+ hotelId: z.number(),
+ occupancy: occupancySchema,
+ productType: productTypeSchema,
+ status: z.string(),
+ })
+ .transform((data) => {
+ if (data.bookingCode && data.productType?.public) {
+ data.productType.public.bookingCode = data.bookingCode
+ }
+ if (data.bookingCode && data.productType?.member) {
+ data.productType.member.bookingCode = data.bookingCode
+ }
+ return data
+ }),
relationships: relationshipsSchema.optional(),
type: z.string().optional(),
})
diff --git a/apps/scandic-web/server/routers/hotels/schemas/productTypePrice.ts b/apps/scandic-web/server/routers/hotels/schemas/productTypePrice.ts
index 98e3de49f..74c5c3065 100644
--- a/apps/scandic-web/server/routers/hotels/schemas/productTypePrice.ts
+++ b/apps/scandic-web/server/routers/hotels/schemas/productTypePrice.ts
@@ -46,6 +46,7 @@ const partialPriceSchema = z.object({
}
return RateTypeEnum.Regular
}),
+ bookingCode: z.string().nullish(),
})
export const productTypeCorporateChequeSchema = z
diff --git a/apps/scandic-web/stores/select-rate/index.ts b/apps/scandic-web/stores/select-rate/index.ts
index 473da4451..e905dcec3 100644
--- a/apps/scandic-web/stores/select-rate/index.ts
+++ b/apps/scandic-web/stores/select-rate/index.ts
@@ -152,17 +152,13 @@ export function createRatesStore({
room.counterRateCode
)
}
- let selectedFilter
const bookingCode = room.rateCode
? room.bookingCode
: booking.bookingCode
- if (isRedemptionBooking) {
- selectedFilter = BookingCodeFilterEnum.All
- } else if (bookingCode) {
- selectedFilter = BookingCodeFilterEnum.Discounted
- } else {
- selectedFilter = BookingCodeFilterEnum.Regular
- }
+ const selectedFilter =
+ bookingCode && !isRedemptionBooking
+ ? BookingCodeFilterEnum.Discounted
+ : BookingCodeFilterEnum.All
return {
actions: {
@@ -301,7 +297,8 @@ export function createRatesStore({
return set(
produce((state: RatesState) => {
state.rooms[idx].selectedFilter = filter
- state.rooms[idx].isFetchingAdditionalRate = true
+ state.rooms[idx].isFetchingAdditionalRate =
+ filter === BookingCodeFilterEnum.All
})
)
},
diff --git a/apps/scandic-web/types/components/hotelReservation/selectHotel/map.ts b/apps/scandic-web/types/components/hotelReservation/selectHotel/map.ts
index 5cbbc3fe1..fe3d45677 100644
--- a/apps/scandic-web/types/components/hotelReservation/selectHotel/map.ts
+++ b/apps/scandic-web/types/components/hotelReservation/selectHotel/map.ts
@@ -29,6 +29,7 @@ type ImageSizes = z.infer
["imageSizes"]
type ImageMetaData = z.infer["metaData"]
export type HotelPin = {
+ bookingCode?: string | null
name: string
coordinates: Coordinates
publicPrice: number | null
diff --git a/apps/scandic-web/types/components/hotelReservation/selectHotel/noAvailabilityAlert.ts b/apps/scandic-web/types/components/hotelReservation/selectHotel/noAvailabilityAlert.ts
index 4dde6c58d..5fd9fce1a 100644
--- a/apps/scandic-web/types/components/hotelReservation/selectHotel/noAvailabilityAlert.ts
+++ b/apps/scandic-web/types/components/hotelReservation/selectHotel/noAvailabilityAlert.ts
@@ -2,7 +2,9 @@ import type { Hotel } from "@/types/hotel"
export type NoAvailabilityAlertProp = {
hotelsLength: number
+ bookingCode?: string
isAllUnavailable: boolean
isAlternative?: boolean
+ isBookingCodeRateNotAvailable?: boolean
operaId: Hotel["operaId"]
}
diff --git a/apps/scandic-web/types/enums/bookingCodeFilter.ts b/apps/scandic-web/types/enums/bookingCodeFilter.ts
index d0d875429..e706d2c27 100644
--- a/apps/scandic-web/types/enums/bookingCodeFilter.ts
+++ b/apps/scandic-web/types/enums/bookingCodeFilter.ts
@@ -1,5 +1,4 @@
export enum BookingCodeFilterEnum {
Discounted = "Discounted",
- Regular = "Regular",
All = "All",
}
diff --git a/packages/design-system/lib/components/RateCard/Campaign/index.tsx b/packages/design-system/lib/components/RateCard/Campaign/index.tsx
index 6e7a97ea4..95e48ad79 100644
--- a/packages/design-system/lib/components/RateCard/Campaign/index.tsx
+++ b/packages/design-system/lib/components/RateCard/Campaign/index.tsx
@@ -56,7 +56,7 @@ export default function CampaignRateCard({
onChange={handleChange}
/>
-
+
{bannerText}
diff --git a/packages/design-system/lib/components/RateCard/Code/index.tsx b/packages/design-system/lib/components/RateCard/Code/index.tsx
index 8254e060a..0ec9e0c45 100644
--- a/packages/design-system/lib/components/RateCard/Code/index.tsx
+++ b/packages/design-system/lib/components/RateCard/Code/index.tsx
@@ -52,7 +52,7 @@ export default function CodeRateCard({
onChange={handleChange}
/>
-
+
{bannerText}
diff --git a/packages/design-system/lib/components/RateCard/Points/index.tsx b/packages/design-system/lib/components/RateCard/Points/index.tsx
index f32a430a7..2829a1348 100644
--- a/packages/design-system/lib/components/RateCard/Points/index.tsx
+++ b/packages/design-system/lib/components/RateCard/Points/index.tsx
@@ -38,7 +38,7 @@ export default function PointsRateCard({
return (
-
+
{bannerText}
diff --git a/packages/design-system/lib/components/RateCard/rate-card.module.css b/packages/design-system/lib/components/RateCard/rate-card.module.css
index 6b5a78d4a..1d2d8a741 100644
--- a/packages/design-system/lib/components/RateCard/rate-card.module.css
+++ b/packages/design-system/lib/components/RateCard/rate-card.module.css
@@ -152,35 +152,15 @@ label:not(:has(.radio:checked)) .checkIcon {
align-items: center;
gap: var(--Space-x1);
}
-.variant-campaign {
- background-color: var(--Surface-Brand-Primary-1-Default);
-}
-
-.variant-campaign:hover {
- background-color: var(--Scandic-Peach-20);
-}
.variant-campaign .banner {
- background-color: var(--Surface-Brand-Primary-1-OnSurface-Accent);
-}
-
-.variant-code {
- background-color: var(--Surface-Feedback-Information);
-}
-
-.variant-code:hover {
- background-color: var(--Scandic-Blue-10);
+ background-color: var(--Surface-Accent-3);
}
.variant-code .banner {
background-color: var(--Surface-Feedback-Information-Accent);
}
-.variant-points:hover {
- background-color: var(--Scandic-Grey-00);
- cursor: default;
-}
-
.variant-points .banner {
background-color: var(--Surface-Brand-Primary-1-OnSurface-Accent-Secondary);
}