@roomstay/frontend 2.6.102 → 2.6.103-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/177.bundle.js +1 -1
- package/dist/211.bundle.js +1 -0
- package/dist/288.bundle.js +1 -1
- package/dist/326.bundle.js +2 -0
- package/dist/326.bundle.js.LICENSE.txt +16 -0
- package/dist/328.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AnalyticsEventsAPI.d.ts +13 -0
- package/dist/src/api/AnalyticsEventsAPI.js +55 -0
- package/dist/src/api/AnalyticsEventsAPI.js.map +1 -0
- package/dist/src/components/generic/PromotionalCodeInput.js +1 -1
- package/dist/src/components/generic/PromotionalCodeInput.js.map +1 -1
- package/dist/src/components/steps/confirmation/PayPalPaymentOption/PayPalPaymentOption.d.ts +2 -0
- package/dist/src/components/steps/confirmation/PayPalPaymentOption/PayPalPaymentOption.js +86 -0
- package/dist/src/components/steps/confirmation/PayPalPaymentOption/PayPalPaymentOption.js.map +1 -0
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +3 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.d.ts +2 -1
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js +1 -0
- package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/date/PeoplePicker.js +4 -2
- package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
- package/dist/src/components/steps/date/PeoplePickerRow.js +2 -2
- package/dist/src/components/steps/date/PeoplePickerRow.js.map +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js +1 -0
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js.map +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummary.js +5 -3
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummary.js.map +1 -1
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +2 -2
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker.js +3 -3
- package/dist/src/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgress.js +3 -3
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgress.js.map +1 -1
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +2 -0
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +4 -0
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +47 -7
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +10 -0
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +21 -3
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepPriceQuoteErrorModal.d.ts +9 -0
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepPriceQuoteErrorModal.js +67 -0
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepPriceQuoteErrorModal.js.map +1 -0
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +43 -7
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/handlers/payment/PayPalPaymentHandler.d.ts +2 -0
- package/dist/src/handlers/payment/PayPalPaymentHandler.js +41 -0
- package/dist/src/handlers/payment/PayPalPaymentHandler.js.map +1 -0
- package/dist/src/hooks/AutoFocusOnSelect.d.ts +1 -2
- package/dist/src/hooks/AutoFocusOnSelect.js.map +1 -1
- package/dist/src/hooks/useSearchScopeHook.d.ts +5 -2
- package/dist/src/hooks/useSearchScopeHook.js +57 -14
- package/dist/src/hooks/useSearchScopeHook.js.map +1 -1
- package/dist/src/models/Addon/Addon.js +4 -0
- package/dist/src/models/Addon/Addon.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +1 -1
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +5 -0
- package/dist/src/models/BasketRow.js +13 -1
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +12 -0
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/pages/findReservation/FindReservationResults.js +2 -2
- package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
- package/dist/src/pages/hotel/HotelInfo.js +7 -6
- package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
- package/dist/src/pages/steps/StepAddon/StepAddonValidator.js +1 -1
- package/dist/src/pages/steps/StepAddon/StepAddonValidator.js.map +1 -1
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationValidator.js +1 -1
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationValidator.js.map +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomValidator.js +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomValidator.js.map +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +2 -2
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
- package/dist/src/providers/FeatureProvider.js +2 -0
- package/dist/src/providers/FeatureProvider.js.map +1 -1
- package/dist/src/providers/RatePillProvider.d.ts +1 -0
- package/dist/src/providers/RatePillProvider.js +11 -4
- package/dist/src/providers/RatePillProvider.js.map +1 -1
- package/dist/src/providers/feature/AnalyticsEventsFeature.d.ts +23 -0
- package/dist/src/providers/feature/AnalyticsEventsFeature.js +83 -0
- package/dist/src/providers/feature/AnalyticsEventsFeature.js.map +1 -0
- package/dist/src/translations/Translation.d.ts +5 -0
- package/dist/src/translations/Translation.js +5 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +9 -4
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/Analytics/Analytics.d.ts +7 -0
- package/dist/src/util/Analytics/Analytics.js +8 -1
- package/dist/src/util/Analytics/Analytics.js.map +1 -1
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.d.ts +61 -0
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.js +329 -0
- package/dist/src/util/AnalyticsEvents/AnalyticsEvents.js.map +1 -0
- package/dist/src/util/AnalyticsEvents/helpers.d.ts +30 -0
- package/dist/src/util/AnalyticsEvents/helpers.js +96 -0
- package/dist/src/util/AnalyticsEvents/helpers.js.map +1 -0
- package/dist/src/util/DataLayer.js +4 -4
- package/dist/src/util/DataLayer.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +3 -2
- package/dist/180.bundle.js +0 -1
- package/dist/570.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfirmationCountrySelector.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationCountrySelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import './StepConfirmationCountrySelector.global.scss';\n\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport { useAutoFocusOnSelect } from 'hooks/AutoFocusOnSelect';\nimport React, { ChangeEvent, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { convertCountryCodeToFlag, CountryType, HotelSpecificCountryType, ListOfCountriesAndCodes } from '@/models/CountryCodesAndNumbers';\n\nimport { Select } from '../../generic/Select/Select';\n\ninterface StepConfirmationCountrySelectorProps {\n validationStatus?: 'success' | 'error';\n name?: string;\n value?: string; // example: Australia\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n onChangeId?: (id: number) => void;\n onChangeCode?: (id: string) => void;\n}\n\nconst StepConfirmationCountrySelector = forwardRef<HTMLInputElement | null, StepConfirmationCountrySelectorProps>(function InnerStepConfirmationCountrySelector(props, ref) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(ref, () => inputRef.current);\n const { onDropdownClosed, onItemSelected, onTriggerClicked, isDropdownOpen, isFocused } = useAutoFocusOnSelect({\n ref: inputRef.current,\n focusOnSelected: false,\n });\n\n const { hotel } = useCurrentHotel();\n\n const { validationStatus, name, onChange, value = '' } = props;\n const [inputValue, setInputValue] = useState<string>(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const mergeCountries = (): HotelSpecificCountryType[] => {\n if (!hotel?.availableCountries?.length) {\n return ListOfCountriesAndCodes as HotelSpecificCountryType[];\n }\n\n return hotel.availableCountries\n .filter(({ name }) => {\n return ListOfCountriesAndCodes.some(\n ({ label, otherLabels }) =>\n label.toLowerCase() === name.toLowerCase() || (otherLabels && otherLabels.map((label) => label.toLowerCase()).includes(name.toLowerCase()))\n );\n })\n .map(({ name, value }) => {\n const existedCountry = ListOfCountriesAndCodes.find(\n ({ label, otherLabels }) =>\n label.toLowerCase() === name.toLowerCase() || (otherLabels && otherLabels.map((label) => label.toLowerCase()).includes(name.toLowerCase()))\n ) as CountryType;\n return {\n ...existedCountry,\n label: name,\n id: parseInt(value),\n };\n });\n };\n\n const organizedCountries: CountryType[] = useMemo(() => {\n return mergeCountries().sort((a, b) => {\n return `${(a.suggested ? '000' : '') + a.label}`.localeCompare(`${(b.suggested ? '000' : '') + b.label}`);\n });\n }, [ListOfCountriesAndCodes, hotel?.availableCountries]);\n\n const filterCountries = useCallback(\n (inputValue: string): CountryType[] => {\n return organizedCountries.filter(({ label }) => label.toUpperCase().includes(inputValue.toUpperCase()));\n },\n [organizedCountries]\n );\n const [options, setOptions] = useState<CountryType[]>(filterCountries(value));\n\n const { t } = useTranslation();\n\n const container = useRef(null);\n\n const emptyValue = () => {\n onChange?.({ target: { name, value: '' } } as any);\n setInputValue('');\n setOptions(organizedCountries);\n };\n\n const onInputChanged = (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value?.trim() || '';\n if (value) {\n const options = filterCountries(value);\n setOptions(options);\n const exactCountry = options.find(({ label }) => label === value);\n if (exactCountry) {\n onCountryClick(exactCountry);\n }\n } else {\n setOptions(organizedCountries);\n }\n setInputValue(e.target.value);\n };\n\n const fieldClasses = classNames('rs-enhanced-country-field', {\n [`--${validationStatus}`]: !!validationStatus,\n '--focused': isFocused,\n '--disabled': props.disabled,\n });\n\n const onCountryClick = (country: CountryType): void => {\n setInputValue(country.label);\n onItemSelected();\n onChange?.({ target: { name, value: country.label } } as any);\n if ((country as any)['id']) {\n props.onChangeId?.((country as any).id);\n }\n\n if ((country as any)['code']) {\n props.onChangeCode?.((country as any).code);\n }\n };\n\n const getOption = (key: CountryType['label']): CountryType | undefined => {\n return options.find(({ label }) => label === key);\n };\n\n const onClose = (e: Event) => {\n onDropdownClosed(e);\n if (organizedCountries.every(({ label }) => label !== inputRef.current?.value)) {\n emptyValue();\n }\n };\n\n return (\n <div className={fieldClasses}>\n <div className=\"rs-enhanced-country-field--anchor\" ref={container}></div>\n\n <div className=\"rs-enhanced-country-field--search\">\n <input disabled={props.disabled} ref={inputRef} placeholder={t(Translation.Step.Confirmation.Inputs.Country) + ' *'} onChange={onInputChanged} value={inputValue} />\n <div\n onClick={() => {\n emptyValue();\n inputRef.current?.focus();\n }}\n className={classNames('rs-enhanced-country-field--close', {\n '--hide': !inputValue,\n })}\n >\n <Icon icon={IconType.Close} />\n </div>\n <div className=\"rs-enhanced-country-field--country\" onClick={onTriggerClicked}>\n <Icon icon={IconType.Dropdown} />\n </div>\n </div>\n\n <Select<CountryType, 'label'>\n offset={[0, 21]}\n open={isDropdownOpen}\n onClose={onClose}\n target={container.current}\n options={options}\n value={value}\n onChange={(value) => {\n const option = getOption(value);\n if (option) {\n onCountryClick(option);\n }\n }}\n keyName=\"label\"\n renderOption={(country) => (\n <div className=\"rs-enhanced-country-field--suggest-list-country\">\n <div className=\"rs-enhanced-country-field--suggest-list-country-icon\">{convertCountryCodeToFlag(country?.code as string)}</div>\n <div className=\"rs-enhanced-country-field--suggest-list-country-name\">\n {country?.label} ({country?.code})\n </div>\n </div>\n )}\n />\n </div>\n );\n});\n\nexport default StepConfirmationCountrySelector;\n"]}
|
|
1
|
+
{"version":3,"file":"StepConfirmationCountrySelector.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationCountrySelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import './StepConfirmationCountrySelector.global.scss';\n\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport { useAutoFocusOnSelect, UseAutoFocusOnSelectProps } from 'hooks/AutoFocusOnSelect';\nimport React, { ChangeEvent, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { convertCountryCodeToFlag, CountryType, HotelSpecificCountryType, ListOfCountriesAndCodes } from '@/models/CountryCodesAndNumbers';\n\nimport { Select } from '../../generic/Select/Select';\n\ninterface StepConfirmationCountrySelectorProps extends Pick<UseAutoFocusOnSelectProps, 'disableOpenOnFocus'> {\n validationStatus?: 'success' | 'error';\n name?: string;\n value?: string; // example: Australia\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n onChangeId?: (id: number) => void;\n onChangeCode?: (id: string) => void;\n}\n\nconst StepConfirmationCountrySelector = forwardRef<HTMLInputElement | null, StepConfirmationCountrySelectorProps>(function InnerStepConfirmationCountrySelector(props, ref) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(ref, () => inputRef.current);\n const { onDropdownClosed, onItemSelected, onTriggerClicked, isDropdownOpen, isFocused } = useAutoFocusOnSelect({\n ref: inputRef.current,\n focusOnSelected: false,\n disableOpenOnFocus: props.disableOpenOnFocus,\n });\n\n const { hotel } = useCurrentHotel();\n\n const { validationStatus, name, onChange, value = '' } = props;\n const [inputValue, setInputValue] = useState<string>(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const mergeCountries = (): HotelSpecificCountryType[] => {\n if (!hotel?.availableCountries?.length) {\n return ListOfCountriesAndCodes as HotelSpecificCountryType[];\n }\n\n return hotel.availableCountries\n .filter(({ name }) => {\n return ListOfCountriesAndCodes.some(\n ({ label, otherLabels }) =>\n label.toLowerCase() === name.toLowerCase() || (otherLabels && otherLabels.map((label) => label.toLowerCase()).includes(name.toLowerCase()))\n );\n })\n .map(({ name, value }) => {\n const existedCountry = ListOfCountriesAndCodes.find(\n ({ label, otherLabels }) =>\n label.toLowerCase() === name.toLowerCase() || (otherLabels && otherLabels.map((label) => label.toLowerCase()).includes(name.toLowerCase()))\n ) as CountryType;\n return {\n ...existedCountry,\n label: name,\n id: parseInt(value),\n };\n });\n };\n\n const organizedCountries: CountryType[] = useMemo(() => {\n return mergeCountries().sort((a, b) => {\n return `${(a.suggested ? '000' : '') + a.label}`.localeCompare(`${(b.suggested ? '000' : '') + b.label}`);\n });\n }, [ListOfCountriesAndCodes, hotel?.availableCountries]);\n\n const filterCountries = useCallback(\n (inputValue: string): CountryType[] => {\n return organizedCountries.filter(({ label }) => label.toUpperCase().includes(inputValue.toUpperCase()));\n },\n [organizedCountries]\n );\n const [options, setOptions] = useState<CountryType[]>(filterCountries(value));\n\n const { t } = useTranslation();\n\n const container = useRef(null);\n\n const emptyValue = () => {\n onChange?.({ target: { name, value: '' } } as any);\n setInputValue('');\n setOptions(organizedCountries);\n };\n\n const onInputChanged = (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value?.trim() || '';\n if (value) {\n const options = filterCountries(value);\n setOptions(options);\n const exactCountry = options.find(({ label }) => label === value);\n if (exactCountry) {\n onCountryClick(exactCountry);\n }\n } else {\n setOptions(organizedCountries);\n }\n setInputValue(e.target.value);\n };\n\n const fieldClasses = classNames('rs-enhanced-country-field', {\n [`--${validationStatus}`]: !!validationStatus,\n '--focused': isFocused,\n '--disabled': props.disabled,\n });\n\n const onCountryClick = (country: CountryType): void => {\n setInputValue(country.label);\n onItemSelected();\n onChange?.({ target: { name, value: country.label } } as any);\n if ((country as any)['id']) {\n props.onChangeId?.((country as any).id);\n }\n\n if ((country as any)['code']) {\n props.onChangeCode?.((country as any).code);\n }\n };\n\n const getOption = (key: CountryType['label']): CountryType | undefined => {\n return options.find(({ label }) => label === key);\n };\n\n const onClose = (e: Event) => {\n onDropdownClosed(e);\n if (organizedCountries.every(({ label }) => label !== inputRef.current?.value)) {\n emptyValue();\n }\n };\n\n return (\n <div className={fieldClasses}>\n <div className=\"rs-enhanced-country-field--anchor\" ref={container}></div>\n\n <div className=\"rs-enhanced-country-field--search\">\n <input disabled={props.disabled} ref={inputRef} placeholder={t(Translation.Step.Confirmation.Inputs.Country) + ' *'} onChange={onInputChanged} value={inputValue} />\n <div\n onClick={() => {\n emptyValue();\n inputRef.current?.focus();\n }}\n className={classNames('rs-enhanced-country-field--close', {\n '--hide': !inputValue,\n })}\n >\n <Icon icon={IconType.Close} />\n </div>\n <div className=\"rs-enhanced-country-field--country\" onClick={onTriggerClicked}>\n <Icon icon={IconType.Dropdown} />\n </div>\n </div>\n\n <Select<CountryType, 'label'>\n offset={[0, 21]}\n open={isDropdownOpen}\n onClose={onClose}\n target={container.current}\n options={options}\n value={value}\n onChange={(value) => {\n const option = getOption(value);\n if (option) {\n onCountryClick(option);\n }\n }}\n keyName=\"label\"\n renderOption={(country) => (\n <div className=\"rs-enhanced-country-field--suggest-list-country\">\n <div className=\"rs-enhanced-country-field--suggest-list-country-icon\">{convertCountryCodeToFlag(country?.code as string)}</div>\n <div className=\"rs-enhanced-country-field--suggest-list-country-name\">\n {country?.label} ({country?.code})\n </div>\n </div>\n )}\n />\n </div>\n );\n});\n\nexport default StepConfirmationCountrySelector;\n"]}
|
|
@@ -105,7 +105,7 @@ function StepConfirmationForm() {
|
|
|
105
105
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Success },
|
|
106
106
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Confirmation.AlmostDone, { required: '*' })))),
|
|
107
107
|
react_1.default.createElement(RoomContactDetails_1.default, null),
|
|
108
|
-
bookingSource === 'inline' ? (react_1.default.createElement(Alert_1.default, { type: Alert_1.AlertType.Accent2, heavyPadding: true },
|
|
108
|
+
bookingSource === 'inline' && basketContext.canAddAnotherRoom ? (react_1.default.createElement(Alert_1.default, { type: Alert_1.AlertType.Accent2, heavyPadding: true },
|
|
109
109
|
react_1.default.createElement("div", { className: "u-flex u-w-100 flex-wrap flex-xl-nowrap" },
|
|
110
110
|
react_1.default.createElement("div", null,
|
|
111
111
|
react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, bold: true }, t(Translation_1.Translation.Step.Confirmation.WantMoreRooms)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfirmationForm.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useBasket } from '@frontend/contexts';\nimport { useConfirmationStep } from 'contexts/ConfirmationStepContext/ConfirmationStepContext';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport SSLSecureBadge from '@/components/generic/badging/SSLSecureBadge';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PromotionalCodeInput } from '@/components/generic/PromotionalCodeInput';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport GiftCardRedemption from '@/components/steps/confirmation/GiftCardRedemption';\nimport PaymentInformation from '@/components/steps/confirmation/PaymentInformation';\nimport RoomContactDetails from '@/components/steps/confirmation/RoomContactDetails';\nimport StepConfirmationAcknowledgement from '@/components/steps/confirmation/StepConfirmationAcknowledgement';\nimport { StepConfirmationCommentsComponent } from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nimport StepConfirmationPoliciesSection from '@/components/steps/confirmation/StepConfirmationPoliciesSection';\nimport StepConfirmationPolicyBlock from '@/components/steps/confirmation/StepConfirmationPolicyBlock';\nimport { ConfirmationFormValues } from '@/models/Confirmation';\nimport ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { usePaymentHelper } from '@/util/usePaymentHelper';\n\nexport default function StepConfirmationForm() {\n const { t } = useTranslation();\n\n const formContext = useFormContext<ConfirmationFormValues>();\n const { isInPaymentMode, isBackFromPlanpay, bookingSource } = useConfirmationStep();\n const basketContext = useBasket();\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const { exclusivePayment } = usePaymentHelper();\n\n const returnToPickRooms = async () => {\n historyConsistentPush(getStepRoom().getStepUrl());\n };\n\n // Check if gift card fully covers the booking\n const giftCardAmount = Math.abs(formContext.watch('giftCardAmount') || 0);\n const totalBookingAmount = basketContext.getTotalPrice() || 0;\n const isFullyCoveredByGiftCard = giftCardAmount > 0 && giftCardAmount >= totalBookingAmount;\n\n // Ensure paymentMethod is set when gift card covers everything\n useEffect(() => {\n if (isFullyCoveredByGiftCard && !formContext.getValues('paymentMethod')) {\n formContext.setValue('paymentMethod', 'VGS');\n }\n }, [isFullyCoveredByGiftCard]);\n\n const prePaymentInfo = (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Headline bold>{t(Translation.Step.Confirmation.GuestDetails)}</Headline>\n </div>\n <Text type={TextType.Small} color={Color.Success}>\n <strong>{t(Translation.Step.Confirmation.AlmostDone, { required: '*' })}</strong>\n </Text>\n </div>\n <RoomContactDetails />\n {bookingSource === 'inline' ? (\n <Alert type={AlertType.Accent2} heavyPadding>\n <div className=\"u-flex u-w-100 flex-wrap flex-xl-nowrap\">\n <div>\n <Text color={Color.Accent} bold>\n {t(Translation.Step.Confirmation.WantMoreRooms)}\n </Text>\n <Text color={Color.Navy}>{t(Translation.Step.Confirmation.YouCanAddAndEditRooms)}</Text>\n </div>\n <div className=\"d-flex align-items-center u-marg-top@xl-\">\n <BEButton filled primary icon={IconType.Add} iconPosition=\"left\" onClick={returnToPickRooms}>\n {t(Translation.Step.Confirmation.AddMoreRooms)}\n </BEButton>\n </div>\n </div>\n </Alert>\n ) : (\n <></>\n )}\n {ShowIATANumberOnCheckoutFeature.isActive() && (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Step.Confirmation.TravelAgent)}</Headline>\n </div>\n\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.Inputs.IATANumber)}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Inputs.IATANumberGuide)}</Text>\n </div>\n <TextBox placeholder={t(Translation.Step.Confirmation.Inputs.IATANumber)} wide {...formContext.register('IATANumber')} />\n </div>\n <LineBreak />\n </>\n )}\n <StepConfirmationCommentsComponent />\n <LineBreak />\n <GiftCardRedemption />\n {!exclusivePayment && (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Navigation.Menu.PaymentInformation)}</Headline>\n </div>\n <div className=\"u-marg-bottom rs-promotional-code-wrapper\">\n <PromotionalCodeInput />\n </div>\n {isFullyCoveredByGiftCard ? (\n <Alert type={AlertType.Success}>\n <div>\n <Text bold>No payment required</Text>\n <Text>Your gift card covers the full booking amount. No additional payment is required.</Text>\n </div>\n </Alert>\n ) : (\n <>\n <PaymentInformation />\n <div className=\"u-marg-top u-flex align-items-center\">\n <div className=\"u-flex align-items-center justify-content-start\">\n <Icon icon={IconType.Lock} color={Color.Success} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small} color={Color.Success}>\n <strong>{t(Translation.Step.Confirmation.Secured)}</strong>\n </Text>\n </div>\n </div>\n <SSLSecureBadge />\n </div>\n </>\n )}\n </div>\n <LineBreak />\n </>\n )}\n <StepConfirmationPoliciesSection />\n <div className=\"u-pad-top--light u-marg-bottom\">\n <StepConfirmationPolicyBlock />\n </div>\n {ConfirmationVerifyFeature.isActive() && (\n <>\n <LineBreak />\n <div>\n <StepConfirmationAcknowledgement />\n </div>\n </>\n )}\n </>\n );\n\n return (\n <form>\n {isBackFromPlanpay ? (\n <LargeLoader />\n ) : (\n <>\n <AutoAutoHeight open={!exclusivePayment || !isInPaymentMode}>{prePaymentInfo}</AutoAutoHeight>\n {exclusivePayment && (\n <AutoAutoHeight open={isInPaymentMode}>\n <ScrollToTop />\n {exclusivePayment.renderPaymentInput?.()}\n </AutoAutoHeight>\n )}\n </>\n )}\n </form>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"StepConfirmationForm.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useBasket } from '@frontend/contexts';\nimport { useConfirmationStep } from 'contexts/ConfirmationStepContext/ConfirmationStepContext';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport SSLSecureBadge from '@/components/generic/badging/SSLSecureBadge';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PromotionalCodeInput } from '@/components/generic/PromotionalCodeInput';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport GiftCardRedemption from '@/components/steps/confirmation/GiftCardRedemption';\nimport PaymentInformation from '@/components/steps/confirmation/PaymentInformation';\nimport RoomContactDetails from '@/components/steps/confirmation/RoomContactDetails';\nimport StepConfirmationAcknowledgement from '@/components/steps/confirmation/StepConfirmationAcknowledgement';\nimport { StepConfirmationCommentsComponent } from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nimport StepConfirmationPoliciesSection from '@/components/steps/confirmation/StepConfirmationPoliciesSection';\nimport StepConfirmationPolicyBlock from '@/components/steps/confirmation/StepConfirmationPolicyBlock';\nimport { ConfirmationFormValues } from '@/models/Confirmation';\nimport ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { usePaymentHelper } from '@/util/usePaymentHelper';\n\nexport default function StepConfirmationForm() {\n const { t } = useTranslation();\n\n const formContext = useFormContext<ConfirmationFormValues>();\n const { isInPaymentMode, isBackFromPlanpay, bookingSource } = useConfirmationStep();\n const basketContext = useBasket();\n\n const historyConsistentPush = useHistoryConsistentPush();\n\n const { exclusivePayment } = usePaymentHelper();\n\n const returnToPickRooms = async () => {\n historyConsistentPush(getStepRoom().getStepUrl());\n };\n\n // Check if gift card fully covers the booking\n const giftCardAmount = Math.abs(formContext.watch('giftCardAmount') || 0);\n const totalBookingAmount = basketContext.getTotalPrice() || 0;\n const isFullyCoveredByGiftCard = giftCardAmount > 0 && giftCardAmount >= totalBookingAmount;\n\n // Ensure paymentMethod is set when gift card covers everything\n useEffect(() => {\n if (isFullyCoveredByGiftCard && !formContext.getValues('paymentMethod')) {\n formContext.setValue('paymentMethod', 'VGS');\n }\n }, [isFullyCoveredByGiftCard]);\n\n const prePaymentInfo = (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Headline bold>{t(Translation.Step.Confirmation.GuestDetails)}</Headline>\n </div>\n <Text type={TextType.Small} color={Color.Success}>\n <strong>{t(Translation.Step.Confirmation.AlmostDone, { required: '*' })}</strong>\n </Text>\n </div>\n <RoomContactDetails />\n {bookingSource === 'inline' && basketContext.canAddAnotherRoom ? (\n <Alert type={AlertType.Accent2} heavyPadding>\n <div className=\"u-flex u-w-100 flex-wrap flex-xl-nowrap\">\n <div>\n <Text color={Color.Accent} bold>\n {t(Translation.Step.Confirmation.WantMoreRooms)}\n </Text>\n <Text color={Color.Navy}>{t(Translation.Step.Confirmation.YouCanAddAndEditRooms)}</Text>\n </div>\n <div className=\"d-flex align-items-center u-marg-top@xl-\">\n <BEButton filled primary icon={IconType.Add} iconPosition=\"left\" onClick={returnToPickRooms}>\n {t(Translation.Step.Confirmation.AddMoreRooms)}\n </BEButton>\n </div>\n </div>\n </Alert>\n ) : (\n <></>\n )}\n {ShowIATANumberOnCheckoutFeature.isActive() && (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Step.Confirmation.TravelAgent)}</Headline>\n </div>\n\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Confirmation.Inputs.IATANumber)}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Inputs.IATANumberGuide)}</Text>\n </div>\n <TextBox placeholder={t(Translation.Step.Confirmation.Inputs.IATANumber)} wide {...formContext.register('IATANumber')} />\n </div>\n <LineBreak />\n </>\n )}\n <StepConfirmationCommentsComponent />\n <LineBreak />\n <GiftCardRedemption />\n {!exclusivePayment && (\n <>\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Navigation.Menu.PaymentInformation)}</Headline>\n </div>\n <div className=\"u-marg-bottom rs-promotional-code-wrapper\">\n <PromotionalCodeInput />\n </div>\n {isFullyCoveredByGiftCard ? (\n <Alert type={AlertType.Success}>\n <div>\n <Text bold>No payment required</Text>\n <Text>Your gift card covers the full booking amount. No additional payment is required.</Text>\n </div>\n </Alert>\n ) : (\n <>\n <PaymentInformation />\n <div className=\"u-marg-top u-flex align-items-center\">\n <div className=\"u-flex align-items-center justify-content-start\">\n <Icon icon={IconType.Lock} color={Color.Success} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small} color={Color.Success}>\n <strong>{t(Translation.Step.Confirmation.Secured)}</strong>\n </Text>\n </div>\n </div>\n <SSLSecureBadge />\n </div>\n </>\n )}\n </div>\n <LineBreak />\n </>\n )}\n <StepConfirmationPoliciesSection />\n <div className=\"u-pad-top--light u-marg-bottom\">\n <StepConfirmationPolicyBlock />\n </div>\n {ConfirmationVerifyFeature.isActive() && (\n <>\n <LineBreak />\n <div>\n <StepConfirmationAcknowledgement />\n </div>\n </>\n )}\n </>\n );\n\n return (\n <form>\n {isBackFromPlanpay ? (\n <LargeLoader />\n ) : (\n <>\n <AutoAutoHeight open={!exclusivePayment || !isInPaymentMode}>{prePaymentInfo}</AutoAutoHeight>\n {exclusivePayment && (\n <AutoAutoHeight open={isInPaymentMode}>\n <ScrollToTop />\n {exclusivePayment.renderPaymentInput?.()}\n </AutoAutoHeight>\n )}\n </>\n )}\n </form>\n );\n}\n"]}
|
|
@@ -47,12 +47,14 @@ const Icon_1 = require("../../generic/Icon/Icon");
|
|
|
47
47
|
const PromoCodeInput_1 = __importDefault(require("../../generic/PromoCodeInput"));
|
|
48
48
|
const OccupancyWarningBlock_1 = __importDefault(require("./OccupancyWarningBlock"));
|
|
49
49
|
const PeoplePickerRow_1 = __importDefault(require("./PeoplePickerRow"));
|
|
50
|
+
const useSignedInMember_1 = require("../../../hooks/useSignedInMember");
|
|
50
51
|
const BasketRow_1 = __importStar(require("../../../models/BasketRow"));
|
|
51
52
|
const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
|
|
52
53
|
function PeoplePicker() {
|
|
53
54
|
var _a, _b;
|
|
54
55
|
const context = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
55
56
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
57
|
+
const { signedInUser } = (0, useSignedInMember_1.useSignedInMember)();
|
|
56
58
|
const updateRoomValues = (row, values) => {
|
|
57
59
|
const { adults, children, infants, promoCode } = values;
|
|
58
60
|
if (adults !== row.getAdults()) {
|
|
@@ -113,8 +115,8 @@ function PeoplePicker() {
|
|
|
113
115
|
}, onChange: changeRoomValues, onRemove: removeBasketRowHandler })));
|
|
114
116
|
}),
|
|
115
117
|
react_1.default.createElement("div", { className: "u-marg-bottom" },
|
|
116
|
-
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus === BasketRow_1.EPromoCodeStatus.New ? undefined : promoCodeStatus === BasketRow_1.EPromoCodeStatus.Valid, variant: "outlined", row:
|
|
117
|
-
react_1.default.createElement(BEButton_1.default, { isText: true, primary: true, icon: Icon_1.IconType.Add, stopIconAnimation: true, onClick: addAnotherRoomOnClickHandler }, t(Translation_1.Translation.Misc.AddAnotherRoom)),
|
|
118
|
+
react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus === BasketRow_1.EPromoCodeStatus.New ? undefined : promoCodeStatus === BasketRow_1.EPromoCodeStatus.Valid, variant: "outlined", row: selectedRow })),
|
|
119
|
+
context.canAddAnotherRoom ? (react_1.default.createElement(BEButton_1.default, { isText: true, primary: true, icon: Icon_1.IconType.Add, stopIconAnimation: true, onClick: addAnotherRoomOnClickHandler }, t(Translation_1.Translation.Misc.AddAnotherRoom))) : (react_1.default.createElement(react_1.default.Fragment, null)),
|
|
118
120
|
react_1.default.createElement(OccupancyWarningBlock_1.default, null)));
|
|
119
121
|
}
|
|
120
122
|
//# sourceMappingURL=PeoplePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport OccupancyWarningBlock from '@/components/steps/date/OccupancyWarningBlock';\nimport PeoplePickerRow, { PeoplePickerDetails } from '@/components/steps/date/PeoplePickerRow';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function PeoplePicker() {\n const context = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { signedInUser } = useSignedInMember();\n const updateRoomValues = (row: BasketRow, values: PeoplePickerDetails) => {\n const { adults, children, infants, promoCode } = values;\n\n if (adults !== row.getAdults()) {\n row.setAdults(adults);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n if (children !== row.getChildren()) {\n row.setChildren(children);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (infants !== row.getInfants()) {\n row.setInfants(infants);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (promoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.DATES);\n row.setPromoCode(promoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const basketRows = context.currentBasketRows;\n const { t } = useTranslation();\n\n const addNewBasketRow = () => {\n context.addBasketRow(new BasketRow());\n };\n\n const updatePromoCode = (code: string) => {\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setManualInputPromoCode(!!true);\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n }\n };\n\n const selectedRow = context.selectedBasketRow;\n\n const promoCodeStatus = selectedRow?.getPromoCodeStatus() ?? null;\n const addAnotherRoomOnClickHandler = () => {\n DataLayer.instance.sendInteraction('Add Another Room', InteractionType.BUTTON, InteractionStep.DATES);\n addNewBasketRow();\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const promocode = context.selectedBasketRow?.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className=\"people-picker--items\">\n {basketRows.map((item, index) => {\n const changeRoomValues = (val: any) => {\n updateRoomValues(item, val);\n };\n const removeBasketRowHandler = () => {\n context.removeBasketRow(item);\n };\n return (\n <div key={item.getID()}>\n <PeoplePickerRow\n number={index}\n details={{\n adults: item.getAdults(),\n children: item.getChildren(),\n infants: item.getInfants(),\n promoCode: item.getPromoCode(),\n roomCode: item.getRoomCode(),\n }}\n onChange={changeRoomValues}\n onRemove={removeBasketRowHandler}\n />\n </div>\n );\n })}\n <div className=\"u-marg-bottom\">\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={!promocode || promoCodeStatus === null || promoCodeStatus === EPromoCodeStatus.New ? undefined : promoCodeStatus === EPromoCodeStatus.Valid}\n variant=\"outlined\"\n row={selectedRow}\n />\n </div>\n\n {context.canAddAnotherRoom ? (\n <BEButton isText primary icon={IconType.Add} stopIconAnimation onClick={addAnotherRoomOnClickHandler}>\n {t(Translation.Misc.AddAnotherRoom)}\n </BEButton>\n ) : (\n <></>\n )}\n <OccupancyWarningBlock />\n </div>\n );\n}\n"]}
|
|
@@ -83,9 +83,9 @@ function PeoplePickerRow(pickerProps) {
|
|
|
83
83
|
onInputChanged({ infants: val });
|
|
84
84
|
};
|
|
85
85
|
const { getMaxSelectableAdults, showChildren, getMaxSelectableChildren, getMaxSelectableInfants } = (0, useSearchScopeHook_1.useSearchScopeHook)();
|
|
86
|
-
const maxAdults = getMaxSelectableAdults({ adults, children });
|
|
86
|
+
const maxAdults = getMaxSelectableAdults({ adults, children, infants });
|
|
87
87
|
const maxChildren = getMaxSelectableChildren({ adults });
|
|
88
|
-
const maxInfants = getMaxSelectableInfants();
|
|
88
|
+
const maxInfants = getMaxSelectableInfants({ adults });
|
|
89
89
|
const roomName = ((_b = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.rooms) === null || _a === void 0 ? void 0 : _a[roomCode]) === null || _b === void 0 ? void 0 : _b.name) || '';
|
|
90
90
|
const containerRef = (0, react_1.useRef)(null);
|
|
91
91
|
const [containerHeight, setContainerHeight] = (0, react_1.useState)(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeoplePickerRow.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePickerRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { animated, useSpring } from '@react-spring/web';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { AgedBetweenLabel } from '@/components/generic/AgedBetweenLabel/AgedBetweenLabel';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { Color } from '@/util/Color';\n\nexport interface PeoplePickerDetails {\n adults: number;\n children: number;\n infants: number;\n promoCode: string;\n roomCode: string;\n}\n\nexport interface PeoplePickerRowProps {\n details: PeoplePickerDetails;\n\n number: number;\n onChange?: (details: PeoplePickerDetails) => void;\n onRemove?: () => void;\n}\n\nexport default function PeoplePickerRow(pickerProps: PeoplePickerRowProps) {\n const { t } = useTranslation();\n const { adults, children, infants, roomCode } = pickerProps.details;\n\n const { hotel } = useCurrentHotel();\n\n const [animatedIn, setAnimation] = useState(false);\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n setAnimation(true);\n }, []);\n\n const onInputChanged = (val: any) => {\n if (pickerProps.onChange) {\n pickerProps.onChange({\n ...pickerProps.details,\n ...val,\n });\n }\n };\n\n const onClose = () => {\n if (pickerProps.onRemove) {\n setAnimation(false);\n setTimeout(() => {\n pickerProps.onRemove?.();\n }, 500);\n }\n };\n const adultsChangeHandler = (val: any) => {\n onInputChanged({ adults: val });\n };\n const childrenChangeHandler = (val: any) => {\n onInputChanged({ children: val });\n };\n const infantChangeHandler = (val: any) => {\n onInputChanged({ infants: val });\n };\n\n const { getMaxSelectableAdults, showChildren, getMaxSelectableChildren, getMaxSelectableInfants } = useSearchScopeHook();\n const maxAdults = getMaxSelectableAdults({ adults, children });\n const maxChildren = getMaxSelectableChildren({ adults });\n const maxInfants = getMaxSelectableInfants();\n const roomName = hotel?.rooms?.[roomCode]?.name || '';\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerHeight, setContainerHeight] = useState(0);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerHeight(entry.contentRect.height);\n }\n });\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n if (containerRef.current) {\n resizeObserver.unobserve(containerRef.current);\n }\n };\n }, [containerRef.current]);\n\n const heightProps = useSpring({\n height: containerHeight + 33, // 33 is for <LineBreak>\n opacity: animatedIn ? 1 : 0,\n });\n\n return (\n <animated.div ref={firstUpdate} style={heightProps}>\n <div className=\"people-picker--item\" ref={containerRef}>\n {pickerProps.number > 0 && (\n <div className=\"people-picker--item-row\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <strong>\n {t(Translation.Misc.Room)} {pickerProps.number + 1}\n </strong>\n </Text>\n <div className=\"people-picker--item-remove\" onClick={onClose}>\n <Icon icon={IconType.Close} color={Color.Grey} />\n </div>\n </div>\n )}\n {roomName && (\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Room)}</Text>\n <Text className=\"room-name\">{roomName}</Text>\n </div>\n )}\n\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Adult_plural)}</Text>\n <NumberIncrement number={adults} min={1} max={maxAdults} onChange={adultsChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.minAdultAge} max={hotel?.maxAdultAge} />\n </div>\n\n {showChildren ? (\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Child_plural)}</Text>\n <NumberIncrement number={children} min={0} max={maxChildren} onChange={childrenChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.childConfiguration?.childRange?.min} max={hotel?.childConfiguration?.childRange?.max} />\n </div>\n ) : null}\n\n {hotel?.childConfiguration?.supportInfants ? (\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Infant_plural)}</Text>\n <NumberIncrement number={infants} min={0} max={maxInfants} onChange={infantChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.childConfiguration?.infantRange?.min} max={hotel?.childConfiguration?.infantRange?.max} />\n </div>\n ) : null}\n </div>\n <LineBreak smallMargins />\n </animated.div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PeoplePickerRow.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePickerRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,kCA6HC;AA3JD,2CAAkD;AAClD,2CAAwD;AACxD,+CAA2D;AAC3D,iDAA+C;AAC/C,0DAAuD;AAEvD,6FAA0F;AAC1F,uEAAgE;AAChE,+EAAuD;AACvD,2FAAmE;AACnE,kEAA2D;AAC3D,mEAAgE;AAChE,wCAAqC;AAkBrC,SAAwB,eAAe,CAAC,WAAiC;;IACrE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC;IAEpE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,EAAE;QAChC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACvB,WAAW,CAAC,QAAQ,iCACb,WAAW,CAAC,OAAO,GACnB,GAAG,EACR,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,GAAG,EAAE;;gBACZ,MAAA,WAAW,CAAC,QAAQ,2DAAI,CAAC;YAC7B,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,CAAC;IACL,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,CAAC,GAAQ,EAAE,EAAE;QACrC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAG,CAAC,GAAQ,EAAE,EAAE;QACvC,cAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,CAAC,GAAQ,EAAE,EAAE;QACrC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,GAAG,IAAA,uCAAkB,GAAE,CAAC;IACzH,MAAM,SAAS,GAAG,sBAAsB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,CAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAG,QAAQ,CAAC,0CAAE,IAAI,KAAI,EAAE,CAAC;IACtD,MAAM,YAAY,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAE1D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,GAAG,EAAE;YACR,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvB,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3B,MAAM,WAAW,GAAG,IAAA,eAAS,EAAC;QAC1B,MAAM,EAAE,eAAe,GAAG,EAAE,EAAE,wBAAwB;QACtD,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9B,CAAC,CAAC;IAEH,OAAO,CACH,8BAAC,cAAQ,CAAC,GAAG,IAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW;QAC9C,uCAAK,SAAS,EAAC,qBAAqB,EAAC,GAAG,EAAE,YAAY;YACjD,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACvB,uCAAK,SAAS,EAAC,yBAAyB;gBACpC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;oBAC7C;wBACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;wBAAQ,WAAW,CAAC,MAAM,GAAG,CAAC,CAClD,CACN;gBACP,uCAAK,SAAS,EAAC,4BAA4B,EAAC,OAAO,EAAE,OAAO;oBACxD,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,GAAI,CAC/C,CACJ,CACT;YACA,QAAQ,IAAI,CACT,uCAAK,SAAS,EAAC,yBAAyB;gBACpC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAQ;gBAC5C,8BAAC,cAAI,IAAC,SAAS,EAAC,WAAW,IAAE,QAAQ,CAAQ,CAC3C,CACT;YAED;gBACI,uCAAK,SAAS,EAAC,yBAAyB;oBACpC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAQ;oBACpD,8BAAC,yBAAe,IAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,GAAI,CACxF;gBACN,8BAAC,mCAAgB,IAAC,GAAG,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,EAAE,GAAG,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,GAAI,CACpE;YAEL,YAAY,CAAC,CAAC,CAAC,CACZ;gBACI,uCAAK,SAAS,EAAC,yBAAyB;oBACpC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAQ;oBACpD,8BAAC,yBAAe,IAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,GAAI,CAC9F;gBACN,8BAAC,mCAAgB,IAAC,GAAG,EAAE,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,UAAU,0CAAE,GAAG,EAAE,GAAG,EAAE,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,UAAU,0CAAE,GAAG,GAAI,CACpH,CACT,CAAC,CAAC,CAAC,IAAI;YAEP,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,cAAc,EAAC,CAAC,CAAC,CACzC;gBACI,uCAAK,SAAS,EAAC,yBAAyB;oBACpC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAQ;oBACrD,8BAAC,yBAAe,IAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,GAAI,CAC1F;gBACN,8BAAC,mCAAgB,IAAC,GAAG,EAAE,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,WAAW,0CAAE,GAAG,EAAE,GAAG,EAAE,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,WAAW,0CAAE,GAAG,GAAI,CACtH,CACT,CAAC,CAAC,CAAC,IAAI,CACN;QACN,8BAAC,mBAAS,IAAC,YAAY,SAAG,CACf,CAClB,CAAC;AACN,CAAC","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { animated, useSpring } from '@react-spring/web';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { AgedBetweenLabel } from '@/components/generic/AgedBetweenLabel/AgedBetweenLabel';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { Color } from '@/util/Color';\n\nexport interface PeoplePickerDetails {\n adults: number;\n children: number;\n infants: number;\n promoCode: string;\n roomCode: string;\n}\n\nexport interface PeoplePickerRowProps {\n details: PeoplePickerDetails;\n\n number: number;\n onChange?: (details: PeoplePickerDetails) => void;\n onRemove?: () => void;\n}\n\nexport default function PeoplePickerRow(pickerProps: PeoplePickerRowProps) {\n const { t } = useTranslation();\n const { adults, children, infants, roomCode } = pickerProps.details;\n\n const { hotel } = useCurrentHotel();\n\n const [animatedIn, setAnimation] = useState(false);\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n setAnimation(true);\n }, []);\n\n const onInputChanged = (val: any) => {\n if (pickerProps.onChange) {\n pickerProps.onChange({\n ...pickerProps.details,\n ...val,\n });\n }\n };\n\n const onClose = () => {\n if (pickerProps.onRemove) {\n setAnimation(false);\n setTimeout(() => {\n pickerProps.onRemove?.();\n }, 500);\n }\n };\n const adultsChangeHandler = (val: any) => {\n onInputChanged({ adults: val });\n };\n const childrenChangeHandler = (val: any) => {\n onInputChanged({ children: val });\n };\n const infantChangeHandler = (val: any) => {\n onInputChanged({ infants: val });\n };\n\n const { getMaxSelectableAdults, showChildren, getMaxSelectableChildren, getMaxSelectableInfants } = useSearchScopeHook();\n const maxAdults = getMaxSelectableAdults({ adults, children, infants });\n const maxChildren = getMaxSelectableChildren({ adults });\n const maxInfants = getMaxSelectableInfants({ adults });\n const roomName = hotel?.rooms?.[roomCode]?.name || '';\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerHeight, setContainerHeight] = useState(0);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerHeight(entry.contentRect.height);\n }\n });\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n if (containerRef.current) {\n resizeObserver.unobserve(containerRef.current);\n }\n };\n }, [containerRef.current]);\n\n const heightProps = useSpring({\n height: containerHeight + 33, // 33 is for <LineBreak>\n opacity: animatedIn ? 1 : 0,\n });\n\n return (\n <animated.div ref={firstUpdate} style={heightProps}>\n <div className=\"people-picker--item\" ref={containerRef}>\n {pickerProps.number > 0 && (\n <div className=\"people-picker--item-row\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <strong>\n {t(Translation.Misc.Room)} {pickerProps.number + 1}\n </strong>\n </Text>\n <div className=\"people-picker--item-remove\" onClick={onClose}>\n <Icon icon={IconType.Close} color={Color.Grey} />\n </div>\n </div>\n )}\n {roomName && (\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Room)}</Text>\n <Text className=\"room-name\">{roomName}</Text>\n </div>\n )}\n\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Adult_plural)}</Text>\n <NumberIncrement number={adults} min={1} max={maxAdults} onChange={adultsChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.minAdultAge} max={hotel?.maxAdultAge} />\n </div>\n\n {showChildren ? (\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Child_plural)}</Text>\n <NumberIncrement number={children} min={0} max={maxChildren} onChange={childrenChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.childConfiguration?.childRange?.min} max={hotel?.childConfiguration?.childRange?.max} />\n </div>\n ) : null}\n\n {hotel?.childConfiguration?.supportInfants ? (\n <div>\n <div className=\"people-picker--item-row\">\n <Text>{t(Translation.Step.Date.Infant_plural)}</Text>\n <NumberIncrement number={infants} min={0} max={maxInfants} onChange={infantChangeHandler} />\n </div>\n <AgedBetweenLabel min={hotel?.childConfiguration?.infantRange?.min} max={hotel?.childConfiguration?.infantRange?.max} />\n </div>\n ) : null}\n </div>\n <LineBreak smallMargins />\n </animated.div>\n );\n}\n"]}
|
|
@@ -106,6 +106,7 @@ function RoomListCrossSellBlock(props) {
|
|
|
106
106
|
BookingAPI_1.default.Availability.fetchAvailabilityData(row, props.hotelId, memberNumber, true)
|
|
107
107
|
.catch((_) => [])
|
|
108
108
|
.then((hotelRooms) => {
|
|
109
|
+
hotelRooms = hotelRooms === null || hotelRooms === void 0 ? void 0 : hotelRooms.filter((room) => room.isAvailable());
|
|
109
110
|
if (hotelRooms === null || hotelRooms === void 0 ? void 0 : hotelRooms.length) {
|
|
110
111
|
setRooms(hotelRooms);
|
|
111
112
|
setIsLoading(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomListCrossSellBlock.js","sourceRoot":"/","sources":["src/components/steps/room/RoomListCrossSellBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport React, { ReactElement, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Room } from '@/models/Room/Room';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface RoomListCrossSellBlockProps {\n hotelId: string;\n}\n\nexport default function RoomListCrossSellBlock(props: RoomListCrossSellBlockProps): ReactElement | null {\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n\n const [isAvailable, setIsAvailable] = useState(false); // True if the dates were found with a calendar search\n const [isReallyAvailable, setIsReallyAvailable] = useState(true); // True if the dates were found with an availability search\n const [isLoading, setIsLoading] = useState(true);\n const [imageUrl, setImageUrl] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [link, setLink] = useState('');\n const [rooms, setRooms] = useState<Room[]>([]);\n const { memberNumber } = useSignedInMember();\n\n useEffect(() => {\n const row = basketContext.selectedBasketRow;\n\n if (!row) {\n return;\n }\n\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n row.getRoomCode(),\n '',\n props.hotelId,\n memberNumber,\n true\n )\n .catch()\n .then((dayPrices) => {\n if (dayPrices) {\n let allFound = true;\n for (let date = row.getStartDate(); date.isBefore(row.getEndDate(), 'day'); date = date.add(1, 'day')) {\n if (!dayPrices[date.format(API_DATE_FORMAT)]) {\n allFound = false;\n break;\n }\n }\n setIsAvailable(allFound);\n setIsReallyAvailable(true);\n if (allFound) {\n setIsLoading(true);\n const crossSellHotelInfo = API.Availability.getCrossSellHotelInfo(props.hotelId);\n setName(crossSellHotelInfo.name);\n setImageUrl(crossSellHotelInfo.image || '');\n setDescription(crossSellHotelInfo.description);\n\n const params: string[] = ['arrive=' + row.getStartDate().format('YYYY-M-D'), 'depart=' + row.getEndDate().format('YYYY-M-D')];\n if (row.getAdults() > 1) {\n params.push('adults=' + row.getAdults());\n }\n if (row.getChildren() > 0) {\n params.push('children=' + row.getChildren());\n }\n if (row.getInfants() > 0) {\n params.push('infants=' + row.getInfants());\n }\n if (row.getPromoCode()) {\n params.push('promocode=' + row.getPromoCode());\n }\n setLink(crossSellHotelInfo.checkoutUrl + '#/step/room/?' + params.join('&'));\n\n API.Availability.fetchAvailabilityData(row, props.hotelId, memberNumber, true)\n .catch((_) => [])\n .then((hotelRooms) => {\n if (hotelRooms?.length) {\n setRooms(hotelRooms);\n setIsLoading(false);\n } else {\n setIsReallyAvailable(false);\n setIsLoading(false);\n }\n });\n }\n }\n });\n }, [basketContext.selectedBasketRow]);\n\n return isAvailable ? (\n <div className=\"u-marg-top--heavy u-marg-bottom\">\n <div className=\"cross-sell-module\">\n <div className=\"cross-sell-module--image\" style={{ backgroundImage: `url('${ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }} />\n <div className=\"cross-sell-module--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"cross-sell-module--content-title u-marg-bottom--light\">\n <Headline bold size={isReallyAvailable ? 'large' : 'normal'}>\n {isLoading\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy1)\n : isReallyAvailable\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy2)\n : t(Translation.Step.Room.CrossSellBlock.DateUnavailable)}\n </Headline>\n </div>\n {isReallyAvailable && (\n <div className=\"cross-sell-module--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Body}>\n <strong style={{ color: Color.Accent }}>{name}</strong>\n <div dangerouslySetInnerHTML={{ __html: description }}></div>\n </Text>\n </div>\n )}\n </div>\n\n {isLoading ? (\n <SmallSpinner />\n ) : (\n <>\n {rooms.slice(0, 4).map((room, index) => {\n const roomLink = link + '&room=' + room.code;\n let classNames = 'u-flex align-items-end';\n if (index < rooms.length - 1) {\n classNames += ' u-pad-bottom u-border-bottom u-marg-bottom';\n }\n return (\n <a key={room.code} className={classNames} href={roomLink} target=\"_blank\" rel=\"noreferrer\">\n <div className=\"u-flex flex-column align-items-start justify-content-start\">\n <Text type={TextType.Body} color={Color.Accent} bold>\n {room.name}\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: room.occupancy,\n })}\n </Text>\n </div>\n <div className=\"u-flex flex-column align-items-end align-items-md-end\">\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Misc.From)}\n </Text>\n <Text type={TextType.Body} color={Color.Accent} bold>\n <Currency>{room.getLowestPrice(true)}</Currency>\n </Text>\n </div>\n </a>\n );\n })}\n </>\n )}\n\n {isReallyAvailable && (\n <div className=\"u-marg-top--light u-flex justify-content-start u-w-100@m- u-marg-top--heavy\">\n <a\n className={'link-button --primary --filled --success --icon-right --normal' + (context.screenSize <= ScreenSize.Medium ? ' --wide' : '')}\n tabIndex={0}\n type=\"button\"\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <span>\n See all {rooms.length} rooms\n <Icon icon={IconType.ArrowRight} size=\"1em\" />\n </span>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n ) : null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomListCrossSellBlock.js","sourceRoot":"/","sources":["src/components/steps/room/RoomListCrossSellBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport React, { ReactElement, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport API from '@/api/BookingAPI';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Room } from '@/models/Room/Room';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface RoomListCrossSellBlockProps {\n hotelId: string;\n}\n\nexport default function RoomListCrossSellBlock(props: RoomListCrossSellBlockProps): ReactElement | null {\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n\n const [isAvailable, setIsAvailable] = useState(false); // True if the dates were found with a calendar search\n const [isReallyAvailable, setIsReallyAvailable] = useState(true); // True if the dates were found with an availability search\n const [isLoading, setIsLoading] = useState(true);\n const [imageUrl, setImageUrl] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [link, setLink] = useState('');\n const [rooms, setRooms] = useState<Room[]>([]);\n const { memberNumber } = useSignedInMember();\n\n useEffect(() => {\n const row = basketContext.selectedBasketRow;\n\n if (!row) {\n return;\n }\n\n API.Availability.getCheapestPricePerDay(\n row.getStartDate(),\n row.getEndDate(),\n row.getAdults(),\n row.getChildren(),\n row.getInfants(),\n row.getPromoCode(),\n row.getRoomCode(),\n '',\n props.hotelId,\n memberNumber,\n true\n )\n .catch()\n .then((dayPrices) => {\n if (dayPrices) {\n let allFound = true;\n for (let date = row.getStartDate(); date.isBefore(row.getEndDate(), 'day'); date = date.add(1, 'day')) {\n if (!dayPrices[date.format(API_DATE_FORMAT)]) {\n allFound = false;\n break;\n }\n }\n setIsAvailable(allFound);\n setIsReallyAvailable(true);\n if (allFound) {\n setIsLoading(true);\n const crossSellHotelInfo = API.Availability.getCrossSellHotelInfo(props.hotelId);\n setName(crossSellHotelInfo.name);\n setImageUrl(crossSellHotelInfo.image || '');\n setDescription(crossSellHotelInfo.description);\n\n const params: string[] = ['arrive=' + row.getStartDate().format('YYYY-M-D'), 'depart=' + row.getEndDate().format('YYYY-M-D')];\n if (row.getAdults() > 1) {\n params.push('adults=' + row.getAdults());\n }\n if (row.getChildren() > 0) {\n params.push('children=' + row.getChildren());\n }\n if (row.getInfants() > 0) {\n params.push('infants=' + row.getInfants());\n }\n if (row.getPromoCode()) {\n params.push('promocode=' + row.getPromoCode());\n }\n setLink(crossSellHotelInfo.checkoutUrl + '#/step/room/?' + params.join('&'));\n\n API.Availability.fetchAvailabilityData(row, props.hotelId, memberNumber, true)\n .catch((_) => [])\n .then((hotelRooms) => {\n hotelRooms = hotelRooms?.filter((room) => room.isAvailable());\n if (hotelRooms?.length) {\n setRooms(hotelRooms);\n setIsLoading(false);\n } else {\n setIsReallyAvailable(false);\n setIsLoading(false);\n }\n });\n }\n }\n });\n }, [basketContext.selectedBasketRow]);\n\n return isAvailable ? (\n <div className=\"u-marg-top--heavy u-marg-bottom\">\n <div className=\"cross-sell-module\">\n <div className=\"cross-sell-module--image\" style={{ backgroundImage: `url('${ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }} />\n <div className=\"cross-sell-module--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"cross-sell-module--content-title u-marg-bottom--light\">\n <Headline bold size={isReallyAvailable ? 'large' : 'normal'}>\n {isLoading\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy1)\n : isReallyAvailable\n ? t(Translation.Step.Room.CrossSellBlock.AvailabilityNearBy2)\n : t(Translation.Step.Room.CrossSellBlock.DateUnavailable)}\n </Headline>\n </div>\n {isReallyAvailable && (\n <div className=\"cross-sell-module--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Body}>\n <strong style={{ color: Color.Accent }}>{name}</strong>\n <div dangerouslySetInnerHTML={{ __html: description }}></div>\n </Text>\n </div>\n )}\n </div>\n\n {isLoading ? (\n <SmallSpinner />\n ) : (\n <>\n {rooms.slice(0, 4).map((room, index) => {\n const roomLink = link + '&room=' + room.code;\n let classNames = 'u-flex align-items-end';\n if (index < rooms.length - 1) {\n classNames += ' u-pad-bottom u-border-bottom u-marg-bottom';\n }\n return (\n <a key={room.code} className={classNames} href={roomLink} target=\"_blank\" rel=\"noreferrer\">\n <div className=\"u-flex flex-column align-items-start justify-content-start\">\n <Text type={TextType.Body} color={Color.Accent} bold>\n {room.name}\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: room.occupancy,\n })}\n </Text>\n </div>\n <div className=\"u-flex flex-column align-items-end align-items-md-end\">\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Misc.From)}\n </Text>\n <Text type={TextType.Body} color={Color.Accent} bold>\n <Currency>{room.getLowestPrice(true)}</Currency>\n </Text>\n </div>\n </a>\n );\n })}\n </>\n )}\n\n {isReallyAvailable && (\n <div className=\"u-marg-top--light u-flex justify-content-start u-w-100@m- u-marg-top--heavy\">\n <a\n className={'link-button --primary --filled --success --icon-right --normal' + (context.screenSize <= ScreenSize.Medium ? ' --wide' : '')}\n tabIndex={0}\n type=\"button\"\n href={link}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <span>\n See all {rooms.length} rooms\n <Icon icon={IconType.ArrowRight} size=\"1em\" />\n </span>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n ) : null;\n}\n"]}
|
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.UserSearchSummary = void 0;
|
|
40
40
|
const contexts_1 = require("../../../../contexts/index.js");
|
|
41
|
+
const hooks_1 = require("../../../../hooks/index.js");
|
|
41
42
|
const react_1 = __importStar(require("react"));
|
|
42
43
|
const react_i18next_1 = require("react-i18next");
|
|
43
44
|
const useNextStepAction_1 = require("../../../../hooks/useNextStepAction");
|
|
@@ -50,7 +51,8 @@ const TripteaseLodgingSearchSchema_1 = require("../TripteaseLodgingSearchSchema"
|
|
|
50
51
|
const UserSearchSummaryRow_1 = require("./UserSearchSummaryRow");
|
|
51
52
|
const ButtonWithNextStepConfirmationDialog = (0, useNextStepAction_1.withNextStepConfirmationDialog)(BEButton_1.default);
|
|
52
53
|
const UserSearchSummary = () => {
|
|
53
|
-
const { currentBasketRows, addBasketRow } = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
54
|
+
const { currentBasketRows, addBasketRow, canAddAnotherRoom } = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
55
|
+
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
54
56
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
55
57
|
const addRoomRowOnClick = () => {
|
|
56
58
|
DataLayer_1.default.instance.sendInteraction('Add Room Row', DataLayer_1.InteractionType.BUTTON, DataLayer_1.InteractionStep.ROOMS);
|
|
@@ -60,8 +62,8 @@ const UserSearchSummary = () => {
|
|
|
60
62
|
currentBasketRows.map((row, index) => {
|
|
61
63
|
return react_1.default.createElement(UserSearchSummaryRow_1.UserSearchSummaryRow, { row: row, index: index, key: row.getID() });
|
|
62
64
|
}),
|
|
63
|
-
react_1.default.createElement("div", { className: "u-flex justify-content-end" },
|
|
64
|
-
react_1.default.createElement(ButtonWithNextStepConfirmationDialog, { icon: Icon_1.IconType.Add, onClick: addRoomRowOnClick, stopIconAnimation: true }, t(Translation_1.Translation.Step.Room.RoomInfo.AddRoom))),
|
|
65
|
+
canAddAnotherRoom ? (react_1.default.createElement("div", { className: "u-flex justify-content-end" },
|
|
66
|
+
react_1.default.createElement(ButtonWithNextStepConfirmationDialog, { icon: Icon_1.IconType.Add, onClick: addRoomRowOnClick, stopIconAnimation: true }, t(Translation_1.Translation.Step.Room.RoomInfo.AddRoom)))) : (react_1.default.createElement(react_1.default.Fragment, null)),
|
|
65
67
|
react_1.default.createElement(TripteaseLodgingSearchSchema_1.TripteaseLodgingSearchSchema, null)));
|
|
66
68
|
};
|
|
67
69
|
exports.UserSearchSummary = UserSearchSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserSearchSummary.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/UserSearchSummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAA0C;AAC1C,iDAA+C;AAE/C,iEAA2E;AAC3E,mEAA2C;AAC3C,8DAA+E;AAE/E,sEAAmE;AACnE,yEAAiD;AACjD,qDAAsD;AACtD,kFAA+E;AAC/E,iEAA8D;AAE9D,MAAM,oCAAoC,GAAG,IAAA,kDAA8B,EAAC,kBAAQ,CAAC,CAAC;AAE/E,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"UserSearchSummary.js","sourceRoot":"/","sources":["src/components/steps/room/UserSearchSummary/UserSearchSummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,2CAAkD;AAClD,+CAA0C;AAC1C,iDAA+C;AAE/C,iEAA2E;AAC3E,mEAA2C;AAC3C,8DAA+E;AAE/E,sEAAmE;AACnE,yEAAiD;AACjD,qDAAsD;AACtD,kFAA+E;AAC/E,iEAA8D;AAE9D,MAAM,oCAAoC,GAAG,IAAA,kDAA8B,EAAC,kBAAQ,CAAC,CAAC;AAE/E,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC3B,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAClG,YAAY,CAAC,IAAI,mBAAS,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF,OAAO,CACH;QACK,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,8BAAC,2CAAoB,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,GAAI,CAAC;QAC9E,CAAC,CAAC;QAED,iBAAiB,CAAC,CAAC,CAAC,CACjB,uCAAK,SAAS,EAAC,4BAA4B;YACvC,8BAAC,oCAAoC,IAAC,IAAI,EAAE,eAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,UAClG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CACP,CACrC,CACT,CAAC,CAAC,CAAC,CACA,6DAAK,CACR;QAED,8BAAC,2DAA4B,OAAG,CACjC,CACN,CAAC;AACN,CAAC,CAAC;AA7BW,QAAA,iBAAiB,qBA6B5B","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { withNextStepConfirmationDialog } from '@/hooks/useNextStepAction';\nimport BasketRow from '@/models/BasketRow';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nimport { Translation } from '../../../../translations/Translation';\nimport BEButton from '../../../generic/BEButton';\nimport { IconType } from '../../../generic/Icon/Icon';\nimport { TripteaseLodgingSearchSchema } from '../TripteaseLodgingSearchSchema';\nimport { UserSearchSummaryRow } from './UserSearchSummaryRow';\n\nconst ButtonWithNextStepConfirmationDialog = withNextStepConfirmationDialog(BEButton);\n\nexport const UserSearchSummary = () => {\n const { currentBasketRows, addBasketRow, canAddAnotherRoom } = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n const addRoomRowOnClick = () => {\n DataLayer.instance.sendInteraction('Add Room Row', InteractionType.BUTTON, InteractionStep.ROOMS);\n addBasketRow(new BasketRow());\n };\n\n return (\n <>\n {currentBasketRows.map((row, index) => {\n return <UserSearchSummaryRow row={row} index={index} key={row.getID()} />;\n })}\n\n {canAddAnotherRoom ? (\n <div className=\"u-flex justify-content-end\">\n <ButtonWithNextStepConfirmationDialog icon={IconType.Add} onClick={addRoomRowOnClick} stopIconAnimation>\n {t(Translation.Step.Room.RoomInfo.AddRoom)}\n </ButtonWithNextStepConfirmationDialog>\n </div>\n ) : (\n <></>\n )}\n\n <TripteaseLodgingSearchSchema />\n </>\n );\n};\n"]}
|
|
@@ -140,9 +140,9 @@ const UserSearchSummaryRow = ({ row, index }) => {
|
|
|
140
140
|
infants: row === null || row === void 0 ? void 0 : row.getInfants(),
|
|
141
141
|
});
|
|
142
142
|
const { getMaxSelectableAdults, showChildren, getMaxSelectableInfants, getMaxSelectableChildren } = (0, useSearchScopeHook_1.useSearchScopeHook)();
|
|
143
|
-
const maxAdults = getMaxSelectableAdults({ adults: guests.adults, children: guests.children });
|
|
143
|
+
const maxAdults = getMaxSelectableAdults({ adults: guests.adults, children: guests.children, infants: guests.infants });
|
|
144
144
|
const maxChildren = getMaxSelectableChildren({ adults: guests.adults });
|
|
145
|
-
const maxInfants = getMaxSelectableInfants();
|
|
145
|
+
const maxInfants = getMaxSelectableInfants({ adults: guests.adults });
|
|
146
146
|
const removeButton = (react_1.default.createElement(Tooltip_1.default, { title: canRemove ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.', followElement: removeButtonRef === null || removeButtonRef === void 0 ? void 0 : removeButtonRef.current, wrapperClasses: UserSearchSummaryRow_module_scss_1.default['user-search-summary-row__remove-tooltip'] },
|
|
147
147
|
react_1.default.createElement("div", { className: UserSearchSummaryRow_module_scss_1.default['user-search-summary-row__remove'], onClick: removeRoomOnClick, ref: removeButtonRef },
|
|
148
148
|
react_1.default.createElement(BEButton_1.default, { textColor: textColor, isText: true, icon: Icon_1.IconType.Close, iconPosition: "right", stopIconAnimation: true, disabled: !canRemove, onClick: removeRoomOnClick }))));
|