@roomstay/frontend 2.6.81 → 2.6.82
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/370.bundle.js +1 -1
- package/dist/375.bundle.js +1 -1
- package/dist/430.bundle.js +1 -1
- package/dist/537.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.d.ts +5 -1
- package/dist/src/api/AvailabilityAPI.js +23 -12
- package/dist/src/api/AvailabilityAPI.js.map +1 -1
- package/dist/src/api/ReservationAPI.js +12 -9
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/components/User/Forms/SignInForm.js.map +1 -1
- package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js +2 -2
- package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js.map +1 -1
- package/dist/src/components/reservation/ReservationItem.d.ts +1 -0
- package/dist/src/components/reservation/ReservationItem.js +2 -2
- package/dist/src/components/reservation/ReservationItem.js.map +1 -1
- package/dist/src/components/reservation/ReservationList.d.ts +1 -0
- package/dist/src/components/reservation/ReservationList.js +2 -2
- package/dist/src/components/reservation/ReservationList.js.map +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +8 -0
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js +5 -4
- package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js.map +1 -1
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +6 -4
- package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +0 -5
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +2 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/unavailableRoom/UnavailableRoom.js +6 -2
- package/dist/src/components/steps/room/roomDetails/unavailableRoom/UnavailableRoom.js.map +1 -1
- package/dist/src/components/summary/BEMobileSummaryModal.js +11 -10
- package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
- package/dist/src/components/summary/BESummary.js +4 -4
- package/dist/src/components/summary/BESummary.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +3 -3
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +145 -73
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -2
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +3 -2
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +23 -7
- package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
- package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +0 -1
- package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.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/Client/Hotel/Hotel.d.ts +1 -1
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Room/RoomRate.d.ts +8 -1
- package/dist/src/models/Room/RoomRate.js +24 -0
- package/dist/src/models/Room/RoomRate.js.map +1 -1
- package/dist/src/pages/account/AccountHome/AccountHomePage.js +1 -1
- package/dist/src/pages/account/AccountHome/AccountHomePage.js.map +1 -1
- package/dist/src/pages/account/AccountRoutes.d.ts +5 -0
- package/dist/src/pages/account/AccountRoutes.js +8 -2
- package/dist/src/pages/account/AccountRoutes.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +21 -6
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationsPage.js +7 -7
- package/dist/src/pages/account/Reservations/AccountReservationsPage.js.map +1 -1
- package/dist/src/translations/Translation.js +1 -1
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/util/Analytics/Analytics.d.ts +33 -9
- package/dist/src/util/Analytics/Analytics.js +26 -0
- package/dist/src/util/Analytics/Analytics.js.map +1 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +2 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.js +9 -0
- package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
- package/dist/src/util/Analytics/UniversalAnalytics.d.ts +4 -22
- package/dist/src/util/Analytics/UniversalAnalytics.js +23 -4
- package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
- package/dist/src/util/DataLayer.d.ts +7 -2
- package/dist/src/util/DataLayer.js +47 -18
- package/dist/src/util/DataLayer.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservationItem.js","sourceRoot":"/","sources":["src/components/reservation/ReservationItem.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, IRoomstayMemberBookingItemWithRefAndHotelDetails } from '@frontend/contexts';\nimport { EBookingStatus } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport EventCarouselContainer from '@/components/Event/EventCarouselContainer';\nimport BEButton, { BEButtonProps } from '@/components/generic/BEButton';\nimport Headline, { HeadlineProps } from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport NoPrint from '@/components/generic/print/NoPrint';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useCurrentHotel } from '@/hooks';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color, getAccentOverrideStyleContent } from '@/util/Color';\nimport { isCancelledBooking, isPastBooking } from '@/util/EventsHelper';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { GroupedCheckInOutTimes } from '../generic/GroupedCheckInOutTimes/GroupedCheckInOutTimes';\nimport styles from './ReservationItem.module.scss';\n\nexport enum ReservationAction {\n MoreDetails = 'MoreDetails',\n BookAgain = 'BookAgain',\n Cancel = 'Cancel',\n Modify = 'Modify',\n}\n\nexport type ReservationItemProps = {\n itineraryItem: IRoomstayMemberBookingItemWithRefAndHotelDetails;\n disableMarginBottom?: boolean;\n actions?: ReservationAction[];\n showCancelledNotifications?: boolean;\n onActionClick?: (action: ReservationAction, item: IRoomstayMemberBookingItemWithRefAndHotelDetails) => void;\n defaultEventsExpanded?: boolean;\n};\n\nconst defaultActions: ReservationAction[] = [ReservationAction.MoreDetails];\n\nconst ReservationItem = (props: ReservationItemProps) => {\n const { itineraryItem, disableMarginBottom, actions = defaultActions, showCancelledNotifications = false, defaultEventsExpanded } = props;\n\n // no events should be shown on “Past Stays” or “Cancelled Stays”\n const hideEvents = isCancelledBooking(itineraryItem) || isPastBooking(itineraryItem);\n\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const { getHotel } = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n const [bookingHotel, setBookingHotel] = useState<Hotel>();\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const nameSize: HeadlineProps['size'] = isMobile ? 'normal' : 'large';\n\n const renderActions = () =>\n actions.map((action, index) => {\n const defaultButtonProps: BEButtonProps = {\n mobileWidth: true,\n rounded: true,\n wide: isMobile,\n key: index,\n className: classNames({\n 'u-marg-right@m': index === 0,\n }),\n };\n\n const onActionClick = () => {\n if (props.onActionClick) {\n props.onActionClick(action, itineraryItem);\n }\n };\n\n /**\n * Only renders Cancel/Modify if the booking is NOT cancelled\n */\n if (cancelled && [ReservationAction.Cancel, ReservationAction.Modify].includes(action)) {\n return;\n }\n\n /**\n * Only renders BookAgain if booking IS cancelled\n */\n if (!cancelled && action === ReservationAction.BookAgain) {\n return;\n }\n\n switch (action) {\n case ReservationAction.Modify:\n return ModifyBookingFeature.isActive() ? (\n <BEButton {...defaultButtonProps} icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onActionClick} disabled={!itineraryItem.isCancellable}>\n {t(Translation.Reservation.ModifyThisRoom)}\n </BEButton>\n ) : null;\n case ReservationAction.Cancel:\n return (\n <BEButton {...defaultButtonProps} danger onClick={onActionClick} disabled={!itineraryItem.isCancellable}>\n {t(Translation.Reservation.CancelReservation)}\n </BEButton>\n );\n case ReservationAction.BookAgain:\n return (\n <Link to={StepManager.getFirstStep().getStepUrl()} key={index}>\n <BEButton {...defaultButtonProps} icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onActionClick}>\n {t(Translation.Reservation.BookAgain)}\n </BEButton>\n </Link>\n );\n case ReservationAction.MoreDetails:\n return (\n <Link to={`${AccountRoutes.SingleReservation.path}${itineraryItem.bookingId}/item`} key={index}>\n <BEButton {...defaultButtonProps} primary filled icon={IconType.ArrowRight} iconPosition=\"right\">\n {t(Translation.Reservation.MoreDetails)}\n </BEButton>\n </Link>\n );\n }\n });\n\n if (!itineraryItem) {\n return <></>;\n }\n\n useEffect(() => {\n if (itineraryItem?.hotelId) {\n getHotel(itineraryItem.hotelId).then((hotel) => {\n setBookingHotel(hotel);\n });\n }\n }, [itineraryItem?.hotelId, getHotel]);\n\n const itineraryItemNights = Object.keys(itineraryItem.nights);\n\n const checkInDate = dayjs(itineraryItem.checkInDate);\n const checkOutDate = dayjs(itineraryItem.checkOutDate);\n\n const reservationOccupancy = itineraryItem.adults + (itineraryItem?.children || 0);\n\n const cancelled = itineraryItem.status === EBookingStatus.Cancelled;\n\n const colorProfile = itineraryItem?.hotel?.colors;\n\n return (\n <div id={`reservation-${itineraryItem.id}`} className={classNames({ 'u-marg-bottom--heavy u-marg-bottom@m-': !disableMarginBottom })}>\n {showCancelledNotifications && cancelled && (\n <div className={styles['cancelledNotification']}>\n <div className={styles['cancelledNotification-icon']}>\n <Icon icon={IconType.Error} size=\"44px\" color={Color.Danger} />\n </div>\n <div>\n <Text type={TextType.Small} bold color={Color.Danger} className={styles['cancelledNotification-title']}>\n {t(Translation.Reservation.Notification.ThisRoomIsCancelled.Title)}\n </Text>\n <Trans\n i18nKey={Translation.Reservation.Notification.ThisRoomIsCancelled.Detail}\n components={[<Link key={0} to={AccountRoutes.Help.path} style={{ color: Color.Accent }}></Link>]}\n />\n </div>\n </div>\n )}\n <div className=\"reservation-item-container\">\n {!!colorProfile && (\n <style>\n {`\n #reservation-${itineraryItem.id} {\n ${getAccentOverrideStyleContent(colorProfile)}\n }\n `}\n </style>\n )}\n\n <div className=\"reservation-item\">\n <div className={classNames('reservation-item--image u-border-rounded u-print-none', { 'reservation-item--disabled': cancelled })}>\n <ImageGallerySlider images={itineraryItem.images} imageSize={ImageSize.Medium} />\n <div className=\"reservation-item--floating-date\">\n <Headline size=\"extra-large\" color={cancelled ? Color.DarkGrey : Color.White} align={TextAlign.Center}>\n {checkInDate.format('DD')}\n </Headline>\n <Text type={TextType.Small} color={cancelled ? Color.DarkGrey : Color.White} bold>\n {checkInDate.format('MMM YYYY')}\n </Text>\n </div>\n </div>\n\n <div className=\"reservation-item--content u-pad--heavy u-pad-left-none@m- u-pad-right-none@m- u-pad-bottom-none@m- u-print-pad-left-none\">\n <div className=\"reservation-item--content-title u-marg-bottom--light\">\n {hotel?.hotelID !== itineraryItem.hotelId && (\n <Text color={Color.Accent} size={nameSize} bold>\n {itineraryItem.hotel.name}\n </Text>\n )}\n <Headline bold size={nameSize}>\n {itineraryItem.roomName}\n </Headline>\n </div>\n <div className=\"text-body u-marg-bottom\">{(itineraryItem?.profile?.firstName ?? '') + ' ' + (itineraryItem?.profile?.lastName ?? '')}</div>\n <div className=\"reservation-item--info u-marg-bottom--heavy\">\n <div className=\"u-flex u-flex-gap--light\">\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <Text type={TextType.Small}>{checkInDate.format('D MMM, YYYY')}</Text>\n </div>\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.ArrowRight2} color={Color.Grey} />\n <Text type={TextType.Small}>{checkOutDate.format('D MMM, YYYY')}</Text>\n </div>\n </div>\n <div className=\"u-flex u-flex-gap\">\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.LateCheckout} color={Color.Grey} />\n <Text type={TextType.Small}>{`${itineraryItemNights.length} night${itineraryItemNights.length > 1 ? 's' : ''}`}</Text>\n </div>\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.Person} color={Color.Grey} />\n <Text type={TextType.Small}>{`${reservationOccupancy} guest${reservationOccupancy > 1 ? 's' : ''}`}</Text>\n </div>\n </div>\n </div>\n <GroupedCheckInOutTimes\n hotel={bookingHotel}\n wrapperClassName=\"reservation-item--checkin-checkout u-flex justify-content-start u-pad u-border-rounded\"\n colClassName=\"u-marg-right--heavy\"\n CheckInRender={() => (\n <Text type={TextType.Small} color={Color.DarkGrey} className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CheckIn)}\n </Text>\n )}\n CheckOutRender={() => (\n <Text type={TextType.Small} color={Color.DarkGrey} className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CheckOut)}\n </Text>\n )}\n LineRender={({ line }: { line: string }) => {\n const TextContainer = isMobile ? Text : Headline;\n return <TextContainer>{line}</TextContainer>;\n }}\n />\n <div className=\"reservation-item--actions u-flex justify-content-start u-print-none u-marg-top--heavy\">{renderActions()}</div>\n </div>\n </div>\n </div>\n\n {hideEvents ? null : (\n <NoPrint>\n <div className=\"u-marg-top--medium\">\n <EventCarouselContainer defaultExpanded={defaultEventsExpanded} itineraryItem={itineraryItem} />\n </div>\n </NoPrint>\n )}\n </div>\n );\n};\n\nexport default ReservationItem;\n"]}
|
|
1
|
+
{"version":3,"file":"ReservationItem.js","sourceRoot":"/","sources":["src/components/reservation/ReservationItem.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, IRoomstayMemberBookingItemWithRefAndHotelDetails } from '@frontend/contexts';\nimport { EBookingStatus } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport EventCarouselContainer from '@/components/Event/EventCarouselContainer';\nimport BEButton, { BEButtonProps } from '@/components/generic/BEButton';\nimport Headline, { HeadlineProps } from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport NoPrint from '@/components/generic/print/NoPrint';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useCurrentHotel } from '@/hooks';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { AccountRoutes } from '@/pages/account/AccountRoutes';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color, getAccentOverrideStyleContent } from '@/util/Color';\nimport { isCancelledBooking, isPastBooking } from '@/util/EventsHelper';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { GroupedCheckInOutTimes } from '../generic/GroupedCheckInOutTimes/GroupedCheckInOutTimes';\nimport styles from './ReservationItem.module.scss';\n\nexport enum ReservationAction {\n MoreDetails = 'MoreDetails',\n BookAgain = 'BookAgain',\n Cancel = 'Cancel',\n Modify = 'Modify',\n}\n\nexport type ReservationItemProps = {\n itineraryItem: IRoomstayMemberBookingItemWithRefAndHotelDetails;\n disableMarginBottom?: boolean;\n actions?: ReservationAction[];\n showCancelledNotifications?: boolean;\n onActionClick?: (action: ReservationAction, item: IRoomstayMemberBookingItemWithRefAndHotelDetails) => void;\n defaultEventsExpanded?: boolean;\n navPath: string;\n};\n\nconst defaultActions: ReservationAction[] = [ReservationAction.MoreDetails];\n\nconst ReservationItem = (props: ReservationItemProps) => {\n const { itineraryItem, disableMarginBottom, actions = defaultActions, showCancelledNotifications = false, defaultEventsExpanded, navPath } = props;\n\n // no events should be shown on “Past Stays” or “Cancelled Stays”\n const hideEvents = isCancelledBooking(itineraryItem) || isPastBooking(itineraryItem);\n\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const { getHotel } = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n const [bookingHotel, setBookingHotel] = useState<Hotel>();\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const nameSize: HeadlineProps['size'] = isMobile ? 'normal' : 'large';\n\n const renderActions = () =>\n actions.map((action, index) => {\n const defaultButtonProps: BEButtonProps = {\n mobileWidth: true,\n rounded: true,\n wide: isMobile,\n key: index,\n className: classNames({\n 'u-marg-right@m': index === 0,\n }),\n };\n\n const onActionClick = () => {\n if (props.onActionClick) {\n props.onActionClick(action, itineraryItem);\n }\n };\n\n /**\n * Only renders Cancel/Modify if the booking is NOT cancelled\n */\n if (cancelled && [ReservationAction.Cancel, ReservationAction.Modify].includes(action)) {\n return;\n }\n\n /**\n * Only renders BookAgain if booking IS cancelled\n */\n if (!cancelled && action === ReservationAction.BookAgain) {\n return;\n }\n\n switch (action) {\n case ReservationAction.Modify:\n return ModifyBookingFeature.isActive() ? (\n <BEButton {...defaultButtonProps} icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onActionClick} disabled={!itineraryItem.isCancellable}>\n {t(Translation.Reservation.ModifyThisRoom)}\n </BEButton>\n ) : null;\n case ReservationAction.Cancel:\n return (\n <BEButton {...defaultButtonProps} danger onClick={onActionClick} disabled={!itineraryItem.isCancellable}>\n {t(Translation.Reservation.CancelReservation)}\n </BEButton>\n );\n case ReservationAction.BookAgain:\n return (\n <Link to={StepManager.getFirstStep().getStepUrl()} key={index}>\n <BEButton {...defaultButtonProps} icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onActionClick}>\n {t(Translation.Reservation.BookAgain)}\n </BEButton>\n </Link>\n );\n case ReservationAction.MoreDetails:\n return (\n <Link to={`${AccountRoutes.SingleReservation.path}${`${navPath}/`}${itineraryItem.bookingId}/item`} key={index}>\n <BEButton {...defaultButtonProps} primary filled icon={IconType.ArrowRight} iconPosition=\"right\">\n {t(Translation.Reservation.MoreDetails)}\n </BEButton>\n </Link>\n );\n }\n });\n\n if (!itineraryItem) {\n return <></>;\n }\n\n useEffect(() => {\n if (itineraryItem?.hotelId) {\n getHotel(itineraryItem.hotelId).then((hotel) => {\n setBookingHotel(hotel);\n });\n }\n }, [itineraryItem?.hotelId, getHotel]);\n\n const itineraryItemNights = Object.keys(itineraryItem.nights);\n\n const checkInDate = dayjs(itineraryItem.checkInDate);\n const checkOutDate = dayjs(itineraryItem.checkOutDate);\n\n const reservationOccupancy = itineraryItem.adults + (itineraryItem?.children || 0);\n\n const cancelled = itineraryItem.status === EBookingStatus.Cancelled;\n\n const colorProfile = itineraryItem?.hotel?.colors;\n\n return (\n <div id={`reservation-${itineraryItem.id}`} className={classNames({ 'u-marg-bottom--heavy u-marg-bottom@m-': !disableMarginBottom })}>\n {showCancelledNotifications && cancelled && (\n <div className={styles['cancelledNotification']}>\n <div className={styles['cancelledNotification-icon']}>\n <Icon icon={IconType.Error} size=\"44px\" color={Color.Danger} />\n </div>\n <div>\n <Text type={TextType.Small} bold color={Color.Danger} className={styles['cancelledNotification-title']}>\n {t(Translation.Reservation.Notification.ThisRoomIsCancelled.Title)}\n </Text>\n <Trans\n i18nKey={Translation.Reservation.Notification.ThisRoomIsCancelled.Detail}\n components={[<Link key={0} to={AccountRoutes.Help.path} style={{ color: Color.Accent }}></Link>]}\n />\n </div>\n </div>\n )}\n <div className=\"reservation-item-container\">\n {!!colorProfile && (\n <style>\n {`\n #reservation-${itineraryItem.id} {\n ${getAccentOverrideStyleContent(colorProfile)}\n }\n `}\n </style>\n )}\n\n <div className=\"reservation-item\">\n <div className={classNames('reservation-item--image u-border-rounded u-print-none', { 'reservation-item--disabled': cancelled })}>\n <ImageGallerySlider images={itineraryItem.images} imageSize={ImageSize.Medium} />\n <div className=\"reservation-item--floating-date\">\n <Headline size=\"extra-large\" color={cancelled ? Color.DarkGrey : Color.White} align={TextAlign.Center}>\n {checkInDate.format('DD')}\n </Headline>\n <Text type={TextType.Small} color={cancelled ? Color.DarkGrey : Color.White} bold>\n {checkInDate.format('MMM YYYY')}\n </Text>\n </div>\n </div>\n\n <div className=\"reservation-item--content u-pad--heavy u-pad-left-none@m- u-pad-right-none@m- u-pad-bottom-none@m- u-print-pad-left-none\">\n <div className=\"reservation-item--content-title u-marg-bottom--light\">\n {hotel?.hotelID !== itineraryItem.hotelId && (\n <Text color={Color.Accent} size={nameSize} bold>\n {itineraryItem.hotel.name}\n </Text>\n )}\n <Headline bold size={nameSize}>\n {itineraryItem.roomName}\n </Headline>\n </div>\n <div className=\"text-body u-marg-bottom\">{(itineraryItem?.profile?.firstName ?? '') + ' ' + (itineraryItem?.profile?.lastName ?? '')}</div>\n <div className=\"reservation-item--info u-marg-bottom--heavy\">\n <div className=\"u-flex u-flex-gap--light\">\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <Text type={TextType.Small}>{checkInDate.format('D MMM, YYYY')}</Text>\n </div>\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.ArrowRight2} color={Color.Grey} />\n <Text type={TextType.Small}>{checkOutDate.format('D MMM, YYYY')}</Text>\n </div>\n </div>\n <div className=\"u-flex u-flex-gap\">\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.LateCheckout} color={Color.Grey} />\n <Text type={TextType.Small}>{`${itineraryItemNights.length} night${itineraryItemNights.length > 1 ? 's' : ''}`}</Text>\n </div>\n <div className=\"u-flex u-flex-nowrap u-flex-gap--light\">\n <Icon icon={IconType.Person} color={Color.Grey} />\n <Text type={TextType.Small}>{`${reservationOccupancy} guest${reservationOccupancy > 1 ? 's' : ''}`}</Text>\n </div>\n </div>\n </div>\n <GroupedCheckInOutTimes\n hotel={bookingHotel}\n wrapperClassName=\"reservation-item--checkin-checkout u-flex justify-content-start u-pad u-border-rounded\"\n colClassName=\"u-marg-right--heavy\"\n CheckInRender={() => (\n <Text type={TextType.Small} color={Color.DarkGrey} className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CheckIn)}\n </Text>\n )}\n CheckOutRender={() => (\n <Text type={TextType.Small} color={Color.DarkGrey} className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CheckOut)}\n </Text>\n )}\n LineRender={({ line }: { line: string }) => {\n const TextContainer = isMobile ? Text : Headline;\n return <TextContainer>{line}</TextContainer>;\n }}\n />\n <div className=\"reservation-item--actions u-flex justify-content-start u-print-none u-marg-top--heavy\">{renderActions()}</div>\n </div>\n </div>\n </div>\n\n {hideEvents ? null : (\n <NoPrint>\n <div className=\"u-marg-top--medium\">\n <EventCarouselContainer defaultExpanded={defaultEventsExpanded} itineraryItem={itineraryItem} />\n </div>\n </NoPrint>\n )}\n </div>\n );\n};\n\nexport default ReservationItem;\n"]}
|
|
@@ -7,6 +7,7 @@ interface ReservationListProps extends EmptyReservationProps {
|
|
|
7
7
|
actions?: ReservationItemProps['actions'];
|
|
8
8
|
onActionClick?: ReservationItemProps['onActionClick'];
|
|
9
9
|
showCancelledNotifications?: boolean;
|
|
10
|
+
navPath: string;
|
|
10
11
|
}
|
|
11
12
|
declare const ReservationList: React.FC<ReservationListProps>;
|
|
12
13
|
export default ReservationList;
|
|
@@ -7,11 +7,11 @@ const react_1 = __importDefault(require("react"));
|
|
|
7
7
|
const EmptyReservation_1 = __importDefault(require("./EmptyReservation"));
|
|
8
8
|
const ReservationItem_1 = __importDefault(require("./ReservationItem"));
|
|
9
9
|
const ReservationList = (props) => {
|
|
10
|
-
const { reservationItems = [], actions, isCancelled } = props;
|
|
10
|
+
const { reservationItems = [], actions, isCancelled, navPath } = props;
|
|
11
11
|
if (!reservationItems.length) {
|
|
12
12
|
return react_1.default.createElement(EmptyReservation_1.default, { isCancelled: isCancelled });
|
|
13
13
|
}
|
|
14
|
-
return (react_1.default.createElement("div", { className: "reservation-list" }, reservationItems.map((reservationItem, index) => (react_1.default.createElement(ReservationItem_1.default, { key: reservationItem.id, itineraryItem: reservationItem, disableMarginBottom: index === reservationItems.length - 1, actions: actions, onActionClick: props.onActionClick, showCancelledNotifications: props.showCancelledNotifications, defaultEventsExpanded: index === 0 })))));
|
|
14
|
+
return (react_1.default.createElement("div", { className: "reservation-list" }, reservationItems.map((reservationItem, index) => (react_1.default.createElement(ReservationItem_1.default, { key: reservationItem.id, itineraryItem: reservationItem, disableMarginBottom: index === reservationItems.length - 1, actions: actions, onActionClick: props.onActionClick, showCancelledNotifications: props.showCancelledNotifications, defaultEventsExpanded: index === 0, navPath: navPath })))));
|
|
15
15
|
};
|
|
16
16
|
exports.default = ReservationList;
|
|
17
17
|
//# sourceMappingURL=ReservationList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservationList.js","sourceRoot":"/","sources":["src/components/reservation/ReservationList.tsx"],"names":[],"mappings":";;;;;AACA,kDAA0B;AAE1B,iGAAoG;AACpG,+FAAiG;
|
|
1
|
+
{"version":3,"file":"ReservationList.js","sourceRoot":"/","sources":["src/components/reservation/ReservationList.tsx"],"names":[],"mappings":";;;;;AACA,kDAA0B;AAE1B,iGAAoG;AACpG,+FAAiG;AAUjG,MAAM,eAAe,GAAmC,CAAC,KAAK,EAAE,EAAE;IAC9D,MAAM,EAAE,gBAAgB,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEvE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;QAC1B,OAAO,8BAAC,0BAAgB,IAAC,WAAW,EAAE,WAAW,GAAI,CAAC;KACzD;IAED,OAAO,CACH,uCAAK,SAAS,EAAC,kBAAkB,IAC5B,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9C,8BAAC,yBAAe,IACZ,GAAG,EAAE,eAAe,CAAC,EAAE,EACvB,aAAa,EAAE,eAAe,EAC9B,mBAAmB,EAAE,KAAK,KAAK,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAC1D,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,0BAA0B,EAAE,KAAK,CAAC,0BAA0B,EAC5D,qBAAqB,EAAE,KAAK,KAAK,CAAC,EAClC,OAAO,EAAE,OAAO,GAClB,CACL,CAAC,CACA,CACT,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC","sourcesContent":["import { IRoomstayMemberBookingItemWithRefAndHotelDetails } from '@frontend/contexts';\nimport React from 'react';\n\nimport EmptyReservation, { EmptyReservationProps } from '@/components/reservation/EmptyReservation';\nimport ReservationItem, { ReservationItemProps } from '@/components/reservation/ReservationItem';\n\ninterface ReservationListProps extends EmptyReservationProps {\n reservationItems: IRoomstayMemberBookingItemWithRefAndHotelDetails[];\n actions?: ReservationItemProps['actions'];\n onActionClick?: ReservationItemProps['onActionClick'];\n showCancelledNotifications?: boolean;\n navPath: string;\n}\n\nconst ReservationList: React.FC<ReservationListProps> = (props) => {\n const { reservationItems = [], actions, isCancelled, navPath } = props;\n\n if (!reservationItems.length) {\n return <EmptyReservation isCancelled={isCancelled} />;\n }\n\n return (\n <div className=\"reservation-list\">\n {reservationItems.map((reservationItem, index) => (\n <ReservationItem\n key={reservationItem.id}\n itineraryItem={reservationItem}\n disableMarginBottom={index === reservationItems.length - 1}\n actions={actions}\n onActionClick={props.onActionClick}\n showCancelledNotifications={props.showCancelledNotifications}\n defaultEventsExpanded={index === 0}\n navPath={navPath}\n />\n ))}\n </div>\n );\n};\n\nexport default ReservationList;\n"]}
|
|
@@ -43,6 +43,7 @@ const Text_1 = __importStar(require("../../generic/Text"));
|
|
|
43
43
|
const ImageProvider_1 = __importStar(require("../../../providers/ImageProvider"));
|
|
44
44
|
const Translation_1 = require("../../../translations/Translation");
|
|
45
45
|
const Color_1 = require("../../../util/Color");
|
|
46
|
+
const DataLayer_1 = __importDefault(require("../../../util/DataLayer"));
|
|
46
47
|
const AddonCard = ({ addon, className }) => {
|
|
47
48
|
var _a, _b;
|
|
48
49
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
@@ -86,6 +87,13 @@ const AddonCard = ({ addon, className }) => {
|
|
|
86
87
|
adult: adultQuantity,
|
|
87
88
|
child: childQuantity,
|
|
88
89
|
}, selectedDate, selectedTime);
|
|
90
|
+
const basketAddonRow = basketContext.basketAddonRows.find((row) => {
|
|
91
|
+
return row.getAddon().code === addon.code;
|
|
92
|
+
});
|
|
93
|
+
const selectedBasketRow = basketContext.currentBasketRows[0];
|
|
94
|
+
if (basketAddonRow && selectedBasketRow) {
|
|
95
|
+
DataLayer_1.default.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());
|
|
96
|
+
}
|
|
89
97
|
};
|
|
90
98
|
const classes = (0, classnames_1.default)({
|
|
91
99
|
'--active': !!basketContext.getRowForAddon(addon),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EAddonPricingType } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: priceInfo?.price && priceInfo?.quantity > 1,\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: priceInfo?.adultPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: priceInfo?.childPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n\n {/* {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )} */}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <>\n <div className=\"u-flex align-items-end\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n </>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {hotel?.enableCreditCardSurcharge || hasFees ? t(Translation.Step.Addon.ExcludingFees) : t(Translation.Step.Addon.IncludingFeesAndTaxes)}\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
|
|
1
|
+
{"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EAddonPricingType } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n const basketAddonRow = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n const selectedBasketRow = basketContext.currentBasketRows[0];\n if (basketAddonRow && selectedBasketRow) {\n DataLayer.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());\n }\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: priceInfo?.price && priceInfo?.quantity > 1,\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: priceInfo?.adultPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: priceInfo?.childPrice && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS && addon.pricingType !== EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n\n {/* {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )} */}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <>\n <div className=\"u-flex align-items-end\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n </>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {hotel?.enableCreditCardSurcharge || hasFees ? t(Translation.Step.Addon.ExcludingFees) : t(Translation.Step.Addon.IncludingFeesAndTaxes)}\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
|
|
@@ -52,8 +52,9 @@ function StepConfirmationPolicyBlock() {
|
|
|
52
52
|
policiesGrouped[0] = { rooms: [{ index: 1, room: rooms[0] }] };
|
|
53
53
|
}
|
|
54
54
|
return (react_1.default.createElement("div", { className: "u-marg-bottom step-confirmation-policy-block" }, Object.values(policiesGrouped).map((group, index) => {
|
|
55
|
-
var _a, _b
|
|
55
|
+
var _a, _b;
|
|
56
56
|
const firstRoom = group.rooms[0];
|
|
57
|
+
const guaranteePolicy = (_a = firstRoom.room.getRate()) === null || _a === void 0 ? void 0 : _a.getGuaranteePolicy();
|
|
57
58
|
return (react_1.default.createElement("div", { className: "u-marg-bottom--heavy", key: index },
|
|
58
59
|
react_1.default.createElement("div", { className: "u-marg-bottom" }, group.rooms.map((roomWithIndex) => {
|
|
59
60
|
var _a;
|
|
@@ -67,13 +68,13 @@ function StepConfirmationPolicyBlock() {
|
|
|
67
68
|
" - ", (_a = roomWithIndex.room.getRate()) === null || _a === void 0 ? void 0 :
|
|
68
69
|
_a.name));
|
|
69
70
|
})),
|
|
70
|
-
react_1.default.createElement("div", { className: "u-marg-bottom" }, (
|
|
71
|
+
react_1.default.createElement("div", { className: "u-marg-bottom" }, (guaranteePolicy === null || guaranteePolicy === void 0 ? void 0 : guaranteePolicy.longDescription) && !guaranteePolicy.hide && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
71
72
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true, className: "u-marg-bottom--light" }, t(Translation_1.Translation.Misc.GuaranteePolicy)),
|
|
72
73
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
73
|
-
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content:
|
|
74
|
+
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: guaranteePolicy.longDescription }))))),
|
|
74
75
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true, className: "u-marg-bottom--light" }, t(Translation_1.Translation.Misc.CancellationPolicy)),
|
|
75
76
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
76
|
-
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: ((
|
|
77
|
+
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: ((_b = firstRoom.room.getRate()) === null || _b === void 0 ? void 0 : _b.getCancellationPolicy()) || '' }))));
|
|
77
78
|
})));
|
|
78
79
|
}, [basketContext.currentBasketRows]);
|
|
79
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepConfirmationPolicyBlock.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationPolicyBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmD;AACnD,+CAAmD;AACnD,iDAA+C;AAC/C,0DAAuD;AAEvD,8EAA2E;AAC3E,kEAA2D;AAG3D,SAAwB,2BAA2B;IAC/C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,eAAe,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAChB,MAAM,eAAe,GAAwE,EAAE,CAAC;QAChG,MAAM,KAAK,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;QAE9C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnB,SAAS,EAAE,CAAC;gBAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,GAAG,eAAe,CAAC,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,EAAE,CAAC,CAAC;gBAEhF,IAAI,CAAC,KAAK,EAAE;oBACR,KAAK,GAAG,eAAe,CAAC,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;iBAC/F;gBAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;SACN;aAAM;YACH,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SAClE;QAED,OAAO,CACH,uCAAK,SAAS,EAAC,8CAA8C,IACxD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;;YACjD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"StepConfirmationPolicyBlock.js","sourceRoot":"/","sources":["src/components/steps/confirmation/StepConfirmationPolicyBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Text, { TextType } from '@/components/generic/Text';\nimport BasketRow from '@/models/BasketRow';\n\nexport default function StepConfirmationPolicyBlock() {\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n const roomTranslation = t(Translation.Misc.Room);\n\n return useMemo(() => {\n const policiesGrouped: { [uniq: string]: { rooms: { index: number; room: BasketRow }[] } } = {};\n const rooms = basketContext.getAllValidRows();\n\n let roomIndex = 0;\n\n if (rooms.length > 1) {\n rooms.forEach((room) => {\n roomIndex++;\n\n const rate = room.getRate();\n let entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`];\n\n if (!entry) {\n entry = policiesGrouped[`${rate?.cancelPolicyCode}-${rate?.guaranteeCode}`] = { rooms: [] };\n }\n\n entry.rooms.push({ index: roomIndex, room });\n });\n } else {\n policiesGrouped[0] = { rooms: [{ index: 1, room: rooms[0] }] };\n }\n\n return (\n <div className=\"u-marg-bottom step-confirmation-policy-block\">\n {Object.values(policiesGrouped).map((group, index) => {\n const firstRoom = group.rooms[0];\n const guaranteePolicy = firstRoom.room.getRate()?.getGuaranteePolicy();\n\n return (\n <div className=\"u-marg-bottom--heavy\" key={index}>\n <div className=\"u-marg-bottom\">\n {group.rooms.map((roomWithIndex) => {\n return (\n <Text key={roomWithIndex.index} type={TextType.Small}>\n <strong>\n {roomTranslation} {roomWithIndex.index}\n </strong>{' '}\n {roomWithIndex.room.getRoom().name} - {roomWithIndex.room.getRate()?.name}\n </Text>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n {guaranteePolicy?.longDescription && !guaranteePolicy.hide && (\n <>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.GuaranteePolicy)}\n </Text>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={guaranteePolicy.longDescription} />\n </Text>\n </>\n )}\n </div>\n <Text type={TextType.Small} bold className=\"u-marg-bottom--light\">\n {t(Translation.Misc.CancellationPolicy)}\n </Text>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={firstRoom.room.getRate()?.getCancellationPolicy() || ''} />\n </Text>\n </div>\n );\n })}\n </div>\n );\n }, [basketContext.currentBasketRows]);\n}\n"]}
|
package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js
CHANGED
|
@@ -58,7 +58,7 @@ const TrueRewardsPaymentMethod = ({ onApplied }) => {
|
|
|
58
58
|
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
|
|
59
59
|
const trimmedReference = cardReference.trim();
|
|
60
60
|
const canSubmit = trimmedReference.length > 6;
|
|
61
|
-
const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;
|
|
61
|
+
const remaining = cardBalance !== null && totalPayNow !== null ? cardBalance - totalPayNow : 0;
|
|
62
62
|
const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = (0, Currency_1.default)({ children: remaining });
|
|
63
63
|
const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = (0, Currency_1.default)({ children: cardBalance });
|
|
64
64
|
const checkCardBalance = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -74,7 +74,7 @@ const TrueRewardsPaymentMethod = ({ onApplied }) => {
|
|
|
74
74
|
}
|
|
75
75
|
else {
|
|
76
76
|
setCardBalance(balance);
|
|
77
|
-
if (totalPayNow > balance) {
|
|
77
|
+
if (totalPayNow && totalPayNow > balance) {
|
|
78
78
|
onApplied === null || onApplied === void 0 ? void 0 : onApplied(balance, true);
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
@@ -100,8 +100,10 @@ const TrueRewardsPaymentMethod = ({ onApplied }) => {
|
|
|
100
100
|
react_1.default.createElement(BEButton_1.default, { className: TrueRewardsPaymentMethod_module_scss_1.default.applyCodeButton, isLoading: isLoading, size: "small", onClick: checkCardBalance, disabled: !canSubmit, icon: cardBalance !== null ? Icon_1.IconType.Check : Icon_1.IconType.ArrowRight, iconPosition: "right", iconSize: "18px", rounded: true }, cardBalance !== null ? t(Translation_1.Translation.Step.Confirmation.CodeApplied) : t(Translation_1.Translation.Step.Confirmation.ApplyCode))),
|
|
101
101
|
cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.infoBlock },
|
|
102
102
|
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.leftContent },
|
|
103
|
-
react_1.default.createElement(Text_1.default, { bold: true, type: Text_1.TextType.Small }, cardBalance >= totalPayNow
|
|
104
|
-
|
|
103
|
+
react_1.default.createElement(Text_1.default, { bold: true, type: Text_1.TextType.Small }, totalPayNow && cardBalance >= totalPayNow
|
|
104
|
+
? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullBooking)
|
|
105
|
+
: t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficient)),
|
|
106
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, totalPayNow && cardBalance >= totalPayNow
|
|
105
107
|
? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)
|
|
106
108
|
: t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficientInstructions))),
|
|
107
109
|
react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.rightContent },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrueRewardsPaymentMethod.js","sourceRoot":"/","sources":["src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport useCurrency from '@/hooks/Currency';\nimport { API, useBasket, useCurrentHotel } from '@/index';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './TrueRewardsPaymentMethod.module.scss';\n\ntype Props = {\n onApplied?: (balance: number | null, isApplied: boolean) => void;\n};\n\nexport const TrueRewardsPaymentMethod: FC<Props> = ({ onApplied }) => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { getTotalPayNow } = useBasket();\n const totalPayNow = getTotalPayNow();\n\n const [cardReference, setCardReference] = useState('');\n const [cardBalance, setCardBalance] = useState<number | null>(null);\n const [errorMessage, setErrorMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const trimmedReference = cardReference.trim();\n const canSubmit = trimmedReference.length > 6;\n const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;\n\n const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = useCurrency({ children: remaining });\n const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = useCurrency({ children: cardBalance });\n\n const checkCardBalance = async () => {\n setErrorMessage('');\n setCardBalance(null);\n onApplied?.(null, false);\n\n if (hotel?.hotelID) {\n try {\n setIsLoading(true);\n const balance = await API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);\n\n if (balance === null) {\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsInvalid));\n } else {\n setCardBalance(balance);\n\n if (totalPayNow > balance) {\n onApplied?.(balance, true);\n } else {\n onApplied?.(null, true);\n }\n }\n } catch (e) {\n console.error(e);\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsFailed));\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.inputRow}>\n <TextBox\n value={cardReference}\n onChange={(val) => {\n setCardReference(val.target.value);\n setErrorMessage('');\n }}\n placeholder={t(Translation.Step.Confirmation.EnterCode)}\n />\n <BEButton\n className={styles.applyCodeButton}\n isLoading={isLoading}\n size=\"small\"\n onClick={checkCardBalance}\n disabled={!canSubmit}\n icon={cardBalance !== null ? IconType.Check : IconType.ArrowRight}\n iconPosition=\"right\"\n iconSize=\"18px\"\n rounded\n >\n {cardBalance !== null ? t(Translation.Step.Confirmation.CodeApplied) : t(Translation.Step.Confirmation.ApplyCode)}\n </BEButton>\n </div>\n {cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (\n <div className={styles.infoBlock}>\n <div className={styles.leftContent}>\n <Text bold type={TextType.Small}>\n {cardBalance >= totalPayNow ? t(Translation.Step.Confirmation.TrueRewardsCoversFullBooking) : t(Translation.Step.Confirmation.TrueRewardsInsufficient)}\n </Text>\n <Text type={TextType.Small}>\n {cardBalance >= totalPayNow\n ? t(Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)\n : t(Translation.Step.Confirmation.TrueRewardsInsufficientInstructions)}\n </Text>\n </div>\n <div className={styles.rightContent}>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.YourBalance)}</Text>\n <Text bold color={Color.Navy}>\n {symbol}\n {cardBalancePrettyValue}\n </Text>\n </div>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Remaining)}</Text>\n <Text bold color={remaining < 0 ? Color.Danger : Color.Navy}>\n {symbol}\n {remainingPrettyValue}\n </Text>\n </div>\n </div>\n </div>\n ) : (\n <>\n {errorMessage && (\n <Text color={Color.Danger} type={TextType.Small} style={{ marginTop: '8px' }}>\n {errorMessage}\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} style={{ marginTop: '8px' }}>\n {t(Translation.Step.Confirmation.TrueRewardsInputHelperText)}\n </Text>\n </>\n )}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"TrueRewardsPaymentMethod.js","sourceRoot":"/","sources":["src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport useCurrency from '@/hooks/Currency';\nimport { API, useBasket, useCurrentHotel } from '@/index';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './TrueRewardsPaymentMethod.module.scss';\n\ntype Props = {\n onApplied?: (balance: number | null, isApplied: boolean) => void;\n};\n\nexport const TrueRewardsPaymentMethod: FC<Props> = ({ onApplied }) => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { getTotalPayNow } = useBasket();\n const totalPayNow = getTotalPayNow();\n\n const [cardReference, setCardReference] = useState('');\n const [cardBalance, setCardBalance] = useState<number | null>(null);\n const [errorMessage, setErrorMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const trimmedReference = cardReference.trim();\n const canSubmit = trimmedReference.length > 6;\n const remaining = cardBalance !== null && totalPayNow !== null ? cardBalance - totalPayNow : 0;\n\n const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = useCurrency({ children: remaining });\n const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = useCurrency({ children: cardBalance });\n\n const checkCardBalance = async () => {\n setErrorMessage('');\n setCardBalance(null);\n onApplied?.(null, false);\n\n if (hotel?.hotelID) {\n try {\n setIsLoading(true);\n const balance = await API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);\n\n if (balance === null) {\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsInvalid));\n } else {\n setCardBalance(balance);\n\n if (totalPayNow && totalPayNow > balance) {\n onApplied?.(balance, true);\n } else {\n onApplied?.(null, true);\n }\n }\n } catch (e) {\n console.error(e);\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsFailed));\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.inputRow}>\n <TextBox\n value={cardReference}\n onChange={(val) => {\n setCardReference(val.target.value);\n setErrorMessage('');\n }}\n placeholder={t(Translation.Step.Confirmation.EnterCode)}\n />\n <BEButton\n className={styles.applyCodeButton}\n isLoading={isLoading}\n size=\"small\"\n onClick={checkCardBalance}\n disabled={!canSubmit}\n icon={cardBalance !== null ? IconType.Check : IconType.ArrowRight}\n iconPosition=\"right\"\n iconSize=\"18px\"\n rounded\n >\n {cardBalance !== null ? t(Translation.Step.Confirmation.CodeApplied) : t(Translation.Step.Confirmation.ApplyCode)}\n </BEButton>\n </div>\n {cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (\n <div className={styles.infoBlock}>\n <div className={styles.leftContent}>\n <Text bold type={TextType.Small}>\n {totalPayNow && cardBalance >= totalPayNow\n ? t(Translation.Step.Confirmation.TrueRewardsCoversFullBooking)\n : t(Translation.Step.Confirmation.TrueRewardsInsufficient)}\n </Text>\n <Text type={TextType.Small}>\n {totalPayNow && cardBalance >= totalPayNow\n ? t(Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)\n : t(Translation.Step.Confirmation.TrueRewardsInsufficientInstructions)}\n </Text>\n </div>\n <div className={styles.rightContent}>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.YourBalance)}</Text>\n <Text bold color={Color.Navy}>\n {symbol}\n {cardBalancePrettyValue}\n </Text>\n </div>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Remaining)}</Text>\n <Text bold color={remaining < 0 ? Color.Danger : Color.Navy}>\n {symbol}\n {remainingPrettyValue}\n </Text>\n </div>\n </div>\n </div>\n ) : (\n <>\n {errorMessage && (\n <Text color={Color.Danger} type={TextType.Small} style={{ marginTop: '8px' }}>\n {errorMessage}\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} style={{ marginTop: '8px' }}>\n {t(Translation.Step.Confirmation.TrueRewardsInputHelperText)}\n </Text>\n </>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -132,11 +132,6 @@ const AvailableUpgradesModal = () => {
|
|
|
132
132
|
DataLayer_1.default.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate(), rate);
|
|
133
133
|
row.setRate(rate, RoomUpsellFeature_1.default.isActive());
|
|
134
134
|
basketContext.updateBasketRow(row);
|
|
135
|
-
// TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.
|
|
136
|
-
// This is a workaround to force the quote details to be reloaded
|
|
137
|
-
if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
|
|
138
|
-
basketContext.quoteOrPencilReservation(() => true);
|
|
139
|
-
}
|
|
140
135
|
closeModal();
|
|
141
136
|
}
|
|
142
137
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber, true).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n\n // TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.\n // This is a workaround to force the quote details to be reloaded\n if (hotel?.requireDeposit) {\n basketContext.quoteOrPencilReservation(() => true);\n }\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
|
|
1
|
+
{"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber, true).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
|
|
@@ -124,12 +124,12 @@ function RoomRateDescriptionTab(props) {
|
|
|
124
124
|
react_1.default.createElement(Text_1.default, null,
|
|
125
125
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Confirmation.Policies)))),
|
|
126
126
|
react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
127
|
-
guaranteePolicy && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
127
|
+
(guaranteePolicy === null || guaranteePolicy === void 0 ? void 0 : guaranteePolicy.longDescription) && !guaranteePolicy.hide && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
128
128
|
react_1.default.createElement("div", { className: "u-marg-bottom--light" },
|
|
129
129
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
130
130
|
react_1.default.createElement("strong", null, t(Translation_1.Translation.Misc.GuaranteePolicy)))),
|
|
131
131
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|
|
132
|
-
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: guaranteePolicy })))),
|
|
132
|
+
react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: guaranteePolicy.longDescription })))),
|
|
133
133
|
react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
|
|
134
134
|
react_1.default.createElement("div", { className: "u-marg-bottom--light" },
|
|
135
135
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
|