From d58c77493af6ce20dbd38308f4644bfcfb9fd149 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Wed, 2 Oct 2024 15:36:58 +0200 Subject: [PATCH 01/64] feat(SW-350): Update design for booking widget --- app/[lang]/(live)/@bookingwidget/page.tsx | 2 +- app/[lang]/(live)/layout.tsx | 1 + app/[lang]/(live-current)/layout.tsx | 2 +- components/BookingWidget/Client.tsx | 4 +- .../MobileToggleButton/button.module.css | 8 ++- .../BookingWidget/bookingWidget.module.css | 24 +++++++-- components/BookingWidget/index.tsx | 10 +++- components/DatePicker/Screen/Desktop.tsx | 1 + components/DatePicker/date-picker.module.css | 3 +- .../FormContent/Search/search.module.css | 5 ++ .../FormContent/formContent.module.css | 51 ++++++++++++++++--- .../Forms/BookingWidget/FormContent/index.tsx | 36 +++++++++---- .../Forms/BookingWidget/form.module.css | 14 ++++- components/Forms/BookingWidget/index.tsx | 10 ++-- components/Forms/BookingWidget/variants.ts | 15 ++++++ .../Text/Caption/caption.module.css | 4 ++ .../TempDesignSystem/Text/Caption/variants.ts | 1 + types/components/bookingWidget/index.ts | 3 ++ types/components/form/bookingwidget.ts | 1 + 19 files changed, 162 insertions(+), 33 deletions(-) create mode 100644 components/Forms/BookingWidget/variants.ts diff --git a/app/[lang]/(live)/@bookingwidget/page.tsx b/app/[lang]/(live)/@bookingwidget/page.tsx index 13a414cba..b2dd7e1b6 100644 --- a/app/[lang]/(live)/@bookingwidget/page.tsx +++ b/app/[lang]/(live)/@bookingwidget/page.tsx @@ -13,5 +13,5 @@ export default async function BookingWidgetPage() { return null } - return + return } diff --git a/app/[lang]/(live)/layout.tsx b/app/[lang]/(live)/layout.tsx index 3704178c4..fffe0a0b0 100644 --- a/app/[lang]/(live)/layout.tsx +++ b/app/[lang]/(live)/layout.tsx @@ -2,6 +2,7 @@ import "@/app/globals.css" import "@scandic-hotels/design-system/style.css" import Script from "next/script" +import React from "react" import { env } from "@/env/server" import TrpcProvider from "@/lib/trpc/Provider" diff --git a/app/[lang]/(live-current)/layout.tsx b/app/[lang]/(live-current)/layout.tsx index ec3be8b3c..ac6deaf17 100644 --- a/app/[lang]/(live-current)/layout.tsx +++ b/app/[lang]/(live-current)/layout.tsx @@ -65,7 +65,7 @@ export default async function RootLayout({ {header} - + {children}
diff --git a/components/BookingWidget/Client.tsx b/components/BookingWidget/Client.tsx index ce8370bab..48f08f323 100644 --- a/components/BookingWidget/Client.tsx +++ b/components/BookingWidget/Client.tsx @@ -22,6 +22,7 @@ import type { Location } from "@/types/trpc/routers/hotel/locations" export default function BookingWidgetClient({ locations, + type, }: BookingWidgetClientProps) { const [isOpen, setIsOpen] = useState(false) @@ -99,8 +100,9 @@ export default function BookingWidgetClient({ > -
+ +
) diff --git a/components/BookingWidget/MobileToggleButton/button.module.css b/components/BookingWidget/MobileToggleButton/button.module.css index f4a3d80fc..4d501f748 100644 --- a/components/BookingWidget/MobileToggleButton/button.module.css +++ b/components/BookingWidget/MobileToggleButton/button.module.css @@ -6,6 +6,10 @@ display: grid; gap: var(--Spacing-x-one-and-half); padding: var(--Spacing-x2); + position: sticky; + top: 0; + z-index: 1; + background-color: var(--Base-Surface-Primary-light-Normal); } .complete { @@ -13,7 +17,7 @@ } .partial { - grid-template-columns: min(1fr, 150px) min-content min(1fr, 150px) 1fr; + grid-template-columns: minmax(auto, 150px) min-content minmax(auto, 150px) auto; } .icon { @@ -27,7 +31,7 @@ width: 36px; } -@media screen and (min-width: 768px) { +@media screen and (min-width: 767px) { .complete, .partial { display: none; diff --git a/components/BookingWidget/bookingWidget.module.css b/components/BookingWidget/bookingWidget.module.css index 5384dac60..0048f25de 100644 --- a/components/BookingWidget/bookingWidget.module.css +++ b/components/BookingWidget/bookingWidget.module.css @@ -1,16 +1,17 @@ -@media screen and (max-width: 1366px) { +@media screen and (max-width: 766px) { .container { background-color: var(--UI-Input-Controls-Surface-Normal); bottom: -100%; display: grid; gap: var(--Spacing-x3); grid-template-rows: 36px 1fr; - height: 100dvh; + height: calc(100dvh - 20px); padding: var(--Spacing-x3) var(--Spacing-x2) var(--Spacing-x7); position: fixed; transition: bottom 300ms ease; width: 100%; z-index: 10000; + border-radius: var(--Corner-radius-Large) var(--Corner-radius-Large) 0 0; } .container[data-open="true"] { @@ -23,13 +24,26 @@ cursor: pointer; justify-self: flex-end; } + + .container[data-open="true"] + .backdrop { + background-color: rgba(0, 0, 0, 0.4); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 1000; + } } -@media screen and (min-width: 1367px) { +@media screen and (min-width: 767px) { .container { - border-bottom: 1px solid var(--Base-Border-Subtle); - border-top: 1px solid var(--Base-Border-Subtle); display: block; + box-shadow: 0px 4px 24px 0px rgba(0, 0, 0, 0.05); + position: sticky; + top: 0; + z-index: 1; + background-color: var(--Base-Surface-Primary-light-Normal); } .close { diff --git a/components/BookingWidget/index.tsx b/components/BookingWidget/index.tsx index 1c8b02f8e..4b1115647 100644 --- a/components/BookingWidget/index.tsx +++ b/components/BookingWidget/index.tsx @@ -2,16 +2,22 @@ import { getLocations } from "@/lib/trpc/memoizedRequests" import BookingWidgetClient from "./Client" +import type { BookingWidgetType } from "@/types/components/bookingWidget" + export function preload() { void getLocations() } -export default async function BookingWidget() { +export default async function BookingWidget({ + type, +}: { + type: BookingWidgetType +}) { const locations = await getLocations() if (!locations || "error" in locations) { return null } - return + return } diff --git a/components/DatePicker/Screen/Desktop.tsx b/components/DatePicker/Screen/Desktop.tsx index 8656fb8e5..4be5495a2 100644 --- a/components/DatePicker/Screen/Desktop.tsx +++ b/components/DatePicker/Screen/Desktop.tsx @@ -1,4 +1,5 @@ "use client" +import React from "react" import { DayPicker } from "react-day-picker" import { useIntl } from "react-intl" diff --git a/components/DatePicker/date-picker.module.css b/components/DatePicker/date-picker.module.css index faaac7dd0..b11ab3b77 100644 --- a/components/DatePicker/date-picker.module.css +++ b/components/DatePicker/date-picker.module.css @@ -41,7 +41,8 @@ } .container[data-isopen="true"] .hideWrapper { - top: 0; + border-radius: var(--Corner-radius-Large) var(--Corner-radius-Large) 0 0; + top: 20px; } } diff --git a/components/Forms/BookingWidget/FormContent/Search/search.module.css b/components/Forms/BookingWidget/FormContent/Search/search.module.css index d2f40bda3..6a0602fed 100644 --- a/components/Forms/BookingWidget/FormContent/Search/search.module.css +++ b/components/Forms/BookingWidget/FormContent/Search/search.module.css @@ -46,3 +46,8 @@ .input::-webkit-search-cancel-button { display: none; } + +.input:disabled, +.input:disabled::placeholder { + color: var(--Base-Text-Disabled); +} diff --git a/components/Forms/BookingWidget/FormContent/formContent.module.css b/components/Forms/BookingWidget/FormContent/formContent.module.css index 4b62ecdcb..d26036db2 100644 --- a/components/Forms/BookingWidget/FormContent/formContent.module.css +++ b/components/Forms/BookingWidget/FormContent/formContent.module.css @@ -1,5 +1,4 @@ .options { - display: flex; flex-direction: column; justify-content: center; width: 100%; @@ -7,9 +6,30 @@ .option { display: flex; + gap: var(--Spacing-x-one-and-half); + align-items: center; } -@media screen and (max-width: 1366px) { +.infoIcon { + stroke: var(--Base-Text-Disabled); +} + +.vouchers, +.options { + display: none; +} + +.vouchersHeader { + display: flex; + gap: var(--Spacing-x-one-and-half); +} + +.checkbox { + width: var(--Spacing-x3); + height: var(--Spacing-x3); +} + +@media screen and (max-width: 766px) { .input { display: grid; gap: var(--Spacing-x2); @@ -39,7 +59,7 @@ } } -@media screen and (min-width: 1367px) { +@media screen and (min-width: 767px) { .input { display: flex; gap: var(--Spacing-x2); @@ -49,7 +69,6 @@ .vouchers, .when, .where { - border-right: 1px solid var(--Base-Surface-Subtle-Normal); width: 100%; } @@ -59,14 +78,20 @@ } .rooms, + .vouchers, .when { max-width: 240px; padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); + border-radius: var(--Corner-radius-Small); + } + .when:hover, + .rooms:hover, + .rooms:has(.input:active, .input:focus, .input:focus-within) { + background-color: var(--Base-Surface-Primary-light-Hover-alt); } .vouchers { max-width: 200px; - padding: var(--Spacing-x1) 0; } .where { @@ -75,6 +100,20 @@ } .options { - max-width: 158px; + max-width: 190px; + } +} + +@media screen and (min-width: 1367px) { + .vouchers { + display: block; + } + + .options { + display: flex; + } + .vouchers:hover, + .option:hover { + cursor: not-allowed; } } diff --git a/components/Forms/BookingWidget/FormContent/index.tsx b/components/Forms/BookingWidget/FormContent/index.tsx index fcb5bb847..d440138e5 100644 --- a/components/Forms/BookingWidget/FormContent/index.tsx +++ b/components/Forms/BookingWidget/FormContent/index.tsx @@ -5,11 +5,14 @@ import { useIntl } from "react-intl" import { dt } from "@/lib/dt" import DatePicker from "@/components/DatePicker" +import { InfoCircleIcon } from "@/components/Icons" +import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Search from "./Search" import styles from "./formContent.module.css" +import tempStyles from "./Search/search.module.css" // TODO: Remove this when Rooms and Voucher is implemented import type { BookingWidgetFormContentProps } from "@/types/components/form/bookingwidget" @@ -21,6 +24,7 @@ export default function FormContent({ const rooms = intl.formatMessage({ id: "Guests & Rooms" }) const vouchers = intl.formatMessage({ id: "Code / Voucher" }) + const addVouchers = intl.formatMessage({ id: "Add code" }) const bonus = intl.formatMessage({ id: "Use bonus cheque" }) const reward = intl.formatMessage({ id: "Book reward night" }) @@ -44,22 +48,36 @@ export default function FormContent({ {rooms} - + + +
- - {vouchers} - - +
+ + {vouchers} + + +
+ + +
diff --git a/components/Forms/BookingWidget/form.module.css b/components/Forms/BookingWidget/form.module.css index 323d84037..465ba56d6 100644 --- a/components/Forms/BookingWidget/form.module.css +++ b/components/Forms/BookingWidget/form.module.css @@ -12,7 +12,7 @@ width: 100%; } -@media screen and (max-width: 1366px) { +@media screen and (max-width: 766px) { .form { align-self: flex-start; } @@ -24,13 +24,23 @@ } } -@media screen and (min-width: 1367px) { +@media screen and (min-width: 767px) { .section { display: flex; + padding: var(--Spacing-x1) var(--Spacing-x5); } .button { justify-content: center; width: 118px; } + + .default { + border-radius: var(--Corner-radius-Medium); + padding: var(--Spacing-x-one-and-half) var(--Spacing-x2) + var(--Spacing-x-one-and-half) var(--Spacing-x1); + } + .full { + padding: var(--Spacing-x1) var(--Spacing-x5); + } } diff --git a/components/Forms/BookingWidget/index.tsx b/components/Forms/BookingWidget/index.tsx index f78e38be0..8a193b53d 100644 --- a/components/Forms/BookingWidget/index.tsx +++ b/components/Forms/BookingWidget/index.tsx @@ -7,6 +7,7 @@ import Button from "@/components/TempDesignSystem/Button" import Caption from "@/components/TempDesignSystem/Text/Caption" import FormContent from "./FormContent" +import { bookingWidgetVariants } from "./variants" import styles from "./form.module.css" @@ -15,10 +16,14 @@ import type { BookingWidgetFormProps } from "@/types/components/form/bookingwidg const formId = "booking-widget" -export default function Form({ locations }: BookingWidgetFormProps) { +export default function Form({ locations, type }: BookingWidgetFormProps) { const intl = useIntl() const router = useRouter() + const classNames = bookingWidgetVariants({ + type, + }) + const { formState, handleSubmit, register } = useFormContext() @@ -31,7 +36,7 @@ export default function Form({ locations }: BookingWidgetFormProps) { } return ( -
+
diff --git a/components/Forms/BookingWidget/variants.ts b/components/Forms/BookingWidget/variants.ts new file mode 100644 index 000000000..276ac05e7 --- /dev/null +++ b/components/Forms/BookingWidget/variants.ts @@ -0,0 +1,15 @@ +import { cva } from "class-variance-authority" + +import styles from "./form.module.css" + +export const bookingWidgetVariants = cva(styles.section, { + variants: { + type: { + default: styles.default, + full: styles.full, + }, + }, + defaultVariants: { + type: "default", + }, +}) diff --git a/components/TempDesignSystem/Text/Caption/caption.module.css b/components/TempDesignSystem/Text/Caption/caption.module.css index 627f7132a..7966ba995 100644 --- a/components/TempDesignSystem/Text/Caption/caption.module.css +++ b/components/TempDesignSystem/Text/Caption/caption.module.css @@ -67,6 +67,10 @@ p.caption { color: var(--UI-Text-Medium-contrast); } +.disabled { + color: var(--Base-Text-Disabled); +} + .center { text-align: center; } diff --git a/components/TempDesignSystem/Text/Caption/variants.ts b/components/TempDesignSystem/Text/Caption/variants.ts index 4b0dd96af..1a6cd622c 100644 --- a/components/TempDesignSystem/Text/Caption/variants.ts +++ b/components/TempDesignSystem/Text/Caption/variants.ts @@ -13,6 +13,7 @@ const config = { white: styles.white, uiTextActive: styles.uiTextActive, uiTextMediumContrast: styles.uiTextMediumContrast, + disabled: styles.disabled, }, textTransform: { bold: styles.bold, diff --git a/types/components/bookingWidget/index.ts b/types/components/bookingWidget/index.ts index ab4d194d9..1e58e2af1 100644 --- a/types/components/bookingWidget/index.ts +++ b/types/components/bookingWidget/index.ts @@ -6,8 +6,11 @@ import type { Locations } from "@/types/trpc/routers/hotel/locations" export type BookingWidgetSchema = z.output +export type BookingWidgetType = "default" | "full" + export interface BookingWidgetClientProps { locations: Locations + type: BookingWidgetType } export interface BookingWidgetToggleButtonProps { diff --git a/types/components/form/bookingwidget.ts b/types/components/form/bookingwidget.ts index f9ef4d2e1..d37c16a9a 100644 --- a/types/components/form/bookingwidget.ts +++ b/types/components/form/bookingwidget.ts @@ -2,6 +2,7 @@ import type { Location, Locations } from "@/types/trpc/routers/hotel/locations" export interface BookingWidgetFormProps { locations: Locations + type: "default" | "full" } export interface BookingWidgetFormContentProps { From 04406d38651ca0bb8c6966a8d6a7a2c35d09e865 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Wed, 2 Oct 2024 15:51:37 +0200 Subject: [PATCH 02/64] feat(SW-350): Update design for booking widget --- components/BookingWidget/bookingWidget.module.css | 4 ++-- components/BookingWidget/index.tsx | 8 ++------ .../BookingWidget/FormContent/formContent.module.css | 4 ++-- components/Forms/BookingWidget/form.module.css | 4 ++-- types/components/bookingWidget/index.ts | 6 +++++- types/components/form/bookingwidget.ts | 3 ++- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/components/BookingWidget/bookingWidget.module.css b/components/BookingWidget/bookingWidget.module.css index 0048f25de..c56e1e047 100644 --- a/components/BookingWidget/bookingWidget.module.css +++ b/components/BookingWidget/bookingWidget.module.css @@ -1,4 +1,4 @@ -@media screen and (max-width: 766px) { +@media screen and (max-width: 767px) { .container { background-color: var(--UI-Input-Controls-Surface-Normal); bottom: -100%; @@ -36,7 +36,7 @@ } } -@media screen and (min-width: 767px) { +@media screen and (min-width: 768px) { .container { display: block; box-shadow: 0px 4px 24px 0px rgba(0, 0, 0, 0.05); diff --git a/components/BookingWidget/index.tsx b/components/BookingWidget/index.tsx index 4b1115647..f7f220a0b 100644 --- a/components/BookingWidget/index.tsx +++ b/components/BookingWidget/index.tsx @@ -2,17 +2,13 @@ import { getLocations } from "@/lib/trpc/memoizedRequests" import BookingWidgetClient from "./Client" -import type { BookingWidgetType } from "@/types/components/bookingWidget" +import type { BookingWidgetProps } from "@/types/components/bookingWidget" export function preload() { void getLocations() } -export default async function BookingWidget({ - type, -}: { - type: BookingWidgetType -}) { +export default async function BookingWidget({ type }: BookingWidgetProps) { const locations = await getLocations() if (!locations || "error" in locations) { diff --git a/components/Forms/BookingWidget/FormContent/formContent.module.css b/components/Forms/BookingWidget/FormContent/formContent.module.css index d26036db2..952b9cad0 100644 --- a/components/Forms/BookingWidget/FormContent/formContent.module.css +++ b/components/Forms/BookingWidget/FormContent/formContent.module.css @@ -29,7 +29,7 @@ height: var(--Spacing-x3); } -@media screen and (max-width: 766px) { +@media screen and (max-width: 767px) { .input { display: grid; gap: var(--Spacing-x2); @@ -59,7 +59,7 @@ } } -@media screen and (min-width: 767px) { +@media screen and (min-width: 768px) { .input { display: flex; gap: var(--Spacing-x2); diff --git a/components/Forms/BookingWidget/form.module.css b/components/Forms/BookingWidget/form.module.css index 465ba56d6..c3d472d4e 100644 --- a/components/Forms/BookingWidget/form.module.css +++ b/components/Forms/BookingWidget/form.module.css @@ -12,7 +12,7 @@ width: 100%; } -@media screen and (max-width: 766px) { +@media screen and (max-width: 767px) { .form { align-self: flex-start; } @@ -24,7 +24,7 @@ } } -@media screen and (min-width: 767px) { +@media screen and (min-width: 768px) { .section { display: flex; padding: var(--Spacing-x1) var(--Spacing-x5); diff --git a/types/components/bookingWidget/index.ts b/types/components/bookingWidget/index.ts index 1e58e2af1..0f42a7d58 100644 --- a/types/components/bookingWidget/index.ts +++ b/types/components/bookingWidget/index.ts @@ -8,9 +8,13 @@ export type BookingWidgetSchema = z.output export type BookingWidgetType = "default" | "full" +export interface BookingWidgetProps { + type?: BookingWidgetType +} + export interface BookingWidgetClientProps { locations: Locations - type: BookingWidgetType + type?: BookingWidgetType } export interface BookingWidgetToggleButtonProps { diff --git a/types/components/form/bookingwidget.ts b/types/components/form/bookingwidget.ts index d37c16a9a..15c6a4a1e 100644 --- a/types/components/form/bookingwidget.ts +++ b/types/components/form/bookingwidget.ts @@ -1,8 +1,9 @@ +import type { BookingWidgetType } from "@/types/components/bookingWidget" import type { Location, Locations } from "@/types/trpc/routers/hotel/locations" export interface BookingWidgetFormProps { locations: Locations - type: "default" | "full" + type?: BookingWidgetType } export interface BookingWidgetFormContentProps { From aee9e94f7af970bab317b49c52dd75d7e3fee709 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Fri, 4 Oct 2024 10:00:52 +0200 Subject: [PATCH 03/64] feat(SW-350): Implemented tooltip and booking widget tablet design --- .../FormContent/Voucher/index.tsx | 77 ++++++++++ .../FormContent/Voucher/voucher.module.css | 82 +++++++++++ .../FormContent/formContent.module.css | 95 ++++++------ .../Forms/BookingWidget/FormContent/index.tsx | 114 ++++++++------- .../Forms/BookingWidget/form.module.css | 21 +-- components/Forms/BookingWidget/index.tsx | 23 +-- components/TempDesignSystem/Tooltip/index.tsx | 30 ++++ .../Tooltip/tooltip.module.css | 137 ++++++++++++++++++ .../TempDesignSystem/Tooltip/variants.ts | 21 +++ i18n/dictionaries/da.json | 7 +- i18n/dictionaries/de.json | 7 +- i18n/dictionaries/en.json | 5 +- i18n/dictionaries/fi.json | 5 +- i18n/dictionaries/no.json | 5 +- i18n/dictionaries/sv.json | 7 +- types/components/form/bookingwidget.ts | 9 +- types/components/tooltip.ts | 22 +++ 17 files changed, 530 insertions(+), 137 deletions(-) create mode 100644 components/Forms/BookingWidget/FormContent/Voucher/index.tsx create mode 100644 components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css create mode 100644 components/TempDesignSystem/Tooltip/index.tsx create mode 100644 components/TempDesignSystem/Tooltip/tooltip.module.css create mode 100644 components/TempDesignSystem/Tooltip/variants.ts create mode 100644 types/components/tooltip.ts diff --git a/components/Forms/BookingWidget/FormContent/Voucher/index.tsx b/components/Forms/BookingWidget/FormContent/Voucher/index.tsx new file mode 100644 index 000000000..003d35a6a --- /dev/null +++ b/components/Forms/BookingWidget/FormContent/Voucher/index.tsx @@ -0,0 +1,77 @@ +"use client" +import { useIntl } from "react-intl" + +import inputStyles from "@/components/Forms/BookingWidget/FormContent/Search/search.module.css" +import Body from "@/components/TempDesignSystem/Text/Body" +import Caption from "@/components/TempDesignSystem/Text/Caption" +import { Tooltip } from "@/components/TempDesignSystem/Tooltip" + +import styles from "./voucher.module.css" + +export default function Voucher() { + const intl = useIntl() + + const vouchers = intl.formatMessage({ id: "Code / Voucher" }) + const useVouchers = intl.formatMessage({ id: "Use code/voucher" }) + const addVouchers = intl.formatMessage({ id: "Add code" }) + const bonus = intl.formatMessage({ id: "Use bonus cheque" }) + const reward = intl.formatMessage({ id: "Book reward night" }) + const disabledBookingOptionsHeader = intl.formatMessage({ + id: "Disabled booking options header", + }) + const disabledBookingOptionsText = intl.formatMessage({ + id: "Disabled booking options text", + }) + + return ( +
+ +
+
+ + {vouchers} + + {/* Out of scope for this release */} +
+ + + +
+
+ +
+ + + +
+
+
+ ) +} diff --git a/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css b/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css new file mode 100644 index 000000000..a3eea23de --- /dev/null +++ b/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css @@ -0,0 +1,82 @@ +.vouchers { + display: block; +} +.options { + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; +} + +.option { + display: flex; + gap: var(--Spacing-x2); + margin-top: var(--Spacing-x2); + align-items: center; +} +.vouchers { + width: 100%; + + padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); + border-radius: var(--Corner-radius-Small); +} + +.optionsContainer { + display: flex; + flex-direction: column; +} + +.checkbox { + width: var(--Spacing-x3); + height: var(--Spacing-x3); +} + +.checkboxVoucher { + display: none; +} + +@media screen and (min-width: 768px) { + .vouchers { + display: none; + } + .options { + flex-direction: row; + gap: var(--Spacing-x4); + } + .option { + margin-top: 0; + gap: var(--Spacing-x-one-and-half); + } + .checkboxVoucher { + display: flex; + } +} + +@media screen and (max-width: 1366px) { + .vouchers { + background-color: var(--Base-Background-Primary-Normal); + border-radius: var(--Corner-radius-Medium); + } +} + +@media screen and (min-width: 1367px) { + .vouchers { + display: block; + max-width: 200px; + } + .options { + flex-direction: column; + max-width: 190px; + gap: 0; + } + .vouchers:hover, + .option:hover { + cursor: not-allowed; + } + .optionsContainer { + flex-direction: row; + } + .checkboxVoucher { + display: none; + } +} diff --git a/components/Forms/BookingWidget/FormContent/formContent.module.css b/components/Forms/BookingWidget/FormContent/formContent.module.css index 952b9cad0..cbb2de147 100644 --- a/components/Forms/BookingWidget/FormContent/formContent.module.css +++ b/components/Forms/BookingWidget/FormContent/formContent.module.css @@ -1,24 +1,7 @@ -.options { - flex-direction: column; - justify-content: center; - width: 100%; -} - -.option { - display: flex; - gap: var(--Spacing-x-one-and-half); - align-items: center; -} - .infoIcon { stroke: var(--Base-Text-Disabled); } -.vouchers, -.options { - display: none; -} - .vouchersHeader { display: flex; gap: var(--Spacing-x-one-and-half); @@ -28,9 +11,19 @@ width: var(--Spacing-x3); height: var(--Spacing-x3); } +.icon, +.voucherRow { + display: none; +} @media screen and (max-width: 767px) { - .input { + .voucherContainer { + padding: var(--Spacing-x2) 0 var(--Spacing-x4); + } +} + +@media screen and (max-width: 1367px) { + .inputContainer { display: grid; gap: var(--Spacing-x2); } @@ -49,36 +42,39 @@ padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); } - .options { - gap: var(--Spacing-x2); - margin-top: var(--Spacing-x2); - } - - .option { - gap: var(--Spacing-x2); + .button { + align-self: flex-end; + justify-content: center; + width: 100%; } } @media screen and (min-width: 768px) { .input { display: flex; + align-items: center; + } + .inputContainer { + display: flex; + flex: 2; gap: var(--Spacing-x2); } + .voucherContainer { + flex: 1; + } .rooms, - .vouchers, .when, .where { width: 100%; } - .input input[type="text"] { + .inputContainer input[type="text"] { border: none; - height: 24px; + height: var(--Spacing-x3); } .rooms, - .vouchers, .when { max-width: 240px; padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); @@ -90,30 +86,43 @@ background-color: var(--Base-Surface-Primary-light-Hover-alt); } - .vouchers { - max-width: 200px; - } - .where { max-width: 280px; position: relative; } - .options { - max-width: 190px; + .button { + justify-content: center; + width: 118px; } } -@media screen and (min-width: 1367px) { - .vouchers { - display: block; +@media screen and (min-width: 768px) and (max-width: 1366px) { + .inputContainer { + padding: var(--Spacing-x2); } - - .options { + .buttonContainer { + padding-right: var(--Spacing-x2); + } + .input .buttonContainer .button { + padding: var(--Spacing-x1); + width: var(--Spacing-x6); + height: var(--Spacing-x6); + } + .buttonText { + display: none; + } + .icon { display: flex; } - .vouchers:hover, - .option:hover { - cursor: not-allowed; + + .voucherRow { + display: flex; + background: var(--Base-Surface-Primary-light-Hover); + border-bottom: 1px solid var(--Primary-Light-On-Surface-Divider-subtle); + padding: var(--Spacing-x2); + } + .voucherContainer { + display: none; } } diff --git a/components/Forms/BookingWidget/FormContent/index.tsx b/components/Forms/BookingWidget/FormContent/index.tsx index d440138e5..ec62f1aa6 100644 --- a/components/Forms/BookingWidget/FormContent/index.tsx +++ b/components/Forms/BookingWidget/FormContent/index.tsx @@ -1,85 +1,93 @@ "use client" +import React from "react" import { useWatch } from "react-hook-form" import { useIntl } from "react-intl" import { dt } from "@/lib/dt" import DatePicker from "@/components/DatePicker" -import { InfoCircleIcon } from "@/components/Icons" +import { SearchIcon } from "@/components/Icons" +import Button from "@/components/TempDesignSystem/Button" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Search from "./Search" +import Voucher from "./Voucher" import styles from "./formContent.module.css" -import tempStyles from "./Search/search.module.css" // TODO: Remove this when Rooms and Voucher is implemented +import inputStyles from "./Search/search.module.css" import type { BookingWidgetFormContentProps } from "@/types/components/form/bookingwidget" export default function FormContent({ locations, + formId, + formState, }: BookingWidgetFormContentProps) { const intl = useIntl() const selectedDate = useWatch({ name: "date" }) const rooms = intl.formatMessage({ id: "Guests & Rooms" }) - const vouchers = intl.formatMessage({ id: "Code / Voucher" }) - const addVouchers = intl.formatMessage({ id: "Add code" }) - const bonus = intl.formatMessage({ id: "Use bonus cheque" }) - const reward = intl.formatMessage({ id: "Book reward night" }) const nights = dt(selectedDate.to).diff(dt(selectedDate.from), "days") return ( -
-
- -
-
- - {intl.formatMessage( - { id: "booking.nights" }, - { totalNights: nights } - )} - - -
-
- - {rooms} - - - - -
-
-
- - {vouchers} - - + <> +
+
+
+ +
+
+ + {intl.formatMessage( + { id: "booking.nights" }, + { totalNights: nights } + )} + + +
+
+ + {rooms} + + + + +
+
+
+ +
+
+
- - -
-
- - +
+
-
+ ) } diff --git a/components/Forms/BookingWidget/form.module.css b/components/Forms/BookingWidget/form.module.css index c3d472d4e..0c784b797 100644 --- a/components/Forms/BookingWidget/form.module.css +++ b/components/Forms/BookingWidget/form.module.css @@ -8,7 +8,6 @@ .form { display: grid; - gap: var(--Spacing-x2); width: 100%; } @@ -16,27 +15,23 @@ .form { align-self: flex-start; } - - .button { - align-self: flex-end; - justify-content: center; - width: 100%; - } } @media screen and (min-width: 768px) { .section { display: flex; - padding: var(--Spacing-x1) var(--Spacing-x5); - } - - .button { - justify-content: center; - width: 118px; } .default { border-radius: var(--Corner-radius-Medium); + } +} + +@media screen and (min-width: 1367px) { + .section { + padding: var(--Spacing-x1) var(--Spacing-x5); + } + .default { padding: var(--Spacing-x-one-and-half) var(--Spacing-x2) var(--Spacing-x-one-and-half) var(--Spacing-x1); } diff --git a/components/Forms/BookingWidget/index.tsx b/components/Forms/BookingWidget/index.tsx index 8a193b53d..80a822315 100644 --- a/components/Forms/BookingWidget/index.tsx +++ b/components/Forms/BookingWidget/index.tsx @@ -1,10 +1,6 @@ "use client" import { useRouter } from "next/navigation" import { useFormContext } from "react-hook-form" -import { useIntl } from "react-intl" - -import Button from "@/components/TempDesignSystem/Button" -import Caption from "@/components/TempDesignSystem/Text/Caption" import FormContent from "./FormContent" import { bookingWidgetVariants } from "./variants" @@ -17,7 +13,6 @@ import type { BookingWidgetFormProps } from "@/types/components/form/bookingwidg const formId = "booking-widget" export default function Form({ locations, type }: BookingWidgetFormProps) { - const intl = useIntl() const router = useRouter() const classNames = bookingWidgetVariants({ @@ -43,20 +38,12 @@ export default function Form({ locations, type }: BookingWidgetFormProps) { id={formId} > - + -
) } diff --git a/components/TempDesignSystem/Tooltip/index.tsx b/components/TempDesignSystem/Tooltip/index.tsx new file mode 100644 index 000000000..7bc85d930 --- /dev/null +++ b/components/TempDesignSystem/Tooltip/index.tsx @@ -0,0 +1,30 @@ +import Caption from "@/components/TempDesignSystem/Text/Caption" + +import { tooltipVariants } from "./variants" + +import styles from "./tooltip.module.css" + +import { TooltipPosition, TooltipProps } from "@/types/components/tooltip" + +export function Tooltip

({ + heading, + text, + position, + arrow, + children, +}: TooltipProps

) { + const className = tooltipVariants({ position, arrow }) + return ( +

+
+ {heading && ( + + {heading} + + )} + {text && {text}} +
+ {children} +
+ ) +} diff --git a/components/TempDesignSystem/Tooltip/tooltip.module.css b/components/TempDesignSystem/Tooltip/tooltip.module.css new file mode 100644 index 000000000..2a6b00b43 --- /dev/null +++ b/components/TempDesignSystem/Tooltip/tooltip.module.css @@ -0,0 +1,137 @@ +.tooltipContainer { + position: relative; + display: inline-block; +} + +.tooltip { + padding: var(--Spacing-x1); + background-color: var(--UI-Text-Active); + border: 0.5px solid var(--UI-Border-Active); + border-radius: var(--Corner-radius-Medium); + color: var(--Base-Text-Inverted); + position: absolute; + visibility: hidden; + z-index: 1000; + opacity: 0; + transition: opacity 0.3s; + max-width: 200px; +} + +.tooltipContainer:hover .tooltip { + visibility: visible; + opacity: 1; +} + +.left { + right: 100%; +} + +.right { + left: 100%; +} + +.top { + bottom: 100%; +} + +.bottom { + top: 100%; +} + +.tooltip::before { + content: ""; + position: absolute; + border-style: solid; +} + +.bottom.arrowLeft::before { + top: -8px; + left: 16px; + border-width: 0 7px 8px 7px; + border-color: transparent transparent var(--UI-Text-Active) transparent; +} + +.bottom.arrowCenter::before { + top: -8px; + left: 50%; + transform: translateX(-50%); + border-width: 0 7px 8px 7px; + border-color: transparent transparent var(--UI-Text-Active) transparent; +} + +.bottom.arrowRight::before { + top: -8px; + right: 16px; + border-width: 0 7px 8px 7px; + border-color: transparent transparent var(--UI-Text-Active) transparent; +} + +.top.arrowLeft::before { + bottom: -8px; + left: 16px; + border-width: 8px 7px 0 7px; + border-color: var(--UI-Text-Active) transparent transparent transparent; +} + +.top.arrowCenter::before { + bottom: -8px; + left: 50%; + transform: translateX(-50%); + border-width: 8px 7px 0 7px; + border-color: var(--UI-Text-Active) transparent transparent transparent; +} + +.top.arrowRight::before { + bottom: -8px; + right: 16px; + border-width: 8px 7px 0 7px; + border-color: var(--UI-Text-Active) transparent transparent transparent; +} + +.left.arrowTop::before { + top: 16px; + right: -8px; + transform: translateY(-50%); + border-width: 7px 0 7px 8px; + border-color: transparent transparent transparent var(--UI-Text-Active); +} + +.left.arrowCenter::before { + top: 50%; + right: -8px; + transform: translateY(-50%); + border-width: 7px 0 7px 8px; + border-color: transparent transparent transparent var(--UI-Text-Active); +} + +.left.arrowBottom::before { + bottom: 16px; + right: -8px; + transform: translateY(50%); + border-width: 7px 0 7px 8px; + border-color: transparent transparent transparent var(--UI-Text-Active); +} + +.right.arrowTop::before { + top: 16px; + left: -8px; + transform: translateY(-50%); + border-width: 7px 8px 7px 0; + border-color: transparent var(--UI-Text-Active) transparent transparent; +} + +.right.arrowCenter::before { + top: 50%; + left: -8px; + transform: translateY(-50%); + border-width: 7px 8px 7px 0; + border-color: transparent var(--UI-Text-Active) transparent transparent; +} + +.right.arrowBottom::before { + bottom: 16px; + left: -8px; + transform: translateY(50%); + border-width: 7px 8px 7px 0; + border-color: transparent var(--UI-Text-Active) transparent transparent; +} diff --git a/components/TempDesignSystem/Tooltip/variants.ts b/components/TempDesignSystem/Tooltip/variants.ts new file mode 100644 index 000000000..286466f92 --- /dev/null +++ b/components/TempDesignSystem/Tooltip/variants.ts @@ -0,0 +1,21 @@ +import { cva } from "class-variance-authority" + +import styles from "./tooltip.module.css" + +export const tooltipVariants = cva(styles.tooltip, { + variants: { + position: { + left: styles.left, + right: styles.right, + top: styles.top, + bottom: styles.bottom, + }, + arrow: { + left: styles.arrowLeft, + right: styles.arrowRight, + center: styles.arrowCenter, + top: styles.arrowTop, + bottom: styles.arrowBottom, + }, + }, +}) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 35b5e759a..cf1889d1d 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -18,7 +18,7 @@ "As our Close Friend": "Som vores nære ven", "At latest": "Senest", "At the hotel": "På hotellet", - "Attractions": "Attraktioner", + "Attraction": "Attraktion", "Back to scandichotels.com": "Tilbage til scandichotels.com", "Bed type": "Seng type", "Book": "Book", @@ -60,6 +60,8 @@ "Day": "Dag", "Description": "Beskrivelse", "Destinations & hotels": "Destinationer & hoteller", + "Disabled booking options header": "Vi beklager", + "Disabled booking options text": "Koder, checks og bonusnætter er endnu ikke tilgængelige på den nye hjemmeside.", "Discard changes": "Kassér ændringer", "Discard unsaved changes?": "Slette ændringer, der ikke er gemt?", "Distance to city centre": "{number}km til centrum", @@ -228,6 +230,7 @@ "Type of bed": "Sengtype", "Type of room": "Værelsestype", "Use bonus cheque": "Brug Bonus Cheque", + "Use code/voucher": "Brug kode/voucher", "User information": "Brugeroplysninger", "View as list": "Vis som liste", "View as map": "Vis som kort", @@ -281,4 +284,4 @@ "spendable points expiring by": "{points} Brugbare point udløber den {date}", "to": "til", "uppercase letter": "stort bogstav" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 916804097..296486732 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -18,7 +18,7 @@ "As our Close Friend": "Als unser enger Freund", "At latest": "Spätestens", "At the hotel": "Im Hotel", - "Attractions": "Attraktionen", + "Attraction": "Attraktion", "Back to scandichotels.com": "Zurück zu scandichotels.com", "Bed type": "Bettentyp", "Book": "Buchen", @@ -60,6 +60,8 @@ "Day": "Tag", "Description": "Beschreibung", "Destinations & hotels": "Reiseziele & Hotels", + "Disabled booking options header": "Es tut uns leid", + "Disabled booking options text": "Codes, Schecks und Bonusnächte sind auf der neuen Website noch nicht verfügbar.", "Discard changes": "Änderungen verwerfen", "Discard unsaved changes?": "Nicht gespeicherte Änderungen verwerfen?", "Distance to city centre": "{number}km zum Stadtzentrum", @@ -227,6 +229,7 @@ "Type of bed": "Bettentyp", "Type of room": "Zimmerart", "Use bonus cheque": "Bonusscheck nutzen", + "Use code/voucher": "Code/Gutschein nutzen", "User information": "Nutzerinformation", "View as list": "Als Liste anzeigen", "View as map": "Als Karte anzeigen", @@ -280,4 +283,4 @@ "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", "to": "zu", "uppercase letter": "großbuchstabe" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index c663a0f80..f044f990e 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -61,6 +61,8 @@ "Description": "Description", "Destinations & hotels": "Destinations & hotels", "Destination": "Destination", + "Disabled booking options header": "We're sorry", + "Disabled booking options text": "Codes, cheques and reward nights aren't available on the new website yet.", "Discard changes": "Discard changes", "Discard unsaved changes?": "Discard unsaved changes?", "Distance to city centre": "{number}km to city centre", @@ -230,6 +232,7 @@ "Type of bed": "Type of bed", "Type of room": "Type of room", "Use bonus cheque": "Use bonus cheque", + "Use code/voucher": "Use code/voucher", "User information": "User information", "View as list": "View as list", "View as map": "View as map", @@ -285,4 +288,4 @@ "spendable points expiring by": "{points} spendable points expiring by {date}", "to": "to", "uppercase letter": "uppercase letter" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index aa12eccf0..1aa5165b7 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -60,6 +60,8 @@ "Day": "Päivä", "Description": "Kuvaus", "Destinations & hotels": "Kohteet ja hotellit", + "Disabled booking options header": "Olemme pahoillamme", + "Disabled booking options text": "Koodit, sekit ja palkintoillat eivät ole vielä saatavilla uudella verkkosivustolla.", "Discard changes": "Hylkää muutokset", "Discard unsaved changes?": "Hylkäätkö tallentamattomat muutokset?", "Distance to city centre": "{number}km Etäisyys kaupunkiin", @@ -228,6 +230,7 @@ "Type of bed": "Vuodetyyppi", "Type of room": "Huonetyyppi", "Use bonus cheque": "Käytä bonussekkiä", + "Use code/voucher": "Käytä koodia/voucheria", "User information": "Käyttäjän tiedot", "View as list": "Näytä listana", "View as map": "Näytä kartalla", @@ -281,4 +284,4 @@ "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", "to": "to", "uppercase letter": "iso kirjain" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index ed600ecb5..29103820b 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -60,6 +60,8 @@ "Day": "Dag", "Description": "Beskrivelse", "Destinations & hotels": "Destinasjoner og hoteller", + "Disabled booking options header": "Vi beklager", + "Disabled booking options text": "Koder, checks og belønningsnætter er enda ikke tilgjengelige på den nye nettsiden.", "Discard changes": "Forkaste endringer", "Discard unsaved changes?": "Forkaste endringer som ikke er lagret?", "Distance to city centre": "{number}km til sentrum", @@ -228,6 +230,7 @@ "Type of bed": "Sengtype", "Type of room": "Romtype", "Use bonus cheque": "Bruk bonussjekk", + "Use code/voucher": "Bruk kode/voucher", "User information": "Brukerinformasjon", "View as list": "Vis som liste", "View as map": "Vis som kart", @@ -281,4 +284,4 @@ "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", "to": "til", "uppercase letter": "stor bokstav" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 9f3f71511..5f9c89db8 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -60,6 +60,8 @@ "Day": "Dag", "Description": "Beskrivning", "Destinations & hotels": "Destinationer & hotell", + "Disabled booking options header": "Vi beklagar", + "Disabled booking options text": "Koder, bonuscheckar och belöningsnätter är inte tillgängliga på den nya webbplatsen än.", "Discard changes": "Ignorera ändringar", "Discard unsaved changes?": "Vill du ignorera ändringar som inte har sparats?", "Distance to city centre": "{number}km till centrum", @@ -227,7 +229,8 @@ "Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)", "Type of bed": "Sängtyp", "Type of room": "Rumstyp", - "Use bonus cheque": "Use bonus cheque", + "Use bonus cheque": "Använd bonuscheck", + "Use code/voucher": "Använd kod/voucher", "User information": "Användarinformation", "View as list": "Visa som lista", "View as map": "Visa som karta", @@ -281,4 +284,4 @@ "spendable points expiring by": "{points} poäng förfaller {date}", "to": "till", "uppercase letter": "stor bokstav" -} \ No newline at end of file +} diff --git a/types/components/form/bookingwidget.ts b/types/components/form/bookingwidget.ts index 15c6a4a1e..e655b8b59 100644 --- a/types/components/form/bookingwidget.ts +++ b/types/components/form/bookingwidget.ts @@ -1,4 +1,9 @@ -import type { BookingWidgetType } from "@/types/components/bookingWidget" +import { FormState, UseFormReturn } from "react-hook-form" + +import type { + BookingWidgetSchema, + BookingWidgetType, +} from "@/types/components/bookingWidget" import type { Location, Locations } from "@/types/trpc/routers/hotel/locations" export interface BookingWidgetFormProps { @@ -8,6 +13,8 @@ export interface BookingWidgetFormProps { export interface BookingWidgetFormContentProps { locations: Locations + formId: string + formState: FormState } export enum ActionType { diff --git a/types/components/tooltip.ts b/types/components/tooltip.ts new file mode 100644 index 000000000..f78c2b1c5 --- /dev/null +++ b/types/components/tooltip.ts @@ -0,0 +1,22 @@ +export type TooltipPosition = "left" | "right" | "top" | "bottom" +type VerticalArrow = "top" | "bottom" | "center" +type HorizontalArrow = "left" | "right" | "center" + +type ValidArrowMap = { + left: VerticalArrow + right: VerticalArrow + top: HorizontalArrow + bottom: HorizontalArrow +} + +type ValidArrow

= P extends keyof ValidArrowMap + ? ValidArrowMap[P] + : never + +export interface TooltipProps

{ + heading?: string + text?: string + position: P + arrow: ValidArrow

+ children: React.ReactNode +} From 4103e3fb37461d3a276e1cecea917392282c2992 Mon Sep 17 00:00:00 2001 From: Tobias Johansson Date: Fri, 4 Oct 2024 09:37:09 +0000 Subject: [PATCH 04/64] Merged in feat/SW-431-payment-flow (pull request #635) Feat/SW-431 payment flow * feat(SW-431): Update mock hotel data * feat(SW-431): Added route handler and trpc routes * feat(SW-431): List payment methods and handle booking status and redirection * feat(SW-431): Updated booking page to poll for booking status * feat(SW-431): Updated create booking contract * feat(SW-431): small fix * fix(SW-431): Added intl string and sorted dictionaries * fix(SW-431): Changes from PR * fix(SW-431): fixes from PR * fix(SW-431): add todo comments * fix(SW-431): update schema prop Approved-by: Simon.Emanuelsson --- .../hotelreservation/[section]/page.tsx | 21 +- .../booking-confirmation/loading.tsx | 5 + .../booking-confirmation/page.tsx | 63 +++++- .../payment-callback/[lang]/[status]/route.ts | 37 ++++ .../IntroSection/index.tsx | 7 +- .../BookingConfirmation/StaySection/index.tsx | 7 +- .../SummarySection/index.tsx | 7 +- .../SelectRate/Payment/index.tsx | 193 +++++++++++++----- .../SelectRate/Payment/payment.module.css | 18 ++ constants/booking.ts | 7 + constants/routes/hotelReservation.js | 20 ++ hooks/booking/useHandleBookingStatus.ts | 35 ++++ i18n/dictionaries/da.json | 51 ++--- i18n/dictionaries/de.json | 53 ++--- i18n/dictionaries/en.json | 61 +++--- i18n/dictionaries/fi.json | 49 ++--- i18n/dictionaries/no.json | 51 ++--- i18n/dictionaries/sv.json | 51 ++--- server/routers/booking/index.ts | 6 +- server/routers/booking/input.ts | 90 +++++--- server/routers/booking/mutation.ts | 17 +- server/routers/booking/output.ts | 4 +- server/routers/booking/query.ts | 85 ++++++++ server/routers/hotels/output.ts | 17 ++ server/trpc.ts | 37 ++-- .../hotelReservation/selectRate/section.ts | 6 + 26 files changed, 711 insertions(+), 287 deletions(-) create mode 100644 app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx create mode 100644 app/api/web/payment-callback/[lang]/[status]/route.ts create mode 100644 components/HotelReservation/SelectRate/Payment/payment.module.css create mode 100644 constants/booking.ts create mode 100644 hooks/booking/useHandleBookingStatus.ts create mode 100644 server/routers/booking/query.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index a0373645b..b3ef81538 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -1,6 +1,6 @@ +import { notFound } from "next/navigation" + import { serverClient } from "@/lib/trpc/server" -import { getHotelDataSchema } from "@/server/routers/hotels/output" -import tempHotelData from "@/server/routers/hotels/tempHotelData.json" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection" @@ -80,12 +80,19 @@ export default async function SectionsPage({ }: PageArgs) { setLang(params.lang) - // TODO: Use real endpoint. - const hotel = getHotelDataSchema.parse(tempHotelData) + const hotel = await serverClient().hotel.hotelData.get({ + hotelId: "811", + language: params.lang, + }) + + if (!hotel) { + // TODO: handle case with hotel missing + return notFound() + } const rooms = await serverClient().hotel.rates.get({ // TODO: pass the correct hotel ID and all other parameters that should be included in the search - hotelId: "1", + hotelId: hotel.data.id, }) const intl = await getIntl() @@ -170,7 +177,9 @@ export default async function SectionsPage({ header={intl.formatMessage({ id: "Payment info" })} path={`payment?${currentSearchParams}`} > - {params.section === "payment" && } + {params.section === "payment" && ( + + )}

diff --git a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx new file mode 100644 index 000000000..c739b6635 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx @@ -0,0 +1,5 @@ +import LoadingSpinner from "@/components/LoadingSpinner" + +export default function Loading() { + return +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx index 46f941bbc..0a22c5bc0 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx @@ -1,20 +1,67 @@ +"use client" + +import { useMemo } from "react" + +import { + BOOKING_CONFIRMATION_NUMBER, + BookingStatusEnum, +} from "@/constants/booking" + import IntroSection from "@/components/HotelReservation/BookingConfirmation/IntroSection" import StaySection from "@/components/HotelReservation/BookingConfirmation/StaySection" import SummarySection from "@/components/HotelReservation/BookingConfirmation/SummarySection" import { tempConfirmationData } from "@/components/HotelReservation/BookingConfirmation/tempConfirmationData" +import LoadingSpinner from "@/components/LoadingSpinner" +import { useHandleBookingStatus } from "@/hooks/booking/useHandleBookingStatus" import styles from "./page.module.css" +const maxRetries = 10 +const retryInterval = 2000 + export default function BookingConfirmationPage() { const { email, hotel, stay, summary } = tempConfirmationData - return ( -
-
- - - -
-
+ const confirmationNumber = useMemo(() => { + if (typeof window === "undefined") return "" + + const storedConfirmationNumber = sessionStorage.getItem( + BOOKING_CONFIRMATION_NUMBER + ) + // TODO: cleanup stored values + // sessionStorage.removeItem(BOOKING_CONFIRMATION_NUMBER) + return storedConfirmationNumber + }, []) + + const bookingStatus = useHandleBookingStatus( + confirmationNumber, + BookingStatusEnum.BookingCompleted, + maxRetries, + retryInterval ) + + if ( + confirmationNumber === null || + bookingStatus.isError || + (bookingStatus.isFetched && !bookingStatus.data) + ) { + // TODO: handle error + throw new Error("Error fetching booking status") + } + + if ( + bookingStatus.data?.reservationStatus === BookingStatusEnum.BookingCompleted + ) { + return ( +
+
+ + + +
+
+ ) + } + + return } diff --git a/app/api/web/payment-callback/[lang]/[status]/route.ts b/app/api/web/payment-callback/[lang]/[status]/route.ts new file mode 100644 index 000000000..0b8133c43 --- /dev/null +++ b/app/api/web/payment-callback/[lang]/[status]/route.ts @@ -0,0 +1,37 @@ +import { NextRequest, NextResponse } from "next/server" +import { env } from "process" + +import { Lang } from "@/constants/languages" +import { + bookingConfirmation, + payment, +} from "@/constants/routes/hotelReservation" + +export async function GET( + request: NextRequest, + { params }: { params: { lang: string; status: string } } +): Promise { + console.log(`[payment-callback] callback started`) + const lang = params.lang as Lang + const status = params.status + const returnUrl = new URL(`${env.PUBLIC_URL}/${payment[lang]}`) + + if (status === "success") { + const confirmationUrl = new URL( + `${env.PUBLIC_URL}/${bookingConfirmation[lang]}` + ) + console.log(`[payment-callback] redirecting to: ${confirmationUrl}`) + return NextResponse.redirect(confirmationUrl) + } + + if (status === "cancel") { + returnUrl.searchParams.set("cancel", "true") + } + + if (status === "error") { + returnUrl.searchParams.set("error", "true") + } + + console.log(`[payment-callback] redirecting to: ${returnUrl}`) + return NextResponse.redirect(returnUrl) +} diff --git a/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx b/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx index 9482f51fe..448dc82e1 100644 --- a/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx @@ -1,16 +1,17 @@ +import { useIntl } from "react-intl" + import Button from "@/components/TempDesignSystem/Button" import Link from "@/components/TempDesignSystem/Link" import Body from "@/components/TempDesignSystem/Text/Body" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./introSection.module.css" import { IntroSectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function IntroSection({ email }: IntroSectionProps) { - const intl = await getIntl() +export default function IntroSection({ email }: IntroSectionProps) { + const intl = useIntl() return (
diff --git a/components/HotelReservation/BookingConfirmation/StaySection/index.tsx b/components/HotelReservation/BookingConfirmation/StaySection/index.tsx index 99ecae8ca..7907ac191 100644 --- a/components/HotelReservation/BookingConfirmation/StaySection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/StaySection/index.tsx @@ -1,16 +1,17 @@ +import { useIntl } from "react-intl" + import { ArrowRightIcon, ScandicLogoIcon } from "@/components/Icons" import Image from "@/components/Image" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./staySection.module.css" import { StaySectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function StaySection({ hotel, stay }: StaySectionProps) { - const intl = await getIntl() +export default function StaySection({ hotel, stay }: StaySectionProps) { + const intl = useIntl() const nightsText = stay.nights > 1 diff --git a/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx b/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx index 509af9c52..16eb84330 100644 --- a/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx @@ -1,13 +1,14 @@ +import { useIntl } from "react-intl" + import Caption from "@/components/TempDesignSystem/Text/Caption" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./summarySection.module.css" import { SummarySectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function SummarySection({ summary }: SummarySectionProps) { - const intl = await getIntl() +export default function SummarySection({ summary }: SummarySectionProps) { + const intl = useIntl() const roomType = `${intl.formatMessage({ id: "Type of room" })}: ${summary.roomType}` const bedType = `${intl.formatMessage({ id: "Type of bed" })}: ${summary.bedType}` const breakfast = `${intl.formatMessage({ id: "Breakfast" })}: ${summary.breakfast}` diff --git a/components/HotelReservation/SelectRate/Payment/index.tsx b/components/HotelReservation/SelectRate/Payment/index.tsx index ed8068076..3ddf73c01 100644 --- a/components/HotelReservation/SelectRate/Payment/index.tsx +++ b/components/HotelReservation/SelectRate/Payment/index.tsx @@ -1,62 +1,161 @@ "use client" +import { useRouter } from "next/navigation" +import { useEffect, useState } from "react" +import { useIntl } from "react-intl" + +import { + BOOKING_CONFIRMATION_NUMBER, + BookingStatusEnum, +} from "@/constants/booking" import { trpc } from "@/lib/trpc/client" +import LoadingSpinner from "@/components/LoadingSpinner" import Button from "@/components/TempDesignSystem/Button" +import { toast } from "@/components/TempDesignSystem/Toasts" +import { useHandleBookingStatus } from "@/hooks/booking/useHandleBookingStatus" +import useLang from "@/hooks/useLang" + +import styles from "./payment.module.css" + +import { PaymentProps } from "@/types/components/hotelReservation/selectRate/section" + +const maxRetries = 40 +const retryInterval = 2000 + +export default function Payment({ hotel }: PaymentProps) { + const router = useRouter() + const lang = useLang() + const intl = useIntl() + const [confirmationNumber, setConfirmationNumber] = useState("") + const [selectedPaymentMethod, setSelectedPaymentMethod] = useState("") -export default function Payment() { const initiateBooking = trpc.booking.booking.create.useMutation({ onSuccess: (result) => { - // TODO: Handle success, poll for payment link and redirect the user to the payment - console.log("Res", result) + if (result?.confirmationNumber) { + // Planet doesn't support query params so we have to store values in session storage + sessionStorage.setItem( + BOOKING_CONFIRMATION_NUMBER, + result.confirmationNumber + ) + + setConfirmationNumber(result.confirmationNumber) + } else { + // TODO: add proper error message + toast.error("Failed to create booking") + } }, - onError: () => { - // TODO: Handle error - console.log("Error") + onError: (error) => { + console.error("Error", error) + // TODO: add proper error message + toast.error("Failed to create booking") }, }) - return ( - + packages: { + breakfast: true, + allergyFriendly: true, + petFriendly: true, + accessibility: true, + }, + smsConfirmationRequested: true, + }, + ], + payment: { + paymentMethod: selectedPaymentMethod, + cardHolder: { + email: "test.user@scandichotels.com", + name: "Test User", + phoneCountryCode: "", + phoneSubscriber: "", + }, + success: `api/web/payment-callback/${lang}/success`, + error: `api/web/payment-callback/${lang}/error`, + cancel: `api/web/payment-callback/${lang}/cancel`, + }, + }) + } + + if ( + initiateBooking.isPending || + (confirmationNumber && !bookingStatus.data?.paymentUrl) + ) { + return + } + + return ( +
+
+
+ + {hotel.merchantInformationData.alternatePaymentOptions.map( + (paymentOption) => ( + + ) + )} +
+
+ +
) } diff --git a/components/HotelReservation/SelectRate/Payment/payment.module.css b/components/HotelReservation/SelectRate/Payment/payment.module.css new file mode 100644 index 000000000..9200ce8f3 --- /dev/null +++ b/components/HotelReservation/SelectRate/Payment/payment.module.css @@ -0,0 +1,18 @@ +.paymentItemContainer { + max-width: 480px; + display: flex; + flex-direction: column; + gap: var(--Spacing-x1); + padding-bottom: var(--Spacing-x4); +} + +.paymentItem { + background-color: var(--Base-Background-Normal); + padding: var(--Spacing-x3); + border: 1px solid var(--Base-Border-Normal); + border-radius: var(--Corner-radius-Medium); + display: flex; + align-items: center; + gap: var(--Spacing-x2); + cursor: pointer; +} diff --git a/constants/booking.ts b/constants/booking.ts new file mode 100644 index 000000000..664240a79 --- /dev/null +++ b/constants/booking.ts @@ -0,0 +1,7 @@ +export enum BookingStatusEnum { + CreatedInOhip = "CreatedInOhip", + PaymentRegistered = "PaymentRegistered", + BookingCompleted = "BookingCompleted", +} + +export const BOOKING_CONFIRMATION_NUMBER = "bookingConfirmationNumber" diff --git a/constants/routes/hotelReservation.js b/constants/routes/hotelReservation.js index 72d298965..5fdb1b6b1 100644 --- a/constants/routes/hotelReservation.js +++ b/constants/routes/hotelReservation.js @@ -28,4 +28,24 @@ export const selectHotelMap = { de: `${selectHotel.de}/map`, } +/** @type {import('@/types/routes').LangRoute} */ +export const payment = { + en: `${hotelReservation.en}/payment`, + sv: `${hotelReservation.sv}/betalning`, + no: `${hotelReservation.no}/betaling`, + fi: `${hotelReservation.fi}/maksu`, + da: `${hotelReservation.da}/payment`, + de: `${hotelReservation.de}/bezahlung`, +} + +/** @type {import('@/types/routes').LangRoute} */ +export const bookingConfirmation = { + en: `${hotelReservation.en}/booking-confirmation`, + sv: `${hotelReservation.sv}/bokningsbekraftelse`, + no: `${hotelReservation.no}/booking-confirmation`, + fi: `${hotelReservation.fi}/varausvahvistus`, + da: `${hotelReservation.da}/booking-confirmation`, + de: `${hotelReservation.de}/buchungsbesttigung`, +} + export const bookingFlow = [...Object.values(hotelReservation)] diff --git a/hooks/booking/useHandleBookingStatus.ts b/hooks/booking/useHandleBookingStatus.ts new file mode 100644 index 000000000..5373057a8 --- /dev/null +++ b/hooks/booking/useHandleBookingStatus.ts @@ -0,0 +1,35 @@ +"use client" + +import { BookingStatusEnum } from "@/constants/booking" +import { trpc } from "@/lib/trpc/client" + +export function useHandleBookingStatus( + confirmationNumber: string | null, + expectedStatus: BookingStatusEnum, + maxRetries: number, + retryInterval: number +) { + const query = trpc.booking.status.useQuery( + { confirmationNumber: confirmationNumber ?? "" }, + { + enabled: !!confirmationNumber, + refetchInterval: (query) => { + if (query.state.error || query.state.dataUpdateCount >= maxRetries) { + return false + } + + if (query.state.data?.reservationStatus === expectedStatus) { + return false + } + + return retryInterval + }, + refetchIntervalInBackground: true, + refetchOnWindowFocus: false, + refetchOnMount: false, + retry: false, + } + ) + + return query +} diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 50c95105a..01abf69d0 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alle ændringer, du har foretaget, går tabt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på, at du vil fjerne kortet, der slutter me {lastFourDigits} fra din medlemsprofil?", "Arrival date": "Ankomstdato", + "as of today": "fra idag", "As our": "Som vores {level}", "As our Close Friend": "Som vores nære ven", "At latest": "Senest", @@ -23,14 +24,16 @@ "Bed type": "Seng type", "Book": "Book", "Book reward night": "Book bonusnat", - "Code / Voucher": "Bookingkoder / voucher", "Booking number": "Bookingnummer", + "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", "Breakfast": "Morgenmad", "Breakfast excluded": "Morgenmad ikke inkluderet", "Breakfast included": "Morgenmad inkluderet", "Bus terminal": "Busstation", "Business": "Forretning", + "by": "inden", "Cancel": "Afbestille", + "characters": "tegn", "Check in": "Check ind", "Check out": "Check ud", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tjek de kreditkort, der er gemt på din profil. Betal med et gemt kort, når du er logget ind for en mere jævn weboplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Luk menu", "Close my pages menu": "Luk mine sider menu", "Close the map": "Luk kortet", + "Code / Voucher": "Bookingkoder / voucher", "Coming up": "Er lige om hjørnet", "Compare all levels": "Sammenlign alle niveauer", + "Complete booking & go to payment": "Udfyld booking & gå til betaling", "Contact us": "Kontakt os", "Continue": "Blive ved", "Copyright all rights reserved": "Scandic AB Alle rettigheder forbeholdes", @@ -72,9 +77,9 @@ "Explore all levels and benefits": "Udforsk alle niveauer og fordele", "Explore nearby": "Udforsk i nærheden", "Extras to your booking": "Tillæg til din booking", - "FAQ": "Ofte stillede spørgsmål", "Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.", "Fair": "Messe", + "FAQ": "Ofte stillede spørgsmål", "Find booking": "Find booking", "Find hotels": "Find hotel", "Flexibility": "Fleksibilitet", @@ -85,17 +90,22 @@ "Get inspired": "Bliv inspireret", "Go back to edit": "Gå tilbage til redigering", "Go back to overview": "Gå tilbage til oversigten", + "Guests & Rooms": "Gæster & værelser", "Hi": "Hei", "Highest level": "Højeste niveau", "Hospital": "Hospital", "Hotel": "Hotel", "Hotel facilities": "Hotel faciliteter", "Hotel surroundings": "Hotel omgivelser", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se værelsesdetaljer", "Hotels": "Hoteller", "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det virker", "Image gallery": "Billedgalleri", "Join Scandic Friends": "Tilmeld dig Scandic Friends", + "km to city center": "km til byens centrum", "Language": "Sprog", "Latest searches": "Seneste søgninger", "Level": "Niveau", @@ -122,9 +132,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris fra", "Members": "Medlemmer", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-id", "Membership ID copied to clipboard": "Medlems-ID kopieret til udklipsholder", - "Membership cards": "Medlemskort", "Menu": "Menu", "Modify": "Ændre", "Month": "Måned", @@ -139,6 +149,9 @@ "Nearby companies": "Nærliggende virksomheder", "New password": "Nyt kodeord", "Next": "Næste", + "next level:": "Næste niveau:", + "night": "nat", + "nights": "nætter", "Nights needed to level up": "Nætter nødvendige for at komme i niveau", "No content published": "Intet indhold offentliggjort", "No matching location found": "Der blev ikke fundet nogen matchende placering", @@ -149,11 +162,13 @@ "Non-refundable": "Ikke-refunderbart", "Not found": "Ikke fundet", "Nr night, nr adult": "{nights, number} nat, {adults, number} voksen", + "number": "nummer", "On your journey": "På din rejse", "Open": "Åben", "Open language menu": "Åbn sprogmenuen", "Open menu": "Åbn menuen", "Open my pages menu": "Åbn mine sider menuen", + "or": "eller", "Overview": "Oversigt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garage", @@ -165,6 +180,7 @@ "Phone is required": "Telefonnummer er påkrævet", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Indtast venligst et gyldigt telefonnummer", + "points": "Point", "Points": "Point", "Points being calculated": "Point udregnes", "Points earned prior to May 1, 2021": "Point optjent inden 1. maj 2021", @@ -183,7 +199,6 @@ "Room & Terms": "Værelse & Vilkår", "Room facilities": "Værelsesfaciliteter", "Rooms": "Værelser", - "Guests & Rooms": "Gæster & værelser", "Save": "Gemme", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -208,25 +223,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Noget gik galt, og vi kunne ikke tilføje dit kort. Prøv venligst igen senere.", "Something went wrong and we couldn't remove your card. Please try again later.": "Noget gik galt, og vi kunne ikke fjerne dit kort. Prøv venligst igen senere.", "Something went wrong!": "Noget gik galt!", + "special character": "speciel karakter", + "spendable points expiring by": "{points} Brugbare point udløber den {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gade", "Successfully updated profile!": "Profilen er opdateret med succes!", "Summary": "Opsummering", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortæl os, hvilke oplysninger og opdateringer du gerne vil modtage, og hvordan, ved at klikke på linket nedenfor.", "Thank you": "Tak", "Theatre": "Teater", "There are no transactions to display": "Der er ingen transaktioner at vise", "Things nearby HOTEL_NAME": "Ting i nærheden af {hotelName}", + "to": "til", "Total Points": "Samlet antal point", "Tourist": "Turist", "Transaction date": "Overførselsdato", "Transactions": "Transaktioner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sengtype", "Type of room": "Værelsestype", + "uppercase letter": "stort bogstav", "Use bonus cheque": "Brug Bonus Cheque", "User information": "Brugeroplysninger", "View as list": "Vis som liste", @@ -252,9 +271,9 @@ "You canceled adding a new credit card.": "Du har annulleret tilføjelsen af et nyt kreditkort.", "You have no previous stays.": "Du har ingen tidligere ophold.", "You have no upcoming stays.": "Du har ingen kommende ophold.", - "Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!", "Your card was successfully removed!": "Dit kort blev fjernet!", "Your card was successfully saved!": "Dit kort blev gemt!", + "Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!", "Your current level": "Dit nuværende niveau", "Your details": "Dine oplysninger", "Your level": "Dit niveau", @@ -262,23 +281,5 @@ "Zip code": "Postnummer", "Zoo": "Zoo", "Zoom in": "Zoom ind", - "Zoom out": "Zoom ud", - "as of today": "pr. dags dato", - "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", - "by": "inden", - "characters": "tegn", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se værelsesdetaljer", - "km to city center": "km til byens centrum", - "next level:": "Næste niveau:", - "night": "nat", - "nights": "nætter", - "number": "nummer", - "or": "eller", - "points": "Point", - "special character": "speciel karakter", - "spendable points expiring by": "{points} Brugbare point udløber den {date}", - "to": "til", - "uppercase letter": "stort bogstav" + "Zoom out": "Zoom ud" } diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 916804097..ab6a0d31d 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alle Änderungen, die Sie vorgenommen haben, gehen verloren.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Möchten Sie die Karte mit der Endung {lastFourDigits} wirklich aus Ihrem Mitgliedsprofil entfernen?", "Arrival date": "Ankunftsdatum", + "as of today": "Stand heute", "As our": "Als unser {level}", "As our Close Friend": "Als unser enger Freund", "At latest": "Spätestens", @@ -23,14 +24,16 @@ "Bed type": "Bettentyp", "Book": "Buchen", "Book reward night": "Bonusnacht buchen", - "Code / Voucher": "Buchungscodes / Gutscheine", "Booking number": "Buchungsnummer", + "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", "Breakfast": "Frühstück", "Breakfast excluded": "Frühstück nicht inbegriffen", "Breakfast included": "Frühstück inbegriffen", "Bus terminal": "Busbahnhof", "Business": "Geschäft", + "by": "bis", "Cancel": "Stornieren", + "characters": "figuren", "Check in": "Einchecken", "Check out": "Auschecken", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.", @@ -45,8 +48,10 @@ "Close menu": "Menü schließen", "Close my pages menu": "Meine Seiten Menü schließen", "Close the map": "Karte schließen", + "Code / Voucher": "Buchungscodes / Gutscheine", "Coming up": "Demnächst", "Compare all levels": "Vergleichen Sie alle Levels", + "Complete booking & go to payment": "Buchung abschließen & zur Bezahlung gehen", "Contact us": "Kontaktieren Sie uns", "Continue": "Weitermachen", "Copyright all rights reserved": "Scandic AB Alle Rechte vorbehalten", @@ -72,9 +77,9 @@ "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore nearby": "Erkunden Sie die Umgebung", "Extras to your booking": "Extras zu Ihrer Buchung", - "FAQ": "Häufig gestellte Fragen", "Failed to delete credit card, please try again later.": "Kreditkarte konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.", "Fair": "Messe", + "FAQ": "Häufig gestellte Fragen", "Find booking": "Buchung finden", "Find hotels": "Hotels finden", "Flexibility": "Flexibilität", @@ -85,17 +90,22 @@ "Get inspired": "Lassen Sie sich inspieren", "Go back to edit": "Zurück zum Bearbeiten", "Go back to overview": "Zurück zur Übersicht", + "Guests & Rooms": "Gäste & Zimmer", "Hi": "Hallo", "Highest level": "Höchstes Level", "Hospital": "Krankenhaus", "Hotel": "Hotel", "Hotel facilities": "Hotel-Infos", "Hotel surroundings": "Umgebung des Hotels", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personen", + "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", "Hotels": "Hotels", "How do you want to sleep?": "Wie möchtest du schlafen?", "How it works": "Wie es funktioniert", "Image gallery": "Bildergalerie", "Join Scandic Friends": "Treten Sie Scandic Friends bei", + "km to city center": "km bis zum Stadtzentrum", "Language": "Sprache", "Latest searches": "Letzte Suchanfragen", "Level": "Level", @@ -122,9 +132,9 @@ "Member price": "Mitgliederpreis", "Member price from": "Mitgliederpreis ab", "Members": "Mitglieder", + "Membership cards": "Mitgliedskarten", "Membership ID": "Mitglieds-ID", "Membership ID copied to clipboard": "Mitglieds-ID in die Zwischenablage kopiert", - "Membership cards": "Mitgliedskarten", "Menu": "Menu", "Modify": "Ändern", "Month": "Monat", @@ -139,6 +149,9 @@ "Nearby companies": "Nahe gelegene Unternehmen", "New password": "Neues Kennwort", "Next": "Nächste", + "next level:": "Nächstes Level:", + "night": "nacht", + "nights": "Nächte", "Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden", "No content published": "Kein Inhalt veröffentlicht", "No matching location found": "Kein passender Standort gefunden", @@ -149,11 +162,13 @@ "Non-refundable": "Nicht erstattungsfähig", "Not found": "Nicht gefunden", "Nr night, nr adult": "{nights, number} Nacht, {adults, number} Erwachsener", + "number": "nummer", "On your journey": "Auf deiner Reise", "Open": "Offen", "Open language menu": "Sprachmenü öffnen", "Open menu": "Menü öffnen", "Open my pages menu": "Meine Seiten Menü öffnen", + "or": "oder", "Overview": "Übersicht", "Parking": "Parken", "Parking / Garage": "Parken / Garage", @@ -164,6 +179,7 @@ "Phone is required": "Telefon ist erforderlich", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Bitte geben Sie eine gültige Telefonnummer ein", + "points": "Punkte", "Points": "Punkte", "Points being calculated": "Punkte werden berechnet", "Points earned prior to May 1, 2021": "Zusammengeführte Punkte vor dem 1. Mai 2021", @@ -182,7 +198,6 @@ "Room & Terms": "Zimmer & Bedingungen", "Room facilities": "Zimmerausstattung", "Rooms": "Räume", - "Guests & Rooms": "Gäste & Zimmer", "Save": "Speichern", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -207,25 +222,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht hinzufügen. Bitte versuchen Sie es später erneut.", "Something went wrong and we couldn't remove your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht entfernen. Bitte versuchen Sie es später noch einmal.", "Something went wrong!": "Etwas ist schief gelaufen!", + "special character": "sonderzeichen", + "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", "Sports": "Sport", "Standard price": "Standardpreis", "Street": "Straße", "Successfully updated profile!": "Profil erfolgreich aktualisiert!", "Summary": "Zusammenfassung", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Teilen Sie uns mit, welche Informationen und Updates Sie wie erhalten möchten, indem Sie auf den unten stehenden Link klicken.", "Thank you": "Danke", "Theatre": "Theater", "There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden", "Things nearby HOTEL_NAME": "Dinge in der Nähe von {hotelName}", + "to": "zu", "Total Points": "Gesamtpunktzahl", "Tourist": "Tourist", "Transaction date": "Transaktionsdatum", "Transactions": "Transaktionen", "Transportations": "Transportmittel", "Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Bettentyp", "Type of room": "Zimmerart", + "uppercase letter": "großbuchstabe", "Use bonus cheque": "Bonusscheck nutzen", "User information": "Nutzerinformation", "View as list": "Als Liste anzeigen", @@ -251,9 +270,9 @@ "You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.", "You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.", "You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.", - "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!", "Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!", + "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your current level": "Ihr aktuelles Level", "Your details": "Ihre Angaben", "Your level": "Dein level", @@ -261,23 +280,5 @@ "Zip code": "PLZ", "Zoo": "Zoo", "Zoom in": "Vergrößern", - "Zoom out": "Verkleinern", - "as of today": "Stand heute", - "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", - "by": "bis", - "characters": "figuren", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personen", - "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", - "km to city center": "km bis zum Stadtzentrum", - "next level:": "Nächstes Level:", - "night": "nacht", - "nights": "Nächte", - "number": "nummer", - "or": "oder", - "points": "Punkte", - "special character": "sonderzeichen", - "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", - "to": "zu", - "uppercase letter": "großbuchstabe" -} \ No newline at end of file + "Zoom out": "Verkleinern" +} diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index c663a0f80..eb7f33489 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Any changes you've made will be lost.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?", "Arrival date": "Arrival date", + "as of today": "as of today", "As our": "As our {level}", "As our Close Friend": "As our Close Friend", "At latest": "At latest", @@ -23,14 +24,18 @@ "Bed type": "Bed type", "Book": "Book", "Book reward night": "Book reward night", - "Code / Voucher": "Code / Voucher", "Booking number": "Booking number", + "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", + "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", + "booking.rooms": "{totalRooms, plural, one {# room} other {# rooms}}", "Breakfast": "Breakfast", "Breakfast excluded": "Breakfast excluded", "Breakfast included": "Breakfast included", "Bus terminal": "Bus terminal", "Business": "Business", + "by": "by", "Cancel": "Cancel", + "characters": "characters", "Check in": "Check in", "Check out": "Check out", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.", @@ -45,8 +50,10 @@ "Close menu": "Close menu", "Close my pages menu": "Close my pages menu", "Close the map": "Close the map", + "Code / Voucher": "Code / Voucher", "Coming up": "Coming up", "Compare all levels": "Compare all levels", + "Complete booking & go to payment": "Complete booking & go to payment", "Contact us": "Contact us", "Continue": "Continue", "Copyright all rights reserved": "Scandic AB All rights reserved", @@ -59,8 +66,8 @@ "Date of Birth": "Date of Birth", "Day": "Day", "Description": "Description", - "Destinations & hotels": "Destinations & hotels", "Destination": "Destination", + "Destinations & hotels": "Destinations & hotels", "Discard changes": "Discard changes", "Discard unsaved changes?": "Discard unsaved changes?", "Distance to city centre": "{number}km to city centre", @@ -73,9 +80,9 @@ "Explore all levels and benefits": "Explore all levels and benefits", "Explore nearby": "Explore nearby", "Extras to your booking": "Extras to your booking", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Failed to delete credit card, please try again later.", "Fair": "Fair", + "FAQ": "FAQ", "Find booking": "Find booking", "Find hotels": "Find hotels", "Flexibility": "Flexibility", @@ -86,17 +93,22 @@ "Get inspired": "Get inspired", "Go back to edit": "Go back to edit", "Go back to overview": "Go back to overview", + "Guests & Rooms": "Guests & Rooms", "Hi": "Hi", "Highest level": "Highest level", "Hospital": "Hospital", "Hotel": "Hotel", "Hotel facilities": "Hotel facilities", "Hotel surroundings": "Hotel surroundings", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "persons", + "hotelPages.rooms.roomCard.seeRoomDetails": "See room details", "Hotels": "Hotels", "How do you want to sleep?": "How do you want to sleep?", "How it works": "How it works", "Image gallery": "Image gallery", "Join Scandic Friends": "Join Scandic Friends", + "km to city center": "km to city center", "Language": "Language", "Latest searches": "Latest searches", "Level": "Level", @@ -123,9 +135,9 @@ "Member price": "Member price", "Member price from": "Member price from", "Members": "Members", + "Membership cards": "Membership cards", "Membership ID": "Membership ID", "Membership ID copied to clipboard": "Membership ID copied to clipboard", - "Membership cards": "Membership cards", "Menu": "Menu", "Modify": "Modify", "Month": "Month", @@ -140,6 +152,9 @@ "Nearby companies": "Nearby companies", "New password": "New password", "Next": "Next", + "next level:": "next level:", + "night": "night", + "nights": "nights", "Nights needed to level up": "Nights needed to level up", "No content published": "No content published", "No matching location found": "No matching location found", @@ -150,11 +165,13 @@ "Non-refundable": "Non-refundable", "Not found": "Not found", "Nr night, nr adult": "{nights, number} night, {adults, number} adult", + "number": "number", "On your journey": "On your journey", "Open": "Open", "Open language menu": "Open language menu", "Open menu": "Open menu", "Open my pages menu": "Open my pages menu", + "or": "or", "Overview": "Overview", "Parking": "Parking", "Parking / Garage": "Parking / Garage", @@ -166,6 +183,7 @@ "Phone is required": "Phone is required", "Phone number": "Phone number", "Please enter a valid phone number": "Please enter a valid phone number", + "points": "Points", "Points": "Points", "Points being calculated": "Points being calculated", "Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021", @@ -184,12 +202,11 @@ "Room & Terms": "Room & Terms", "Room facilities": "Room facilities", "Rooms": "Rooms", - "Guests & Rooms": "Guests & Rooms", "Save": "Save", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", - "See all photos": "See all photos", "Search": "Search", + "See all photos": "See all photos", "See hotel details": "See hotel details", "See room details": "See room details", "See rooms": "See rooms", @@ -210,25 +227,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Something went wrong and we couldn't add your card. Please try again later.", "Something went wrong and we couldn't remove your card. Please try again later.": "Something went wrong and we couldn't remove your card. Please try again later.", "Something went wrong!": "Something went wrong!", + "special character": "special character", + "spendable points expiring by": "{points} spendable points expiring by {date}", "Sports": "Sports", "Standard price": "Standard price", "Street": "Street", "Successfully updated profile!": "Successfully updated profile!", "Summary": "Summary", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Tell us what information and updates you'd like to receive, and how, by clicking the link below.", "Thank you": "Thank you", "Theatre": "Theatre", "There are no transactions to display": "There are no transactions to display", "Things nearby HOTEL_NAME": "Things nearby {hotelName}", + "to": "to", "Total Points": "Total Points", "Tourist": "Tourist", "Transaction date": "Transaction date", "Transactions": "Transactions", "Transportations": "Transportations", "Tripadvisor reviews": "{rating} ({count} reviews on Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Type of bed", "Type of room": "Type of room", + "uppercase letter": "uppercase letter", "Use bonus cheque": "Use bonus cheque", "User information": "User information", "View as list": "View as list", @@ -254,9 +275,9 @@ "You canceled adding a new credit card.": "You canceled adding a new credit card.", "You have no previous stays.": "You have no previous stays.", "You have no upcoming stays.": "You have no upcoming stays.", - "Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!", "Your card was successfully removed!": "Your card was successfully removed!", "Your card was successfully saved!": "Your card was successfully saved!", + "Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!", "Your current level": "Your current level", "Your details": "Your details", "Your level": "Your level", @@ -264,25 +285,5 @@ "Zip code": "Zip code", "Zoo": "Zoo", "Zoom in": "Zoom in", - "Zoom out": "Zoom out", - "as of today": "as of today", - "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", - "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", - "booking.rooms": "{totalRooms, plural, one {# room} other {# rooms}}", - "by": "by", - "characters": "characters", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "persons", - "hotelPages.rooms.roomCard.seeRoomDetails": "See room details", - "km to city center": "km to city center", - "next level:": "next level:", - "night": "night", - "nights": "nights", - "number": "number", - "or": "or", - "points": "Points", - "special character": "special character", - "spendable points expiring by": "{points} spendable points expiring by {date}", - "to": "to", - "uppercase letter": "uppercase letter" -} \ No newline at end of file + "Zoom out": "Zoom out" +} diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index aa12eccf0..6faf8b396 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Kaikki tekemäsi muutokset menetetään.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Haluatko varmasti poistaa kortin, joka päättyy numeroon {lastFourDigits} jäsenprofiilistasi?", "Arrival date": "Saapumispäivä", + "as of today": "tänään", "As our": "{level}-etu", "As our Close Friend": "Läheisenä ystävänämme", "At latest": "Viimeistään", @@ -24,12 +25,15 @@ "Book": "Varaa", "Book reward night": "Kirjapalkinto-ilta", "Booking number": "Varausnumero", + "booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}", "Breakfast": "Aamiainen", "Breakfast excluded": "Aamiainen ei sisälly", "Breakfast included": "Aamiainen sisältyy", "Bus terminal": "Bussiasema", "Business": "Business", + "by": "mennessä", "Cancel": "Peruuttaa", + "characters": "hahmoja", "Check in": "Sisäänkirjautuminen", "Check out": "Uloskirjautuminen", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tarkista profiiliisi tallennetut luottokortit. Maksa tallennetulla kortilla kirjautuneena, jotta verkkokokemus on sujuvampi.", @@ -47,6 +51,7 @@ "Code / Voucher": "Varauskoodit / kupongit", "Coming up": "Tulossa", "Compare all levels": "Vertaa kaikkia tasoja", + "Complete booking & go to payment": "Täydennä varaus & siirry maksamaan", "Contact us": "Ota meihin yhteyttä", "Continue": "Jatkaa", "Copyright all rights reserved": "Scandic AB Kaikki oikeudet pidätetään", @@ -72,9 +77,9 @@ "Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin", "Explore nearby": "Tutustu lähialueeseen", "Extras to your booking": "Varauksessa lisäpalveluita", - "FAQ": "UKK", "Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.", "Fair": "Messukeskus", + "FAQ": "UKK", "Find booking": "Etsi varaus", "Find hotels": "Etsi hotelleja", "Flexibility": "Joustavuus", @@ -92,11 +97,15 @@ "Hotel": "Hotelli", "Hotel facilities": "Hotellin palvelut", "Hotel surroundings": "Hotellin ympäristö", + "hotelPages.rooms.roomCard.person": "henkilö", + "hotelPages.rooms.roomCard.persons": "Henkilöä", + "hotelPages.rooms.roomCard.seeRoomDetails": "Katso huoneen tiedot", "Hotels": "Hotellit", "How do you want to sleep?": "Kuinka haluat nukkua?", "How it works": "Kuinka se toimii", "Image gallery": "Kuvagalleria", "Join Scandic Friends": "Liity jäseneksi", + "km to city center": "km keskustaan", "Language": "Kieli", "Latest searches": "Viimeisimmät haut", "Level": "Level", @@ -123,9 +132,9 @@ "Member price": "Jäsenhinta", "Member price from": "Jäsenhinta alkaen", "Members": "Jäsenet", + "Membership cards": "Jäsenkortit", "Membership ID": "Jäsentunnus", "Membership ID copied to clipboard": "Jäsenyystunnus kopioitu leikepöydälle", - "Membership cards": "Jäsenkortit", "Menu": "Valikko", "Modify": "Muokkaa", "Month": "Kuukausi", @@ -140,6 +149,9 @@ "Nearby companies": "Läheiset yritykset", "New password": "Uusi salasana", "Next": "Seuraava", + "next level:": "pistettä tasolle:", + "night": "yö", + "nights": "yötä", "Nights needed to level up": "Yöt, joita tarvitaan tasolle", "No content published": "Ei julkaistua sisältöä", "No matching location found": "Vastaavaa sijaintia ei löytynyt", @@ -150,11 +162,13 @@ "Non-refundable": "Ei palautettavissa", "Not found": "Ei löydetty", "Nr night, nr adult": "{nights, number} yö, {adults, number} aikuinen", + "number": "määrä", "On your journey": "Matkallasi", "Open": "Avata", "Open language menu": "Avaa kielivalikko", "Open menu": "Avaa valikko", "Open my pages menu": "Avaa omat sivut -valikko", + "or": "tai", "Overview": "Yleiskatsaus", "Parking": "Pysäköinti", "Parking / Garage": "Pysäköinti / Autotalli", @@ -166,6 +180,7 @@ "Phone is required": "Puhelin vaaditaan", "Phone number": "Puhelinnumero", "Please enter a valid phone number": "Ole hyvä ja näppäile voimassaoleva puhelinnumero", + "points": "pistettä", "Points": "Pisteet", "Points being calculated": "Pisteitä lasketaan", "Points earned prior to May 1, 2021": "Pisteet, jotka ansaittu ennen 1.5.2021", @@ -208,25 +223,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Jotain meni pieleen, emmekä voineet lisätä korttiasi. Yritä myöhemmin uudelleen.", "Something went wrong and we couldn't remove your card. Please try again later.": "Jotain meni pieleen, emmekä voineet poistaa korttiasi. Yritä myöhemmin uudelleen.", "Something went wrong!": "Jotain meni pieleen!", + "special character": "erikoishahmo", + "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", "Sports": "Urheilu", "Standard price": "Normaali hinta", "Street": "Katu", "Successfully updated profile!": "Profiilin päivitys onnistui!", "Summary": "Yhteenveto", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Kerro meille, mitä tietoja ja päivityksiä haluat saada ja miten, napsauttamalla alla olevaa linkkiä.", "Thank you": "Kiitos", "Theatre": "Teatteri", "There are no transactions to display": "Näytettäviä tapahtumia ei ole", "Things nearby HOTEL_NAME": "Lähellä olevia asioita {hotelName}", + "to": "to", "Total Points": "Kokonaispisteet", "Tourist": "Turisti", "Transaction date": "Tapahtuman päivämäärä", "Transactions": "Tapahtumat", "Transportations": "Kuljetukset", "Tripadvisor reviews": "{rating} ({count} arvostelua TripAdvisorissa)", + "TUI Points": "TUI Points", "Type of bed": "Vuodetyyppi", "Type of room": "Huonetyyppi", + "uppercase letter": "iso kirjain", "Use bonus cheque": "Käytä bonussekkiä", "User information": "Käyttäjän tiedot", "View as list": "Näytä listana", @@ -252,9 +271,9 @@ "You canceled adding a new credit card.": "Peruutit uuden luottokortin lisäämisen.", "You have no previous stays.": "Sinulla ei ole aiempia majoituksia.", "You have no upcoming stays.": "Sinulla ei ole tulevia majoituksia.", - "Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!", "Your card was successfully removed!": "Korttisi poistettiin onnistuneesti!", "Your card was successfully saved!": "Korttisi tallennettu onnistuneesti!", + "Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!", "Your current level": "Nykyinen tasosi", "Your details": "Tietosi", "Your level": "Tasosi", @@ -262,23 +281,5 @@ "Zip code": "Postinumero", "Zoo": "Eläintarha", "Zoom in": "Lähennä", - "Zoom out": "Loitonna", - "as of today": "tänään", - "booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}", - "by": "mennessä", - "characters": "hahmoja", - "hotelPages.rooms.roomCard.person": "henkilö", - "hotelPages.rooms.roomCard.persons": "Henkilöä", - "hotelPages.rooms.roomCard.seeRoomDetails": "Katso huoneen tiedot", - "km to city center": "km keskustaan", - "next level:": "pistettä tasolle:", - "night": "yö", - "nights": "yötä", - "number": "määrä", - "or": "tai", - "points": "pistettä", - "special character": "erikoishahmo", - "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", - "to": "to", - "uppercase letter": "iso kirjain" -} \ No newline at end of file + "Zoom out": "Loitonna" +} diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 39dda59c3..916e8d15d 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Eventuelle endringer du har gjort, går tapt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på at du vil fjerne kortet som slutter på {lastFourDigits} fra medlemsprofilen din?", "Arrival date": "Ankomstdato", + "as of today": "per idag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nære venn", "At latest": "Senest", @@ -23,14 +24,16 @@ "Bed type": "Seng type", "Book": "Bestill", "Book reward night": "Bestill belønningskveld", - "Code / Voucher": "Bestillingskoder / kuponger", "Booking number": "Bestillingsnummer", + "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", "Breakfast": "Frokost", "Breakfast excluded": "Frokost ekskludert", "Breakfast included": "Frokost inkludert", "Bus terminal": "Bussterminal", "Business": "Forretnings", + "by": "innen", "Cancel": "Avbryt", + "characters": "tegn", "Check in": "Sjekk inn", "Check out": "Sjekk ut", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sjekk ut kredittkortene som er lagret på profilen din. Betal med et lagret kort når du er pålogget for en jevnere nettopplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Lukk meny", "Close my pages menu": "Lukk mine sidermenyn", "Close the map": "Lukk kartet", + "Code / Voucher": "Bestillingskoder / kuponger", "Coming up": "Kommer opp", "Compare all levels": "Sammenlign alle nivåer", + "Complete booking & go to payment": "Fullfør bestilling & gå til betaling", "Contact us": "Kontakt oss", "Continue": "Fortsette", "Copyright all rights reserved": "Scandic AB Alle rettigheter forbeholdt", @@ -72,9 +77,9 @@ "Explore all levels and benefits": "Utforsk alle nivåer og fordeler", "Explore nearby": "Utforsk i nærheten", "Extras to your booking": "Tilvalg til bestillingen din", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.", "Fair": "Messe", + "FAQ": "FAQ", "Find booking": "Finn booking", "Find hotels": "Finn hotell", "Flexibility": "Fleksibilitet", @@ -85,17 +90,22 @@ "Get inspired": "Bli inspirert", "Go back to edit": "Gå tilbake til redigering", "Go back to overview": "Gå tilbake til oversikten", + "Guests & Rooms": "Gjester & rom", "Hi": "Hei", "Highest level": "Høyeste nivå", "Hospital": "Sykehus", "Hotel": "Hotel", "Hotel facilities": "Hotelfaciliteter", "Hotel surroundings": "Hotellomgivelser", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se detaljer om rommet", "Hotels": "Hoteller", "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det fungerer", "Image gallery": "Bildegalleri", "Join Scandic Friends": "Bli med i Scandic Friends", + "km to city center": "km til sentrum", "Language": "Språk", "Latest searches": "Siste søk", "Level": "Nivå", @@ -122,9 +132,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris fra", "Members": "Medlemmer", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-ID", "Membership ID copied to clipboard": "Medlems-ID kopiert til utklippstavlen", - "Membership cards": "Medlemskort", "Menu": "Menu", "Modify": "Endre", "Month": "Måned", @@ -139,6 +149,9 @@ "Nearby companies": "Nærliggende selskaper", "New password": "Nytt passord", "Next": "Neste", + "next level:": "Neste nivå:", + "night": "natt", + "nights": "netter", "Nights needed to level up": "Netter som trengs for å komme opp i nivå", "No content published": "Ingen innhold publisert", "No matching location found": "Fant ingen samsvarende plassering", @@ -149,11 +162,13 @@ "Non-refundable": "Ikke-refunderbart", "Not found": "Ikke funnet", "Nr night, nr adult": "{nights, number} natt, {adults, number} voksen", + "number": "antall", "On your journey": "På reisen din", "Open": "Åpen", "Open language menu": "Åpne språkmenyen", "Open menu": "Åpne menyen", "Open my pages menu": "Åpne mine sider menyen", + "or": "eller", "Overview": "Oversikt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garasje", @@ -165,6 +180,7 @@ "Phone is required": "Telefon kreves", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Vennligst oppgi et gyldig telefonnummer", + "points": "poeng", "Points": "Poeng", "Points being calculated": "Poeng beregnes", "Points earned prior to May 1, 2021": "Opptjente poeng før 1. mai 2021", @@ -183,7 +199,6 @@ "Room & Terms": "Rom & Vilkår", "Room facilities": "Romfasiliteter", "Rooms": "Rom", - "Guests & Rooms": "Gjester & rom", "Save": "Lagre", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -208,25 +223,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Noe gikk galt, og vi kunne ikke legge til kortet ditt. Prøv igjen senere.", "Something went wrong and we couldn't remove your card. Please try again later.": "Noe gikk galt, og vi kunne ikke fjerne kortet ditt. Vennligst prøv igjen senere.", "Something went wrong!": "Noe gikk galt!", + "special character": "spesiell karakter", + "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gate", "Successfully updated profile!": "Vellykket oppdatert profil!", "Summary": "Sammendrag", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortell oss hvilken informasjon og hvilke oppdateringer du ønsker å motta, og hvordan, ved å klikke på lenken nedenfor.", "Thank you": "Takk", "Theatre": "Teater", "There are no transactions to display": "Det er ingen transaksjoner å vise", "Things nearby HOTEL_NAME": "Ting i nærheten av {hotelName}", + "to": "til", "Total Points": "Totale poeng", "Tourist": "Turist", "Transaction date": "Transaksjonsdato", "Transactions": "Transaksjoner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sengtype", "Type of room": "Romtype", + "uppercase letter": "stor bokstav", "Use bonus cheque": "Bruk bonussjekk", "User information": "Brukerinformasjon", "View as list": "Vis som liste", @@ -252,9 +271,9 @@ "You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.", "You have no previous stays.": "Du har ingen tidligere opphold.", "You have no upcoming stays.": "Du har ingen kommende opphold.", - "Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!", "Your card was successfully removed!": "Kortet ditt ble fjernet!", "Your card was successfully saved!": "Kortet ditt ble lagret!", + "Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!", "Your current level": "Ditt nåværende nivå", "Your details": "Dine detaljer", "Your level": "Ditt nivå", @@ -262,23 +281,5 @@ "Zip code": "Post kode", "Zoo": "Dyrehage", "Zoom in": "Zoom inn", - "Zoom out": "Zoom ut", - "as of today": "per i dag", - "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", - "by": "innen", - "characters": "tegn", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se detaljer om rommet", - "km to city center": "km til sentrum", - "next level:": "Neste nivå:", - "night": "natt", - "nights": "netter", - "number": "antall", - "or": "eller", - "points": "poeng", - "special character": "spesiell karakter", - "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", - "to": "til", - "uppercase letter": "stor bokstav" + "Zoom out": "Zoom ut" } diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index e2205b7b6..02291102e 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alla ändringar du har gjort kommer att gå förlorade.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Är du säker på att du vill ta bort kortet som slutar med {lastFourDigits} från din medlemsprofil?", "Arrival date": "Ankomstdatum", + "as of today": "från och med idag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nära vän", "At latest": "Senast", @@ -23,14 +24,16 @@ "Bed type": "Sängtyp", "Book": "Boka", "Book reward night": "Boka frinatt", - "Code / Voucher": "Bokningskoder / kuponger", "Booking number": "Bokningsnummer", + "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", "Breakfast": "Frukost", "Breakfast excluded": "Frukost ingår ej", "Breakfast included": "Frukost ingår", "Bus terminal": "Bussterminal", "Business": "Business", + "by": "innan", "Cancel": "Avbryt", + "characters": "tecken", "Check in": "Checka in", "Check out": "Checka ut", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Kolla in kreditkorten som sparats i din profil. Betala med ett sparat kort när du är inloggad för en smidigare webbupplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Stäng menyn", "Close my pages menu": "Stäng mina sidor menyn", "Close the map": "Stäng kartan", + "Code / Voucher": "Bokningskoder / kuponger", "Coming up": "Kommer härnäst", "Compare all levels": "Jämför alla nivåer", + "Complete booking & go to payment": "Fullför bokning & gå till betalning", "Contact us": "Kontakta oss", "Continue": "Fortsätt", "Copyright all rights reserved": "Scandic AB Alla rättigheter förbehålls", @@ -72,9 +77,9 @@ "Explore all levels and benefits": "Utforska alla nivåer och fördelar", "Explore nearby": "Utforska i närheten", "Extras to your booking": "Extra tillval till din bokning", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.", "Fair": "Mässa", + "FAQ": "FAQ", "Find booking": "Hitta bokning", "Find hotels": "Hitta hotell", "Flexibility": "Flexibilitet", @@ -85,17 +90,22 @@ "Get inspired": "Bli inspirerad", "Go back to edit": "Gå tillbaka till redigeringen", "Go back to overview": "Gå tillbaka till översikten", + "Guests & Rooms": "Gäster & rum", "Hi": "Hej", "Highest level": "Högsta nivå", "Hospital": "Sjukhus", "Hotel": "Hotell", "Hotel facilities": "Hotellfaciliteter", "Hotel surroundings": "Hotellomgivning", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se information om rummet", "Hotels": "Hotell", "How do you want to sleep?": "Hur vill du sova?", "How it works": "Hur det fungerar", "Image gallery": "Bildgalleri", "Join Scandic Friends": "Gå med i Scandic Friends", + "km to city center": "km till stadens centrum", "Language": "Språk", "Latest searches": "Senaste sökningarna", "Level": "Nivå", @@ -122,9 +132,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris från", "Members": "Medlemmar", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-ID", "Membership ID copied to clipboard": "Medlems-ID kopierat till urklipp", - "Membership cards": "Medlemskort", "Menu": "Meny", "Modify": "Ändra", "Month": "Månad", @@ -139,6 +149,9 @@ "Nearby companies": "Närliggande företag", "New password": "Nytt lösenord", "Next": "Nästa", + "next level:": "Nästa nivå:", + "night": "natt", + "nights": "nätter", "Nights needed to level up": "Nätter som behövs för att gå upp i nivå", "No content published": "Inget innehåll publicerat", "No matching location found": "Ingen matchande plats hittades", @@ -149,11 +162,13 @@ "Non-refundable": "Ej återbetalningsbar", "Not found": "Hittades inte", "Nr night, nr adult": "{nights, number} natt, {adults, number} vuxen", + "number": "nummer", "On your journey": "På din resa", "Open": "Öppna", "Open language menu": "Öppna språkmenyn", "Open menu": "Öppna menyn", "Open my pages menu": "Öppna mina sidor menyn", + "or": "eller", "Overview": "Översikt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garage", @@ -165,6 +180,7 @@ "Phone is required": "Telefonnummer är obligatorisk", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Var vänlig och ange ett giltigt telefonnummer", + "points": "poäng", "Points": "Poäng", "Points being calculated": "Poäng beräknas", "Points earned prior to May 1, 2021": "Intjänade poäng före den 1 maj 2021", @@ -183,7 +199,6 @@ "Room & Terms": "Rum & Villkor", "Room facilities": "Rumfaciliteter", "Rooms": "Rum", - "Guests & Rooms": "Gäster & rum", "Save": "Spara", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -208,25 +223,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Något gick fel och vi kunde inte lägga till ditt kort. Försök igen senare.", "Something went wrong and we couldn't remove your card. Please try again later.": "Något gick fel och vi kunde inte ta bort ditt kort. Försök igen senare.", "Something went wrong!": "Något gick fel!", + "special character": "speciell karaktär", + "spendable points expiring by": "{points} poäng förfaller {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gata", "Successfully updated profile!": "Profilen har uppdaterats framgångsrikt!", "Summary": "Sammanfattning", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Berätta för oss vilken information och vilka uppdateringar du vill få och hur genom att klicka på länken nedan.", "Thank you": "Tack", "Theatre": "Teater", "There are no transactions to display": "Det finns inga transaktioner att visa", "Things nearby HOTEL_NAME": "Saker i närheten av {hotelName}", + "to": "till", "Total Points": "Poäng totalt", "Tourist": "Turist", "Transaction date": "Transaktionsdatum", "Transactions": "Transaktioner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sängtyp", "Type of room": "Rumstyp", + "uppercase letter": "stor bokstav", "Use bonus cheque": "Use bonus cheque", "User information": "Användarinformation", "View as list": "Visa som lista", @@ -252,9 +271,9 @@ "You canceled adding a new credit card.": "Du avbröt att lägga till ett nytt kreditkort.", "You have no previous stays.": "Du har inga tidigare vistelser.", "You have no upcoming stays.": "Du har inga planerade resor.", - "Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!", "Your card was successfully removed!": "Ditt kort har tagits bort!", "Your card was successfully saved!": "Ditt kort har sparats!", + "Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!", "Your current level": "Din nuvarande nivå", "Your details": "Dina uppgifter", "Your level": "Din nivå", @@ -262,23 +281,5 @@ "Zip code": "Postnummer", "Zoo": "Djurpark", "Zoom in": "Zooma in", - "Zoom out": "Zooma ut", - "as of today": "per idag", - "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", - "by": "innan", - "characters": "tecken", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se information om rummet", - "km to city center": "km till stadens centrum", - "next level:": "Nästa nivå:", - "night": "natt", - "nights": "nätter", - "number": "nummer", - "or": "eller", - "points": "poäng", - "special character": "speciell karaktär", - "spendable points expiring by": "{points} poäng förfaller {date}", - "to": "till", - "uppercase letter": "stor bokstav" + "Zoom out": "Zooma ut" } diff --git a/server/routers/booking/index.ts b/server/routers/booking/index.ts index 65b968733..f3c0b45ad 100644 --- a/server/routers/booking/index.ts +++ b/server/routers/booking/index.ts @@ -1,5 +1,9 @@ import { mergeRouters } from "@/server/trpc" import { bookingMutationRouter } from "./mutation" +import { bookingQueryRouter } from "./query" -export const bookingRouter = mergeRouters(bookingMutationRouter) +export const bookingRouter = mergeRouters( + bookingMutationRouter, + bookingQueryRouter +) diff --git a/server/routers/booking/input.ts b/server/routers/booking/input.ts index 46a88110e..7e9b9b2c8 100644 --- a/server/routers/booking/input.ts +++ b/server/routers/booking/input.ts @@ -1,38 +1,68 @@ import { z } from "zod" -// Query +const roomsSchema = z.array( + z.object({ + adults: z.number().int().nonnegative(), + childrenAges: z + .array( + z.object({ + age: z.number().int().nonnegative(), + bedType: z.string(), + }) + ) + .default([]), + rateCode: z.string(), + roomTypeCode: z.string(), + guest: z.object({ + title: z.string(), + firstName: z.string(), + lastName: z.string(), + email: z.string().email(), + phoneCountryCodePrefix: z.string(), + phoneNumber: z.string(), + countryCode: z.string(), + membershipNumber: z.string().optional(), + }), + smsConfirmationRequested: z.boolean(), + packages: z.object({ + breakfast: z.boolean(), + allergyFriendly: z.boolean(), + petFriendly: z.boolean(), + accessibility: z.boolean(), + }), + }) +) + +const paymentSchema = z.object({ + paymentMethod: z.string(), + card: z + .object({ + alias: z.string(), + expiryDate: z.string(), + cardType: z.string(), + }) + .optional(), + cardHolder: z.object({ + email: z.string().email(), + name: z.string(), + phoneCountryCode: z.string(), + phoneSubscriber: z.string(), + }), + success: z.string(), + error: z.string(), + cancel: z.string(), +}) + // Mutation export const createBookingInput = z.object({ hotelId: z.string(), checkInDate: z.string(), checkOutDate: z.string(), - rooms: z.array( - z.object({ - adults: z.number().int().nonnegative(), - children: z.number().int().nonnegative(), - rateCode: z.string(), - roomTypeCode: z.string(), - guest: z.object({ - title: z.string(), - firstName: z.string(), - lastName: z.string(), - email: z.string().email(), - phoneCountryCodePrefix: z.string(), - phoneNumber: z.string(), - countryCode: z.string(), - }), - smsConfirmationRequested: z.boolean(), - }) - ), - payment: z.object({ - cardHolder: z.object({ - Email: z.string().email(), - Name: z.string(), - PhoneCountryCode: z.string(), - PhoneSubscriber: z.string(), - }), - success: z.string(), - error: z.string(), - cancel: z.string(), - }), + rooms: roomsSchema, + payment: paymentSchema, +}) + +// Query +export const getBookingStatusInput = z.object({ + confirmationNumber: z.string(), }) diff --git a/server/routers/booking/mutation.ts b/server/routers/booking/mutation.ts index 2b35f56d4..53595b2d0 100644 --- a/server/routers/booking/mutation.ts +++ b/server/routers/booking/mutation.ts @@ -2,7 +2,7 @@ import { metrics } from "@opentelemetry/api" import * as api from "@/lib/api" import { getVerifiedUser } from "@/server/routers/user/query" -import { router, safeProtectedProcedure } from "@/server/trpc" +import { bookingServiceProcedure, router } from "@/server/trpc" import { getMembership } from "@/utils/user" @@ -36,13 +36,15 @@ async function getMembershipNumber( export const bookingMutationRouter = router({ booking: router({ - create: safeProtectedProcedure + create: bookingServiceProcedure .input(createBookingInput) .mutation(async function ({ ctx, input }) { const { checkInDate, checkOutDate, hotelId } = input + // TODO: add support for user token OR service token in procedure + // then we can fetch membership number if user token exists const loggingAttributes = { - membershipNumber: await getMembershipNumber(ctx.session), + // membershipNumber: await getMembershipNumber(ctx.session), checkInDate, checkOutDate, hotelId, @@ -56,11 +58,10 @@ export const bookingMutationRouter = router({ query: loggingAttributes, }) ) - const headers = ctx.session - ? { - Authorization: `Bearer ${ctx.session?.token.access_token}`, - } - : undefined + const headers = { + Authorization: `Bearer ${ctx.serviceToken}`, + } + const apiResponse = await api.post(api.endpoints.v1.booking, { headers, body: input, diff --git a/server/routers/booking/output.ts b/server/routers/booking/output.ts index 8fedd8716..dbc8101df 100644 --- a/server/routers/booking/output.ts +++ b/server/routers/booking/output.ts @@ -5,9 +5,9 @@ export const createBookingSchema = z data: z.object({ attributes: z.object({ confirmationNumber: z.string(), - cancellationNumber: z.string().nullable(), + cancellationNumber: z.string().optional(), reservationStatus: z.string(), - paymentUrl: z.string().nullable(), + paymentUrl: z.string().optional(), }), type: z.string(), id: z.string(), diff --git a/server/routers/booking/query.ts b/server/routers/booking/query.ts new file mode 100644 index 000000000..f7f439b90 --- /dev/null +++ b/server/routers/booking/query.ts @@ -0,0 +1,85 @@ +import { metrics } from "@opentelemetry/api" + +import * as api from "@/lib/api" +import { badRequestError, serverErrorByStatus } from "@/server/errors/trpc" +import { bookingServiceProcedure, router } from "@/server/trpc" + +import { getBookingStatusInput } from "./input" +import { createBookingSchema } from "./output" + +const meter = metrics.getMeter("trpc.booking") +const getBookingStatusCounter = meter.createCounter("trpc.booking.status") +const getBookingStatusSuccessCounter = meter.createCounter( + "trpc.booking.status-success" +) +const getBookingStatusFailCounter = meter.createCounter( + "trpc.booking.status-fail" +) + +export const bookingQueryRouter = router({ + status: bookingServiceProcedure + .input(getBookingStatusInput) + .query(async function ({ ctx, input }) { + const { confirmationNumber } = input + getBookingStatusCounter.add(1, { confirmationNumber }) + + const apiResponse = await api.get( + `${api.endpoints.v1.booking}/${confirmationNumber}/status`, + { + headers: { + Authorization: `Bearer ${ctx.serviceToken}`, + }, + } + ) + + if (!apiResponse.ok) { + const responseMessage = await apiResponse.text() + getBookingStatusFailCounter.add(1, { + confirmationNumber, + error_type: "http_error", + error: responseMessage, + }) + console.error( + "api.booking.status error", + JSON.stringify({ + query: { confirmationNumber }, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text: responseMessage, + }, + }) + ) + + throw serverErrorByStatus(apiResponse.status, apiResponse) + } + + const apiJson = await apiResponse.json() + const verifiedData = createBookingSchema.safeParse(apiJson) + if (!verifiedData.success) { + getBookingStatusFailCounter.add(1, { + confirmationNumber, + error_type: "validation_error", + error: JSON.stringify(verifiedData.error), + }) + console.error( + "api.booking.status validation error", + JSON.stringify({ + query: { confirmationNumber }, + error: verifiedData.error, + }) + ) + throw badRequestError() + } + + getBookingStatusSuccessCounter.add(1, { confirmationNumber }) + console.info( + "api.booking.status success", + JSON.stringify({ + query: { confirmationNumber }, + }) + ) + + return verifiedData.data + }), +}) diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index d0d95903a..d1fb2dfe8 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -436,6 +436,22 @@ export const roomSchema = z.object({ type: z.enum(["roomcategories"]), }) +const merchantInformationSchema = z.object({ + webMerchantId: z.string(), + cards: z.record(z.string(), z.boolean()).transform((val) => { + return Object.entries(val) + .filter(([_, enabled]) => enabled) + .map(([key]) => key) + }), + alternatePaymentOptions: z + .record(z.string(), z.boolean()) + .transform((val) => { + return Object.entries(val) + .filter(([_, enabled]) => enabled) + .map(([key]) => key) + }), +}) + // NOTE: Find schema at: https://aks-test.scandichotels.com/hotel/swagger/v1/index.html export const getHotelDataSchema = z.object({ data: z.object({ @@ -471,6 +487,7 @@ export const getHotelDataSchema = z.object({ hotelContent: hotelContentSchema, detailedFacilities: z.array(detailedFacilitySchema), healthFacilities: z.array(healthFacilitySchema), + merchantInformationData: merchantInformationSchema, rewardNight: rewardNightSchema, pointsOfInterest: z .array(pointOfInterestSchema) diff --git a/server/trpc.ts b/server/trpc.ts index 4f5409a01..e8f9c26f1 100644 --- a/server/trpc.ts +++ b/server/trpc.ts @@ -121,29 +121,24 @@ export const safeProtectedProcedure = t.procedure.use(async function (opts) { }) }) -export const profileServiceProcedure = t.procedure.use(async (opts) => { - const { access_token } = await fetchServiceToken(["profile"]) - if (!access_token) { - throw internalServerError("Failed to obtain profile service token") - } - return opts.next({ - ctx: { - serviceToken: access_token, - }, +function createServiceProcedure(serviceName: string) { + return t.procedure.use(async (opts) => { + const { access_token } = await fetchServiceToken([serviceName]) + if (!access_token) { + throw internalServerError(`Failed to obtain ${serviceName} service token`) + } + return opts.next({ + ctx: { + serviceToken: access_token, + }, + }) }) -}) +} + +export const bookingServiceProcedure = createServiceProcedure("booking") +export const hotelServiceProcedure = createServiceProcedure("hotel") +export const profileServiceProcedure = createServiceProcedure("profile") -export const hotelServiceProcedure = t.procedure.use(async (opts) => { - const { access_token } = await fetchServiceToken(["hotel"]) - if (!access_token) { - throw internalServerError("Failed to obtain hotel service token") - } - return opts.next({ - ctx: { - serviceToken: access_token, - }, - }) -}) export const serverActionProcedure = t.procedure.experimental_caller( experimental_nextAppDirCaller({ createContext, diff --git a/types/components/hotelReservation/selectRate/section.ts b/types/components/hotelReservation/selectRate/section.ts index e64e51506..69460962b 100644 --- a/types/components/hotelReservation/selectRate/section.ts +++ b/types/components/hotelReservation/selectRate/section.ts @@ -1,5 +1,7 @@ import { Rate } from "@/server/routers/hotels/output" +import { Hotel } from "@/types/hotel" + export interface SectionProps { nextPath: string } @@ -33,6 +35,10 @@ export interface RoomSelectionProps extends SectionProps { export interface DetailsProps extends SectionProps {} +export interface PaymentProps { + hotel: Hotel +} + export interface SectionPageProps { breakfast?: string bed?: string From 18a1649bdff9911becc2609bb48a2610a1517c5f Mon Sep 17 00:00:00 2001 From: Tobias Johansson Date: Thu, 3 Oct 2024 07:42:26 +0000 Subject: [PATCH 05/64] Merged in feat/SW-475-enter-details-header (pull request #630) Feat/SW-475 enter details header * feat(SW-475): updated hotel mock data to reflect api * feat(SW-475): Added hotel selection header with sidepeek buttons * fix(SW-475): fixes from PR * fix(SW-475): changed intl string Approved-by: Arvid Norlin --- .../hotelreservation/[section]/page.tsx | 7 +- .../hotelDetailSidePeek.module.css | 4 + .../HotelDetailSidePeek/index.tsx | 58 ++ .../hotelSelectionHeader.module.css | 52 ++ .../HotelSelectionHeader/index.tsx | 52 ++ .../Text/Body/body.module.css | 4 + .../TempDesignSystem/Text/Body/variants.ts | 1 + server/routers/hotels/tempHotelData.json | 764 +++++++++++++++--- .../selectRate/hotelSelectionHeader.ts | 5 + 9 files changed, 840 insertions(+), 107 deletions(-) create mode 100644 components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/hotelDetailSidePeek.module.css create mode 100644 components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/index.tsx create mode 100644 components/HotelReservation/HotelSelectionHeader/hotelSelectionHeader.module.css create mode 100644 components/HotelReservation/HotelSelectionHeader/index.tsx create mode 100644 types/components/hotelReservation/selectRate/hotelSelectionHeader.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index 45ca7d308..a0373645b 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -1,6 +1,8 @@ import { serverClient } from "@/lib/trpc/server" +import { getHotelDataSchema } from "@/server/routers/hotels/output" import tempHotelData from "@/server/routers/hotels/tempHotelData.json" +import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection" import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection" import Details from "@/components/HotelReservation/SelectRate/Details" @@ -79,7 +81,7 @@ export default async function SectionsPage({ setLang(params.lang) // TODO: Use real endpoint. - const hotel = tempHotelData.data.attributes + const hotel = getHotelDataSchema.parse(tempHotelData) const rooms = await serverClient().hotel.rates.get({ // TODO: pass the correct hotel ID and all other parameters that should be included in the search @@ -107,8 +109,7 @@ export default async function SectionsPage({ return (
- {/* TODO: Add Hotel Listing Card */} -
Hotel Listing Card TBI
+
diff --git a/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/hotelDetailSidePeek.module.css b/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/hotelDetailSidePeek.module.css new file mode 100644 index 000000000..fb400465e --- /dev/null +++ b/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/hotelDetailSidePeek.module.css @@ -0,0 +1,4 @@ +.buttons { + display: flex; + gap: var(--Spacing-x3); +} diff --git a/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/index.tsx b/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/index.tsx new file mode 100644 index 000000000..d4e3eb829 --- /dev/null +++ b/components/HotelReservation/HotelSelectionHeader/HotelDetailSidePeek/index.tsx @@ -0,0 +1,58 @@ +"use client" + +import { useState } from "react" +import { useIntl } from "react-intl" + +import ChevronRightSmallIcon from "@/components/Icons/ChevronRightSmall" +import Button from "@/components/TempDesignSystem/Button" +import SidePeek from "@/components/TempDesignSystem/SidePeek" + +import styles from "./hotelDetailSidePeek.module.css" + +export default function HotelDetailSidePeek() { + const intl = useIntl() + const [isOpen, setIsOpen] = useState(false) + + function toggleSidePeek() { + setIsOpen(!isOpen) + } + + return ( + <> +
+ + +
+ setIsOpen(false)} + > +
TBD
+
+ + ) +} diff --git a/components/HotelReservation/HotelSelectionHeader/hotelSelectionHeader.module.css b/components/HotelReservation/HotelSelectionHeader/hotelSelectionHeader.module.css new file mode 100644 index 000000000..9646ec746 --- /dev/null +++ b/components/HotelReservation/HotelSelectionHeader/hotelSelectionHeader.module.css @@ -0,0 +1,52 @@ +.hotelSelectionHeader { + display: flex; + flex-direction: column; + background-color: var(--Base-Surface-Subtle-Normal); + padding: var(--Spacing-x3) var(--Spacing-x2); + justify-content: center; + gap: var(--Spacing-x3); +} + +.titleContainer { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + gap: var(--Spacing-x1); +} + +.descriptionContainer { + display: flex; + flex-direction: column; + gap: var(--Spacing-x-one-and-half); +} + +.address { + display: flex; + gap: var(--Spacing-x-one-and-half); + font-style: normal; +} + +.dividerContainer { + display: none; +} + +@media (min-width: 768px) { + .hotelSelectionHeader { + flex-direction: row; + padding: var(--Spacing-x4) var(--Spacing-x5); + gap: var(--Spacing-x6); + } + + .titleContainer > h1 { + white-space: nowrap; + } + + .dividerContainer { + display: block; + } + + .address { + gap: var(--Spacing-x3); + } +} diff --git a/components/HotelReservation/HotelSelectionHeader/index.tsx b/components/HotelReservation/HotelSelectionHeader/index.tsx new file mode 100644 index 000000000..c7e119b0a --- /dev/null +++ b/components/HotelReservation/HotelSelectionHeader/index.tsx @@ -0,0 +1,52 @@ +import Divider from "@/components/TempDesignSystem/Divider" +import Body from "@/components/TempDesignSystem/Text/Body" +import Caption from "@/components/TempDesignSystem/Text/Caption" +import Title from "@/components/TempDesignSystem/Text/Title" +import { getIntl } from "@/i18n" + +import HotelDetailSidePeek from "./HotelDetailSidePeek" + +import styles from "./hotelSelectionHeader.module.css" + +import { HotelSelectionHeaderProps } from "@/types/components/hotelReservation/selectRate/hotelSelectionHeader" + +export default async function HotelSelectionHeader({ + hotel, +}: HotelSelectionHeaderProps) { + const intl = await getIntl() + + return ( +
+
+ + {hotel.name} + +
+ + {hotel.address.streetAddress}, {hotel.address.city} + +
+ +
+ + {intl.formatMessage( + { + id: "Distance to city centre", + }, + { number: hotel.location.distanceToCentre } + )} + +
+
+
+ +
+
+ + {hotel.hotelContent.texts.descriptions.short} + + +
+
+ ) +} diff --git a/components/TempDesignSystem/Text/Body/body.module.css b/components/TempDesignSystem/Text/Body/body.module.css index 238128edd..30939d217 100644 --- a/components/TempDesignSystem/Text/Body/body.module.css +++ b/components/TempDesignSystem/Text/Body/body.module.css @@ -76,6 +76,10 @@ color: var(--UI-Text-Medium-contrast); } +.textHighContrast { + color: var(--UI-Text-High-contrast); +} + .white { color: var(--UI-Opacity-White-100); } diff --git a/components/TempDesignSystem/Text/Body/variants.ts b/components/TempDesignSystem/Text/Body/variants.ts index e55bbc3e2..055710eb3 100644 --- a/components/TempDesignSystem/Text/Body/variants.ts +++ b/components/TempDesignSystem/Text/Body/variants.ts @@ -11,6 +11,7 @@ const config = { pale: styles.pale, red: styles.red, textMediumContrast: styles.textMediumContrast, + textHighContrast: styles.textHighContrast, white: styles.white, peach50: styles.peach50, peach80: styles.peach80, diff --git a/server/routers/hotels/tempHotelData.json b/server/routers/hotels/tempHotelData.json index d77cbf416..2ec39da33 100644 --- a/server/routers/hotels/tempHotelData.json +++ b/server/routers/hotels/tempHotelData.json @@ -9,19 +9,11 @@ "cityName": "Stockholm", "ratings": { "tripAdvisor": { - "numberOfReviews": 2776, - "rating": 4.0, - "ratingImageUrl": "https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.5-15458-5.svg", - "webUrl": "https://www.tripadvisor.com/Hotel_Review-g189852-d229383-Reviews-Scandic_Continental-Stockholm.html", + "numberOfReviews": 2793, + "rating": 4, + "ratingImageUrl": "https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.0-15458-5.svg", + "webUrl": "https://www.tripadvisor.com/Hotel_Review-g189852-d229383-Reviews-Scandic_Continental-Stockholm.html?m=15458", "awards": [ - { - "displayName": "Travelers Choice", - "images": { - "small": "https://static.tacdn.com/img2/travelers_choice/widgets/tchotel_2024_L.png", - "medium": "https://static.tacdn.com/img2/travelers_choice/widgets/tchotel_2024_L.png", - "large": "https://static.tacdn.com/img2/travelers_choice/widgets/tchotel_2024_L.png" - } - }, { "displayName": "Travelers Choice", "images": { @@ -30,12 +22,7 @@ "large": "https://static.tacdn.com/img2/travelers_choice/widgets/tchotel_2023_L.png" } } - ], - "reviews": { - "widgetHtmlTagId": "TA_cdspropertydetail", - "widgetScriptEmbedUrlIframe": "//www.tripadvisor.com/WidgetEmbed-cdspropertydetail?locationId=12441627&partnerId=FDF3F5CC73C349C0A5AB94C0DD86BB76&lang=en&display=true", - "widgetScriptEmbedUrlJavaScript": "//www.tripadvisor.com/WidgetEmbed-cdspropertydetail?locationId=12441627&partnerId=FDF3F5CC73C349C0A5AB94C0DD86BB76&lang=en&display=false" - } + ] } }, "address": { @@ -157,7 +144,7 @@ "facilityInformation": "Relax with your favorite mixed drink in the bar on our roof terrace. Work out in our gym or relax in our sauna. At Scandic Continental we offer meeting rooms for up to 900 participants.", "surroundingInformation": "Explore popular attractions such as the Old Town, the Opera, City Hall and Royal Palace. You are close to public transport, buses and trams and within walking distance of all that the city centre has to offer.", "descriptions": { - "short": "Scandic Continental enjoys a fantastic location in Stockholm city centre. Close to shopping areas, culture, attractions and restaurants. ", + "short": "Scandic Continental enjoys a fantastic location in Stockholm city centre. Close to shopping areas, culture, attractions and restaurants.", "medium": "Scandic Continental enjoys a fantastic location in Stockholm city centre. Close to shopping areas, culture, attractions and restaurants. Popular attractions such as the Old Town, the Opera, City Hall and Royal Palace are all close by." } }, @@ -172,190 +159,149 @@ { "id": 5550, "name": "Bikes for loan", - "applyToAllHotels": false, "public": true, - "icon": "BikesForLoan", - "sortOrder": 700 + "sortOrder": 700, + "filter": "None" }, { "id": 1829, "name": "Gym", - "code": "HEA - TRAI", - "applyToAllHotels": false, "public": true, - "icon": "Gym", - "iconName": "Gym", - "sortOrder": 1700 + "sortOrder": 1700, + "filter": "Hotel facilities" }, { "id": 1833, "name": "Free WiFi", - "code": "IHF", - "applyToAllHotels": false, "public": true, - "icon": "FreeWiFi", - "sortOrder": 1900 + "sortOrder": 1900, + "filter": "None" }, { "id": 1834, "name": "Laundry service", - "code": "LAU", - "applyToAllHotels": false, "public": true, - "icon": "LaundryService", - "sortOrder": 200 + "sortOrder": 200, + "filter": "None" }, { "id": 1406, "name": "Parking - additional cost", - "code": "PAR", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "None" }, { "id": 2665, "name": "Parking - garage", - "code": "GAR", - "applyToAllHotels": false, "public": true, - "icon": "Parking", - "iconName": "Garage", - "sortOrder": 1400 + "sortOrder": 1400, + "filter": "Hotel facilities" }, { "id": 1835, "name": "Pet-friendly rooms", - "code": "PET", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "Hotel facilities" }, { "id": 1379, "name": "Sauna", - "code": "SAU - RELX", - "applyToAllHotels": false, "public": true, - "icon": "Sauna", - "sortOrder": 2000 + "sortOrder": 2000, + "filter": "Hotel facilities" }, { "id": 1017, "name": "Meeting rooms", - "code": "MEE", - "applyToAllHotels": false, "public": true, - "icon": "Meeting", - "sortOrder": 9000 + "sortOrder": 9000, + "filter": "None" }, { "id": 1382, "name": "Outdoor terrace", - "code": "-", - "applyToAllHotels": false, "public": true, - "icon": "OutdoorTerrace", - "sortOrder": 1000 + "sortOrder": 1000, + "filter": "Hotel facilities" }, { "id": 1408, "name": "Scandic Shop 24 hrs", - "code": "SHOP", - "applyToAllHotels": false, "public": true, - "icon": "Shop", - "sortOrder": 100 + "sortOrder": 100, + "filter": "None" }, { "id": 1606, "name": "Sky bar", - "code": "-", - "applyToAllHotels": false, "public": true, - "icon": "Skybar", - "iconName": "Sky Bar / Rooftop Bar", - "sortOrder": 1100 + "sortOrder": 1100, + "filter": "Hotel facilities" }, { "id": 5806, "name": "Meeting / conference facilities", - "code": "MEE - MEETING ", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 1500 + "sortOrder": 1500, + "filter": "None" }, { "id": 1607, "name": "Golf course (0-30 km)", - "code": "GOLF", - "applyToAllHotels": false, "public": false, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "Hotel surroundings" }, { "id": 971, "name": "Shopping", - "code": "-", - "applyToAllHotels": false, "public": false, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "Hotel surroundings" }, { "id": 1911, "name": "24 hours security", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "None" }, { "id": 1913, "name": "Overnight security", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "None" }, { "id": 162583, "name": "Laundry service - express", - "applyToAllHotels": false, "public": true, - "icon": "ExpressLaundryService", - "iconName": "Express dry cleaning", - "sortOrder": 300 + "sortOrder": 300, + "filter": "None" }, { "id": 229144, "name": "TV with Chromecast", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "None" }, { "id": 1407, "name": "Serves breakfast (always included)", - "code": "-", - "applyToAllHotels": false, "public": true, - "icon": "None", - "sortOrder": 0 + "sortOrder": 0, + "filter": "None" }, { "id": 1378, "name": "Room service", - "code": "ROO - R/S", - "applyToAllHotels": false, "public": true, - "icon": "RoomService", - "sortOrder": 400 + "sortOrder": 400, + "filter": "None" } ], "healthFacilities": [ @@ -1067,7 +1013,617 @@ "instagram": "https://www.instagram.com/scandiccontinental/", "facebook": "https://www.facebook.com/scandiccontinental/" }, - "isActive": true - } + "isActive": true, + "gallery": { + "heroImages": [ + { + "metaData": { + "title": "Superior plus, room", + "altText": "Superior plus, room", + "altText_En": "Superior plus, room", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5rrxa1aq23taddapu11q/scandic-continental-room-superiorplus.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/66hti5xhqzmr8jhab213/scandic-continental-room-superiorplus.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/9lplgtij1oyjwaz93lrs/scandic-continental-room-superiorplus.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/f5bdchr9zeat67jri8kw/scandic-continental-room-superiorplus.jpg" + } + }, + { + "metaData": { + "title": "Entrance, restaurant Market", + "altText": "Entrance, restaurant Market", + "altText_En": "Entrance, restaurant Market", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/9qgydydjtavu128kv2xt/scandic-continental-entrance-themarket.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0c0sz9g0r9hhejw62ez9/scandic-continental-entrance-themarket.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ka3ku5zqp5uuqpfjddot/scandic-continental-entrance-themarket.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ksa5jgagck9sbj2uarz5/scandic-continental-entrance-themarket.jpg" + } + }, + { + "metaData": { + "title": "Terrace", + "altText": "Terrace", + "altText_En": "Terrace", + "copyRight": "Björn Enström" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m9yj4g160snutij4sivk/Scandic_Continental_Capitol_Terrace.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fqqakeunmamm3uetf47w/Scandic_Continental_Capitol_Terrace.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/6fp0avu8yjrh38zv1as8/Scandic_Continental_Capitol_Terrace.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/j8dveyubybb4f7or9qay/Scandic_Continental_Capitol_Terrace.jpg" + } + } + ], + "smallerImages": [ + { + "metaData": { + "title": "Entrance", + "altText": "Entrance from Vasagatan", + "altText_En": "Entrance from Vasagatan", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/jlnmjycubt2ks3oiaoee/scandic-continental-entrance-vasagatan.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/izgmvkaesxw9jynunuyo/scandic-continental-entrance-vasagatan.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/sfasl29ijndz2ez6lywn/scandic-continental-entrance-vasagatan.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/9vcvf9x9exykkl2yf0bg/scandic-continental-entrance-vasagatan.jpg" + } + }, + { + "metaData": { + "title": "Standard room", + "altText": "Standard room", + "altText_En": "Standard room", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/qj2en3cqvvadxe5y5b6y/scandic-continental-room-standard.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/16kz0cyxngrwe7880gjh/scandic-continental-room-standard.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/x8r0of336j2rsrhvwlqy/scandic-continental-room-standard.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/co3h6nr4p28j2tn641sz/scandic-continental-room-standard.jpg" + } + }, + { + "metaData": { + "title": "Junior suite", + "altText": "Junior suite, detail", + "altText_En": "Junior suite, detail", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/tijveokv1qmnmy964iv9/scandic-continental-room-juniorsuite-detail-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/i7h3u2x6a9ta46jxb2tg/scandic-continental-room-juniorsuite-detail-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/hv4on6ec8qlcxmcd0enl/scandic-continental-room-juniorsuite-detail-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/3eakprn9n0zwyjpzpy6p/scandic-continental-room-juniorsuite-detail-1.jpg" + } + }, + { + "metaData": { + "title": "Junior Suite", + "altText": "Junior Suite", + "altText_En": "Junior Suite", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/7h4bonsezjsjz1lpg6hd/scandic-continental-room-juniorsuite.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/gge47e5ach2e0kuakggx/scandic-continental-room-juniorsuite.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/cts4y9u9w02ockyyoze7/scandic-continental-room-juniorsuite.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/f8aojtx38vb7ywv33cf6/scandic-continental-room-juniorsuite.jpg" + } + }, + { + "metaData": { + "title": "Superior plus, room", + "altText": "Superior plus, room", + "altText_En": "Superior plus, room", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5rrxa1aq23taddapu11q/scandic-continental-room-superiorplus.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/66hti5xhqzmr8jhab213/scandic-continental-room-superiorplus.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/9lplgtij1oyjwaz93lrs/scandic-continental-room-superiorplus.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/f5bdchr9zeat67jri8kw/scandic-continental-room-superiorplus.jpg" + } + }, + { + "metaData": { + "title": "Superior room, detail", + "altText": "Superior room, detail", + "altText_En": "Superior room, detail", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/6jjitns74k9nutn9v9tz/scandic-continental-room-superior-detail.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ft3se6waag20lx6hxtn9/scandic-continental-room-superior-detail.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wsfl5usd8qbdm929dvxu/scandic-continental-room-superior-detail.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/duedba0io5xew6almv7l/scandic-continental-room-superior-detail.jpg" + } + }, + { + "metaData": { + "title": "Junior suite, bathroom", + "altText": "Junior suite, bathroom", + "altText_En": "Junior suite, bathroom", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/2cpdxrywepicqnp9eoob/scandic-continental-room-juniorsuite-bathroom-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ynkzimfaldgef0ukj7q5/scandic-continental-room-juniorsuite-bathroom-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/jrhqe8vbm91vegd02bjh/scandic-continental-room-juniorsuite-bathroom-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/93ag11udgjefz6qwa8st/scandic-continental-room-juniorsuite-bathroom-1.jpg" + } + }, + { + "metaData": { + "title": "Entrance, restaurant Market", + "altText": "Entrance, restaurant Market", + "altText_En": "Entrance, restaurant Market", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/9qgydydjtavu128kv2xt/scandic-continental-entrance-themarket.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0c0sz9g0r9hhejw62ez9/scandic-continental-entrance-themarket.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ka3ku5zqp5uuqpfjddot/scandic-continental-entrance-themarket.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ksa5jgagck9sbj2uarz5/scandic-continental-entrance-themarket.jpg" + } + }, + { + "metaData": { + "title": "Dining room, the Market", + "altText": "Dining room, the Market", + "altText_En": "Dining room, the Market", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/bywlg4nwp11hmebfb1wg/scandic-continental-diningroom-themarket.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fdvp429hm1rfpg2le6jo/scandic-continental-diningroom-themarket.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wm24ma9ngk8gijotm7va/scandic-continental-diningroom-themarket.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/7xiz9p0f254yl9oef7bj/scandic-continental-diningroom-themarket.jpg" + } + }, + { + "metaData": { + "title": "Dining room, the Market", + "altText": "Dining room, the Market", + "altText_En": "Dining room, the Market", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zd9rkkm383ctblciw0np/scandic-continental-diningroom-themarket-2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/i9giiq3ijihm172b5bbw/scandic-continental-diningroom-themarket-2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/9baixkat8wjdsjn1lo34/scandic-continental-diningroom-themarket-2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kwemrr8fohnnwo0uzd3s/scandic-continental-diningroom-themarket-2.jpg" + } + }, + { + "metaData": { + "title": "Restaurant, the Market, detail", + "altText": "Restaurant, the Market, detail", + "altText_En": "Restaurant, the Market, detail", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/uo7e32pi5cmf06as55ad/scandic-continental-themarket-detail.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/1qhpesv8d407j00b1y5x/scandic-continental-themarket-detail.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ldenlssse8595b4iavjj/scandic-continental-themarket-detail.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/yhs5jgy8mgw9xvzazjze/scandic-continental-themarket-detail.jpg" + } + }, + { + "metaData": { + "title": "Breakfast, the Market", + "altText": "Breakfast, the Market", + "altText_En": "Breakfast, the Market", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/vsj1725jfae5eqx9urua/scandic-continental-breakfast-themarket-15.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ajqxe5obci19sw4g08ub/scandic-continental-breakfast-themarket-15.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wi3xa47bwtb5s5kbaxq8/scandic-continental-breakfast-themarket-15.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1igemz65ffu4nw7bg64l/scandic-continental-breakfast-themarket-15.jpg" + } + }, + { + "metaData": { + "title": "Breakfast, the Market", + "altText": "Breakfast, the Market", + "altText_En": "Breakfast, the Market", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/1clcvo8e86itpus3xy99/scandic-continental-breakfast-themarket-9.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/on5ckcmwxvs47l11natn/scandic-continental-breakfast-themarket-9.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/l5g6dmumzh9duseaa9zw/scandic-continental-breakfast-themarket-9.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/pl45n94xmu19bo0fokwf/scandic-continental-breakfast-themarket-9.jpg" + } + }, + { + "metaData": { + "title": "Restaurant Caldo", + "altText": "Restaurant Caldo", + "altText_En": "Restaurant Caldo", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/q5cj5qehiq03ey38ppen/scandic-continental-caldo.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/na08m2sippkfzd3yf9le/scandic-continental-caldo.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wxh6w02ujd5wqyr9bvg8/scandic-continental-caldo.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bem9c6dxappvlwxg7s1g/scandic-continental-caldo.jpg" + } + }, + { + "metaData": { + "title": "Roof top bar", + "altText": "Roof top bar at Scandic Continental", + "altText_En": "Roof top bar at Scandic Continental", + "copyRight": "Scandic" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/cxf1z9sgr9152ls1kdmg/Scandic_Continental_Capitol_The_View_13.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/pd43w13z5dx8l7kzhsyg/Scandic_Continental_Capitol_The_View_13.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/7ryqztmdqg0mam62oyf5/Scandic_Continental_Capitol_The_View_13.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/hwpsq70dbln0l052cjqa/Scandic_Continental_Capitol_The_View_13.jpg" + } + }, + { + "metaData": { + "title": "Roof top bar", + "altText": "Roof top bar at Scandic Continental", + "altText_En": "Roof top bar at Scandic Continental", + "copyRight": "Scandic" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/hd1wk1wvtwsz4fuvf0rb/Scandic_Continental_Capitol_The_View_6.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ioi4ir6ijpy0f5dvu56n/Scandic_Continental_Capitol_The_View_6.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ydbhbjj3ulju2bxh7ebj/Scandic_Continental_Capitol_The_View_6.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kom0ttrq6xazxxuodrr1/Scandic_Continental_Capitol_The_View_6.jpg" + } + }, + { + "metaData": { + "title": "Terrace", + "altText": "Terrace", + "altText_En": "Terrace", + "copyRight": "Björn Enström" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m9yj4g160snutij4sivk/Scandic_Continental_Capitol_Terrace.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fqqakeunmamm3uetf47w/Scandic_Continental_Capitol_Terrace.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/6fp0avu8yjrh38zv1as8/Scandic_Continental_Capitol_Terrace.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/j8dveyubybb4f7or9qay/Scandic_Continental_Capitol_Terrace.jpg" + } + }, + { + "metaData": { + "title": "Terrace", + "altText": "Terrace", + "altText_En": "Terrace", + "copyRight": "Björn Enström" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/dsm1ief68fx4b6j5673x/Scandic_Continental_Capitol_Terrace.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/pm1lxtm8zf1ejd0qtko4/Scandic_Continental_Capitol_Terrace.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wwgkqa2fr5z223ybdemr/Scandic_Continental_Capitol_Terrace.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/aztwaanmwiwk5s0tc36w/Scandic_Continental_Capitol_Terrace.jpg" + } + }, + { + "metaData": { + "title": "Rooftop terrace", + "altText": "Rooftop terrace", + "altText_En": "Rooftop terrace", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m4mhmwyynuf65ls1cybu/scandic-continental-rooftop-terrace-capital-4.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/phsnpd122oq7e6hszsc7/scandic-continental-rooftop-terrace-capital-4.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ty9gb8ogkq5iqszke7pe/scandic-continental-rooftop-terrace-capital-4.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ug0co0ks7v25avze1vi3/scandic-continental-rooftop-terrace-capital-4.jpg" + } + }, + { + "metaData": { + "title": "View", + "altText": "View", + "altText_En": "View", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/gs1lqt13ptscg4audxgo/scandic-continental-theview-detail-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/otr9i3f4q8084ggfwnm1/scandic-continental-theview-detail-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/w8pkgf9igqibmlzp9egl/scandic-continental-theview-detail-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/9yujqdk34x6juk6fstks/scandic-continental-theview-detail-1.jpg" + } + }, + { + "metaData": { + "title": "View", + "altText": "View", + "altText_En": "View", + "copyRight": "Elin Strömberg © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/autuf074xvc2xr3zmxyf/scandic-continental-theview-detail-2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/hyf3fjkreqw2rlx4wm4e/scandic-continental-theview-detail-2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/3wezw0ftkli48oloekdb/scandic-continental-theview-detail-2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ygxz2q45b4gcgscqdzaw/scandic-continental-theview-detail-2.jpg" + } + }, + { + "metaData": { + "title": "Work out equipment at the terrace", + "altText": "Work out equipment at the terrace", + "altText_En": "Work out equipment at the terrace", + "copyRight": "Scandic" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oe32sgg1pudiwfd9hjpa/Scandic_Continental_Terrace_Workout_1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/1g9d62gqkyvfky85kgag/Scandic_Continental_Terrace_Workout_1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eb9n7j8s9scwg89ac4lk/Scandic_Continental_Terrace_Workout_1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/cyrtt6bmy11y1wti2d9h/Scandic_Continental_Terrace_Workout_1.jpg" + } + }, + { + "metaData": { + "title": "Meeting room", + "altText": "", + "altText_En": "", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zbc3bhdzs59sqsvm9v29/scandic-continental-conference-9.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/m2nh4f57ys3bcxuq27hb/scandic-continental-conference-9.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wk39k84g3nrivntzuww2/scandic-continental-conference-9.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/yn1mzw6nbyl90dreiz6b/scandic-continental-conference-9.jpg" + } + }, + { + "metaData": { + "title": "Meeting room", + "altText": "", + "altText_En": "", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mfq1ayjplo7keqxm88ng/scandic-continental-conference-3.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/wzjl4n8qk4imfgla7r73/scandic-continental-conference-3.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wf6lg2u4bz1f9ntkszuz/scandic-continental-conference-3.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/uh83sqrope55u6q4hbhl/scandic-continental-conference-3.jpg" + } + }, + { + "metaData": { + "title": "Meeting room ", + "altText": "Meeting room ", + "altText_En": "Meeting room ", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/z00ei7j974hx7c9vp8a6/Scandic_Continental_meetingroom_15-16-17-18-0357.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/v64n5ne3ayfo8v3q9x2s/Scandic_Continental_meetingroom_15-16-17-18-0357.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/mtx54l82hr3o3m7k0vqi/Scandic_Continental_meetingroom_15-16-17-18-0357.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/3xr7ovgdjxq5taz8nzma/Scandic_Continental_meetingroom_15-16-17-18-0357.jpg" + } + }, + { + "metaData": { + "title": "Breakout area ", + "altText": "Breakout area ", + "altText_En": "Breakout area ", + "copyRight": "Karl Gabor " + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/e84l4tyafvmx6epe0c3d/Scandic_Continental_Breakout_3-0432.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/60im9a4yre1kg5me9riz/Scandic_Continental_Breakout_3-0432.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/nsfh80un5l7qv9y9i1iw/Scandic_Continental_Breakout_3-0432.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/pxe0dozr1joaqig3cbf2/Scandic_Continental_Breakout_3-0432.jpg" + } + }, + { + "metaData": { + "title": "Breakout area ", + "altText": "Breakout area ", + "altText_En": "Breakout area ", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/fpyspgc9op7wb4ay3083/Scandic_Continental_breakout2-0391.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/2ueu1qe77bdqkj682xvq/Scandic_Continental_breakout2-0391.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xmaaxzi1qrlwkm2gbl0z/Scandic_Continental_breakout2-0391.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/px12tarpgqq31cuz512z/Scandic_Continental_breakout2-0391.jpg" + } + }, + { + "metaData": { + "title": "Meeting room ", + "altText": "Meeting room ", + "altText_En": "Meeting room ", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ssrltn03vl7layrr5wgk/Scandic_Continental_Meetingroom_15_16_17_18.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/jozqcjuo1dpd9gyqjcyo/Scandic_Continental_Meetingroom_15_16_17_18.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/vdinjqa1j09av33z6wss/Scandic_Continental_Meetingroom_15_16_17_18.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/gq5lhbwrjvvo6otkgi9z/Scandic_Continental_Meetingroom_15_16_17_18.jpg" + } + }, + { + "metaData": { + "title": "Gym", + "altText": "Gym of Scandic Continental in Stockholm", + "altText_En": "Gym of Scandic Continental in Stockholm", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ic6077yovsoxdmj9545r/scandic_continental_gym.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/uhhqrnb8wzy9xlr42zn8/scandic_continental_gym.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/iqor5zd7owsll42z59vh/scandic_continental_gym.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/5v5o0bbopf9t7r95sp2o/scandic_continental_gym.jpg" + } + } + ] + }, + "conferencesAndMeetings": { + "headingText": "Meetings, conferences & events", + "pageUrl": "https://test3.scandichotels.com/hotels/sweden/stockholm/scandic-continental/meetings-conferences-events", + "heroImages": [ + { + "metaData": { + "title": "Roof top bar", + "altText": "Roof bar of Scandic Continental in Stockholm", + "altText_En": "Roof bar of Scandic Continental in Stockholm", + "copyRight": "Scandic" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/086xasvs4lq29x4oqvbq/Scandic_Continental_Capitol_The_View_2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/rgrcj8ed9mhecp6hpcuq/Scandic_Continental_Capitol_The_View_2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/gklysd2pkx9gi0nx1mqu/Scandic_Continental_Capitol_The_View_2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/sjkd7r6mw6xxhwzkkqvk/Scandic_Continental_Capitol_The_View_2.jpg" + } + } + ] + }, + "healthAndWellness": { + "headingText": "Gym and health", + "heroImages": [ + { + "metaData": { + "title": "Gym", + "altText": "Gym of Scandic Continental in Stockholm", + "altText_En": "Gym of Scandic Continental in Stockholm", + "copyRight": "Elin Sylwan © 2016" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ic6077yovsoxdmj9545r/scandic_continental_gym.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/uhhqrnb8wzy9xlr42zn8/scandic_continental_gym.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/iqor5zd7owsll42z59vh/scandic_continental_gym.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/5v5o0bbopf9t7r95sp2o/scandic_continental_gym.jpg" + } + }, + { + "metaData": { + "title": "Work out equipment at the terrace", + "altText": "Work out equipment at the terrace", + "altText_En": "Work out equipment at the terrace", + "copyRight": "Scandic" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oe32sgg1pudiwfd9hjpa/Scandic_Continental_Terrace_Workout_1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/1g9d62gqkyvfky85kgag/Scandic_Continental_Terrace_Workout_1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eb9n7j8s9scwg89ac4lk/Scandic_Continental_Terrace_Workout_1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/cyrtt6bmy11y1wti2d9h/Scandic_Continental_Terrace_Workout_1.jpg" + } + } + ] + }, + "accessibilityElevatorPitchText": "Find the information you might need, before visiting us. You are always welcome to our hotel - completely without barriers. Regardless of impairment, sight, hearing, allergies or wheelchair, we have made sure that you enjoy your stay.", + "merchantInformationData": { + "webMerchantId": "1110009031", + "cards": { + "americanExpress": true, + "dankort": false, + "dinersClub": true, + "jcb": true, + "masterCard": true, + "visa": true, + "maestro": false, + "chinaUnionPay": true, + "discover": true + }, + "alternatePaymentOptions": { + "swish": true, + "vipps": false, + "mobilePay": true, + "applePay": true, + "alipayPlus": false, + "googlePay": true, + "klarna": false, + "payPal": false, + "weChatPay": false + } + }, + "restaurantImages": { + "headingText": "Bar and breakfast", + "heroImages": [ + { + "metaData": { + "title": "Dining room, the Market", + "altText": "Dining room, the Market", + "altText_En": "Dining room, the Market", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/bywlg4nwp11hmebfb1wg/scandic-continental-diningroom-themarket.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fdvp429hm1rfpg2le6jo/scandic-continental-diningroom-themarket.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/wm24ma9ngk8gijotm7va/scandic-continental-diningroom-themarket.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/7xiz9p0f254yl9oef7bj/scandic-continental-diningroom-themarket.jpg" + } + }, + { + "metaData": { + "title": "Rooftop bar", + "altText": "Rooftop bar", + "altText_En": "Rooftop bar", + "copyRight": "Karl Gabor" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ntwor0b4i90sp9sh5qbj/scandic-continental-rooftopbar-capital.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ivxowx9eunbyz68qkstd/scandic-continental-rooftopbar-capital.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/6pi2262z6lo0un7x7iik/scandic-continental-rooftopbar-capital.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/6rlwgo7lq198xg7ifii6/scandic-continental-rooftopbar-capital.jpg" + } + }, + { + "metaData": { + "title": "Terrace", + "altText": "Bar of Scandic Continental in Stockholm", + "altText_En": "Bar of Scandic Continental in Stockholm", + "copyRight": "Björn Enström" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/69jl573jtmw8g4jjtugo/Scandic_Continental_Capitol_Terrace.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/td5tz4ld37kwws6rpnye/Scandic_Continental_Capitol_Terrace.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/mlrdylyxf3m9fr5r9l7x/Scandic_Continental_Capitol_Terrace.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/dywcmnaamp0altjge9qx/Scandic_Continental_Capitol_Terrace.jpg" + } + } + ] + } + }, + "relationships": { + "restaurants": { + "links": { + "related": "http://tstapi.scandichotels.com/hotel/v1/Hotels/811/restaurants?language=En" + } + }, + "nearbyHotels": { + "links": { + "related": "http://tstapi.scandichotels.com/hotel/v1/Hotels/811/nearbyHotels?language=En" + } + }, + "roomCategories": { + "links": { + "related": "http://tstapi.scandichotels.com/hotel/v1/Hotels/811/roomCategories?language=En" + } + }, + "meetingRooms": { + "links": { + "related": "http://tstapi.scandichotels.com/hotel/v1/Hotels/811/meetingRooms?language=En" + } + }, + "merchantInformation": { + "links": { + "related": "http://tstapi.scandichotels.com/hotel/v1/Hotels/811/merchantInformation?language=En" + } + } + }, + "id": "811", + "language": "En", + "type": "hotels" } } diff --git a/types/components/hotelReservation/selectRate/hotelSelectionHeader.ts b/types/components/hotelReservation/selectRate/hotelSelectionHeader.ts new file mode 100644 index 000000000..9804e0424 --- /dev/null +++ b/types/components/hotelReservation/selectRate/hotelSelectionHeader.ts @@ -0,0 +1,5 @@ +import { Hotel } from "@/types/hotel" + +export type HotelSelectionHeaderProps = { + hotel: Hotel +} From c7e829cd02fa7e4c72b4bbb02c1948a772973769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Wed, 2 Oct 2024 15:08:05 +0200 Subject: [PATCH 06/64] fix: "as of today" translation corrections --- i18n/dictionaries/da.json | 2 +- i18n/dictionaries/no.json | 2 +- i18n/dictionaries/sv.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index cf1889d1d..f19f18f62 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -266,7 +266,7 @@ "Zoo": "Zoo", "Zoom in": "Zoom ind", "Zoom out": "Zoom ud", - "as of today": "fra idag", + "as of today": "pr. dags dato", "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", "by": "inden", "characters": "tegn", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 29103820b..304920b27 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -266,7 +266,7 @@ "Zoo": "Dyrehage", "Zoom in": "Zoom inn", "Zoom out": "Zoom ut", - "as of today": "per idag", + "as of today": "per i dag", "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", "by": "innen", "characters": "tegn", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 5f9c89db8..bb99789bb 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -266,7 +266,7 @@ "Zoo": "Djurpark", "Zoom in": "Zooma in", "Zoom out": "Zooma ut", - "as of today": "från och med idag", + "as of today": "per idag", "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", "by": "innan", "characters": "tecken", From d44451d2dc5839a3b13f1ad5e3e2f29137cefd4a Mon Sep 17 00:00:00 2001 From: Tobias Johansson Date: Fri, 4 Oct 2024 09:37:09 +0000 Subject: [PATCH 07/64] Merged in feat/SW-431-payment-flow (pull request #635) Feat/SW-431 payment flow * feat(SW-431): Update mock hotel data * feat(SW-431): Added route handler and trpc routes * feat(SW-431): List payment methods and handle booking status and redirection * feat(SW-431): Updated booking page to poll for booking status * feat(SW-431): Updated create booking contract * feat(SW-431): small fix * fix(SW-431): Added intl string and sorted dictionaries * fix(SW-431): Changes from PR * fix(SW-431): fixes from PR * fix(SW-431): add todo comments * fix(SW-431): update schema prop Approved-by: Simon.Emanuelsson --- .../hotelreservation/[section]/page.tsx | 21 +- .../booking-confirmation/loading.tsx | 5 + .../booking-confirmation/page.tsx | 63 +++++- .../payment-callback/[lang]/[status]/route.ts | 37 ++++ .../IntroSection/index.tsx | 7 +- .../BookingConfirmation/StaySection/index.tsx | 7 +- .../SummarySection/index.tsx | 7 +- .../SelectRate/Payment/index.tsx | 193 +++++++++++++----- .../SelectRate/Payment/payment.module.css | 18 ++ constants/booking.ts | 7 + constants/routes/hotelReservation.js | 20 ++ hooks/booking/useHandleBookingStatus.ts | 35 ++++ i18n/dictionaries/da.json | 51 ++--- i18n/dictionaries/de.json | 51 ++--- i18n/dictionaries/en.json | 58 +++--- i18n/dictionaries/fi.json | 47 ++--- i18n/dictionaries/no.json | 51 ++--- i18n/dictionaries/sv.json | 51 ++--- server/routers/booking/index.ts | 6 +- server/routers/booking/input.ts | 90 +++++--- server/routers/booking/mutation.ts | 17 +- server/routers/booking/output.ts | 4 +- server/routers/booking/query.ts | 85 ++++++++ server/routers/hotels/output.ts | 17 ++ server/trpc.ts | 37 ++-- .../hotelReservation/selectRate/section.ts | 6 + 26 files changed, 708 insertions(+), 283 deletions(-) create mode 100644 app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx create mode 100644 app/api/web/payment-callback/[lang]/[status]/route.ts create mode 100644 components/HotelReservation/SelectRate/Payment/payment.module.css create mode 100644 constants/booking.ts create mode 100644 hooks/booking/useHandleBookingStatus.ts create mode 100644 server/routers/booking/query.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index a0373645b..b3ef81538 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -1,6 +1,6 @@ +import { notFound } from "next/navigation" + import { serverClient } from "@/lib/trpc/server" -import { getHotelDataSchema } from "@/server/routers/hotels/output" -import tempHotelData from "@/server/routers/hotels/tempHotelData.json" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection" @@ -80,12 +80,19 @@ export default async function SectionsPage({ }: PageArgs) { setLang(params.lang) - // TODO: Use real endpoint. - const hotel = getHotelDataSchema.parse(tempHotelData) + const hotel = await serverClient().hotel.hotelData.get({ + hotelId: "811", + language: params.lang, + }) + + if (!hotel) { + // TODO: handle case with hotel missing + return notFound() + } const rooms = await serverClient().hotel.rates.get({ // TODO: pass the correct hotel ID and all other parameters that should be included in the search - hotelId: "1", + hotelId: hotel.data.id, }) const intl = await getIntl() @@ -170,7 +177,9 @@ export default async function SectionsPage({ header={intl.formatMessage({ id: "Payment info" })} path={`payment?${currentSearchParams}`} > - {params.section === "payment" && } + {params.section === "payment" && ( + + )}
diff --git a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx new file mode 100644 index 000000000..c739b6635 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/loading.tsx @@ -0,0 +1,5 @@ +import LoadingSpinner from "@/components/LoadingSpinner" + +export default function Loading() { + return +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx index 46f941bbc..0a22c5bc0 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/booking-confirmation/page.tsx @@ -1,20 +1,67 @@ +"use client" + +import { useMemo } from "react" + +import { + BOOKING_CONFIRMATION_NUMBER, + BookingStatusEnum, +} from "@/constants/booking" + import IntroSection from "@/components/HotelReservation/BookingConfirmation/IntroSection" import StaySection from "@/components/HotelReservation/BookingConfirmation/StaySection" import SummarySection from "@/components/HotelReservation/BookingConfirmation/SummarySection" import { tempConfirmationData } from "@/components/HotelReservation/BookingConfirmation/tempConfirmationData" +import LoadingSpinner from "@/components/LoadingSpinner" +import { useHandleBookingStatus } from "@/hooks/booking/useHandleBookingStatus" import styles from "./page.module.css" +const maxRetries = 10 +const retryInterval = 2000 + export default function BookingConfirmationPage() { const { email, hotel, stay, summary } = tempConfirmationData - return ( -
-
- - - -
-
+ const confirmationNumber = useMemo(() => { + if (typeof window === "undefined") return "" + + const storedConfirmationNumber = sessionStorage.getItem( + BOOKING_CONFIRMATION_NUMBER + ) + // TODO: cleanup stored values + // sessionStorage.removeItem(BOOKING_CONFIRMATION_NUMBER) + return storedConfirmationNumber + }, []) + + const bookingStatus = useHandleBookingStatus( + confirmationNumber, + BookingStatusEnum.BookingCompleted, + maxRetries, + retryInterval ) + + if ( + confirmationNumber === null || + bookingStatus.isError || + (bookingStatus.isFetched && !bookingStatus.data) + ) { + // TODO: handle error + throw new Error("Error fetching booking status") + } + + if ( + bookingStatus.data?.reservationStatus === BookingStatusEnum.BookingCompleted + ) { + return ( +
+
+ + + +
+
+ ) + } + + return } diff --git a/app/api/web/payment-callback/[lang]/[status]/route.ts b/app/api/web/payment-callback/[lang]/[status]/route.ts new file mode 100644 index 000000000..0b8133c43 --- /dev/null +++ b/app/api/web/payment-callback/[lang]/[status]/route.ts @@ -0,0 +1,37 @@ +import { NextRequest, NextResponse } from "next/server" +import { env } from "process" + +import { Lang } from "@/constants/languages" +import { + bookingConfirmation, + payment, +} from "@/constants/routes/hotelReservation" + +export async function GET( + request: NextRequest, + { params }: { params: { lang: string; status: string } } +): Promise { + console.log(`[payment-callback] callback started`) + const lang = params.lang as Lang + const status = params.status + const returnUrl = new URL(`${env.PUBLIC_URL}/${payment[lang]}`) + + if (status === "success") { + const confirmationUrl = new URL( + `${env.PUBLIC_URL}/${bookingConfirmation[lang]}` + ) + console.log(`[payment-callback] redirecting to: ${confirmationUrl}`) + return NextResponse.redirect(confirmationUrl) + } + + if (status === "cancel") { + returnUrl.searchParams.set("cancel", "true") + } + + if (status === "error") { + returnUrl.searchParams.set("error", "true") + } + + console.log(`[payment-callback] redirecting to: ${returnUrl}`) + return NextResponse.redirect(returnUrl) +} diff --git a/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx b/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx index 9482f51fe..448dc82e1 100644 --- a/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/IntroSection/index.tsx @@ -1,16 +1,17 @@ +import { useIntl } from "react-intl" + import Button from "@/components/TempDesignSystem/Button" import Link from "@/components/TempDesignSystem/Link" import Body from "@/components/TempDesignSystem/Text/Body" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./introSection.module.css" import { IntroSectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function IntroSection({ email }: IntroSectionProps) { - const intl = await getIntl() +export default function IntroSection({ email }: IntroSectionProps) { + const intl = useIntl() return (
diff --git a/components/HotelReservation/BookingConfirmation/StaySection/index.tsx b/components/HotelReservation/BookingConfirmation/StaySection/index.tsx index 99ecae8ca..7907ac191 100644 --- a/components/HotelReservation/BookingConfirmation/StaySection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/StaySection/index.tsx @@ -1,16 +1,17 @@ +import { useIntl } from "react-intl" + import { ArrowRightIcon, ScandicLogoIcon } from "@/components/Icons" import Image from "@/components/Image" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./staySection.module.css" import { StaySectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function StaySection({ hotel, stay }: StaySectionProps) { - const intl = await getIntl() +export default function StaySection({ hotel, stay }: StaySectionProps) { + const intl = useIntl() const nightsText = stay.nights > 1 diff --git a/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx b/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx index 509af9c52..16eb84330 100644 --- a/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx +++ b/components/HotelReservation/BookingConfirmation/SummarySection/index.tsx @@ -1,13 +1,14 @@ +import { useIntl } from "react-intl" + import Caption from "@/components/TempDesignSystem/Text/Caption" import Title from "@/components/TempDesignSystem/Text/Title" -import { getIntl } from "@/i18n" import styles from "./summarySection.module.css" import { SummarySectionProps } from "@/types/components/hotelReservation/bookingConfirmation/bookingConfirmation" -export default async function SummarySection({ summary }: SummarySectionProps) { - const intl = await getIntl() +export default function SummarySection({ summary }: SummarySectionProps) { + const intl = useIntl() const roomType = `${intl.formatMessage({ id: "Type of room" })}: ${summary.roomType}` const bedType = `${intl.formatMessage({ id: "Type of bed" })}: ${summary.bedType}` const breakfast = `${intl.formatMessage({ id: "Breakfast" })}: ${summary.breakfast}` diff --git a/components/HotelReservation/SelectRate/Payment/index.tsx b/components/HotelReservation/SelectRate/Payment/index.tsx index ed8068076..3ddf73c01 100644 --- a/components/HotelReservation/SelectRate/Payment/index.tsx +++ b/components/HotelReservation/SelectRate/Payment/index.tsx @@ -1,62 +1,161 @@ "use client" +import { useRouter } from "next/navigation" +import { useEffect, useState } from "react" +import { useIntl } from "react-intl" + +import { + BOOKING_CONFIRMATION_NUMBER, + BookingStatusEnum, +} from "@/constants/booking" import { trpc } from "@/lib/trpc/client" +import LoadingSpinner from "@/components/LoadingSpinner" import Button from "@/components/TempDesignSystem/Button" +import { toast } from "@/components/TempDesignSystem/Toasts" +import { useHandleBookingStatus } from "@/hooks/booking/useHandleBookingStatus" +import useLang from "@/hooks/useLang" + +import styles from "./payment.module.css" + +import { PaymentProps } from "@/types/components/hotelReservation/selectRate/section" + +const maxRetries = 40 +const retryInterval = 2000 + +export default function Payment({ hotel }: PaymentProps) { + const router = useRouter() + const lang = useLang() + const intl = useIntl() + const [confirmationNumber, setConfirmationNumber] = useState("") + const [selectedPaymentMethod, setSelectedPaymentMethod] = useState("") -export default function Payment() { const initiateBooking = trpc.booking.booking.create.useMutation({ onSuccess: (result) => { - // TODO: Handle success, poll for payment link and redirect the user to the payment - console.log("Res", result) + if (result?.confirmationNumber) { + // Planet doesn't support query params so we have to store values in session storage + sessionStorage.setItem( + BOOKING_CONFIRMATION_NUMBER, + result.confirmationNumber + ) + + setConfirmationNumber(result.confirmationNumber) + } else { + // TODO: add proper error message + toast.error("Failed to create booking") + } }, - onError: () => { - // TODO: Handle error - console.log("Error") + onError: (error) => { + console.error("Error", error) + // TODO: add proper error message + toast.error("Failed to create booking") }, }) - return ( - + packages: { + breakfast: true, + allergyFriendly: true, + petFriendly: true, + accessibility: true, + }, + smsConfirmationRequested: true, + }, + ], + payment: { + paymentMethod: selectedPaymentMethod, + cardHolder: { + email: "test.user@scandichotels.com", + name: "Test User", + phoneCountryCode: "", + phoneSubscriber: "", + }, + success: `api/web/payment-callback/${lang}/success`, + error: `api/web/payment-callback/${lang}/error`, + cancel: `api/web/payment-callback/${lang}/cancel`, + }, + }) + } + + if ( + initiateBooking.isPending || + (confirmationNumber && !bookingStatus.data?.paymentUrl) + ) { + return + } + + return ( +
+
+
+ + {hotel.merchantInformationData.alternatePaymentOptions.map( + (paymentOption) => ( + + ) + )} +
+
+ +
) } diff --git a/components/HotelReservation/SelectRate/Payment/payment.module.css b/components/HotelReservation/SelectRate/Payment/payment.module.css new file mode 100644 index 000000000..9200ce8f3 --- /dev/null +++ b/components/HotelReservation/SelectRate/Payment/payment.module.css @@ -0,0 +1,18 @@ +.paymentItemContainer { + max-width: 480px; + display: flex; + flex-direction: column; + gap: var(--Spacing-x1); + padding-bottom: var(--Spacing-x4); +} + +.paymentItem { + background-color: var(--Base-Background-Normal); + padding: var(--Spacing-x3); + border: 1px solid var(--Base-Border-Normal); + border-radius: var(--Corner-radius-Medium); + display: flex; + align-items: center; + gap: var(--Spacing-x2); + cursor: pointer; +} diff --git a/constants/booking.ts b/constants/booking.ts new file mode 100644 index 000000000..664240a79 --- /dev/null +++ b/constants/booking.ts @@ -0,0 +1,7 @@ +export enum BookingStatusEnum { + CreatedInOhip = "CreatedInOhip", + PaymentRegistered = "PaymentRegistered", + BookingCompleted = "BookingCompleted", +} + +export const BOOKING_CONFIRMATION_NUMBER = "bookingConfirmationNumber" diff --git a/constants/routes/hotelReservation.js b/constants/routes/hotelReservation.js index 72d298965..5fdb1b6b1 100644 --- a/constants/routes/hotelReservation.js +++ b/constants/routes/hotelReservation.js @@ -28,4 +28,24 @@ export const selectHotelMap = { de: `${selectHotel.de}/map`, } +/** @type {import('@/types/routes').LangRoute} */ +export const payment = { + en: `${hotelReservation.en}/payment`, + sv: `${hotelReservation.sv}/betalning`, + no: `${hotelReservation.no}/betaling`, + fi: `${hotelReservation.fi}/maksu`, + da: `${hotelReservation.da}/payment`, + de: `${hotelReservation.de}/bezahlung`, +} + +/** @type {import('@/types/routes').LangRoute} */ +export const bookingConfirmation = { + en: `${hotelReservation.en}/booking-confirmation`, + sv: `${hotelReservation.sv}/bokningsbekraftelse`, + no: `${hotelReservation.no}/booking-confirmation`, + fi: `${hotelReservation.fi}/varausvahvistus`, + da: `${hotelReservation.da}/booking-confirmation`, + de: `${hotelReservation.de}/buchungsbesttigung`, +} + export const bookingFlow = [...Object.values(hotelReservation)] diff --git a/hooks/booking/useHandleBookingStatus.ts b/hooks/booking/useHandleBookingStatus.ts new file mode 100644 index 000000000..5373057a8 --- /dev/null +++ b/hooks/booking/useHandleBookingStatus.ts @@ -0,0 +1,35 @@ +"use client" + +import { BookingStatusEnum } from "@/constants/booking" +import { trpc } from "@/lib/trpc/client" + +export function useHandleBookingStatus( + confirmationNumber: string | null, + expectedStatus: BookingStatusEnum, + maxRetries: number, + retryInterval: number +) { + const query = trpc.booking.status.useQuery( + { confirmationNumber: confirmationNumber ?? "" }, + { + enabled: !!confirmationNumber, + refetchInterval: (query) => { + if (query.state.error || query.state.dataUpdateCount >= maxRetries) { + return false + } + + if (query.state.data?.reservationStatus === expectedStatus) { + return false + } + + return retryInterval + }, + refetchIntervalInBackground: true, + refetchOnWindowFocus: false, + refetchOnMount: false, + retry: false, + } + ) + + return query +} diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index f19f18f62..39f49c9a8 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alle ændringer, du har foretaget, går tabt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på, at du vil fjerne kortet, der slutter me {lastFourDigits} fra din medlemsprofil?", "Arrival date": "Ankomstdato", + "as of today": "fra idag", "As our": "Som vores {level}", "As our Close Friend": "Som vores nære ven", "At latest": "Senest", @@ -23,14 +24,16 @@ "Bed type": "Seng type", "Book": "Book", "Book reward night": "Book bonusnat", - "Code / Voucher": "Bookingkoder / voucher", "Booking number": "Bookingnummer", + "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", "Breakfast": "Morgenmad", "Breakfast excluded": "Morgenmad ikke inkluderet", "Breakfast included": "Morgenmad inkluderet", "Bus terminal": "Busstation", "Business": "Forretning", + "by": "inden", "Cancel": "Afbestille", + "characters": "tegn", "Check in": "Check ind", "Check out": "Check ud", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tjek de kreditkort, der er gemt på din profil. Betal med et gemt kort, når du er logget ind for en mere jævn weboplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Luk menu", "Close my pages menu": "Luk mine sider menu", "Close the map": "Luk kortet", + "Code / Voucher": "Bookingkoder / voucher", "Coming up": "Er lige om hjørnet", "Compare all levels": "Sammenlign alle niveauer", + "Complete booking & go to payment": "Udfyld booking & gå til betaling", "Contact us": "Kontakt os", "Continue": "Blive ved", "Copyright all rights reserved": "Scandic AB Alle rettigheder forbeholdes", @@ -74,9 +79,9 @@ "Explore all levels and benefits": "Udforsk alle niveauer og fordele", "Explore nearby": "Udforsk i nærheden", "Extras to your booking": "Tillæg til din booking", - "FAQ": "Ofte stillede spørgsmål", "Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.", "Fair": "Messe", + "FAQ": "Ofte stillede spørgsmål", "Find booking": "Find booking", "Find hotels": "Find hotel", "Flexibility": "Fleksibilitet", @@ -87,17 +92,22 @@ "Get inspired": "Bliv inspireret", "Go back to edit": "Gå tilbage til redigering", "Go back to overview": "Gå tilbage til oversigten", + "Guests & Rooms": "Gæster & værelser", "Hi": "Hei", "Highest level": "Højeste niveau", "Hospital": "Hospital", "Hotel": "Hotel", "Hotel facilities": "Hotel faciliteter", "Hotel surroundings": "Hotel omgivelser", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se værelsesdetaljer", "Hotels": "Hoteller", "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det virker", "Image gallery": "Billedgalleri", "Join Scandic Friends": "Tilmeld dig Scandic Friends", + "km to city center": "km til byens centrum", "Language": "Sprog", "Latest searches": "Seneste søgninger", "Level": "Niveau", @@ -124,9 +134,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris fra", "Members": "Medlemmer", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-id", "Membership ID copied to clipboard": "Medlems-ID kopieret til udklipsholder", - "Membership cards": "Medlemskort", "Menu": "Menu", "Modify": "Ændre", "Month": "Måned", @@ -141,6 +151,9 @@ "Nearby companies": "Nærliggende virksomheder", "New password": "Nyt kodeord", "Next": "Næste", + "next level:": "Næste niveau:", + "night": "nat", + "nights": "nætter", "Nights needed to level up": "Nætter nødvendige for at komme i niveau", "No content published": "Intet indhold offentliggjort", "No matching location found": "Der blev ikke fundet nogen matchende placering", @@ -151,11 +164,13 @@ "Non-refundable": "Ikke-refunderbart", "Not found": "Ikke fundet", "Nr night, nr adult": "{nights, number} nat, {adults, number} voksen", + "number": "nummer", "On your journey": "På din rejse", "Open": "Åben", "Open language menu": "Åbn sprogmenuen", "Open menu": "Åbn menuen", "Open my pages menu": "Åbn mine sider menuen", + "or": "eller", "Overview": "Oversigt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garage", @@ -167,6 +182,7 @@ "Phone is required": "Telefonnummer er påkrævet", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Indtast venligst et gyldigt telefonnummer", + "points": "Point", "Points": "Point", "Points being calculated": "Point udregnes", "Points earned prior to May 1, 2021": "Point optjent inden 1. maj 2021", @@ -185,7 +201,6 @@ "Room & Terms": "Værelse & Vilkår", "Room facilities": "Værelsesfaciliteter", "Rooms": "Værelser", - "Guests & Rooms": "Gæster & værelser", "Save": "Gemme", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -210,25 +225,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Noget gik galt, og vi kunne ikke tilføje dit kort. Prøv venligst igen senere.", "Something went wrong and we couldn't remove your card. Please try again later.": "Noget gik galt, og vi kunne ikke fjerne dit kort. Prøv venligst igen senere.", "Something went wrong!": "Noget gik galt!", + "special character": "speciel karakter", + "spendable points expiring by": "{points} Brugbare point udløber den {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gade", "Successfully updated profile!": "Profilen er opdateret med succes!", "Summary": "Opsummering", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortæl os, hvilke oplysninger og opdateringer du gerne vil modtage, og hvordan, ved at klikke på linket nedenfor.", "Thank you": "Tak", "Theatre": "Teater", "There are no transactions to display": "Der er ingen transaktioner at vise", "Things nearby HOTEL_NAME": "Ting i nærheden af {hotelName}", + "to": "til", "Total Points": "Samlet antal point", "Tourist": "Turist", "Transaction date": "Overførselsdato", "Transactions": "Transaktioner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sengtype", "Type of room": "Værelsestype", + "uppercase letter": "stort bogstav", "Use bonus cheque": "Brug Bonus Cheque", "Use code/voucher": "Brug kode/voucher", "User information": "Brugeroplysninger", @@ -255,9 +274,9 @@ "You canceled adding a new credit card.": "Du har annulleret tilføjelsen af et nyt kreditkort.", "You have no previous stays.": "Du har ingen tidligere ophold.", "You have no upcoming stays.": "Du har ingen kommende ophold.", - "Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!", "Your card was successfully removed!": "Dit kort blev fjernet!", "Your card was successfully saved!": "Dit kort blev gemt!", + "Your Challenges Conquer & Earn!": "Dine udfordringer Overvind og tjen!", "Your current level": "Dit nuværende niveau", "Your details": "Dine oplysninger", "Your level": "Dit niveau", @@ -265,23 +284,5 @@ "Zip code": "Postnummer", "Zoo": "Zoo", "Zoom in": "Zoom ind", - "Zoom out": "Zoom ud", - "as of today": "pr. dags dato", - "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", - "by": "inden", - "characters": "tegn", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se værelsesdetaljer", - "km to city center": "km til byens centrum", - "next level:": "Næste niveau:", - "night": "nat", - "nights": "nætter", - "number": "nummer", - "or": "eller", - "points": "Point", - "special character": "speciel karakter", - "spendable points expiring by": "{points} Brugbare point udløber den {date}", - "to": "til", - "uppercase letter": "stort bogstav" + "Zoom out": "Zoom ud" } diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 296486732..9035612bc 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alle Änderungen, die Sie vorgenommen haben, gehen verloren.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Möchten Sie die Karte mit der Endung {lastFourDigits} wirklich aus Ihrem Mitgliedsprofil entfernen?", "Arrival date": "Ankunftsdatum", + "as of today": "Stand heute", "As our": "Als unser {level}", "As our Close Friend": "Als unser enger Freund", "At latest": "Spätestens", @@ -23,14 +24,16 @@ "Bed type": "Bettentyp", "Book": "Buchen", "Book reward night": "Bonusnacht buchen", - "Code / Voucher": "Buchungscodes / Gutscheine", "Booking number": "Buchungsnummer", + "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", "Breakfast": "Frühstück", "Breakfast excluded": "Frühstück nicht inbegriffen", "Breakfast included": "Frühstück inbegriffen", "Bus terminal": "Busbahnhof", "Business": "Geschäft", + "by": "bis", "Cancel": "Stornieren", + "characters": "figuren", "Check in": "Einchecken", "Check out": "Auschecken", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.", @@ -45,8 +48,10 @@ "Close menu": "Menü schließen", "Close my pages menu": "Meine Seiten Menü schließen", "Close the map": "Karte schließen", + "Code / Voucher": "Buchungscodes / Gutscheine", "Coming up": "Demnächst", "Compare all levels": "Vergleichen Sie alle Levels", + "Complete booking & go to payment": "Buchung abschließen & zur Bezahlung gehen", "Contact us": "Kontaktieren Sie uns", "Continue": "Weitermachen", "Copyright all rights reserved": "Scandic AB Alle Rechte vorbehalten", @@ -74,9 +79,9 @@ "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore nearby": "Erkunden Sie die Umgebung", "Extras to your booking": "Extras zu Ihrer Buchung", - "FAQ": "Häufig gestellte Fragen", "Failed to delete credit card, please try again later.": "Kreditkarte konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.", "Fair": "Messe", + "FAQ": "Häufig gestellte Fragen", "Find booking": "Buchung finden", "Find hotels": "Hotels finden", "Flexibility": "Flexibilität", @@ -87,17 +92,22 @@ "Get inspired": "Lassen Sie sich inspieren", "Go back to edit": "Zurück zum Bearbeiten", "Go back to overview": "Zurück zur Übersicht", + "Guests & Rooms": "Gäste & Zimmer", "Hi": "Hallo", "Highest level": "Höchstes Level", "Hospital": "Krankenhaus", "Hotel": "Hotel", "Hotel facilities": "Hotel-Infos", "Hotel surroundings": "Umgebung des Hotels", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personen", + "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", "Hotels": "Hotels", "How do you want to sleep?": "Wie möchtest du schlafen?", "How it works": "Wie es funktioniert", "Image gallery": "Bildergalerie", "Join Scandic Friends": "Treten Sie Scandic Friends bei", + "km to city center": "km bis zum Stadtzentrum", "Language": "Sprache", "Latest searches": "Letzte Suchanfragen", "Level": "Level", @@ -124,9 +134,9 @@ "Member price": "Mitgliederpreis", "Member price from": "Mitgliederpreis ab", "Members": "Mitglieder", + "Membership cards": "Mitgliedskarten", "Membership ID": "Mitglieds-ID", "Membership ID copied to clipboard": "Mitglieds-ID in die Zwischenablage kopiert", - "Membership cards": "Mitgliedskarten", "Menu": "Menu", "Modify": "Ändern", "Month": "Monat", @@ -141,6 +151,9 @@ "Nearby companies": "Nahe gelegene Unternehmen", "New password": "Neues Kennwort", "Next": "Nächste", + "next level:": "Nächstes Level:", + "night": "nacht", + "nights": "Nächte", "Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden", "No content published": "Kein Inhalt veröffentlicht", "No matching location found": "Kein passender Standort gefunden", @@ -151,11 +164,13 @@ "Non-refundable": "Nicht erstattungsfähig", "Not found": "Nicht gefunden", "Nr night, nr adult": "{nights, number} Nacht, {adults, number} Erwachsener", + "number": "nummer", "On your journey": "Auf deiner Reise", "Open": "Offen", "Open language menu": "Sprachmenü öffnen", "Open menu": "Menü öffnen", "Open my pages menu": "Meine Seiten Menü öffnen", + "or": "oder", "Overview": "Übersicht", "Parking": "Parken", "Parking / Garage": "Parken / Garage", @@ -166,6 +181,7 @@ "Phone is required": "Telefon ist erforderlich", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Bitte geben Sie eine gültige Telefonnummer ein", + "points": "Punkte", "Points": "Punkte", "Points being calculated": "Punkte werden berechnet", "Points earned prior to May 1, 2021": "Zusammengeführte Punkte vor dem 1. Mai 2021", @@ -184,7 +200,6 @@ "Room & Terms": "Zimmer & Bedingungen", "Room facilities": "Zimmerausstattung", "Rooms": "Räume", - "Guests & Rooms": "Gäste & Zimmer", "Save": "Speichern", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -209,25 +224,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht hinzufügen. Bitte versuchen Sie es später erneut.", "Something went wrong and we couldn't remove your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht entfernen. Bitte versuchen Sie es später noch einmal.", "Something went wrong!": "Etwas ist schief gelaufen!", + "special character": "sonderzeichen", + "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", "Sports": "Sport", "Standard price": "Standardpreis", "Street": "Straße", "Successfully updated profile!": "Profil erfolgreich aktualisiert!", "Summary": "Zusammenfassung", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Teilen Sie uns mit, welche Informationen und Updates Sie wie erhalten möchten, indem Sie auf den unten stehenden Link klicken.", "Thank you": "Danke", "Theatre": "Theater", "There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden", "Things nearby HOTEL_NAME": "Dinge in der Nähe von {hotelName}", + "to": "zu", "Total Points": "Gesamtpunktzahl", "Tourist": "Tourist", "Transaction date": "Transaktionsdatum", "Transactions": "Transaktionen", "Transportations": "Transportmittel", "Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Bettentyp", "Type of room": "Zimmerart", + "uppercase letter": "großbuchstabe", "Use bonus cheque": "Bonusscheck nutzen", "Use code/voucher": "Code/Gutschein nutzen", "User information": "Nutzerinformation", @@ -254,9 +273,9 @@ "You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.", "You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.", "You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.", - "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!", "Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!", + "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your current level": "Ihr aktuelles Level", "Your details": "Ihre Angaben", "Your level": "Dein level", @@ -264,23 +283,5 @@ "Zip code": "PLZ", "Zoo": "Zoo", "Zoom in": "Vergrößern", - "Zoom out": "Verkleinern", - "as of today": "Stand heute", - "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", - "by": "bis", - "characters": "figuren", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personen", - "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", - "km to city center": "km bis zum Stadtzentrum", - "next level:": "Nächstes Level:", - "night": "nacht", - "nights": "Nächte", - "number": "nummer", - "or": "oder", - "points": "Punkte", - "special character": "sonderzeichen", - "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", - "to": "zu", - "uppercase letter": "großbuchstabe" + "Zoom out": "Verkleinern" } diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index f044f990e..d5f7e010c 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Any changes you've made will be lost.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?", "Arrival date": "Arrival date", + "as of today": "as of today", "As our": "As our {level}", "As our Close Friend": "As our Close Friend", "At latest": "At latest", @@ -23,14 +24,18 @@ "Bed type": "Bed type", "Book": "Book", "Book reward night": "Book reward night", - "Code / Voucher": "Code / Voucher", "Booking number": "Booking number", + "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", + "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", + "booking.rooms": "{totalRooms, plural, one {# room} other {# rooms}}", "Breakfast": "Breakfast", "Breakfast excluded": "Breakfast excluded", "Breakfast included": "Breakfast included", "Bus terminal": "Bus terminal", "Business": "Business", + "by": "by", "Cancel": "Cancel", + "characters": "characters", "Check in": "Check in", "Check out": "Check out", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.", @@ -45,8 +50,10 @@ "Close menu": "Close menu", "Close my pages menu": "Close my pages menu", "Close the map": "Close the map", + "Code / Voucher": "Code / Voucher", "Coming up": "Coming up", "Compare all levels": "Compare all levels", + "Complete booking & go to payment": "Complete booking & go to payment", "Contact us": "Contact us", "Continue": "Continue", "Copyright all rights reserved": "Scandic AB All rights reserved", @@ -59,6 +66,7 @@ "Date of Birth": "Date of Birth", "Day": "Day", "Description": "Description", + "Destination": "Destination", "Destinations & hotels": "Destinations & hotels", "Destination": "Destination", "Disabled booking options header": "We're sorry", @@ -75,9 +83,9 @@ "Explore all levels and benefits": "Explore all levels and benefits", "Explore nearby": "Explore nearby", "Extras to your booking": "Extras to your booking", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Failed to delete credit card, please try again later.", "Fair": "Fair", + "FAQ": "FAQ", "Find booking": "Find booking", "Find hotels": "Find hotels", "Flexibility": "Flexibility", @@ -88,17 +96,22 @@ "Get inspired": "Get inspired", "Go back to edit": "Go back to edit", "Go back to overview": "Go back to overview", + "Guests & Rooms": "Guests & Rooms", "Hi": "Hi", "Highest level": "Highest level", "Hospital": "Hospital", "Hotel": "Hotel", "Hotel facilities": "Hotel facilities", "Hotel surroundings": "Hotel surroundings", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "persons", + "hotelPages.rooms.roomCard.seeRoomDetails": "See room details", "Hotels": "Hotels", "How do you want to sleep?": "How do you want to sleep?", "How it works": "How it works", "Image gallery": "Image gallery", "Join Scandic Friends": "Join Scandic Friends", + "km to city center": "km to city center", "Language": "Language", "Latest searches": "Latest searches", "Level": "Level", @@ -125,9 +138,9 @@ "Member price": "Member price", "Member price from": "Member price from", "Members": "Members", + "Membership cards": "Membership cards", "Membership ID": "Membership ID", "Membership ID copied to clipboard": "Membership ID copied to clipboard", - "Membership cards": "Membership cards", "Menu": "Menu", "Modify": "Modify", "Month": "Month", @@ -142,6 +155,9 @@ "Nearby companies": "Nearby companies", "New password": "New password", "Next": "Next", + "next level:": "next level:", + "night": "night", + "nights": "nights", "Nights needed to level up": "Nights needed to level up", "No content published": "No content published", "No matching location found": "No matching location found", @@ -152,11 +168,13 @@ "Non-refundable": "Non-refundable", "Not found": "Not found", "Nr night, nr adult": "{nights, number} night, {adults, number} adult", + "number": "number", "On your journey": "On your journey", "Open": "Open", "Open language menu": "Open language menu", "Open menu": "Open menu", "Open my pages menu": "Open my pages menu", + "or": "or", "Overview": "Overview", "Parking": "Parking", "Parking / Garage": "Parking / Garage", @@ -168,6 +186,7 @@ "Phone is required": "Phone is required", "Phone number": "Phone number", "Please enter a valid phone number": "Please enter a valid phone number", + "points": "Points", "Points": "Points", "Points being calculated": "Points being calculated", "Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021", @@ -186,12 +205,11 @@ "Room & Terms": "Room & Terms", "Room facilities": "Room facilities", "Rooms": "Rooms", - "Guests & Rooms": "Guests & Rooms", "Save": "Save", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", - "See all photos": "See all photos", "Search": "Search", + "See all photos": "See all photos", "See hotel details": "See hotel details", "See room details": "See room details", "See rooms": "See rooms", @@ -212,25 +230,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Something went wrong and we couldn't add your card. Please try again later.", "Something went wrong and we couldn't remove your card. Please try again later.": "Something went wrong and we couldn't remove your card. Please try again later.", "Something went wrong!": "Something went wrong!", + "special character": "special character", + "spendable points expiring by": "{points} spendable points expiring by {date}", "Sports": "Sports", "Standard price": "Standard price", "Street": "Street", "Successfully updated profile!": "Successfully updated profile!", "Summary": "Summary", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Tell us what information and updates you'd like to receive, and how, by clicking the link below.", "Thank you": "Thank you", "Theatre": "Theatre", "There are no transactions to display": "There are no transactions to display", "Things nearby HOTEL_NAME": "Things nearby {hotelName}", + "to": "to", "Total Points": "Total Points", "Tourist": "Tourist", "Transaction date": "Transaction date", "Transactions": "Transactions", "Transportations": "Transportations", "Tripadvisor reviews": "{rating} ({count} reviews on Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Type of bed", "Type of room": "Type of room", + "uppercase letter": "uppercase letter", "Use bonus cheque": "Use bonus cheque", "Use code/voucher": "Use code/voucher", "User information": "User information", @@ -257,9 +279,9 @@ "You canceled adding a new credit card.": "You canceled adding a new credit card.", "You have no previous stays.": "You have no previous stays.", "You have no upcoming stays.": "You have no upcoming stays.", - "Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!", "Your card was successfully removed!": "Your card was successfully removed!", "Your card was successfully saved!": "Your card was successfully saved!", + "Your Challenges Conquer & Earn!": "Your Challenges Conquer & Earn!", "Your current level": "Your current level", "Your details": "Your details", "Your level": "Your level", @@ -267,25 +289,5 @@ "Zip code": "Zip code", "Zoo": "Zoo", "Zoom in": "Zoom in", - "Zoom out": "Zoom out", - "as of today": "as of today", - "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", - "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", - "booking.rooms": "{totalRooms, plural, one {# room} other {# rooms}}", - "by": "by", - "characters": "characters", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "persons", - "hotelPages.rooms.roomCard.seeRoomDetails": "See room details", - "km to city center": "km to city center", - "next level:": "next level:", - "night": "night", - "nights": "nights", - "number": "number", - "or": "or", - "points": "Points", - "special character": "special character", - "spendable points expiring by": "{points} spendable points expiring by {date}", - "to": "to", - "uppercase letter": "uppercase letter" + "Zoom out": "Zoom out" } diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 1aa5165b7..25b04ef90 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Kaikki tekemäsi muutokset menetetään.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Haluatko varmasti poistaa kortin, joka päättyy numeroon {lastFourDigits} jäsenprofiilistasi?", "Arrival date": "Saapumispäivä", + "as of today": "tänään", "As our": "{level}-etu", "As our Close Friend": "Läheisenä ystävänämme", "At latest": "Viimeistään", @@ -24,12 +25,15 @@ "Book": "Varaa", "Book reward night": "Kirjapalkinto-ilta", "Booking number": "Varausnumero", + "booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}", "Breakfast": "Aamiainen", "Breakfast excluded": "Aamiainen ei sisälly", "Breakfast included": "Aamiainen sisältyy", "Bus terminal": "Bussiasema", "Business": "Business", + "by": "mennessä", "Cancel": "Peruuttaa", + "characters": "hahmoja", "Check in": "Sisäänkirjautuminen", "Check out": "Uloskirjautuminen", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tarkista profiiliisi tallennetut luottokortit. Maksa tallennetulla kortilla kirjautuneena, jotta verkkokokemus on sujuvampi.", @@ -47,6 +51,7 @@ "Code / Voucher": "Varauskoodit / kupongit", "Coming up": "Tulossa", "Compare all levels": "Vertaa kaikkia tasoja", + "Complete booking & go to payment": "Täydennä varaus & siirry maksamaan", "Contact us": "Ota meihin yhteyttä", "Continue": "Jatkaa", "Copyright all rights reserved": "Scandic AB Kaikki oikeudet pidätetään", @@ -74,9 +79,9 @@ "Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin", "Explore nearby": "Tutustu lähialueeseen", "Extras to your booking": "Varauksessa lisäpalveluita", - "FAQ": "UKK", "Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.", "Fair": "Messukeskus", + "FAQ": "UKK", "Find booking": "Etsi varaus", "Find hotels": "Etsi hotelleja", "Flexibility": "Joustavuus", @@ -94,11 +99,15 @@ "Hotel": "Hotelli", "Hotel facilities": "Hotellin palvelut", "Hotel surroundings": "Hotellin ympäristö", + "hotelPages.rooms.roomCard.person": "henkilö", + "hotelPages.rooms.roomCard.persons": "Henkilöä", + "hotelPages.rooms.roomCard.seeRoomDetails": "Katso huoneen tiedot", "Hotels": "Hotellit", "How do you want to sleep?": "Kuinka haluat nukkua?", "How it works": "Kuinka se toimii", "Image gallery": "Kuvagalleria", "Join Scandic Friends": "Liity jäseneksi", + "km to city center": "km keskustaan", "Language": "Kieli", "Latest searches": "Viimeisimmät haut", "Level": "Level", @@ -125,9 +134,9 @@ "Member price": "Jäsenhinta", "Member price from": "Jäsenhinta alkaen", "Members": "Jäsenet", + "Membership cards": "Jäsenkortit", "Membership ID": "Jäsentunnus", "Membership ID copied to clipboard": "Jäsenyystunnus kopioitu leikepöydälle", - "Membership cards": "Jäsenkortit", "Menu": "Valikko", "Modify": "Muokkaa", "Month": "Kuukausi", @@ -142,6 +151,9 @@ "Nearby companies": "Läheiset yritykset", "New password": "Uusi salasana", "Next": "Seuraava", + "next level:": "pistettä tasolle:", + "night": "yö", + "nights": "yötä", "Nights needed to level up": "Yöt, joita tarvitaan tasolle", "No content published": "Ei julkaistua sisältöä", "No matching location found": "Vastaavaa sijaintia ei löytynyt", @@ -152,11 +164,13 @@ "Non-refundable": "Ei palautettavissa", "Not found": "Ei löydetty", "Nr night, nr adult": "{nights, number} yö, {adults, number} aikuinen", + "number": "määrä", "On your journey": "Matkallasi", "Open": "Avata", "Open language menu": "Avaa kielivalikko", "Open menu": "Avaa valikko", "Open my pages menu": "Avaa omat sivut -valikko", + "or": "tai", "Overview": "Yleiskatsaus", "Parking": "Pysäköinti", "Parking / Garage": "Pysäköinti / Autotalli", @@ -168,6 +182,7 @@ "Phone is required": "Puhelin vaaditaan", "Phone number": "Puhelinnumero", "Please enter a valid phone number": "Ole hyvä ja näppäile voimassaoleva puhelinnumero", + "points": "pistettä", "Points": "Pisteet", "Points being calculated": "Pisteitä lasketaan", "Points earned prior to May 1, 2021": "Pisteet, jotka ansaittu ennen 1.5.2021", @@ -210,25 +225,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Jotain meni pieleen, emmekä voineet lisätä korttiasi. Yritä myöhemmin uudelleen.", "Something went wrong and we couldn't remove your card. Please try again later.": "Jotain meni pieleen, emmekä voineet poistaa korttiasi. Yritä myöhemmin uudelleen.", "Something went wrong!": "Jotain meni pieleen!", + "special character": "erikoishahmo", + "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", "Sports": "Urheilu", "Standard price": "Normaali hinta", "Street": "Katu", "Successfully updated profile!": "Profiilin päivitys onnistui!", "Summary": "Yhteenveto", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Kerro meille, mitä tietoja ja päivityksiä haluat saada ja miten, napsauttamalla alla olevaa linkkiä.", "Thank you": "Kiitos", "Theatre": "Teatteri", "There are no transactions to display": "Näytettäviä tapahtumia ei ole", "Things nearby HOTEL_NAME": "Lähellä olevia asioita {hotelName}", + "to": "to", "Total Points": "Kokonaispisteet", "Tourist": "Turisti", "Transaction date": "Tapahtuman päivämäärä", "Transactions": "Tapahtumat", "Transportations": "Kuljetukset", "Tripadvisor reviews": "{rating} ({count} arvostelua TripAdvisorissa)", + "TUI Points": "TUI Points", "Type of bed": "Vuodetyyppi", "Type of room": "Huonetyyppi", + "uppercase letter": "iso kirjain", "Use bonus cheque": "Käytä bonussekkiä", "Use code/voucher": "Käytä koodia/voucheria", "User information": "Käyttäjän tiedot", @@ -255,9 +274,9 @@ "You canceled adding a new credit card.": "Peruutit uuden luottokortin lisäämisen.", "You have no previous stays.": "Sinulla ei ole aiempia majoituksia.", "You have no upcoming stays.": "Sinulla ei ole tulevia majoituksia.", - "Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!", "Your card was successfully removed!": "Korttisi poistettiin onnistuneesti!", "Your card was successfully saved!": "Korttisi tallennettu onnistuneesti!", + "Your Challenges Conquer & Earn!": "Voita ja ansaitse haasteesi!", "Your current level": "Nykyinen tasosi", "Your details": "Tietosi", "Your level": "Tasosi", @@ -265,23 +284,5 @@ "Zip code": "Postinumero", "Zoo": "Eläintarha", "Zoom in": "Lähennä", - "Zoom out": "Loitonna", - "as of today": "tänään", - "booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}", - "by": "mennessä", - "characters": "hahmoja", - "hotelPages.rooms.roomCard.person": "henkilö", - "hotelPages.rooms.roomCard.persons": "Henkilöä", - "hotelPages.rooms.roomCard.seeRoomDetails": "Katso huoneen tiedot", - "km to city center": "km keskustaan", - "next level:": "pistettä tasolle:", - "night": "yö", - "nights": "yötä", - "number": "määrä", - "or": "tai", - "points": "pistettä", - "special character": "erikoishahmo", - "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", - "to": "to", - "uppercase letter": "iso kirjain" + "Zoom out": "Loitonna" } diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 304920b27..efb73b3d1 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Eventuelle endringer du har gjort, går tapt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på at du vil fjerne kortet som slutter på {lastFourDigits} fra medlemsprofilen din?", "Arrival date": "Ankomstdato", + "as of today": "per idag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nære venn", "At latest": "Senest", @@ -23,14 +24,16 @@ "Bed type": "Seng type", "Book": "Bestill", "Book reward night": "Bestill belønningskveld", - "Code / Voucher": "Bestillingskoder / kuponger", "Booking number": "Bestillingsnummer", + "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", "Breakfast": "Frokost", "Breakfast excluded": "Frokost ekskludert", "Breakfast included": "Frokost inkludert", "Bus terminal": "Bussterminal", "Business": "Forretnings", + "by": "innen", "Cancel": "Avbryt", + "characters": "tegn", "Check in": "Sjekk inn", "Check out": "Sjekk ut", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sjekk ut kredittkortene som er lagret på profilen din. Betal med et lagret kort når du er pålogget for en jevnere nettopplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Lukk meny", "Close my pages menu": "Lukk mine sidermenyn", "Close the map": "Lukk kartet", + "Code / Voucher": "Bestillingskoder / kuponger", "Coming up": "Kommer opp", "Compare all levels": "Sammenlign alle nivåer", + "Complete booking & go to payment": "Fullfør bestilling & gå til betaling", "Contact us": "Kontakt oss", "Continue": "Fortsette", "Copyright all rights reserved": "Scandic AB Alle rettigheter forbeholdt", @@ -74,9 +79,9 @@ "Explore all levels and benefits": "Utforsk alle nivåer og fordeler", "Explore nearby": "Utforsk i nærheten", "Extras to your booking": "Tilvalg til bestillingen din", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.", "Fair": "Messe", + "FAQ": "FAQ", "Find booking": "Finn booking", "Find hotels": "Finn hotell", "Flexibility": "Fleksibilitet", @@ -87,17 +92,22 @@ "Get inspired": "Bli inspirert", "Go back to edit": "Gå tilbake til redigering", "Go back to overview": "Gå tilbake til oversikten", + "Guests & Rooms": "Gjester & rom", "Hi": "Hei", "Highest level": "Høyeste nivå", "Hospital": "Sykehus", "Hotel": "Hotel", "Hotel facilities": "Hotelfaciliteter", "Hotel surroundings": "Hotellomgivelser", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se detaljer om rommet", "Hotels": "Hoteller", "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det fungerer", "Image gallery": "Bildegalleri", "Join Scandic Friends": "Bli med i Scandic Friends", + "km to city center": "km til sentrum", "Language": "Språk", "Latest searches": "Siste søk", "Level": "Nivå", @@ -124,9 +134,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris fra", "Members": "Medlemmer", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-ID", "Membership ID copied to clipboard": "Medlems-ID kopiert til utklippstavlen", - "Membership cards": "Medlemskort", "Menu": "Menu", "Modify": "Endre", "Month": "Måned", @@ -141,6 +151,9 @@ "Nearby companies": "Nærliggende selskaper", "New password": "Nytt passord", "Next": "Neste", + "next level:": "Neste nivå:", + "night": "natt", + "nights": "netter", "Nights needed to level up": "Netter som trengs for å komme opp i nivå", "No content published": "Ingen innhold publisert", "No matching location found": "Fant ingen samsvarende plassering", @@ -151,11 +164,13 @@ "Non-refundable": "Ikke-refunderbart", "Not found": "Ikke funnet", "Nr night, nr adult": "{nights, number} natt, {adults, number} voksen", + "number": "antall", "On your journey": "På reisen din", "Open": "Åpen", "Open language menu": "Åpne språkmenyen", "Open menu": "Åpne menyen", "Open my pages menu": "Åpne mine sider menyen", + "or": "eller", "Overview": "Oversikt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garasje", @@ -167,6 +182,7 @@ "Phone is required": "Telefon kreves", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Vennligst oppgi et gyldig telefonnummer", + "points": "poeng", "Points": "Poeng", "Points being calculated": "Poeng beregnes", "Points earned prior to May 1, 2021": "Opptjente poeng før 1. mai 2021", @@ -185,7 +201,6 @@ "Room & Terms": "Rom & Vilkår", "Room facilities": "Romfasiliteter", "Rooms": "Rom", - "Guests & Rooms": "Gjester & rom", "Save": "Lagre", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -210,25 +225,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Noe gikk galt, og vi kunne ikke legge til kortet ditt. Prøv igjen senere.", "Something went wrong and we couldn't remove your card. Please try again later.": "Noe gikk galt, og vi kunne ikke fjerne kortet ditt. Vennligst prøv igjen senere.", "Something went wrong!": "Noe gikk galt!", + "special character": "spesiell karakter", + "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gate", "Successfully updated profile!": "Vellykket oppdatert profil!", "Summary": "Sammendrag", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Fortell oss hvilken informasjon og hvilke oppdateringer du ønsker å motta, og hvordan, ved å klikke på lenken nedenfor.", "Thank you": "Takk", "Theatre": "Teater", "There are no transactions to display": "Det er ingen transaksjoner å vise", "Things nearby HOTEL_NAME": "Ting i nærheten av {hotelName}", + "to": "til", "Total Points": "Totale poeng", "Tourist": "Turist", "Transaction date": "Transaksjonsdato", "Transactions": "Transaksjoner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} anmeldelser på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sengtype", "Type of room": "Romtype", + "uppercase letter": "stor bokstav", "Use bonus cheque": "Bruk bonussjekk", "Use code/voucher": "Bruk kode/voucher", "User information": "Brukerinformasjon", @@ -255,9 +274,9 @@ "You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.", "You have no previous stays.": "Du har ingen tidligere opphold.", "You have no upcoming stays.": "Du har ingen kommende opphold.", - "Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!", "Your card was successfully removed!": "Kortet ditt ble fjernet!", "Your card was successfully saved!": "Kortet ditt ble lagret!", + "Your Challenges Conquer & Earn!": "Dine utfordringer Erobre og tjen!", "Your current level": "Ditt nåværende nivå", "Your details": "Dine detaljer", "Your level": "Ditt nivå", @@ -265,23 +284,5 @@ "Zip code": "Post kode", "Zoo": "Dyrehage", "Zoom in": "Zoom inn", - "Zoom out": "Zoom ut", - "as of today": "per i dag", - "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", - "by": "innen", - "characters": "tegn", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se detaljer om rommet", - "km to city center": "km til sentrum", - "next level:": "Neste nivå:", - "night": "natt", - "nights": "netter", - "number": "antall", - "or": "eller", - "points": "poeng", - "special character": "spesiell karakter", - "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", - "to": "til", - "uppercase letter": "stor bokstav" + "Zoom out": "Zoom ut" } diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index bb99789bb..266ecdcfb 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -14,6 +14,7 @@ "Any changes you've made will be lost.": "Alla ändringar du har gjort kommer att gå förlorade.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Är du säker på att du vill ta bort kortet som slutar med {lastFourDigits} från din medlemsprofil?", "Arrival date": "Ankomstdatum", + "as of today": "från och med idag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nära vän", "At latest": "Senast", @@ -23,14 +24,16 @@ "Bed type": "Sängtyp", "Book": "Boka", "Book reward night": "Boka frinatt", - "Code / Voucher": "Bokningskoder / kuponger", "Booking number": "Bokningsnummer", + "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", "Breakfast": "Frukost", "Breakfast excluded": "Frukost ingår ej", "Breakfast included": "Frukost ingår", "Bus terminal": "Bussterminal", "Business": "Business", + "by": "innan", "Cancel": "Avbryt", + "characters": "tecken", "Check in": "Checka in", "Check out": "Checka ut", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Kolla in kreditkorten som sparats i din profil. Betala med ett sparat kort när du är inloggad för en smidigare webbupplevelse.", @@ -45,8 +48,10 @@ "Close menu": "Stäng menyn", "Close my pages menu": "Stäng mina sidor menyn", "Close the map": "Stäng kartan", + "Code / Voucher": "Bokningskoder / kuponger", "Coming up": "Kommer härnäst", "Compare all levels": "Jämför alla nivåer", + "Complete booking & go to payment": "Fullför bokning & gå till betalning", "Contact us": "Kontakta oss", "Continue": "Fortsätt", "Copyright all rights reserved": "Scandic AB Alla rättigheter förbehålls", @@ -74,9 +79,9 @@ "Explore all levels and benefits": "Utforska alla nivåer och fördelar", "Explore nearby": "Utforska i närheten", "Extras to your booking": "Extra tillval till din bokning", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.", "Fair": "Mässa", + "FAQ": "FAQ", "Find booking": "Hitta bokning", "Find hotels": "Hitta hotell", "Flexibility": "Flexibilitet", @@ -87,17 +92,22 @@ "Get inspired": "Bli inspirerad", "Go back to edit": "Gå tillbaka till redigeringen", "Go back to overview": "Gå tillbaka till översikten", + "Guests & Rooms": "Gäster & rum", "Hi": "Hej", "Highest level": "Högsta nivå", "Hospital": "Sjukhus", "Hotel": "Hotell", "Hotel facilities": "Hotellfaciliteter", "Hotel surroundings": "Hotellomgivning", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personer", + "hotelPages.rooms.roomCard.seeRoomDetails": "Se information om rummet", "Hotels": "Hotell", "How do you want to sleep?": "Hur vill du sova?", "How it works": "Hur det fungerar", "Image gallery": "Bildgalleri", "Join Scandic Friends": "Gå med i Scandic Friends", + "km to city center": "km till stadens centrum", "Language": "Språk", "Latest searches": "Senaste sökningarna", "Level": "Nivå", @@ -124,9 +134,9 @@ "Member price": "Medlemspris", "Member price from": "Medlemspris från", "Members": "Medlemmar", + "Membership cards": "Medlemskort", "Membership ID": "Medlems-ID", "Membership ID copied to clipboard": "Medlems-ID kopierat till urklipp", - "Membership cards": "Medlemskort", "Menu": "Meny", "Modify": "Ändra", "Month": "Månad", @@ -141,6 +151,9 @@ "Nearby companies": "Närliggande företag", "New password": "Nytt lösenord", "Next": "Nästa", + "next level:": "Nästa nivå:", + "night": "natt", + "nights": "nätter", "Nights needed to level up": "Nätter som behövs för att gå upp i nivå", "No content published": "Inget innehåll publicerat", "No matching location found": "Ingen matchande plats hittades", @@ -151,11 +164,13 @@ "Non-refundable": "Ej återbetalningsbar", "Not found": "Hittades inte", "Nr night, nr adult": "{nights, number} natt, {adults, number} vuxen", + "number": "nummer", "On your journey": "På din resa", "Open": "Öppna", "Open language menu": "Öppna språkmenyn", "Open menu": "Öppna menyn", "Open my pages menu": "Öppna mina sidor menyn", + "or": "eller", "Overview": "Översikt", "Parking": "Parkering", "Parking / Garage": "Parkering / Garage", @@ -167,6 +182,7 @@ "Phone is required": "Telefonnummer är obligatorisk", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Var vänlig och ange ett giltigt telefonnummer", + "points": "poäng", "Points": "Poäng", "Points being calculated": "Poäng beräknas", "Points earned prior to May 1, 2021": "Intjänade poäng före den 1 maj 2021", @@ -185,7 +201,6 @@ "Room & Terms": "Rum & Villkor", "Room facilities": "Rumfaciliteter", "Rooms": "Rum", - "Guests & Rooms": "Gäster & rum", "Save": "Spara", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -210,25 +225,29 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Något gick fel och vi kunde inte lägga till ditt kort. Försök igen senare.", "Something went wrong and we couldn't remove your card. Please try again later.": "Något gick fel och vi kunde inte ta bort ditt kort. Försök igen senare.", "Something went wrong!": "Något gick fel!", + "special character": "speciell karaktär", + "spendable points expiring by": "{points} poäng förfaller {date}", "Sports": "Sport", "Standard price": "Standardpris", "Street": "Gata", "Successfully updated profile!": "Profilen har uppdaterats framgångsrikt!", "Summary": "Sammanfattning", - "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Berätta för oss vilken information och vilka uppdateringar du vill få och hur genom att klicka på länken nedan.", "Thank you": "Tack", "Theatre": "Teater", "There are no transactions to display": "Det finns inga transaktioner att visa", "Things nearby HOTEL_NAME": "Saker i närheten av {hotelName}", + "to": "till", "Total Points": "Poäng totalt", "Tourist": "Turist", "Transaction date": "Transaktionsdatum", "Transactions": "Transaktioner", "Transportations": "Transport", "Tripadvisor reviews": "{rating} ({count} recensioner på Tripadvisor)", + "TUI Points": "TUI Points", "Type of bed": "Sängtyp", "Type of room": "Rumstyp", + "uppercase letter": "stor bokstav", "Use bonus cheque": "Använd bonuscheck", "Use code/voucher": "Använd kod/voucher", "User information": "Användarinformation", @@ -255,9 +274,9 @@ "You canceled adding a new credit card.": "Du avbröt att lägga till ett nytt kreditkort.", "You have no previous stays.": "Du har inga tidigare vistelser.", "You have no upcoming stays.": "Du har inga planerade resor.", - "Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!", "Your card was successfully removed!": "Ditt kort har tagits bort!", "Your card was successfully saved!": "Ditt kort har sparats!", + "Your Challenges Conquer & Earn!": "Dina utmaningar Erövra och tjäna!", "Your current level": "Din nuvarande nivå", "Your details": "Dina uppgifter", "Your level": "Din nivå", @@ -265,23 +284,5 @@ "Zip code": "Postnummer", "Zoo": "Djurpark", "Zoom in": "Zooma in", - "Zoom out": "Zooma ut", - "as of today": "per idag", - "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", - "by": "innan", - "characters": "tecken", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personer", - "hotelPages.rooms.roomCard.seeRoomDetails": "Se information om rummet", - "km to city center": "km till stadens centrum", - "next level:": "Nästa nivå:", - "night": "natt", - "nights": "nätter", - "number": "nummer", - "or": "eller", - "points": "poäng", - "special character": "speciell karaktär", - "spendable points expiring by": "{points} poäng förfaller {date}", - "to": "till", - "uppercase letter": "stor bokstav" + "Zoom out": "Zooma ut" } diff --git a/server/routers/booking/index.ts b/server/routers/booking/index.ts index 65b968733..f3c0b45ad 100644 --- a/server/routers/booking/index.ts +++ b/server/routers/booking/index.ts @@ -1,5 +1,9 @@ import { mergeRouters } from "@/server/trpc" import { bookingMutationRouter } from "./mutation" +import { bookingQueryRouter } from "./query" -export const bookingRouter = mergeRouters(bookingMutationRouter) +export const bookingRouter = mergeRouters( + bookingMutationRouter, + bookingQueryRouter +) diff --git a/server/routers/booking/input.ts b/server/routers/booking/input.ts index 46a88110e..7e9b9b2c8 100644 --- a/server/routers/booking/input.ts +++ b/server/routers/booking/input.ts @@ -1,38 +1,68 @@ import { z } from "zod" -// Query +const roomsSchema = z.array( + z.object({ + adults: z.number().int().nonnegative(), + childrenAges: z + .array( + z.object({ + age: z.number().int().nonnegative(), + bedType: z.string(), + }) + ) + .default([]), + rateCode: z.string(), + roomTypeCode: z.string(), + guest: z.object({ + title: z.string(), + firstName: z.string(), + lastName: z.string(), + email: z.string().email(), + phoneCountryCodePrefix: z.string(), + phoneNumber: z.string(), + countryCode: z.string(), + membershipNumber: z.string().optional(), + }), + smsConfirmationRequested: z.boolean(), + packages: z.object({ + breakfast: z.boolean(), + allergyFriendly: z.boolean(), + petFriendly: z.boolean(), + accessibility: z.boolean(), + }), + }) +) + +const paymentSchema = z.object({ + paymentMethod: z.string(), + card: z + .object({ + alias: z.string(), + expiryDate: z.string(), + cardType: z.string(), + }) + .optional(), + cardHolder: z.object({ + email: z.string().email(), + name: z.string(), + phoneCountryCode: z.string(), + phoneSubscriber: z.string(), + }), + success: z.string(), + error: z.string(), + cancel: z.string(), +}) + // Mutation export const createBookingInput = z.object({ hotelId: z.string(), checkInDate: z.string(), checkOutDate: z.string(), - rooms: z.array( - z.object({ - adults: z.number().int().nonnegative(), - children: z.number().int().nonnegative(), - rateCode: z.string(), - roomTypeCode: z.string(), - guest: z.object({ - title: z.string(), - firstName: z.string(), - lastName: z.string(), - email: z.string().email(), - phoneCountryCodePrefix: z.string(), - phoneNumber: z.string(), - countryCode: z.string(), - }), - smsConfirmationRequested: z.boolean(), - }) - ), - payment: z.object({ - cardHolder: z.object({ - Email: z.string().email(), - Name: z.string(), - PhoneCountryCode: z.string(), - PhoneSubscriber: z.string(), - }), - success: z.string(), - error: z.string(), - cancel: z.string(), - }), + rooms: roomsSchema, + payment: paymentSchema, +}) + +// Query +export const getBookingStatusInput = z.object({ + confirmationNumber: z.string(), }) diff --git a/server/routers/booking/mutation.ts b/server/routers/booking/mutation.ts index 2b35f56d4..53595b2d0 100644 --- a/server/routers/booking/mutation.ts +++ b/server/routers/booking/mutation.ts @@ -2,7 +2,7 @@ import { metrics } from "@opentelemetry/api" import * as api from "@/lib/api" import { getVerifiedUser } from "@/server/routers/user/query" -import { router, safeProtectedProcedure } from "@/server/trpc" +import { bookingServiceProcedure, router } from "@/server/trpc" import { getMembership } from "@/utils/user" @@ -36,13 +36,15 @@ async function getMembershipNumber( export const bookingMutationRouter = router({ booking: router({ - create: safeProtectedProcedure + create: bookingServiceProcedure .input(createBookingInput) .mutation(async function ({ ctx, input }) { const { checkInDate, checkOutDate, hotelId } = input + // TODO: add support for user token OR service token in procedure + // then we can fetch membership number if user token exists const loggingAttributes = { - membershipNumber: await getMembershipNumber(ctx.session), + // membershipNumber: await getMembershipNumber(ctx.session), checkInDate, checkOutDate, hotelId, @@ -56,11 +58,10 @@ export const bookingMutationRouter = router({ query: loggingAttributes, }) ) - const headers = ctx.session - ? { - Authorization: `Bearer ${ctx.session?.token.access_token}`, - } - : undefined + const headers = { + Authorization: `Bearer ${ctx.serviceToken}`, + } + const apiResponse = await api.post(api.endpoints.v1.booking, { headers, body: input, diff --git a/server/routers/booking/output.ts b/server/routers/booking/output.ts index 8fedd8716..dbc8101df 100644 --- a/server/routers/booking/output.ts +++ b/server/routers/booking/output.ts @@ -5,9 +5,9 @@ export const createBookingSchema = z data: z.object({ attributes: z.object({ confirmationNumber: z.string(), - cancellationNumber: z.string().nullable(), + cancellationNumber: z.string().optional(), reservationStatus: z.string(), - paymentUrl: z.string().nullable(), + paymentUrl: z.string().optional(), }), type: z.string(), id: z.string(), diff --git a/server/routers/booking/query.ts b/server/routers/booking/query.ts new file mode 100644 index 000000000..f7f439b90 --- /dev/null +++ b/server/routers/booking/query.ts @@ -0,0 +1,85 @@ +import { metrics } from "@opentelemetry/api" + +import * as api from "@/lib/api" +import { badRequestError, serverErrorByStatus } from "@/server/errors/trpc" +import { bookingServiceProcedure, router } from "@/server/trpc" + +import { getBookingStatusInput } from "./input" +import { createBookingSchema } from "./output" + +const meter = metrics.getMeter("trpc.booking") +const getBookingStatusCounter = meter.createCounter("trpc.booking.status") +const getBookingStatusSuccessCounter = meter.createCounter( + "trpc.booking.status-success" +) +const getBookingStatusFailCounter = meter.createCounter( + "trpc.booking.status-fail" +) + +export const bookingQueryRouter = router({ + status: bookingServiceProcedure + .input(getBookingStatusInput) + .query(async function ({ ctx, input }) { + const { confirmationNumber } = input + getBookingStatusCounter.add(1, { confirmationNumber }) + + const apiResponse = await api.get( + `${api.endpoints.v1.booking}/${confirmationNumber}/status`, + { + headers: { + Authorization: `Bearer ${ctx.serviceToken}`, + }, + } + ) + + if (!apiResponse.ok) { + const responseMessage = await apiResponse.text() + getBookingStatusFailCounter.add(1, { + confirmationNumber, + error_type: "http_error", + error: responseMessage, + }) + console.error( + "api.booking.status error", + JSON.stringify({ + query: { confirmationNumber }, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text: responseMessage, + }, + }) + ) + + throw serverErrorByStatus(apiResponse.status, apiResponse) + } + + const apiJson = await apiResponse.json() + const verifiedData = createBookingSchema.safeParse(apiJson) + if (!verifiedData.success) { + getBookingStatusFailCounter.add(1, { + confirmationNumber, + error_type: "validation_error", + error: JSON.stringify(verifiedData.error), + }) + console.error( + "api.booking.status validation error", + JSON.stringify({ + query: { confirmationNumber }, + error: verifiedData.error, + }) + ) + throw badRequestError() + } + + getBookingStatusSuccessCounter.add(1, { confirmationNumber }) + console.info( + "api.booking.status success", + JSON.stringify({ + query: { confirmationNumber }, + }) + ) + + return verifiedData.data + }), +}) diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index d0d95903a..d1fb2dfe8 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -436,6 +436,22 @@ export const roomSchema = z.object({ type: z.enum(["roomcategories"]), }) +const merchantInformationSchema = z.object({ + webMerchantId: z.string(), + cards: z.record(z.string(), z.boolean()).transform((val) => { + return Object.entries(val) + .filter(([_, enabled]) => enabled) + .map(([key]) => key) + }), + alternatePaymentOptions: z + .record(z.string(), z.boolean()) + .transform((val) => { + return Object.entries(val) + .filter(([_, enabled]) => enabled) + .map(([key]) => key) + }), +}) + // NOTE: Find schema at: https://aks-test.scandichotels.com/hotel/swagger/v1/index.html export const getHotelDataSchema = z.object({ data: z.object({ @@ -471,6 +487,7 @@ export const getHotelDataSchema = z.object({ hotelContent: hotelContentSchema, detailedFacilities: z.array(detailedFacilitySchema), healthFacilities: z.array(healthFacilitySchema), + merchantInformationData: merchantInformationSchema, rewardNight: rewardNightSchema, pointsOfInterest: z .array(pointOfInterestSchema) diff --git a/server/trpc.ts b/server/trpc.ts index 4f5409a01..e8f9c26f1 100644 --- a/server/trpc.ts +++ b/server/trpc.ts @@ -121,29 +121,24 @@ export const safeProtectedProcedure = t.procedure.use(async function (opts) { }) }) -export const profileServiceProcedure = t.procedure.use(async (opts) => { - const { access_token } = await fetchServiceToken(["profile"]) - if (!access_token) { - throw internalServerError("Failed to obtain profile service token") - } - return opts.next({ - ctx: { - serviceToken: access_token, - }, +function createServiceProcedure(serviceName: string) { + return t.procedure.use(async (opts) => { + const { access_token } = await fetchServiceToken([serviceName]) + if (!access_token) { + throw internalServerError(`Failed to obtain ${serviceName} service token`) + } + return opts.next({ + ctx: { + serviceToken: access_token, + }, + }) }) -}) +} + +export const bookingServiceProcedure = createServiceProcedure("booking") +export const hotelServiceProcedure = createServiceProcedure("hotel") +export const profileServiceProcedure = createServiceProcedure("profile") -export const hotelServiceProcedure = t.procedure.use(async (opts) => { - const { access_token } = await fetchServiceToken(["hotel"]) - if (!access_token) { - throw internalServerError("Failed to obtain hotel service token") - } - return opts.next({ - ctx: { - serviceToken: access_token, - }, - }) -}) export const serverActionProcedure = t.procedure.experimental_caller( experimental_nextAppDirCaller({ createContext, diff --git a/types/components/hotelReservation/selectRate/section.ts b/types/components/hotelReservation/selectRate/section.ts index e64e51506..69460962b 100644 --- a/types/components/hotelReservation/selectRate/section.ts +++ b/types/components/hotelReservation/selectRate/section.ts @@ -1,5 +1,7 @@ import { Rate } from "@/server/routers/hotels/output" +import { Hotel } from "@/types/hotel" + export interface SectionProps { nextPath: string } @@ -33,6 +35,10 @@ export interface RoomSelectionProps extends SectionProps { export interface DetailsProps extends SectionProps {} +export interface PaymentProps { + hotel: Hotel +} + export interface SectionPageProps { breakfast?: string bed?: string From e0abbef1120795170f9b1d99a48f678619847e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Wed, 2 Oct 2024 15:08:05 +0200 Subject: [PATCH 08/64] fix: "as of today" translation corrections --- i18n/dictionaries/da.json | 2 +- i18n/dictionaries/no.json | 2 +- i18n/dictionaries/sv.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 39f49c9a8..0e7764176 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -14,7 +14,7 @@ "Any changes you've made will be lost.": "Alle ændringer, du har foretaget, går tabt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på, at du vil fjerne kortet, der slutter me {lastFourDigits} fra din medlemsprofil?", "Arrival date": "Ankomstdato", - "as of today": "fra idag", + "as of today": "pr. dags dato", "As our": "Som vores {level}", "As our Close Friend": "Som vores nære ven", "At latest": "Senest", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index efb73b3d1..d6e851bfd 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -14,7 +14,7 @@ "Any changes you've made will be lost.": "Eventuelle endringer du har gjort, går tapt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på at du vil fjerne kortet som slutter på {lastFourDigits} fra medlemsprofilen din?", "Arrival date": "Ankomstdato", - "as of today": "per idag", + "as of today": "per i dag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nære venn", "At latest": "Senest", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 266ecdcfb..981c4be73 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -14,7 +14,7 @@ "Any changes you've made will be lost.": "Alla ändringar du har gjort kommer att gå förlorade.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Är du säker på att du vill ta bort kortet som slutar med {lastFourDigits} från din medlemsprofil?", "Arrival date": "Ankomstdatum", - "as of today": "från och med idag", + "as of today": "per idag", "As our": "Som vår {level}", "As our Close Friend": "Som vår nära vän", "At latest": "Senast", From 2ddc735ab5caf3e382849927ced4d6e533623bc3 Mon Sep 17 00:00:00 2001 From: Tobias Johansson Date: Fri, 4 Oct 2024 09:37:09 +0000 Subject: [PATCH 09/64] Merged in feat/SW-431-payment-flow (pull request #635) Feat/SW-431 payment flow * feat(SW-431): Update mock hotel data * feat(SW-431): Added route handler and trpc routes * feat(SW-431): List payment methods and handle booking status and redirection * feat(SW-431): Updated booking page to poll for booking status * feat(SW-431): Updated create booking contract * feat(SW-431): small fix * fix(SW-431): Added intl string and sorted dictionaries * fix(SW-431): Changes from PR * fix(SW-431): fixes from PR * fix(SW-431): add todo comments * fix(SW-431): update schema prop Approved-by: Simon.Emanuelsson --- i18n/dictionaries/en.json | 1 - 1 file changed, 1 deletion(-) diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index d5f7e010c..42d246472 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -68,7 +68,6 @@ "Description": "Description", "Destination": "Destination", "Destinations & hotels": "Destinations & hotels", - "Destination": "Destination", "Disabled booking options header": "We're sorry", "Disabled booking options text": "Codes, cheques and reward nights aren't available on the new website yet.", "Discard changes": "Discard changes", From dde7fb1fd8431cb42e239f0fd0c82fb65d17a6ce Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Fri, 4 Oct 2024 10:00:52 +0200 Subject: [PATCH 10/64] feat(SW-350): Implemented tooltip and booking widget tablet design --- i18n/dictionaries/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 42d246472..9ebd9d692 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -67,6 +67,7 @@ "Day": "Day", "Description": "Description", "Destination": "Destination", + "Destination": "Destination", "Destinations & hotels": "Destinations & hotels", "Disabled booking options header": "We're sorry", "Disabled booking options text": "Codes, cheques and reward nights aren't available on the new website yet.", @@ -185,8 +186,8 @@ "Phone is required": "Phone is required", "Phone number": "Phone number", "Please enter a valid phone number": "Please enter a valid phone number", - "points": "Points", "Points": "Points", + "points": "Points", "Points being calculated": "Points being calculated", "Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021", "Points may take up to 10 days to be displayed.": "Points may take up to 10 days to be displayed.", From 9b160c22228a7b8d561b66f8d3cc3aa6c8c9c02a Mon Sep 17 00:00:00 2001 From: Tobias Johansson Date: Fri, 4 Oct 2024 09:37:09 +0000 Subject: [PATCH 11/64] Merged in feat/SW-431-payment-flow (pull request #635) Feat/SW-431 payment flow * feat(SW-431): Update mock hotel data * feat(SW-431): Added route handler and trpc routes * feat(SW-431): List payment methods and handle booking status and redirection * feat(SW-431): Updated booking page to poll for booking status * feat(SW-431): Updated create booking contract * feat(SW-431): small fix * fix(SW-431): Added intl string and sorted dictionaries * fix(SW-431): Changes from PR * fix(SW-431): fixes from PR * fix(SW-431): add todo comments * fix(SW-431): update schema prop Approved-by: Simon.Emanuelsson --- i18n/dictionaries/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 9ebd9d692..91ab583d6 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -67,7 +67,6 @@ "Day": "Day", "Description": "Description", "Destination": "Destination", - "Destination": "Destination", "Destinations & hotels": "Destinations & hotels", "Disabled booking options header": "We're sorry", "Disabled booking options text": "Codes, cheques and reward nights aren't available on the new website yet.", @@ -186,6 +185,7 @@ "Phone is required": "Phone is required", "Phone number": "Phone number", "Please enter a valid phone number": "Please enter a valid phone number", + "points": "Points", "Points": "Points", "points": "Points", "Points being calculated": "Points being calculated", From b83103cb54533eb4053e46e08b394c3e48447e89 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Fri, 4 Oct 2024 12:40:18 +0200 Subject: [PATCH 12/64] feat(SW-350): removed dublicaded translation --- i18n/dictionaries/en.json | 1 - 1 file changed, 1 deletion(-) diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 91ab583d6..42d246472 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -187,7 +187,6 @@ "Please enter a valid phone number": "Please enter a valid phone number", "points": "Points", "Points": "Points", - "points": "Points", "Points being calculated": "Points being calculated", "Points earned prior to May 1, 2021": "Points earned prior to May 1, 2021", "Points may take up to 10 days to be displayed.": "Points may take up to 10 days to be displayed.", From 6338c77a0dfdd3c81b7135b5743edb13f0d92fd6 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Fri, 4 Oct 2024 15:26:37 +0200 Subject: [PATCH 13/64] feat(SW-350): Removed max-width --- .../Forms/BookingWidget/FormContent/formContent.module.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/Forms/BookingWidget/FormContent/formContent.module.css b/components/Forms/BookingWidget/FormContent/formContent.module.css index cbb2de147..4109a5509 100644 --- a/components/Forms/BookingWidget/FormContent/formContent.module.css +++ b/components/Forms/BookingWidget/FormContent/formContent.module.css @@ -76,7 +76,6 @@ .rooms, .when { - max-width: 240px; padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); border-radius: var(--Corner-radius-Small); } @@ -87,7 +86,6 @@ } .where { - max-width: 280px; position: relative; } From 451d461c7febc5bc5fdd7e5374e4b8dd19312b71 Mon Sep 17 00:00:00 2001 From: Simon Emanuelsson Date: Thu, 3 Oct 2024 11:12:36 +0200 Subject: [PATCH 14/64] feat: guest information form enter details --- .../hotelreservation/[section]/page.tsx | 11 +- .../SearchList/ClearSearchButton/index.tsx | 10 +- .../FormContent/Search/SearchList/index.tsx | 3 + .../FormContent/Search/index.tsx | 13 +- .../EnterDetails/Details/details.module.css | 25 ++++ .../EnterDetails/Details/index.tsx | 117 ++++++++++++++++++ .../EnterDetails/Details/schema.ts | 19 +++ .../HotelReservation/HotelCard/index.tsx | 8 +- components/Icons/Heart.tsx | 36 ++++++ components/Icons/icon.module.css | 15 +++ components/Icons/index.tsx | 1 + components/Icons/variants.ts | 3 + .../Form/Checkbox/Card/card.module.css | 70 +++++++++++ .../Form/Checkbox/Card/card.ts | 14 +++ .../Form/Checkbox/Card/index.tsx | 65 ++++++++++ .../TempDesignSystem/Form/Country/country.ts | 2 + .../TempDesignSystem/Form/Country/index.tsx | 7 +- .../Form/Input/AriaInputWithLabel/index.tsx | 25 ++++ .../Input/AriaInputWithLabel/input.module.css | 55 ++++++++ .../Form/Input/AriaInputWithLabel/input.ts | 4 + .../TempDesignSystem/Form/Input/index.tsx | 36 +++--- .../Form/Input/input.module.css | 56 --------- .../TempDesignSystem/Form/Input/input.ts | 2 +- .../Form/Label/label.module.css | 2 +- .../Form/NewPassword/index.tsx | 32 ++--- .../Form/NewPassword/newPassword.module.css | 56 --------- .../TempDesignSystem/Form/Phone/index.tsx | 40 +++--- .../Form/Phone/phone.module.css | 40 +----- .../TempDesignSystem/Form/Phone/phone.ts | 2 + .../Text/Body/body.module.css | 4 + .../TempDesignSystem/Text/Body/variants.ts | 1 + .../Text/Caption/caption.module.css | 10 +- .../TempDesignSystem/Text/Caption/index.tsx | 3 + .../TempDesignSystem/Text/Caption/variants.ts | 8 ++ .../Text/Footnote/footnote.module.css | 2 +- .../Text/Footnote/variants.ts | 2 +- i18n/dictionaries/da.json | 49 ++++---- i18n/dictionaries/de.json | 3 + i18n/dictionaries/en.json | 59 +++++---- i18n/dictionaries/fi.json | 49 ++++---- i18n/dictionaries/no.json | 49 ++++---- i18n/dictionaries/sv.json | 49 ++++---- lib/discriminatedUnion.ts | 8 +- lib/trpc/memoizedRequests/index.ts | 6 + server/routers/contentstack/base/output.ts | 11 +- .../contentstack/schemas/linkConnection.ts | 24 ++-- server/routers/user/query.ts | 116 +++++++++-------- types/components/enterDetails/details.ts | 11 ++ types/components/search.ts | 33 ++--- types/requests/system.ts | 10 +- 50 files changed, 834 insertions(+), 442 deletions(-) create mode 100644 components/HotelReservation/EnterDetails/Details/details.module.css create mode 100644 components/HotelReservation/EnterDetails/Details/index.tsx create mode 100644 components/HotelReservation/EnterDetails/Details/schema.ts create mode 100644 components/Icons/Heart.tsx create mode 100644 components/TempDesignSystem/Form/Checkbox/Card/card.module.css create mode 100644 components/TempDesignSystem/Form/Checkbox/Card/card.ts create mode 100644 components/TempDesignSystem/Form/Checkbox/Card/index.tsx create mode 100644 components/TempDesignSystem/Form/Input/AriaInputWithLabel/index.tsx create mode 100644 components/TempDesignSystem/Form/Input/AriaInputWithLabel/input.module.css create mode 100644 components/TempDesignSystem/Form/Input/AriaInputWithLabel/input.ts create mode 100644 types/components/enterDetails/details.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index b3ef81538..3ebb491e5 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -1,11 +1,12 @@ import { notFound } from "next/navigation" +import { getProfileSafely } from "@/lib/trpc/memoizedRequests" import { serverClient } from "@/lib/trpc/server" +import Details from "@/components/HotelReservation/EnterDetails/Details" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection" import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection" -import Details from "@/components/HotelReservation/SelectRate/Details" import Payment from "@/components/HotelReservation/SelectRate/Payment" import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" @@ -79,6 +80,7 @@ export default async function SectionsPage({ searchParams, }: PageArgs) { setLang(params.lang) + const profile = await getProfileSafely() const hotel = await serverClient().hotel.hotelData.get({ hotelId: "811", @@ -114,6 +116,11 @@ export default async function SectionsPage({ const currentSearchParams = new URLSearchParams(searchParams).toString() + let user = null + if (profile && !("error" in profile)) { + user = profile + } + return (
@@ -171,7 +178,7 @@ export default async function SectionsPage({ header={intl.formatMessage({ id: "Your details" })} path={`details?${currentSearchParams}`} > - {params.section === "details" &&
} + {params.section === "details" ?
: null} diff --git a/components/Forms/BookingWidget/FormContent/Search/SearchList/index.tsx b/components/Forms/BookingWidget/FormContent/Search/SearchList/index.tsx index 2bbc3b43d..a8736e69d 100644 --- a/components/Forms/BookingWidget/FormContent/Search/SearchList/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/SearchList/index.tsx @@ -20,6 +20,7 @@ import type { SearchListProps } from "@/types/components/search" export default function SearchList({ getItemProps, getMenuProps, + handleClearSearchHistory, highlightedIndex, isOpen, locations, @@ -125,6 +126,7 @@ export default function SearchList({ @@ -161,6 +163,7 @@ export default function SearchList({ diff --git a/components/Forms/BookingWidget/FormContent/Search/index.tsx b/components/Forms/BookingWidget/FormContent/Search/index.tsx index 1ce969a29..353c2807b 100644 --- a/components/Forms/BookingWidget/FormContent/Search/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/index.tsx @@ -43,6 +43,11 @@ export default function Search({ locations }: SearchProps) { [locations] ) + function handleClearSearchHistory() { + localStorage.removeItem(localStorageKey) + dispatch({ type: ActionType.CLEAR_HISTORY_LOCATIONS }) + } + function handleOnBlur() { if (!value && state.searchData?.name) { setValue(name, state.searchData.name) @@ -79,11 +84,8 @@ export default function Search({ locations }: SearchProps) { } } - function handleOnSelect(selectedItem: Location | null | "clear-search") { - if (selectedItem === "clear-search") { - localStorage.removeItem(localStorageKey) - dispatch({ type: ActionType.CLEAR_HISTORY_LOCATIONS }) - } else if (selectedItem) { + function handleOnSelect(selectedItem: Location | null) { + if (selectedItem) { const stringified = JSON.stringify(selectedItem) setValue("location", encodeURIComponent(stringified)) sessionStorage.setItem(sessionStorageKey, stringified) @@ -167,6 +169,7 @@ export default function Search({ locations }: SearchProps) { ({ + defaultValues: { + countryCode: user?.address?.countryCode ?? "", + email: user?.email ?? "", + firstname: user?.firstName ?? "", + lastname: user?.lastName ?? "", + phoneNumber: user?.phoneNumber ?? "", + }, + mode: "all", + resolver: zodResolver(user ? signedInDetailsSchema : detailsSchema), + reValidateMode: "onChange", + }) + + return ( + +
+
+ + {intl.formatMessage({ id: "Guest information" })} + +
+
+ + + + + + +
+ {user ? null : ( + + )} + +
+
+
+ ) +} diff --git a/components/HotelReservation/EnterDetails/Details/schema.ts b/components/HotelReservation/EnterDetails/Details/schema.ts new file mode 100644 index 000000000..92f1a5629 --- /dev/null +++ b/components/HotelReservation/EnterDetails/Details/schema.ts @@ -0,0 +1,19 @@ +import { z } from "zod" + +import { phoneValidator } from "@/utils/phoneValidator" + +export const detailsSchema = z.object({ + countryCode: z.string(), + email: z.string().email(), + firstname: z.string(), + lastname: z.string(), + phoneNumber: phoneValidator(), +}) + +export const signedInDetailsSchema = z.object({ + countryCode: z.string().optional(), + email: z.string().email().optional(), + firstname: z.string().optional(), + lastname: z.string().optional(), + phoneNumber: phoneValidator().optional(), +}) diff --git a/components/HotelReservation/HotelCard/index.tsx b/components/HotelReservation/HotelCard/index.tsx index 82b0c4b91..99feb01ab 100644 --- a/components/HotelReservation/HotelCard/index.tsx +++ b/components/HotelReservation/HotelCard/index.tsx @@ -48,10 +48,10 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {hotelData.name} - + {`${hotelData.address.streetAddress}, ${hotelData.address.city}`} - + {`${hotelData.location.distanceToCentre} ${intl.formatMessage({ id: "km to city center" })}`}
@@ -79,7 +79,7 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {price?.regularAmount} {price?.currency} / {intl.formatMessage({ id: "night" })} - approx 280 eur + approx 280 eur
@@ -90,7 +90,7 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {price?.memberAmount} {price?.currency} / {intl.formatMessage({ id: "night" })} - approx 280 eur + approx 280 eur
+
+ + + ) +} diff --git a/components/HotelReservation/EnterDetails/Details/schema.ts b/components/HotelReservation/EnterDetails/Details/schema.ts new file mode 100644 index 000000000..92f1a5629 --- /dev/null +++ b/components/HotelReservation/EnterDetails/Details/schema.ts @@ -0,0 +1,19 @@ +import { z } from "zod" + +import { phoneValidator } from "@/utils/phoneValidator" + +export const detailsSchema = z.object({ + countryCode: z.string(), + email: z.string().email(), + firstname: z.string(), + lastname: z.string(), + phoneNumber: phoneValidator(), +}) + +export const signedInDetailsSchema = z.object({ + countryCode: z.string().optional(), + email: z.string().email().optional(), + firstname: z.string().optional(), + lastname: z.string().optional(), + phoneNumber: phoneValidator().optional(), +}) diff --git a/components/HotelReservation/HotelCard/index.tsx b/components/HotelReservation/HotelCard/index.tsx index 82b0c4b91..99feb01ab 100644 --- a/components/HotelReservation/HotelCard/index.tsx +++ b/components/HotelReservation/HotelCard/index.tsx @@ -48,10 +48,10 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {hotelData.name} - + {`${hotelData.address.streetAddress}, ${hotelData.address.city}`} - + {`${hotelData.location.distanceToCentre} ${intl.formatMessage({ id: "km to city center" })}`} @@ -79,7 +79,7 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {price?.regularAmount} {price?.currency} / {intl.formatMessage({ id: "night" })} - approx 280 eur + approx 280 eur
@@ -90,7 +90,7 @@ export default async function HotelCard({ hotel }: HotelCardProps) { {price?.memberAmount} {price?.currency} / {intl.formatMessage({ id: "night" })} - approx 280 eur + approx 280 eur
+ ) +} diff --git a/components/Profile/ManagePreferencesButton/managePreferencesButton.module.css b/components/Profile/ManagePreferencesButton/managePreferencesButton.module.css new file mode 100644 index 000000000..f786a669f --- /dev/null +++ b/components/Profile/ManagePreferencesButton/managePreferencesButton.module.css @@ -0,0 +1,3 @@ +.managePreferencesButton { + justify-self: flex-start; +} diff --git a/env/server.ts b/env/server.ts index 751143e62..623c02e3a 100644 --- a/env/server.ts +++ b/env/server.ts @@ -47,6 +47,7 @@ export const env = createEnv({ .default("false"), PUBLIC_URL: z.string().optional(), REVALIDATE_SECRET: z.string(), + SALESFORCE_PREFRENCE_BASE_URL: z.string(), SEAMLESS_LOGIN_DA: z.string(), SEAMLESS_LOGIN_DE: z.string(), SEAMLESS_LOGIN_EN: z.string(), @@ -104,6 +105,7 @@ export const env = createEnv({ PRINT_QUERY: process.env.PRINT_QUERY, PUBLIC_URL: process.env.PUBLIC_URL, REVALIDATE_SECRET: process.env.REVALIDATE_SECRET, + SALESFORCE_PREFRENCE_BASE_URL: process.env.SALESFORCE_PREFRENCE_BASE_URL, SEAMLESS_LOGIN_DA: process.env.SEAMLESS_LOGIN_DA, SEAMLESS_LOGIN_DE: process.env.SEAMLESS_LOGIN_DE, SEAMLESS_LOGIN_EN: process.env.SEAMLESS_LOGIN_EN, diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 03dc00da5..77e15f396 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -10,6 +10,7 @@ "Amenities": "Faciliteter", "Amusement park": "Forlystelsespark", "An error occurred when adding a credit card, please try again later.": "Der opstod en fejl under tilføjelse af et kreditkort. Prøv venligst igen senere.", + "An error occurred trying to manage your preferences, please try again later.": "Der opstod en fejl under forsøget på at administrere dine præferencer. Prøv venligst igen senere.", "An error occurred when trying to update profile.": "Der opstod en fejl under forsøg på at opdatere profilen.", "Any changes you've made will be lost.": "Alle ændringer, du har foretaget, går tabt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på, at du vil fjerne kortet, der slutter me {lastFourDigits} fra din medlemsprofil?", @@ -99,6 +100,7 @@ "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det virker", "Image gallery": "Billedgalleri", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke muligt at administrere dine kommunikationspræferencer lige nu, prøv venligst igen senere eller kontakt support, hvis problemet fortsætter.", "Join Scandic Friends": "Tilmeld dig Scandic Friends", "Join at no cost": "Tilmeld dig uden omkostninger", "Language": "Sprog", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 5f79f7d9d..99dbc5dc0 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -10,6 +10,7 @@ "Amenities": "Annehmlichkeiten", "Amusement park": "Vergnügungspark", "An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", + "An error occurred trying to manage your preferences, please try again later.": "Beim Versuch, Ihre Einstellungen zu verwalten, ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", "An error occurred when trying to update profile.": "Beim Versuch, das Profil zu aktualisieren, ist ein Fehler aufgetreten.", "Any changes you've made will be lost.": "Alle Änderungen, die Sie vorgenommen haben, gehen verloren.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Möchten Sie die Karte mit der Endung {lastFourDigits} wirklich aus Ihrem Mitgliedsprofil entfernen?", @@ -104,6 +105,7 @@ "How do you want to sleep?": "Wie möchtest du schlafen?", "How it works": "Wie es funktioniert", "Image gallery": "Bildergalerie", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Es ist derzeit nicht möglich, Ihre Kommunikationseinstellungen zu verwalten. Bitte versuchen Sie es später erneut oder wenden Sie sich an den Support, wenn das Problem weiterhin besteht.", "Join Scandic Friends": "Treten Sie Scandic Friends bei", "km to city center": "km bis zum Stadtzentrum", "Language": "Sprache", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index fe95c44b6..64ff97c27 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -10,6 +10,7 @@ "Amenities": "Amenities", "Amusement park": "Amusement park", "An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.", + "An error occurred trying to manage your preferences, please try again later.": "An error occurred trying to manage your preferences, please try again later.", "An error occurred when trying to update profile.": "An error occurred when trying to update profile.", "Any changes you've made will be lost.": "Any changes you've made will be lost.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?", @@ -103,6 +104,7 @@ "How do you want to sleep?": "How do you want to sleep?", "How it works": "How it works", "Image gallery": "Image gallery", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.", "Join Scandic Friends": "Join Scandic Friends", "Join at no cost": "Join at no cost", "Language": "Language", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 5485d1871..870acb18e 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -10,6 +10,7 @@ "Amenities": "Mukavuudet", "Amusement park": "Huvipuisto", "An error occurred when adding a credit card, please try again later.": "Luottokorttia lisättäessä tapahtui virhe. Yritä myöhemmin uudelleen.", + "An error occurred trying to manage your preferences, please try again later.": "Asetusten hallinnassa tapahtui virhe. Yritä myöhemmin uudelleen.", "An error occurred when trying to update profile.": "Profiilia päivitettäessä tapahtui virhe.", "Any changes you've made will be lost.": "Kaikki tekemäsi muutokset menetetään.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Haluatko varmasti poistaa kortin, joka päättyy numeroon {lastFourDigits} jäsenprofiilistasi?", @@ -99,6 +100,7 @@ "How do you want to sleep?": "Kuinka haluat nukkua?", "How it works": "Kuinka se toimii", "Image gallery": "Kuvagalleria", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Viestintäasetuksiasi ei voi hallita juuri nyt. Yritä myöhemmin uudelleen tai ota yhteyttä tukeen, jos ongelma jatkuu.", "Join Scandic Friends": "Liity jäseneksi", "Join at no cost": "Liity maksutta", "Language": "Kieli", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 395143f40..65fa174b5 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -10,6 +10,7 @@ "Amenities": "Fasiliteter", "Amusement park": "Tivoli", "An error occurred when adding a credit card, please try again later.": "Det oppstod en feil ved å legge til et kredittkort. Prøv igjen senere.", + "An error occurred trying to manage your preferences, please try again later.": "Det oppstod en feil under forsøket på å administrere innstillingene dine. Prøv igjen senere.", "An error occurred when trying to update profile.": "Det oppstod en feil under forsøk på å oppdatere profilen.", "Any changes you've made will be lost.": "Eventuelle endringer du har gjort, går tapt.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Er du sikker på at du vil fjerne kortet som slutter på {lastFourDigits} fra medlemsprofilen din?", @@ -99,6 +100,7 @@ "How do you want to sleep?": "Hvordan vil du sove?", "How it works": "Hvordan det fungerer", "Image gallery": "Bildegalleri", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke mulig å administrere kommunikasjonspreferansene dine akkurat nå, prøv igjen senere eller kontakt support hvis problemet vedvarer.", "Join Scandic Friends": "Bli med i Scandic Friends", "Join at no cost": "Bli med uten kostnad", "Language": "Språk", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 21bf5397e..56274dfad 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -10,6 +10,7 @@ "Amenities": "Bekvämligheter", "Amusement park": "Nöjespark", "An error occurred when adding a credit card, please try again later.": "Ett fel uppstod när ett kreditkort lades till, försök igen senare.", + "An error occurred trying to manage your preferences, please try again later.": "Ett fel uppstod när du försökte hantera dina inställningar, försök igen senare.", "An error occurred when trying to update profile.": "Ett fel uppstod när du försökte uppdatera profilen.", "Any changes you've made will be lost.": "Alla ändringar du har gjort kommer att gå förlorade.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Är du säker på att du vill ta bort kortet som slutar med {lastFourDigits} från din medlemsprofil?", @@ -99,6 +100,8 @@ "How do you want to sleep?": "Hur vill du sova?", "How it works": "Hur det fungerar", "Image gallery": "Bildgalleri", + "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det gick inte att hantera dina kommunikationsinställningar just nu, försök igen senare eller kontakta supporten om problemet kvarstår.", + "Join Scandic Friends": "Gå med i Scandic Friends", "Join at no cost": "Gå med utan kostnad", "Language": "Språk", diff --git a/lib/api/endpoints.ts b/lib/api/endpoints.ts index 213e40b37..b31f32b5f 100644 --- a/lib/api/endpoints.ts +++ b/lib/api/endpoints.ts @@ -21,6 +21,9 @@ export namespace endpoints { upcomingStays = "booking/v1/Stays/future", rewards = `${profile}/reward`, tierRewards = `${profile}/TierRewards`, + intiateSaveCard = `${creditCards}/initiateSaveCard`, + deleteCreditCard = `${profile}/creditCards`, + subscriberId = `${profile}/SubscriberId`, } } diff --git a/next-env.d.ts b/next-env.d.ts index 4f11a03dc..40c3d6809 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/server/routers/user/mutation.ts b/server/routers/user/mutation.ts index 38bb458e3..7e99c142f 100644 --- a/server/routers/user/mutation.ts +++ b/server/routers/user/mutation.ts @@ -1,5 +1,11 @@ +import { metrics } from "@opentelemetry/api" + +import { env } from "@/env/server" import * as api from "@/lib/api" -import { initiateSaveCardSchema } from "@/server/routers/user/output" +import { + initiateSaveCardSchema, + subscriberIdSchema, +} from "@/server/routers/user/output" import { protectedProcedure, router } from "@/server/trpc" import { @@ -8,6 +14,17 @@ import { saveCreditCardInput, } from "./input" +const meter = metrics.getMeter("trpc.user") +const generatePreferencesLinkCounter = meter.createCounter( + "trpc.user.generatePreferencesLink" +) +const generatePreferencesLinkSuccessCounter = meter.createCounter( + "trpc.user.generatePreferencesLink-success" +) +const generatePreferencesLinkFailCounter = meter.createCounter( + "trpc.user.generatePreferencesLink-fail" +) + export const userMutationRouter = router({ creditCard: router({ add: protectedProcedure.input(addCreditCardInput).mutation(async function ({ @@ -128,4 +145,62 @@ export const userMutationRouter = router({ return true }), }), + generatePreferencesLink: protectedProcedure.mutation(async function ({ + ctx, + }) { + generatePreferencesLinkCounter.add(1) + const apiResponse = await api.get(api.endpoints.v1.subscriberId, { + headers: { + Authorization: `Bearer ${ctx.session.token.access_token}`, + }, + }) + + if (!apiResponse.ok) { + const text = await apiResponse.text() + generatePreferencesLinkFailCounter.add(1, { + error_type: "http_error", + error: JSON.stringify({ + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }), + }) + console.error( + "api.user.subscriberId error ", + JSON.stringify({ + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }, + }) + ) + return null + } + + const data = await apiResponse.json() + + const validatedData = subscriberIdSchema.safeParse(data) + + if (!validatedData.success) { + generatePreferencesLinkSuccessCounter.add(1, { + error_type: "validation_error", + error: JSON.stringify(validatedData.error), + }) + console.error( + "api.user.generatePreferencesLink validation error", + JSON.stringify({ + error: validatedData.error, + }) + ) + console.error(validatedData.error.format()) + + return null + } + const preferencesLink = new URL(env.SALESFORCE_PREFRENCE_BASE_URL) + preferencesLink.searchParams.set("subKey", validatedData.data.subscriberId) + + generatePreferencesLinkSuccessCounter.add(1) + return preferencesLink.toString() + }), }) diff --git a/server/routers/user/output.ts b/server/routers/user/output.ts index 8ee482057..9c5e955ab 100644 --- a/server/routers/user/output.ts +++ b/server/routers/user/output.ts @@ -234,3 +234,7 @@ export const initiateSaveCardSchema = z.object({ type: z.string(), }), }) + +export const subscriberIdSchema = z.object({ + subscriberId: z.string(), +}) From 44747058d0154336727b58c9b4407cae02f02354 Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Mon, 30 Sep 2024 09:52:33 +0200 Subject: [PATCH 30/64] fix: loyalty levels fetch in rsc for mobile menu fix: get loyalty level in rsc fix: typo --- .env.local.example | 2 +- .../Header/MainMenu/MyPagesMenu/index.tsx | 2 ++ .../MainMenu/MyPagesMenuContent/index.tsx | 10 +------- .../MainMenu/MyPagesMenuWrapper/index.tsx | 9 +++++++ .../MainMenu/MyPagesMobileMenu/index.tsx | 2 ++ env/server.ts | 4 +-- lib/api/endpoints.ts | 2 -- next-env.d.ts | 2 +- .../contentstack/loyaltyLevel/query.ts | 25 ++++++++++++++----- server/routers/user/mutation.ts | 2 +- types/components/header/myPagesMenu.ts | 2 ++ 11 files changed, 40 insertions(+), 22 deletions(-) diff --git a/.env.local.example b/.env.local.example index 16e56afa3..ab0b7ee72 100644 --- a/.env.local.example +++ b/.env.local.example @@ -19,7 +19,7 @@ DESIGN_SYSTEM_ACCESS_TOKEN="" NEXTAUTH_REDIRECT_PROXY_URL="http://localhost:3000/api/web/auth" NEXTAUTH_SECRET="" REVALIDATE_SECRET="" -SALESFORCE_PREFRENCE_BASE_URL="https://mc31njyvc80x-2b9wg-24jxcj5yq.pub.sfmc-content.com/disfelgm4fv" +SALESFORCE_PREFERENCE_BASE_URL="https://cloud.emails.scandichotels.com/preference-center" SEAMLESS_LOGIN_DA="http://www.example.dk/updatelogin" SEAMLESS_LOGIN_DE="http://www.example.de/updatelogin" diff --git a/components/Header/MainMenu/MyPagesMenu/index.tsx b/components/Header/MainMenu/MyPagesMenu/index.tsx index a99f95a89..fb739399c 100644 --- a/components/Header/MainMenu/MyPagesMenu/index.tsx +++ b/components/Header/MainMenu/MyPagesMenu/index.tsx @@ -24,6 +24,7 @@ export default function MyPagesMenu({ membership, navigation, user, + membershipLevel, }: MyPagesMenuProps) { const intl = useIntl() const myPagesMenuRef = useRef(null) @@ -57,6 +58,7 @@ export default function MyPagesMenu({ {isMyPagesMenuOpen ? (
{user ? ( <> // NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/server/routers/contentstack/loyaltyLevel/query.ts b/server/routers/contentstack/loyaltyLevel/query.ts index 58882dde7..c531fbebb 100644 --- a/server/routers/contentstack/loyaltyLevel/query.ts +++ b/server/routers/contentstack/loyaltyLevel/query.ts @@ -31,6 +31,17 @@ const getAllLoyaltyLevelFailCounter = meter.createCounter( "trpc.contentstack.loyaltyLevel.all-fail" ) +const getByLevelLoyaltyLevelCounter = meter.createCounter( + "trpc.contentstack.loyaltyLevel.byLevel" +) + +const getByLevelLoyaltyLevelSuccessCounter = meter.createCounter( + "trpc.contentstack.loyaltyLevel.byLevel-success" +) +const getByLevelLoyaltyLevelFailCounter = meter.createCounter( + "trpc.contentstack.loyaltyLevel.byLevel-fail" +) + export async function getAllLoyaltyLevels(ctx: Context) { getAllLoyaltyLevelCounter.add(1) @@ -87,7 +98,9 @@ export async function getAllLoyaltyLevels(ctx: Context) { } export async function getLoyaltyLevel(ctx: Context, level_id: MembershipLevel) { - getAllLoyaltyLevelCounter.add(1) + getByLevelLoyaltyLevelCounter.add(1, { + query: JSON.stringify({ lang: ctx.lang, level_id }), + }) const loyaltyLevelsConfigResponse = await request( GetLoyaltyLevel, @@ -103,10 +116,10 @@ export async function getLoyaltyLevel(ctx: Context, level_id: MembershipLevel) { !loyaltyLevelsConfigResponse.data || !loyaltyLevelsConfigResponse.data.all_loyalty_level.items.length ) { - getAllLoyaltyLevelFailCounter.add(1) + getByLevelLoyaltyLevelFailCounter.add(1) const notFoundError = notFound(loyaltyLevelsConfigResponse) console.error( - "contentstack.loyaltyLevels not found error", + "contentstack.loyaltyLevel not found error", JSON.stringify({ query: { lang: ctx.lang, level_id }, error: { code: notFoundError.code }, @@ -119,10 +132,10 @@ export async function getLoyaltyLevel(ctx: Context, level_id: MembershipLevel) { loyaltyLevelsConfigResponse.data ) if (!validatedLoyaltyLevels.success) { - getAllLoyaltyLevelFailCounter.add(1) + getByLevelLoyaltyLevelFailCounter.add(1) console.error(validatedLoyaltyLevels.error) console.error( - "contentstack.rewards validation error", + "contentstack.loyaltyLevel validation error", JSON.stringify({ query: { lang: ctx.lang, level_id }, error: validatedLoyaltyLevels.error, @@ -131,7 +144,7 @@ export async function getLoyaltyLevel(ctx: Context, level_id: MembershipLevel) { return null } - getAllLoyaltyLevelSuccessCounter.add(1) + getByLevelLoyaltyLevelSuccessCounter.add(1) return validatedLoyaltyLevels.data[0] } diff --git a/server/routers/user/mutation.ts b/server/routers/user/mutation.ts index 7e99c142f..005941090 100644 --- a/server/routers/user/mutation.ts +++ b/server/routers/user/mutation.ts @@ -197,7 +197,7 @@ export const userMutationRouter = router({ return null } - const preferencesLink = new URL(env.SALESFORCE_PREFRENCE_BASE_URL) + const preferencesLink = new URL(env.SALESFORCE_PREFERENCE_BASE_URL) preferencesLink.searchParams.set("subKey", validatedData.data.subscriberId) generatePreferencesLinkSuccessCounter.add(1) diff --git a/types/components/header/myPagesMenu.ts b/types/components/header/myPagesMenu.ts index 22cab2ca7..054dc41df 100644 --- a/types/components/header/myPagesMenu.ts +++ b/types/components/header/myPagesMenu.ts @@ -3,6 +3,7 @@ import { navigationQueryRouter } from "@/server/routers/contentstack/myPages/nav import { FriendsMembership } from "@/utils/user" import type { User } from "@/types/user" +import type { LoyaltyLevel } from "@/server/routers/contentstack/loyaltyLevel/output" type MyPagesNavigation = Awaited< ReturnType<(typeof navigationQueryRouter)["get"]> @@ -12,6 +13,7 @@ export interface MyPagesMenuProps { navigation: MyPagesNavigation user: Pick membership?: FriendsMembership | null + membershipLevel: LoyaltyLevel | null } export interface MyPagesMenuContentProps extends MyPagesMenuProps { From 8d5ed30fc4b714b40d961d61c9ae6e51116df066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Thu, 5 Sep 2024 11:37:38 +0200 Subject: [PATCH 31/64] mock JSON file --- .../HotelPage/Facilities/mock.json | 16764 ++++++++++++++++ 1 file changed, 16764 insertions(+) create mode 100644 components/ContentType/HotelPage/Facilities/mock.json diff --git a/components/ContentType/HotelPage/Facilities/mock.json b/components/ContentType/HotelPage/Facilities/mock.json new file mode 100644 index 000000000..34f4217c8 --- /dev/null +++ b/components/ContentType/HotelPage/Facilities/mock.json @@ -0,0 +1,16764 @@ +{ + "data": { + "attributes": { + "name": "Scandic Aarhus City", + "operaId": "736", + "keywords": ["aarhus", "århus", "aarhus city"], + "isPublished": true, + "cityId": "504c2772-43b6-414a-913b-40c05eccaddd", + "cityName": "Aarhus", + "ratings": { + "tripAdvisor": { + "numberOfReviews": 1487, + "rating": 4, + "ratingImageUrl": "https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.0-15458-5.svg", + "webUrl": "https://www.tripadvisor.com/Hotel_Review-g189530-d2166717-Reviews-Scandic_Aarhus_City-Aarhus_East_Jutland_Jutland.html?m=15458", + "awards": [] + } + }, + "address": { + "streetAddress": "Østergade 10", + "city": "Aarhus", + "zipCode": "8000", + "country": "Denmark" + }, + "contactInformation": { + "phoneNumber": "+45 89318100", + "faxNumber": "+45 89318111", + "email": "aarhuscity@scandichotels.com", + "websiteUrl": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city" + }, + "hotelFacts": { + "checkin": { + "checkInTime": "15:00", + "checkOutTime": "12:00", + "onlineCheckout": false + }, + "ecoLabels": { + "euEcoLabel": false, + "greenGlobeLabel": false, + "nordicEcoLabel": true, + "svanenEcoLabelCertificateNumber": "5055 0095" + }, + "hotelFacilityDetail": { + "breakfast": { + "heading": "Breakfast", + "description": "Breakfast buffet is always included. It’s a tasty mix with healthy and allergy friendly alternatives." + }, + "checkout": { + "heading": "Check out", + "description": "The room is yours until 12:00 on your day of departure. If you wish to check out later than 12:00, please contact the reception (dial 9). \\r\\n \\r\\nWant to avoid queuing at check-out? Look out for an email or text on how to check out easily online." + }, + "gym": { + "heading": "Gym", + "description": "Our beds are comfy, but a workout will cheer you up as well. Have a run on the treadmill or work out in our well-equipped gym – it’s free when staying with us." + }, + "internet": { + "heading": "Internet", + "description": "Free Wi-Fi: Scandic easy. Open your web browser and click to connect!" + }, + "laundry": { + "heading": "Laundry", + "description": "Got laundry that needs taking care of? Just dial 9 for the reception, and we’ll take care of it." + }, + "luggage": { + "heading": "Luggage", + "description": "Do you need to store any luggage after check out? Speak to the reception and we’ll store it for you." + }, + "shop": { + "heading": "Shop", + "description": "When the craving sets in, there’s freshly brewed coffee and lighter meals in our shop to bring up to your room. You can also find necessities such as a toothbrush. \\r\\n \\r\\nOur shop is open around the clock, you will find it next to the reception." + }, + "telephone": { + "heading": "Telephone", + "description": "In case of emergency dial 112 (police, ambulance, fire)." + } + }, + "hotelInformation": { + "accessibility": { + "heading": "Accessibility", + "description": "With the help of smart solutions, we design hotels where all of our guests can be happy. We prioritize accessibility in both our newly built and renovated hotels, constantly improving the standard of what we can offer. As well as technical solutions and practical matters, we believe in care and consideration.", + "link": "https://www.youtube.com/v/7CC38NXYgQk" + }, + "safety": { + "heading": "Safety Information", + "description": "


Once you have settled into your room – make sure you know where you are in the building!
• Study the evacuation plan on the back of the door.
• Check where your nearest emergency exit is
located, for example stairs leading outside.
• Count how many doors there are between your
room and the nearest emergency exit – so you
can find your way even in the dark.
• Check where the fire alarm button and fire
extinguishers are located.

If you discover a fire or smell burning
• If the corridor is full of smoke – stay in your room.
Alert reception or call the emergency number 112.
• Always take a room key with you when you leave
your room. You may come across smoke and need
to go back.
• If the fire is small and limited – use one of the fire
extinguishers located in the corridor.
• If you cannot put out the fire, close the door to the
room that is on fire.

If you hear the fire alarm
• Leave your room if the corridor is free from smoke.
• Take your room key with you and go to the
assembly point via the nearest emergency exit.
• Never use the elevator.

If you cannot leave your room
• Call reception or 112 and explain that you are
stuck in your room. Give them your room number.
• Seal ventilation openings and gaps around the
door with wet towels.
• Move all flammable material away from the
window.
• Go to the window and try to attract attention.
• If the room becomes smoky – open the window
to get some air in.
• Do not jump – wait for instructions from the
rescue services.
• You will see best and breathe most easily near
the floor in a smoke-filled room.

First aid
• A defibrillator (AED) and a first aid kit are available
in reception.

" + }, + "sustainability": { + "heading": "Sustainability Information", + "description": "In 1993, Scandic decided to become a leader in sustainability and drive the development of sustainability in the hotel sector. It was at Scandic that the idea to “hang up your towel if you want to use it again” was formed – an idea that is now the standard in the hotel industry around the world. Sustainability is a part of our values – an integral element of all of the operations that Scandic’s team members manifest in daily work.", + "link": "https://www.youtube.com/watch?v=0td9PfNfT1A" + } + }, + "interior": { + "numberOfBeds": 560, + "numberOfCribs": 15, + "numberOfFloors": 5, + "numberOfRooms": { + "connected": 20, + "forAllergics": 228, + "forDisabled": 25, + "nonSmoking": 228, + "pet": 0, + "withExtraBeds": 97, + "total": 228 + } + }, + "receptionHours": { + "alwaysOpen": true, + "isClosed": false, + "openingTime": "", + "closingTime": "" + }, + "yearBuilt": "2012" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.15418, + "longitude": 10.20514 + }, + "hotelContent": { + "images": { + "metaData": { + "title": "Superior Plus Room", + "altText": "superior plus room at scandic aarhus city", + "altText_En": "superior plus room at scandic aarhus city", + "copyRight": "Jesper Rais" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5a5q6ohz5r7xsjxul93n/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ligackcxnyzwmrqmwaqu/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ri4v32ww2rptlj4jzcix/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bxdcn0niti16cmxyzmdz/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg" + } + }, + "texts": { + "facilityInformation": "City break, romantic stay, conference or networking with colleagues and friends? Scandic Aarhus City has it all! Pamper yourself and your family with a few days at our contemporary hotel in the heart of Aarhus, decorated in a Scandinavian style. Treat your tastebuds to a delicious steak from our hotel restaurant, L'øst. Our bar is a cosy place to relax if you're in the mood for an after-work drink, and is a popular meeting place for our guests and locals. From some of our top floor guest rooms, you can enjoy the view of Aarhus City, catching a glimpse of ARoS art museum and its well-known work of art 'The Rainbow', Aarhus harbour as well as the forests and beaches. There are solar panels on the roof that supply our hotel with 90% of the electricity used in our rooms. In the summer, we recommend our homemade honey at the buffet breakfast which comes from bee hives located up on our roof. Our hotel is also one of Denmark’s most accessible hotels, with 25 accessible rooms and it has a fully accessible conference area with modern audiovisual equipment. If you're in the mood for sightseeing and exercise, you can borrow one of our Scandic bicycles and explore Aarhus City on two wheels. You can also increase your heart rate in our modern fitness facilities, which are located below our reception. ", + "surroundingInformation": "You won’t find a place closer to the centre of Aarhus and its many shopping opportunities, cosy cafés and restaurants, as well as sights and attractions, such as Den Gamle By (The Old Town) and ARoS. Scandic Aarhus City is located in Ostergade, and right outside our hotel you'll find 'Strøget', the pedestrian street of Aarhus. Aarhus train station and bus station are just a short distance from our hotel.", + "descriptions": { + "short": "The hotel that has everything! Central location, popular restaurant - L'øst - modern decor, fitness facilities and underground parking. \n", + "medium": "Modern hotel in the heart of Aarhus close to shopping, attractions and transportation. One of our best hotels whether you travel on weekdays or enjoy a weekend break. Don't miss out on a juicy steak in our popular restaurant, L'øst.\n" + } + }, + "restaurantsOverviewPage": { + "restaurantsOverviewPageLinkText": "", + "restaurantsOverviewPageLink": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city/restaurant-bar", + "restaurantsContentDescriptionShort": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. We promise that once you've visited L’øst, you'll return over and over again. ", + "restaurantsContentDescriptionMedium": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. With a fondness for local produce, the menu changes with the season to always offer you the freshest ingredients. " + } + }, + "detailedFacilities": [ + { + "id": 1829, + "name": "Gym", + "code": "HEA - TRAI", + "applyToAllHotels": false, + "public": true, + "icon": "Gym", + "iconName": "Gym", + "sortOrder": 1700 + }, + { + "id": 1406, + "name": "Parking - additional cost", + "code": "PAR", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1378, + "name": "Room service", + "code": "ROO - R/S", + "applyToAllHotels": false, + "public": true, + "icon": "RoomService", + "sortOrder": 400 + }, + { + "id": 1017, + "name": "Meeting rooms", + "code": "MEE", + "applyToAllHotels": false, + "public": true, + "icon": "Meeting", + "sortOrder": 9000 + }, + { + "id": 2072, + "name": "Disabled parking", + "code": "DPA", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1014, + "name": "Bar", + "code": "BAR", + "applyToAllHotels": false, + "public": true, + "icon": "Bar", + "sortOrder": 1600 + }, + { + "id": 1607, + "name": "Golf course (0-30 km)", + "code": "GOLF", + "applyToAllHotels": false, + "public": false, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1833, + "name": "Free WiFi", + "code": "IHF", + "applyToAllHotels": false, + "public": true, + "icon": "FreeWiFi", + "sortOrder": 1900 + }, + { + "id": 1834, + "name": "Laundry service", + "code": "LAU", + "applyToAllHotels": false, + "public": true, + "icon": "LaundryService", + "sortOrder": 200 + }, + { + "id": 1835, + "name": "Pet-friendly rooms", + "code": "PET", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1383, + "name": "Restaurant", + "code": "-", + "applyToAllHotels": false, + "public": true, + "icon": "Restaurant", + "sortOrder": 6000 + }, + { + "id": 1408, + "name": "Scandic Shop 24 hrs", + "code": "SHOP", + "applyToAllHotels": false, + "public": true, + "icon": "Shop", + "sortOrder": 100 + }, + { + "id": 5806, + "name": "Meeting / conference facilities", + "code": "MEE - MEETING ", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 1500 + }, + { + "id": 971, + "name": "Shopping", + "code": "-", + "applyToAllHotels": false, + "public": false, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 956, + "name": "Coffee shop", + "code": "COF", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1913, + "name": "Overnight security", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 229144, + "name": "TV with Chromecast", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + }, + { + "id": 1407, + "name": "Serves breakfast (always included)", + "code": "-", + "applyToAllHotels": false, + "public": true, + "icon": "None", + "sortOrder": 0 + } + ], + "healthFacilities": [ + { + "type": "Gym", + "content": { + "images": [], + "texts": { + "descriptions": { + "short": "", + "medium": "" + } + } + }, + "openingDetails": { + "useManualOpeningHours": false, + "openingHours": { + "ordinary": { + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:00", + "closingTime": "22:00" + }, + "weekends": { + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:00", + "closingTime": "22:00" + } + } + }, + "details": [ + { + "name": "ExternalGym", + "type": "Boolean", + "value": "False" + }, + { + "name": "NameOfExternalGym", + "type": "String" + }, + { + "name": "DistanceToExternalGym", + "type": "Int32", + "value": "0" + } + ] + } + ], + "rewardNight": { + "points": 40000, + "campaign": { + "start": "2020-11-30 23:00:00", + "end": "2020-12-30 23:00:00", + "points": 40000 + } + }, + "pointsOfInterest": [ + { + "name": "Strøget", + "distance": 0, + "category": { + "name": "Transportations", + "group": "Trains" + }, + "location": { + "distanceToCentre": 0, + "latitude": 55.96626, + "longitude": 9.388983 + }, + "isHighlighted": true + }, + { + "name": "ARoS", + "distance": 0.4, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.15392, + "longitude": 10.199716 + }, + "isHighlighted": true + }, + { + "name": "DSB", + "distance": 0.7, + "category": { + "name": "Transportations", + "group": "Trains" + }, + "location": { + "distanceToCentre": 0, + "latitude": 55.8628, + "longitude": 9.83647 + }, + "isHighlighted": true + }, + { + "name": "Den gamle by", + "distance": 1.2, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.158783, + "longitude": 10.192115 + }, + "isHighlighted": true + }, + { + "name": "Tivoli Friheden", + "distance": 2.7, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.1366, + "longitude": 10.197853 + }, + "isHighlighted": true + }, + { + "name": "Moesgaard Museum", + "distance": 9.4, + "category": { + "name": "Museum", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.088715, + "longitude": 10.223502 + }, + "isHighlighted": true + }, + { + "name": "Randers Regnskov", + "distance": 39, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.457123, + "longitude": 10.032533 + }, + "isHighlighted": true + }, + { + "name": "Aarhus Airport", + "distance": 40, + "category": { + "name": "Airport", + "group": "Airport" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.30823, + "longitude": 10.626351 + }, + "isHighlighted": true + }, + { + "name": "Djurs sommerland", + "distance": 48, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.425213, + "longitude": 10.550971 + }, + "isHighlighted": true + }, + { + "name": "Skandinavisk Dyrepark", + "distance": 49, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.340668, + "longitude": 10.649598 + }, + "isHighlighted": true + }, + { + "name": "Ree Park", + "distance": 54, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 56.26301, + "longitude": 10.738092 + }, + "isHighlighted": true + }, + { + "name": "Legoland", + "distance": 95, + "category": { + "name": "Tourist", + "group": "Star" + }, + "location": { + "distanceToCentre": 0, + "latitude": 55.73551, + "longitude": 9.126805 + }, + "isHighlighted": true + } + ], + "parking": [ + { + "type": "Garage", + "name": "Q-park", + "address": "Hans Hartvig Seedorf Stræde", + "numberOfChargingSpaces": 5, + "distanceToHotel": 0, + "canMakeReservation": false, + "pricing": { + "freeParking": false, + "paymentType": "CanBePaidAtTheHotel", + "localCurrency": { + "currency": "DKK", + "range": { + "min": 200, + "max": 200 + }, + "ordinary": [ + { + "period": "Hour", + "amount": 28, + "startTime": "", + "endTime": "" + }, + { + "period": "Day", + "amount": 200, + "startTime": "", + "endTime": "" + }, + { + "period": "Night", + "amount": 200, + "startTime": "", + "endTime": "" + }, + { + "period": "AllDay", + "amount": 200, + "startTime": "00:00", + "endTime": "23:59" + } + ], + "weekend": [ + { + "period": "Hour", + "amount": 28, + "startTime": "", + "endTime": "" + }, + { + "period": "Day", + "amount": 200, + "startTime": "", + "endTime": "" + }, + { + "period": "Night", + "amount": 200, + "startTime": "", + "endTime": "" + }, + { + "period": "AllDay", + "amount": 200, + "startTime": "00:00", + "endTime": "23:59" + } + ] + } + } + } + ], + "specialNeedGroups": [ + { + "name": "Entrance", + "specialNeeds": [ + { + "name": "Clear direction signs if disabled entrance is located away from main entrance", + "details": "" + }, + { + "name": "Revolving doors at main entrance", + "details": "" + }, + { + "name": "Wide main entrance door (non revolving) with minimum width of 80 cm", + "details": "" + }, + { + "name": "Door/s can be opened automatically at main entrance (All Scandic)", + "details": "" + }, + { + "name": "Night time door bell accessible from wheelchair (max height 120 cm) (All Scandic)", + "details": "" + }, + { + "name": "No threshold at entrance door (All Scandic)", + "details": "" + }, + { + "name": "Seating available close to main entrance (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Public areas - Other", + "specialNeeds": [ + { + "name": "Corridors in hotel accessible with wheelchair", + "details": "" + }, + { + "name": "At least one computer work station that is accessible for wheelchair users (All Scandic)", + "details": "" + }, + { + "name": "Clear passage to the Scandic Shop with wheelchair (All Scandic)", + "details": "" + }, + { + "name": "Service / guide dogs allowed in hotel (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Meeting areas", + "specialNeeds": [ + { + "name": "Disability toilet available in meeting and conference areas", + "details": "" + }, + { + "name": "Meeting and conference floor / area accessible with wheelchair", + "details": "" + }, + { + "name": "Meeting room door with minimum 80 cm width", + "details": "" + }, + { + "name": "Number of disability toilets available", + "details": "1" + }, + { + "name": "Seating available outside meeting room/s", + "details": "" + }, + { + "name": "Clear signage of hearing loop in meeting and conference areas (All Scandic)", + "details": "" + }, + { + "name": "Portable hearing loop available for meeting rooms (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Disability rooms", + "specialNeeds": [ + { + "name": "Bed can be adjusted for legs and back", + "details": "" + }, + { + "name": "Bed height is 55 cm from floor to top of mattress", + "details": "" + }, + { + "name": "Bed on legs", + "details": "" + }, + { + "name": "Wardrobe without doors or with sliding doors", + "details": "" + }, + { + "name": "Light switch reachable from wheelchair", + "details": "" + }, + { + "name": "Minimum of 80 cm free floor space around the bed", + "details": "" + }, + { + "name": "Wooden floors in room", + "details": "" + }, + { + "name": "Number of disability rooms", + "details": "25" + }, + { + "name": "Space under desk accessible for wheelchairs (All Scandic)", + "details": "" + }, + { + "name": "Rail for coat hanger at max height 120 cm (All Scandic)", + "details": "" + }, + { + "name": "TV remote on side table (all scandic hotels)", + "details": "" + }, + { + "name": "Wardrobe shelf accessible from wheelchair (All Scandic)", + "details": "" + }, + { + "name": "Width of corridor in room is at least 80 cm (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Disability rooms - bathroom", + "specialNeeds": [ + { + "name": "Accessible bathtubs", + "details": "" + }, + { + "name": "Alarm / Emergency codes or buttons in bathroom", + "details": "" + }, + { + "name": "Available free space in bathroom", + "details": "size" + }, + { + "name": "No threshold into bathroom", + "details": "" + }, + { + "name": "Other height of wash basin", + "details": "No" + }, + { + "name": "Other width of bathroom door", + "details": "size" + }, + { + "name": "Shower glass wall", + "details": "" + }, + { + "name": "Single lever basin mixer", + "details": "" + }, + { + "name": "Sliding doors into bathroom", + "details": "" + }, + { + "name": "Thermostatic mixer in shower", + "details": "" + }, + { + "name": "Wash basin minimum height 78 cm", + "details": "" + }, + { + "name": "Width of bathroom door is at least 80 cm wide", + "details": "" + }, + { + "name": "Width of shower glass wall passage", + "details": "Ajustable" + }, + { + "name": "Bathroom towels reachable from wheelchair (All Scandic)", + "details": "" + }, + { + "name": "Handrail on the inside of the bathroom door if door opens outwards (All Scandic)", + "details": "" + }, + { + "name": "Hooks reachable from wheelchair (All Scandic)", + "details": "" + }, + { + "name": "Shower handle placed in its lowest position when guest arrives (All Scandic)", + "details": "" + }, + { + "name": "Shower stool available (All Scandic)", + "details": "" + }, + { + "name": "Shower creme / shampoo dispenser in shower reachable from wheelchair (All Scandic)", + "details": "" + }, + { + "name": "Space under wash basin accessible for wheelchairs (All Scandic)", + "details": "" + }, + { + "name": "Toilet paper reachable from toilet (All Scandic)", + "details": "" + }, + { + "name": "View in mirror from wheelchair (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Public areas - Reception", + "specialNeeds": [ + { + "name": "One part of reception counter is of appropriate height for guests in wheelchairs", + "details": "" + }, + { + "name": "Seating and table available close to front desk", + "details": "" + }, + { + "name": "Cane holders at front desk (All Scandic)", + "details": "" + }, + { + "name": "Clear signs of hearing loop and wake up alarm (All Scandic)", + "details": "" + }, + { + "name": "Clear walkway between reception and lifts (All Scandic)", + "details": "" + }, + { + "name": "Clear walkway to reception from entrance (All Scandic)", + "details": "" + }, + { + "name": "Hearing induction loop in reception desk (All Scandic)", + "details": "" + }, + { + "name": "Vibrating wake up/fire alarm device can be borrowed from hotel reception (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Public areas - Restaurant and bar", + "specialNeeds": [ + { + "name": "Buffet breakfast has appropriate height (max 90 cm) for guests in wheelchairs", + "details": "" + }, + { + "name": "Level differences in restaurant", + "details": "" + }, + { + "name": "Other width of walkway to restaurant", + "details": "Elevator between" + }, + { + "name": "Walkway to bar is at least 100 cm wide", + "details": "" + }, + { + "name": "Walkway to restaurant is at least 100 cm wide", + "details": "" + }, + { + "name": "Access ramp or lift in restaurant", + "details": "" + }, + { + "name": "Special needs menu", + "details": "" + }, + { + "name": "Braille / large print menus", + "details": "" + } + ] + }, + { + "name": "Public areas - Lifts and stairs", + "specialNeeds": [ + { + "name": "At least one lift with door widht of 80 cm when open", + "details": "" + }, + { + "name": "Control panel buttons marked in Braille inside lift", + "details": "" + }, + { + "name": "Voice announciation for floor indication and direction of travel", + "details": "" + }, + { + "name": "First and last steps in stairs are clearly marked (contrasting colours or grooved steps)", + "details": "" + }, + { + "name": "Door opener or automatic door/s avaliable for lift", + "details": "" + } + ] + }, + { + "name": "Public areas - Public toilets", + "specialNeeds": [ + { + "name": "Accessible bathroom/s available in public areas", + "details": "" + }, + { + "name": "Alarm / Emergency codes or buttons in bathroom", + "details": "" + }, + { + "name": "Bathroom door is at least 80 cm wide", + "details": "" + }, + { + "name": "Foldable armrests by the toilet", + "details": "" + }, + { + "name": "Hooks reachable from wheelchair", + "details": "" + }, + { + "name": "Number of disability bathrooms available", + "details": "4" + }, + { + "name": "Wash basin minimum height of 78 cm", + "details": "" + }, + { + "name": "Handrail on inside of bathroom door/s if door/s open outwards", + "details": "" + }, + { + "name": "Space under wash basin accessible for wheelchairs", + "details": "" + } + ] + }, + { + "name": "Parking", + "specialNeeds": [ + { + "name": "Clear illuminated and defined path between parking and entrance", + "details": "" + }, + { + "name": "Disabled parking", + "details": "" + }, + { + "name": "Distance from parking to entrance (m)", + "details": "10 meters" + }, + { + "name": "Number of disabled parking bays with min width of 3.6 m each", + "details": "2" + }, + { + "name": "Parking bays clearly marked with disabled symbols", + "details": "X" + }, + { + "name": "Level differences in path from parking to hotel", + "details": "Basement" + } + ] + }, + { + "name": "Other", + "specialNeeds": [ + { + "name": "Staff trained to cater for disabled guests (All Scandic)", + "details": "" + } + ] + }, + { + "name": "Allergy-friendly rooms", + "specialNeeds": [ + { + "name": "Bed linen and towels are washed with eco-friendly detergent", + "details": "" + }, + { + "name": "Cleaning according to the cleaning concept for allergy room", + "details": "" + }, + { + "name": "In the room there has been no smoking or fur animals", + "details": "" + }, + { + "name": "Unscented bathroom products labeled with Asthma Allergy Nordic", + "details": "" + }, + { + "name": "The pillows / quilts are made of synthetic material", + "details": "" + }, + { + "name": "The rooms are located on a separate floor or in a separate corridor where there are no fur animals", + "details": "" + }, + { + "name": "The rooms are not freshly painted in the last three months.", + "details": "" + }, + { + "name": "The rooms have no bedspreads/bed blankets or decorative cushions", + "details": "" + }, + { + "name": "The rooms have windows that can be opened (a ventilation window is enough)", + "details": "" + }, + { + "name": "The rooms have wooden floors", + "details": "" + } + ] + } + ], + "socialMedia": { + "instagram": "", + "facebook": "https://www.facebook.com/ScandicAarhusCity" + }, + "meta": { + "specialAlerts": [ + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-06-01", + "endDate": "2023-06-11" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2022-09-02", + "endDate": "2022-09-21" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-04-20", + "endDate": "2023-05-01" + }, + { + "type": "Hotel", + "displayInBookingFlow": true, + "startDate": "2023-11-16", + "endDate": "2023-12-24" + } + ] + }, + "isActive": true, + "gallery": { + "heroImageIds": [ + { + "metaData": { + "title": "Facade", + "altText": "Facade", + "altText_En": "Facade", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oue3sg5sq0l6jg7kr4b3/scandic-aarhuscity-facade-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/kbmjiiazxjfp647krfnr/scandic-aarhuscity-facade-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5icsc3n1wj1ugyr7056b/scandic-aarhuscity-facade-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/6zh46dvzs8htl7zlqo96/scandic-aarhuscity-facade-1.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "Meeting break out area", + "altText_En": "Meeting break out area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, twin upgrade superior", + "altText_En": "Scandic Aarhus City, twin upgrade superior", + "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/1ss15jncd6oln7vk73ke/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/y0ez2j8yi09htncdk39r/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eyzfuqarqfgj21ywtrfh/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kw5n250ep7zf40e1e0d2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" + } + }, + { + "metaData": { + "title": "Scandic Aarhus City, Twin Superior Extra Room", + "altText": "Scandic Aarhus City, Twin Superior Extra Room", + "altText_En": "Scandic Aarhus City, Twin Superior Extra Room", + "copyRight": "Holger Fell/ Panobyte, International" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/x1es4vcav0eeh51ka16o/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/8c9gr0thdsit081bmya6/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/dmw3mmfjzl3ozgo20i7j/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/sh8e1hy5xklr7tdqr99t/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg" + } + }, + { + "metaData": { + "title": "The Lobby at Scandic Aarhus City decorated for banquet.", + "altText": "The Lobby at Scandic Aarhus City decorated for banquet.", + "altText_En": "The Lobby at Scandic Aarhus City decorated for banquet.", + "copyRight": "Mads Armgaard." + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/91h0u60tswog6v99nfjt/GAB4060_Scandic_AarhusC_081.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/c6dadqj45ymxwiyrc3ki/GAB4060_Scandic_AarhusC_081.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4mdviknekg0o6b7pl3l3/GAB4060_Scandic_AarhusC_081.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/4cebd4qyq68oixx060fw/GAB4060_Scandic_AarhusC_081.jpg" + } + }, + { + "metaData": { + "title": "Riisskov 2, Meeting room", + "altText": "Conference room Riis Skov 2", + "altText_En": "Conference room Riis Skov 2", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" + } + } + ], + "smallerImageIds": [ + { + "metaData": { + "title": "Facade", + "altText": "Facade", + "altText_En": "Facade", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oue3sg5sq0l6jg7kr4b3/scandic-aarhuscity-facade-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/kbmjiiazxjfp647krfnr/scandic-aarhuscity-facade-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5icsc3n1wj1ugyr7056b/scandic-aarhuscity-facade-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/6zh46dvzs8htl7zlqo96/scandic-aarhuscity-facade-1.jpg" + } + }, + { + "metaData": { + "title": "Reception", + "altText": "Scandic Aarhus City, reception", + "altText_En": "Scandic Aarhus City, reception", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/72p1zeys0w32zsenz30l/Scandic-Aarhus-City-Interior-reception001.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/8jxws1syuvk7capdy610/Scandic-Aarhus-City-Interior-reception001.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/911lkjady9iypykkm0uv/Scandic-Aarhus-City-Interior-reception001.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/i1waz04uj0zrcwu7j7e3/Scandic-Aarhus-City-Interior-reception001.jpg" + } + }, + { + "metaData": { + "title": "Lobby", + "altText": "Scandic Aarhus City, foyer, lobby, sofa, relax area", + "altText_En": "Scandic Aarhus City, foyer, lobby, sofa, relax area", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zgb3kdpvwj4fx5wjrmke/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/yl758o6wu106c9jz7c9u/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zk25k8l209tfmyq8hlce/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1ysbbvv5eipcq25mj90v/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg" + } + }, + { + "metaData": { + "title": "Lobby area", + "altText": "Lobby", + "altText_En": "Lobby", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/26fh6i19a5l7gm2n3w1y/scandic-aarhuscity-conference-meetingarea-1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/njgwk2z067p0v2h0rrn3/scandic-aarhuscity-conference-meetingarea-1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ab925f1lxwzgl9moy6zd/scandic-aarhuscity-conference-meetingarea-1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tfuua9cu4lrbi4mvmwgk/scandic-aarhuscity-conference-meetingarea-1.jpg" + } + }, + { + "metaData": { + "title": "Room", + "altText": "Scandic Aarhus City, Connection Door", + "altText_En": "Scandic Aarhus City, Connection Door", + "copyRight": "Holger Fell" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ul98bsotsm7cr1acglkc/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/gkyd2ywbt1g0fecgjore/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/e2oc4harp8snd1xai9tj/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ao9q1gchhg5ge8snmwb5/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg" + } + }, + { + "metaData": { + "title": "Family standard", + "altText": "Scandic Aarhus City, family four, desk, wardrobe", + "altText_En": "Scandic Aarhus City, family four, desk, wardrobe", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/a4kesi5jgj8brhalaa7f/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/lpe6lp0eilx03qnr8pcs/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/spvn9vyfrrav79guena3/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nhqb0fg27x2c1wc0fs1q/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg" + } + }, + { + "metaData": { + "title": "Aarhus City, Family Four", + "altText": "Aarhus City, Family Four", + "altText_En": "Aarhus City, Family Four", + "copyRight": "" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/wp7y9ab0vj8d0kpc8bd5/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9tgp31dw1asf6hn7sc4c/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/6n2n0rke2k2v07jjxw49/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/snzvs5vxo3zawguyi1l1/Scandic-Aarhus-City-Interior-room-Family-Four.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, twin upgrade superior, bathroom, Face", + "altText_En": "Scandic Aarhus City, twin upgrade superior, bathroom, Face", + "copyRight": "Mads Armsgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m79exezkqfgdpftty20x/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/sca61rw646fiea2ikonk/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/vnzbzqb1e3vq0t5rm1s2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/884z5n7f1v8zpg6dc527/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" + } + }, + { + "metaData": { + "title": "Standard room", + "altText": "Scandic Aarhus, standard, old building", + "altText_En": "Scandic Aarhus, standard, old building", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v2vvabswxgkj419dfeb8/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/4rjvciiy0jvqaw45gtzl/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/egvy9c7u8dbwwo7dyl5j/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/dmci1lrzfkktt4gjqmxo/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, room, superior #572", + "altText_En": "Scandic Aarhus City, room, superior #572", + "copyRight": "Mads Armgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5ck0n7br57gjyvd8ynqu/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n9y8vz0e0ro3n2np9dvs/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/e6kbe16j9uuvpsll6k0n/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ynwz3bmxdjdjzlpbk8x6/Scandic-Aarhus-City-Interior-room-superior-_572.jpg" + } + }, + { + "metaData": { + "title": "Junior suite", + "altText": "Scandic Aarhus City, suite, bed", + "altText_En": "Scandic Aarhus City, suite, bed", + "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/whmp3nhocemnvyxz8fe5/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/p2pua3p8b9scjaza7r96/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/th6jbykk6mu3qdkkgqxd/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/v1j0xdek0kvtmudhie1j/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, twin upgrade superior", + "altText_En": "Scandic Aarhus City, twin upgrade superior", + "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/p8fhk8rmt1ivf5n74jhy/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ki8rf76v78elsuh6ymzb/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/k6nkn5r4158jyholqmv0/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/p9mtckamqq3dj265xgmg/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" + } + }, + { + "metaData": { + "title": "Hallway", + "altText": "Scandic Aarhus, corridor", + "altText_En": "Scandic Aarhus, corridor", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography, Vermundsgade 40A, 3929 2600, mads@gab.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/6xc10p3mouxec0vt4wjr/Scandic-Aarhus-City-Interior-corridor.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/72g50ktvpyur144vbe22/Scandic-Aarhus-City-Interior-corridor.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/kwogcjk2e4x7pjdkuw8x/Scandic-Aarhus-City-Interior-corridor.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1eulj18pzhjxhgrzqvok/Scandic-Aarhus-City-Interior-corridor.jpg" + } + }, + { + "metaData": { + "title": "Standard bathroom", + "altText": "Scandic Aarhus, standard, bathroom, tub", + "altText_En": "Scandic Aarhus, standard, bathroom, tub", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/lmga5ngxn0glm5sotgvm/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9vq21yenvqnlzpe5m52g/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/lzpy7306vs3fwx9ydp83/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/p7icwhfl5zat0ez8kslg/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg" + } + }, + { + "metaData": { + "title": "Junior suite", + "altText": "Scandic Aarhus City, suite", + "altText_En": "Scandic Aarhus City, suite", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/pnv0fogpsewae4f0wfjd/Scandic-Aarhus-City-Interior-room-suite.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n3rn2q4wtrplx8cengnx/Scandic-Aarhus-City-Interior-room-suite.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/vrogid30l06keair1l0t/Scandic-Aarhus-City-Interior-room-suite.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/yhixhovp5v3456d4o5de/Scandic-Aarhus-City-Interior-room-suite.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, twin upgrade superior", + "altText_En": "Scandic Aarhus City, twin upgrade superior", + "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/1ss15jncd6oln7vk73ke/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/y0ez2j8yi09htncdk39r/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eyzfuqarqfgj21ywtrfh/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kw5n250ep7zf40e1e0d2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" + } + }, + { + "metaData": { + "title": "Junior suite", + "altText": "Scandic Aarhus City, suite, view, living room, Aros", + "altText_En": "Scandic Aarhus City, suite, view, living room, Aros", + "copyRight": "Mads Armsgaard" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/hjcav94mfqsen42rtrzj/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/yftxxd70z47ftz954cde/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/pokvg6kvcyt2wwkahukd/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/hznhcypykdqo0mgd8coa/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg" + } + }, + { + "metaData": { + "title": "Superior Extra ", + "altText": "Scandic Aarhus City, room, superior extra #327", + "altText_En": "Scandic Aarhus City, room, superior extra #327", + "copyRight": "Mads Armgaard /Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ncgmjx5mcsvtirn7prhd/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/hc6lmyt1icdb1s9fwydq/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/opd51xpws6o5fn7yttj5/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xome9calxeibetjoustz/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg" + } + }, + { + "metaData": { + "title": "Superior room", + "altText": "Scandic Aarhus City, twin upgrade superior, chairs", + "altText_En": "Scandic Aarhus City, twin upgrade superior, chairs", + "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/0lzyey5fuqhfujf5istt/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/09ngmn2wlz0ix2f745j3/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/87qn9fxino4etw9gulgs/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ve8rodorvy38gtlaxuy7/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" + } + }, + { + "metaData": { + "title": "Restaurant L'øst", + "altText": "Scandic Aarhus City, L'øst", + "altText_En": "Scandic Aarhus City, L'øst", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/9g4xnhm0v5s25lb74id7/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/o4r0ckp2auxdgquo2olx/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ssdr10hmos6xw0d4jmws/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ce5ye6zyg6kwqhnif2j9/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg" + } + }, + { + "metaData": { + "title": "Restaurant L'øst", + "altText": "Scandic Aarhus City, L'øst", + "altText_En": "Scandic Aarhus City, L'øst", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m1dfdf43ukzavkaqlre2/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/2lvmjlhsqbpgp4ak0l30/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/nj26nm70lyeat7up7gzc/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tdrk53sa9cw5opkefjy5/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg" + } + }, + { + "metaData": { + "title": "Restaurant The Grill", + "altText": "Scandic Aarhus City, restaurant, The Grill 1st floor", + "altText_En": "Scandic Aarhus City, restaurant, The Grill 1st floor", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/jt0t3r46a6clsji5sylh/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/h3a7a2jlu12dnshaplql/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/i36fnz7h9zgq27lcok94/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/n5csi1uhv6xda8xkad8j/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg" + } + }, + { + "metaData": { + "title": "Bar", + "altText": "Scandic Aarhus City, bar", + "altText_En": "Scandic Aarhus City, bar", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/0pz56b8r11b5a6617mdd/Scandic-Aarhus-City-Interior-bar.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/zahnrlokna4s813l550w/Scandic-Aarhus-City-Interior-bar.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/twpu573k2l2mugtyqama/Scandic-Aarhus-City-Interior-bar.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nby7ch6pktzke94kkuym/Scandic-Aarhus-City-Interior-bar.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "Meeting break out area", + "altText_En": "Meeting break out area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" + } + }, + { + "metaData": { + "title": "Mosegaard 1, Meeting room", + "altText": "", + "altText_En": "", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/e8ddpkug14ees7n2ibsu/scandic-aarhuscity-conference-moesgard1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/t4gqi6bbbqqyqgw3nnt8/scandic-aarhuscity-conference-moesgard1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/npb4vwmgl9pd38t90vaq/scandic-aarhuscity-conference-moesgard1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/pla3ac423m80wb1w28ia/scandic-aarhuscity-conference-moesgard1.jpg" + } + }, + { + "metaData": { + "title": "Moesgaard 1+2, Meeting room", + "altText": "", + "altText_En": "", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/fjy6fw28d7huoz8gwgby/scandic-aarhuscity-conference-moesgard1_2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/6c4we75y8x5lc67wdqs7/scandic-aarhuscity-conference-moesgard1_2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/tvam2ieigbd8y573vxt3/scandic-aarhuscity-conference-moesgard1_2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bxwfopzmbdyejnv7qfs3/scandic-aarhuscity-conference-moesgard1_2.jpg" + } + }, + { + "metaData": { + "title": "Mosegaard 2, Meeting room", + "altText": "Meeting room Mosegaard 2", + "altText_En": "Meeting room Mosegaard 2", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zx4rdtcpps2reaw3g5hu/scandic-aarhuscity-conference-moesgard2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/hcs5zkcuf1x518j7jrbn/scandic-aarhuscity-conference-moesgard2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ulm33qthdovevi2lnxpo/scandic-aarhuscity-conference-moesgard2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/q4axu3oty3mtgg4yolog/scandic-aarhuscity-conference-moesgard2.jpg" + } + }, + { + "metaData": { + "title": "Mosegaard 3, Meeting room", + "altText": "Meeting room Mosegaard 3", + "altText_En": "Meeting room Mosegaard 3", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v6lx30xb7pj13th4fiy2/scandic-aarhuscity-conference-moesgard3.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/jssn7m4krash0xoj3h33/scandic-aarhuscity-conference-moesgard3.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5n2mfqcc8v8djf7kjzi8/scandic-aarhuscity-conference-moesgard3.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/zisup8n0ypdwxf7zcisa/scandic-aarhuscity-conference-moesgard3.jpg" + } + }, + { + "metaData": { + "title": "Riisskov 1, Meeting room", + "altText": "Meeting room Riis Skov 1", + "altText_En": "Meeting room Riis Skov 1", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/7glfbge7t65uak4pdpgp/scandic-aarhuscity-conference-riisskov1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/j6mv8idkv26pq08rlsjg/scandic-aarhuscity-conference-riisskov1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u1sf87ntk8zohyynvilm/scandic-aarhuscity-conference-riisskov1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bpzyzztpbqhtrq62kqx8/scandic-aarhuscity-conference-riisskov1.jpg" + } + }, + { + "metaData": { + "title": "Riisskov 2, Meeting room", + "altText": "Conference room Riis Skov 2", + "altText_En": "Conference room Riis Skov 2", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" + } + }, + { + "metaData": { + "title": "Meeting room Tangkrogen", + "altText": "Meeting room Tangkrogen", + "altText_En": "Meeting room Tangkrogen", + "copyRight": "" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/c1u1vsl4r66csugbbfz0/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9bdl461j91twwrdinstp/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/o9jkpr9ljxlpxe1hpf3c/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/vyfoyr10ire48o1b1680/Tangkrogen_meeting_Scandic-aarhus-city.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "Meeting area", + "altText_En": "Meeting area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5kr0flx1m6r1iklwg34x/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/nklz299xlyx26xa1ucpp/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zytdsh0joe4y00laxgq7/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/qnxfv2fqxybszya6xhx4/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "conference break out area", + "altText_En": "conference break out area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/23lmat50lcsagxqaziom/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/756dp95dec9vfyfkn3ju/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4rx8gqot47h1pa6dlnke/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/r158v77ivf859zzdrr7d/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" + } + }, + { + "metaData": { + "title": "Gym", + "altText": "Scandic Aarhus City, fitness facilities, gym", + "altText_En": "Scandic Aarhus City, fitness facilities, gym", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/dryyyc3z90bu0j9lxns2/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/3ga3bvv3i0q1c5158te4/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5hlwlfsl6616pw3wkvmd/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/rlgkzxcda7bq3381un05/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg" + } + }, + { + "metaData": { + "title": "Roof", + "altText": "Scandic Aarhus, roof, solar cells", + "altText_En": "Scandic Aarhus, roof, solar cells", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/bbam2qswl145lu1yjn6o/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n2lc8xkp73gvisvkz8uv/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/2fpulwq947lslssrntfy/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xmi8a7bm9b77u22c0ndw/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg" + } + }, + { + "metaData": { + "title": "Roof", + "altText": "Scandic Aarhus City, bees, roof, beehives", + "altText_En": "Scandic Aarhus City, bees, roof, beehives", + "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography, Vermundsgade 40A, 3929 2600, mads@gab.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/smkqhjrfso82rkktfed4/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/7lg8z5m98bj3fj8hepw4/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/lpz51rz6frk51poah36a/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tsly49q7qne8fxwy9u1b/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg" + } + } + ] + }, + "conferencesAndMeetings": { + "pageUrl": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city/meetings-conferences-events", + "heroImageIds": [ + { + "metaData": { + "title": "Scandic Aarhus City, lobby, foyer, sofa, relax area", + "altText": "Scandic Aarhus City, lobby, foyer, sofa, relax area", + "altText_En": "Scandic Aarhus City, lobby, foyer, sofa, relax area", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/2d885sgkx4exi20yjtdz/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/bwcr1fcmn2zkq9kx23n0/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xktoqjka52bmclbht85b/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/lmbslvxczewpaggpftll/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "Meeting break out area", + "altText_En": "Meeting break out area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "Meeting area", + "altText_En": "Meeting area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5kr0flx1m6r1iklwg34x/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/nklz299xlyx26xa1ucpp/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zytdsh0joe4y00laxgq7/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/qnxfv2fqxybszya6xhx4/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" + } + }, + { + "metaData": { + "title": "Mosegaard 3, Meeting room", + "altText": "Meeting room Mosegaard 3", + "altText_En": "Meeting room Mosegaard 3", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v6lx30xb7pj13th4fiy2/scandic-aarhuscity-conference-moesgard3.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/jssn7m4krash0xoj3h33/scandic-aarhuscity-conference-moesgard3.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5n2mfqcc8v8djf7kjzi8/scandic-aarhuscity-conference-moesgard3.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/zisup8n0ypdwxf7zcisa/scandic-aarhuscity-conference-moesgard3.jpg" + } + }, + { + "metaData": { + "title": "Riisskov 1, Meeting room", + "altText": "Meeting room Riis Skov 1", + "altText_En": "Meeting room Riis Skov 1", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/7glfbge7t65uak4pdpgp/scandic-aarhuscity-conference-riisskov1.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/j6mv8idkv26pq08rlsjg/scandic-aarhuscity-conference-riisskov1.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u1sf87ntk8zohyynvilm/scandic-aarhuscity-conference-riisskov1.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bpzyzztpbqhtrq62kqx8/scandic-aarhuscity-conference-riisskov1.jpg" + } + }, + { + "metaData": { + "title": "Riisskov 2, Meeting room", + "altText": "Conference room Riis Skov 2", + "altText_En": "Conference room Riis Skov 2", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" + } + }, + { + "metaData": { + "title": "Meeting area", + "altText": "conference break out area", + "altText_En": "conference break out area", + "copyRight": "Elin Strömberg © 2015" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/23lmat50lcsagxqaziom/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/756dp95dec9vfyfkn3ju/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4rx8gqot47h1pa6dlnke/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/r158v77ivf859zzdrr7d/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" + } + }, + { + "metaData": { + "title": "Meeting room Tangkrogen", + "altText": "Meeting room Tangkrogen", + "altText_En": "Meeting room Tangkrogen", + "copyRight": "" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/c1u1vsl4r66csugbbfz0/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9bdl461j91twwrdinstp/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/o9jkpr9ljxlpxe1hpf3c/Tangkrogen_meeting_Scandic-aarhus-city.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/vyfoyr10ire48o1b1680/Tangkrogen_meeting_Scandic-aarhus-city.jpg" + } + } + ] + }, + "healthAndWellness": { + "headingText": "Gym and wellness", + "heroImageIds": [ + { + "metaData": { + "title": "Gym", + "altText": "Scandic Aarhus City, fitness facilities, gym", + "altText_En": "Scandic Aarhus City, fitness facilities, gym", + "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/dryyyc3z90bu0j9lxns2/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/3ga3bvv3i0q1c5158te4/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5hlwlfsl6616pw3wkvmd/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/rlgkzxcda7bq3381un05/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg" + } + } + ] + }, + "accessibilityElevatorPitchText": "Find the information you might need, before visiting us. You are always welcome to our hotel - completely without barriers. Regardless of impairment, sight, hearing, allergies or wheelchair, we have made sure that you enjoy your stay." + }, + "relationships": { + "restaurants": { + "links": { + "related": "https://localhost:7149/hotel/vNext/Hotels/736/restaurants?language=En" + } + }, + "nearbyHotels": { + "links": { + "related": "https://localhost:7149/hotel/vNext/Hotels/736/nearbyHotels?language=En" + } + }, + "roomCategories": { + "links": { + "related": "https://localhost:7149/hotel/vNext/Hotels/736/roomCategories?language=En" + } + }, + "meetingRooms": { + "links": { + "related": "https://localhost:7149/hotel/vNext/Hotels/736/meetingRooms?language=En" + } + } + }, + "id": "736", + "language": "En", + "type": "hotels" + }, + "included": [ + { + "attributes": { + "name": "Lobby bar", + "isPublished": true, + "email": "aarhuscity@scandichotels.com", + "phoneNumber": "+45 89318132", + "externalBreakfast": { + "isAvailable": true, + "localPriceForExternalGuests": { + "currency": "DKK", + "amount": 129 + } + }, + "menus": [ + { + "name": "Bar - drinks 1 ", + "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest1&fileId=33396" + }, + { + "name": "Bar - beer 2", + "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest1&fileId=33586" + } + ], + "openingDetails": [ + { + "openingHours": { + "isActive": true, + "name": "Frokost", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + } + }, + "alternateOpeningHours": { + "isActive": false + } + }, + { + "openingHours": { + "isActive": true, + "name": "Bar", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "01:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "01:00" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "23:00" + } + }, + "alternateOpeningHours": { + "isActive": false + } + } + ], + "content": { + "images": [ + { + "metaData": { + "title": "", + "altText": "restaurant at scandic aarhus city i aarhus", + "altText_En": "restaurant at scandic aarhus city i aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/hbwas2u7f6zs2dsh47ss/Scandic_AarhusCity_RAIS4150.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9cq1cz90p0ymmt742xje/Scandic_AarhusCity_RAIS4150.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/1wsvmjunq96ho9nnnxji/Scandic_AarhusCity_RAIS4150.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xdrlyrqsu3mow4nxo7y1/Scandic_AarhusCity_RAIS4150.jpg" + } + }, + { + "metaData": { + "title": "", + "altText": "restaurant at scandic aarhus city i aarhus", + "altText_En": "restaurant at scandic aarhus city i aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/27a5cmmvuoxa55osqrvf/Scandic_AarhusCity_RAIS4183.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fa1obnw9e5vfn9ey7s4n/Scandic_AarhusCity_RAIS4183.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/dthkdducmf3myg7fw534/Scandic_AarhusCity_RAIS4183.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/mcwo3gumue7t7mftjz3n/Scandic_AarhusCity_RAIS4183.jpg" + } + }, + { + "metaData": { + "title": "", + "altText": "restaurant at scandic aarhus city i aarhus", + "altText_En": "restaurant at scandic aarhus city i aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/lci02wg7kar1nqyr1xr6/Scandic_AarhusCity_RAIS4416.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/aveu38u823x53l7ria31/Scandic_AarhusCity_RAIS4416.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/behrmlh75b26d2yj8kpv/Scandic_AarhusCity_RAIS4416.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nz7y2vurhsfwr8h4wfuw/Scandic_AarhusCity_RAIS4416.jpg" + } + }, + { + "metaData": { + "title": "", + "altText": "restaurant at scandic aarhus city in aarhus", + "altText_En": "restaurant at scandic aarhus city in aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/nepf6a77dd7hsoikv4zk/Scandic_AarhusCity_RAIS4088.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/xo9arvjalj57uk94luxz/Scandic_AarhusCity_RAIS4088.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/judduz7kdq2z1u0fi3bm/Scandic_AarhusCity_RAIS4088.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/3ghfcwspo8fas6qhl822/Scandic_AarhusCity_RAIS4088.jpg" + } + } + ], + "texts": { + "descriptions": { + "short": "You can enjoy delightful cocktails in our bar as well as freshly brewed coffee and fast, good food from our bar menu.", + "medium": "You can enjoy delightful cocktails in our bar as well as freshly brewed coffee and fast, good food from our bar menu. Our bar is also the ideal place for short, informal meetings, or if you want to get a little work done." + } + } + }, + "bookTableUrl": "" + }, + "id": "58e70dfe-f499-49ee-9ed8-365b18f83f40", + "type": "restaurants" + }, + { + "attributes": { + "name": "Restaurant L'øst", + "isPublished": true, + "email": "kontakt@restaurantloest.dk", + "phoneNumber": "+45 89318132", + "externalBreakfast": { + "isAvailable": true, + "localPriceForExternalGuests": { + "currency": "DKK", + "amount": 129 + } + }, + "menus": [ + { + "name": "Torsdags tilbud ", + "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=26785" + }, + { + "name": "Restaurant LØST (DK)", + "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=33503" + }, + { + "name": "Restaurant LØST (ENG)", + "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=33504" + } + ], + "openingDetails": [ + { + "openingHours": { + "isActive": true, + "name": "Morgenmad", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:30", + "closingTime": "10:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:30", + "closingTime": "10:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:30", + "closingTime": "10:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:30", + "closingTime": "10:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "06:30", + "closingTime": "10:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "07:00", + "closingTime": "10:30" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "07:00", + "closingTime": "10:30" + } + }, + "alternateOpeningHours": { + "isActive": false + } + }, + { + "openingHours": { + "isActive": true, + "name": "Frokost", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + } + }, + "alternateOpeningHours": { + "isActive": true, + "name": "Åbningstider i julen", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "17:00" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + } + } + }, + { + "openingHours": { + "isActive": true, + "name": "Aftensmad", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + } + }, + "alternateOpeningHours": { + "isActive": true, + "name": "Åbningstider i Julen", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "17:00", + "closingTime": "21:30" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": true, + "openingTime": "00:00", + "closingTime": "00:00" + } + } + }, + { + "openingHours": { + "isActive": true, + "name": "Bar", + "monday": { + "sortOrder": 0, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "tuesday": { + "sortOrder": 1, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "wednesday": { + "sortOrder": 2, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "thursday": { + "sortOrder": 3, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "00:00" + }, + "friday": { + "sortOrder": 4, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "01:00" + }, + "saturday": { + "sortOrder": 5, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "01:00" + }, + "sunday": { + "sortOrder": 6, + "alwaysOpen": false, + "isClosed": false, + "openingTime": "11:00", + "closingTime": "23:00" + } + }, + "alternateOpeningHours": { + "isActive": false + } + } + ], + "content": { + "images": [ + { + "metaData": { + "title": "", + "altText": "A plate of food", + "altText_En": "A plate of food", + "copyRight": "Martin Panduro" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/4sv8cdqzm6pqemor8ain/Aarhus_City_restaurant_M-R_47.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/d8jxg0aa01nn4oqb3x6i/Aarhus_City_restaurant_M-R_47.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/1utrq41tle88y8evkcee/Aarhus_City_restaurant_M-R_47.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/g5bpx7c3yz34rzk8gnj0/Aarhus_City_restaurant_M-R_47.jpg" + } + }, + { + "metaData": { + "title": "", + "altText": "resturant at scandic aarhus city in aarhus", + "altText_En": "resturant at scandic aarhus city in aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/fct5cg8hl6fg6h1mzv4u/Scandic_AarhusCity_RAIS3914.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/eodsbcb23ne6myf3yz8c/Scandic_AarhusCity_RAIS3914.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u5y6uxtyey6fmwl3cqg8/Scandic_AarhusCity_RAIS3914.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/mnqk0sq94qqyw7jjef2r/Scandic_AarhusCity_RAIS3914.jpg" + } + }, + { + "metaData": { + "title": "", + "altText": "resturant at scandic aarhus city in aarhus", + "altText_En": "resturant at scandic aarhus city in aarhus", + "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" + }, + "imageSizes": { + "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ufs5o8yll7a9l8hp7kb0/Scandic_AarhusCity_RAIS3859.jpg", + "small": "https://test3.scandichotels.com/imagevault/publishedmedia/352awehiat22q32nweu6/Scandic_AarhusCity_RAIS3859.jpg", + "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/03rkkuihjo4yxviagqt1/Scandic_AarhusCity_RAIS3859.jpg", + "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1g28u0b86nufm38c3xwg/Scandic_AarhusCity_RAIS3859.jpg" + } + } + ], + "texts": { + "descriptions": { + "short": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. We promise that once you've visited L’øst, you'll return over and over again. ", + "medium": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. With a fondness for local produce, the menu changes with the season to always offer you the freshest ingredients. " + } + } + }, + "bookTableUrl": "http://thegrilldrinksdining.b.dinnerbooking.com/onlinebooking/276/2?" + }, + "id": "49047c7b-4323-4fdc-b78f-34bd9303cc01", + "type": "restaurants" + } + ] +} From 86dd3c04ed8210c431830b262faa71eb9b58764a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 15:17:15 +0200 Subject: [PATCH 32/64] feat(SW-302): switch out mock data for facility cards --- .../Facilities/CardGrid/cardGrid.module.css | 10 +- .../HotelPage/Facilities/CardGrid/index.tsx | 10 +- .../HotelPage/Facilities/mock.json | 16764 ---------------- .../HotelPage/Facilities/mockData.ts | 144 - .../HotelPage/Rooms/RoomCard/index.tsx | 2 +- .../ContentType/HotelPage/Rooms/index.tsx | 3 +- components/ContentType/HotelPage/index.tsx | 6 +- .../TempDesignSystem/Card/CardImage/index.tsx | 2 +- components/TempDesignSystem/Card/card.ts | 3 +- i18n/dictionaries/da.json | 12 + i18n/dictionaries/de.json | 12 + i18n/dictionaries/en.json | 16 +- i18n/dictionaries/fi.json | 13 + i18n/dictionaries/no.json | 11 + i18n/dictionaries/sv.json | 12 + server/routers/hotels/output.ts | 14 + server/routers/hotels/query.ts | 21 +- types/components/cardImage.ts | 3 +- types/components/hotelPage/facilities.ts | 14 +- types/components/image.ts | 8 + utils/facilityCards.ts | 139 + utils/imageCard.ts | 8 +- 22 files changed, 289 insertions(+), 16938 deletions(-) delete mode 100644 components/ContentType/HotelPage/Facilities/mock.json delete mode 100644 components/ContentType/HotelPage/Facilities/mockData.ts create mode 100644 types/components/image.ts create mode 100644 utils/facilityCards.ts diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css index c205f68fe..9cf0e4e50 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css +++ b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css @@ -1,13 +1,13 @@ -.one { +.spanOne { grid-column: span 1; } -.two { +.spanTwo { grid-column: span 2; } -.three { - grid-column: 1/-1; +.spanThree { + grid-column: span 3; } .desktopGrid { @@ -23,6 +23,8 @@ .desktopGrid { display: grid; gap: var(--Spacing-x1); + grid-template-columns: repeat(3, 1fr); + grid-auto-flow: dense; } .mobileGrid { diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 8d98c689d..1f1b9cc58 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -9,6 +9,8 @@ import type { CardGridProps } from "@/types/components/hotelPage/facilities" export default async function CardGrid({ facility }: CardGridProps) { const imageCard = sortCards(facility) + const nrCards = facility.length + return (
@@ -22,7 +24,13 @@ export default async function CardGrid({ facility }: CardGridProps) { secondaryButton={card.secondaryButton} primaryButton={card.primaryButton} backgroundImage={card.backgroundImage} - className={styles[card.columnSpan]} + className={ + nrCards == 1 + ? styles.spanThree + : nrCards == 2 && card.backgroundImage + ? styles.spanTwo + : styles.spanOne + } /> ))} diff --git a/components/ContentType/HotelPage/Facilities/mock.json b/components/ContentType/HotelPage/Facilities/mock.json deleted file mode 100644 index 34f4217c8..000000000 --- a/components/ContentType/HotelPage/Facilities/mock.json +++ /dev/null @@ -1,16764 +0,0 @@ -{ - "data": { - "attributes": { - "name": "Scandic Aarhus City", - "operaId": "736", - "keywords": ["aarhus", "århus", "aarhus city"], - "isPublished": true, - "cityId": "504c2772-43b6-414a-913b-40c05eccaddd", - "cityName": "Aarhus", - "ratings": { - "tripAdvisor": { - "numberOfReviews": 1487, - "rating": 4, - "ratingImageUrl": "https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.0-15458-5.svg", - "webUrl": "https://www.tripadvisor.com/Hotel_Review-g189530-d2166717-Reviews-Scandic_Aarhus_City-Aarhus_East_Jutland_Jutland.html?m=15458", - "awards": [] - } - }, - "address": { - "streetAddress": "Østergade 10", - "city": "Aarhus", - "zipCode": "8000", - "country": "Denmark" - }, - "contactInformation": { - "phoneNumber": "+45 89318100", - "faxNumber": "+45 89318111", - "email": "aarhuscity@scandichotels.com", - "websiteUrl": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city" - }, - "hotelFacts": { - "checkin": { - "checkInTime": "15:00", - "checkOutTime": "12:00", - "onlineCheckout": false - }, - "ecoLabels": { - "euEcoLabel": false, - "greenGlobeLabel": false, - "nordicEcoLabel": true, - "svanenEcoLabelCertificateNumber": "5055 0095" - }, - "hotelFacilityDetail": { - "breakfast": { - "heading": "Breakfast", - "description": "Breakfast buffet is always included. It’s a tasty mix with healthy and allergy friendly alternatives." - }, - "checkout": { - "heading": "Check out", - "description": "The room is yours until 12:00 on your day of departure. If you wish to check out later than 12:00, please contact the reception (dial 9). \\r\\n \\r\\nWant to avoid queuing at check-out? Look out for an email or text on how to check out easily online." - }, - "gym": { - "heading": "Gym", - "description": "Our beds are comfy, but a workout will cheer you up as well. Have a run on the treadmill or work out in our well-equipped gym – it’s free when staying with us." - }, - "internet": { - "heading": "Internet", - "description": "Free Wi-Fi: Scandic easy. Open your web browser and click to connect!" - }, - "laundry": { - "heading": "Laundry", - "description": "Got laundry that needs taking care of? Just dial 9 for the reception, and we’ll take care of it." - }, - "luggage": { - "heading": "Luggage", - "description": "Do you need to store any luggage after check out? Speak to the reception and we’ll store it for you." - }, - "shop": { - "heading": "Shop", - "description": "When the craving sets in, there’s freshly brewed coffee and lighter meals in our shop to bring up to your room. You can also find necessities such as a toothbrush. \\r\\n \\r\\nOur shop is open around the clock, you will find it next to the reception." - }, - "telephone": { - "heading": "Telephone", - "description": "In case of emergency dial 112 (police, ambulance, fire)." - } - }, - "hotelInformation": { - "accessibility": { - "heading": "Accessibility", - "description": "With the help of smart solutions, we design hotels where all of our guests can be happy. We prioritize accessibility in both our newly built and renovated hotels, constantly improving the standard of what we can offer. As well as technical solutions and practical matters, we believe in care and consideration.", - "link": "https://www.youtube.com/v/7CC38NXYgQk" - }, - "safety": { - "heading": "Safety Information", - "description": "


Once you have settled into your room – make sure you know where you are in the building!
• Study the evacuation plan on the back of the door.
• Check where your nearest emergency exit is
located, for example stairs leading outside.
• Count how many doors there are between your
room and the nearest emergency exit – so you
can find your way even in the dark.
• Check where the fire alarm button and fire
extinguishers are located.

If you discover a fire or smell burning
• If the corridor is full of smoke – stay in your room.
Alert reception or call the emergency number 112.
• Always take a room key with you when you leave
your room. You may come across smoke and need
to go back.
• If the fire is small and limited – use one of the fire
extinguishers located in the corridor.
• If you cannot put out the fire, close the door to the
room that is on fire.

If you hear the fire alarm
• Leave your room if the corridor is free from smoke.
• Take your room key with you and go to the
assembly point via the nearest emergency exit.
• Never use the elevator.

If you cannot leave your room
• Call reception or 112 and explain that you are
stuck in your room. Give them your room number.
• Seal ventilation openings and gaps around the
door with wet towels.
• Move all flammable material away from the
window.
• Go to the window and try to attract attention.
• If the room becomes smoky – open the window
to get some air in.
• Do not jump – wait for instructions from the
rescue services.
• You will see best and breathe most easily near
the floor in a smoke-filled room.

First aid
• A defibrillator (AED) and a first aid kit are available
in reception.

" - }, - "sustainability": { - "heading": "Sustainability Information", - "description": "In 1993, Scandic decided to become a leader in sustainability and drive the development of sustainability in the hotel sector. It was at Scandic that the idea to “hang up your towel if you want to use it again” was formed – an idea that is now the standard in the hotel industry around the world. Sustainability is a part of our values – an integral element of all of the operations that Scandic’s team members manifest in daily work.", - "link": "https://www.youtube.com/watch?v=0td9PfNfT1A" - } - }, - "interior": { - "numberOfBeds": 560, - "numberOfCribs": 15, - "numberOfFloors": 5, - "numberOfRooms": { - "connected": 20, - "forAllergics": 228, - "forDisabled": 25, - "nonSmoking": 228, - "pet": 0, - "withExtraBeds": 97, - "total": 228 - } - }, - "receptionHours": { - "alwaysOpen": true, - "isClosed": false, - "openingTime": "", - "closingTime": "" - }, - "yearBuilt": "2012" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.15418, - "longitude": 10.20514 - }, - "hotelContent": { - "images": { - "metaData": { - "title": "Superior Plus Room", - "altText": "superior plus room at scandic aarhus city", - "altText_En": "superior plus room at scandic aarhus city", - "copyRight": "Jesper Rais" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5a5q6ohz5r7xsjxul93n/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ligackcxnyzwmrqmwaqu/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ri4v32ww2rptlj4jzcix/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bxdcn0niti16cmxyzmdz/Scandic_Aarhus_City_Superior_Plus_TT_space.jpg" - } - }, - "texts": { - "facilityInformation": "City break, romantic stay, conference or networking with colleagues and friends? Scandic Aarhus City has it all! Pamper yourself and your family with a few days at our contemporary hotel in the heart of Aarhus, decorated in a Scandinavian style. Treat your tastebuds to a delicious steak from our hotel restaurant, L'øst. Our bar is a cosy place to relax if you're in the mood for an after-work drink, and is a popular meeting place for our guests and locals. From some of our top floor guest rooms, you can enjoy the view of Aarhus City, catching a glimpse of ARoS art museum and its well-known work of art 'The Rainbow', Aarhus harbour as well as the forests and beaches. There are solar panels on the roof that supply our hotel with 90% of the electricity used in our rooms. In the summer, we recommend our homemade honey at the buffet breakfast which comes from bee hives located up on our roof. Our hotel is also one of Denmark’s most accessible hotels, with 25 accessible rooms and it has a fully accessible conference area with modern audiovisual equipment. If you're in the mood for sightseeing and exercise, you can borrow one of our Scandic bicycles and explore Aarhus City on two wheels. You can also increase your heart rate in our modern fitness facilities, which are located below our reception. ", - "surroundingInformation": "You won’t find a place closer to the centre of Aarhus and its many shopping opportunities, cosy cafés and restaurants, as well as sights and attractions, such as Den Gamle By (The Old Town) and ARoS. Scandic Aarhus City is located in Ostergade, and right outside our hotel you'll find 'Strøget', the pedestrian street of Aarhus. Aarhus train station and bus station are just a short distance from our hotel.", - "descriptions": { - "short": "The hotel that has everything! Central location, popular restaurant - L'øst - modern decor, fitness facilities and underground parking. \n", - "medium": "Modern hotel in the heart of Aarhus close to shopping, attractions and transportation. One of our best hotels whether you travel on weekdays or enjoy a weekend break. Don't miss out on a juicy steak in our popular restaurant, L'øst.\n" - } - }, - "restaurantsOverviewPage": { - "restaurantsOverviewPageLinkText": "", - "restaurantsOverviewPageLink": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city/restaurant-bar", - "restaurantsContentDescriptionShort": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. We promise that once you've visited L’øst, you'll return over and over again. ", - "restaurantsContentDescriptionMedium": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. With a fondness for local produce, the menu changes with the season to always offer you the freshest ingredients. " - } - }, - "detailedFacilities": [ - { - "id": 1829, - "name": "Gym", - "code": "HEA - TRAI", - "applyToAllHotels": false, - "public": true, - "icon": "Gym", - "iconName": "Gym", - "sortOrder": 1700 - }, - { - "id": 1406, - "name": "Parking - additional cost", - "code": "PAR", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1378, - "name": "Room service", - "code": "ROO - R/S", - "applyToAllHotels": false, - "public": true, - "icon": "RoomService", - "sortOrder": 400 - }, - { - "id": 1017, - "name": "Meeting rooms", - "code": "MEE", - "applyToAllHotels": false, - "public": true, - "icon": "Meeting", - "sortOrder": 9000 - }, - { - "id": 2072, - "name": "Disabled parking", - "code": "DPA", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1014, - "name": "Bar", - "code": "BAR", - "applyToAllHotels": false, - "public": true, - "icon": "Bar", - "sortOrder": 1600 - }, - { - "id": 1607, - "name": "Golf course (0-30 km)", - "code": "GOLF", - "applyToAllHotels": false, - "public": false, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1833, - "name": "Free WiFi", - "code": "IHF", - "applyToAllHotels": false, - "public": true, - "icon": "FreeWiFi", - "sortOrder": 1900 - }, - { - "id": 1834, - "name": "Laundry service", - "code": "LAU", - "applyToAllHotels": false, - "public": true, - "icon": "LaundryService", - "sortOrder": 200 - }, - { - "id": 1835, - "name": "Pet-friendly rooms", - "code": "PET", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1383, - "name": "Restaurant", - "code": "-", - "applyToAllHotels": false, - "public": true, - "icon": "Restaurant", - "sortOrder": 6000 - }, - { - "id": 1408, - "name": "Scandic Shop 24 hrs", - "code": "SHOP", - "applyToAllHotels": false, - "public": true, - "icon": "Shop", - "sortOrder": 100 - }, - { - "id": 5806, - "name": "Meeting / conference facilities", - "code": "MEE - MEETING ", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 1500 - }, - { - "id": 971, - "name": "Shopping", - "code": "-", - "applyToAllHotels": false, - "public": false, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 956, - "name": "Coffee shop", - "code": "COF", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1913, - "name": "Overnight security", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 229144, - "name": "TV with Chromecast", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - }, - { - "id": 1407, - "name": "Serves breakfast (always included)", - "code": "-", - "applyToAllHotels": false, - "public": true, - "icon": "None", - "sortOrder": 0 - } - ], - "healthFacilities": [ - { - "type": "Gym", - "content": { - "images": [], - "texts": { - "descriptions": { - "short": "", - "medium": "" - } - } - }, - "openingDetails": { - "useManualOpeningHours": false, - "openingHours": { - "ordinary": { - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:00", - "closingTime": "22:00" - }, - "weekends": { - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:00", - "closingTime": "22:00" - } - } - }, - "details": [ - { - "name": "ExternalGym", - "type": "Boolean", - "value": "False" - }, - { - "name": "NameOfExternalGym", - "type": "String" - }, - { - "name": "DistanceToExternalGym", - "type": "Int32", - "value": "0" - } - ] - } - ], - "rewardNight": { - "points": 40000, - "campaign": { - "start": "2020-11-30 23:00:00", - "end": "2020-12-30 23:00:00", - "points": 40000 - } - }, - "pointsOfInterest": [ - { - "name": "Strøget", - "distance": 0, - "category": { - "name": "Transportations", - "group": "Trains" - }, - "location": { - "distanceToCentre": 0, - "latitude": 55.96626, - "longitude": 9.388983 - }, - "isHighlighted": true - }, - { - "name": "ARoS", - "distance": 0.4, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.15392, - "longitude": 10.199716 - }, - "isHighlighted": true - }, - { - "name": "DSB", - "distance": 0.7, - "category": { - "name": "Transportations", - "group": "Trains" - }, - "location": { - "distanceToCentre": 0, - "latitude": 55.8628, - "longitude": 9.83647 - }, - "isHighlighted": true - }, - { - "name": "Den gamle by", - "distance": 1.2, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.158783, - "longitude": 10.192115 - }, - "isHighlighted": true - }, - { - "name": "Tivoli Friheden", - "distance": 2.7, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.1366, - "longitude": 10.197853 - }, - "isHighlighted": true - }, - { - "name": "Moesgaard Museum", - "distance": 9.4, - "category": { - "name": "Museum", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.088715, - "longitude": 10.223502 - }, - "isHighlighted": true - }, - { - "name": "Randers Regnskov", - "distance": 39, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.457123, - "longitude": 10.032533 - }, - "isHighlighted": true - }, - { - "name": "Aarhus Airport", - "distance": 40, - "category": { - "name": "Airport", - "group": "Airport" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.30823, - "longitude": 10.626351 - }, - "isHighlighted": true - }, - { - "name": "Djurs sommerland", - "distance": 48, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.425213, - "longitude": 10.550971 - }, - "isHighlighted": true - }, - { - "name": "Skandinavisk Dyrepark", - "distance": 49, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.340668, - "longitude": 10.649598 - }, - "isHighlighted": true - }, - { - "name": "Ree Park", - "distance": 54, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 56.26301, - "longitude": 10.738092 - }, - "isHighlighted": true - }, - { - "name": "Legoland", - "distance": 95, - "category": { - "name": "Tourist", - "group": "Star" - }, - "location": { - "distanceToCentre": 0, - "latitude": 55.73551, - "longitude": 9.126805 - }, - "isHighlighted": true - } - ], - "parking": [ - { - "type": "Garage", - "name": "Q-park", - "address": "Hans Hartvig Seedorf Stræde", - "numberOfChargingSpaces": 5, - "distanceToHotel": 0, - "canMakeReservation": false, - "pricing": { - "freeParking": false, - "paymentType": "CanBePaidAtTheHotel", - "localCurrency": { - "currency": "DKK", - "range": { - "min": 200, - "max": 200 - }, - "ordinary": [ - { - "period": "Hour", - "amount": 28, - "startTime": "", - "endTime": "" - }, - { - "period": "Day", - "amount": 200, - "startTime": "", - "endTime": "" - }, - { - "period": "Night", - "amount": 200, - "startTime": "", - "endTime": "" - }, - { - "period": "AllDay", - "amount": 200, - "startTime": "00:00", - "endTime": "23:59" - } - ], - "weekend": [ - { - "period": "Hour", - "amount": 28, - "startTime": "", - "endTime": "" - }, - { - "period": "Day", - "amount": 200, - "startTime": "", - "endTime": "" - }, - { - "period": "Night", - "amount": 200, - "startTime": "", - "endTime": "" - }, - { - "period": "AllDay", - "amount": 200, - "startTime": "00:00", - "endTime": "23:59" - } - ] - } - } - } - ], - "specialNeedGroups": [ - { - "name": "Entrance", - "specialNeeds": [ - { - "name": "Clear direction signs if disabled entrance is located away from main entrance", - "details": "" - }, - { - "name": "Revolving doors at main entrance", - "details": "" - }, - { - "name": "Wide main entrance door (non revolving) with minimum width of 80 cm", - "details": "" - }, - { - "name": "Door/s can be opened automatically at main entrance (All Scandic)", - "details": "" - }, - { - "name": "Night time door bell accessible from wheelchair (max height 120 cm) (All Scandic)", - "details": "" - }, - { - "name": "No threshold at entrance door (All Scandic)", - "details": "" - }, - { - "name": "Seating available close to main entrance (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Public areas - Other", - "specialNeeds": [ - { - "name": "Corridors in hotel accessible with wheelchair", - "details": "" - }, - { - "name": "At least one computer work station that is accessible for wheelchair users (All Scandic)", - "details": "" - }, - { - "name": "Clear passage to the Scandic Shop with wheelchair (All Scandic)", - "details": "" - }, - { - "name": "Service / guide dogs allowed in hotel (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Meeting areas", - "specialNeeds": [ - { - "name": "Disability toilet available in meeting and conference areas", - "details": "" - }, - { - "name": "Meeting and conference floor / area accessible with wheelchair", - "details": "" - }, - { - "name": "Meeting room door with minimum 80 cm width", - "details": "" - }, - { - "name": "Number of disability toilets available", - "details": "1" - }, - { - "name": "Seating available outside meeting room/s", - "details": "" - }, - { - "name": "Clear signage of hearing loop in meeting and conference areas (All Scandic)", - "details": "" - }, - { - "name": "Portable hearing loop available for meeting rooms (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Disability rooms", - "specialNeeds": [ - { - "name": "Bed can be adjusted for legs and back", - "details": "" - }, - { - "name": "Bed height is 55 cm from floor to top of mattress", - "details": "" - }, - { - "name": "Bed on legs", - "details": "" - }, - { - "name": "Wardrobe without doors or with sliding doors", - "details": "" - }, - { - "name": "Light switch reachable from wheelchair", - "details": "" - }, - { - "name": "Minimum of 80 cm free floor space around the bed", - "details": "" - }, - { - "name": "Wooden floors in room", - "details": "" - }, - { - "name": "Number of disability rooms", - "details": "25" - }, - { - "name": "Space under desk accessible for wheelchairs (All Scandic)", - "details": "" - }, - { - "name": "Rail for coat hanger at max height 120 cm (All Scandic)", - "details": "" - }, - { - "name": "TV remote on side table (all scandic hotels)", - "details": "" - }, - { - "name": "Wardrobe shelf accessible from wheelchair (All Scandic)", - "details": "" - }, - { - "name": "Width of corridor in room is at least 80 cm (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Disability rooms - bathroom", - "specialNeeds": [ - { - "name": "Accessible bathtubs", - "details": "" - }, - { - "name": "Alarm / Emergency codes or buttons in bathroom", - "details": "" - }, - { - "name": "Available free space in bathroom", - "details": "size" - }, - { - "name": "No threshold into bathroom", - "details": "" - }, - { - "name": "Other height of wash basin", - "details": "No" - }, - { - "name": "Other width of bathroom door", - "details": "size" - }, - { - "name": "Shower glass wall", - "details": "" - }, - { - "name": "Single lever basin mixer", - "details": "" - }, - { - "name": "Sliding doors into bathroom", - "details": "" - }, - { - "name": "Thermostatic mixer in shower", - "details": "" - }, - { - "name": "Wash basin minimum height 78 cm", - "details": "" - }, - { - "name": "Width of bathroom door is at least 80 cm wide", - "details": "" - }, - { - "name": "Width of shower glass wall passage", - "details": "Ajustable" - }, - { - "name": "Bathroom towels reachable from wheelchair (All Scandic)", - "details": "" - }, - { - "name": "Handrail on the inside of the bathroom door if door opens outwards (All Scandic)", - "details": "" - }, - { - "name": "Hooks reachable from wheelchair (All Scandic)", - "details": "" - }, - { - "name": "Shower handle placed in its lowest position when guest arrives (All Scandic)", - "details": "" - }, - { - "name": "Shower stool available (All Scandic)", - "details": "" - }, - { - "name": "Shower creme / shampoo dispenser in shower reachable from wheelchair (All Scandic)", - "details": "" - }, - { - "name": "Space under wash basin accessible for wheelchairs (All Scandic)", - "details": "" - }, - { - "name": "Toilet paper reachable from toilet (All Scandic)", - "details": "" - }, - { - "name": "View in mirror from wheelchair (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Public areas - Reception", - "specialNeeds": [ - { - "name": "One part of reception counter is of appropriate height for guests in wheelchairs", - "details": "" - }, - { - "name": "Seating and table available close to front desk", - "details": "" - }, - { - "name": "Cane holders at front desk (All Scandic)", - "details": "" - }, - { - "name": "Clear signs of hearing loop and wake up alarm (All Scandic)", - "details": "" - }, - { - "name": "Clear walkway between reception and lifts (All Scandic)", - "details": "" - }, - { - "name": "Clear walkway to reception from entrance (All Scandic)", - "details": "" - }, - { - "name": "Hearing induction loop in reception desk (All Scandic)", - "details": "" - }, - { - "name": "Vibrating wake up/fire alarm device can be borrowed from hotel reception (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Public areas - Restaurant and bar", - "specialNeeds": [ - { - "name": "Buffet breakfast has appropriate height (max 90 cm) for guests in wheelchairs", - "details": "" - }, - { - "name": "Level differences in restaurant", - "details": "" - }, - { - "name": "Other width of walkway to restaurant", - "details": "Elevator between" - }, - { - "name": "Walkway to bar is at least 100 cm wide", - "details": "" - }, - { - "name": "Walkway to restaurant is at least 100 cm wide", - "details": "" - }, - { - "name": "Access ramp or lift in restaurant", - "details": "" - }, - { - "name": "Special needs menu", - "details": "" - }, - { - "name": "Braille / large print menus", - "details": "" - } - ] - }, - { - "name": "Public areas - Lifts and stairs", - "specialNeeds": [ - { - "name": "At least one lift with door widht of 80 cm when open", - "details": "" - }, - { - "name": "Control panel buttons marked in Braille inside lift", - "details": "" - }, - { - "name": "Voice announciation for floor indication and direction of travel", - "details": "" - }, - { - "name": "First and last steps in stairs are clearly marked (contrasting colours or grooved steps)", - "details": "" - }, - { - "name": "Door opener or automatic door/s avaliable for lift", - "details": "" - } - ] - }, - { - "name": "Public areas - Public toilets", - "specialNeeds": [ - { - "name": "Accessible bathroom/s available in public areas", - "details": "" - }, - { - "name": "Alarm / Emergency codes or buttons in bathroom", - "details": "" - }, - { - "name": "Bathroom door is at least 80 cm wide", - "details": "" - }, - { - "name": "Foldable armrests by the toilet", - "details": "" - }, - { - "name": "Hooks reachable from wheelchair", - "details": "" - }, - { - "name": "Number of disability bathrooms available", - "details": "4" - }, - { - "name": "Wash basin minimum height of 78 cm", - "details": "" - }, - { - "name": "Handrail on inside of bathroom door/s if door/s open outwards", - "details": "" - }, - { - "name": "Space under wash basin accessible for wheelchairs", - "details": "" - } - ] - }, - { - "name": "Parking", - "specialNeeds": [ - { - "name": "Clear illuminated and defined path between parking and entrance", - "details": "" - }, - { - "name": "Disabled parking", - "details": "" - }, - { - "name": "Distance from parking to entrance (m)", - "details": "10 meters" - }, - { - "name": "Number of disabled parking bays with min width of 3.6 m each", - "details": "2" - }, - { - "name": "Parking bays clearly marked with disabled symbols", - "details": "X" - }, - { - "name": "Level differences in path from parking to hotel", - "details": "Basement" - } - ] - }, - { - "name": "Other", - "specialNeeds": [ - { - "name": "Staff trained to cater for disabled guests (All Scandic)", - "details": "" - } - ] - }, - { - "name": "Allergy-friendly rooms", - "specialNeeds": [ - { - "name": "Bed linen and towels are washed with eco-friendly detergent", - "details": "" - }, - { - "name": "Cleaning according to the cleaning concept for allergy room", - "details": "" - }, - { - "name": "In the room there has been no smoking or fur animals", - "details": "" - }, - { - "name": "Unscented bathroom products labeled with Asthma Allergy Nordic", - "details": "" - }, - { - "name": "The pillows / quilts are made of synthetic material", - "details": "" - }, - { - "name": "The rooms are located on a separate floor or in a separate corridor where there are no fur animals", - "details": "" - }, - { - "name": "The rooms are not freshly painted in the last three months.", - "details": "" - }, - { - "name": "The rooms have no bedspreads/bed blankets or decorative cushions", - "details": "" - }, - { - "name": "The rooms have windows that can be opened (a ventilation window is enough)", - "details": "" - }, - { - "name": "The rooms have wooden floors", - "details": "" - } - ] - } - ], - "socialMedia": { - "instagram": "", - "facebook": "https://www.facebook.com/ScandicAarhusCity" - }, - "meta": { - "specialAlerts": [ - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-06-01", - "endDate": "2023-06-11" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2022-09-02", - "endDate": "2022-09-21" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-04-20", - "endDate": "2023-05-01" - }, - { - "type": "Hotel", - "displayInBookingFlow": true, - "startDate": "2023-11-16", - "endDate": "2023-12-24" - } - ] - }, - "isActive": true, - "gallery": { - "heroImageIds": [ - { - "metaData": { - "title": "Facade", - "altText": "Facade", - "altText_En": "Facade", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oue3sg5sq0l6jg7kr4b3/scandic-aarhuscity-facade-1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/kbmjiiazxjfp647krfnr/scandic-aarhuscity-facade-1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5icsc3n1wj1ugyr7056b/scandic-aarhuscity-facade-1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/6zh46dvzs8htl7zlqo96/scandic-aarhuscity-facade-1.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "Meeting break out area", - "altText_En": "Meeting break out area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, twin upgrade superior", - "altText_En": "Scandic Aarhus City, twin upgrade superior", - "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/1ss15jncd6oln7vk73ke/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/y0ez2j8yi09htncdk39r/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eyzfuqarqfgj21ywtrfh/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kw5n250ep7zf40e1e0d2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" - } - }, - { - "metaData": { - "title": "Scandic Aarhus City, Twin Superior Extra Room", - "altText": "Scandic Aarhus City, Twin Superior Extra Room", - "altText_En": "Scandic Aarhus City, Twin Superior Extra Room", - "copyRight": "Holger Fell/ Panobyte, International" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/x1es4vcav0eeh51ka16o/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/8c9gr0thdsit081bmya6/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/dmw3mmfjzl3ozgo20i7j/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/sh8e1hy5xklr7tdqr99t/Scandic-Aarhus-City-Interior-room-Superior-Extra-T.jpg" - } - }, - { - "metaData": { - "title": "The Lobby at Scandic Aarhus City decorated for banquet.", - "altText": "The Lobby at Scandic Aarhus City decorated for banquet.", - "altText_En": "The Lobby at Scandic Aarhus City decorated for banquet.", - "copyRight": "Mads Armgaard." - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/91h0u60tswog6v99nfjt/GAB4060_Scandic_AarhusC_081.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/c6dadqj45ymxwiyrc3ki/GAB4060_Scandic_AarhusC_081.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4mdviknekg0o6b7pl3l3/GAB4060_Scandic_AarhusC_081.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/4cebd4qyq68oixx060fw/GAB4060_Scandic_AarhusC_081.jpg" - } - }, - { - "metaData": { - "title": "Riisskov 2, Meeting room", - "altText": "Conference room Riis Skov 2", - "altText_En": "Conference room Riis Skov 2", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" - } - } - ], - "smallerImageIds": [ - { - "metaData": { - "title": "Facade", - "altText": "Facade", - "altText_En": "Facade", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/oue3sg5sq0l6jg7kr4b3/scandic-aarhuscity-facade-1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/kbmjiiazxjfp647krfnr/scandic-aarhuscity-facade-1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5icsc3n1wj1ugyr7056b/scandic-aarhuscity-facade-1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/6zh46dvzs8htl7zlqo96/scandic-aarhuscity-facade-1.jpg" - } - }, - { - "metaData": { - "title": "Reception", - "altText": "Scandic Aarhus City, reception", - "altText_En": "Scandic Aarhus City, reception", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/72p1zeys0w32zsenz30l/Scandic-Aarhus-City-Interior-reception001.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/8jxws1syuvk7capdy610/Scandic-Aarhus-City-Interior-reception001.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/911lkjady9iypykkm0uv/Scandic-Aarhus-City-Interior-reception001.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/i1waz04uj0zrcwu7j7e3/Scandic-Aarhus-City-Interior-reception001.jpg" - } - }, - { - "metaData": { - "title": "Lobby", - "altText": "Scandic Aarhus City, foyer, lobby, sofa, relax area", - "altText_En": "Scandic Aarhus City, foyer, lobby, sofa, relax area", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zgb3kdpvwj4fx5wjrmke/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/yl758o6wu106c9jz7c9u/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zk25k8l209tfmyq8hlce/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1ysbbvv5eipcq25mj90v/Scandic-Aarhus-City-Interior-lobby-sofa-relax-area.jpg" - } - }, - { - "metaData": { - "title": "Lobby area", - "altText": "Lobby", - "altText_En": "Lobby", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/26fh6i19a5l7gm2n3w1y/scandic-aarhuscity-conference-meetingarea-1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/njgwk2z067p0v2h0rrn3/scandic-aarhuscity-conference-meetingarea-1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ab925f1lxwzgl9moy6zd/scandic-aarhuscity-conference-meetingarea-1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tfuua9cu4lrbi4mvmwgk/scandic-aarhuscity-conference-meetingarea-1.jpg" - } - }, - { - "metaData": { - "title": "Room", - "altText": "Scandic Aarhus City, Connection Door", - "altText_En": "Scandic Aarhus City, Connection Door", - "copyRight": "Holger Fell" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ul98bsotsm7cr1acglkc/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/gkyd2ywbt1g0fecgjore/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/e2oc4harp8snd1xai9tj/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ao9q1gchhg5ge8snmwb5/Scandic-Aarhus-City-Interior-room-Connection-Door.jpg" - } - }, - { - "metaData": { - "title": "Family standard", - "altText": "Scandic Aarhus City, family four, desk, wardrobe", - "altText_En": "Scandic Aarhus City, family four, desk, wardrobe", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/a4kesi5jgj8brhalaa7f/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/lpe6lp0eilx03qnr8pcs/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/spvn9vyfrrav79guena3/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nhqb0fg27x2c1wc0fs1q/Scandic-Aarhus-City-Interior-room-family-four-desk.jpg" - } - }, - { - "metaData": { - "title": "Aarhus City, Family Four", - "altText": "Aarhus City, Family Four", - "altText_En": "Aarhus City, Family Four", - "copyRight": "" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/wp7y9ab0vj8d0kpc8bd5/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9tgp31dw1asf6hn7sc4c/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/6n2n0rke2k2v07jjxw49/Scandic-Aarhus-City-Interior-room-Family-Four.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/snzvs5vxo3zawguyi1l1/Scandic-Aarhus-City-Interior-room-Family-Four.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, twin upgrade superior, bathroom, Face", - "altText_En": "Scandic Aarhus City, twin upgrade superior, bathroom, Face", - "copyRight": "Mads Armsgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m79exezkqfgdpftty20x/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/sca61rw646fiea2ikonk/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/vnzbzqb1e3vq0t5rm1s2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/884z5n7f1v8zpg6dc527/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" - } - }, - { - "metaData": { - "title": "Standard room", - "altText": "Scandic Aarhus, standard, old building", - "altText_En": "Scandic Aarhus, standard, old building", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v2vvabswxgkj419dfeb8/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/4rjvciiy0jvqaw45gtzl/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/egvy9c7u8dbwwo7dyl5j/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/dmci1lrzfkktt4gjqmxo/Scandic-Aarhus-City-Interior-room-standard-old-bui.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, room, superior #572", - "altText_En": "Scandic Aarhus City, room, superior #572", - "copyRight": "Mads Armgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5ck0n7br57gjyvd8ynqu/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n9y8vz0e0ro3n2np9dvs/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/e6kbe16j9uuvpsll6k0n/Scandic-Aarhus-City-Interior-room-superior-_572.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ynwz3bmxdjdjzlpbk8x6/Scandic-Aarhus-City-Interior-room-superior-_572.jpg" - } - }, - { - "metaData": { - "title": "Junior suite", - "altText": "Scandic Aarhus City, suite, bed", - "altText_En": "Scandic Aarhus City, suite, bed", - "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/whmp3nhocemnvyxz8fe5/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/p2pua3p8b9scjaza7r96/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/th6jbykk6mu3qdkkgqxd/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/v1j0xdek0kvtmudhie1j/Scandic-Aarhus-City-Interior-room-suite-bed001.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, twin upgrade superior", - "altText_En": "Scandic Aarhus City, twin upgrade superior", - "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/p8fhk8rmt1ivf5n74jhy/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/ki8rf76v78elsuh6ymzb/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/k6nkn5r4158jyholqmv0/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/p9mtckamqq3dj265xgmg/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" - } - }, - { - "metaData": { - "title": "Hallway", - "altText": "Scandic Aarhus, corridor", - "altText_En": "Scandic Aarhus, corridor", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography, Vermundsgade 40A, 3929 2600, mads@gab.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/6xc10p3mouxec0vt4wjr/Scandic-Aarhus-City-Interior-corridor.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/72g50ktvpyur144vbe22/Scandic-Aarhus-City-Interior-corridor.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/kwogcjk2e4x7pjdkuw8x/Scandic-Aarhus-City-Interior-corridor.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1eulj18pzhjxhgrzqvok/Scandic-Aarhus-City-Interior-corridor.jpg" - } - }, - { - "metaData": { - "title": "Standard bathroom", - "altText": "Scandic Aarhus, standard, bathroom, tub", - "altText_En": "Scandic Aarhus, standard, bathroom, tub", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/lmga5ngxn0glm5sotgvm/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9vq21yenvqnlzpe5m52g/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/lzpy7306vs3fwx9ydp83/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/p7icwhfl5zat0ez8kslg/Scandic-Aarhus-City-Interior-room-standard-bathroo.jpg" - } - }, - { - "metaData": { - "title": "Junior suite", - "altText": "Scandic Aarhus City, suite", - "altText_En": "Scandic Aarhus City, suite", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/pnv0fogpsewae4f0wfjd/Scandic-Aarhus-City-Interior-room-suite.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n3rn2q4wtrplx8cengnx/Scandic-Aarhus-City-Interior-room-suite.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/vrogid30l06keair1l0t/Scandic-Aarhus-City-Interior-room-suite.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/yhixhovp5v3456d4o5de/Scandic-Aarhus-City-Interior-room-suite.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, twin upgrade superior", - "altText_En": "Scandic Aarhus City, twin upgrade superior", - "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/1ss15jncd6oln7vk73ke/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/y0ez2j8yi09htncdk39r/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eyzfuqarqfgj21ywtrfh/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/kw5n250ep7zf40e1e0d2/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" - } - }, - { - "metaData": { - "title": "Junior suite", - "altText": "Scandic Aarhus City, suite, view, living room, Aros", - "altText_En": "Scandic Aarhus City, suite, view, living room, Aros", - "copyRight": "Mads Armsgaard" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/hjcav94mfqsen42rtrzj/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/yftxxd70z47ftz954cde/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/pokvg6kvcyt2wwkahukd/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/hznhcypykdqo0mgd8coa/Scandic-Aarhus-City-Interior-room-suite-view-livin.jpg" - } - }, - { - "metaData": { - "title": "Superior Extra ", - "altText": "Scandic Aarhus City, room, superior extra #327", - "altText_En": "Scandic Aarhus City, room, superior extra #327", - "copyRight": "Mads Armgaard /Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ncgmjx5mcsvtirn7prhd/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/hc6lmyt1icdb1s9fwydq/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/opd51xpws6o5fn7yttj5/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xome9calxeibetjoustz/Scandic-Aarhus-City-Interior-room-superior-extra-_.jpg" - } - }, - { - "metaData": { - "title": "Superior room", - "altText": "Scandic Aarhus City, twin upgrade superior, chairs", - "altText_En": "Scandic Aarhus City, twin upgrade superior, chairs", - "copyRight": "Mads Armsgaard/ Graae, Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/0lzyey5fuqhfujf5istt/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/09ngmn2wlz0ix2f745j3/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/87qn9fxino4etw9gulgs/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ve8rodorvy38gtlaxuy7/Scandic-Aarhus-City-Interior-room-superior-twin-up.jpg" - } - }, - { - "metaData": { - "title": "Restaurant L'øst", - "altText": "Scandic Aarhus City, L'øst", - "altText_En": "Scandic Aarhus City, L'øst", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/9g4xnhm0v5s25lb74id7/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/o4r0ckp2auxdgquo2olx/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ssdr10hmos6xw0d4jmws/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/ce5ye6zyg6kwqhnif2j9/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg" - } - }, - { - "metaData": { - "title": "Restaurant L'øst", - "altText": "Scandic Aarhus City, L'øst", - "altText_En": "Scandic Aarhus City, L'øst", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/m1dfdf43ukzavkaqlre2/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/2lvmjlhsqbpgp4ak0l30/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/nj26nm70lyeat7up7gzc/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tdrk53sa9cw5opkefjy5/Scandic-Aarhus-City-Interior-restaurant-The-Grill0.jpg" - } - }, - { - "metaData": { - "title": "Restaurant The Grill", - "altText": "Scandic Aarhus City, restaurant, The Grill 1st floor", - "altText_En": "Scandic Aarhus City, restaurant, The Grill 1st floor", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/jt0t3r46a6clsji5sylh/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/h3a7a2jlu12dnshaplql/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/i36fnz7h9zgq27lcok94/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/n5csi1uhv6xda8xkad8j/Scandic-Aarhus-City-Interior-restaurant-The-Grill-.jpg" - } - }, - { - "metaData": { - "title": "Bar", - "altText": "Scandic Aarhus City, bar", - "altText_En": "Scandic Aarhus City, bar", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/0pz56b8r11b5a6617mdd/Scandic-Aarhus-City-Interior-bar.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/zahnrlokna4s813l550w/Scandic-Aarhus-City-Interior-bar.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/twpu573k2l2mugtyqama/Scandic-Aarhus-City-Interior-bar.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nby7ch6pktzke94kkuym/Scandic-Aarhus-City-Interior-bar.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "Meeting break out area", - "altText_En": "Meeting break out area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" - } - }, - { - "metaData": { - "title": "Mosegaard 1, Meeting room", - "altText": "", - "altText_En": "", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/e8ddpkug14ees7n2ibsu/scandic-aarhuscity-conference-moesgard1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/t4gqi6bbbqqyqgw3nnt8/scandic-aarhuscity-conference-moesgard1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/npb4vwmgl9pd38t90vaq/scandic-aarhuscity-conference-moesgard1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/pla3ac423m80wb1w28ia/scandic-aarhuscity-conference-moesgard1.jpg" - } - }, - { - "metaData": { - "title": "Moesgaard 1+2, Meeting room", - "altText": "", - "altText_En": "", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/fjy6fw28d7huoz8gwgby/scandic-aarhuscity-conference-moesgard1_2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/6c4we75y8x5lc67wdqs7/scandic-aarhuscity-conference-moesgard1_2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/tvam2ieigbd8y573vxt3/scandic-aarhuscity-conference-moesgard1_2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bxwfopzmbdyejnv7qfs3/scandic-aarhuscity-conference-moesgard1_2.jpg" - } - }, - { - "metaData": { - "title": "Mosegaard 2, Meeting room", - "altText": "Meeting room Mosegaard 2", - "altText_En": "Meeting room Mosegaard 2", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/zx4rdtcpps2reaw3g5hu/scandic-aarhuscity-conference-moesgard2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/hcs5zkcuf1x518j7jrbn/scandic-aarhuscity-conference-moesgard2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/ulm33qthdovevi2lnxpo/scandic-aarhuscity-conference-moesgard2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/q4axu3oty3mtgg4yolog/scandic-aarhuscity-conference-moesgard2.jpg" - } - }, - { - "metaData": { - "title": "Mosegaard 3, Meeting room", - "altText": "Meeting room Mosegaard 3", - "altText_En": "Meeting room Mosegaard 3", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v6lx30xb7pj13th4fiy2/scandic-aarhuscity-conference-moesgard3.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/jssn7m4krash0xoj3h33/scandic-aarhuscity-conference-moesgard3.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5n2mfqcc8v8djf7kjzi8/scandic-aarhuscity-conference-moesgard3.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/zisup8n0ypdwxf7zcisa/scandic-aarhuscity-conference-moesgard3.jpg" - } - }, - { - "metaData": { - "title": "Riisskov 1, Meeting room", - "altText": "Meeting room Riis Skov 1", - "altText_En": "Meeting room Riis Skov 1", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/7glfbge7t65uak4pdpgp/scandic-aarhuscity-conference-riisskov1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/j6mv8idkv26pq08rlsjg/scandic-aarhuscity-conference-riisskov1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u1sf87ntk8zohyynvilm/scandic-aarhuscity-conference-riisskov1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bpzyzztpbqhtrq62kqx8/scandic-aarhuscity-conference-riisskov1.jpg" - } - }, - { - "metaData": { - "title": "Riisskov 2, Meeting room", - "altText": "Conference room Riis Skov 2", - "altText_En": "Conference room Riis Skov 2", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" - } - }, - { - "metaData": { - "title": "Meeting room Tangkrogen", - "altText": "Meeting room Tangkrogen", - "altText_En": "Meeting room Tangkrogen", - "copyRight": "" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/c1u1vsl4r66csugbbfz0/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9bdl461j91twwrdinstp/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/o9jkpr9ljxlpxe1hpf3c/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/vyfoyr10ire48o1b1680/Tangkrogen_meeting_Scandic-aarhus-city.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "Meeting area", - "altText_En": "Meeting area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5kr0flx1m6r1iklwg34x/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/nklz299xlyx26xa1ucpp/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zytdsh0joe4y00laxgq7/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/qnxfv2fqxybszya6xhx4/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "conference break out area", - "altText_En": "conference break out area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/23lmat50lcsagxqaziom/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/756dp95dec9vfyfkn3ju/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4rx8gqot47h1pa6dlnke/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/r158v77ivf859zzdrr7d/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" - } - }, - { - "metaData": { - "title": "Gym", - "altText": "Scandic Aarhus City, fitness facilities, gym", - "altText_En": "Scandic Aarhus City, fitness facilities, gym", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/dryyyc3z90bu0j9lxns2/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/3ga3bvv3i0q1c5158te4/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5hlwlfsl6616pw3wkvmd/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/rlgkzxcda7bq3381un05/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg" - } - }, - { - "metaData": { - "title": "Roof", - "altText": "Scandic Aarhus, roof, solar cells", - "altText_En": "Scandic Aarhus, roof, solar cells", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/bbam2qswl145lu1yjn6o/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/n2lc8xkp73gvisvkz8uv/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/2fpulwq947lslssrntfy/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xmi8a7bm9b77u22c0ndw/Scandic-Aarhus-City-Exterior-roof-solar-cells.jpg" - } - }, - { - "metaData": { - "title": "Roof", - "altText": "Scandic Aarhus City, bees, roof, beehives", - "altText_En": "Scandic Aarhus City, bees, roof, beehives", - "copyRight": "Mads Armsgaard, Graae, Armgaard & Bangsbo Photography, Vermundsgade 40A, 3929 2600, mads@gab.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/smkqhjrfso82rkktfed4/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/7lg8z5m98bj3fj8hepw4/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/lpz51rz6frk51poah36a/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/tsly49q7qne8fxwy9u1b/Scandic-Aarhus-City-Interior-bees-roof-beehives.jpg" - } - } - ] - }, - "conferencesAndMeetings": { - "pageUrl": "https://test3.scandichotels.com/hotels/denmark/aarhus/scandic-aarhus-city/meetings-conferences-events", - "heroImageIds": [ - { - "metaData": { - "title": "Scandic Aarhus City, lobby, foyer, sofa, relax area", - "altText": "Scandic Aarhus City, lobby, foyer, sofa, relax area", - "altText_En": "Scandic Aarhus City, lobby, foyer, sofa, relax area", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/2d885sgkx4exi20yjtdz/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/bwcr1fcmn2zkq9kx23n0/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xktoqjka52bmclbht85b/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/lmbslvxczewpaggpftll/Scandic-Aarhus-City-Interior-lobby-foyer-sofa-rela.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "Meeting break out area", - "altText_En": "Meeting break out area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/mp3jc29s1iqyn683pqcc/scandic-aarhuscity-conference-meetingarea-2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/cz9a44t0o9s1wh0kxi0q/scandic-aarhuscity-conference-meetingarea-2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/xqnlaezqvmetyfev3g2s/scandic-aarhuscity-conference-meetingarea-2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/281q7dleu35ivgost1mi/scandic-aarhuscity-conference-meetingarea-2.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "Meeting area", - "altText_En": "Meeting area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/5kr0flx1m6r1iklwg34x/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/nklz299xlyx26xa1ucpp/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/zytdsh0joe4y00laxgq7/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/qnxfv2fqxybszya6xhx4/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" - } - }, - { - "metaData": { - "title": "Mosegaard 3, Meeting room", - "altText": "Meeting room Mosegaard 3", - "altText_En": "Meeting room Mosegaard 3", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/v6lx30xb7pj13th4fiy2/scandic-aarhuscity-conference-moesgard3.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/jssn7m4krash0xoj3h33/scandic-aarhuscity-conference-moesgard3.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5n2mfqcc8v8djf7kjzi8/scandic-aarhuscity-conference-moesgard3.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/zisup8n0ypdwxf7zcisa/scandic-aarhuscity-conference-moesgard3.jpg" - } - }, - { - "metaData": { - "title": "Riisskov 1, Meeting room", - "altText": "Meeting room Riis Skov 1", - "altText_En": "Meeting room Riis Skov 1", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/7glfbge7t65uak4pdpgp/scandic-aarhuscity-conference-riisskov1.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/j6mv8idkv26pq08rlsjg/scandic-aarhuscity-conference-riisskov1.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u1sf87ntk8zohyynvilm/scandic-aarhuscity-conference-riisskov1.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/bpzyzztpbqhtrq62kqx8/scandic-aarhuscity-conference-riisskov1.jpg" - } - }, - { - "metaData": { - "title": "Riisskov 2, Meeting room", - "altText": "Conference room Riis Skov 2", - "altText_En": "Conference room Riis Skov 2", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/f3nwdoa3at28soit9m6c/scandic-aarhuscity-conference-riisskov2.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/0rabut14ycdettb6jvsv/scandic-aarhuscity-conference-riisskov2.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/eal9w6n0zilw3u2z75s0/scandic-aarhuscity-conference-riisskov2.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/c51pqsn700pczd9l3q6z/scandic-aarhuscity-conference-riisskov2.jpg" - } - }, - { - "metaData": { - "title": "Meeting area", - "altText": "conference break out area", - "altText_En": "conference break out area", - "copyRight": "Elin Strömberg © 2015" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/23lmat50lcsagxqaziom/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/756dp95dec9vfyfkn3ju/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/4rx8gqot47h1pa6dlnke/scandic-aarhuscity-conference-meetingarea-tastebre.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/r158v77ivf859zzdrr7d/scandic-aarhuscity-conference-meetingarea-tastebre.jpg" - } - }, - { - "metaData": { - "title": "Meeting room Tangkrogen", - "altText": "Meeting room Tangkrogen", - "altText_En": "Meeting room Tangkrogen", - "copyRight": "" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/c1u1vsl4r66csugbbfz0/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9bdl461j91twwrdinstp/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/o9jkpr9ljxlpxe1hpf3c/Tangkrogen_meeting_Scandic-aarhus-city.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/vyfoyr10ire48o1b1680/Tangkrogen_meeting_Scandic-aarhus-city.jpg" - } - } - ] - }, - "healthAndWellness": { - "headingText": "Gym and wellness", - "heroImageIds": [ - { - "metaData": { - "title": "Gym", - "altText": "Scandic Aarhus City, fitness facilities, gym", - "altText_En": "Scandic Aarhus City, fitness facilities, gym", - "copyRight": "Mads Armgaard/ Graae/ Armgaard & Bangsbo Photography" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/dryyyc3z90bu0j9lxns2/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/3ga3bvv3i0q1c5158te4/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/5hlwlfsl6616pw3wkvmd/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/rlgkzxcda7bq3381un05/Scandic-Aarhus-City-Interior-gym-fitness-facilitie.jpg" - } - } - ] - }, - "accessibilityElevatorPitchText": "Find the information you might need, before visiting us. You are always welcome to our hotel - completely without barriers. Regardless of impairment, sight, hearing, allergies or wheelchair, we have made sure that you enjoy your stay." - }, - "relationships": { - "restaurants": { - "links": { - "related": "https://localhost:7149/hotel/vNext/Hotels/736/restaurants?language=En" - } - }, - "nearbyHotels": { - "links": { - "related": "https://localhost:7149/hotel/vNext/Hotels/736/nearbyHotels?language=En" - } - }, - "roomCategories": { - "links": { - "related": "https://localhost:7149/hotel/vNext/Hotels/736/roomCategories?language=En" - } - }, - "meetingRooms": { - "links": { - "related": "https://localhost:7149/hotel/vNext/Hotels/736/meetingRooms?language=En" - } - } - }, - "id": "736", - "language": "En", - "type": "hotels" - }, - "included": [ - { - "attributes": { - "name": "Lobby bar", - "isPublished": true, - "email": "aarhuscity@scandichotels.com", - "phoneNumber": "+45 89318132", - "externalBreakfast": { - "isAvailable": true, - "localPriceForExternalGuests": { - "currency": "DKK", - "amount": 129 - } - }, - "menus": [ - { - "name": "Bar - drinks 1 ", - "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest1&fileId=33396" - }, - { - "name": "Bar - beer 2", - "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest1&fileId=33586" - } - ], - "openingDetails": [ - { - "openingHours": { - "isActive": true, - "name": "Frokost", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - } - }, - "alternateOpeningHours": { - "isActive": false - } - }, - { - "openingHours": { - "isActive": true, - "name": "Bar", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "01:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "01:00" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "23:00" - } - }, - "alternateOpeningHours": { - "isActive": false - } - } - ], - "content": { - "images": [ - { - "metaData": { - "title": "", - "altText": "restaurant at scandic aarhus city i aarhus", - "altText_En": "restaurant at scandic aarhus city i aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/hbwas2u7f6zs2dsh47ss/Scandic_AarhusCity_RAIS4150.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/9cq1cz90p0ymmt742xje/Scandic_AarhusCity_RAIS4150.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/1wsvmjunq96ho9nnnxji/Scandic_AarhusCity_RAIS4150.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/xdrlyrqsu3mow4nxo7y1/Scandic_AarhusCity_RAIS4150.jpg" - } - }, - { - "metaData": { - "title": "", - "altText": "restaurant at scandic aarhus city i aarhus", - "altText_En": "restaurant at scandic aarhus city i aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/27a5cmmvuoxa55osqrvf/Scandic_AarhusCity_RAIS4183.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/fa1obnw9e5vfn9ey7s4n/Scandic_AarhusCity_RAIS4183.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/dthkdducmf3myg7fw534/Scandic_AarhusCity_RAIS4183.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/mcwo3gumue7t7mftjz3n/Scandic_AarhusCity_RAIS4183.jpg" - } - }, - { - "metaData": { - "title": "", - "altText": "restaurant at scandic aarhus city i aarhus", - "altText_En": "restaurant at scandic aarhus city i aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/lci02wg7kar1nqyr1xr6/Scandic_AarhusCity_RAIS4416.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/aveu38u823x53l7ria31/Scandic_AarhusCity_RAIS4416.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/behrmlh75b26d2yj8kpv/Scandic_AarhusCity_RAIS4416.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/nz7y2vurhsfwr8h4wfuw/Scandic_AarhusCity_RAIS4416.jpg" - } - }, - { - "metaData": { - "title": "", - "altText": "restaurant at scandic aarhus city in aarhus", - "altText_En": "restaurant at scandic aarhus city in aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/nepf6a77dd7hsoikv4zk/Scandic_AarhusCity_RAIS4088.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/xo9arvjalj57uk94luxz/Scandic_AarhusCity_RAIS4088.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/judduz7kdq2z1u0fi3bm/Scandic_AarhusCity_RAIS4088.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/3ghfcwspo8fas6qhl822/Scandic_AarhusCity_RAIS4088.jpg" - } - } - ], - "texts": { - "descriptions": { - "short": "You can enjoy delightful cocktails in our bar as well as freshly brewed coffee and fast, good food from our bar menu.", - "medium": "You can enjoy delightful cocktails in our bar as well as freshly brewed coffee and fast, good food from our bar menu. Our bar is also the ideal place for short, informal meetings, or if you want to get a little work done." - } - } - }, - "bookTableUrl": "" - }, - "id": "58e70dfe-f499-49ee-9ed8-365b18f83f40", - "type": "restaurants" - }, - { - "attributes": { - "name": "Restaurant L'øst", - "isPublished": true, - "email": "kontakt@restaurantloest.dk", - "phoneNumber": "+45 89318132", - "externalBreakfast": { - "isAvailable": true, - "localPriceForExternalGuests": { - "currency": "DKK", - "amount": 129 - } - }, - "menus": [ - { - "name": "Torsdags tilbud ", - "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=26785" - }, - { - "name": "Restaurant LØST (DK)", - "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=33503" - }, - { - "name": "Restaurant LØST (ENG)", - "url": "https://test3.scandichotels.com/RestaurantService/RestaurantMenuService/GetMenufile?hotelId=736&restId=rest0&fileId=33504" - } - ], - "openingDetails": [ - { - "openingHours": { - "isActive": true, - "name": "Morgenmad", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:30", - "closingTime": "10:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:30", - "closingTime": "10:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:30", - "closingTime": "10:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:30", - "closingTime": "10:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "06:30", - "closingTime": "10:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "07:00", - "closingTime": "10:30" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "07:00", - "closingTime": "10:30" - } - }, - "alternateOpeningHours": { - "isActive": false - } - }, - { - "openingHours": { - "isActive": true, - "name": "Frokost", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - } - }, - "alternateOpeningHours": { - "isActive": true, - "name": "Åbningstider i julen", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "17:00" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - } - } - }, - { - "openingHours": { - "isActive": true, - "name": "Aftensmad", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - } - }, - "alternateOpeningHours": { - "isActive": true, - "name": "Åbningstider i Julen", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "17:00", - "closingTime": "21:30" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": true, - "openingTime": "00:00", - "closingTime": "00:00" - } - } - }, - { - "openingHours": { - "isActive": true, - "name": "Bar", - "monday": { - "sortOrder": 0, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "tuesday": { - "sortOrder": 1, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "wednesday": { - "sortOrder": 2, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "thursday": { - "sortOrder": 3, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "00:00" - }, - "friday": { - "sortOrder": 4, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "01:00" - }, - "saturday": { - "sortOrder": 5, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "01:00" - }, - "sunday": { - "sortOrder": 6, - "alwaysOpen": false, - "isClosed": false, - "openingTime": "11:00", - "closingTime": "23:00" - } - }, - "alternateOpeningHours": { - "isActive": false - } - } - ], - "content": { - "images": [ - { - "metaData": { - "title": "", - "altText": "A plate of food", - "altText_En": "A plate of food", - "copyRight": "Martin Panduro" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/4sv8cdqzm6pqemor8ain/Aarhus_City_restaurant_M-R_47.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/d8jxg0aa01nn4oqb3x6i/Aarhus_City_restaurant_M-R_47.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/1utrq41tle88y8evkcee/Aarhus_City_restaurant_M-R_47.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/g5bpx7c3yz34rzk8gnj0/Aarhus_City_restaurant_M-R_47.jpg" - } - }, - { - "metaData": { - "title": "", - "altText": "resturant at scandic aarhus city in aarhus", - "altText_En": "resturant at scandic aarhus city in aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/fct5cg8hl6fg6h1mzv4u/Scandic_AarhusCity_RAIS3914.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/eodsbcb23ne6myf3yz8c/Scandic_AarhusCity_RAIS3914.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/u5y6uxtyey6fmwl3cqg8/Scandic_AarhusCity_RAIS3914.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/mnqk0sq94qqyw7jjef2r/Scandic_AarhusCity_RAIS3914.jpg" - } - }, - { - "metaData": { - "title": "", - "altText": "resturant at scandic aarhus city in aarhus", - "altText_En": "resturant at scandic aarhus city in aarhus", - "copyRight": "Martin Panduro\r\nwww.raisfoto.dk" - }, - "imageSizes": { - "tiny": "https://test3.scandichotels.com/imagevault/publishedmedia/ufs5o8yll7a9l8hp7kb0/Scandic_AarhusCity_RAIS3859.jpg", - "small": "https://test3.scandichotels.com/imagevault/publishedmedia/352awehiat22q32nweu6/Scandic_AarhusCity_RAIS3859.jpg", - "medium": "https://test3.scandichotels.com/imagevault/publishedmedia/03rkkuihjo4yxviagqt1/Scandic_AarhusCity_RAIS3859.jpg", - "large": "https://test3.scandichotels.com/imagevault/publishedmedia/1g28u0b86nufm38c3xwg/Scandic_AarhusCity_RAIS3859.jpg" - } - } - ], - "texts": { - "descriptions": { - "short": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. We promise that once you've visited L’øst, you'll return over and over again. ", - "medium": "At our restaurant on Ostergade, the desire to prepare excellent meals is what drives our kitchen. With a fondness for local produce, the menu changes with the season to always offer you the freshest ingredients. " - } - } - }, - "bookTableUrl": "http://thegrilldrinksdining.b.dinnerbooking.com/onlinebooking/276/2?" - }, - "id": "49047c7b-4323-4fdc-b78f-34bd9303cc01", - "type": "restaurants" - } - ] -} diff --git a/components/ContentType/HotelPage/Facilities/mockData.ts b/components/ContentType/HotelPage/Facilities/mockData.ts deleted file mode 100644 index dfea0a74b..000000000 --- a/components/ContentType/HotelPage/Facilities/mockData.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - activities, - meetingsAndConferences, - restaurantAndBar, - wellnessAndExercise, -} from "@/constants/routes/hotelPageParams" - -import { getLang } from "@/i18n/serverContext" - -import type { Facilities } from "@/types/components/hotelPage/facilities" - -const lang = getLang() -/* -Most of this will be available from the api. Some will need to come from Contentstack. "Activities" will most likely come from Contentstack, which is prepped for. - */ -export const MOCK_FACILITIES: Facilities = [ - [ - { - id: "restaurant-and-bar", - theme: "primaryDark", - scriptedTopTitle: "Restaurant & Bar", - heading: "Enjoy relaxed restaurant experience", - secondaryButton: { - href: `?s=${restaurantAndBar[lang]}`, - title: "Read more & book a table", - isExternal: false, - }, - columnSpan: "one", - }, - { - backgroundImage: { - url: "https://imagevault.scandichotels.com/publishedmedia/79xttlmnum0kjbwhyh18/scandic-helsinki-hub-restaurant-food-tuna.jpg", - title: "scandic-helsinki-hub-restaurant-food-tuna.jpg", - meta: { - alt: "food in restaurant at scandic helsinki hub", - caption: "food in restaurant at scandic helsinki hub", - }, - id: 81751, - dimensions: { - width: 5935, - height: 3957, - aspectRatio: 1.499873641647713, - }, - }, - columnSpan: "one", - }, - { - backgroundImage: { - url: "https://imagevault.scandichotels.com/publishedmedia/48sb3eyhhzj727l2j1af/Scandic-helsinki-hub-II-centro-41.jpg", - meta: { - alt: "restaurant il centro at scandic helsinki hu", - caption: "restaurant il centro at scandic helsinki hub", - }, - id: 82457, - title: "Scandic-helsinki-hub-II-centro-41.jpg", - dimensions: { - width: 4200, - height: 2800, - aspectRatio: 1.5, - }, - }, - columnSpan: "one", - }, - ], - [ - { - backgroundImage: { - url: "https://imagevault.scandichotels.com/publishedmedia/csef06n329hjfiet1avj/Scandic-spectrum-8.jpg", - meta: { - alt: "man with a laptop", - caption: "man with a laptop", - }, - id: 82713, - title: "Scandic-spectrum-8.jpg", - dimensions: { - width: 7499, - height: 4999, - aspectRatio: 1.500100020004001, - }, - }, - columnSpan: "two", - }, - { - id: "meetings-and-conferences", - theme: "primaryDim", - scriptedTopTitle: "Meetings & Conferences", - heading: "Events that make an impression", - secondaryButton: { - href: `?s=${meetingsAndConferences[lang]}`, - title: "About meetings & conferences", - isExternal: false, - }, - columnSpan: "one", - }, - ], - [ - { - id: "wellness-and-exercise", - theme: "one", - scriptedTopTitle: "Wellness & Exercise", - heading: "Sauna and gym", - secondaryButton: { - href: `?s=${wellnessAndExercise[lang]}`, - title: "Read more about wellness & exercise", - isExternal: false, - }, - columnSpan: "one", - }, - { - backgroundImage: { - url: "https://imagevault.scandichotels.com/publishedmedia/69acct5i3pk5be7d6ub0/scandic-helsinki-hub-sauna.jpg", - meta: { - alt: "sauna at scandic helsinki hub", - caption: "sauna at scandic helsinki hub", - }, - id: 81814, - title: "scandic-helsinki-hub-sauna.jpg", - dimensions: { - width: 4000, - height: 2667, - aspectRatio: 1.4998125234345707, - }, - }, - columnSpan: "one", - }, - { - backgroundImage: { - url: "https://imagevault.scandichotels.com/publishedmedia/eu70o6z85idy24r92ysf/Scandic-Helsinki-Hub-gym-22.jpg", - meta: { - alt: "Gym at hotel Scandic Helsinki Hub", - caption: "Gym at hotel Scandic Helsinki Hub", - }, - id: 81867, - title: "Scandic-Helsinki-Hub-gym-22.jpg", - dimensions: { - width: 4000, - height: 2667, - aspectRatio: 1.4998125234345707, - }, - }, - columnSpan: "one", - }, - ], -] diff --git a/components/ContentType/HotelPage/Rooms/RoomCard/index.tsx b/components/ContentType/HotelPage/Rooms/RoomCard/index.tsx index 4e6c6624d..967580157 100644 --- a/components/ContentType/HotelPage/Rooms/RoomCard/index.tsx +++ b/components/ContentType/HotelPage/Rooms/RoomCard/index.tsx @@ -10,7 +10,7 @@ import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import styles from "./roomCard.module.css" -import { RoomCardProps } from "@/types/components/hotelPage/roomCard" +import type { RoomCardProps } from "@/types/components/hotelPage/roomCard" export function RoomCard({ badgeTextTransKey, diff --git a/components/ContentType/HotelPage/Rooms/index.tsx b/components/ContentType/HotelPage/Rooms/index.tsx index 58cc2ef68..b6fd241f5 100644 --- a/components/ContentType/HotelPage/Rooms/index.tsx +++ b/components/ContentType/HotelPage/Rooms/index.tsx @@ -10,10 +10,11 @@ import Button from "@/components/TempDesignSystem/Button" import Grids from "@/components/TempDesignSystem/Grids" import { RoomCard } from "./RoomCard" -import { RoomsProps } from "./types" import styles from "./rooms.module.css" +import type { RoomsProps } from "./types" + export function Rooms({ rooms }: RoomsProps) { const intl = useIntl() const [allRoomsVisible, setAllRoomsVisible] = useState(false) diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index fe0a20caa..1fcbb4a10 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -7,8 +7,7 @@ import SidePeek from "@/components/TempDesignSystem/SidePeek" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" -import { MOCK_FACILITIES } from "./Facilities/mockData" -import { setActivityCard } from "./Facilities/utils" +import { setActivityCard, setFacilityCards } from "@/utils/facilityCards" import DynamicMap from "./Map/DynamicMap" import MapCard from "./Map/MapCard" import MobileMapToggle from "./Map/MobileMapToggle" @@ -45,9 +44,10 @@ export default async function HotelPage() { roomCategories, activitiesCard, pointsOfInterest, + facilityCards, } = hotelData - const facilities = [...MOCK_FACILITIES] + const facilities = await setFacilityCards(facilityCards) activitiesCard && facilities.push(setActivityCard(activitiesCard)) const topThreePois = pointsOfInterest.slice(0, 3) diff --git a/components/TempDesignSystem/Card/CardImage/index.tsx b/components/TempDesignSystem/Card/CardImage/index.tsx index dc9c4f7f9..2ee17f37d 100644 --- a/components/TempDesignSystem/Card/CardImage/index.tsx +++ b/components/TempDesignSystem/Card/CardImage/index.tsx @@ -18,7 +18,7 @@ export default function CardImage({ ({ backgroundImage }) => backgroundImage && ( {backgroundImage.title} void onSecondaryButtonClick?: () => void + backgroundImage?: ImageVaultAsset | ApiImage } diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 77e15f396..21097a538 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -1,6 +1,7 @@ { "A destination or hotel name is needed to be able to search for a hotel room.": "Et destinations- eller hotelnavn er nødvendigt for at kunne søge efter et hotelværelse.", "A photo of the room": "Et foto af værelset", + "About meetings & conferences": "About meetings & conferences", "Activities": "Aktiviteter", "Add code": "Tilføj kode", "Add new card": "Tilføj nyt kort", @@ -21,6 +22,8 @@ "At the hotel": "På hotellet", "Attractions": "Attraktioner", "Back to scandichotels.com": "Tilbage til scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Seng type", "Book": "Book", "Book reward night": "Book bonusnat", @@ -30,6 +33,7 @@ "Breakfast included": "Morgenmad inkluderet", "Bus terminal": "Busstation", "Business": "Forretning", + "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Afbestille", "Check in": "Check ind", "Check out": "Check ud", @@ -72,6 +76,8 @@ "Edit profile": "Rediger profil", "Email": "E-mail", "Enter destination or hotel": "Indtast destination eller hotel", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Udforsk alle niveauer og fordele", "Explore nearby": "Udforsk i nærheden", "Extras to your booking": "Tillæg til din booking", @@ -182,14 +188,20 @@ "Public price from": "Offentlig pris fra", "Public transport": "Offentlig transport", "Read more": "Læs mere", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Læs mere om hotellet", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", "Restaurant": "Restaurant", "Restaurant & Bar": "Restaurant & Bar", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Gentag den nye adgangskode", "Room & Terms": "Værelse & Vilkår", "Room facilities": "Værelsesfaciliteter", "Rooms": "Værelser", + "Rooms & Guests": "Værelser & gæster", + "Sauna and gym": "Sauna and gym", "Save": "Gemme", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 99dbc5dc0..fa88d5c7f 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -2,6 +2,7 @@ "A destination or hotel name is needed to be able to search for a hotel room.": "Ein Reiseziel oder Hotelname wird benötigt, um nach einem Hotelzimmer suchen zu können.", "A photo of the room": "Ein Foto des Zimmers", "Activities": "Aktivitäten", + "About meetings & conferences": "About meetings & conferences", "Add code": "Code hinzufügen", "Add new card": "Neue Karte hinzufügen", "Address": "Adresse", @@ -22,6 +23,8 @@ "At the hotel": "Im Hotel", "Attractions": "Attraktionen", "Back to scandichotels.com": "Zurück zu scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Bettentyp", "Book": "Buchen", "Book reward night": "Bonusnacht buchen", @@ -33,6 +36,7 @@ "Bus terminal": "Busbahnhof", "Business": "Geschäft", "by": "bis", + "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Stornieren", "characters": "figuren", "Check in": "Einchecken", @@ -75,6 +79,8 @@ "Edit profile": "Profil bearbeiten", "Email": "Email", "Enter destination or hotel": "Reiseziel oder Hotel eingeben", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore nearby": "Erkunden Sie die Umgebung", "Extras to your booking": "Extras zu Ihrer Buchung", @@ -192,14 +198,20 @@ "Public price from": "Öffentlicher Preis ab", "Public transport": "Öffentliche Verkehrsmittel", "Read more": "Mehr lesen", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Lesen Sie mehr über das Hotel", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen", "Restaurant": "Restaurant", "Restaurant & Bar": "Restaurant & Bar", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Neues Passwort erneut eingeben", "Room & Terms": "Zimmer & Bedingungen", "Room facilities": "Zimmerausstattung", "Rooms": "Räume", + "Rooms & Guests": "Zimmer & Gäste", + "Sauna and gym": "Sauna and gym", "Save": "Speichern", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 64ff97c27..7fa569f76 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -1,6 +1,7 @@ { "A destination or hotel name is needed to be able to search for a hotel room.": "A destination or hotel name is needed to be able to search for a hotel room.", "A photo of the room": "A photo of the room", + "About meetings & conferences": "About meetings & conferences", "Activities": "Activities", "Add code": "Add code", "Add new card": "Add new card", @@ -21,6 +22,8 @@ "At the hotel": "At the hotel", "Attractions": "Attractions", "Back to scandichotels.com": "Back to scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Bed type", "Book": "Book", "Book reward night": "Book reward night", @@ -30,6 +33,7 @@ "Breakfast included": "Breakfast included", "Bus terminal": "Bus terminal", "Business": "Business", + "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Cancel", "Check in": "Check in", "Check out": "Check out", @@ -74,6 +78,8 @@ "Email": "Email", "Email address": "Email address", "Enter destination or hotel": "Enter destination or hotel", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Explore all levels and benefits", "Explore nearby": "Explore nearby", "Extras to your booking": "Extras to your booking", @@ -188,14 +194,20 @@ "Public price from": "Public price from", "Public transport": "Public transport", "Read more": "Read more", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Read more about the hotel", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Remove card from member profile", "Restaurant": "Restaurant", "Restaurant & Bar": "Restaurant & Bar", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Retype new password", "Room & Terms": "Room & Terms", "Room facilities": "Room facilities", "Rooms": "Rooms", + "Rooms & Guests": "Rooms & Guests", + "Sauna and gym": "Sauna and gym", "Save": "Save", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", @@ -275,7 +287,6 @@ "Zip code": "Zip code", "Zoo": "Zoo", "Zoom in": "Zoom in", - "Zoom out": "Zoom out", "as of today": "as of today", "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", @@ -296,5 +307,6 @@ "spendable points expiring by": "{points} spendable points expiring by {date}", "to": "to", "uppercase letter": "uppercase letter", - "{difference}{amount} {currency}": "{difference}{amount} {currency}" + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "Zoom out": "Zoom out" } diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 870acb18e..ab17e3f83 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -1,6 +1,7 @@ { "A destination or hotel name is needed to be able to search for a hotel room.": "Kohteen tai hotellin nimi tarvitaan, jotta hotellihuonetta voidaan hakea.", "A photo of the room": "Kuva huoneesta", + "About meetings & conferences": "About meetings & conferences", "Activities": "Aktiviteetit", "Add code": "Lisää koodi", "Add new card": "Lisää uusi kortti", @@ -21,6 +22,8 @@ "At the hotel": "Hotellissa", "Attractions": "Nähtävyydet", "Back to scandichotels.com": "Takaisin scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Vuodetyyppi", "Book": "Varaa", "Book reward night": "Kirjapalkinto-ilta", @@ -30,6 +33,7 @@ "Breakfast included": "Aamiainen sisältyy", "Bus terminal": "Bussiasema", "Business": "Business", + "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Peruuttaa", "Check in": "Sisäänkirjautuminen", "Check out": "Uloskirjautuminen", @@ -72,6 +76,8 @@ "Edit profile": "Muokkaa profiilia", "Email": "Sähköposti", "Enter destination or hotel": "Anna kohde tai hotelli", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin", "Explore nearby": "Tutustu lähialueeseen", "Extras to your booking": "Varauksessa lisäpalveluita", @@ -182,14 +188,21 @@ "Public price from": "Julkinen hinta alkaen", "Public transport": "Julkinen liikenne", "Read more": "Lue lisää", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Lue lisää hotellista", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Poista kortti jäsenprofiilista", "Restaurant": "Ravintola", "Restaurant & Bar": "Ravintola & Baari", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Kirjoita uusi salasana uudelleen", "Room & Terms": "Huone & Ehdot", "Room facilities": "Huoneen varustelu", "Rooms": "Huoneet", + "Rooms & Guests": "Huoneet & Vieraat", + "Rooms & Guestss": "Huoneet & Vieraat", + "Sauna and gym": "Sauna and gym", "Save": "Tallenna", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 65fa174b5..9f56be568 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -1,6 +1,7 @@ { "A destination or hotel name is needed to be able to search for a hotel room.": "Et reisemål eller hotellnavn er nødvendig for å kunne søke etter et hotellrom.", "A photo of the room": "Et bilde av rommet", + "About meetings & conferences": "About meetings & conferences", "Activities": "Aktiviteter", "Add code": "Legg til kode", "Add new card": "Legg til nytt kort", @@ -21,6 +22,8 @@ "At the hotel": "På hotellet", "Attractions": "Attraksjoner", "Back to scandichotels.com": "Tilbake til scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Seng type", "Book": "Bestill", "Book reward night": "Bestill belønningskveld", @@ -72,6 +75,8 @@ "Edit profile": "Rediger profil", "Email": "E-post", "Enter destination or hotel": "Skriv inn destinasjon eller hotell", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Utforsk alle nivåer og fordeler", "Explore nearby": "Utforsk i nærheten", "Extras to your booking": "Tilvalg til bestillingen din", @@ -182,14 +187,20 @@ "Public price from": "Offentlig pris fra", "Public transport": "Offentlig transport", "Read more": "Les mer", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Les mer om hotellet", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", "Restaurant": "Restaurant", "Restaurant & Bar": "Restaurant & Bar", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Skriv inn nytt passord på nytt", "Room & Terms": "Rom & Vilkår", "Room facilities": "Romfasiliteter", "Rooms": "Rom", + "Rooms & Guests": "Rom og gjester", + "Sauna and gym": "Sauna and gym", "Save": "Lagre", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 56274dfad..e1f48b548 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -1,6 +1,7 @@ { "A destination or hotel name is needed to be able to search for a hotel room.": "Ett destinations- eller hotellnamn behövs för att kunna söka efter ett hotellrum.", "A photo of the room": "Ett foto av rummet", + "About meetings & conferences": "About meetings & conferences", "Activities": "Aktiviteter", "Add code": "Lägg till kod", "Add new card": "Lägg till nytt kort", @@ -21,6 +22,8 @@ "At the hotel": "På hotellet", "Attractions": "Sevärdheter", "Back to scandichotels.com": "Tillbaka till scandichotels.com", + "Bar": "Bar", + "Bars": "Bars", "Bed type": "Sängtyp", "Book": "Boka", "Book reward night": "Boka frinatt", @@ -30,6 +33,7 @@ "Breakfast included": "Frukost ingår", "Bus terminal": "Bussterminal", "Business": "Business", + "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Avbryt", "Check in": "Checka in", "Check out": "Checka ut", @@ -72,6 +76,8 @@ "Edit profile": "Redigera profil", "Email": "E-post", "Enter destination or hotel": "Ange destination eller hotell", + "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Utforska alla nivåer och fördelar", "Explore nearby": "Utforska i närheten", "Extras to your booking": "Extra tillval till din bokning", @@ -183,14 +189,20 @@ "Public price from": "Offentligt pris från", "Public transport": "Kollektivtrafik", "Read more": "Läs mer", + "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Läs mer om hotellet", + "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Ta bort kortet från medlemsprofilen", "Restaurant": "Restaurang", "Restaurant & Bar": "Restaurang & Bar", + "Restaurants": "Restaurants", + "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Upprepa nytt lösenord", "Room & Terms": "Rum & Villkor", "Room facilities": "Rumfaciliteter", "Rooms": "Rum", + "Rooms & Guests": "Rum och gäster", + "Sauna and gym": "Sauna and gym", "Save": "Spara", "Scandic Friends Mastercard": "Scandic Friends Mastercard", "Scandic Friends Point Shop": "Scandic Friends Point Shop", diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index d1fb2dfe8..2c6d9a1a0 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -164,6 +164,16 @@ const detailedFacilitySchema = z.object({ filter: z.string().optional(), }) +const facilitySchema = z.object({ + headingText: z.string().optional(), // TODO: Should not be optional, remove when we get meetingsAndConferences headingText + heroImages: z.array( + z.object({ + metaData: imageMetaDataSchema, + imageSizes: imageSizesSchema, + }) + ), +}) + const healthFacilitySchema = z.object({ type: z.string(), content: z.object({ @@ -497,6 +507,9 @@ export const getHotelDataSchema = z.object({ socialMedia: socialMediaSchema, meta: metaSchema.optional(), isActive: z.boolean(), + conferencesAndMeetings: facilitySchema.optional(), + healthAndWellness: facilitySchema.optional(), + restaurantImages: facilitySchema.optional(), }), relationships: relationshipsSchema, }), @@ -778,3 +791,4 @@ export const apiLocationsSchema = z.object({ }) ), }) +export type Facility = z.infer & { id: string } diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 9c1042dbd..685e7f195 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -26,6 +26,7 @@ import { getRatesInputSchema, } from "./input" import { + Facility, getAvailabilitySchema, getHotelDataSchema, getRatesSchema, @@ -40,6 +41,7 @@ import { TWENTYFOUR_HOURS, } from "./utils" +import { facilityEnum } from "@/types/components/hotelPage/facilities" import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel" import type { RequestOptionsWithOutBody } from "@/types/fetch" import type { GetHotelPageData } from "@/types/trpc/routers/contentstack/hotelPage" @@ -173,7 +175,6 @@ export const hotelQueryRouter = router({ const included = validatedHotelData.data.included || [] const hotelAttributes = validatedHotelData.data.data.attributes - const images = extractHotelImages(hotelAttributes) const roomCategories = included @@ -212,6 +213,21 @@ export const hotelQueryRouter = router({ ? contentstackData?.content[0] : null + const facilities: Array = [ + { + ...apiJson.data.attributes.restaurantImages, + id: facilityEnum.restaurant, + }, + { + ...apiJson.data.attributes.conferencesAndMeetings, + id: facilityEnum.conference, + }, + { + ...apiJson.data.attributes.healthAndWellness, + id: facilityEnum.wellness, + }, + ] + getHotelSuccessCounter.add(1, { hotelId, lang, include }) console.info( "api.hotels.hotel success", @@ -229,7 +245,8 @@ export const hotelQueryRouter = router({ hotelImages: images, pointsOfInterest: hotelAttributes.pointsOfInterest, roomCategories, - activitiesCard: activities?.upcoming_activities_card, + activitiesCard: activities, + facilityCards: facilities, } }), availability: router({ diff --git a/types/components/cardImage.ts b/types/components/cardImage.ts index 9976a2db3..6ba7838eb 100644 --- a/types/components/cardImage.ts +++ b/types/components/cardImage.ts @@ -1,7 +1,6 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" -import type { FacilityCard } from "./hotelPage/facilities" export interface CardImageProps extends React.HTMLAttributes { - card: FacilityCard | undefined + card: CardProps | undefined imageCards: Pick[] } diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 228093fe0..1594c22b4 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -1,12 +1,6 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" -interface ColumnSpanOptions { - columnSpan: "one" | "two" | "three" -} - -export type FacilityCard = CardProps & ColumnSpanOptions - -export type Facility = Array +export type Facility = Array export type Facilities = Array @@ -17,3 +11,9 @@ export type FacilityProps = { export type CardGridProps = { facility: Facility } + +export enum facilityEnum { + wellness = "wellness-and-exercise", + conference = "meetings-and-conferences", + restaurant = "restaurant-and-bar", +} diff --git a/types/components/image.ts b/types/components/image.ts new file mode 100644 index 000000000..0284eaa29 --- /dev/null +++ b/types/components/image.ts @@ -0,0 +1,8 @@ +export type ApiImage = { + url: string + title: string + meta: { + alt: string + caption: string + } +} diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts new file mode 100644 index 000000000..9387817fb --- /dev/null +++ b/utils/facilityCards.ts @@ -0,0 +1,139 @@ +import { + meetingsAndConferences, + restaurantAndBar, + wellnessAndExercise, +} from "@/constants/routes/hotelPageParams" + +import { getIntl } from "@/i18n" +import { getLang } from "@/i18n/serverContext" + +import { + type Facilities, + type Facility as f, + facilityEnum, +} from "@/types/components/hotelPage/facilities" +import type { ImageVaultAsset } from "@/types/components/imageVault" +import type { CardProps } from "@/components/TempDesignSystem/Card/card" +import type { Facility } from "@/server/routers/hotels/output" + +type ActivityCard = { + background_image?: ImageVaultAsset + scripted_title?: string + heading: string + body_text: string + cta_text: string + contentPage: Array<{ href: string }> +} + +export function setActivityCard(activitiesCard: ActivityCard): f { + const hasImage = activitiesCard.background_image + return [ + { + id: "activities", + theme: hasImage ? "image" : "primaryDark", + scriptedTopTitle: activitiesCard.scripted_title, + heading: activitiesCard.heading, + bodyText: activitiesCard.body_text, + backgroundImage: hasImage ? activitiesCard.background_image : undefined, + primaryButton: hasImage + ? { + href: activitiesCard.contentPage[0].href, + title: activitiesCard.cta_text, + isExternal: false, + } + : undefined, + secondaryButton: hasImage + ? undefined + : { + href: activitiesCard.contentPage[0].href, + title: activitiesCard.cta_text, + isExternal: false, + }, + }, + ] +} + +export async function setFacilityCards(facilities: Array) { + const lang = getLang() + const intl = await getIntl() + + let cards: Facilities = [], + card: CardProps, + grid: Array + + facilities.map((facility) => { + card = {} + grid = [] + + card.scriptedTopTitle = facility.headingText + + facility.heroImages.map((image) => { + card = {} + ;(card.backgroundImage = { + url: image.imageSizes.large, + title: image.metaData.title, + meta: { + alt: image.metaData.altText, + caption: image.metaData.altText_En, + }, + }), + (card.theme = "image") + grid.push(card) + }) + card = {} + + switch (facility.id) { + case facilityEnum.wellness: + card.theme = "one" + card.id = "wellness-and-exercise" + ;(card.heading = intl.formatMessage({ id: "Sauna and gym" })), + (card.secondaryButton = { + href: `?s=${wellnessAndExercise[lang]}`, + title: intl.formatMessage({ + id: "Read more about wellness & exercise", + }), + isExternal: false, + }) + grid.unshift(card) + break + + case facilityEnum.conference: + card.theme = "primaryDim" + card.id = "meetings-and-conferences" + ;(card.heading = intl.formatMessage({ + id: "Events that make an impression", + })), + (card.secondaryButton = { + href: `?s=${meetingsAndConferences[lang]}`, + title: intl.formatMessage({ id: "About meetings & conferences" }), + isExternal: false, + }) + grid.push(card) + break + + case facilityEnum.restaurant: + card.theme = "primaryDark" + card.id = "restaurant-and-bar" + card.heading = intl.formatMessage({ + id: "Enjoy relaxed restaurant experiences", + }) + card.secondaryButton = { + href: `?s=${restaurantAndBar[lang]}`, + title: intl.formatMessage({ id: "Read more & book a table" }), + isExternal: false, + } + grid.unshift(card) + break + } + cards.push(grid) + }) + return cards +} + +/* lista över potentiella + Restaurant & Bar + Restaurants & bars + Restaurant + Bar + Breakfast restaurant (fallback om det inte finns restaurang eller bar) +*/ diff --git a/utils/imageCard.ts b/utils/imageCard.ts index b66c65954..4c4c99b66 100644 --- a/utils/imageCard.ts +++ b/utils/imageCard.ts @@ -1,10 +1,8 @@ -import type { - Facility, - FacilityCard, -} from "@/types/components/hotelPage/facilities" +import type { Facility } from "@/types/components/hotelPage/facilities" +import type { CardProps } from "@/components/TempDesignSystem/Card/card" export function sortCards(grid: Facility) { - const sortedCards = grid.slice(0).sort((a: FacilityCard, b: FacilityCard) => { + const sortedCards = grid.slice(0).sort((a: CardProps, b: CardProps) => { if (!a.backgroundImage && b.backgroundImage) { return 1 } From 369710b0a7872db8bd2a2d17820f423752e5084f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 15:35:53 +0200 Subject: [PATCH 33/64] fix(SW-302): add fallback title --- utils/facilityCards.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 9387817fb..1daa2da76 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -59,17 +59,18 @@ export async function setFacilityCards(facilities: Array) { let cards: Facilities = [], card: CardProps, + img: CardProps, grid: Array facilities.map((facility) => { card = {} grid = [] - card.scriptedTopTitle = facility.headingText + card.scriptedTopTitle = facility.headingText ?? "Fallback title" facility.heroImages.map((image) => { - card = {} - ;(card.backgroundImage = { + img = {} + ;(img.backgroundImage = { url: image.imageSizes.large, title: image.metaData.title, meta: { @@ -77,10 +78,9 @@ export async function setFacilityCards(facilities: Array) { caption: image.metaData.altText_En, }, }), - (card.theme = "image") - grid.push(card) + (img.theme = "image") + grid.push(img) }) - card = {} switch (facility.id) { case facilityEnum.wellness: From 02cb03f1549a2c33c2dfb83a119a868d54d6ce97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 15:42:15 +0200 Subject: [PATCH 34/64] refactor(SW-302): update naming --- .../Facilities/CardGrid/cardGrid.module.css | 1 - server/routers/hotels/query.ts | 8 ++++---- types/components/hotelPage/facilities.ts | 8 ++++---- utils/facilityCards.ts | 12 ++++++------ utils/imageCard.ts | 6 +++--- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css index 9cf0e4e50..0d453b437 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css +++ b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css @@ -24,7 +24,6 @@ display: grid; gap: var(--Spacing-x1); grid-template-columns: repeat(3, 1fr); - grid-auto-flow: dense; } .mobileGrid { diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 685e7f195..5abe2881e 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -41,7 +41,7 @@ import { TWENTYFOUR_HOURS, } from "./utils" -import { facilityEnum } from "@/types/components/hotelPage/facilities" +import { FacilityEnum } from "@/types/components/hotelPage/facilities" import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel" import type { RequestOptionsWithOutBody } from "@/types/fetch" import type { GetHotelPageData } from "@/types/trpc/routers/contentstack/hotelPage" @@ -216,15 +216,15 @@ export const hotelQueryRouter = router({ const facilities: Array = [ { ...apiJson.data.attributes.restaurantImages, - id: facilityEnum.restaurant, + id: FacilityEnum.restaurant, }, { ...apiJson.data.attributes.conferencesAndMeetings, - id: facilityEnum.conference, + id: FacilityEnum.conference, }, { ...apiJson.data.attributes.healthAndWellness, - id: facilityEnum.wellness, + id: FacilityEnum.wellness, }, ] diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 1594c22b4..71babc174 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -1,18 +1,18 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export type Facility = Array +export type FacilityCards = Array -export type Facilities = Array +export type Facilities = Array export type FacilityProps = { facilities: Facilities } export type CardGridProps = { - facility: Facility + facility: FacilityCards } -export enum facilityEnum { +export enum FacilityEnum { wellness = "wellness-and-exercise", conference = "meetings-and-conferences", restaurant = "restaurant-and-bar", diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 1daa2da76..d0d2c0e5a 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -9,8 +9,8 @@ import { getLang } from "@/i18n/serverContext" import { type Facilities, - type Facility as f, - facilityEnum, + type FacilityCards, + FacilityEnum, } from "@/types/components/hotelPage/facilities" import type { ImageVaultAsset } from "@/types/components/imageVault" import type { CardProps } from "@/components/TempDesignSystem/Card/card" @@ -25,7 +25,7 @@ type ActivityCard = { contentPage: Array<{ href: string }> } -export function setActivityCard(activitiesCard: ActivityCard): f { +export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { const hasImage = activitiesCard.background_image return [ { @@ -83,7 +83,7 @@ export async function setFacilityCards(facilities: Array) { }) switch (facility.id) { - case facilityEnum.wellness: + case FacilityEnum.wellness: card.theme = "one" card.id = "wellness-and-exercise" ;(card.heading = intl.formatMessage({ id: "Sauna and gym" })), @@ -97,7 +97,7 @@ export async function setFacilityCards(facilities: Array) { grid.unshift(card) break - case facilityEnum.conference: + case FacilityEnum.conference: card.theme = "primaryDim" card.id = "meetings-and-conferences" ;(card.heading = intl.formatMessage({ @@ -111,7 +111,7 @@ export async function setFacilityCards(facilities: Array) { grid.push(card) break - case facilityEnum.restaurant: + case FacilityEnum.restaurant: card.theme = "primaryDark" card.id = "restaurant-and-bar" card.heading = intl.formatMessage({ diff --git a/utils/imageCard.ts b/utils/imageCard.ts index 4c4c99b66..84a75da18 100644 --- a/utils/imageCard.ts +++ b/utils/imageCard.ts @@ -1,8 +1,8 @@ -import type { Facility } from "@/types/components/hotelPage/facilities" +import type { FacilityCards } from "@/types/components/hotelPage/facilities" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export function sortCards(grid: Facility) { - const sortedCards = grid.slice(0).sort((a: CardProps, b: CardProps) => { +export function sortCards(cards: FacilityCards) { + const sortedCards = cards.slice(0).sort((a: CardProps, b: CardProps) => { if (!a.backgroundImage && b.backgroundImage) { return 1 } From ea11d3d9b046538fd13ae3b7c7051999312f09b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 17:43:28 +0200 Subject: [PATCH 35/64] fix(SW-302): update translations --- i18n/dictionaries/da.json | 1 + i18n/dictionaries/fi.json | 1 + i18n/dictionaries/no.json | 1 + i18n/dictionaries/sv.json | 1 + 4 files changed, 4 insertions(+) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 21097a538..71566409e 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -84,6 +84,7 @@ "FAQ": "Ofte stillede spørgsmål", "Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.", "Fair": "Messe", + "FAQ": "FAQ", "Find booking": "Find booking", "Find hotels": "Find hotel", "Flexibility": "Fleksibilitet", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index ab17e3f83..3be690ca0 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -84,6 +84,7 @@ "FAQ": "UKK", "Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.", "Fair": "Messukeskus", + "FAQ": "FAQ", "Find booking": "Etsi varaus", "Find hotels": "Etsi hotelleja", "Flexibility": "Joustavuus", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 9f56be568..dcd51350b 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -83,6 +83,7 @@ "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.", "Fair": "Messe", + "FAQ": "FAQ", "Find booking": "Finn booking", "Find hotels": "Finn hotell", "Flexibility": "Fleksibilitet", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index e1f48b548..d1327d0b7 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -84,6 +84,7 @@ "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.", "Fair": "Mässa", + "FAQ": "FAQ", "Find booking": "Hitta bokning", "Find hotels": "Hitta hotell", "Flexibility": "Flexibilitet", From 6c88d3431a78b3e322e974db26448e25b11784d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 17:56:19 +0200 Subject: [PATCH 36/64] chore(SW-302): add dynamic restaurant title --- .../HotelPage/TabNavigation/index.tsx | 41 ++++++++++++----- components/ContentType/HotelPage/index.tsx | 16 +++++-- constants/routes/hotelPageParams.js | 32 ++++++++++++- types/components/hotelPage/tabNavigation.ts | 7 ++- utils/facilityCards.ts | 46 +++++++++++++++---- 5 files changed, 115 insertions(+), 27 deletions(-) diff --git a/components/ContentType/HotelPage/TabNavigation/index.tsx b/components/ContentType/HotelPage/TabNavigation/index.tsx index e594d757c..220139770 100644 --- a/components/ContentType/HotelPage/TabNavigation/index.tsx +++ b/components/ContentType/HotelPage/TabNavigation/index.tsx @@ -6,21 +6,40 @@ import useHash from "@/hooks/useHash" import styles from "./tabNavigation.module.css" -import { HotelHashValues } from "@/types/components/hotelPage/tabNavigation" +import { + HotelHashValues, + type TabNavigationProps, +} from "@/types/components/hotelPage/tabNavigation" -export default function TabNavigation() { +export default function TabNavigation({ + restaurantRefData, +}: TabNavigationProps) { const hash = useHash() const intl = useIntl() - const hotelTabLinks: { href: HotelHashValues; text: string }[] = [ - // TODO these titles will need to reflect the facility card titles, which will vary between hotels - { href: HotelHashValues.overview, text: "Overview" }, - { href: HotelHashValues.rooms, text: "Rooms" }, - { href: HotelHashValues.restaurant, text: "Restaurant & Bar" }, - { href: HotelHashValues.meetings, text: "Meetings & Conferences" }, - { href: HotelHashValues.wellness, text: "Wellness & Exercise" }, - { href: HotelHashValues.activities, text: "Activities" }, - { href: HotelHashValues.faq, text: "FAQ" }, + const hotelTabLinks: { href: HotelHashValues | string; text: string }[] = [ + { + href: HotelHashValues.overview, + text: intl.formatMessage({ id: "Overview" }), + }, + { href: HotelHashValues.rooms, text: intl.formatMessage({ id: "Rooms" }) }, + { + href: "#" + restaurantRefData.href.en, + text: intl.formatMessage({ id: restaurantRefData.title }), + }, + { + href: HotelHashValues.meetings, + text: intl.formatMessage({ id: "Meetings & Conferences" }), + }, + { + href: HotelHashValues.wellness, + text: intl.formatMessage({ id: "Wellness & Exercise" }), + }, + { + href: HotelHashValues.activities, + text: intl.formatMessage({ id: "Activities" }), + }, + { href: HotelHashValues.faq, text: intl.formatMessage({ id: "FAQ" }) }, ] return ( diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index 1fcbb4a10..d6130acbc 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -7,7 +7,12 @@ import SidePeek from "@/components/TempDesignSystem/SidePeek" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" -import { setActivityCard, setFacilityCards } from "@/utils/facilityCards" +import { + getRestaurantDynamicTitles, + setActivityCard, + setFacilityCards, +} from "@/utils/facilityCards" + import DynamicMap from "./Map/DynamicMap" import MapCard from "./Map/MapCard" import MobileMapToggle from "./Map/MobileMapToggle" @@ -47,7 +52,10 @@ export default async function HotelPage() { facilityCards, } = hotelData - const facilities = await setFacilityCards(facilityCards) + const facilities = await setFacilityCards( + facilityCards, + hotelDetailedFacilities + ) activitiesCard && facilities.push(setActivityCard(activitiesCard)) const topThreePois = pointsOfInterest.slice(0, 3) @@ -61,7 +69,9 @@ export default async function HotelPage() {
- +
) { +export async function setFacilityCards( + facilities: Array, + amenities: HotelData["data"]["attributes"]["detailedFacilities"] +) { const lang = getLang() const intl = await getIntl() @@ -112,13 +119,14 @@ export async function setFacilityCards(facilities: Array) { break case FacilityEnum.restaurant: + const { href, title } = getRestaurantDynamicTitles(amenities) card.theme = "primaryDark" - card.id = "restaurant-and-bar" + card.id = href[lang] card.heading = intl.formatMessage({ id: "Enjoy relaxed restaurant experiences", }) card.secondaryButton = { - href: `?s=${restaurantAndBar[lang]}`, + href: `?s=${href[lang]}`, title: intl.formatMessage({ id: "Read more & book a table" }), isExternal: false, } @@ -130,10 +138,28 @@ export async function setFacilityCards(facilities: Array) { return cards } -/* lista över potentiella - Restaurant & Bar - Restaurants & bars - Restaurant - Bar - Breakfast restaurant (fallback om det inte finns restaurang eller bar) -*/ +export function getRestaurantDynamicTitles( + amenities: HotelData["data"]["attributes"]["detailedFacilities"] +) { + const hasBar = amenities.some( + (facility) => facility.id == 1606 || facility.id == 1014 // bar & rooftop bar id + ) + const hasRestaurant = amenities.some((facility) => facility.id == 1383) // restaurant id + + let href, title: string + if (hasBar && hasRestaurant) { + href = restaurantAndBar + title = "Restaurant & Bar" + } else if (hasBar) { + href = bar + title = "Bar" + } else if (hasRestaurant) { + href = restaurant + title = "Restaurant" + } else { + href = breakfastRestaurant + title = "Breakfast restaurant" + } + + return { href, title } +} From 2438d04f43dd2bb71423ff2919699b381a141d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 17 Sep 2024 22:25:35 +0200 Subject: [PATCH 37/64] refactor(SW-302): cleanup --- .../HotelPage/TabNavigation/index.tsx | 8 ++--- components/ContentType/HotelPage/index.tsx | 5 ++-- constants/routes/hotelPageParams.js | 8 ++--- types/components/hotelPage/tabNavigation.ts | 3 +- utils/facilityCards.ts | 29 +++++++++---------- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/components/ContentType/HotelPage/TabNavigation/index.tsx b/components/ContentType/HotelPage/TabNavigation/index.tsx index 220139770..b14476189 100644 --- a/components/ContentType/HotelPage/TabNavigation/index.tsx +++ b/components/ContentType/HotelPage/TabNavigation/index.tsx @@ -11,9 +11,7 @@ import { type TabNavigationProps, } from "@/types/components/hotelPage/tabNavigation" -export default function TabNavigation({ - restaurantRefData, -}: TabNavigationProps) { +export default function TabNavigation({ restaurantTitle }: TabNavigationProps) { const hash = useHash() const intl = useIntl() @@ -24,8 +22,8 @@ export default function TabNavigation({ }, { href: HotelHashValues.rooms, text: intl.formatMessage({ id: "Rooms" }) }, { - href: "#" + restaurantRefData.href.en, - text: intl.formatMessage({ id: restaurantRefData.title }), + href: HotelHashValues.restaurant, + text: intl.formatMessage({ id: restaurantTitle }), }, { href: HotelHashValues.meetings, diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index d6130acbc..9b27a4c12 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -6,9 +6,8 @@ import SidePeekProvider from "@/components/SidePeekProvider" import SidePeek from "@/components/TempDesignSystem/SidePeek" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" - import { - getRestaurantDynamicTitles, + getRestaurantHeading, setActivityCard, setFacilityCards, } from "@/utils/facilityCards" @@ -70,7 +69,7 @@ export default async function HotelPage() {
diff --git a/constants/routes/hotelPageParams.js b/constants/routes/hotelPageParams.js index c37b59869..97c51b4b5 100644 --- a/constants/routes/hotelPageParams.js +++ b/constants/routes/hotelPageParams.js @@ -52,7 +52,7 @@ export const restaurantAndBar = { de: "Restaurant-und-Bar", } -export const restaurant = { +/*export const restaurant = { en: "restaurant", sv: "restaurant", no: "restaurant", @@ -78,7 +78,7 @@ export const breakfastRestaurant = { fi: "aamiaisravintola", de: "Frühstücksrestaurant", } - +*/ const params = { about, amenities, @@ -86,9 +86,9 @@ const params = { activities, meetingsAndConferences, restaurantAndBar, - bar, + /*bar, restaurant, - breakfastRestaurant, + breakfastRestaurant,*/ } export default params diff --git a/types/components/hotelPage/tabNavigation.ts b/types/components/hotelPage/tabNavigation.ts index b6368934c..c16f6c1ab 100644 --- a/types/components/hotelPage/tabNavigation.ts +++ b/types/components/hotelPage/tabNavigation.ts @@ -1,6 +1,7 @@ export enum HotelHashValues { // Should these be translated? overview = "#overview", rooms = "#rooms-section", + restaurant = "#restaurant-and-bar", meetings = "#meetings-and-conferences", wellness = "#wellness-and-exercise", activities = "#activities", @@ -8,5 +9,5 @@ export enum HotelHashValues { // Should these be translated? } export type TabNavigationProps = { - restaurantRefData: { href: any; title: string } + restaurantTitle: string } diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 6d4ce6801..3e9fd0d67 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -1,8 +1,5 @@ import { - bar, - breakfastRestaurant, meetingsAndConferences, - restaurant, restaurantAndBar, wellnessAndExercise, } from "@/constants/routes/hotelPageParams" @@ -92,7 +89,7 @@ export async function setFacilityCards( switch (facility.id) { case FacilityEnum.wellness: card.theme = "one" - card.id = "wellness-and-exercise" + card.id = wellnessAndExercise[lang] ;(card.heading = intl.formatMessage({ id: "Sauna and gym" })), (card.secondaryButton = { href: `?s=${wellnessAndExercise[lang]}`, @@ -106,7 +103,7 @@ export async function setFacilityCards( case FacilityEnum.conference: card.theme = "primaryDim" - card.id = "meetings-and-conferences" + card.id = meetingsAndConferences[lang] ;(card.heading = intl.formatMessage({ id: "Events that make an impression", })), @@ -119,14 +116,14 @@ export async function setFacilityCards( break case FacilityEnum.restaurant: - const { href, title } = getRestaurantDynamicTitles(amenities) + const title = getRestaurantHeading(amenities) card.theme = "primaryDark" - card.id = href[lang] + card.id = restaurantAndBar[lang] card.heading = intl.formatMessage({ id: "Enjoy relaxed restaurant experiences", }) card.secondaryButton = { - href: `?s=${href[lang]}`, + href: `?s=${restaurantAndBar[lang]}`, title: intl.formatMessage({ id: "Read more & book a table" }), isExternal: false, } @@ -138,7 +135,7 @@ export async function setFacilityCards( return cards } -export function getRestaurantDynamicTitles( +export function getRestaurantHeading( amenities: HotelData["data"]["attributes"]["detailedFacilities"] ) { const hasBar = amenities.some( @@ -146,20 +143,20 @@ export function getRestaurantDynamicTitles( ) const hasRestaurant = amenities.some((facility) => facility.id == 1383) // restaurant id - let href, title: string + //let href, + let title: string if (hasBar && hasRestaurant) { - href = restaurantAndBar + //href = restaurantAndBar title = "Restaurant & Bar" } else if (hasBar) { - href = bar + //href = bar title = "Bar" } else if (hasRestaurant) { - href = restaurant + //href = restaurant title = "Restaurant" } else { - href = breakfastRestaurant + //href = breakfastRestaurant title = "Breakfast restaurant" } - - return { href, title } + return title } From 72c961eabf17970159157d0d8ba0f7af12eb9705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Thu, 19 Sep 2024 13:26:05 +0200 Subject: [PATCH 38/64] refactor(SW-302): code cleanup --- .../HotelPage/AmenitiesList/index.tsx | 4 +-- .../HotelPage/Facilities/CardGrid/index.tsx | 33 ++++++++++++------- .../HotelPage/Facilities/index.tsx | 9 +++-- .../TempDesignSystem/Card/CardImage/index.tsx | 10 ++++-- server/routers/hotels/output.ts | 2 +- server/routers/hotels/query.ts | 4 +-- types/components/hotelPage/facilities.ts | 13 ++++++-- types/hotel.ts | 4 +++ utils/facilityCards.ts | 23 +++++++------ 9 files changed, 65 insertions(+), 37 deletions(-) diff --git a/components/ContentType/HotelPage/AmenitiesList/index.tsx b/components/ContentType/HotelPage/AmenitiesList/index.tsx index 20bad025d..06483f434 100644 --- a/components/ContentType/HotelPage/AmenitiesList/index.tsx +++ b/components/ContentType/HotelPage/AmenitiesList/index.tsx @@ -10,12 +10,12 @@ import { getLang } from "@/i18n/serverContext" import styles from "./amenitiesList.module.css" -import { HotelData } from "@/types/hotel" +import type { Amenities } from "@/types/hotel" export default async function AmenitiesList({ detailedFacilities, }: { - detailedFacilities: HotelData["data"]["attributes"]["detailedFacilities"] + detailedFacilities: Amenities }) { const intl = await getIntl() const sortedAmenities = detailedFacilities diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 1f1b9cc58..924d2c1ed 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -6,31 +6,40 @@ import { sortCards } from "@/utils/imageCard" import styles from "./cardGrid.module.css" import type { CardGridProps } from "@/types/components/hotelPage/facilities" +import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export default async function CardGrid({ facility }: CardGridProps) { - const imageCard = sortCards(facility) - const nrCards = facility.length +export default async function CardGrid({ facilities }: CardGridProps) { + const imageCard = sortCards(facilities) + const nrCards = facilities.length + + function getCardClassName(card: CardProps): string { + if (nrCards === 1) { + return styles.spanThree + } else if (nrCards === 2 && card.backgroundImage) { + return styles.spanTwo + } + return styles.spanOne + } return (
- {facility.map((card: any, idx: number) => ( + {facilities.map((card: CardProps, idx: number) => ( ))} diff --git a/components/ContentType/HotelPage/Facilities/index.tsx b/components/ContentType/HotelPage/Facilities/index.tsx index 8775d0de2..04245c573 100644 --- a/components/ContentType/HotelPage/Facilities/index.tsx +++ b/components/ContentType/HotelPage/Facilities/index.tsx @@ -4,13 +4,16 @@ import CardGrid from "./CardGrid" import styles from "./facilities.module.css" -import type { FacilityProps } from "@/types/components/hotelPage/facilities" +import type { + FacilityCards, + FacilityProps, +} from "@/types/components/hotelPage/facilities" export default async function Facilities({ facilities }: FacilityProps) { return ( - {facilities.map((facility: any, idx: number) => ( - + {facilities.map((facilityCards: FacilityCards, idx: number) => ( + ))} ) diff --git a/components/TempDesignSystem/Card/CardImage/index.tsx b/components/TempDesignSystem/Card/CardImage/index.tsx index 2ee17f37d..876316c8c 100644 --- a/components/TempDesignSystem/Card/CardImage/index.tsx +++ b/components/TempDesignSystem/Card/CardImage/index.tsx @@ -15,10 +15,16 @@ export default function CardImage({
{imageCards.map( - ({ backgroundImage }) => + ({ backgroundImage }, idx: Number) => backgroundImage && ( {backgroundImage.title} = [ + const facilities: Facility[] = [ { ...apiJson.data.attributes.restaurantImages, id: FacilityEnum.restaurant, diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 71babc174..0e539615a 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -1,15 +1,15 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export type FacilityCards = Array +export type FacilityCards = CardProps[] -export type Facilities = Array +export type Facilities = FacilityCards[] export type FacilityProps = { facilities: Facilities } export type CardGridProps = { - facility: FacilityCards + facilities: FacilityCards } export enum FacilityEnum { @@ -17,3 +17,10 @@ export enum FacilityEnum { conference = "meetings-and-conferences", restaurant = "restaurant-and-bar", } + +export enum RestaurantHeadings { + restaurantAndBar = "Restaurant & Bar", + bar = "Bar", + restaurant = "Restaurant", + breakfastRestaurant = "Breakfast restaurant", +} diff --git a/types/hotel.ts b/types/hotel.ts index f4436fb6c..203e2423f 100644 --- a/types/hotel.ts +++ b/types/hotel.ts @@ -1,6 +1,7 @@ import { z } from "zod" import { + facilitySchema, getHotelDataSchema, parkingSchema, pointOfInterestSchema, @@ -13,6 +14,8 @@ export type Hotel = HotelData["data"]["attributes"] export type HotelAddress = HotelData["data"]["attributes"]["address"] export type HotelLocation = HotelData["data"]["attributes"]["location"] +export type Amenities = HotelData["data"]["attributes"]["detailedFacilities"] + type HotelRatings = HotelData["data"]["attributes"]["ratings"] export type HotelTripAdvisor = | NonNullable["tripAdvisor"] @@ -52,3 +55,4 @@ export enum PointOfInterestGroupEnum { } export type ParkingData = z.infer +export type Facility = z.infer & { id: string } diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 3e9fd0d67..e8143de74 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -11,11 +11,11 @@ import { type Facilities, type FacilityCards, FacilityEnum, + RestaurantHeadings, } from "@/types/components/hotelPage/facilities" import type { ImageVaultAsset } from "@/types/components/imageVault" -import type { HotelData } from "@/types/hotel" +import type { Amenities, Facility } from "@/types/hotel" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -import type { Facility } from "@/server/routers/hotels/output" type ActivityCard = { background_image?: ImageVaultAsset @@ -55,8 +55,8 @@ export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { } export async function setFacilityCards( - facilities: Array, - amenities: HotelData["data"]["attributes"]["detailedFacilities"] + facilities: Facility[], + amenities: Amenities ) { const lang = getLang() const intl = await getIntl() @@ -135,28 +135,27 @@ export async function setFacilityCards( return cards } -export function getRestaurantHeading( - amenities: HotelData["data"]["attributes"]["detailedFacilities"] -) { +export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { const hasBar = amenities.some( (facility) => facility.id == 1606 || facility.id == 1014 // bar & rooftop bar id ) const hasRestaurant = amenities.some((facility) => facility.id == 1383) // restaurant id //let href, - let title: string + let title: RestaurantHeadings + if (hasBar && hasRestaurant) { //href = restaurantAndBar - title = "Restaurant & Bar" + title = RestaurantHeadings.restaurantAndBar } else if (hasBar) { //href = bar - title = "Bar" + title = RestaurantHeadings.bar } else if (hasRestaurant) { //href = restaurant - title = "Restaurant" + title = RestaurantHeadings.restaurant } else { //href = breakfastRestaurant - title = "Breakfast restaurant" + title = RestaurantHeadings.breakfastRestaurant } return title } From 32c9e73ba9e2be80d50d5ff171cae4fc63455a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Thu, 19 Sep 2024 13:29:03 +0200 Subject: [PATCH 39/64] fix(SW-302): remove comments --- utils/facilityCards.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index e8143de74..724598453 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -141,21 +141,12 @@ export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { ) const hasRestaurant = amenities.some((facility) => facility.id == 1383) // restaurant id - //let href, - let title: RestaurantHeadings - if (hasBar && hasRestaurant) { - //href = restaurantAndBar - title = RestaurantHeadings.restaurantAndBar + return RestaurantHeadings.restaurantAndBar } else if (hasBar) { - //href = bar - title = RestaurantHeadings.bar + return RestaurantHeadings.bar } else if (hasRestaurant) { - //href = restaurant - title = RestaurantHeadings.restaurant - } else { - //href = breakfastRestaurant - title = RestaurantHeadings.breakfastRestaurant + return RestaurantHeadings.restaurant } - return title + return RestaurantHeadings.breakfastRestaurant } From a12eea5493876b103e7797be36133bd927abe64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Sat, 21 Sep 2024 11:19:38 +0200 Subject: [PATCH 40/64] refactor(SW-302): split upp function into two --- .../Facilities/CardGrid/cardGrid.module.css | 8 +- server/routers/hotels/output.ts | 2 +- utils/facilityCards.ts | 91 ++++++++++--------- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css index 0d453b437..515b772e3 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css +++ b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css @@ -11,22 +11,22 @@ } .desktopGrid { - display: none; + display: none !important; } .mobileGrid { - display: grid; + display: grid !important; gap: var(--Spacing-x-quarter); } @media screen and (min-width: 768px) { .desktopGrid { - display: grid; + display: grid !important; gap: var(--Spacing-x1); grid-template-columns: repeat(3, 1fr); } .mobileGrid { - display: none; + display: none !important; } } diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index 5183ad02c..1856f2243 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -165,7 +165,7 @@ const detailedFacilitySchema = z.object({ }) export const facilitySchema = z.object({ - headingText: z.string().optional(), // TODO: Should not be optional, remove when we get meetingsAndConferences headingText + headingText: z.string(), heroImages: z.array( z.object({ metaData: imageMetaDataSchema, diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 724598453..87893399d 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -54,26 +54,36 @@ export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { ] } -export async function setFacilityCards( - facilities: Facility[], - amenities: Amenities +async function setCardProps( + theme: CardProps["theme"], + heading: string, + buttonText: string, + href: string ) { - const lang = getLang() const intl = await getIntl() + const card: CardProps = {} - let cards: Facilities = [], - card: CardProps, - img: CardProps, - grid: Array + card.theme = theme + card.id = href + card.heading = intl.formatMessage({ id: heading }) + card.secondaryButton = { + href: `?s=${href}`, + title: intl.formatMessage({ id: buttonText }), + isExternal: false, + } + return card +} - facilities.map((facility) => { - card = {} - grid = [] +export function setFacilityCards(facilities: Facility[], amenities: Amenities) { + const lang = getLang() + const cards: Facilities = [] - card.scriptedTopTitle = facility.headingText ?? "Fallback title" + facilities.forEach(async (facility) => { + const grid: Array = [] + let card: CardProps = {} - facility.heroImages.map((image) => { - img = {} + facility.heroImages.forEach((image) => { + const img: CardProps = {} ;(img.backgroundImage = { url: image.imageSizes.large, title: image.metaData.title, @@ -88,45 +98,36 @@ export async function setFacilityCards( switch (facility.id) { case FacilityEnum.wellness: - card.theme = "one" - card.id = wellnessAndExercise[lang] - ;(card.heading = intl.formatMessage({ id: "Sauna and gym" })), - (card.secondaryButton = { - href: `?s=${wellnessAndExercise[lang]}`, - title: intl.formatMessage({ - id: "Read more about wellness & exercise", - }), - isExternal: false, - }) + card = await setCardProps( + "one", + "Sauna and gym", + "Read more about wellness & exercise", + wellnessAndExercise[lang] + ) + card.scriptedTopTitle = facility.headingText grid.unshift(card) break case FacilityEnum.conference: - card.theme = "primaryDim" - card.id = meetingsAndConferences[lang] - ;(card.heading = intl.formatMessage({ - id: "Events that make an impression", - })), - (card.secondaryButton = { - href: `?s=${meetingsAndConferences[lang]}`, - title: intl.formatMessage({ id: "About meetings & conferences" }), - isExternal: false, - }) + card = await setCardProps( + "primaryDim", + "Events that make an impression", + "About meetings & conferences", + meetingsAndConferences[lang] + ) + card.scriptedTopTitle = facility.headingText grid.push(card) break case FacilityEnum.restaurant: - const title = getRestaurantHeading(amenities) - card.theme = "primaryDark" - card.id = restaurantAndBar[lang] - card.heading = intl.formatMessage({ - id: "Enjoy relaxed restaurant experiences", - }) - card.secondaryButton = { - href: `?s=${restaurantAndBar[lang]}`, - title: intl.formatMessage({ id: "Read more & book a table" }), - isExternal: false, - } + //const title = getRestaurantHeading(amenities) // TODO will be used later + card = await setCardProps( + "primaryDark", + "Enjoy relaxed restaurant experiences", + "Read more & book a table", + restaurantAndBar[lang] + ) + card.scriptedTopTitle = facility.headingText grid.unshift(card) break } From 1d8319bfcb89661cf7b02ece3289005ebf3ad27c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 10:57:22 +0200 Subject: [PATCH 41/64] fix(SW-302): fixes after rebase --- .../ContentType/HotelPage/Facilities/utils.ts | 35 ------------------- components/ContentType/HotelPage/index.tsx | 2 +- components/TempDesignSystem/Card/index.tsx | 8 +++-- i18n/dictionaries/da.json | 1 - i18n/dictionaries/fi.json | 1 - i18n/dictionaries/no.json | 1 - i18n/dictionaries/sv.json | 1 - server/routers/hotels/query.ts | 2 +- utils/facilityCards.ts | 5 ++- 9 files changed, 11 insertions(+), 45 deletions(-) delete mode 100644 components/ContentType/HotelPage/Facilities/utils.ts diff --git a/components/ContentType/HotelPage/Facilities/utils.ts b/components/ContentType/HotelPage/Facilities/utils.ts deleted file mode 100644 index 1086e7430..000000000 --- a/components/ContentType/HotelPage/Facilities/utils.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Facility } from "@/types/components/hotelPage/facilities" -import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" - -export function setActivityCard(activitiesCard: ActivityCard): Facility { - const hasImage = !!activitiesCard.background_image - return [ - { - id: "activities", - theme: hasImage ? "image" : "primaryDark", - scriptedTopTitle: activitiesCard.scripted_title, - heading: activitiesCard.heading, - bodyText: activitiesCard.body_text, - backgroundImage: hasImage ? activitiesCard.background_image : undefined, - primaryButton: hasImage - ? { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - } - : undefined, - secondaryButton: hasImage - ? undefined - : { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - }, - columnSpan: "three", - }, - ] -} - -export function getCardTheme() { - // TODO -} diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index 9b27a4c12..66b5bb46d 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -55,7 +55,7 @@ export default async function HotelPage() { facilityCards, hotelDetailedFacilities ) - activitiesCard && facilities.push(setActivityCard(activitiesCard)) + //activitiesCard && facilities.push(setActivityCard(activitiesCard)) const topThreePois = pointsOfInterest.slice(0, 3) const coordinates = { diff --git a/components/TempDesignSystem/Card/index.tsx b/components/TempDesignSystem/Card/index.tsx index 94cc08773..f3a8f3594 100644 --- a/components/TempDesignSystem/Card/index.tsx +++ b/components/TempDesignSystem/Card/index.tsx @@ -11,6 +11,7 @@ import { cardVariants } from "./variants" import styles from "./card.module.css" +import type { ImageVaultAsset } from "@/types/components/imageVault" import type { CardProps } from "./card" export default function Card({ @@ -30,12 +31,13 @@ export default function Card({ const buttonTheme = getTheme(theme) imageHeight = imageHeight || 320 - imageWidth = + + /*imageWidth = imageWidth || (backgroundImage ? backgroundImage.dimensions.aspectRatio * imageHeight : 420) - +*/ return (
diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 71566409e..21097a538 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -84,7 +84,6 @@ "FAQ": "Ofte stillede spørgsmål", "Failed to delete credit card, please try again later.": "Kunne ikke slette kreditkort. Prøv venligst igen senere.", "Fair": "Messe", - "FAQ": "FAQ", "Find booking": "Find booking", "Find hotels": "Find hotel", "Flexibility": "Fleksibilitet", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 3be690ca0..ab17e3f83 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -84,7 +84,6 @@ "FAQ": "UKK", "Failed to delete credit card, please try again later.": "Luottokortin poistaminen epäonnistui, yritä myöhemmin uudelleen.", "Fair": "Messukeskus", - "FAQ": "FAQ", "Find booking": "Etsi varaus", "Find hotels": "Etsi hotelleja", "Flexibility": "Joustavuus", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index dcd51350b..8bc1eafb2 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -80,7 +80,6 @@ "Explore all levels and benefits": "Utforsk alle nivåer og fordeler", "Explore nearby": "Utforsk i nærheten", "Extras to your booking": "Tilvalg til bestillingen din", - "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Kunne ikke slette kredittkortet, prøv igjen senere.", "Fair": "Messe", "FAQ": "FAQ", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index d1327d0b7..e1f48b548 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -84,7 +84,6 @@ "FAQ": "FAQ", "Failed to delete credit card, please try again later.": "Det gick inte att ta bort kreditkortet, försök igen senare.", "Fair": "Mässa", - "FAQ": "FAQ", "Find booking": "Hitta bokning", "Find hotels": "Hitta hotell", "Flexibility": "Flexibilitet", diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 08b1c59e5..0fae3ff79 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -245,7 +245,7 @@ export const hotelQueryRouter = router({ hotelImages: images, pointsOfInterest: hotelAttributes.pointsOfInterest, roomCategories, - activitiesCard: activities, + activitiesCard: activities?.upcoming_activities_card, facilityCards: facilities, } }), diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 87893399d..0d6ea64c2 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -74,7 +74,10 @@ async function setCardProps( return card } -export function setFacilityCards(facilities: Facility[], amenities: Amenities) { +export async function setFacilityCards( + facilities: Facility[], + amenities: Amenities +) { const lang = getLang() const cards: Facilities = [] From d78218801fabfb839af771eb36ee4359cd3bb934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 11:02:59 +0200 Subject: [PATCH 42/64] fix(SW-302): add facility ID enum --- types/components/hotelPage/facilities.ts | 6 ++++++ utils/facilityCards.ts | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 0e539615a..dbe27ea6a 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -24,3 +24,9 @@ export enum RestaurantHeadings { restaurant = "Restaurant", breakfastRestaurant = "Breakfast restaurant", } + +export enum FacilityIds { + bar = 1606, + rooftopBar = 1014, + restaurant = 1383, +} diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 0d6ea64c2..fb02ea9c0 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -11,6 +11,7 @@ import { type Facilities, type FacilityCards, FacilityEnum, + FacilityIds, RestaurantHeadings, } from "@/types/components/hotelPage/facilities" import type { ImageVaultAsset } from "@/types/components/imageVault" @@ -141,9 +142,12 @@ export async function setFacilityCards( export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { const hasBar = amenities.some( - (facility) => facility.id == 1606 || facility.id == 1014 // bar & rooftop bar id + (facility) => + facility.id == FacilityIds.bar || facility.id == FacilityIds.rooftopBar + ) + const hasRestaurant = amenities.some( + (facility) => facility.id == FacilityIds.restaurant ) - const hasRestaurant = amenities.some((facility) => facility.id == 1383) // restaurant id if (hasBar && hasRestaurant) { return RestaurantHeadings.restaurantAndBar From d55644db7cf26c6c5ddbe8c8e690b9207be9dfe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 12:11:33 +0200 Subject: [PATCH 43/64] fix(SW-302): plural translations --- i18n/dictionaries/da.json | 6 ++---- i18n/dictionaries/de.json | 6 ++---- i18n/dictionaries/en.json | 6 ++---- i18n/dictionaries/fi.json | 6 ++---- i18n/dictionaries/no.json | 6 ++---- i18n/dictionaries/sv.json | 6 ++---- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 21097a538..b373e531f 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -22,8 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Attraktioner", "Back to scandichotels.com": "Tilbage til scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Seng type", "Book": "Book", "Book reward night": "Book bonusnat", @@ -192,9 +191,8 @@ "Read more about the hotel": "Læs mere om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", - "Restaurant": "Restaurant", + "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", "Restaurant & Bar": "Restaurant & Bar", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Gentag den nye adgangskode", "Room & Terms": "Værelse & Vilkår", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index fa88d5c7f..8fc7fa563 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -23,8 +23,7 @@ "At the hotel": "Im Hotel", "Attractions": "Attraktionen", "Back to scandichotels.com": "Zurück zu scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Bettentyp", "Book": "Buchen", "Book reward night": "Bonusnacht buchen", @@ -202,9 +201,8 @@ "Read more about the hotel": "Lesen Sie mehr über das Hotel", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen", - "Restaurant": "Restaurant", + "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", "Restaurant & Bar": "Restaurant & Bar", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Neues Passwort erneut eingeben", "Room & Terms": "Zimmer & Bedingungen", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 7fa569f76..444f0890b 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -22,8 +22,7 @@ "At the hotel": "At the hotel", "Attractions": "Attractions", "Back to scandichotels.com": "Back to scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Bed type", "Book": "Book", "Book reward night": "Book reward night", @@ -198,9 +197,8 @@ "Read more about the hotel": "Read more about the hotel", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Remove card from member profile", - "Restaurant": "Restaurant", + "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", "Restaurant & Bar": "Restaurant & Bar", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Retype new password", "Room & Terms": "Room & Terms", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index ab17e3f83..db5ddf0a0 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -22,8 +22,7 @@ "At the hotel": "Hotellissa", "Attractions": "Nähtävyydet", "Back to scandichotels.com": "Takaisin scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Vuodetyyppi", "Book": "Varaa", "Book reward night": "Kirjapalkinto-ilta", @@ -192,9 +191,8 @@ "Read more about the hotel": "Lue lisää hotellista", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Poista kortti jäsenprofiilista", - "Restaurant": "Ravintola", + "Restaurant": "{restaurants, plural, one {#ravintola} other {#restaurants}}", "Restaurant & Bar": "Ravintola & Baari", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Kirjoita uusi salasana uudelleen", "Room & Terms": "Huone & Ehdot", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 8bc1eafb2..3d9d06b4a 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -22,8 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Attraksjoner", "Back to scandichotels.com": "Tilbake til scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Seng type", "Book": "Bestill", "Book reward night": "Bestill belønningskveld", @@ -191,9 +190,8 @@ "Read more about the hotel": "Les mer om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", - "Restaurant": "Restaurant", + "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", "Restaurant & Bar": "Restaurant & Bar", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Skriv inn nytt passord på nytt", "Room & Terms": "Rom & Vilkår", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index e1f48b548..f6b502b00 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -22,8 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Sevärdheter", "Back to scandichotels.com": "Tillbaka till scandichotels.com", - "Bar": "Bar", - "Bars": "Bars", + "Bar": "{bars, plural, one {#bar} other {#bars}}", "Bed type": "Sängtyp", "Book": "Boka", "Book reward night": "Boka frinatt", @@ -193,9 +192,8 @@ "Read more about the hotel": "Läs mer om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Ta bort kortet från medlemsprofilen", - "Restaurant": "Restaurang", + "Restaurant": "{restaurants, plural, one {#restaurang} other {#restauranger}}", "Restaurant & Bar": "Restaurang & Bar", - "Restaurants": "Restaurants", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Upprepa nytt lösenord", "Room & Terms": "Rum & Villkor", From 40c6ed0f20f5b5cc505c499cd949f86037e9db65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 12:25:12 +0200 Subject: [PATCH 44/64] fix(SW-302): small translation typo --- constants/routes/hotelPageParams.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/routes/hotelPageParams.js b/constants/routes/hotelPageParams.js index 97c51b4b5..5ee71737d 100644 --- a/constants/routes/hotelPageParams.js +++ b/constants/routes/hotelPageParams.js @@ -54,7 +54,7 @@ export const restaurantAndBar = { /*export const restaurant = { en: "restaurant", - sv: "restaurant", + sv: "restaurang", no: "restaurant", da: "restaurant", fi: "ravintola", From c3fbd35cff6d3e2ec2e1f4ed531e566303970472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 12:55:40 +0200 Subject: [PATCH 45/64] fix(SW-302): add back imageWidth fix --- components/TempDesignSystem/Card/index.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/components/TempDesignSystem/Card/index.tsx b/components/TempDesignSystem/Card/index.tsx index f3a8f3594..223574ded 100644 --- a/components/TempDesignSystem/Card/index.tsx +++ b/components/TempDesignSystem/Card/index.tsx @@ -11,7 +11,6 @@ import { cardVariants } from "./variants" import styles from "./card.module.css" -import type { ImageVaultAsset } from "@/types/components/imageVault" import type { CardProps } from "./card" export default function Card({ @@ -32,12 +31,12 @@ export default function Card({ imageHeight = imageHeight || 320 - /*imageWidth = + imageWidth = imageWidth || - (backgroundImage + (backgroundImage && "dimensions" in backgroundImage ? backgroundImage.dimensions.aspectRatio * imageHeight : 420) -*/ + return (
From e7f6cc72681208bc8469938116ac9cf8c4fa3321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 13:54:34 +0200 Subject: [PATCH 46/64] fix(SW-302): show max. 2 images per grid --- utils/facilityCards.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index fb02ea9c0..578237f55 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -86,7 +86,8 @@ export async function setFacilityCards( const grid: Array = [] let card: CardProps = {} - facility.heroImages.forEach((image) => { + facility.heroImages.slice(0, 2).forEach((image) => { + // Can be a maximum 2 images per grid const img: CardProps = {} ;(img.backgroundImage = { url: image.imageSizes.large, From 42cf49deaec6951c78a7f62beae3a24003e70978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 14:02:22 +0200 Subject: [PATCH 47/64] fix(SW-302): add Card image gradient as prop --- components/Header/MainMenu/NavigationMenu/MegaMenu/index.tsx | 1 + components/TempDesignSystem/Card/card.ts | 1 + components/TempDesignSystem/Card/index.tsx | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/components/Header/MainMenu/NavigationMenu/MegaMenu/index.tsx b/components/Header/MainMenu/NavigationMenu/MegaMenu/index.tsx index 2b981d635..ab400ac38 100644 --- a/components/Header/MainMenu/NavigationMenu/MegaMenu/index.tsx +++ b/components/Header/MainMenu/NavigationMenu/MegaMenu/index.tsx @@ -103,6 +103,7 @@ export default function MegaMenu({ scriptedTopTitle={card.scripted_top_title} onPrimaryButtonClick={handleNavigate} onSecondaryButtonClick={handleNavigate} + imageGradient theme="image" />
diff --git a/components/TempDesignSystem/Card/card.ts b/components/TempDesignSystem/Card/card.ts index 03c633d6c..ac2bc66af 100644 --- a/components/TempDesignSystem/Card/card.ts +++ b/components/TempDesignSystem/Card/card.ts @@ -25,6 +25,7 @@ export interface CardProps bodyText?: string | null imageHeight?: number imageWidth?: number + imageGradient?: boolean onPrimaryButtonClick?: () => void onSecondaryButtonClick?: () => void backgroundImage?: ImageVaultAsset | ApiImage diff --git a/components/TempDesignSystem/Card/index.tsx b/components/TempDesignSystem/Card/index.tsx index 223574ded..547ab5bea 100644 --- a/components/TempDesignSystem/Card/index.tsx +++ b/components/TempDesignSystem/Card/index.tsx @@ -24,6 +24,7 @@ export default function Card({ backgroundImage, imageHeight, imageWidth, + imageGradient, onPrimaryButtonClick, onSecondaryButtonClick, }: CardProps) { @@ -45,7 +46,7 @@ export default function Card({ })} > {backgroundImage && ( -
+
Date: Tue, 1 Oct 2024 14:13:18 +0200 Subject: [PATCH 48/64] fix(SW-302): remove unused translation --- i18n/dictionaries/da.json | 4 ++-- i18n/dictionaries/de.json | 4 ++-- i18n/dictionaries/en.json | 4 ++-- i18n/dictionaries/fi.json | 4 ++-- i18n/dictionaries/no.json | 4 ++-- i18n/dictionaries/sv.json | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index b373e531f..ed2cce0d8 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -22,7 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Attraktioner", "Back to scandichotels.com": "Tilbage til scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Seng type", "Book": "Book", "Book reward night": "Book bonusnat", @@ -191,7 +191,7 @@ "Read more about the hotel": "Læs mere om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", - "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", + "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}", "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Gentag den nye adgangskode", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 8fc7fa563..90b0e76b8 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -23,7 +23,7 @@ "At the hotel": "Im Hotel", "Attractions": "Attraktionen", "Back to scandichotels.com": "Zurück zu scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Bettentyp", "Book": "Buchen", "Book reward night": "Bonusnacht buchen", @@ -201,7 +201,7 @@ "Read more about the hotel": "Lesen Sie mehr über das Hotel", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen", - "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", + "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}", "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Neues Passwort erneut eingeben", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 444f0890b..6e38a05e7 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -22,7 +22,7 @@ "At the hotel": "At the hotel", "Attractions": "Attractions", "Back to scandichotels.com": "Back to scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Bed type", "Book": "Book", "Book reward night": "Book reward night", @@ -197,7 +197,7 @@ "Read more about the hotel": "Read more about the hotel", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Remove card from member profile", - "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", + "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}", "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Retype new password", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index db5ddf0a0..7a7ed2ae8 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -22,7 +22,7 @@ "At the hotel": "Hotellissa", "Attractions": "Nähtävyydet", "Back to scandichotels.com": "Takaisin scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Vuodetyyppi", "Book": "Varaa", "Book reward night": "Kirjapalkinto-ilta", @@ -191,7 +191,7 @@ "Read more about the hotel": "Lue lisää hotellista", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Poista kortti jäsenprofiilista", - "Restaurant": "{restaurants, plural, one {#ravintola} other {#restaurants}}", + "Restaurant": "{count, plural, one {#Ravintola} other {#Restaurants}}", "Restaurant & Bar": "Ravintola & Baari", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Kirjoita uusi salasana uudelleen", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 3d9d06b4a..adac63ba0 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -22,7 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Attraksjoner", "Back to scandichotels.com": "Tilbake til scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Seng type", "Book": "Bestill", "Book reward night": "Bestill belønningskveld", @@ -190,7 +190,7 @@ "Read more about the hotel": "Les mer om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Fjern kortet fra medlemsprofilen", - "Restaurant": "{restaurants, plural, one {#restaurant} other {#restaurants}}", + "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}", "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Skriv inn nytt passord på nytt", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index f6b502b00..d257ec189 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -22,7 +22,7 @@ "At the hotel": "På hotellet", "Attractions": "Sevärdheter", "Back to scandichotels.com": "Tillbaka till scandichotels.com", - "Bar": "{bars, plural, one {#bar} other {#bars}}", + "Bar": "Bar", "Bed type": "Sängtyp", "Book": "Boka", "Book reward night": "Boka frinatt", @@ -192,7 +192,7 @@ "Read more about the hotel": "Läs mer om hotellet", "Read more about wellness & exercise": "Read more about wellness & exercise", "Remove card from member profile": "Ta bort kortet från medlemsprofilen", - "Restaurant": "{restaurants, plural, one {#restaurang} other {#restauranger}}", + "Restaurant": "{count, plural, one {#Restaurang} other {#Restauranger}}", "Restaurant & Bar": "Restaurang & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Upprepa nytt lösenord", From c7146e01a7058fbaed2925cdfd54d7d145534e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 1 Oct 2024 15:43:56 +0200 Subject: [PATCH 49/64] fix(SW-302): update handling of activity card --- .../ContentType/HotelPage/Facilities/index.tsx | 13 +++++++++++++ .../ContentType/HotelPage/TabNavigation/index.tsx | 2 +- components/ContentType/HotelPage/index.tsx | 8 +++----- lib/graphql/Query/HotelPage/HotelPage.graphql | 15 +++++---------- utils/facilityCards.ts | 15 +++++++-------- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/index.tsx b/components/ContentType/HotelPage/Facilities/index.tsx index 04245c573..2b74c629d 100644 --- a/components/ContentType/HotelPage/Facilities/index.tsx +++ b/components/ContentType/HotelPage/Facilities/index.tsx @@ -1,4 +1,7 @@ +import { activities } from "@/constants/routes/hotelPageParams" + import SectionContainer from "@/components/Section/Container" +import { getLang } from "@/i18n/serverContext" import CardGrid from "./CardGrid" @@ -10,6 +13,16 @@ import type { } from "@/types/components/hotelPage/facilities" export default async function Facilities({ facilities }: FacilityProps) { + const lang = getLang() + + // Put activities card at the end + const activitiesIdx = facilities.findIndex( + (facility) => facility[0].id == activities[lang] + ) + if (activitiesIdx != -1) { + facilities.push(facilities.splice(activitiesIdx, 1)[0]) + } + return ( {facilities.map((facilityCards: FacilityCards, idx: number) => ( diff --git a/components/ContentType/HotelPage/TabNavigation/index.tsx b/components/ContentType/HotelPage/TabNavigation/index.tsx index b14476189..346db0521 100644 --- a/components/ContentType/HotelPage/TabNavigation/index.tsx +++ b/components/ContentType/HotelPage/TabNavigation/index.tsx @@ -23,7 +23,7 @@ export default function TabNavigation({ restaurantTitle }: TabNavigationProps) { { href: HotelHashValues.rooms, text: intl.formatMessage({ id: "Rooms" }) }, { href: HotelHashValues.restaurant, - text: intl.formatMessage({ id: restaurantTitle }), + text: intl.formatMessage({ id: restaurantTitle }, { count: 1 }), }, { href: HotelHashValues.meetings, diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index 66b5bb46d..b48f97b62 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -51,11 +51,9 @@ export default async function HotelPage() { facilityCards, } = hotelData - const facilities = await setFacilityCards( - facilityCards, - hotelDetailedFacilities - ) - //activitiesCard && facilities.push(setActivityCard(activitiesCard)) + const facilities = setFacilityCards(facilityCards, hotelDetailedFacilities) + + activitiesCard && facilities.push(setActivityCard(activitiesCard)) const topThreePois = pointsOfInterest.slice(0, 3) const coordinates = { diff --git a/lib/graphql/Query/HotelPage/HotelPage.graphql b/lib/graphql/Query/HotelPage/HotelPage.graphql index dee41c6a8..9e90f069c 100644 --- a/lib/graphql/Query/HotelPage/HotelPage.graphql +++ b/lib/graphql/Query/HotelPage/HotelPage.graphql @@ -1,11 +1,13 @@ +#import "../../Fragments/PageLink/ContentPageLink.graphql" + query GetHotelPage($locale: String!, $uid: String!) { hotel_page(locale: $locale, uid: $uid) { hotel_page_id title url content { + __typename ... on HotelPageContentUpcomingActivitiesCard { - __typename upcoming_activities_card { background_image cta_text @@ -16,15 +18,8 @@ query GetHotelPage($locale: String!, $uid: String!) { hotel_page_activities_content_pageConnection { edges { node { - ... on ContentPage { - url - web { - original_url - } - system { - locale - } - } + __typename + ...ContentPageLink } } } diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 578237f55..051679e9a 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -1,4 +1,5 @@ import { + activities, meetingsAndConferences, restaurantAndBar, wellnessAndExercise, @@ -24,14 +25,15 @@ type ActivityCard = { heading: string body_text: string cta_text: string - contentPage: Array<{ href: string }> + contentPage: { href: string } } export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { + const lang = getLang() const hasImage = activitiesCard.background_image return [ { - id: "activities", + id: activities[lang], theme: hasImage ? "image" : "primaryDark", scriptedTopTitle: activitiesCard.scripted_title, heading: activitiesCard.heading, @@ -39,7 +41,7 @@ export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { backgroundImage: hasImage ? activitiesCard.background_image : undefined, primaryButton: hasImage ? { - href: activitiesCard.contentPage[0].href, + href: activitiesCard.contentPage.href, title: activitiesCard.cta_text, isExternal: false, } @@ -47,7 +49,7 @@ export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { secondaryButton: hasImage ? undefined : { - href: activitiesCard.contentPage[0].href, + href: activitiesCard.contentPage.href, title: activitiesCard.cta_text, isExternal: false, }, @@ -75,10 +77,7 @@ async function setCardProps( return card } -export async function setFacilityCards( - facilities: Facility[], - amenities: Amenities -) { +export function setFacilityCards(facilities: Facility[], amenities: Amenities) { const lang = getLang() const cards: Facilities = [] From 22f3656b92c87fc1263bf73d9d6ad0fe57d48f47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Wed, 2 Oct 2024 10:07:28 +0200 Subject: [PATCH 50/64] refactor(SW-296) --- .../ContentType/HotelPage/AmenitiesList/index.tsx | 6 ++---- .../HotelPage/Facilities/CardGrid/index.tsx | 9 ++------- components/ContentType/HotelPage/Facilities/index.tsx | 8 ++++---- components/ContentType/HotelPage/index.tsx | 4 ++-- components/TempDesignSystem/Card/CardImage/index.tsx | 10 ++-------- server/routers/hotels/output.ts | 1 - types/components/cardImage.ts | 2 +- types/components/hotelPage/amenities.ts | 5 +++++ types/components/image.ts | 1 + utils/facilityCards.ts | 8 +++++--- 10 files changed, 24 insertions(+), 30 deletions(-) create mode 100644 types/components/hotelPage/amenities.ts diff --git a/components/ContentType/HotelPage/AmenitiesList/index.tsx b/components/ContentType/HotelPage/AmenitiesList/index.tsx index 06483f434..ff4ef9110 100644 --- a/components/ContentType/HotelPage/AmenitiesList/index.tsx +++ b/components/ContentType/HotelPage/AmenitiesList/index.tsx @@ -10,13 +10,11 @@ import { getLang } from "@/i18n/serverContext" import styles from "./amenitiesList.module.css" -import type { Amenities } from "@/types/hotel" +import type { AmentiesListProps } from "@/types/components/hotelPage/amenities" export default async function AmenitiesList({ detailedFacilities, -}: { - detailedFacilities: Amenities -}) { +}: AmentiesListProps) { const intl = await getIntl() const sortedAmenities = detailedFacilities .sort((a, b) => b.sortOrder - a.sortOrder) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 924d2c1ed..4a587d1ae 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -24,15 +24,10 @@ export default async function CardGrid({ facilities }: CardGridProps) { return (
- {facilities.map((card: CardProps, idx: number) => ( + {facilities.map((card: CardProps) => ( facility[0].id == activities[lang] + (facility) => facility[0].id === activities[lang] ) - if (activitiesIdx != -1) { + if (activitiesIdx !== -1) { facilities.push(facilities.splice(activitiesIdx, 1)[0]) } return ( - {facilities.map((facilityCards: FacilityCards, idx: number) => ( - + {facilities.map((facilityCards: FacilityCards) => ( + ))} ) diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index b48f97b62..a66a7afb7 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -51,9 +51,9 @@ export default async function HotelPage() { facilityCards, } = hotelData - const facilities = setFacilityCards(facilityCards, hotelDetailedFacilities) - + const facilities = setFacilityCards(facilityCards) activitiesCard && facilities.push(setActivityCard(activitiesCard)) + const topThreePois = pointsOfInterest.slice(0, 3) const coordinates = { diff --git a/components/TempDesignSystem/Card/CardImage/index.tsx b/components/TempDesignSystem/Card/CardImage/index.tsx index 876316c8c..dc9c4f7f9 100644 --- a/components/TempDesignSystem/Card/CardImage/index.tsx +++ b/components/TempDesignSystem/Card/CardImage/index.tsx @@ -15,16 +15,10 @@ export default function CardImage({
{imageCards.map( - ({ backgroundImage }, idx: Number) => + ({ backgroundImage }) => backgroundImage && ( {backgroundImage.title} & { id: string } diff --git a/types/components/cardImage.ts b/types/components/cardImage.ts index 6ba7838eb..0693fad65 100644 --- a/types/components/cardImage.ts +++ b/types/components/cardImage.ts @@ -1,6 +1,6 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" export interface CardImageProps extends React.HTMLAttributes { - card: CardProps | undefined + card?: CardProps imageCards: Pick[] } diff --git a/types/components/hotelPage/amenities.ts b/types/components/hotelPage/amenities.ts new file mode 100644 index 000000000..419a850a3 --- /dev/null +++ b/types/components/hotelPage/amenities.ts @@ -0,0 +1,5 @@ +import type { Amenities } from "@/types/hotel" + +export type AmentiesListProps = { + detailedFacilities: Amenities +} diff --git a/types/components/image.ts b/types/components/image.ts index 0284eaa29..972c521d6 100644 --- a/types/components/image.ts +++ b/types/components/image.ts @@ -1,4 +1,5 @@ export type ApiImage = { + id: string url: string title: string meta: { diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 051679e9a..d2897d1df 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -77,7 +77,7 @@ async function setCardProps( return card } -export function setFacilityCards(facilities: Facility[], amenities: Amenities) { +export function setFacilityCards(facilities: Facility[]) { const lang = getLang() const cards: Facilities = [] @@ -88,6 +88,7 @@ export function setFacilityCards(facilities: Facility[], amenities: Amenities) { facility.heroImages.slice(0, 2).forEach((image) => { // Can be a maximum 2 images per grid const img: CardProps = {} + img.id = image.imageSizes.large ;(img.backgroundImage = { url: image.imageSizes.large, title: image.metaData.title, @@ -95,6 +96,7 @@ export function setFacilityCards(facilities: Facility[], amenities: Amenities) { alt: image.metaData.altText, caption: image.metaData.altText_En, }, + id: image.imageSizes.large, }), (img.theme = "image") grid.push(img) @@ -143,10 +145,10 @@ export function setFacilityCards(facilities: Facility[], amenities: Amenities) { export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { const hasBar = amenities.some( (facility) => - facility.id == FacilityIds.bar || facility.id == FacilityIds.rooftopBar + facility.id === FacilityIds.bar || facility.id === FacilityIds.rooftopBar ) const hasRestaurant = amenities.some( - (facility) => facility.id == FacilityIds.restaurant + (facility) => facility.id === FacilityIds.restaurant ) if (hasBar && hasRestaurant) { From 0fa8251cd33a55be63e36c822537fcf2d0edd9e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Thu, 3 Oct 2024 16:42:53 +0200 Subject: [PATCH 51/64] refactor(SW-302 --- .../HotelPage/Facilities/CardGrid/index.tsx | 8 +- .../HotelPage/Facilities/index.tsx | 46 +++++++---- components/ContentType/HotelPage/index.tsx | 13 +--- server/routers/hotels/query.ts | 2 +- types/components/hotelPage/facilities.ts | 9 ++- utils/facilityCards.ts | 78 ++++++++----------- 6 files changed, 78 insertions(+), 78 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 4a587d1ae..fdf40e35f 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -8,9 +8,9 @@ import styles from "./cardGrid.module.css" import type { CardGridProps } from "@/types/components/hotelPage/facilities" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export default async function CardGrid({ facilities }: CardGridProps) { - const imageCard = sortCards(facilities) - const nrCards = facilities.length +export default function CardGrid({ facilityCardGid }: CardGridProps) { + const imageCard = sortCards(facilityCardGid) + const nrCards = facilityCardGid.length function getCardClassName(card: CardProps): string { if (nrCards === 1) { @@ -24,7 +24,7 @@ export default async function CardGrid({ facilities }: CardGridProps) { return (
- {facilities.map((card: CardProps) => ( + {facilityCardGid.map((card: CardProps) => ( facility[0].id === activities[lang] - ) - if (activitiesIdx !== -1) { - facilities.push(facilities.splice(activitiesIdx, 1)[0]) - } + const facilityCardGrids = setFacilityCardGrids(facilities) + const updatedActivitiesCard = + activitiesCard && setActivityCard(activitiesCard) + + facilityCardGrids.map((cardGrid: FacilityCards) => { + cardGrid.map((card: CardProps) => { + card.heading = card.heading && intl.formatMessage({ id: card.heading }) + card.secondaryButton + ? (card.secondaryButton.title = intl.formatMessage({ + id: card.secondaryButton.title, + })) + : null + }) + }) return ( - {facilities.map((facilityCards: FacilityCards) => ( - + {facilityCardGrids.map((cardGrid: FacilityCards) => ( + ))} + {updatedActivitiesCard && ( + + )} ) } diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index a66a7afb7..04a56a865 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -6,11 +6,7 @@ import SidePeekProvider from "@/components/SidePeekProvider" import SidePeek from "@/components/TempDesignSystem/SidePeek" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" -import { - getRestaurantHeading, - setActivityCard, - setFacilityCards, -} from "@/utils/facilityCards" +import { getRestaurantHeading } from "@/utils/facilityCards" import DynamicMap from "./Map/DynamicMap" import MapCard from "./Map/MapCard" @@ -48,12 +44,9 @@ export default async function HotelPage() { roomCategories, activitiesCard, pointsOfInterest, - facilityCards, + facilities, } = hotelData - const facilities = setFacilityCards(facilityCards) - activitiesCard && facilities.push(setActivityCard(activitiesCard)) - const topThreePois = pointsOfInterest.slice(0, 3) const coordinates = { @@ -126,7 +119,7 @@ export default async function HotelPage() {
- + {googleMapsApiKey ? ( <> diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 0fae3ff79..2f30ae397 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -246,7 +246,7 @@ export const hotelQueryRouter = router({ pointsOfInterest: hotelAttributes.pointsOfInterest, roomCategories, activitiesCard: activities?.upcoming_activities_card, - facilityCards: facilities, + facilities, } }), availability: router({ diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index dbe27ea6a..41308837f 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -1,15 +1,18 @@ +import type { Facility } from "@/types/hotel" +import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" import type { CardProps } from "@/components/TempDesignSystem/Card/card" export type FacilityCards = CardProps[] export type Facilities = FacilityCards[] -export type FacilityProps = { - facilities: Facilities +export type FacilitiesProps = { + facilities: Facility[] + activitiesCard?: ActivityCard } export type CardGridProps = { - facilities: FacilityCards + facilityCardGid: FacilityCards } export enum FacilityEnum { diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index d2897d1df..82b859b8b 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -5,79 +5,67 @@ import { wellnessAndExercise, } from "@/constants/routes/hotelPageParams" -import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" import { type Facilities, - type FacilityCards, FacilityEnum, FacilityIds, RestaurantHeadings, } from "@/types/components/hotelPage/facilities" -import type { ImageVaultAsset } from "@/types/components/imageVault" import type { Amenities, Facility } from "@/types/hotel" +import { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -type ActivityCard = { - background_image?: ImageVaultAsset - scripted_title?: string - heading: string - body_text: string - cta_text: string - contentPage: { href: string } -} - -export function setActivityCard(activitiesCard: ActivityCard): FacilityCards { +export function setActivityCard(activitiesCard: ActivityCard): CardProps { const lang = getLang() const hasImage = activitiesCard.background_image - return [ - { - id: activities[lang], - theme: hasImage ? "image" : "primaryDark", - scriptedTopTitle: activitiesCard.scripted_title, - heading: activitiesCard.heading, - bodyText: activitiesCard.body_text, - backgroundImage: hasImage ? activitiesCard.background_image : undefined, - primaryButton: hasImage - ? { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - } - : undefined, - secondaryButton: hasImage - ? undefined - : { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - }, - }, - ] + + const updatedCard: CardProps = { + id: activities[lang], + theme: hasImage ? "image" : "primaryDark", + scriptedTopTitle: activitiesCard.scripted_title, + heading: activitiesCard.heading, + bodyText: activitiesCard.body_text, + backgroundImage: hasImage ? activitiesCard.background_image : undefined, + primaryButton: hasImage + ? { + href: activitiesCard.contentPage.href, + title: activitiesCard.cta_text, + isExternal: false, + } + : undefined, + secondaryButton: hasImage + ? undefined + : { + href: activitiesCard.contentPage.href, + title: activitiesCard.cta_text, + isExternal: false, + }, + } + return updatedCard } -async function setCardProps( +function setCardProps( theme: CardProps["theme"], heading: string, buttonText: string, href: string ) { - const intl = await getIntl() const card: CardProps = {} card.theme = theme card.id = href - card.heading = intl.formatMessage({ id: heading }) + card.heading = heading card.secondaryButton = { href: `?s=${href}`, - title: intl.formatMessage({ id: buttonText }), + title: buttonText, isExternal: false, } return card } -export function setFacilityCards(facilities: Facility[]) { +export function setFacilityCardGrids(facilities: Facility[]): Facilities { const lang = getLang() const cards: Facilities = [] @@ -104,7 +92,7 @@ export function setFacilityCards(facilities: Facility[]) { switch (facility.id) { case FacilityEnum.wellness: - card = await setCardProps( + card = setCardProps( "one", "Sauna and gym", "Read more about wellness & exercise", @@ -115,7 +103,7 @@ export function setFacilityCards(facilities: Facility[]) { break case FacilityEnum.conference: - card = await setCardProps( + card = setCardProps( "primaryDim", "Events that make an impression", "About meetings & conferences", @@ -127,7 +115,7 @@ export function setFacilityCards(facilities: Facility[]) { case FacilityEnum.restaurant: //const title = getRestaurantHeading(amenities) // TODO will be used later - card = await setCardProps( + card = setCardProps( "primaryDark", "Enjoy relaxed restaurant experiences", "Read more & book a table", From cdb51bae736882a802bafa62dd568acbd2316c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Mon, 7 Oct 2024 13:47:23 +0200 Subject: [PATCH 52/64] refactor(SW-302): update typings --- .../CardGrid/ActivitiesCardGrid.tsx | 49 +++++++++ .../Facilities/CardGrid/cardGrid.module.css | 16 +-- .../HotelPage/Facilities/CardGrid/index.tsx | 32 +++--- .../HotelPage/Facilities/index.tsx | 41 ++++---- .../TempDesignSystem/Card/CardImage/index.tsx | 2 +- types/components/cardImage.ts | 6 +- types/components/hotelPage/facilities.ts | 29 +++++- utils/facilityCards.ts | 99 ++++++++----------- utils/imageCard.ts | 37 ++++--- 9 files changed, 186 insertions(+), 125 deletions(-) create mode 100644 components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx new file mode 100644 index 000000000..f8984cfc0 --- /dev/null +++ b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx @@ -0,0 +1,49 @@ +import { activities } from "@/constants/routes/hotelPageParams" + +import Card from "@/components/TempDesignSystem/Card" +import CardImage from "@/components/TempDesignSystem/Card/CardImage" +import Grids from "@/components/TempDesignSystem/Grids" +import { getLang } from "@/i18n/serverContext" + +import styles from "./cardGrid.module.css" + +import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" +import type { CardProps } from "@/components/TempDesignSystem/Card/card" + +export default function ActivitiesCardGrid(activitiesCard: ActivityCard) { + const lang = getLang() + const hasImage = activitiesCard.background_image + + const updatedCard: CardProps = { + id: activities[lang], + theme: hasImage ? "image" : "primaryDark", + scriptedTopTitle: activitiesCard.scripted_title, + heading: activitiesCard.heading, + bodyText: activitiesCard.body_text, + backgroundImage: hasImage ? activitiesCard.background_image : undefined, + primaryButton: hasImage + ? { + href: activitiesCard.contentPage.href, + title: activitiesCard.cta_text, + isExternal: false, + } + : undefined, + secondaryButton: hasImage + ? undefined + : { + href: activitiesCard.contentPage.href, + title: activitiesCard.cta_text, + isExternal: false, + }, + } + return ( +
+ + + + + + +
+ ) +} diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css index 515b772e3..7c97fb3bd 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css +++ b/components/ContentType/HotelPage/Facilities/CardGrid/cardGrid.module.css @@ -10,23 +10,23 @@ grid-column: span 3; } -.desktopGrid { - display: none !important; +section .desktopGrid { + display: none; } -.mobileGrid { - display: grid !important; +section .mobileGrid { + display: grid; gap: var(--Spacing-x-quarter); } @media screen and (min-width: 768px) { - .desktopGrid { - display: grid !important; + section .desktopGrid { + display: grid; gap: var(--Spacing-x1); grid-template-columns: repeat(3, 1fr); } - .mobileGrid { - display: none !important; + section .mobileGrid { + display: none; } } diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index fdf40e35f..464fadd4c 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -1,39 +1,39 @@ import Card from "@/components/TempDesignSystem/Card" import CardImage from "@/components/TempDesignSystem/Card/CardImage" import Grids from "@/components/TempDesignSystem/Grids" +import { isFacilityCard } from "@/utils/facilityCards" import { sortCards } from "@/utils/imageCard" import styles from "./cardGrid.module.css" -import type { CardGridProps } from "@/types/components/hotelPage/facilities" -import type { CardProps } from "@/components/TempDesignSystem/Card/card" +import type { + CardGridProps, + FacilityCardType, +} from "@/types/components/hotelPage/facilities" -export default function CardGrid({ facilityCardGid }: CardGridProps) { - const imageCard = sortCards(facilityCardGid) - const nrCards = facilityCardGid.length +export default function FacilitiesCardGrid({ + facilitiesCardGrid, +}: CardGridProps) { + const imageCard = sortCards(facilitiesCardGrid) + const nrCards = facilitiesCardGrid.length - function getCardClassName(card: CardProps): string { + function getCardClassName(card: FacilityCardType): string { if (nrCards === 1) { return styles.spanThree - } else if (nrCards === 2 && card.backgroundImage) { + } else if (nrCards === 2 && !isFacilityCard(card)) { return styles.spanTwo } return styles.spanOne } return ( -
+
- {facilityCardGid.map((card: CardProps) => ( + {facilitiesCardGrid.map((card: FacilityCardType) => ( ))} diff --git a/components/ContentType/HotelPage/Facilities/index.tsx b/components/ContentType/HotelPage/Facilities/index.tsx index 2ecc42670..ab8f6a87f 100644 --- a/components/ContentType/HotelPage/Facilities/index.tsx +++ b/components/ContentType/HotelPage/Facilities/index.tsx @@ -1,16 +1,17 @@ import SectionContainer from "@/components/Section/Container" import { getIntl } from "@/i18n" -import { setActivityCard, setFacilityCardGrids } from "@/utils/facilityCards" +import { isFacilityCard, setFacilityCardGrids } from "@/utils/facilityCards" -import CardGrid from "./CardGrid" +import ActivitiesCardGrid from "./CardGrid/ActivitiesCardGrid" +import FacilitiesCardGrid from "./CardGrid" import styles from "./facilities.module.css" import type { FacilitiesProps, - FacilityCards, + FacilityCardType, + FacilityGrid, } from "@/types/components/hotelPage/facilities" -import type { CardProps } from "@/components/TempDesignSystem/Card/card" export default async function Facilities({ facilities, @@ -19,31 +20,27 @@ export default async function Facilities({ const intl = await getIntl() const facilityCardGrids = setFacilityCardGrids(facilities) - const updatedActivitiesCard = - activitiesCard && setActivityCard(activitiesCard) - facilityCardGrids.map((cardGrid: FacilityCards) => { - cardGrid.map((card: CardProps) => { - card.heading = card.heading && intl.formatMessage({ id: card.heading }) - card.secondaryButton - ? (card.secondaryButton.title = intl.formatMessage({ - id: card.secondaryButton.title, - })) - : null + facilityCardGrids.map((cardGrid: FacilityGrid) => { + cardGrid.map((card: FacilityCardType) => { + if (isFacilityCard(card)) { + card.heading = intl.formatMessage({ id: card.heading }) + card.secondaryButton.title = intl.formatMessage({ + id: card.secondaryButton.title, + }) + } }) }) return ( - {facilityCardGrids.map((cardGrid: FacilityCards) => ( - - ))} - {updatedActivitiesCard && ( - ( + - )} + ))} + {activitiesCard && } ) } diff --git a/components/TempDesignSystem/Card/CardImage/index.tsx b/components/TempDesignSystem/Card/CardImage/index.tsx index dc9c4f7f9..9c3233e87 100644 --- a/components/TempDesignSystem/Card/CardImage/index.tsx +++ b/components/TempDesignSystem/Card/CardImage/index.tsx @@ -14,7 +14,7 @@ export default function CardImage({ return (
- {imageCards.map( + {imageCards?.map( ({ backgroundImage }) => backgroundImage && ( { - card?: CardProps - imageCards: Pick[] + card: FacilityCard | CardProps + imageCards?: FacilityImage[] } diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 41308837f..98a6a444d 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -2,17 +2,36 @@ import type { Facility } from "@/types/hotel" import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export type FacilityCards = CardProps[] - -export type Facilities = FacilityCards[] - export type FacilitiesProps = { facilities: Facility[] activitiesCard?: ActivityCard } +export type FacilityImage = { + backgroundImage: CardProps["backgroundImage"] + theme: CardProps["theme"] + id: string +} + +export type FacilityCard = { + secondaryButton: { + href: string + title: string + openInNewTab?: boolean + isExternal: boolean + } + heading: string + scriptedTopTitle: string + theme: CardProps["theme"] + id: string +} + +export type FacilityCardType = FacilityImage | FacilityCard +export type FacilityGrid = FacilityCardType[] +export type Facilities = FacilityGrid[] + export type CardGridProps = { - facilityCardGid: FacilityCards + facilitiesCardGrid: FacilityGrid } export enum FacilityEnum { diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 82b859b8b..eb002c93b 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -1,5 +1,4 @@ import { - activities, meetingsAndConferences, restaurantAndBar, wellnessAndExercise, @@ -9,60 +8,43 @@ import { getLang } from "@/i18n/serverContext" import { type Facilities, + type FacilityCard, + type FacilityCardType, FacilityEnum, + type FacilityGrid, FacilityIds, + type FacilityImage, RestaurantHeadings, } from "@/types/components/hotelPage/facilities" import type { Amenities, Facility } from "@/types/hotel" -import { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" import type { CardProps } from "@/components/TempDesignSystem/Card/card" -export function setActivityCard(activitiesCard: ActivityCard): CardProps { - const lang = getLang() - const hasImage = activitiesCard.background_image +export function isFacilityCard(card: FacilityCardType): card is FacilityCard { + return (card as FacilityCard).heading != undefined +} - const updatedCard: CardProps = { - id: activities[lang], - theme: hasImage ? "image" : "primaryDark", - scriptedTopTitle: activitiesCard.scripted_title, - heading: activitiesCard.heading, - bodyText: activitiesCard.body_text, - backgroundImage: hasImage ? activitiesCard.background_image : undefined, - primaryButton: hasImage - ? { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - } - : undefined, - secondaryButton: hasImage - ? undefined - : { - href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, - isExternal: false, - }, - } - return updatedCard +export function isFacilityImage(card: FacilityCardType): card is FacilityCard { + return (card as FacilityImage).backgroundImage != undefined } function setCardProps( theme: CardProps["theme"], heading: string, buttonText: string, - href: string -) { - const card: CardProps = {} - - card.theme = theme - card.id = href - card.heading = heading - card.secondaryButton = { - href: `?s=${href}`, - title: buttonText, - isExternal: false, + href: string, + scriptedTopTitle: string +): FacilityCard { + return { + theme: theme, + id: href, + heading: heading, + scriptedTopTitle: scriptedTopTitle, + secondaryButton: { + href: `?s=${href}`, + title: buttonText, + isExternal: false, + }, } - return card } export function setFacilityCardGrids(facilities: Facility[]): Facilities { @@ -70,23 +52,24 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { const cards: Facilities = [] facilities.forEach(async (facility) => { - const grid: Array = [] - let card: CardProps = {} + const grid: FacilityGrid = [] + let card: FacilityCard facility.heroImages.slice(0, 2).forEach((image) => { // Can be a maximum 2 images per grid - const img: CardProps = {} - img.id = image.imageSizes.large - ;(img.backgroundImage = { - url: image.imageSizes.large, - title: image.metaData.title, - meta: { - alt: image.metaData.altText, - caption: image.metaData.altText_En, + const img: FacilityImage = { + backgroundImage: { + url: image.imageSizes.large, + title: image.metaData.title, + meta: { + alt: image.metaData.altText, + caption: image.metaData.altText_En, + }, + id: image.imageSizes.large, }, + theme: "image", id: image.imageSizes.large, - }), - (img.theme = "image") + } grid.push(img) }) @@ -96,9 +79,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { "one", "Sauna and gym", "Read more about wellness & exercise", - wellnessAndExercise[lang] + wellnessAndExercise[lang], + facility.headingText ) - card.scriptedTopTitle = facility.headingText grid.unshift(card) break @@ -107,9 +90,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { "primaryDim", "Events that make an impression", "About meetings & conferences", - meetingsAndConferences[lang] + meetingsAndConferences[lang], + facility.headingText ) - card.scriptedTopTitle = facility.headingText grid.push(card) break @@ -119,9 +102,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { "primaryDark", "Enjoy relaxed restaurant experiences", "Read more & book a table", - restaurantAndBar[lang] + restaurantAndBar[lang], + facility.headingText ) - card.scriptedTopTitle = facility.headingText grid.unshift(card) break } diff --git a/utils/imageCard.ts b/utils/imageCard.ts index 84a75da18..ae646fb76 100644 --- a/utils/imageCard.ts +++ b/utils/imageCard.ts @@ -1,16 +1,27 @@ -import type { FacilityCards } from "@/types/components/hotelPage/facilities" -import type { CardProps } from "@/components/TempDesignSystem/Card/card" +import { isFacilityImage } from "./facilityCards" -export function sortCards(cards: FacilityCards) { - const sortedCards = cards.slice(0).sort((a: CardProps, b: CardProps) => { - if (!a.backgroundImage && b.backgroundImage) { - return 1 - } - if (a.backgroundImage && !b.backgroundImage) { - return -1 - } - return 0 - }) +import type { + FacilityCard, + FacilityCardType, + FacilityGrid, + FacilityImage, +} from "@/types/components/hotelPage/facilities" - return { card: sortedCards.pop(), images: sortedCards } +export function sortCards(cards: FacilityGrid) { + const sortedCards = cards + .slice(0) + .sort((a: FacilityCardType, b: FacilityCardType) => { + if (!isFacilityImage(a) && isFacilityImage(b)) { + return 1 + } + if (isFacilityImage(a) && !isFacilityImage(b)) { + return -1 + } + return 0 + }) + + return { + card: sortedCards.pop() as FacilityCard, + images: sortedCards as FacilityImage[], + } } From 038fa81de28f1fa6108bd091860b6b337854f9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Mon, 7 Oct 2024 13:58:11 +0200 Subject: [PATCH 53/64] refactor(SW-302) --- .../Facilities/CardGrid/ActivitiesCardGrid.tsx | 11 ++++------- .../contentstack/schemas/blocks/activitiesCard.ts | 10 +++++----- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx index f8984cfc0..c1bf12c31 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx @@ -12,19 +12,16 @@ import type { CardProps } from "@/components/TempDesignSystem/Card/card" export default function ActivitiesCardGrid(activitiesCard: ActivityCard) { const lang = getLang() - const hasImage = activitiesCard.background_image + const hasImage = activitiesCard.backgroundImage const updatedCard: CardProps = { + ...activitiesCard, id: activities[lang], theme: hasImage ? "image" : "primaryDark", - scriptedTopTitle: activitiesCard.scripted_title, - heading: activitiesCard.heading, - bodyText: activitiesCard.body_text, - backgroundImage: hasImage ? activitiesCard.background_image : undefined, primaryButton: hasImage ? { href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, + title: activitiesCard.ctaText, isExternal: false, } : undefined, @@ -32,7 +29,7 @@ export default function ActivitiesCardGrid(activitiesCard: ActivityCard) { ? undefined : { href: activitiesCard.contentPage.href, - title: activitiesCard.cta_text, + title: activitiesCard.ctaText, isExternal: false, }, } diff --git a/server/routers/contentstack/schemas/blocks/activitiesCard.ts b/server/routers/contentstack/schemas/blocks/activitiesCard.ts index d98e985a7..0d4fba2b1 100644 --- a/server/routers/contentstack/schemas/blocks/activitiesCard.ts +++ b/server/routers/contentstack/schemas/blocks/activitiesCard.ts @@ -47,13 +47,13 @@ export const activitiesCard = z.object({ } } return { - background_image: data.background_image, - body_text: data.body_text, + backgroundImage: data.background_image, + bodyText: data.body_text, contentPage, - cta_text: data.cta_text, + ctaText: data.cta_text, heading: data.heading, - open_in_new_tab: !!data.open_in_new_tab, - scripted_title: data.scripted_title, + openInNewTab: !!data.open_in_new_tab, + scriptedTopTitle: data.scripted_title, } }), }) From df5b6be4f8c2ffbf018252c814f8c8e50216a375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Mon, 7 Oct 2024 14:13:17 +0200 Subject: [PATCH 54/64] refactor(SW-203): remove unneccesary code --- .../ContentType/HotelPage/Facilities/CardGrid/index.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 464fadd4c..7ed3452b0 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -30,12 +30,7 @@ export default function FacilitiesCardGrid({
{facilitiesCardGrid.map((card: FacilityCardType) => ( - + ))} From 150f0f0e4eeb9724f228bdca75e02ac95b58b1d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Mon, 7 Oct 2024 17:30:24 +0200 Subject: [PATCH 55/64] refactor(SW-302) --- .../HotelPage/AmenitiesList/index.tsx | 4 +-- .../HotelPage/Facilities/CardGrid/index.tsx | 5 ++- .../HotelPage/Facilities/index.tsx | 32 ++++++++++++------- types/components/hotelPage/amenities.ts | 2 +- utils/facilityCards.ts | 32 ++++++++++++------- utils/imageCard.ts | 27 ---------------- 6 files changed, 46 insertions(+), 56 deletions(-) delete mode 100644 utils/imageCard.ts diff --git a/components/ContentType/HotelPage/AmenitiesList/index.tsx b/components/ContentType/HotelPage/AmenitiesList/index.tsx index ff4ef9110..27448827d 100644 --- a/components/ContentType/HotelPage/AmenitiesList/index.tsx +++ b/components/ContentType/HotelPage/AmenitiesList/index.tsx @@ -10,11 +10,11 @@ import { getLang } from "@/i18n/serverContext" import styles from "./amenitiesList.module.css" -import type { AmentiesListProps } from "@/types/components/hotelPage/amenities" +import type { AmenitiesListProps } from "@/types/components/hotelPage/amenities" export default async function AmenitiesList({ detailedFacilities, -}: AmentiesListProps) { +}: AmenitiesListProps) { const intl = await getIntl() const sortedAmenities = detailedFacilities .sort((a, b) => b.sortOrder - a.sortOrder) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx index 7ed3452b0..8bb1dff40 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/index.tsx @@ -1,8 +1,7 @@ import Card from "@/components/TempDesignSystem/Card" import CardImage from "@/components/TempDesignSystem/Card/CardImage" import Grids from "@/components/TempDesignSystem/Grids" -import { isFacilityCard } from "@/utils/facilityCards" -import { sortCards } from "@/utils/imageCard" +import { filterFacilityCards, isFacilityCard } from "@/utils/facilityCards" import styles from "./cardGrid.module.css" @@ -14,7 +13,7 @@ import type { export default function FacilitiesCardGrid({ facilitiesCardGrid, }: CardGridProps) { - const imageCard = sortCards(facilitiesCardGrid) + const imageCard = filterFacilityCards(facilitiesCardGrid) const nrCards = facilitiesCardGrid.length function getCardClassName(card: FacilityCardType): string { diff --git a/components/ContentType/HotelPage/Facilities/index.tsx b/components/ContentType/HotelPage/Facilities/index.tsx index ab8f6a87f..3f43cc328 100644 --- a/components/ContentType/HotelPage/Facilities/index.tsx +++ b/components/ContentType/HotelPage/Facilities/index.tsx @@ -8,6 +8,7 @@ import FacilitiesCardGrid from "./CardGrid" import styles from "./facilities.module.css" import type { + Facilities, FacilitiesProps, FacilityCardType, FacilityGrid, @@ -21,20 +22,29 @@ export default async function Facilities({ const facilityCardGrids = setFacilityCardGrids(facilities) - facilityCardGrids.map((cardGrid: FacilityGrid) => { - cardGrid.map((card: FacilityCardType) => { - if (isFacilityCard(card)) { - card.heading = intl.formatMessage({ id: card.heading }) - card.secondaryButton.title = intl.formatMessage({ - id: card.secondaryButton.title, - }) - } - }) - }) + const translatedFacilityGrids: Facilities = facilityCardGrids.map( + (cardGrid: FacilityGrid) => { + return cardGrid.map((card: FacilityCardType) => { + if (isFacilityCard(card)) { + return { + ...card, + heading: intl.formatMessage({ id: card.heading }), + secondaryButton: { + ...card.secondaryButton, + title: intl.formatMessage({ + id: card.secondaryButton.title, + }), + }, + } + } + return card + }) + } + ) return ( - {facilityCardGrids.map((cardGrid: FacilityGrid) => ( + {translatedFacilityGrids.map((cardGrid: FacilityGrid) => ( { - const grid: FacilityGrid = [] + const cards: Facilities = facilities.map((facility) => { let card: FacilityCard - facility.heroImages.slice(0, 2).forEach((image) => { + const grid: FacilityGrid = facility.heroImages.slice(0, 2).map((image) => { // Can be a maximum 2 images per grid const img: FacilityImage = { backgroundImage: { @@ -70,7 +68,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { theme: "image", id: image.imageSizes.large, } - grid.push(img) + return img }) switch (facility.id) { @@ -108,7 +106,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { grid.unshift(card) break } - cards.push(grid) + return grid }) return cards } @@ -131,3 +129,13 @@ export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { } return RestaurantHeadings.breakfastRestaurant } + +export function filterFacilityCards(cards: FacilityGrid) { + const card = cards.filter((card) => isFacilityCard(card)) + const images = cards.filter((card) => isFacilityImage(card)) + + return { + card: card[0] as FacilityCard, + images: images as FacilityImage[], + } +} diff --git a/utils/imageCard.ts b/utils/imageCard.ts deleted file mode 100644 index ae646fb76..000000000 --- a/utils/imageCard.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { isFacilityImage } from "./facilityCards" - -import type { - FacilityCard, - FacilityCardType, - FacilityGrid, - FacilityImage, -} from "@/types/components/hotelPage/facilities" - -export function sortCards(cards: FacilityGrid) { - const sortedCards = cards - .slice(0) - .sort((a: FacilityCardType, b: FacilityCardType) => { - if (!isFacilityImage(a) && isFacilityImage(b)) { - return 1 - } - if (isFacilityImage(a) && !isFacilityImage(b)) { - return -1 - } - return 0 - }) - - return { - card: sortedCards.pop() as FacilityCard, - images: sortedCards as FacilityImage[], - } -} From 316017470167efe77d919bc82bf0bd0070d71ebb Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Tue, 8 Oct 2024 08:57:19 +0200 Subject: [PATCH 56/64] feat(SW-350): Created Input field for booking widget --- .../BookingWidget/FormContent/Input/index.tsx | 22 ++++++++++ .../FormContent/Search/index.tsx | 44 +++++++++---------- .../FormContent/Search/search.module.css | 22 +++------- .../FormContent/Voucher/index.tsx | 16 +++---- .../Forms/BookingWidget/FormContent/index.tsx | 18 +++----- 5 files changed, 62 insertions(+), 60 deletions(-) create mode 100644 components/Forms/BookingWidget/FormContent/Input/index.tsx diff --git a/components/Forms/BookingWidget/FormContent/Input/index.tsx b/components/Forms/BookingWidget/FormContent/Input/index.tsx new file mode 100644 index 000000000..762d48cf3 --- /dev/null +++ b/components/Forms/BookingWidget/FormContent/Input/index.tsx @@ -0,0 +1,22 @@ +import React, { forwardRef, InputHTMLAttributes } from "react" + +import Body from "@/components/TempDesignSystem/Text/Body" + +import styles from "./input.module.css" + +const Input = forwardRef< + HTMLInputElement, + InputHTMLAttributes +>(function InputComponent(props, ref) { + return ( + + + + ) +}) + +export default Input diff --git a/components/Forms/BookingWidget/FormContent/Search/index.tsx b/components/Forms/BookingWidget/FormContent/Search/index.tsx index c6d69d45b..8ecd56e6b 100644 --- a/components/Forms/BookingWidget/FormContent/Search/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/index.tsx @@ -13,10 +13,10 @@ import { useIntl } from "react-intl" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" +import Input from "../Input" import { init, localStorageKey, reducer, sessionStorageKey } from "./reducer" import SearchList from "./SearchList" -import inputStyles from "../Input/input.module.css" import styles from "./search.module.css" import type { BookingWidgetSchema } from "@/types/components/bookingWidget" @@ -143,29 +143,27 @@ export default function Search({ locations }: SearchProps) {
- - - + onChange: handleOnChange, + }), + type: "search", + })} + />
-
+
- - - + +
- - {rooms} - - - - + +
From e6b22b81f4506ce9589ef3f0e9a7f92f1e9b7049 Mon Sep 17 00:00:00 2001 From: Simon Emanuelsson Date: Thu, 3 Oct 2024 11:12:36 +0200 Subject: [PATCH 57/64] feat: select bed type --- .../hotelreservation/[section]/page.tsx | 17 ++-- .../(live)/@bookingwidget/loading.module.css | 4 + app/[lang]/(live)/@bookingwidget/loading.tsx | 11 +++ .../BedType/bedOptions.module.css | 7 ++ .../EnterDetails/BedType/index.tsx | 75 ++++++++++++++++++ .../EnterDetails/BedType/schema.ts | 7 ++ .../EnterDetails/Details/index.tsx | 3 +- components/Icons/KingBed.tsx | 27 +++++++ components/Icons/index.tsx | 1 + .../TempDesignSystem/Form/Card/Checkbox.tsx | 7 ++ .../TempDesignSystem/Form/Card/Radio.tsx | 7 ++ .../Form/{Checkbox => }/Card/card.module.css | 62 +++++++-------- components/TempDesignSystem/Form/Card/card.ts | 35 +++++++++ .../TempDesignSystem/Form/Card/index.tsx | 77 +++++++++++++++++++ .../Form/Checkbox/Card/card.ts | 14 ---- .../Form/Checkbox/Card/index.tsx | 65 ---------------- i18n/dictionaries/da.json | 18 ++++- i18n/dictionaries/de.json | 77 +++++++++++-------- i18n/dictionaries/en.json | 16 ++-- i18n/dictionaries/fi.json | 18 ++++- i18n/dictionaries/no.json | 18 ++++- i18n/dictionaries/sv.json | 18 ++++- .../icons/UI - Enter details/bed king.svg | 3 + types/components/enterDetails/bedType.ts | 5 ++ types/components/search.ts | 6 +- types/enums/bedType.ts | 4 + 26 files changed, 433 insertions(+), 169 deletions(-) create mode 100644 app/[lang]/(live)/@bookingwidget/loading.module.css create mode 100644 app/[lang]/(live)/@bookingwidget/loading.tsx create mode 100644 components/HotelReservation/EnterDetails/BedType/bedOptions.module.css create mode 100644 components/HotelReservation/EnterDetails/BedType/index.tsx create mode 100644 components/HotelReservation/EnterDetails/BedType/schema.ts create mode 100644 components/Icons/KingBed.tsx create mode 100644 components/TempDesignSystem/Form/Card/Checkbox.tsx create mode 100644 components/TempDesignSystem/Form/Card/Radio.tsx rename components/TempDesignSystem/Form/{Checkbox => }/Card/card.module.css (50%) create mode 100644 components/TempDesignSystem/Form/Card/card.ts create mode 100644 components/TempDesignSystem/Form/Card/index.tsx delete mode 100644 components/TempDesignSystem/Form/Checkbox/Card/card.ts delete mode 100644 components/TempDesignSystem/Form/Checkbox/Card/index.tsx create mode 100644 public/_static/icons/UI - Enter details/bed king.svg create mode 100644 types/components/enterDetails/bedType.ts create mode 100644 types/enums/bedType.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index 3ebb491e5..9f91bee96 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -3,9 +3,9 @@ import { notFound } from "next/navigation" import { getProfileSafely } from "@/lib/trpc/memoizedRequests" import { serverClient } from "@/lib/trpc/server" +import BedType from "@/components/HotelReservation/EnterDetails/BedType" import Details from "@/components/HotelReservation/EnterDetails/Details" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" -import BedSelection from "@/components/HotelReservation/SelectRate/BedSelection" import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection" import Payment from "@/components/HotelReservation/SelectRate/Payment" import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" @@ -104,7 +104,7 @@ export default async function SectionsPage({ const selectedBreakfast = searchParams.breakfast ? breakfastAlternatives.find((a) => a.value === searchParams.breakfast) - ?.name + ?.name : undefined const selectedRoom = searchParams.roomClass @@ -132,9 +132,9 @@ export default async function SectionsPage({ selection={ selectedRoom ? [ - selectedRoom, - intl.formatMessage({ id: selectedFlexibility }), - ] + selectedRoom, + intl.formatMessage({ id: selectedFlexibility }), + ] : undefined } path={`select-rate?${currentSearchParams}`} @@ -155,12 +155,7 @@ export default async function SectionsPage({ selection={selectedBed} path={`select-bed?${currentSearchParams}`} > - {params.section === "select-bed" && ( - - )} + {params.section === "select-bed" ? : null} + +
+ ) +} diff --git a/components/HotelReservation/EnterDetails/BedType/bedOptions.module.css b/components/HotelReservation/EnterDetails/BedType/bedOptions.module.css new file mode 100644 index 000000000..81fd223b9 --- /dev/null +++ b/components/HotelReservation/EnterDetails/BedType/bedOptions.module.css @@ -0,0 +1,7 @@ +.form { + display: grid; + gap: var(--Spacing-x2); + grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); + padding-bottom: var(--Spacing-x3); + width: min(600px, 100%); +} diff --git a/components/HotelReservation/EnterDetails/BedType/index.tsx b/components/HotelReservation/EnterDetails/BedType/index.tsx new file mode 100644 index 000000000..97835a285 --- /dev/null +++ b/components/HotelReservation/EnterDetails/BedType/index.tsx @@ -0,0 +1,75 @@ +"use client" + +import { zodResolver } from "@hookform/resolvers/zod" +import { FormProvider, useForm } from "react-hook-form" +import { useIntl } from "react-intl" + +import { KingBedIcon } from "@/components/Icons" +import RadioCard from "@/components/TempDesignSystem/Form/Card/Radio" + +import { bedTypeSchema } from "./schema" + +import styles from "./bedOptions.module.css" + +import type { BedTypeSchema } from "@/types/components/enterDetails/bedType" +import { bedTypeEnum } from "@/types/enums/bedType" + +export default function BedType() { + const intl = useIntl() + + const methods = useForm({ + defaultValues: { + bed: bedTypeEnum.KING, + }, + criteriaMode: "all", + mode: "all", + resolver: zodResolver(bedTypeSchema), + reValidateMode: "onChange", + }) + + // @ts-expect-error - Types mismatch docs as this is + // a pattern that is allowed https://formatjs.io/docs/react-intl/api#usage + const text = intl.formatMessage( + { id: "Included (based on availability)" }, + { b: (str) => {str} } + ) + + return ( + +
+ + + +
+ ) +} diff --git a/components/HotelReservation/EnterDetails/BedType/schema.ts b/components/HotelReservation/EnterDetails/BedType/schema.ts new file mode 100644 index 000000000..bd819b986 --- /dev/null +++ b/components/HotelReservation/EnterDetails/BedType/schema.ts @@ -0,0 +1,7 @@ +import { z } from "zod" + +import { bedTypeEnum } from "@/types/enums/bedType" + +export const bedTypeSchema = z.object({ + bed: z.nativeEnum(bedTypeEnum), +}) diff --git a/components/HotelReservation/EnterDetails/Details/index.tsx b/components/HotelReservation/EnterDetails/Details/index.tsx index 731e3b205..2dd1b1cdb 100644 --- a/components/HotelReservation/EnterDetails/Details/index.tsx +++ b/components/HotelReservation/EnterDetails/Details/index.tsx @@ -4,7 +4,7 @@ import { FormProvider, useForm } from "react-hook-form" import { useIntl } from "react-intl" import Button from "@/components/TempDesignSystem/Button" -import CheckboxCard from "@/components/TempDesignSystem/Form/Checkbox/Card" +import CheckboxCard from "@/components/TempDesignSystem/Form/Card/Checkbox" import CountrySelect from "@/components/TempDesignSystem/Form/Country" import Input from "@/components/TempDesignSystem/Form/Input" import Phone from "@/components/TempDesignSystem/Form/Phone" @@ -36,6 +36,7 @@ export default function Details({ user }: DetailsProps) { lastname: user?.lastName ?? "", phoneNumber: user?.phoneNumber ?? "", }, + criteriaMode: "all", mode: "all", resolver: zodResolver(user ? signedInDetailsSchema : detailsSchema), reValidateMode: "onChange", diff --git a/components/Icons/KingBed.tsx b/components/Icons/KingBed.tsx new file mode 100644 index 000000000..d4df0f225 --- /dev/null +++ b/components/Icons/KingBed.tsx @@ -0,0 +1,27 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function KingBedIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + ) +} diff --git a/components/Icons/index.tsx b/components/Icons/index.tsx index 04f167061..73b554342 100644 --- a/components/Icons/index.tsx +++ b/components/Icons/index.tsx @@ -34,6 +34,7 @@ export { default as HeartIcon } from "./Heart" export { default as HouseIcon } from "./House" export { default as ImageIcon } from "./Image" export { default as InfoCircleIcon } from "./InfoCircle" +export { default as KingBedIcon } from "./KingBed" export { default as LocationIcon } from "./Location" export { default as LockIcon } from "./Lock" export { default as MapIcon } from "./Map" diff --git a/components/TempDesignSystem/Form/Card/Checkbox.tsx b/components/TempDesignSystem/Form/Card/Checkbox.tsx new file mode 100644 index 000000000..7f0ea428a --- /dev/null +++ b/components/TempDesignSystem/Form/Card/Checkbox.tsx @@ -0,0 +1,7 @@ +import Card from "." + +import type { CheckboxProps } from "./card" + +export default function CheckboxCard(props: CheckboxProps) { + return +} diff --git a/components/TempDesignSystem/Form/Card/Radio.tsx b/components/TempDesignSystem/Form/Card/Radio.tsx new file mode 100644 index 000000000..c1de94782 --- /dev/null +++ b/components/TempDesignSystem/Form/Card/Radio.tsx @@ -0,0 +1,7 @@ +import Card from "." + +import type { RadioProps } from "./card" + +export default function RadioCard(props: RadioProps) { + return +} diff --git a/components/TempDesignSystem/Form/Checkbox/Card/card.module.css b/components/TempDesignSystem/Form/Card/card.module.css similarity index 50% rename from components/TempDesignSystem/Form/Checkbox/Card/card.module.css rename to components/TempDesignSystem/Form/Card/card.module.css index bd44b7b45..1044596f6 100644 --- a/components/TempDesignSystem/Form/Checkbox/Card/card.module.css +++ b/components/TempDesignSystem/Form/Card/card.module.css @@ -1,70 +1,72 @@ -.checkbox { +.label { + align-self: flex-start; background-color: var(--Base-Surface-Primary-light-Normal); border: 1px solid var(--Base-Border-Subtle); border-radius: var(--Corner-radius-Large); cursor: pointer; - display: flex; - flex-direction: column; - gap: var(--Spacing-x1); + display: grid; + grid-template-columns: 1fr auto; padding: var(--Spacing-x-one-and-half) var(--Spacing-x2); transition: all 200ms ease; width: min(100%, 600px); } -.checkbox:hover { +.label:hover { background-color: var(--Base-Surface-Secondary-light-Hover); } -.checkbox:has(:checked) { +.label:has(:checked) { background-color: var(--Primary-Light-Surface-Normal); border-color: var(--Base-Border-Hover); } -.header { - align-items: center; - display: grid; - gap: 0px var(--Spacing-x1); - grid-template-areas: - "title icon" - "subtitle icon"; -} - .icon { - grid-area: icon; + align-self: center; + grid-column: 2/3; + grid-row: 1/3; justify-self: flex-end; transition: fill 200ms ease; } -.checkbox:hover .icon, -.checkbox:hover .icon *, -.checkbox:has(:checked) .icon, -.checkbox:has(:checked) .icon * { +.label:hover .icon, +.label:hover .icon *, +.label:has(:checked) .icon, +.label:has(:checked) .icon * { fill: var(--Base-Text-Medium-contrast); } -.checkbox[data-declined="true"]:hover .icon, -.checkbox[data-declined="true"]:hover .icon *, -.checkbox[data-declined="true"]:has(:checked) .icon, -.checkbox[data-declined="true"]:has(:checked) .icon * { +.label[data-declined="true"]:hover .icon, +.label[data-declined="true"]:hover .icon *, +.label[data-declined="true"]:has(:checked) .icon, +.label[data-declined="true"]:has(:checked) .icon * { fill: var(--Base-Text-Disabled); } .subtitle { - grid-area: subtitle; + grid-column: 1 / 2; + grid-row: 2; } .title { - grid-area: title; + grid-column: 1 / 2; } -.list { - list-style: none; - margin: 0; - padding: 0; +.label .text { + margin-top: var(--Spacing-x1); + grid-column: 1/-1; } .listItem { align-items: center; display: flex; gap: var(--Spacing-x-quarter); + grid-column: 1/-1; +} + +.listItem:first-of-type { + margin-top: var(--Spacing-x1); +} + +.listItem:nth-of-type(n + 2) { + margin-top: var(--Spacing-x-quarter); } diff --git a/components/TempDesignSystem/Form/Card/card.ts b/components/TempDesignSystem/Form/Card/card.ts new file mode 100644 index 000000000..167595164 --- /dev/null +++ b/components/TempDesignSystem/Form/Card/card.ts @@ -0,0 +1,35 @@ +import type { IconProps } from "@/types/components/icon" + +interface BaseCardProps extends React.LabelHTMLAttributes { + Icon?: (props: IconProps) => JSX.Element + declined?: boolean + iconHeight?: number + iconWidth?: number + name?: string + saving?: boolean + subtitle?: string + title: string + type: "checkbox" | "radio" + value?: string +} + +interface ListCardProps extends BaseCardProps { + list: { + title: string + }[] + text?: never +} + +interface TextCardProps extends BaseCardProps { + list?: never + text: string +} + +export type CardProps = ListCardProps | TextCardProps + +export type CheckboxProps = + | Omit + | Omit +export type RadioProps = + | Omit + | Omit diff --git a/components/TempDesignSystem/Form/Card/index.tsx b/components/TempDesignSystem/Form/Card/index.tsx new file mode 100644 index 000000000..82f99e80d --- /dev/null +++ b/components/TempDesignSystem/Form/Card/index.tsx @@ -0,0 +1,77 @@ +"use client" + +import { CheckIcon, CloseIcon, HeartIcon } from "@/components/Icons" +import Caption from "@/components/TempDesignSystem/Text/Caption" +import Footnote from "@/components/TempDesignSystem/Text/Footnote" + +import styles from "./card.module.css" + +import type { CardProps } from "./card" + +export default function Card({ + Icon = HeartIcon, + iconHeight = 32, + iconWidth = 32, + declined = false, + id, + list, + name = "join", + saving = false, + subtitle, + text, + title, + type, + value, +}: CardProps) { + return ( + + ) +} diff --git a/components/TempDesignSystem/Form/Checkbox/Card/card.ts b/components/TempDesignSystem/Form/Checkbox/Card/card.ts deleted file mode 100644 index 438c9b729..000000000 --- a/components/TempDesignSystem/Form/Checkbox/Card/card.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { IconProps } from "@/types/components/icon" - -export interface CheckboxCardProps { - Icon?: (props: IconProps) => JSX.Element - declined?: boolean - list?: { - title: string - }[] - name?: string - saving?: boolean - subtitle?: string - text?: string - title: string -} diff --git a/components/TempDesignSystem/Form/Checkbox/Card/index.tsx b/components/TempDesignSystem/Form/Checkbox/Card/index.tsx deleted file mode 100644 index 77158c531..000000000 --- a/components/TempDesignSystem/Form/Checkbox/Card/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -"use client" - -import { CheckIcon, CloseIcon, HeartIcon } from "@/components/Icons" -import Caption from "@/components/TempDesignSystem/Text/Caption" -import Footnote from "@/components/TempDesignSystem/Text/Footnote" - -import styles from "./card.module.css" - -import type { CheckboxCardProps } from "./card" - -export default function CheckboxCard({ - Icon = HeartIcon, - declined = false, - list, - name = "join", - saving = false, - subtitle, - text, - title, -}: CheckboxCardProps) { - return ( - - ) -} diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index ed2cce0d8..dd139b105 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -1,4 +1,5 @@ { + "Included (based on availability)": "Inkluderet (baseret på tilgængelighed)", "A destination or hotel name is needed to be able to search for a hotel room.": "Et destinations- eller hotelnavn er nødvendigt for at kunne søge efter et hotelværelse.", "A photo of the room": "Et foto af værelset", "About meetings & conferences": "About meetings & conferences", @@ -64,6 +65,7 @@ "Date of Birth": "Fødselsdato", "Day": "Dag", "Description": "Beskrivelse", + "Destination": "Destination", "Destinations & hotels": "Destinationer & hoteller", "Discard changes": "Kassér ændringer", "Discard unsaved changes?": "Slette ændringer, der ikke er gemt?", @@ -74,6 +76,7 @@ "Edit": "Redigere", "Edit profile": "Rediger profil", "Email": "E-mail", + "Email address": "E-mailadresse", "Enter destination or hotel": "Indtast destination eller hotel", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", @@ -85,6 +88,7 @@ "Fair": "Messe", "Find booking": "Find booking", "Find hotels": "Find hotel", + "Firstname": "Fornavn", "Flexibility": "Fleksibilitet", "Former Scandic Hotel": "Tidligere Scandic Hotel", "Free cancellation": "Gratis afbestilling", @@ -94,6 +98,7 @@ "Get member benefits & offers": "Få medlemsfordele og tilbud", "Go back to edit": "Gå tilbage til redigering", "Go back to overview": "Gå tilbage til oversigten", + "Guest information": "Gæsteinformation", "Guests & Rooms": "Gæster & værelser", "Hi": "Hei", "Highest level": "Højeste niveau", @@ -108,7 +113,9 @@ "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke muligt at administrere dine kommunikationspræferencer lige nu, prøv venligst igen senere eller kontakt support, hvis problemet fortsætter.", "Join Scandic Friends": "Tilmeld dig Scandic Friends", "Join at no cost": "Tilmeld dig uden omkostninger", + "King bed": "Kingsize-seng", "Language": "Sprog", + "Lastname": "Efternavn", "Latest searches": "Seneste søgninger", "Level": "Niveau", "Level 1": "Niveau 1", @@ -184,8 +191,10 @@ "Points needed to level up": "Point nødvendige for at stige i niveau", "Points needed to stay on level": "Point nødvendige for at holde sig på niveau", "Previous victories": "Tidligere sejre", + "Proceed to payment method": "Fortsæt til betalingsmetode", "Public price from": "Offentlig pris fra", "Public transport": "Offentlig transport", + "Queen bed": "Queensize-seng", "Read more": "Læs mere", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Læs mere om hotellet", @@ -211,6 +220,7 @@ "Select a country": "Vælg et land", "Select country of residence": "Vælg bopælsland", "Select date of birth": "Vælg fødselsdato", + "Select dates": "Vælg datoer", "Select language": "Vælg sprog", "Select your language": "Vælg dit sprog", "Shopping": "Shopping", @@ -280,7 +290,9 @@ "Zoom in": "Zoom ind", "Zoom out": "Zoom ud", "as of today": "fra idag", + "booking.adults": "{totalAdults, plural, one {# voksen} other {# voksne}}", "booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}", + "booking.rooms": "{totalRooms, plural, one {# værelse} other {# værelser}}", "by": "inden", "characters": "tegn", "hotelPages.rooms.roomCard.person": "person", @@ -296,5 +308,7 @@ "special character": "speciel karakter", "spendable points expiring by": "{points} Brugbare point udløber den {date}", "to": "til", - "uppercase letter": "stort bogstav" -} + "uppercase letter": "stort bogstav", + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 90b0e76b8..cca633251 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -1,8 +1,9 @@ { + "Included (based on availability)": "Inbegriffen (je nach Verfügbarkeit)", "A destination or hotel name is needed to be able to search for a hotel room.": "Ein Reiseziel oder Hotelname wird benötigt, um nach einem Hotelzimmer suchen zu können.", "A photo of the room": "Ein Foto des Zimmers", - "Activities": "Aktivitäten", "About meetings & conferences": "About meetings & conferences", + "Activities": "Aktivitäten", "Add code": "Code hinzufügen", "Add new card": "Neue Karte hinzufügen", "Address": "Adresse", @@ -10,13 +11,12 @@ "Already a friend?": "Sind wir schon Freunde?", "Amenities": "Annehmlichkeiten", "Amusement park": "Vergnügungspark", - "An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", "An error occurred trying to manage your preferences, please try again later.": "Beim Versuch, Ihre Einstellungen zu verwalten, ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", + "An error occurred when adding a credit card, please try again later.": "Beim Hinzufügen einer Kreditkarte ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", "An error occurred when trying to update profile.": "Beim Versuch, das Profil zu aktualisieren, ist ein Fehler aufgetreten.", "Any changes you've made will be lost.": "Alle Änderungen, die Sie vorgenommen haben, gehen verloren.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Möchten Sie die Karte mit der Endung {lastFourDigits} wirklich aus Ihrem Mitgliedsprofil entfernen?", "Arrival date": "Ankunftsdatum", - "as of today": "Stand heute", "As our": "Als unser {level}", "As our Close Friend": "Als unser enger Freund", "At latest": "Spätestens", @@ -28,16 +28,13 @@ "Book": "Buchen", "Book reward night": "Bonusnacht buchen", "Booking number": "Buchungsnummer", - "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", "Breakfast": "Frühstück", "Breakfast excluded": "Frühstück nicht inbegriffen", "Breakfast included": "Frühstück inbegriffen", + "Breakfast restaurant": "Breakfast restaurant", "Bus terminal": "Busbahnhof", "Business": "Geschäft", - "by": "bis", - "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Stornieren", - "characters": "figuren", "Check in": "Einchecken", "Check out": "Auschecken", "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.", @@ -68,34 +65,40 @@ "Date of Birth": "Geburtsdatum", "Day": "Tag", "Description": "Beschreibung", + "Destination": "Bestimmungsort", "Destinations & hotels": "Reiseziele & Hotels", "Discard changes": "Änderungen verwerfen", "Discard unsaved changes?": "Nicht gespeicherte Änderungen verwerfen?", "Distance to city centre": "{number}km zum Stadtzentrum", "Do you want to start the day with Scandics famous breakfast buffé?": "Möchten Sie den Tag mit Scandics berühmtem Frühstücksbuffet beginnen?", "Download the Scandic app": "Laden Sie die Scandic-App herunter", + "Earn bonus nights & points": "Sammeln Sie Bonusnächte und -punkte", "Edit": "Bearbeiten", "Edit profile": "Profil bearbeiten", "Email": "Email", - "Enter destination or hotel": "Reiseziel oder Hotel eingeben", + "Email address": "E-Mail-Adresse", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Enter destination or hotel": "Reiseziel oder Hotel eingeben", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore nearby": "Erkunden Sie die Umgebung", "Extras to your booking": "Extras zu Ihrer Buchung", + "FAQ": "Häufig gestellte Fragen", "Failed to delete credit card, please try again later.": "Kreditkarte konnte nicht gelöscht werden. Bitte versuchen Sie es später noch einmal.", "Fair": "Messe", - "FAQ": "Häufig gestellte Fragen", "Find booking": "Buchung finden", "Find hotels": "Hotels finden", + "Firstname": "Vorname", "Flexibility": "Flexibilität", "Former Scandic Hotel": "Ehemaliges Scandic Hotel", "Free cancellation": "Kostenlose Stornierung", "Free rebooking": "Kostenlose Umbuchung", "From": "Fromm", "Get inspired": "Lassen Sie sich inspieren", + "Get member benefits & offers": "Holen Sie sich Vorteile und Angebote für Mitglieder", "Go back to edit": "Zurück zum Bearbeiten", "Go back to overview": "Zurück zur Übersicht", + "Guest information": "Informationen für Gäste", "Guests & Rooms": "Gäste & Zimmer", "Hi": "Hallo", "Highest level": "Höchstes Level", @@ -103,17 +106,16 @@ "Hotel": "Hotel", "Hotel facilities": "Hotel-Infos", "Hotel surroundings": "Umgebung des Hotels", - "hotelPages.rooms.roomCard.person": "person", - "hotelPages.rooms.roomCard.persons": "personen", - "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", "Hotels": "Hotels", "How do you want to sleep?": "Wie möchtest du schlafen?", "How it works": "Wie es funktioniert", "Image gallery": "Bildergalerie", "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Es ist derzeit nicht möglich, Ihre Kommunikationseinstellungen zu verwalten. Bitte versuchen Sie es später erneut oder wenden Sie sich an den Support, wenn das Problem weiterhin besteht.", "Join Scandic Friends": "Treten Sie Scandic Friends bei", - "km to city center": "km bis zum Stadtzentrum", + "Join at no cost": "Kostenlos beitreten", + "King bed": "Kingsize-Bett", "Language": "Sprache", + "Lastname": "Nachname", "Latest searches": "Letzte Suchanfragen", "Level": "Level", "Level 1": "Level 1", @@ -139,9 +141,9 @@ "Member price": "Mitgliederpreis", "Member price from": "Mitgliederpreis ab", "Members": "Mitglieder", - "Membership cards": "Mitgliedskarten", "Membership ID": "Mitglieds-ID", "Membership ID copied to clipboard": "Mitglieds-ID in die Zwischenablage kopiert", + "Membership cards": "Mitgliedskarten", "Menu": "Menu", "Modify": "Ändern", "Month": "Monat", @@ -156,9 +158,6 @@ "Nearby companies": "Nahe gelegene Unternehmen", "New password": "Neues Kennwort", "Next": "Nächste", - "next level:": "Nächstes Level:", - "night": "nacht", - "nights": "Nächte", "Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden", "No content published": "Kein Inhalt veröffentlicht", "No matching location found": "Kein passender Standort gefunden", @@ -169,16 +168,15 @@ "Non-refundable": "Nicht erstattungsfähig", "Not found": "Nicht gefunden", "Nr night, nr adult": "{nights, number} Nacht, {adults, number} Erwachsener", - "number": "nummer", "On your journey": "Auf deiner Reise", "Open": "Offen", "Open language menu": "Sprachmenü öffnen", "Open menu": "Menü öffnen", "Open my pages menu": "Meine Seiten Menü öffnen", - "or": "oder", "Overview": "Übersicht", "Parking": "Parken", "Parking / Garage": "Parken / Garage", + "Password": "Passwort", "Pay later": "Später bezahlen", "Pay now": "Jetzt bezahlen", "Payment info": "Zahlungsinformationen", @@ -186,7 +184,6 @@ "Phone is required": "Telefon ist erforderlich", "Phone number": "Telefonnummer", "Please enter a valid phone number": "Bitte geben Sie eine gültige Telefonnummer ein", - "points": "Punkte", "Points": "Punkte", "Points being calculated": "Punkte werden berechnet", "Points earned prior to May 1, 2021": "Zusammengeführte Punkte vor dem 1. Mai 2021", @@ -194,8 +191,10 @@ "Points needed to level up": "Punkte, die zum Levelaufstieg benötigt werden", "Points needed to stay on level": "Erforderliche Punkte, um auf diesem Level zu bleiben", "Previous victories": "Bisherige Siege", + "Proceed to payment method": "Weiter zur Zahlungsmethode", "Public price from": "Öffentlicher Preis ab", "Public transport": "Öffentliche Verkehrsmittel", + "Queen bed": "Queensize-Bett", "Read more": "Mehr lesen", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Lesen Sie mehr über das Hotel", @@ -221,6 +220,7 @@ "Select a country": "Wähle ein Land", "Select country of residence": "Wählen Sie das Land Ihres Wohnsitzes aus", "Select date of birth": "Geburtsdatum auswählen", + "Select dates": "Datum auswählen", "Select language": "Sprache auswählen", "Select your language": "Wählen Sie Ihre Sprache", "Shopping": "Einkaufen", @@ -234,29 +234,25 @@ "Something went wrong and we couldn't add your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht hinzufügen. Bitte versuchen Sie es später erneut.", "Something went wrong and we couldn't remove your card. Please try again later.": "Ein Fehler ist aufgetreten und wir konnten Ihre Karte nicht entfernen. Bitte versuchen Sie es später noch einmal.", "Something went wrong!": "Etwas ist schief gelaufen!", - "special character": "sonderzeichen", - "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", "Sports": "Sport", "Standard price": "Standardpreis", "Street": "Straße", "Successfully updated profile!": "Profil erfolgreich aktualisiert!", "Summary": "Zusammenfassung", + "TUI Points": "TUI Points", "Tell us what information and updates you'd like to receive, and how, by clicking the link below.": "Teilen Sie uns mit, welche Informationen und Updates Sie wie erhalten möchten, indem Sie auf den unten stehenden Link klicken.", "Thank you": "Danke", "Theatre": "Theater", "There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden", "Things nearby HOTEL_NAME": "Dinge in der Nähe von {hotelName}", - "to": "zu", "Total Points": "Gesamtpunktzahl", "Tourist": "Tourist", "Transaction date": "Transaktionsdatum", "Transactions": "Transaktionen", "Transportations": "Transportmittel", "Tripadvisor reviews": "{rating} ({count} Bewertungen auf Tripadvisor)", - "TUI Points": "TUI Points", "Type of bed": "Bettentyp", "Type of room": "Zimmerart", - "uppercase letter": "großbuchstabe", "Use bonus cheque": "Bonusscheck nutzen", "User information": "Nutzerinformation", "View as list": "Als Liste anzeigen", @@ -282,18 +278,37 @@ "You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.", "You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.", "You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.", + "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your card was successfully removed!": "Ihre Karte wurde erfolgreich entfernt!", "Your card was successfully saved!": "Ihre Karte wurde erfolgreich gespeichert!", - "Your Challenges Conquer & Earn!": "Meistern Sie Ihre Herausforderungen und verdienen Sie Geld!", "Your current level": "Ihr aktuelles Level", "Your details": "Ihre Angaben", "Your level": "Dein level", "Your points to spend": "Meine Punkte", "Zip code": "PLZ", "Zoo": "Zoo", - "Earn bonus nights & points": "Sammeln Sie Bonusnächte und -punkte", - "Get member benefits & offers": "Holen Sie sich Vorteile und Angebote für Mitglieder", - "Join at no cost": "Kostenlos beitreten", "Zoom in": "Vergrößern", - "Zoom out": "Verkleinern" -} + "Zoom out": "Verkleinern", + "as of today": "Stand heute", + "booking.adults": "{totalAdults, plural, one {# erwachsene} other {# erwachsene}}", + "booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}", + "booking.rooms": "{totalRooms, plural, one {# zimmer} other {# räume}}", + "by": "bis", + "characters": "figuren", + "hotelPages.rooms.roomCard.person": "person", + "hotelPages.rooms.roomCard.persons": "personen", + "hotelPages.rooms.roomCard.seeRoomDetails": "Zimmerdetails ansehen", + "km to city center": "km bis zum Stadtzentrum", + "next level:": "Nächstes Level:", + "night": "nacht", + "nights": "Nächte", + "number": "nummer", + "or": "oder", + "points": "Punkte", + "special character": "sonderzeichen", + "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", + "to": "zu", + "uppercase letter": "großbuchstabe", + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 6e38a05e7..f13a60b2c 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -1,4 +1,5 @@ { + "Included (based on availability)": "Included (based on availability)", "A destination or hotel name is needed to be able to search for a hotel room.": "A destination or hotel name is needed to be able to search for a hotel room.", "A photo of the room": "A photo of the room", "About meetings & conferences": "About meetings & conferences", @@ -10,8 +11,8 @@ "Already a friend?": "Already a friend?", "Amenities": "Amenities", "Amusement park": "Amusement park", - "An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.", "An error occurred trying to manage your preferences, please try again later.": "An error occurred trying to manage your preferences, please try again later.", + "An error occurred when adding a credit card, please try again later.": "An error occurred when adding a credit card, please try again later.", "An error occurred when trying to update profile.": "An error occurred when trying to update profile.", "Any changes you've made will be lost.": "Any changes you've made will be lost.", "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?": "Are you sure you want to remove the card ending with {lastFourDigits} from your member profile?", @@ -30,9 +31,9 @@ "Breakfast": "Breakfast", "Breakfast excluded": "Breakfast excluded", "Breakfast included": "Breakfast included", + "Breakfast restaurant": "Breakfast restaurant", "Bus terminal": "Bus terminal", "Business": "Business", - "Breakfast restaurant": "Breakfast restaurant", "Cancel": "Cancel", "Check in": "Check in", "Check out": "Check out", @@ -76,8 +77,8 @@ "Edit profile": "Edit profile", "Email": "Email", "Email address": "Email address", - "Enter destination or hotel": "Enter destination or hotel", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", + "Enter destination or hotel": "Enter destination or hotel", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Explore all levels and benefits", "Explore nearby": "Explore nearby", @@ -112,6 +113,7 @@ "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.", "Join Scandic Friends": "Join Scandic Friends", "Join at no cost": "Join at no cost", + "King bed": "King bed", "Language": "Language", "Lastname": "Lastname", "Latest searches": "Latest searches", @@ -192,6 +194,7 @@ "Proceed to payment method": "Proceed to payment method", "Public price from": "Public price from", "Public transport": "Public transport", + "Queen bed": "Queen bed", "Read more": "Read more", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Read more about the hotel", @@ -258,7 +261,7 @@ "Visiting address": "Visiting address", "We could not add a card right now, please try again later.": "We could not add a card right now, please try again later.", "We couldn't find a matching location for your search.": "We couldn't find a matching location for your search.", - "We have sent a detailed confirmation of your booking to your email: ": "We have sent a detailed confirmation of your booking to your email: ", + "We have sent a detailed confirmation of your booking to your email:": "We have sent a detailed confirmation of your booking to your email: ", "We look forward to your visit!": "We look forward to your visit!", "Weekdays": "Weekdays", "Weekends": "Weekends", @@ -285,6 +288,7 @@ "Zip code": "Zip code", "Zoo": "Zoo", "Zoom in": "Zoom in", + "Zoom out": "Zoom out", "as of today": "as of today", "booking.adults": "{totalAdults, plural, one {# adult} other {# adults}}", "booking.nights": "{totalNights, plural, one {# night} other {# nights}}", @@ -306,5 +310,5 @@ "to": "to", "uppercase letter": "uppercase letter", "{difference}{amount} {currency}": "{difference}{amount} {currency}", - "Zoom out": "Zoom out" -} + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 7a7ed2ae8..064cffe7c 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -1,4 +1,5 @@ { + "Included (based on availability)": "Sisältyy (saatavuuden mukaan)", "A destination or hotel name is needed to be able to search for a hotel room.": "Kohteen tai hotellin nimi tarvitaan, jotta hotellihuonetta voidaan hakea.", "A photo of the room": "Kuva huoneesta", "About meetings & conferences": "About meetings & conferences", @@ -64,6 +65,7 @@ "Date of Birth": "Syntymäaika", "Day": "Päivä", "Description": "Kuvaus", + "Destination": "Kohde", "Destinations & hotels": "Kohteet ja hotellit", "Discard changes": "Hylkää muutokset", "Discard unsaved changes?": "Hylkäätkö tallentamattomat muutokset?", @@ -74,6 +76,7 @@ "Edit": "Muokata", "Edit profile": "Muokkaa profiilia", "Email": "Sähköposti", + "Email address": "Sähköpostiosoite", "Enter destination or hotel": "Anna kohde tai hotelli", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", @@ -85,6 +88,7 @@ "Fair": "Messukeskus", "Find booking": "Etsi varaus", "Find hotels": "Etsi hotelleja", + "Firstname": "Etunimi", "Flexibility": "Joustavuus", "Former Scandic Hotel": "Entinen Scandic-hotelli", "Free cancellation": "Ilmainen peruutus", @@ -94,6 +98,7 @@ "Get member benefits & offers": "Hanki jäsenetuja ja -tarjouksia", "Go back to edit": "Palaa muokkaamaan", "Go back to overview": "Palaa yleiskatsaukseen", + "Guest information": "Vieraan tiedot", "Guests & Rooms": "Vieraat & Huoneet", "Hi": "Hi", "Highest level": "Korkein taso", @@ -108,7 +113,9 @@ "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Viestintäasetuksiasi ei voi hallita juuri nyt. Yritä myöhemmin uudelleen tai ota yhteyttä tukeen, jos ongelma jatkuu.", "Join Scandic Friends": "Liity jäseneksi", "Join at no cost": "Liity maksutta", + "King bed": "King-vuode", "Language": "Kieli", + "Lastname": "Sukunimi", "Latest searches": "Viimeisimmät haut", "Level": "Level", "Level 1": "Taso 1", @@ -184,8 +191,10 @@ "Points needed to level up": "Tarvitset vielä", "Points needed to stay on level": "Tällä tasolla pysymiseen tarvittavat pisteet", "Previous victories": "Edelliset voitot", + "Proceed to payment method": "Siirry maksutavalle", "Public price from": "Julkinen hinta alkaen", "Public transport": "Julkinen liikenne", + "Queen bed": "Queen-vuode", "Read more": "Lue lisää", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Lue lisää hotellista", @@ -212,6 +221,7 @@ "Select a country": "Valitse maa", "Select country of residence": "Valitse asuinmaa", "Select date of birth": "Valitse syntymäaika", + "Select dates": "Valitse päivämäärät", "Select language": "Valitse kieli", "Select your language": "Valitse kieli", "Shopping": "Ostokset", @@ -281,7 +291,9 @@ "Zoom in": "Lähennä", "Zoom out": "Loitonna", "as of today": "tänään", + "booking.adults": "{totalAdults, plural, one {# aikuinen} other {# aikuiset}}", "booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}", + "booking.rooms": "{totalRooms, plural, one {# huone} other {# sviitti}}", "by": "mennessä", "characters": "hahmoja", "hotelPages.rooms.roomCard.person": "henkilö", @@ -297,5 +309,7 @@ "special character": "erikoishahmo", "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", "to": "to", - "uppercase letter": "iso kirjain" -} + "uppercase letter": "iso kirjain", + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index adac63ba0..aea1e69a1 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -1,4 +1,5 @@ { + "Included (based on availability)": "Inkludert (basert på tilgjengelighet)", "A destination or hotel name is needed to be able to search for a hotel room.": "Et reisemål eller hotellnavn er nødvendig for å kunne søke etter et hotellrom.", "A photo of the room": "Et bilde av rommet", "About meetings & conferences": "About meetings & conferences", @@ -63,6 +64,7 @@ "Date of Birth": "Fødselsdato", "Day": "Dag", "Description": "Beskrivelse", + "Destination": "Destinasjon", "Destinations & hotels": "Destinasjoner og hoteller", "Discard changes": "Forkaste endringer", "Discard unsaved changes?": "Forkaste endringer som ikke er lagret?", @@ -73,6 +75,7 @@ "Edit": "Redigere", "Edit profile": "Rediger profil", "Email": "E-post", + "Email address": "E-postadresse", "Enter destination or hotel": "Skriv inn destinasjon eller hotell", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", @@ -84,6 +87,7 @@ "FAQ": "FAQ", "Find booking": "Finn booking", "Find hotels": "Finn hotell", + "Firstname": "Fornavn", "Flexibility": "Fleksibilitet", "Former Scandic Hotel": "Tidligere Scandic-hotell", "Free cancellation": "Gratis avbestilling", @@ -93,6 +97,7 @@ "Get member benefits & offers": "Få medlemsfordeler og tilbud", "Go back to edit": "Gå tilbake til redigering", "Go back to overview": "Gå tilbake til oversikten", + "Guest information": "Informasjon til gjester", "Guests & Rooms": "Gjester & rom", "Hi": "Hei", "Highest level": "Høyeste nivå", @@ -107,7 +112,9 @@ "It is not posible to manage your communication preferences right now, please try again later or contact support if the problem persists.": "Det er ikke mulig å administrere kommunikasjonspreferansene dine akkurat nå, prøv igjen senere eller kontakt support hvis problemet vedvarer.", "Join Scandic Friends": "Bli med i Scandic Friends", "Join at no cost": "Bli med uten kostnad", + "King bed": "King-size-seng", "Language": "Språk", + "Lastname": "Etternavn", "Latest searches": "Siste søk", "Level": "Nivå", "Level 1": "Nivå 1", @@ -183,8 +190,10 @@ "Points needed to level up": "Poeng som trengs for å komme opp i nivå", "Points needed to stay on level": "Poeng som trengs for å holde seg på nivå", "Previous victories": "Tidligere seire", + "Proceed to payment method": "Fortsett til betalingsmetode", "Public price from": "Offentlig pris fra", "Public transport": "Offentlig transport", + "Queen bed": "Queen-size-seng", "Read more": "Les mer", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Les mer om hotellet", @@ -210,6 +219,7 @@ "Select a country": "Velg et land", "Select country of residence": "Velg bostedsland", "Select date of birth": "Velg fødselsdato", + "Select dates": "Velg datoer", "Select language": "Velg språk", "Select your language": "Velg språk", "Shopping": "Shopping", @@ -279,7 +289,9 @@ "Zoom in": "Zoom inn", "Zoom out": "Zoom ut", "as of today": "per idag", + "booking.adults": "{totalAdults, plural, one {# voksen} other {# voksne}}", "booking.nights": "{totalNights, plural, one {# natt} other {# netter}}", + "booking.rooms": "{totalRooms, plural, one {# rom} other {# rom}}", "by": "innen", "characters": "tegn", "hotelPages.rooms.roomCard.person": "person", @@ -295,5 +307,7 @@ "special character": "spesiell karakter", "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", "to": "til", - "uppercase letter": "stor bokstav" -} + "uppercase letter": "stor bokstav", + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index d257ec189..f70bb5cf3 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -1,4 +1,5 @@ { + "Included (based on availability)": "Ingår (baserat på tillgänglighet)", "A destination or hotel name is needed to be able to search for a hotel room.": "Ett destinations- eller hotellnamn behövs för att kunna söka efter ett hotellrum.", "A photo of the room": "Ett foto av rummet", "About meetings & conferences": "About meetings & conferences", @@ -64,6 +65,7 @@ "Date of Birth": "Födelsedatum", "Day": "Dag", "Description": "Beskrivning", + "Destination": "Destination", "Destinations & hotels": "Destinationer & hotell", "Discard changes": "Ignorera ändringar", "Discard unsaved changes?": "Vill du ignorera ändringar som inte har sparats?", @@ -74,6 +76,7 @@ "Edit": "Redigera", "Edit profile": "Redigera profil", "Email": "E-post", + "Email address": "E-postadress", "Enter destination or hotel": "Ange destination eller hotell", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", @@ -85,6 +88,7 @@ "Fair": "Mässa", "Find booking": "Hitta bokning", "Find hotels": "Hitta hotell", + "Firstname": "Förnamn", "Flexibility": "Flexibilitet", "Former Scandic Hotel": "Tidigare Scandichotell", "Free cancellation": "Fri avbokning", @@ -94,6 +98,7 @@ "Get member benefits & offers": "Ta del av medlemsförmåner och erbjudanden", "Go back to edit": "Gå tillbaka till redigeringen", "Go back to overview": "Gå tillbaka till översikten", + "Guest information": "Information till gästerna", "Guests & Rooms": "Gäster & rum", "Hi": "Hej", "Highest level": "Högsta nivå", @@ -109,7 +114,9 @@ "Join Scandic Friends": "Gå med i Scandic Friends", "Join at no cost": "Gå med utan kostnad", + "King bed": "King size-säng", "Language": "Språk", + "Lastname": "Efternamn", "Latest searches": "Senaste sökningarna", "Level": "Nivå", "Level 1": "Nivå 1", @@ -185,8 +192,10 @@ "Points needed to level up": "Poäng som behövs för att gå upp i nivå", "Points needed to stay on level": "Poäng som behövs för att hålla sig på nivå", "Previous victories": "Tidigare segrar", + "Proceed to payment method": "Gå vidare till betalningsmetod", "Public price from": "Offentligt pris från", "Public transport": "Kollektivtrafik", + "Queen bed": "Queen size-säng", "Read more": "Läs mer", "Read more & book a table": "Read more & book a table", "Read more about the hotel": "Läs mer om hotellet", @@ -212,6 +221,7 @@ "Select a country": "Välj ett land", "Select country of residence": "Välj bosättningsland", "Select date of birth": "Välj födelsedatum", + "Select dates": "Välj datum", "Select language": "Välj språk", "Select your language": "Välj ditt språk", "Shopping": "Shopping", @@ -281,7 +291,9 @@ "Zoom in": "Zooma in", "Zoom out": "Zooma ut", "as of today": "från och med idag", + "booking.adults": "{totalAdults, plural, one {# vuxen} other {# vuxna}}", "booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}", + "booking.rooms": "{totalRooms, plural, one {# rum} other {# rum}}", "by": "innan", "characters": "tecken", "hotelPages.rooms.roomCard.person": "person", @@ -297,5 +309,7 @@ "special character": "speciell karaktär", "spendable points expiring by": "{points} poäng förfaller {date}", "to": "till", - "uppercase letter": "stor bokstav" -} + "uppercase letter": "stor bokstav", + "{difference}{amount} {currency}": "{difference}{amount} {currency}", + "{width} cm × {length} cm": "{width} cm × {length} cm" +} \ No newline at end of file diff --git a/public/_static/icons/UI - Enter details/bed king.svg b/public/_static/icons/UI - Enter details/bed king.svg new file mode 100644 index 000000000..0a8804fef --- /dev/null +++ b/public/_static/icons/UI - Enter details/bed king.svg @@ -0,0 +1,3 @@ + + + diff --git a/types/components/enterDetails/bedType.ts b/types/components/enterDetails/bedType.ts new file mode 100644 index 000000000..c4e6e4ff0 --- /dev/null +++ b/types/components/enterDetails/bedType.ts @@ -0,0 +1,5 @@ +import { z } from "zod" + +import { bedTypeSchema } from "@/components/HotelReservation/EnterDetails/BedType/schema" + +export interface BedTypeSchema extends z.output {} diff --git a/types/components/search.ts b/types/components/search.ts index 42401045f..6f1017126 100644 --- a/types/components/search.ts +++ b/types/components/search.ts @@ -39,14 +39,14 @@ export interface ListItemProps export interface DialogProps extends React.PropsWithChildren, - VariantProps, - Pick { + VariantProps, + Pick { className?: string } export interface ErrorDialogProps extends React.PropsWithChildren, - Pick {} + Pick { } export interface ClearSearchButtonProps extends Pick< diff --git a/types/enums/bedType.ts b/types/enums/bedType.ts new file mode 100644 index 000000000..0b4ba284d --- /dev/null +++ b/types/enums/bedType.ts @@ -0,0 +1,4 @@ +export enum bedTypeEnum { + KING = "KING", + QUEEN = "QUEEN", +} From 372ec171f5860376f64a5f4e5c4f7a6545872d09 Mon Sep 17 00:00:00 2001 From: Simon Emanuelsson Date: Fri, 4 Oct 2024 13:22:21 +0200 Subject: [PATCH 58/64] feat: breakfast choice --- .../hotelreservation/[section]/page.tsx | 17 ++--- .../EnterDetails/BedType/index.tsx | 3 - .../Breakfast/breakfast.module.css | 7 ++ .../EnterDetails/Breakfast/index.tsx | 70 +++++++++++++++++++ .../EnterDetails/Breakfast/schema.ts | 7 ++ components/Icons/Breakfast.tsx | 40 +++++++++++ components/Icons/NoBreakfast.tsx | 40 +++++++++++ components/Icons/index.tsx | 2 + i18n/dictionaries/da.json | 8 ++- i18n/dictionaries/de.json | 8 ++- i18n/dictionaries/en.json | 8 ++- i18n/dictionaries/fi.json | 8 ++- i18n/dictionaries/no.json | 8 ++- i18n/dictionaries/sv.json | 8 ++- types/components/enterDetails/breakfast.ts | 5 ++ types/enums/breakfast.ts | 4 ++ 16 files changed, 223 insertions(+), 20 deletions(-) create mode 100644 components/HotelReservation/EnterDetails/Breakfast/breakfast.module.css create mode 100644 components/HotelReservation/EnterDetails/Breakfast/index.tsx create mode 100644 components/HotelReservation/EnterDetails/Breakfast/schema.ts create mode 100644 components/Icons/Breakfast.tsx create mode 100644 components/Icons/NoBreakfast.tsx create mode 100644 types/components/enterDetails/breakfast.ts create mode 100644 types/enums/breakfast.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index 9f91bee96..d2f2a5450 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -4,9 +4,9 @@ import { getProfileSafely } from "@/lib/trpc/memoizedRequests" import { serverClient } from "@/lib/trpc/server" import BedType from "@/components/HotelReservation/EnterDetails/BedType" +import Breakfast from "@/components/HotelReservation/EnterDetails/Breakfast" import Details from "@/components/HotelReservation/EnterDetails/Details" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" -import BreakfastSelection from "@/components/HotelReservation/SelectRate/BreakfastSelection" import Payment from "@/components/HotelReservation/SelectRate/Payment" import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" @@ -104,7 +104,7 @@ export default async function SectionsPage({ const selectedBreakfast = searchParams.breakfast ? breakfastAlternatives.find((a) => a.value === searchParams.breakfast) - ?.name + ?.name : undefined const selectedRoom = searchParams.roomClass @@ -132,9 +132,9 @@ export default async function SectionsPage({ selection={ selectedRoom ? [ - selectedRoom, - intl.formatMessage({ id: selectedFlexibility }), - ] + selectedRoom, + intl.formatMessage({ id: selectedFlexibility }), + ] : undefined } path={`select-rate?${currentSearchParams}`} @@ -162,12 +162,7 @@ export default async function SectionsPage({ selection={selectedBreakfast} path={`breakfast?${currentSearchParams}`} > - {params.section === "breakfast" && ( - - )} + {params.section === "breakfast" ? : null} ({ - defaultValues: { - bed: bedTypeEnum.KING, - }, criteriaMode: "all", mode: "all", resolver: zodResolver(bedTypeSchema), diff --git a/components/HotelReservation/EnterDetails/Breakfast/breakfast.module.css b/components/HotelReservation/EnterDetails/Breakfast/breakfast.module.css new file mode 100644 index 000000000..81fd223b9 --- /dev/null +++ b/components/HotelReservation/EnterDetails/Breakfast/breakfast.module.css @@ -0,0 +1,7 @@ +.form { + display: grid; + gap: var(--Spacing-x2); + grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); + padding-bottom: var(--Spacing-x3); + width: min(600px, 100%); +} diff --git a/components/HotelReservation/EnterDetails/Breakfast/index.tsx b/components/HotelReservation/EnterDetails/Breakfast/index.tsx new file mode 100644 index 000000000..b8f00ec83 --- /dev/null +++ b/components/HotelReservation/EnterDetails/Breakfast/index.tsx @@ -0,0 +1,70 @@ +"use client" + +import { zodResolver } from "@hookform/resolvers/zod" +import { FormProvider, useForm } from "react-hook-form" +import { useIntl } from "react-intl" + +import { BreakfastIcon, NoBreakfastIcon } from "@/components/Icons" +import RadioCard from "@/components/TempDesignSystem/Form/Card/Radio" + +import { breakfastSchema } from "./schema" + +import styles from "./breakfast.module.css" + +import type { BreakfastSchema } from "@/types/components/enterDetails/breakfast" +import { breakfastEnum } from "@/types/enums/breakfast" + +export default function Breakfast() { + const intl = useIntl() + + const methods = useForm({ + criteriaMode: "all", + mode: "all", + resolver: zodResolver(breakfastSchema), + reValidateMode: "onChange", + }) + + return ( + +
+ {amount} {currency}/night per adult" }, + { + amount: "150", + b: (str) => {str}, + currency: "SEK", + } + )} + text={intl.formatMessage({ + id: "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.", + })} + title={intl.formatMessage({ id: "Breakfast buffet" })} + value={breakfastEnum.BREAKFAST} + /> + + +
+ ) +} diff --git a/components/HotelReservation/EnterDetails/Breakfast/schema.ts b/components/HotelReservation/EnterDetails/Breakfast/schema.ts new file mode 100644 index 000000000..34cc5efca --- /dev/null +++ b/components/HotelReservation/EnterDetails/Breakfast/schema.ts @@ -0,0 +1,7 @@ +import { z } from "zod" + +import { breakfastEnum } from "@/types/enums/breakfast" + +export const breakfastSchema = z.object({ + breakfast: z.nativeEnum(breakfastEnum), +}) diff --git a/components/Icons/Breakfast.tsx b/components/Icons/Breakfast.tsx new file mode 100644 index 000000000..dccfc0c39 --- /dev/null +++ b/components/Icons/Breakfast.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function BreakfastIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/NoBreakfast.tsx b/components/Icons/NoBreakfast.tsx new file mode 100644 index 000000000..c09af6616 --- /dev/null +++ b/components/Icons/NoBreakfast.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function NoBreakfastIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/index.tsx b/components/Icons/index.tsx index 73b554342..f26933255 100644 --- a/components/Icons/index.tsx +++ b/components/Icons/index.tsx @@ -4,6 +4,7 @@ export { default as AirplaneIcon } from "./Airplane" export { default as ArrowRightIcon } from "./ArrowRight" export { default as BarIcon } from "./Bar" export { default as BikingIcon } from "./Biking" +export { default as BreakfastIcon } from "./Breakfast" export { default as BusinessIcon } from "./Business" export { default as CalendarIcon } from "./Calendar" export { default as CameraIcon } from "./Camera" @@ -40,6 +41,7 @@ export { default as LockIcon } from "./Lock" export { default as MapIcon } from "./Map" export { default as MinusIcon } from "./Minus" export { default as MuseumIcon } from "./Museum" +export { default as NoBreakfastIcon } from "./NoBreakfast" export { default as ParkingIcon } from "./Parking" export { default as People2Icon } from "./People2" export { default as PersonIcon } from "./Person" diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index dd139b105..e29d7cf6d 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Inkluderet (baseret på tilgængelighed)", + "{amount} {currency}/night per adult": "{amount} {currency}/nat pr. voksen", "A destination or hotel name is needed to be able to search for a hotel room.": "Et destinations- eller hotelnavn er nødvendigt for at kunne søge efter et hotelværelse.", "A photo of the room": "Et foto af værelset", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Tilføj nyt kort", "Address": "Adresse", "Airport": "Lufthavn", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle vores morgenmadsbuffeter tilbyder glutenfrie, veganske og allergivenlige muligheder.", "Already a friend?": "Allerede en ven?", "Amenities": "Faciliteter", "Amusement park": "Forlystelsespark", @@ -29,6 +31,7 @@ "Book reward night": "Book bonusnat", "Booking number": "Bookingnummer", "Breakfast": "Morgenmad", + "Breakfast buffet": "Morgenbuffet", "Breakfast excluded": "Morgenmad ikke inkluderet", "Breakfast included": "Morgenmad inkluderet", "Bus terminal": "Busstation", @@ -159,6 +162,7 @@ "New password": "Nyt kodeord", "Next": "Næste", "Nights needed to level up": "Nætter nødvendige for at komme i niveau", + "No breakfast": "Ingen morgenmad", "No content published": "Intet indhold offentliggjort", "No matching location found": "Der blev ikke fundet nogen matchende placering", "No results": "Ingen resultater", @@ -275,6 +279,7 @@ "Year": "År", "Yes, discard changes": "Ja, kasser ændringer", "Yes, remove my card": "Ja, fjern mit kort", + "You can always change your mind later and add breakfast at the hotel.": "Du kan altid ombestemme dig senere og tilføje morgenmad på hotellet.", "You canceled adding a new credit card.": "Du har annulleret tilføjelsen af et nyt kreditkort.", "You have no previous stays.": "Du har ingen tidligere ophold.", "You have no upcoming stays.": "Du har ingen kommende ophold.", @@ -309,6 +314,7 @@ "spendable points expiring by": "{points} Brugbare point udløber den {date}", "to": "til", "uppercase letter": "stort bogstav", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index cca633251..ee4bccf96 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Inbegriffen (je nach Verfügbarkeit)", + "{amount} {currency}/night per adult": "{amount} {currency}/Nacht pro Erwachsener", "A destination or hotel name is needed to be able to search for a hotel room.": "Ein Reiseziel oder Hotelname wird benötigt, um nach einem Hotelzimmer suchen zu können.", "A photo of the room": "Ein Foto des Zimmers", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Neue Karte hinzufügen", "Address": "Adresse", "Airport": "Flughafen", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle unsere Frühstücksbuffets bieten glutenfreie, vegane und allergikerfreundliche Speisen.", "Already a friend?": "Sind wir schon Freunde?", "Amenities": "Annehmlichkeiten", "Amusement park": "Vergnügungspark", @@ -29,6 +31,7 @@ "Book reward night": "Bonusnacht buchen", "Booking number": "Buchungsnummer", "Breakfast": "Frühstück", + "Breakfast buffet": "Frühstücksbuffet", "Breakfast excluded": "Frühstück nicht inbegriffen", "Breakfast included": "Frühstück inbegriffen", "Breakfast restaurant": "Breakfast restaurant", @@ -159,6 +162,7 @@ "New password": "Neues Kennwort", "Next": "Nächste", "Nights needed to level up": "Nächte, die zum Levelaufstieg benötigt werden", + "No breakfast": "Kein Frühstück", "No content published": "Kein Inhalt veröffentlicht", "No matching location found": "Kein passender Standort gefunden", "No results": "Keine Ergebnisse", @@ -275,6 +279,7 @@ "Year": "Jahr", "Yes, discard changes": "Ja, Änderungen verwerfen", "Yes, remove my card": "Ja, meine Karte entfernen", + "You can always change your mind later and add breakfast at the hotel.": "Sie können es sich später jederzeit anders überlegen und das Frühstück im Hotel hinzufügen.", "You canceled adding a new credit card.": "Sie haben das Hinzufügen einer neuen Kreditkarte abgebrochen.", "You have no previous stays.": "Sie haben keine vorherigen Aufenthalte.", "You have no upcoming stays.": "Sie haben keine bevorstehenden Aufenthalte.", @@ -309,6 +314,7 @@ "spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}", "to": "zu", "uppercase letter": "großbuchstabe", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index f13a60b2c..1e51379f2 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Included (based on availability)", + "{amount} {currency}/night per adult": "{amount} {currency}/night per adult", "A destination or hotel name is needed to be able to search for a hotel room.": "A destination or hotel name is needed to be able to search for a hotel room.", "A photo of the room": "A photo of the room", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Add new card", "Address": "Address", "Airport": "Airport", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.", "Already a friend?": "Already a friend?", "Amenities": "Amenities", "Amusement park": "Amusement park", @@ -29,6 +31,7 @@ "Book reward night": "Book reward night", "Booking number": "Booking number", "Breakfast": "Breakfast", + "Breakfast buffet": "Breakfast buffet", "Breakfast excluded": "Breakfast excluded", "Breakfast included": "Breakfast included", "Breakfast restaurant": "Breakfast restaurant", @@ -159,6 +162,7 @@ "New password": "New password", "Next": "Next", "Nights needed to level up": "Nights needed to level up", + "No breakfast": "No breakfast", "No content published": "No content published", "No matching location found": "No matching location found", "No results": "No results", @@ -275,6 +279,7 @@ "Year": "Year", "Yes, discard changes": "Yes, discard changes", "Yes, remove my card": "Yes, remove my card", + "You can always change your mind later and add breakfast at the hotel.": "You can always change your mind later and add breakfast at the hotel.", "You canceled adding a new credit card.": "You canceled adding a new credit card.", "You have no previous stays.": "You have no previous stays.", "You have no upcoming stays.": "You have no upcoming stays.", @@ -309,6 +314,7 @@ "spendable points expiring by": "{points} spendable points expiring by {date}", "to": "to", "uppercase letter": "uppercase letter", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 064cffe7c..5e3ab2fc4 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Sisältyy (saatavuuden mukaan)", + "{amount} {currency}/night per adult": "{amount} {currency}/yö per aikuinen", "A destination or hotel name is needed to be able to search for a hotel room.": "Kohteen tai hotellin nimi tarvitaan, jotta hotellihuonetta voidaan hakea.", "A photo of the room": "Kuva huoneesta", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Lisää uusi kortti", "Address": "Osoite", "Airport": "Lentokenttä", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Kaikki aamiaisbuffettimme tarjoavat gluteenittomia, vegaanisia ja allergiaystävällisiä vaihtoehtoja.", "Already a friend?": "Oletko jo ystävä?", "Amenities": "Mukavuudet", "Amusement park": "Huvipuisto", @@ -29,6 +31,7 @@ "Book reward night": "Kirjapalkinto-ilta", "Booking number": "Varausnumero", "Breakfast": "Aamiainen", + "Breakfast buffet": "Aamiaisbuffet", "Breakfast excluded": "Aamiainen ei sisälly", "Breakfast included": "Aamiainen sisältyy", "Bus terminal": "Bussiasema", @@ -159,6 +162,7 @@ "New password": "Uusi salasana", "Next": "Seuraava", "Nights needed to level up": "Yöt, joita tarvitaan tasolle", + "No breakfast": "Ei aamiaista", "No content published": "Ei julkaistua sisältöä", "No matching location found": "Vastaavaa sijaintia ei löytynyt", "No results": "Ei tuloksia", @@ -276,6 +280,7 @@ "Year": "Vuosi", "Yes, discard changes": "Kyllä, hylkää muutokset", "Yes, remove my card": "Kyllä, poista korttini", + "You can always change your mind later and add breakfast at the hotel.": "Voit aina muuttaa mieltäsi myöhemmin ja lisätä aamiaisen hotelliin.", "You canceled adding a new credit card.": "Peruutit uuden luottokortin lisäämisen.", "You have no previous stays.": "Sinulla ei ole aiempia majoituksia.", "You have no upcoming stays.": "Sinulla ei ole tulevia majoituksia.", @@ -310,6 +315,7 @@ "spendable points expiring by": "{points} pistettä vanhenee {date} mennessä", "to": "to", "uppercase letter": "iso kirjain", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index aea1e69a1..1dd97b8f2 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Inkludert (basert på tilgjengelighet)", + "{amount} {currency}/night per adult": "{amount} {currency}/natt per voksen", "A destination or hotel name is needed to be able to search for a hotel room.": "Et reisemål eller hotellnavn er nødvendig for å kunne søke etter et hotellrom.", "A photo of the room": "Et bilde av rommet", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Legg til nytt kort", "Address": "Adresse", "Airport": "Flyplass", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle våre frokostbufféer tilbyr glutenfrie, veganske og allergivennlige alternativer.", "Already a friend?": "Allerede Friend?", "Amenities": "Fasiliteter", "Amusement park": "Tivoli", @@ -29,6 +31,7 @@ "Book reward night": "Bestill belønningskveld", "Booking number": "Bestillingsnummer", "Breakfast": "Frokost", + "Breakfast buffet": "Breakfast buffet", "Breakfast excluded": "Frokost ekskludert", "Breakfast included": "Frokost inkludert", "Bus terminal": "Bussterminal", @@ -158,6 +161,7 @@ "New password": "Nytt passord", "Next": "Neste", "Nights needed to level up": "Netter som trengs for å komme opp i nivå", + "No breakfast": "Ingen frokost", "No content published": "Ingen innhold publisert", "No matching location found": "Fant ingen samsvarende plassering", "No results": "Ingen resultater", @@ -274,6 +278,7 @@ "Year": "År", "Yes, discard changes": "Ja, forkast endringer", "Yes, remove my card": "Ja, fjern kortet mitt", + "You can always change your mind later and add breakfast at the hotel.": "Du kan alltid ombestemme deg senere og legge til frokost på hotellet.", "You canceled adding a new credit card.": "Du kansellerte å legge til et nytt kredittkort.", "You have no previous stays.": "Du har ingen tidligere opphold.", "You have no upcoming stays.": "Du har ingen kommende opphold.", @@ -308,6 +313,7 @@ "spendable points expiring by": "{points} Brukbare poeng utløper innen {date}", "to": "til", "uppercase letter": "stor bokstav", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index f70bb5cf3..6f5fcd37a 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -1,5 +1,6 @@ { "Included (based on availability)": "Ingår (baserat på tillgänglighet)", + "{amount} {currency}/night per adult": "{amount} {currency}/natt per vuxen", "A destination or hotel name is needed to be able to search for a hotel room.": "Ett destinations- eller hotellnamn behövs för att kunna söka efter ett hotellrum.", "A photo of the room": "Ett foto av rummet", "About meetings & conferences": "About meetings & conferences", @@ -8,6 +9,7 @@ "Add new card": "Lägg till nytt kort", "Address": "Adress", "Airport": "Flygplats", + "All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alla våra frukostbufféer erbjuder glutenfria, veganska och allergivänliga alternativ.", "Already a friend?": "Är du redan en vän?", "Amenities": "Bekvämligheter", "Amusement park": "Nöjespark", @@ -29,6 +31,7 @@ "Book reward night": "Boka frinatt", "Booking number": "Bokningsnummer", "Breakfast": "Frukost", + "Breakfast buffet": "Frukostbuffé", "Breakfast excluded": "Frukost ingår ej", "Breakfast included": "Frukost ingår", "Bus terminal": "Bussterminal", @@ -160,6 +163,7 @@ "New password": "Nytt lösenord", "Next": "Nästa", "Nights needed to level up": "Nätter som behövs för att gå upp i nivå", + "No breakfast": "Ingen frukost", "No content published": "Inget innehåll publicerat", "No matching location found": "Ingen matchande plats hittades", "No results": "Inga resultat", @@ -276,6 +280,7 @@ "Year": "År", "Yes, discard changes": "Ja, ignorera ändringar", "Yes, remove my card": "Ja, ta bort mitt kort", + "You can always change your mind later and add breakfast at the hotel.": "Du kan alltid ändra dig senare och lägga till frukost på hotellet.", "You canceled adding a new credit card.": "Du avbröt att lägga till ett nytt kreditkort.", "You have no previous stays.": "Du har inga tidigare vistelser.", "You have no upcoming stays.": "Du har inga planerade resor.", @@ -310,6 +315,7 @@ "spendable points expiring by": "{points} poäng förfaller {date}", "to": "till", "uppercase letter": "stor bokstav", + "{amount} {currency}": "{amount} {currency}", "{difference}{amount} {currency}": "{difference}{amount} {currency}", "{width} cm × {length} cm": "{width} cm × {length} cm" -} \ No newline at end of file +} diff --git a/types/components/enterDetails/breakfast.ts b/types/components/enterDetails/breakfast.ts new file mode 100644 index 000000000..868bc96a1 --- /dev/null +++ b/types/components/enterDetails/breakfast.ts @@ -0,0 +1,5 @@ +import { z } from "zod" + +import { breakfastSchema } from "@/components/HotelReservation/EnterDetails/Breakfast/schema" + +export interface BreakfastSchema extends z.output {} diff --git a/types/enums/breakfast.ts b/types/enums/breakfast.ts new file mode 100644 index 000000000..567db2860 --- /dev/null +++ b/types/enums/breakfast.ts @@ -0,0 +1,4 @@ +export enum breakfastEnum { + BREAKFAST = "BREAKFAST", + NO_BREAKFAST = "NO_BREAKFAST", +} From 2b20172b7385cdbe697ca899b32c649f9f7297c3 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Tue, 8 Oct 2024 10:49:26 +0200 Subject: [PATCH 59/64] feat(SW-350): update classes for booking widget input --- .../BookingWidget/FormContent/Input/index.tsx | 6 +----- .../BookingWidget/FormContent/Search/index.tsx | 1 - .../FormContent/Search/search.module.css | 14 +++++++------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/components/Forms/BookingWidget/FormContent/Input/index.tsx b/components/Forms/BookingWidget/FormContent/Input/index.tsx index 762d48cf3..7a592f594 100644 --- a/components/Forms/BookingWidget/FormContent/Input/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Input/index.tsx @@ -10,11 +10,7 @@ const Input = forwardRef< >(function InputComponent(props, ref) { return ( - + ) }) diff --git a/components/Forms/BookingWidget/FormContent/Search/index.tsx b/components/Forms/BookingWidget/FormContent/Search/index.tsx index 8ecd56e6b..98c5b36e8 100644 --- a/components/Forms/BookingWidget/FormContent/Search/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/index.tsx @@ -145,7 +145,6 @@ export default function Search({ locations }: SearchProps) {
Date: Tue, 8 Oct 2024 09:10:06 +0000 Subject: [PATCH 60/64] Merged in feat/SW-454-select-room-api (pull request #648) Feat/SW-454 Create select rate page foundation * Extract select-rate page to its own, fixed route * Rename availability to hotelsAvailability * Update availability hotels response * Number to string Approved-by: Pontus Dreij --- .../hotelreservation/[section]/page.tsx | 14 +---- .../hotelreservation/select-hotel/utils.ts | 2 +- .../select-rate/page.module.css | 25 +++++++++ .../hotelreservation/select-rate/page.tsx | 53 +++++++++++++++++++ .../SelectRate/RoomSelection/index.tsx | 12 ++--- .../RoomSelection/roomSelection.module.css | 7 +++ lib/api/endpoints.ts | 2 +- server/routers/hotels/input.ts | 2 +- server/routers/hotels/output.ts | 34 +++++------- server/routers/hotels/query.ts | 40 +++++++------- .../selectHotel/hotelCardListingProps.ts | 4 +- .../selectRate/roomSelection.ts | 7 +++ .../hotelReservation/selectRate/section.ts | 8 --- .../hotelReservation/selectRate/selectRate.ts | 5 ++ 14 files changed, 143 insertions(+), 72 deletions(-) create mode 100644 app/[lang]/(live)/(public)/hotelreservation/select-rate/page.module.css create mode 100644 app/[lang]/(live)/(public)/hotelreservation/select-rate/page.tsx create mode 100644 types/components/hotelReservation/selectRate/roomSelection.ts create mode 100644 types/components/hotelReservation/selectRate/selectRate.ts diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx index d2f2a5450..fa2581a54 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx @@ -8,7 +8,6 @@ import Breakfast from "@/components/HotelReservation/EnterDetails/Breakfast" import Details from "@/components/HotelReservation/EnterDetails/Details" import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" import Payment from "@/components/HotelReservation/SelectRate/Payment" -import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" import Summary from "@/components/HotelReservation/SelectRate/Summary" import { getIntl } from "@/i18n" @@ -138,18 +137,7 @@ export default async function SectionsPage({ : undefined } path={`select-rate?${currentSearchParams}`} - > - {params.section === "select-rate" && ( - - )} - + > { - const availableHotels = await serverClient().hotel.availability.get(input) + const availableHotels = await serverClient().hotel.availability.hotels(input) if (!availableHotels) throw new Error() diff --git a/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.module.css b/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.module.css new file mode 100644 index 000000000..3266c418d --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.module.css @@ -0,0 +1,25 @@ +.page { + min-height: 100dvh; + padding-top: var(--Spacing-x6); + padding-left: var(--Spacing-x2); + padding-right: var(--Spacing-x2); + background-color: var(--Scandic-Brand-Warm-White); +} + +.content { + max-width: 1134px; + margin-top: var(--Spacing-x5); + margin-left: auto; + margin-right: auto; + display: flex; + justify-content: space-between; + gap: var(--Spacing-x7); +} + +.main { + flex-grow: 1; +} + +.summary { + max-width: 340px; +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.tsx new file mode 100644 index 000000000..235eeda52 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/select-rate/page.tsx @@ -0,0 +1,53 @@ +import { serverClient } from "@/lib/trpc/server" +import tempHotelData from "@/server/routers/hotels/tempHotelData.json" + +import RoomSelection from "@/components/HotelReservation/SelectRate/RoomSelection" +import { getIntl } from "@/i18n" +import { setLang } from "@/i18n/serverContext" + +import styles from "./page.module.css" + +import { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate" +import { LangParams, PageArgs } from "@/types/params" + +export default async function SelectRatePage({ + params, + searchParams, +}: PageArgs) { + setLang(params.lang) + + // TODO: Use real endpoint. + const hotel = tempHotelData.data.attributes + + const rates = await serverClient().hotel.rates.get({ + // TODO: pass the correct hotel ID and all other parameters that should be included in the search + hotelId: searchParams.hotel, + }) + + // const rates = await serverClient().hotel.availability.getForHotel({ + // hotelId: 811, + // roomStayStartDate: "2024-11-02", + // roomStayEndDate: "2024-11-03", + // adults: 1, + // }) + const intl = await getIntl() + + return ( +
+ {/* TODO: Add Hotel Listing Card */} +
Hotel Listing Card TBI
+ +
+
+ +
+
+
+ ) +} diff --git a/components/HotelReservation/SelectRate/RoomSelection/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/index.tsx index d1be37221..51a56b4ad 100644 --- a/components/HotelReservation/SelectRate/RoomSelection/index.tsx +++ b/components/HotelReservation/SelectRate/RoomSelection/index.tsx @@ -5,11 +5,10 @@ import RoomCard from "./RoomCard" import styles from "./roomSelection.module.css" -import { RoomSelectionProps } from "@/types/components/hotelReservation/selectRate/section" +import { RoomSelectionProps } from "@/types/components/hotelReservation/selectRate/roomSelection" export default function RoomSelection({ - alternatives, - nextPath, + rates, nrOfNights, nrOfAdults, }: RoomSelectionProps) { @@ -21,17 +20,17 @@ export default function RoomSelection({ const queryParams = new URLSearchParams(searchParams) queryParams.set("roomClass", e.currentTarget.roomClass?.value) queryParams.set("flexibility", e.currentTarget.flexibility?.value) - router.push(`${nextPath}?${queryParams}`) + router.push(`select-bed?${queryParams}`) } return (
    - {alternatives.map((room) => ( + {rates.map((room) => (
  • ))}
+
This is summary
) } diff --git a/components/HotelReservation/SelectRate/RoomSelection/roomSelection.module.css b/components/HotelReservation/SelectRate/RoomSelection/roomSelection.module.css index 5a1dfd7c8..80ed0e5be 100644 --- a/components/HotelReservation/SelectRate/RoomSelection/roomSelection.module.css +++ b/components/HotelReservation/SelectRate/RoomSelection/roomSelection.module.css @@ -21,3 +21,10 @@ position: fixed; width: 0; } + +.summary { + position: fixed; + bottom: 0; + left: 0; + right: 0; +} diff --git a/lib/api/endpoints.ts b/lib/api/endpoints.ts index a21017d6a..9ead56554 100644 --- a/lib/api/endpoints.ts +++ b/lib/api/endpoints.ts @@ -6,7 +6,7 @@ export namespace endpoints { profile = "profile/v0/Profile", } export const enum v1 { - availability = "availability/v1/availabilities/city", + hotelsAvailability = "availability/v1/availabilities/city", profile = "profile/v1/Profile", booking = "booking/v1/Bookings", creditCards = `${profile}/creditCards`, diff --git a/server/routers/hotels/input.ts b/server/routers/hotels/input.ts index 416d41eee..b0ff5e679 100644 --- a/server/routers/hotels/input.ts +++ b/server/routers/hotels/input.ts @@ -6,7 +6,7 @@ export const getHotelInputSchema = z.object({ .optional(), }) -export const getAvailabilityInputSchema = z.object({ +export const getHotelsAvailabilityInputSchema = z.object({ cityId: z.string(), roomStayStartDate: z.string(), roomStayEndDate: z.string(), diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index 0d3e75ce3..d233f1a82 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -525,26 +525,18 @@ const occupancySchema = z.object({ const bestPricePerStaySchema = z.object({ currency: z.string(), - amount: z.number(), - regularAmount: z.number(), - memberAmount: z.number(), - discountRate: z.number(), - discountAmount: z.number(), - points: z.number(), - numberOfVouchers: z.number(), - numberOfBonusCheques: z.number(), + // TODO: remove optional when API is ready + regularAmount: z.string().optional(), + // TODO: remove optional when API is ready + memberAmount: z.string().optional(), }) const bestPricePerNightSchema = z.object({ currency: z.string(), - amount: z.number(), - regularAmount: z.number(), - memberAmount: z.number(), - discountRate: z.number(), - discountAmount: z.number(), - points: z.number(), - numberOfVouchers: z.number(), - numberOfBonusCheques: z.number(), + // TODO: remove optional when API is ready + regularAmount: z.string().optional(), + // TODO: remove optional when API is ready + memberAmount: z.string().optional(), }) const linksSchema = z.object({ @@ -556,7 +548,7 @@ const linksSchema = z.object({ ), }) -const availabilitySchema = z.object({ +const hotelsAvailabilitySchema = z.object({ data: z.array( z.object({ attributes: z.object({ @@ -575,10 +567,10 @@ const availabilitySchema = z.object({ ), }) -export const getAvailabilitySchema = availabilitySchema -export type Availability = z.infer -export type AvailabilityPrices = - Availability["data"][number]["attributes"]["bestPricePerNight"] +export const getHotelsAvailabilitySchema = hotelsAvailabilitySchema +export type HotelsAvailability = z.infer +export type HotelsAvailabilityPrices = + HotelsAvailability["data"][number]["attributes"]["bestPricePerNight"] const flexibilityPrice = z.object({ standard: z.number(), diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 2f30ae397..0e319bf6e 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -20,14 +20,14 @@ import { toApiLang } from "@/server/utils" import { hotelPageSchema } from "../contentstack/hotelPage/output" import { - getAvailabilityInputSchema, getHotelInputSchema, + getHotelsAvailabilityInputSchema, getlHotelDataInputSchema, getRatesInputSchema, } from "./input" import { - getAvailabilitySchema, getHotelDataSchema, + getHotelsAvailabilitySchema, getRatesSchema, roomSchema, } from "./output" @@ -51,12 +51,14 @@ const getHotelCounter = meter.createCounter("trpc.hotel.get") const getHotelSuccessCounter = meter.createCounter("trpc.hotel.get-success") const getHotelFailCounter = meter.createCounter("trpc.hotel.get-fail") -const availabilityCounter = meter.createCounter("trpc.hotel.availability") -const availabilitySuccessCounter = meter.createCounter( - "trpc.hotel.availability-success" +const hotelsAvailabilityCounter = meter.createCounter( + "trpc.hotel.availability.hotels" ) -const availabilityFailCounter = meter.createCounter( - "trpc.hotel.availability-fail" +const hotelsAvailabilitySuccessCounter = meter.createCounter( + "trpc.hotel.availability.hotels-success" +) +const hotelsAvailabilityFailCounter = meter.createCounter( + "trpc.hotel.availability.hotels-fail" ) async function getContentstackData( @@ -250,8 +252,8 @@ export const hotelQueryRouter = router({ } }), availability: router({ - get: hotelServiceProcedure - .input(getAvailabilityInputSchema) + hotels: hotelServiceProcedure + .input(getHotelsAvailabilityInputSchema) .query(async ({ input, ctx }) => { const { cityId, @@ -274,7 +276,7 @@ export const hotelQueryRouter = router({ attachedProfileId, } - availabilityCounter.add(1, { + hotelsAvailabilityCounter.add(1, { cityId, roomStayStartDate, roomStayEndDate, @@ -284,11 +286,11 @@ export const hotelQueryRouter = router({ reservationProfileType, }) console.info( - "api.hotels.availability start", + "api.hotels.hotelsAvailability start", JSON.stringify({ query: { cityId, params } }) ) const apiResponse = await api.get( - `${api.endpoints.v1.availability}/${cityId}`, + `${api.endpoints.v1.hotelsAvailability}/${cityId}`, { headers: { Authorization: `Bearer ${ctx.serviceToken}`, @@ -298,7 +300,7 @@ export const hotelQueryRouter = router({ ) if (!apiResponse.ok) { const text = await apiResponse.text() - availabilityFailCounter.add(1, { + hotelsAvailabilityFailCounter.add(1, { cityId, roomStayStartDate, roomStayEndDate, @@ -314,7 +316,7 @@ export const hotelQueryRouter = router({ }), }) console.error( - "api.hotels.availability error", + "api.hotels.hotelsAvailability error", JSON.stringify({ query: { cityId, params }, error: { @@ -328,9 +330,9 @@ export const hotelQueryRouter = router({ } const apiJson = await apiResponse.json() const validateAvailabilityData = - getAvailabilitySchema.safeParse(apiJson) + getHotelsAvailabilitySchema.safeParse(apiJson) if (!validateAvailabilityData.success) { - availabilityFailCounter.add(1, { + hotelsAvailabilityFailCounter.add(1, { cityId, roomStayStartDate, roomStayEndDate, @@ -342,7 +344,7 @@ export const hotelQueryRouter = router({ error: JSON.stringify(validateAvailabilityData.error), }) console.error( - "api.hotels.availability validation error", + "api.hotels.hotelsAvailability validation error", JSON.stringify({ query: { cityId, params }, error: validateAvailabilityData.error, @@ -350,7 +352,7 @@ export const hotelQueryRouter = router({ ) throw badRequestError() } - availabilitySuccessCounter.add(1, { + hotelsAvailabilitySuccessCounter.add(1, { cityId, roomStayStartDate, roomStayEndDate, @@ -360,7 +362,7 @@ export const hotelQueryRouter = router({ reservationProfileType, }) console.info( - "api.hotels.availability success", + "api.hotels.hotelsAvailability success", JSON.stringify({ query: { cityId, params: params }, }) diff --git a/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts b/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts index 0ab3df1ad..431d53c0e 100644 --- a/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts +++ b/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts @@ -1,4 +1,4 @@ -import { AvailabilityPrices } from "@/server/routers/hotels/output" +import { HotelsAvailabilityPrices } from "@/server/routers/hotels/output" import { Hotel } from "@/types/hotel" @@ -8,5 +8,5 @@ export type HotelCardListingProps = { export type HotelData = { hotelData: Hotel - price: AvailabilityPrices + price: HotelsAvailabilityPrices } diff --git a/types/components/hotelReservation/selectRate/roomSelection.ts b/types/components/hotelReservation/selectRate/roomSelection.ts new file mode 100644 index 000000000..d5203f461 --- /dev/null +++ b/types/components/hotelReservation/selectRate/roomSelection.ts @@ -0,0 +1,7 @@ +import { Rate } from "@/server/routers/hotels/output" + +export interface RoomSelectionProps { + rates: Rate[] + nrOfAdults: number + nrOfNights: number +} diff --git a/types/components/hotelReservation/selectRate/section.ts b/types/components/hotelReservation/selectRate/section.ts index 69460962b..4da378cdd 100644 --- a/types/components/hotelReservation/selectRate/section.ts +++ b/types/components/hotelReservation/selectRate/section.ts @@ -1,5 +1,3 @@ -import { Rate } from "@/server/routers/hotels/output" - import { Hotel } from "@/types/hotel" export interface SectionProps { @@ -27,12 +25,6 @@ export interface BreakfastSelectionProps extends SectionProps { }[] } -export interface RoomSelectionProps extends SectionProps { - alternatives: Rate[] - nrOfAdults: number - nrOfNights: number -} - export interface DetailsProps extends SectionProps {} export interface PaymentProps { diff --git a/types/components/hotelReservation/selectRate/selectRate.ts b/types/components/hotelReservation/selectRate/selectRate.ts new file mode 100644 index 000000000..bc325bbf2 --- /dev/null +++ b/types/components/hotelReservation/selectRate/selectRate.ts @@ -0,0 +1,5 @@ +export interface SelectRateSearchParams { + fromDate: string + toDate: string + hotel: string +} From 71fe2807b4589075cf48562d8207647e8defb815 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Tue, 8 Oct 2024 11:11:38 +0200 Subject: [PATCH 61/64] feat(SW-350): fix bug with inputContainer --- .../BookingWidget/FormContent/Search/search.module.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/Forms/BookingWidget/FormContent/Search/search.module.css b/components/Forms/BookingWidget/FormContent/Search/search.module.css index a96361381..7aa9cda02 100644 --- a/components/Forms/BookingWidget/FormContent/Search/search.module.css +++ b/components/Forms/BookingWidget/FormContent/Search/search.module.css @@ -16,9 +16,9 @@ } .label:has( - ~ inputContainer input:active, - ~ inputContainer input:focus, - ~ inputContainer input:focus-within + ~ .inputContainer input:active, + ~ .inputContainer input:focus, + ~ .inputContainer input:focus-within ) p { color: var(--UI-Text-Active); From 1bb2d3f6875dbeacddee31f7629a9293faff8c8c Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Thu, 3 Oct 2024 11:39:35 +0200 Subject: [PATCH 62/64] feat(SW-467): add routing for details steps --- .../{[section] => [step]}/page.module.css | 0 .../(public)/hotelreservation/[step]/page.tsx | 89 +++++++++++++++++++ .../SelectRate/SectionAccordion/index.tsx | 9 ++ constants/routes/hotelReservation.js | 49 +++++++++- middlewares/bookingFlow.ts | 5 +- 5 files changed, 148 insertions(+), 4 deletions(-) rename app/[lang]/(live)/(public)/hotelreservation/{[section] => [step]}/page.module.css (100%) create mode 100644 app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.module.css b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css similarity index 100% rename from app/[lang]/(live)/(public)/hotelreservation/[section]/page.module.css rename to app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css diff --git a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx new file mode 100644 index 000000000..3d24e1b1e --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx @@ -0,0 +1,89 @@ +"use client" + +import { notFound } from "next/navigation" +import { useIntl } from "react-intl" + +import Summary from "@/components/HotelReservation/SelectRate/Summary" + +import styles from "./page.module.css" + +import { LangParams, PageArgs } from "@/types/params" + +// const bedAlternatives = [ +// { +// value: "queen", +// name: "Queen bed", +// payment: "160 cm", +// pricePerNight: 0, +// membersPricePerNight: 0, +// currency: "SEK", +// }, +// { +// value: "king", +// name: "King bed", +// payment: "160 cm", +// pricePerNight: 0, +// membersPricePerNight: 0, +// currency: "SEK", +// }, +// { +// value: "twin", +// name: "Twin bed", +// payment: "90 cm + 90 cm", +// pricePerNight: 82, +// membersPricePerNight: 67, +// currency: "SEK", +// }, +// ] + +// const breakfastAlternatives = [ +// { +// value: "no", +// name: "No breakfast", +// payment: "Always cheeper to get it online", +// pricePerNight: 0, +// currency: "SEK", +// }, +// { +// value: "buffe", +// name: "Breakfast buffé", +// payment: "Always cheeper to get it online", +// pricePerNight: 150, +// currency: "SEK", +// }, +// ] + +enum StepEnum { + "select-bed" = "select-bed", + breakfast = "breakfast", + details = "details", + payment = "payment", +} + +type Step = keyof typeof StepEnum + +function isValidStep(step: string): step is Step { + return Object.keys(StepEnum).includes(step) +} + +export default function StepPage({ + params, +}: PageArgs) { + const { step } = params + const intl = useIntl() + + if (isValidStep(step)) { + return notFound() + } + + switch (step) { + case StepEnum.breakfast: + return
Select BREAKFAST
+ case StepEnum.details: + return
Select DETAILS
+ case StepEnum.payment: + return
Select PAYMENT
+ case StepEnum["select-bed"]: + return
Select BED
+ } +} diff --git a/components/HotelReservation/SelectRate/SectionAccordion/index.tsx b/components/HotelReservation/SelectRate/SectionAccordion/index.tsx index 94ae62f21..ee6a65de3 100644 --- a/components/HotelReservation/SelectRate/SectionAccordion/index.tsx +++ b/components/HotelReservation/SelectRate/SectionAccordion/index.tsx @@ -1,3 +1,6 @@ +import { getHotelDataSchema } from "@/server/routers/hotels/output" +import tempHotelData from "@/server/routers/hotels/tempHotelData.json" + import { CheckCircleIcon, ChevronDownIcon } from "@/components/Icons" import Button from "@/components/TempDesignSystem/Button" import Link from "@/components/TempDesignSystem/Link" @@ -5,6 +8,8 @@ import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import { getIntl } from "@/i18n" +import HotelSelectionHeader from "../../HotelSelectionHeader" + import styles from "./sectionAccordion.module.css" import { SectionAccordionProps } from "@/types/components/hotelReservation/selectRate/sectionAccordion" @@ -15,10 +20,14 @@ export default async function SectionAccordion({ path, children, }: React.PropsWithChildren) { + const hotel = getHotelDataSchema.parse(tempHotelData) + const intl = await getIntl() return (
+ +
diff --git a/constants/routes/hotelReservation.js b/constants/routes/hotelReservation.js index 5fdb1b6b1..4f37fcb6c 100644 --- a/constants/routes/hotelReservation.js +++ b/constants/routes/hotelReservation.js @@ -18,6 +18,46 @@ export const selectHotel = { de: `${hotelReservation.de}/select-hotel`, } +// TODO: Translate paths +export const selectBed = { + en: `${hotelReservation.en}/select-bed`, + sv: `${hotelReservation.sv}/select-bed`, + no: `${hotelReservation.no}/select-bed`, + fi: `${hotelReservation.fi}/select-bed`, + da: `${hotelReservation.da}/select-bed`, + de: `${hotelReservation.de}/select-bed`, +} + +// TODO: Translate paths +export const breakfast = { + en: `${hotelReservation.en}/breakfast`, + sv: `${hotelReservation.sv}/breakfast`, + no: `${hotelReservation.no}/breakfast`, + fi: `${hotelReservation.fi}/breakfast`, + da: `${hotelReservation.da}/breakfast`, + de: `${hotelReservation.de}/breakfast`, +} + +// TODO: Translate paths +export const details = { + en: `${hotelReservation.en}/details`, + sv: `${hotelReservation.sv}/details`, + no: `${hotelReservation.no}/details`, + fi: `${hotelReservation.fi}/details`, + da: `${hotelReservation.da}/details`, + de: `${hotelReservation.de}/details`, +} + +// TODO: Translate paths +export const payments = { + en: `${hotelReservation.en}/payment`, + sv: `${hotelReservation.sv}/payment`, + no: `${hotelReservation.no}/payment`, + fi: `${hotelReservation.fi}/payment`, + da: `${hotelReservation.da}/payment`, + de: `${hotelReservation.de}/payment`, +} + // TODO: Translate paths export const selectHotelMap = { en: `${selectHotel.en}/map`, @@ -48,4 +88,11 @@ export const bookingConfirmation = { de: `${hotelReservation.de}/buchungsbesttigung`, } -export const bookingFlow = [...Object.values(hotelReservation)] +export const bookingFlow = [ + ...Object.values(selectHotel), + ...Object.values(selectBed), + ...Object.values(breakfast), + ...Object.values(details), + ...Object.values(payments), + ...Object.values(selectHotelMap), +] diff --git a/middlewares/bookingFlow.ts b/middlewares/bookingFlow.ts index 6c8826c8f..b65802619 100644 --- a/middlewares/bookingFlow.ts +++ b/middlewares/bookingFlow.ts @@ -1,6 +1,6 @@ import { NextResponse } from "next/server" -import { hotelReservation } from "@/constants/routes/hotelReservation" +import { bookingFlow } from "@/constants/routes/hotelReservation" import { resolve as resolveEntry } from "@/utils/entry" import { findLang } from "@/utils/languages" @@ -35,6 +35,5 @@ export const middleware: NextMiddleware = async (request) => { } export const matcher: MiddlewareMatcher = (request) => { - const lang = findLang(request.nextUrl.pathname)! - return request.nextUrl.pathname.startsWith(hotelReservation[lang]) + return bookingFlow.includes(request.nextUrl.pathname) } From 668eedd83736318baa1e7f35a46b356bbee9960c Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Thu, 3 Oct 2024 17:00:04 +0200 Subject: [PATCH 63/64] fix: toggle section accordion open --- .../hotelreservation/[section]/page.tsx | 176 ------------------ .../hotelreservation/[step]/page.module.css | 7 +- .../(public)/hotelreservation/[step]/page.tsx | 144 ++++++++------ .../hotelreservation/layout.module.css | 1 + .../SelectRate/SectionAccordion/index.tsx | 112 +++++++---- .../sectionAccordion.module.css | 68 ++++++- components/Icons/icon.module.css | 5 + components/Icons/variants.ts | 1 + .../Text/Subtitle/subtitle.module.css | 4 + .../Text/Subtitle/variants.ts | 1 + middlewares/bookingFlow.ts | 11 -- .../selectRate/sectionAccordion.ts | 4 +- 12 files changed, 245 insertions(+), 289 deletions(-) delete mode 100644 app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx diff --git a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx deleted file mode 100644 index fa2581a54..000000000 --- a/app/[lang]/(live)/(public)/hotelreservation/[section]/page.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import { notFound } from "next/navigation" - -import { getProfileSafely } from "@/lib/trpc/memoizedRequests" -import { serverClient } from "@/lib/trpc/server" - -import BedType from "@/components/HotelReservation/EnterDetails/BedType" -import Breakfast from "@/components/HotelReservation/EnterDetails/Breakfast" -import Details from "@/components/HotelReservation/EnterDetails/Details" -import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" -import Payment from "@/components/HotelReservation/SelectRate/Payment" -import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" -import Summary from "@/components/HotelReservation/SelectRate/Summary" -import { getIntl } from "@/i18n" -import { setLang } from "@/i18n/serverContext" - -import styles from "./page.module.css" - -import { SectionPageProps } from "@/types/components/hotelReservation/selectRate/section" -import { LangParams, PageArgs } from "@/types/params" - -const bedAlternatives = [ - { - value: "queen", - name: "Queen bed", - payment: "160 cm", - pricePerNight: 0, - membersPricePerNight: 0, - currency: "SEK", - }, - { - value: "king", - name: "King bed", - payment: "160 cm", - pricePerNight: 0, - membersPricePerNight: 0, - currency: "SEK", - }, - { - value: "twin", - name: "Twin bed", - payment: "90 cm + 90 cm", - pricePerNight: 82, - membersPricePerNight: 67, - currency: "SEK", - }, -] - -const breakfastAlternatives = [ - { - value: "no", - name: "No breakfast", - payment: "Always cheeper to get it online", - pricePerNight: 0, - currency: "SEK", - }, - { - value: "buffe", - name: "Breakfast buffé", - payment: "Always cheeper to get it online", - pricePerNight: 150, - currency: "SEK", - }, -] - -const getFlexibilityMessage = (value: string) => { - switch (value) { - case "non-refundable": - return "Non refundable" - case "free-rebooking": - return "Free rebooking" - case "free-cancellation": - return "Free cancellation" - } - return undefined -} - -export default async function SectionsPage({ - params, - searchParams, -}: PageArgs) { - setLang(params.lang) - const profile = await getProfileSafely() - - const hotel = await serverClient().hotel.hotelData.get({ - hotelId: "811", - language: params.lang, - }) - - if (!hotel) { - // TODO: handle case with hotel missing - return notFound() - } - - const rooms = await serverClient().hotel.rates.get({ - // TODO: pass the correct hotel ID and all other parameters that should be included in the search - hotelId: hotel.data.id, - }) - const intl = await getIntl() - - const selectedBed = searchParams.bed - ? bedAlternatives.find((a) => a.value === searchParams.bed)?.name - : undefined - - const selectedBreakfast = searchParams.breakfast - ? breakfastAlternatives.find((a) => a.value === searchParams.breakfast) - ?.name - : undefined - - const selectedRoom = searchParams.roomClass - ? rooms.find((room) => room.id.toString() === searchParams.roomClass)?.name - : undefined - const selectedFlexibility = searchParams.flexibility - ? getFlexibilityMessage(searchParams.flexibility) - : undefined - - const currentSearchParams = new URLSearchParams(searchParams).toString() - - let user = null - if (profile && !("error" in profile)) { - user = profile - } - - return ( -
- - -
-
- - - {params.section === "select-bed" ? : null} - - - {params.section === "breakfast" ? : null} - - - {params.section === "details" ?
: null} - - - {params.section === "payment" && ( - - )} - -
-
- -
-
-
- ) -} diff --git a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css index 3266c418d..8962fd5ee 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css +++ b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.module.css @@ -16,10 +16,15 @@ gap: var(--Spacing-x7); } -.main { +.section { flex-grow: 1; } .summary { max-width: 340px; } + +.form { + display: grid; + gap: var(--Spacing-x2); +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx index 3d24e1b1e..25fcac397 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx @@ -1,58 +1,18 @@ "use client" -import { notFound } from "next/navigation" +import { useState } from "react" import { useIntl } from "react-intl" +import { notFound } from "@/server/errors/next" + +import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" import Summary from "@/components/HotelReservation/SelectRate/Summary" +import Button from "@/components/TempDesignSystem/Button" import styles from "./page.module.css" import { LangParams, PageArgs } from "@/types/params" -// const bedAlternatives = [ -// { -// value: "queen", -// name: "Queen bed", -// payment: "160 cm", -// pricePerNight: 0, -// membersPricePerNight: 0, -// currency: "SEK", -// }, -// { -// value: "king", -// name: "King bed", -// payment: "160 cm", -// pricePerNight: 0, -// membersPricePerNight: 0, -// currency: "SEK", -// }, -// { -// value: "twin", -// name: "Twin bed", -// payment: "90 cm + 90 cm", -// pricePerNight: 82, -// membersPricePerNight: 67, -// currency: "SEK", -// }, -// ] - -// const breakfastAlternatives = [ -// { -// value: "no", -// name: "No breakfast", -// payment: "Always cheeper to get it online", -// pricePerNight: 0, -// currency: "SEK", -// }, -// { -// value: "buffe", -// name: "Breakfast buffé", -// payment: "Always cheeper to get it online", -// pricePerNight: 150, -// currency: "SEK", -// }, -// ] - enum StepEnum { "select-bed" = "select-bed", breakfast = "breakfast", @@ -68,22 +28,100 @@ function isValidStep(step: string): step is Step { export default function StepPage({ params, -}: PageArgs) { - const { step } = params +}: PageArgs) { + const [activeStep, setActiveStep] = useState(params.step) const intl = useIntl() - if (isValidStep(step)) { + if (!isValidStep(activeStep)) { return notFound() } - switch (step) { + switch (activeStep) { case StepEnum.breakfast: - return
Select BREAKFAST
+ //return
Select BREAKFAST
case StepEnum.details: - return
Select DETAILS
+ //return
Select DETAILS
case StepEnum.payment: - return
Select PAYMENT
+ //return
Select PAYMENT
case StepEnum["select-bed"]: - return
Select BED
+ // return
Select BED
} + + function onNav(step: Step) { + setActiveStep(step) + if (typeof window !== "undefined") { + window.history.pushState({}, "", step) + } + } + + return ( +
+
+
+ +
+ Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube + cskdfaen + +
+
+ +
+ Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube + cskdfaen + +
+
+ +
+ Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube + cskdfaen + +
+
+ +
+ Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube + cskdfaen Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw + aoiwube cskdfaen Hejhej lorem ipsim heheheheh andi fpok veoi + cdfionaw aoiwube cskdfaen Hejhej lorem ipsim heheheheh andi fpok + veoi cdfionaw aoiwube cskdfaen v Hejhej lorem ipsim heheheheh andi + fpok veoi cdfionaw aoiwube cskdfaen Hejhej lorem ipsim heheheheh + andi fpok veoi cdfionaw aoiwube cskdfaen + +
+
+
+ +
+
+ ) } diff --git a/app/[lang]/(live)/(public)/hotelreservation/layout.module.css b/app/[lang]/(live)/(public)/hotelreservation/layout.module.css index 4478bdb18..0969a7151 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/layout.module.css +++ b/app/[lang]/(live)/(public)/hotelreservation/layout.module.css @@ -1,3 +1,4 @@ .layout { min-height: 100dvh; + background-color: var(--Base-Background-Primary-Normal); } diff --git a/components/HotelReservation/SelectRate/SectionAccordion/index.tsx b/components/HotelReservation/SelectRate/SectionAccordion/index.tsx index ee6a65de3..1e0cf315d 100644 --- a/components/HotelReservation/SelectRate/SectionAccordion/index.tsx +++ b/components/HotelReservation/SelectRate/SectionAccordion/index.tsx @@ -1,57 +1,91 @@ -import { getHotelDataSchema } from "@/server/routers/hotels/output" -import tempHotelData from "@/server/routers/hotels/tempHotelData.json" +"use client" +import { useEffect, useRef } from "react" +import { useIntl } from "react-intl" -import { CheckCircleIcon, ChevronDownIcon } from "@/components/Icons" -import Button from "@/components/TempDesignSystem/Button" +import { CheckIcon, ChevronDownIcon } from "@/components/Icons" import Link from "@/components/TempDesignSystem/Link" -import Body from "@/components/TempDesignSystem/Text/Body" -import Caption from "@/components/TempDesignSystem/Text/Caption" -import { getIntl } from "@/i18n" - -import HotelSelectionHeader from "../../HotelSelectionHeader" +import Footnote from "@/components/TempDesignSystem/Text/Footnote" +import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import styles from "./sectionAccordion.module.css" import { SectionAccordionProps } from "@/types/components/hotelReservation/selectRate/sectionAccordion" -export default async function SectionAccordion({ +export default function SectionAccordion({ header, - selection, + isOpen, + isCompleted, + label, path, children, }: React.PropsWithChildren) { - const hotel = getHotelDataSchema.parse(tempHotelData) + const intl = useIntl() - const intl = await getIntl() + const contentRef = useRef(null) + const circleRef = useRef(null) + + useEffect(() => { + const content = contentRef.current + const circle = circleRef.current + if (content) { + if (isOpen) { + content.style.maxHeight = `${content.scrollHeight}px` + } else { + content.style.maxHeight = "0" + } + } + + if (circle) { + if (isOpen) { + circle.style.backgroundColor = `var(--UI-Text-Placeholder);` + } else { + circle.style.backgroundColor = `var(--Base-Surface-Subtle-Hover);` + } + } + }, [isOpen]) return ( -
- - -
-
- -
-
- -

{header}

- - {(Array.isArray(selection) ? selection : [selection]).map((s) => ( - - {s} - - ))} -
- {selection && ( - - )} -
- +
+
+
+ {isCompleted ? ( + + ) : null}
- {children} -
+
+
+
+ +

{header}

+
+ + {label} + +
+ {isCompleted && !isOpen && ( + + {intl.formatMessage({ id: "Modify" })}{" "} + + + )} +
+
+ {children} +
+
+ ) } diff --git a/components/HotelReservation/SelectRate/SectionAccordion/sectionAccordion.module.css b/components/HotelReservation/SelectRate/SectionAccordion/sectionAccordion.module.css index ce9dec013..8c1a05ba4 100644 --- a/components/HotelReservation/SelectRate/SectionAccordion/sectionAccordion.module.css +++ b/components/HotelReservation/SelectRate/SectionAccordion/sectionAccordion.module.css @@ -1,21 +1,73 @@ .wrapper { - border-bottom: 1px solid var(--Base-Border-Normal); + position: relative; + display: flex; + flex-direction: row; + gap: var(--Spacing-x3); + + padding-top: var(--Spacing-x3); } -.top { +.wrapper:not(:last-child)::after { + position: absolute; + left: 12px; + bottom: 0; + top: var(--Spacing-x5); + height: 100%; + content: ""; + border-left: 1px solid var(--Primary-Light-On-Surface-Divider-subtle); +} + +.main { + display: flex; + flex-direction: column; + gap: var(--Spacing-x3); + width: 100%; + border-bottom: 1px solid var(--Primary-Light-On-Surface-Divider-subtle); padding-bottom: var(--Spacing-x3); - padding-top: var(--Spacing-x3); +} + +.headerContainer { display: flex; justify-content: space-between; align-items: center; - gap: var(--Spacing-x2); -} - -.header { - flex-grow: 1; } .selection { font-weight: 450; font-size: var(--typography-Title-4-fontSize); } + +.iconWrapper { + position: relative; + top: var(--Spacing-x1); + z-index: 10; +} + +.circle { + width: 24px; + height: 24px; + border-radius: 100px; + transition: background-color 0.4s; + border: 2px solid var(--Base-Border-Inverted); + display: flex; + justify-content: center; + align-items: center; +} + +.circle[data-checked="true"] { + background-color: var(--UI-Input-Controls-Fill-Selected); +} + +.wrapper[data-open="true"] .circle[data-checked="false"] { + background-color: var(--UI-Text-Placeholder); +} + +.wrapper[data-open="false"] .circle[data-checked="false"] { + background-color: var(--Base-Surface-Subtle-Hover); +} + +.content { + overflow: hidden; + transition: max-height 0.4s ease-out; + max-height: 0; +} diff --git a/components/Icons/icon.module.css b/components/Icons/icon.module.css index 282c214cd..3fa235d32 100644 --- a/components/Icons/icon.module.css +++ b/components/Icons/icon.module.css @@ -61,3 +61,8 @@ .uiTextMediumContrast * { fill: var(--UI-Text-Medium-contrast); } + +.blue, +.blue * { + fill: var(--UI-Input-Controls-Fill-Selected); +} diff --git a/components/Icons/variants.ts b/components/Icons/variants.ts index cf2703bd4..12b9cb574 100644 --- a/components/Icons/variants.ts +++ b/components/Icons/variants.ts @@ -17,6 +17,7 @@ const config = { white: styles.white, uiTextHighContrast: styles.uiTextHighContrast, uiTextMediumContrast: styles.uiTextMediumContrast, + blue: styles.blue, }, }, defaultVariants: { diff --git a/components/TempDesignSystem/Text/Subtitle/subtitle.module.css b/components/TempDesignSystem/Text/Subtitle/subtitle.module.css index 07f795811..1fab1f59c 100644 --- a/components/TempDesignSystem/Text/Subtitle/subtitle.module.css +++ b/components/TempDesignSystem/Text/Subtitle/subtitle.module.css @@ -58,3 +58,7 @@ .pale { color: var(--Scandic-Brand-Pale-Peach); } + +.highContrast { + color: var(--UI-Text-High-contrast); +} diff --git a/components/TempDesignSystem/Text/Subtitle/variants.ts b/components/TempDesignSystem/Text/Subtitle/variants.ts index afb33bde1..b73c42230 100644 --- a/components/TempDesignSystem/Text/Subtitle/variants.ts +++ b/components/TempDesignSystem/Text/Subtitle/variants.ts @@ -8,6 +8,7 @@ const config = { black: styles.black, burgundy: styles.burgundy, pale: styles.pale, + highContrast: styles.highContrast, }, textAlign: { center: styles.center, diff --git a/middlewares/bookingFlow.ts b/middlewares/bookingFlow.ts index b65802619..74c3818f1 100644 --- a/middlewares/bookingFlow.ts +++ b/middlewares/bookingFlow.ts @@ -14,19 +14,8 @@ import type { MiddlewareMatcher } from "@/types/middleware" export const middleware: NextMiddleware = async (request) => { const { nextUrl } = request - const lang = findLang(nextUrl.pathname)! - - const pathWithoutTrailingSlash = removeTrailingSlash(nextUrl.pathname) - const pathNameWithoutLang = pathWithoutTrailingSlash.replace(`/${lang}`, "") - const { contentType, uid } = await resolveEntry(pathNameWithoutLang, lang) const headers = getDefaultRequestHeaders(request) - if (uid) { - headers.set("x-uid", uid) - } - if (contentType) { - headers.set("x-contenttype", contentType) - } return NextResponse.next({ request: { headers, diff --git a/types/components/hotelReservation/selectRate/sectionAccordion.ts b/types/components/hotelReservation/selectRate/sectionAccordion.ts index 19d13f836..802e471f9 100644 --- a/types/components/hotelReservation/selectRate/sectionAccordion.ts +++ b/types/components/hotelReservation/selectRate/sectionAccordion.ts @@ -1,5 +1,7 @@ export interface SectionAccordionProps { header: string - selection?: string | string[] + isOpen: boolean + isCompleted: boolean + label: string path: string } From f72f3a40eee106f673e3d702f47ea05031315dfd Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Tue, 8 Oct 2024 11:39:33 +0200 Subject: [PATCH 64/64] fix: add forms in accordions --- .../(public)/hotelreservation/[step]/page.tsx | 76 +++++++++---------- .../HotelSelectionHeader/index.tsx | 8 +- .../SelectRate/SectionAccordion/index.tsx | 6 +- .../Text/Subtitle/subtitle.module.css | 2 +- .../Text/Subtitle/variants.ts | 2 +- i18n/dictionaries/da.json | 4 + i18n/dictionaries/de.json | 4 + i18n/dictionaries/en.json | 4 + i18n/dictionaries/fi.json | 4 + i18n/dictionaries/no.json | 4 + i18n/dictionaries/sv.json | 4 + 11 files changed, 71 insertions(+), 47 deletions(-) diff --git a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx index 25fcac397..050aa0280 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/[step]/page.tsx @@ -1,41 +1,61 @@ "use client" +import { notFound } from "next/navigation" import { useState } from "react" import { useIntl } from "react-intl" -import { notFound } from "@/server/errors/next" +import { trpc } from "@/lib/trpc/client" +import BedType from "@/components/HotelReservation/EnterDetails/BedType" +import Breakfast from "@/components/HotelReservation/EnterDetails/Breakfast" +import Details from "@/components/HotelReservation/EnterDetails/Details" +import HotelSelectionHeader from "@/components/HotelReservation/HotelSelectionHeader" +import Payment from "@/components/HotelReservation/SelectRate/Payment" import SectionAccordion from "@/components/HotelReservation/SelectRate/SectionAccordion" import Summary from "@/components/HotelReservation/SelectRate/Summary" -import Button from "@/components/TempDesignSystem/Button" +import LoadingSpinner from "@/components/LoadingSpinner" import styles from "./page.module.css" import { LangParams, PageArgs } from "@/types/params" enum StepEnum { - "select-bed" = "select-bed", + selectBed = "select-bed", breakfast = "breakfast", details = "details", payment = "payment", } -type Step = keyof typeof StepEnum - -function isValidStep(step: string): step is Step { - return Object.keys(StepEnum).includes(step) +function isValidStep(step: string): step is StepEnum { + return Object.values(StepEnum).includes(step as StepEnum) } export default function StepPage({ params, -}: PageArgs) { - const [activeStep, setActiveStep] = useState(params.step) +}: PageArgs) { + const { step } = params + const [activeStep, setActiveStep] = useState(step) const intl = useIntl() if (!isValidStep(activeStep)) { return notFound() } + const { data: hotel, isLoading: loadingHotel } = + trpc.hotel.hotelData.get.useQuery({ + hotelId: "811", + language: params.lang, + }) + + if (loadingHotel) { + return + } + + if (!hotel) { + // TODO: handle case with hotel missing + return notFound() + } + switch (activeStep) { case StepEnum.breakfast: //return
Select BREAKFAST
@@ -43,11 +63,11 @@ export default function StepPage({ //return
Select DETAILS
case StepEnum.payment: //return
Select PAYMENT
- case StepEnum["select-bed"]: + case StepEnum.selectBed: // return
Select BED
} - function onNav(step: Step) { + function onNav(step: StepEnum) { setActiveStep(step) if (typeof window !== "undefined") { window.history.pushState({}, "", step) @@ -56,22 +76,17 @@ export default function StepPage({ return (
+
-
- Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube - cskdfaen - -
+
-
- Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube - cskdfaen - -
+
-
- Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube - cskdfaen - -
+
-
- Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw aoiwube - cskdfaen Hejhej lorem ipsim heheheheh andi fpok veoi cdfionaw - aoiwube cskdfaen Hejhej lorem ipsim heheheheh andi fpok veoi - cdfionaw aoiwube cskdfaen Hejhej lorem ipsim heheheheh andi fpok - veoi cdfionaw aoiwube cskdfaen v Hejhej lorem ipsim heheheheh andi - fpok veoi cdfionaw aoiwube cskdfaen Hejhej lorem ipsim heheheheh - andi fpok veoi cdfionaw aoiwube cskdfaen - -
+
-
+
{label} @@ -85,7 +85,7 @@ export default function SectionAccordion({
{children}
-
+
) } diff --git a/components/TempDesignSystem/Text/Subtitle/subtitle.module.css b/components/TempDesignSystem/Text/Subtitle/subtitle.module.css index 1fab1f59c..8fdac30c4 100644 --- a/components/TempDesignSystem/Text/Subtitle/subtitle.module.css +++ b/components/TempDesignSystem/Text/Subtitle/subtitle.module.css @@ -59,6 +59,6 @@ color: var(--Scandic-Brand-Pale-Peach); } -.highContrast { +.uiTextHighContrast { color: var(--UI-Text-High-contrast); } diff --git a/components/TempDesignSystem/Text/Subtitle/variants.ts b/components/TempDesignSystem/Text/Subtitle/variants.ts index b73c42230..7a8faa54c 100644 --- a/components/TempDesignSystem/Text/Subtitle/variants.ts +++ b/components/TempDesignSystem/Text/Subtitle/variants.ts @@ -8,7 +8,7 @@ const config = { black: styles.black, burgundy: styles.burgundy, pale: styles.pale, - highContrast: styles.highContrast, + uiTextHighContrast: styles.uiTextHighContrast, }, textAlign: { center: styles.center, diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 26897f291..a260dd068 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -84,6 +84,7 @@ "Email": "E-mail", "Email address": "E-mailadresse", "Enter destination or hotel": "Indtast destination eller hotel", + "Enter your details": "Indtast dine oplysninger", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Udforsk alle niveauer og fordele", @@ -212,6 +213,7 @@ "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Gentag den nye adgangskode", + "Request bedtype": "Anmod om sengetype", "Room & Terms": "Værelse & Vilkår", "Room facilities": "Værelsesfaciliteter", "Rooms": "Værelser", @@ -226,10 +228,12 @@ "See room details": "Se værelsesdetaljer", "See rooms": "Se værelser", "Select a country": "Vælg et land", + "Select breakfast options": "Vælg morgenmadsmuligheder", "Select country of residence": "Vælg bopælsland", "Select date of birth": "Vælg fødselsdato", "Select dates": "Vælg datoer", "Select language": "Vælg sprog", + "Select payment method": "Vælg betalingsmetode", "Select your language": "Vælg dit sprog", "Shopping": "Shopping", "Shopping & Dining": "Shopping & Spisning", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index 13438d8c3..ad755efdc 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -84,6 +84,7 @@ "Email address": "E-Mail-Adresse", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Enter destination or hotel": "Reiseziel oder Hotel eingeben", + "Enter your details": "Geben Sie Ihre Daten ein", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Entdecken Sie alle Levels und Vorteile", "Explore nearby": "Erkunden Sie die Umgebung", @@ -210,6 +211,7 @@ "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Neues Passwort erneut eingeben", + "Request bedtype": "Bettentyp anfragen", "Room & Terms": "Zimmer & Bedingungen", "Room facilities": "Zimmerausstattung", "Rooms": "Räume", @@ -224,10 +226,12 @@ "See room details": "Zimmerdetails ansehen", "See rooms": "Zimmer ansehen", "Select a country": "Wähle ein Land", + "Select breakfast options": "Wählen Sie Frühstücksoptionen", "Select country of residence": "Wählen Sie das Land Ihres Wohnsitzes aus", "Select date of birth": "Geburtsdatum auswählen", "Select dates": "Datum auswählen", "Select language": "Sprache auswählen", + "Select payment method": "Zahlungsart auswählen", "Select your language": "Wählen Sie Ihre Sprache", "Shopping": "Einkaufen", "Shopping & Dining": "Einkaufen & Essen", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index fa0e27a61..43903c4c2 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -84,6 +84,7 @@ "Email address": "Email address", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Enter destination or hotel": "Enter destination or hotel", + "Enter your details": "Enter your details", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Explore all levels and benefits", "Explore nearby": "Explore nearby", @@ -314,6 +315,9 @@ "number": "number", "or": "or", "points": "Points", + "Request bedtype": "Request bedtype", + "Select breakfast options": "Select breakfast options", + "Select payment method": "Select payment method", "special character": "special character", "spendable points expiring by": "{points} spendable points expiring by {date}", "to": "to", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index a00928ad3..558c99dcb 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -83,6 +83,7 @@ "Email": "Sähköposti", "Email address": "Sähköpostiosoite", "Enter destination or hotel": "Anna kohde tai hotelli", + "Enter your details": "Anna tietosi", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Tutustu kaikkiin tasoihin ja etuihin", @@ -216,6 +217,7 @@ "Rooms": "Huoneet", "Rooms & Guests": "Huoneet & Vieraat", "Rooms & Guestss": "Huoneet & Vieraat", + "Request bedtype": "Pyydä sänkytyyppiä", "Sauna and gym": "Sauna and gym", "Save": "Tallenna", "Scandic Friends Mastercard": "Scandic Friends Mastercard", @@ -226,10 +228,12 @@ "See room details": "Katso huoneen tiedot", "See rooms": "Katso huoneet", "Select a country": "Valitse maa", + "Select breakfast options": "Valitse aamiaisvaihtoehdot", "Select country of residence": "Valitse asuinmaa", "Select date of birth": "Valitse syntymäaika", "Select dates": "Valitse päivämäärät", "Select language": "Valitse kieli", + "Select payment method": "Valitse maksutapa", "Select your language": "Valitse kieli", "Shopping": "Ostokset", "Shopping & Dining": "Ostokset & Ravintolat", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index 9a28e6f69..5db6252f3 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -83,6 +83,7 @@ "Email": "E-post", "Email address": "E-postadresse", "Enter destination or hotel": "Skriv inn destinasjon eller hotell", + "Enter your details": "Skriv inn detaljene dine", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Utforsk alle nivåer og fordeler", @@ -211,6 +212,7 @@ "Restaurant & Bar": "Restaurant & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Skriv inn nytt passord på nytt", + "Request bedtype": "Be om sengetype", "Room & Terms": "Rom & Vilkår", "Room facilities": "Romfasiliteter", "Rooms": "Rom", @@ -225,10 +227,12 @@ "See room details": "Se detaljer om rommet", "See rooms": "Se rom", "Select a country": "Velg et land", + "Select breakfast options": "Velg frokostalternativer", "Select country of residence": "Velg bostedsland", "Select date of birth": "Velg fødselsdato", "Select dates": "Velg datoer", "Select language": "Velg språk", + "Select payment method": "Velg betalingsmetode", "Select your language": "Velg språk", "Shopping": "Shopping", "Shopping & Dining": "Shopping & Spisesteder", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index dc6a082c8..e7b55e6f6 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -84,6 +84,7 @@ "Email": "E-post", "Email address": "E-postadress", "Enter destination or hotel": "Ange destination eller hotell", + "Enter your details": "Ange dina uppgifter", "Enjoy relaxed restaurant experiences": "Enjoy relaxed restaurant experiences", "Events that make an impression": "Events that make an impression", "Explore all levels and benefits": "Utforska alla nivåer och fördelar", @@ -213,6 +214,7 @@ "Restaurant & Bar": "Restaurang & Bar", "Restaurants & Bars": "Restaurants & Bars", "Retype new password": "Upprepa nytt lösenord", + "Request bedtype": "Request bedtype", "Room & Terms": "Rum & Villkor", "Room facilities": "Rumfaciliteter", "Rooms": "Rum", @@ -227,10 +229,12 @@ "See room details": "Se rumsdetaljer", "See rooms": "Se rum", "Select a country": "Välj ett land", + "Select breakfast options": "Välj frukostalternativ", "Select country of residence": "Välj bosättningsland", "Select date of birth": "Välj födelsedatum", "Select dates": "Välj datum", "Select language": "Välj språk", + "Select payment method": "Välj betalningsmetod", "Select your language": "Välj ditt språk", "Shopping": "Shopping", "Shopping & Dining": "Shopping & Mat",