@roomstay/frontend 2.6.62 → 2.6.63
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/537.bundle.js +1 -1
- package/dist/950.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/ReservationAPI.d.ts +23 -3
- package/dist/src/api/ReservationAPI.js +75 -31
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/components/User/Forms/ForgotPasswordForm.js +11 -5
- package/dist/src/components/User/Forms/ForgotPasswordForm.js.map +1 -1
- package/dist/src/components/User/Forms/SignInForm.js +5 -2
- package/dist/src/components/User/Forms/SignInForm.js.map +1 -1
- package/dist/src/components/User/Forms/SignUpForm.d.ts +5 -0
- package/dist/src/components/User/Forms/SignUpForm.js +27 -10
- package/dist/src/components/User/Forms/SignUpForm.js.map +1 -1
- package/dist/src/components/generic/date/DatePicker.js +1 -1
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/members/InlineSignUpSection.d.ts +7 -0
- package/dist/src/components/members/InlineSignUpSection.js +122 -0
- package/dist/src/components/members/InlineSignUpSection.js.map +1 -0
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js +4 -4
- package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js +78 -33
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -1
- package/dist/src/components/members/SignInModal/MemberSignInModal.js +11 -1
- package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -1
- package/dist/src/components/reservation/ReservationItem.js +1 -1
- package/dist/src/components/reservation/ReservationItem.js.map +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +14 -14
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/components/steps/confirmation/RoomContactDetails.js +12 -12
- package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/summary/BESummaryAddonRow.js +1 -1
- package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextType.d.ts +2 -5
- package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +48 -22
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +4 -0
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +18 -18
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +3 -0
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
- package/dist/src/hooks/useSignedInMember.d.ts +1 -1
- package/dist/src/models/Addon/Addon.d.ts +6 -64
- package/dist/src/models/Addon/Addon.js +14 -28
- package/dist/src/models/Addon/Addon.js.map +1 -1
- package/dist/src/models/BasketAddonRow.js +3 -2
- package/dist/src/models/BasketAddonRow.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +1 -0
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +3 -2
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +1 -0
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/models/UserProfile.d.ts +20 -20
- package/dist/src/models/UserProfile.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +2 -2
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +6 -4
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
- package/dist/src/providers/feature/MemberPortalFeature.d.ts +7 -1
- package/dist/src/providers/feature/MemberPortalFeature.js +11 -0
- package/dist/src/providers/feature/MemberPortalFeature.js.map +1 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +1 -1
- package/dist/src/util/Analytics/UniversalAnalytics.d.ts +1 -1
- package/dist/src/util/EventsHelper.js +1 -1
- package/dist/src/util/EventsHelper.js.map +1 -1
- package/dist/src/util/TotalCalculator.js +2 -2
- package/dist/src/util/TotalCalculator.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountReservationSinglePage.js","sourceRoot":"/","sources":["src/pages/account/Reservations/AccountReservationSinglePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, IRoomstayMemberBookingItemWithRefAndHotelDetails, RoomstayMemberContext } from '@frontend/contexts';\nimport { calculateTotalForMemberBooking, IBookingStatus, IRoomstayMemberBooking } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { Fragment, useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport { Card } from '@/components/generic/Card/Card/Card';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport IconText from '@/components/generic/IconText/IconText';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Pill, { PillType, PillVariant } from '@/components/generic/Pill';\nimport PrintOnly from '@/components/generic/print/PrintOnly';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ReservationAction } from '@/components/reservation/ReservationItem';\nimport ReservationList from '@/components/reservation/ReservationList';\nimport { useCurrentHotel } from '@/hooks';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport { Color, getAccentOverrideStyleContent } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport { AccountRoutes } from '../AccountRoutes';\n\nconst getRoomNamesString = (itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[]) => {\n const roomNames: { [name: string]: number } = {};\n\n for (const itinerary of itineraries) {\n roomNames[itinerary.roomName] = (roomNames[itinerary.roomName] ?? 0) + 1;\n }\n\n return Object.keys(roomNames)\n .map((name) => {\n const numOfRooms = roomNames[name];\n if (numOfRooms <= 1) return `${name}`;\n })\n .join(' + ');\n};\n\ntype CancelReservationModalProps = {\n items: IRoomstayMemberBookingItemWithRefAndHotelDetails[];\n booking: IRoomstayMemberBooking;\n\n visible: boolean;\n onClose: () => void;\n};\n\nconst CancelReservationModal = (props: CancelReservationModalProps) => {\n const { items, booking, visible, onClose } = props;\n const { fetchRoomstayMember } = useContext(RoomstayMemberContext);\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const onCancelClick = () => {\n const cancellations = [];\n\n setIsLoading(true);\n for (const item of items) {\n cancellations.push(API.Reservation.cancelReservation(item.id, item.profile.email as string, booking.hotelId));\n }\n\n Promise.all(cancellations).then(() => {\n fetchRoomstayMember?.().then(() => {\n setIsLoading(false);\n onClose();\n });\n });\n };\n\n const footers = (\n <div className=\"d-flex u-pad align-items-center justify-content-center\">\n <div className=\"u-marg-right\">\n <BEButton isText onClick={onClose}>\n {t(Translation.Misc.Abort)}\n </BEButton>\n </div>\n <BEButton filled primary onClick={onCancelClick} isLoading={isLoading}>\n {t(Translation.Misc.YesImSure)}\n </BEButton>\n </div>\n );\n\n return (\n <SimpleModal\n title={t(Translation.Misc.CancellingReservation)}\n open={visible}\n size={SimpleModalSize.ExtraSmall}\n desktopFooter={footers}\n mobileFooter={footers}\n onClose={onClose}\n >\n <div className=\"u-pad\">\n <Text>{t(Translation.Misc.ThisWillCancel)}</Text>\n {/*TODO: Update wording to include all reservations*/}\n </div>\n </SimpleModal>\n );\n};\n\ntype CodeNumberInformationType = {\n itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[];\n booking: IRoomstayMemberBooking;\n};\n\nconst CodeNumberInformation = (props: CodeNumberInformationType) => {\n const { itineraries, booking } = props;\n const { t } = useTranslation();\n\n const [cancelled, confirmed] = useMemo(() => {\n const cancelled = [];\n const confirmed = [];\n\n for (const item of itineraries) {\n if (item.status === IBookingStatus.Cancelled) {\n cancelled.push(item);\n } else {\n confirmed.push(item);\n }\n }\n\n return [cancelled, confirmed];\n }, itineraries);\n\n return (\n <Card className=\"w-100\" title={t(Translation.Reservation.CodeNumberInformation)}>\n {[\n { label: 'Cancelled', value: cancelled, type: PillType.Danger },\n { label: 'Confirmed', value: confirmed, type: PillType.Success },\n ].map((item, index) => {\n if (item.value.length > 0) {\n return (\n <Fragment key={index}>\n <Text className=\"u-marg-right--light\" inline type={TextType.Small}>\n {item.label}\n </Text>\n {item.value.map((row, rowIndex) => {\n return (\n <Fragment key={rowIndex}>\n <Text className=\"u-marg-right\" inline type={TextType.Small}>\n <Pill type={item.type}>#{row.id}</Pill>\n </Text>\n </Fragment>\n );\n })}\n <br />\n </Fragment>\n );\n }\n })}\n <div className=\"u-marg-top\">\n <Text className=\"u-marg-right--light\" inline type={TextType.Small}>\n {t(Translation.UserPortal.ReservationSingleScreen.Itinerary)}\n </Text>\n <Pill variant={PillVariant.Outlined} type={PillType.Grey}>\n #{booking.itineraryId}\n </Pill>\n </div>\n </Card>\n );\n};\n\nconst displayTime = (timeString: string) => dayjs().set('hours', +timeString.slice(0, 2)).set('minute', +timeString.slice(2)).format('h:mm A');\n\nexport const AccountReservationSinglePage = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const beContext = useContext(BookingEngineContext);\n const { getHotel } = useContext(CompanyContext);\n const ccx = useContext(CompanyContext);\n\n const { getItinerary } = useMember();\n const [showingCancellationFor, setShowingCancellationFor] = useState<IRoomstayMemberBookingItemWithRefAndHotelDetails[] | null>(null);\n\n const [bookingHotel, setBookingHotel] = useState<Hotel>();\n\n const isMobile = beContext.screenSize <= ScreenSize.Medium;\n\n const params = useParams<{ resId: string }>();\n\n const [booking, itineraries]: [IRoomstayMemberBooking, IRoomstayMemberBookingItemWithRefAndHotelDetails[]] = useMemo(() => {\n if (!params.resId) {\n throw new Error('Missing reservation ID parameter.');\n }\n\n const itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[] = [];\n\n const booking = getItinerary(params.resId);\n\n if (booking?.itinerary) {\n for (const itinerary of Object.values(booking.itinerary)) {\n itineraries.push({\n ...itinerary,\n bookingId: booking.itineraryId,\n hotel: booking.hotel,\n hotelId: booking.hotelId,\n });\n }\n }\n\n return [booking as IRoomstayMemberBooking, itineraries];\n }, [params, getItinerary]);\n\n useEffect(() => {\n if (booking && booking.hotelId) {\n getHotel(booking.hotelId).then((hotel) => {\n setBookingHotel(hotel);\n });\n }\n }, [booking, getHotel]);\n\n const allCancelled = useMemo(() => itineraries.every((row) => row.status === IBookingStatus.Cancelled), [itineraries]);\n\n const allCancellable = useMemo(() => itineraries.every((row) => row.isCancellable), [itineraries]);\n\n if (!booking) {\n return <>{t(Translation.Misc.Loading)}</>;\n }\n\n const { line1, line2, postalCode, country } = bookingHotel?.address ?? {};\n\n const onActionClick = (action: ReservationAction, item: IRoomstayMemberBookingItemWithRefAndHotelDetails) => {\n switch (action) {\n case ReservationAction.Cancel:\n setShowingCancellationFor([item]);\n break;\n }\n };\n\n const onCloseCancellationModal = () => {\n setShowingCancellationFor(null);\n };\n\n const onPrintClicked = () => {\n window.print();\n };\n\n const hotelImageElement =\n hotel?.logo && typeof hotel.logo !== 'string' ? hotel.logo : <img src={typeof hotel?.logo === 'string' ? hotel.logo : ccx.logo} alt=\"Hotel Logo\" className=\"u-block\" />;\n\n return (\n <div id={`reservation-body-${booking.itineraryId}`}>\n {!!booking?.hotel?.colors && <style>{`#reservation-body-${booking.itineraryId} {${getAccentOverrideStyleContent(booking.hotel.colors)}}`}</style>}\n <div className=\"u-marg-top--heavy@m u-marg-top@m- u-marg-bottom--light u-print-none\">\n <Link to={AccountRoutes.Reservations.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.Reservation.BackToYourReservations)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-flex-align-stretch@m- u-flex u-flex-align-flex-end u-marg-bottom u-pad-top@m u-flex-direction-column@m- u-print-none\">\n <div>\n <Text className=\"u-marg-bottom--light\">{StringHelper.pluralWithCount(itineraries.length, 'Room', t)}</Text>\n <Headline size=\"extra-large\" className=\"u-marg-bottom--light\">\n {getRoomNamesString(itineraries)}\n </Headline>\n <Text type={TextType.Body}>\n {bookingHotel?.name} • {[line1, line2, postalCode, country].filter((value) => !!value).join(' ')}\n </Text>\n </div>\n <div className=\"u-flex u-flex-gap u-flex-direction-column@m- u-flex-gap--light@m- u-marg-top--heavy@m-\">\n <BEButton wide={isMobile} rounded={isMobile} textColor={Color.Navy} isText={!isMobile} icon={IconType.Share} iconPosition=\"left\">\n {t(Translation.Reservation.Share)}\n </BEButton>\n <BEButton\n wide={isMobile}\n mobileWidth\n rounded={isMobile}\n textColor={Color.Navy}\n className=\"\"\n isText={!isMobile}\n icon={IconType.Print}\n iconPosition=\"left\"\n onClick={onPrintClicked}\n >\n {t(Translation.Reservation.Print)}\n </BEButton>\n {!allCancelled && (\n <>\n {ModifyBookingFeature.isActive() ? (\n <BEButton wide={isMobile} mobileWidth rounded={isMobile} textColor={Color.Navy} isText={!isMobile} disabled={!allCancellable}>\n {StringHelper.plural(itineraries.length, t(Translation.Reservation.ModifyReservation), t)}\n </BEButton>\n ) : null}\n <BEButton\n danger\n wide={isMobile}\n mobileWidth\n rounded={isMobile}\n textColor={Color.Alert}\n isText={!isMobile}\n onClick={() => setShowingCancellationFor(itineraries)}\n disabled={!allCancellable}\n >\n {StringHelper.plural(itineraries.length, t(Translation.Reservation.CancelReservation), t)}\n </BEButton>\n </>\n )}\n </div>\n </div>\n\n <span className=\"u-print-none\">\n <LineBreak smallMargins fullBleed />\n </span>\n\n <PrintOnly>\n <div className=\"c-header d-inline-block\">\n <div className=\"c-header__logo u-flex u-flex-align-center\">{hotelImageElement}</div>\n </div>\n </PrintOnly>\n\n <div className=\"u-marg-bottom--massive u-marg-bottom--none@m- u-print-marg-none u-marg-top--heavy\">\n <ReservationList\n actions={[ReservationAction.Cancel, ReservationAction.Modify, ReservationAction.BookAgain]}\n reservationItems={itineraries}\n onActionClick={onActionClick}\n showCancelledNotifications\n />\n </div>\n <LineBreak noMargins={isMobile} />\n <div className=\"u-flex u-marg-top--heavy@m-\">\n <Headline size=\"large\" bold>\n {t(Translation.Reservation.Total)}\n </Headline>\n <div className=\"u-flex align-items-end flex-column\">\n <Headline lineThrough size=\"large\" bold>\n <Currency>{calculateTotalForMemberBooking(booking)}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Reservation.PriceNote)}\n </Text>\n </div>\n </div>\n\n <div className=\"row u-marg-top--massive@m u-marg-top--heavy@m-\">\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <Card className=\"w-100\" title={t(Translation.Navigation.Menu.PaymentInformation)}>\n <IconText icon={IconType.Person}>{itineraries?.[0]?.profile?.firstName + ' ' + itineraries?.[0]?.profile?.lastName}</IconText>\n <IconText icon={IconType.Email}>{itineraries?.[0]?.profile?.email}</IconText>\n <IconText icon={IconType.CreditCard} TextProps={{ type: TextType.Small }}>\n •••• •••• •••• 1111 <span style={{ color: Color.DarkGrey }}>(Visa)</span>\n </IconText>\n </Card>\n </div>\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <Card className=\"w-100\" title={t(Translation.Reservation.HotelInformation)}>\n <IconText icon={IconType.Map}>\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </IconText>\n <IconText icon={IconType.Phone}>{bookingHotel?.phone}</IconText>\n </Card>\n </div>\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <CodeNumberInformation itineraries={itineraries} booking={booking} />\n </div>\n </div>\n <div className=\"u-marg-top--massive@m u-marg-top@m- u-background--snow u-w-fluid u-pad-top--massive@m u-pad-top--heavy@m- u-pad-bottom--heavy @m- u-pad-bottom--massive@m\">\n <div className=\"container\">\n <Text bold> {t(Translation.Reservation.Policies)}</Text>\n <div className=\"u-marg-top--medium\">\n <div className=\"u-w-100 row\">\n <div className=\"u-flex u-flex-direction-column@m- u-flex-gap--medium@m- col-6 col-md-3\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Reservation.CheckIn)}</strong>\n <br />\n {t(Translation.Reservation.After)} {displayTime(booking.hotel.checkInTime)}\n </Text>\n <Text type={TextType.Small}>\n <strong>{t(Translation.Reservation.CheckOut)}</strong>\n <br />\n {t(Translation.Reservation.Before)} {displayTime(booking.hotel.checkOutTime)}\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-marg-bottom\">\n {itineraries.map((itinerary, index) => (\n <div key={index} className=\"u-marg-top--heavy\">\n <div className=\"u-marg-bottom\">\n <Text key={index} type={TextType.Small}>\n <strong>\n {t(Translation.Misc.Room)} {index + 1}\n </strong>\n \n {itinerary.roomName} - {itinerary.rateName}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n {itinerary.guaranteePolicyLongDescription ? (\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 <span dangerouslySetInnerHTML={{ __html: itinerary.guaranteePolicyLongDescription || '' }}></span>\n </Text>\n </>\n ) : null}\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 <span dangerouslySetInnerHTML={{ __html: itinerary.cancellationPolicyLongDescription || '' }}></span>\n </Text>\n </div>\n ))}\n </div>\n </div>\n </div>\n <CancelReservationModal\n onClose={onCloseCancellationModal}\n items={showingCancellationFor as IRoomstayMemberBookingItemWithRefAndHotelDetails[]}\n booking={booking}\n visible={!!showingCancellationFor}\n />\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AccountReservationSinglePage.js","sourceRoot":"/","sources":["src/pages/account/Reservations/AccountReservationSinglePage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, IRoomstayMemberBookingItemWithRefAndHotelDetails, RoomstayMemberContext } from '@frontend/contexts';\nimport { calculateTotalForMemberBooking, EBookingStatus, IRoomstayMemberBooking } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { Fragment, useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport { Card } from '@/components/generic/Card/Card/Card';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport IconText from '@/components/generic/IconText/IconText';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Pill, { PillType, PillVariant } from '@/components/generic/Pill';\nimport PrintOnly from '@/components/generic/print/PrintOnly';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ReservationAction } from '@/components/reservation/ReservationItem';\nimport ReservationList from '@/components/reservation/ReservationList';\nimport { useCurrentHotel } from '@/hooks';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport { Color, getAccentOverrideStyleContent } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport { AccountRoutes } from '../AccountRoutes';\n\nconst getRoomNamesString = (itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[]) => {\n const roomNames: { [name: string]: number } = {};\n\n for (const itinerary of itineraries) {\n roomNames[itinerary.roomName] = (roomNames[itinerary.roomName] ?? 0) + 1;\n }\n\n return Object.keys(roomNames)\n .map((name) => {\n const numOfRooms = roomNames[name];\n if (numOfRooms <= 1) return `${name}`;\n })\n .join(' + ');\n};\n\ntype CancelReservationModalProps = {\n items: IRoomstayMemberBookingItemWithRefAndHotelDetails[];\n booking: IRoomstayMemberBooking;\n\n visible: boolean;\n onClose: () => void;\n};\n\nconst CancelReservationModal = (props: CancelReservationModalProps) => {\n const { items, booking, visible, onClose } = props;\n const { fetchRoomstayMember } = useContext(RoomstayMemberContext);\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const onCancelClick = () => {\n const cancellations = [];\n\n setIsLoading(true);\n for (const item of items) {\n cancellations.push(API.Reservation.cancelReservation(item.id, item.profile.email as string, booking.hotelId));\n }\n\n Promise.all(cancellations).then(() => {\n fetchRoomstayMember?.().then(() => {\n setIsLoading(false);\n onClose();\n });\n });\n };\n\n const footers = (\n <div className=\"d-flex u-pad align-items-center justify-content-center\">\n <div className=\"u-marg-right\">\n <BEButton isText onClick={onClose}>\n {t(Translation.Misc.Abort)}\n </BEButton>\n </div>\n <BEButton filled primary onClick={onCancelClick} isLoading={isLoading}>\n {t(Translation.Misc.YesImSure)}\n </BEButton>\n </div>\n );\n\n return (\n <SimpleModal\n title={t(Translation.Misc.CancellingReservation)}\n open={visible}\n size={SimpleModalSize.ExtraSmall}\n desktopFooter={footers}\n mobileFooter={footers}\n onClose={onClose}\n >\n <div className=\"u-pad\">\n <Text>{t(Translation.Misc.ThisWillCancel)}</Text>\n {/*TODO: Update wording to include all reservations*/}\n </div>\n </SimpleModal>\n );\n};\n\ntype CodeNumberInformationType = {\n itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[];\n booking: IRoomstayMemberBooking;\n};\n\nconst CodeNumberInformation = (props: CodeNumberInformationType) => {\n const { itineraries, booking } = props;\n const { t } = useTranslation();\n\n const [cancelled, confirmed] = useMemo(() => {\n const cancelled = [];\n const confirmed = [];\n\n for (const item of itineraries) {\n if (item.status === EBookingStatus.Cancelled) {\n cancelled.push(item);\n } else {\n confirmed.push(item);\n }\n }\n\n return [cancelled, confirmed];\n }, itineraries);\n\n return (\n <Card className=\"w-100\" title={t(Translation.Reservation.CodeNumberInformation)}>\n {[\n { label: 'Cancelled', value: cancelled, type: PillType.Danger },\n { label: 'Confirmed', value: confirmed, type: PillType.Success },\n ].map((item, index) => {\n if (item.value.length > 0) {\n return (\n <Fragment key={index}>\n <Text className=\"u-marg-right--light\" inline type={TextType.Small}>\n {item.label}\n </Text>\n {item.value.map((row, rowIndex) => {\n return (\n <Fragment key={rowIndex}>\n <Text className=\"u-marg-right\" inline type={TextType.Small}>\n <Pill type={item.type}>#{row.id}</Pill>\n </Text>\n </Fragment>\n );\n })}\n <br />\n </Fragment>\n );\n }\n })}\n <div className=\"u-marg-top\">\n <Text className=\"u-marg-right--light\" inline type={TextType.Small}>\n {t(Translation.UserPortal.ReservationSingleScreen.Itinerary)}\n </Text>\n <Pill variant={PillVariant.Outlined} type={PillType.Grey}>\n #{booking.itineraryId}\n </Pill>\n </div>\n </Card>\n );\n};\n\nconst displayTime = (timeString: string) => dayjs().set('hours', +timeString.slice(0, 2)).set('minute', +timeString.slice(2)).format('h:mm A');\n\nexport const AccountReservationSinglePage = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const beContext = useContext(BookingEngineContext);\n const { getHotel } = useContext(CompanyContext);\n const ccx = useContext(CompanyContext);\n\n const { getItinerary } = useMember();\n const [showingCancellationFor, setShowingCancellationFor] = useState<IRoomstayMemberBookingItemWithRefAndHotelDetails[] | null>(null);\n\n const [bookingHotel, setBookingHotel] = useState<Hotel>();\n\n const isMobile = beContext.screenSize <= ScreenSize.Medium;\n\n const params = useParams<{ resId: string }>();\n\n const [booking, itineraries]: [IRoomstayMemberBooking, IRoomstayMemberBookingItemWithRefAndHotelDetails[]] = useMemo(() => {\n if (!params.resId) {\n throw new Error('Missing reservation ID parameter.');\n }\n\n const itineraries: IRoomstayMemberBookingItemWithRefAndHotelDetails[] = [];\n\n const booking = getItinerary(params.resId);\n\n if (booking?.itinerary) {\n for (const itinerary of Object.values(booking.itinerary)) {\n itineraries.push({\n ...itinerary,\n bookingId: booking.itineraryId,\n hotel: booking.hotel,\n hotelId: booking.hotelId,\n });\n }\n }\n\n return [booking as IRoomstayMemberBooking, itineraries];\n }, [params, getItinerary]);\n\n useEffect(() => {\n if (booking && booking.hotelId) {\n getHotel(booking.hotelId).then((hotel) => {\n setBookingHotel(hotel);\n });\n }\n }, [booking, getHotel]);\n\n const allCancelled = useMemo(() => itineraries.every((row) => row.status === EBookingStatus.Cancelled), [itineraries]);\n\n const allCancellable = useMemo(() => itineraries.every((row) => row.isCancellable), [itineraries]);\n\n if (!booking) {\n return <>{t(Translation.Misc.Loading)}</>;\n }\n\n const { line1, line2, postalCode, country } = bookingHotel?.address ?? {};\n\n const onActionClick = (action: ReservationAction, item: IRoomstayMemberBookingItemWithRefAndHotelDetails) => {\n switch (action) {\n case ReservationAction.Cancel:\n setShowingCancellationFor([item]);\n break;\n }\n };\n\n const onCloseCancellationModal = () => {\n setShowingCancellationFor(null);\n };\n\n const onPrintClicked = () => {\n window.print();\n };\n\n const hotelImageElement =\n hotel?.logo && typeof hotel.logo !== 'string' ? hotel.logo : <img src={typeof hotel?.logo === 'string' ? hotel.logo : ccx.logo} alt=\"Hotel Logo\" className=\"u-block\" />;\n\n return (\n <div id={`reservation-body-${booking.itineraryId}`}>\n {!!booking?.hotel?.colors && <style>{`#reservation-body-${booking.itineraryId} {${getAccentOverrideStyleContent(booking.hotel.colors)}}`}</style>}\n <div className=\"u-marg-top--heavy@m u-marg-top@m- u-marg-bottom--light u-print-none\">\n <Link to={AccountRoutes.Reservations.path}>\n <BEButton isText icon={IconType.ArrowLeft} size=\"small\">\n {t(Translation.Reservation.BackToYourReservations)}\n </BEButton>\n </Link>\n </div>\n <div className=\"u-flex-align-stretch@m- u-flex u-flex-align-flex-end u-marg-bottom u-pad-top@m u-flex-direction-column@m- u-print-none\">\n <div>\n <Text className=\"u-marg-bottom--light\">{StringHelper.pluralWithCount(itineraries.length, 'Room', t)}</Text>\n <Headline size=\"extra-large\" className=\"u-marg-bottom--light\">\n {getRoomNamesString(itineraries)}\n </Headline>\n <Text type={TextType.Body}>\n {bookingHotel?.name} • {[line1, line2, postalCode, country].filter((value) => !!value).join(' ')}\n </Text>\n </div>\n <div className=\"u-flex u-flex-gap u-flex-direction-column@m- u-flex-gap--light@m- u-marg-top--heavy@m-\">\n <BEButton wide={isMobile} rounded={isMobile} textColor={Color.Navy} isText={!isMobile} icon={IconType.Share} iconPosition=\"left\">\n {t(Translation.Reservation.Share)}\n </BEButton>\n <BEButton\n wide={isMobile}\n mobileWidth\n rounded={isMobile}\n textColor={Color.Navy}\n className=\"\"\n isText={!isMobile}\n icon={IconType.Print}\n iconPosition=\"left\"\n onClick={onPrintClicked}\n >\n {t(Translation.Reservation.Print)}\n </BEButton>\n {!allCancelled && (\n <>\n {ModifyBookingFeature.isActive() ? (\n <BEButton wide={isMobile} mobileWidth rounded={isMobile} textColor={Color.Navy} isText={!isMobile} disabled={!allCancellable}>\n {StringHelper.plural(itineraries.length, t(Translation.Reservation.ModifyReservation), t)}\n </BEButton>\n ) : null}\n <BEButton\n danger\n wide={isMobile}\n mobileWidth\n rounded={isMobile}\n textColor={Color.Alert}\n isText={!isMobile}\n onClick={() => setShowingCancellationFor(itineraries)}\n disabled={!allCancellable}\n >\n {StringHelper.plural(itineraries.length, t(Translation.Reservation.CancelReservation), t)}\n </BEButton>\n </>\n )}\n </div>\n </div>\n\n <span className=\"u-print-none\">\n <LineBreak smallMargins fullBleed />\n </span>\n\n <PrintOnly>\n <div className=\"c-header d-inline-block\">\n <div className=\"c-header__logo u-flex u-flex-align-center\">{hotelImageElement}</div>\n </div>\n </PrintOnly>\n\n <div className=\"u-marg-bottom--massive u-marg-bottom--none@m- u-print-marg-none u-marg-top--heavy\">\n <ReservationList\n actions={[ReservationAction.Cancel, ReservationAction.Modify, ReservationAction.BookAgain]}\n reservationItems={itineraries}\n onActionClick={onActionClick}\n showCancelledNotifications\n />\n </div>\n <LineBreak noMargins={isMobile} />\n <div className=\"u-flex u-marg-top--heavy@m-\">\n <Headline size=\"large\" bold>\n {t(Translation.Reservation.Total)}\n </Headline>\n <div className=\"u-flex align-items-end flex-column\">\n <Headline lineThrough size=\"large\" bold>\n <Currency>{calculateTotalForMemberBooking(booking)}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Reservation.PriceNote)}\n </Text>\n </div>\n </div>\n\n <div className=\"row u-marg-top--massive@m u-marg-top--heavy@m-\">\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <Card className=\"w-100\" title={t(Translation.Navigation.Menu.PaymentInformation)}>\n <IconText icon={IconType.Person}>{itineraries?.[0]?.profile?.firstName + ' ' + itineraries?.[0]?.profile?.lastName}</IconText>\n <IconText icon={IconType.Email}>{itineraries?.[0]?.profile?.email}</IconText>\n <IconText icon={IconType.CreditCard} TextProps={{ type: TextType.Small }}>\n •••• •••• •••• 1111 <span style={{ color: Color.DarkGrey }}>(Visa)</span>\n </IconText>\n </Card>\n </div>\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <Card className=\"w-100\" title={t(Translation.Reservation.HotelInformation)}>\n <IconText icon={IconType.Map}>\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </IconText>\n <IconText icon={IconType.Phone}>{bookingHotel?.phone}</IconText>\n </Card>\n </div>\n <div className=\"col-md-4 u-flex u-print-col-md-4\">\n <CodeNumberInformation itineraries={itineraries} booking={booking} />\n </div>\n </div>\n <div className=\"u-marg-top--massive@m u-marg-top@m- u-background--snow u-w-fluid u-pad-top--massive@m u-pad-top--heavy@m- u-pad-bottom--heavy @m- u-pad-bottom--massive@m\">\n <div className=\"container\">\n <Text bold> {t(Translation.Reservation.Policies)}</Text>\n <div className=\"u-marg-top--medium\">\n <div className=\"u-w-100 row\">\n <div className=\"u-flex u-flex-direction-column@m- u-flex-gap--medium@m- col-6 col-md-3\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Reservation.CheckIn)}</strong>\n <br />\n {t(Translation.Reservation.After)} {displayTime(booking.hotel.checkInTime)}\n </Text>\n <Text type={TextType.Small}>\n <strong>{t(Translation.Reservation.CheckOut)}</strong>\n <br />\n {t(Translation.Reservation.Before)} {displayTime(booking.hotel.checkOutTime)}\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-marg-bottom\">\n {itineraries.map((itinerary, index) => (\n <div key={index} className=\"u-marg-top--heavy\">\n <div className=\"u-marg-bottom\">\n <Text key={index} type={TextType.Small}>\n <strong>\n {t(Translation.Misc.Room)} {index + 1}\n </strong>\n \n {itinerary.roomName} - {itinerary.rateName}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n {itinerary.guaranteePolicyLongDescription ? (\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 <span dangerouslySetInnerHTML={{ __html: itinerary.guaranteePolicyLongDescription || '' }}></span>\n </Text>\n </>\n ) : null}\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 <span dangerouslySetInnerHTML={{ __html: itinerary.cancellationPolicyLongDescription || '' }}></span>\n </Text>\n </div>\n ))}\n </div>\n </div>\n </div>\n <CancelReservationModal\n onClose={onCloseCancellationModal}\n items={showingCancellationFor as IRoomstayMemberBookingItemWithRefAndHotelDetails[]}\n booking={booking}\n visible={!!showingCancellationFor}\n />\n </div>\n );\n};\n"]}
|
|
@@ -39,6 +39,7 @@ const Headline_1 = __importDefault(require("../../../components/generic/Headline
|
|
|
39
39
|
const Icon_1 = __importStar(require("../../../components/generic/Icon/Icon"));
|
|
40
40
|
const LineBreak_1 = __importDefault(require("../../../components/generic/LineBreak"));
|
|
41
41
|
const Text_1 = __importStar(require("../../../components/generic/Text"));
|
|
42
|
+
const InlineSignUpSection_1 = require("../../../components/members/InlineSignUpSection");
|
|
42
43
|
const CommonAddonSummary_1 = require("../../../components/steps/common/CommonAddonSummary/CommonAddonSummary");
|
|
43
44
|
const ItemisedFeesSummary_1 = require("../../../components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary");
|
|
44
45
|
const events_1 = require("../../../events");
|
|
@@ -47,7 +48,7 @@ const Color_1 = require("../../../util/Color");
|
|
|
47
48
|
const TextAlignment_1 = require("../../../util/TextAlignment");
|
|
48
49
|
const TotalCalculator_1 = require("../../../util/TotalCalculator");
|
|
49
50
|
function StepThanksComponent() {
|
|
50
|
-
var _a, _b, _c;
|
|
51
|
+
var _a, _b, _c, _d, _e;
|
|
51
52
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
52
53
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
53
54
|
const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
|
|
@@ -103,8 +104,9 @@ function StepThanksComponent() {
|
|
|
103
104
|
react_1.default.createElement("div", { className: "u-marg-bottom--massive" },
|
|
104
105
|
react_1.default.createElement(react_router_dom_1.Link, { to: "/" },
|
|
105
106
|
react_1.default.createElement(BEButton_1.default, null, t(Translation_1.Translation.Step.Thanks.GoBackHome)))),
|
|
107
|
+
((_c = (_b = checkoutData === null || checkoutData === void 0 ? void 0 : checkoutData.reservations) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.guest) && react_1.default.createElement(InlineSignUpSection_1.InlineSignUpSection, { reservation: checkoutData.reservations[0], hotelId: (hotel === null || hotel === void 0 ? void 0 : hotel.hotelID) || '' }),
|
|
106
108
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
107
|
-
react_1.default.createElement("div", { className: "u-marg-top w-100" }, (
|
|
109
|
+
react_1.default.createElement("div", { className: "u-marg-top w-100" }, (_d = checkoutData === null || checkoutData === void 0 ? void 0 : checkoutData.reservations) === null || _d === void 0 ? void 0 : _d.map((obj) => {
|
|
108
110
|
if (obj.addons) {
|
|
109
111
|
const nights = Object.keys(obj.nights);
|
|
110
112
|
obj.addons.forEach((addon) => {
|
|
@@ -136,8 +138,8 @@ function StepThanksComponent() {
|
|
|
136
138
|
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right }, t(Translation_1.Translation.Misc.Total)),
|
|
137
139
|
react_1.default.createElement(Headline_1.default, { bold: true, size: "large", align: TextAlignment_1.TextAlign.Right },
|
|
138
140
|
react_1.default.createElement(Currency_1.default, null, total)),
|
|
139
|
-
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right, color: Color_1.Color.DarkGrey }, t(Translation_1.Translation.Step.Thanks.IncludingTaxes)))))), (
|
|
140
|
-
|
|
141
|
+
react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right, color: Color_1.Color.DarkGrey }, t(Translation_1.Translation.Step.Thanks.IncludingTaxes)))))), (_e = checkoutData === null || checkoutData === void 0 ? void 0 : checkoutData.reservations) === null || _e === void 0 ? void 0 :
|
|
142
|
+
_e.map((obj, index) => {
|
|
141
143
|
const nightKeys = Object.keys(obj.nights);
|
|
142
144
|
const firstNight = (0, dayjs_1.default)(nightKeys[0]);
|
|
143
145
|
const lastNight = (0, dayjs_1.default)(nightKeys[nightKeys.length - 1]).add(1, 'day');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepThanksComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepThanks/StepThanksComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { StepThanksViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport { ReservationAddonDTO, ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport { SimpleItemisedFee } from '@/models/Fee';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { calculateTotalForReservation } from '@/util/TotalCalculator';\n\nexport default function StepThanksComponent() {\n const basketContext = useContext(BasketContext);\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const { raise } = useEvent();\n\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const checkoutData = basketContext.reservationData;\n\n const isFromRoomstay = checkoutData?.itineraryNumber?.startsWith('RS');\n\n const { t } = useTranslation();\n\n const total = useCallback(() => {\n if (checkoutData?.reservations) {\n const reservations: IEventReservation[] = checkoutData?.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n });\n const event = new StepThanksViewEvent(reservations, basketContext.currentBasketRows, hotel);\n raise(event);\n\n return calculateTotalForReservation(checkoutData, !isFromRoomstay);\n }\n\n return 0;\n }, [checkoutData]);\n\n useEffect(() => {\n setItemisedFees(checkoutData.feesSummary || []);\n }, [checkoutData]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n useEffect(() => {\n return () => {\n basketContext.finish();\n };\n }, []);\n\n return (\n <div className=\"container u-marg-top--heavy\">\n <div className=\"row justify-content-center\">\n <div className=\"col-lg-8 col-md-12 u-flex align-items-center u-flex-direction-column\">\n <div className=\"u-marg-bottom\">\n <Icon icon={IconType.Check} size=\"48px\" color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding />\n </div>\n <div className=\"u-marg-bottom\" style={{ maxWidth: '530px' }}>\n <Headline size=\"large\" align={TextAlign.Center}>\n {t(Translation.Step.Thanks.ThankYouHeadline, { hotel: hotel?.name })}\n </Headline>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text color={Color.DarkGrey}>\n {t(Translation.Step.Thanks.InvoiceNumber)} {checkoutData.itineraryNumber}\n </Text>\n </div>\n <div className=\"u-marg-bottom--massive\">\n <Link to=\"/\">\n <BEButton>{t(Translation.Step.Thanks.GoBackHome)}</BEButton>\n </Link>\n </div>\n <>\n <div className=\"u-marg-top w-100\">\n {checkoutData?.reservations?.map((obj: ReservationDTO) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (isFromRoomstay) {\n addons.push({ ...addon, nights: nights.length });\n } else {\n addons.push(addon);\n }\n });\n }\n\n if (obj.comments) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return <ReservationRow reservation={obj} key={obj.reservationNumber} />;\n })}\n </div>\n <LineBreak />\n\n <div className=\"w-100\">\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index) => (\n <Text\n style={{\n whiteSpace: 'pre',\n }}\n key={index}\n type={TextType.Small}\n >\n {comment}\n </Text>\n ))}\n </div>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n {t(Translation.Step.Thanks.IncludingTaxes)}\n </Text>\n </div>\n </>\n </div>\n </div>\n {checkoutData?.reservations?.map((obj: ReservationDTO, index) => {\n const nightKeys = Object.keys(obj.nights);\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n return (\n <script key={index} type=\"application/ld+json\">\n {JSON.stringify({\n '@context': 'http://schema.org',\n '@type': 'LodgingReservation',\n reservationId: obj.reservationNumber,\n reservationStatus: 'http://schema.org/ReservationConfirmed',\n checkinTime: firstNight.format('YYYY-MM-DDTHH:mm:ss'),\n checkoutTime: lastNight.format('YYYY-MM-DDTHH:mm:ss'),\n totalPrice: obj.total.afterTax,\n basePrice: obj.total.beforeTax,\n priceCurrency: ccx.currentCurrency,\n })}\n </script>\n );\n })}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"StepThanksComponent.js","sourceRoot":"/","sources":["src/pages/steps/StepThanks/StepThanksComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport dayjs from 'dayjs';\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { InlineSignUpSection } from '@/components/members/InlineSignUpSection';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { StepThanksViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport { ReservationAddonDTO, ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport { SimpleItemisedFee } from '@/models/Fee';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { calculateTotalForReservation } from '@/util/TotalCalculator';\n\nexport default function StepThanksComponent() {\n const basketContext = useContext(BasketContext);\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const { raise } = useEvent();\n\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const checkoutData = basketContext.reservationData;\n\n const isFromRoomstay = checkoutData?.itineraryNumber?.startsWith('RS');\n\n const { t } = useTranslation();\n\n const total = useCallback(() => {\n if (checkoutData?.reservations) {\n const reservations: IEventReservation[] = checkoutData?.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n });\n const event = new StepThanksViewEvent(reservations, basketContext.currentBasketRows, hotel);\n raise(event);\n\n return calculateTotalForReservation(checkoutData, !isFromRoomstay);\n }\n\n return 0;\n }, [checkoutData]);\n\n useEffect(() => {\n setItemisedFees(checkoutData.feesSummary || []);\n }, [checkoutData]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n useEffect(() => {\n return () => {\n basketContext.finish();\n };\n }, []);\n\n return (\n <div className=\"container u-marg-top--heavy\">\n <div className=\"row justify-content-center\">\n <div className=\"col-lg-8 col-md-12 u-flex align-items-center u-flex-direction-column\">\n <div className=\"u-marg-bottom\">\n <Icon icon={IconType.Check} size=\"48px\" color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding />\n </div>\n <div className=\"u-marg-bottom\" style={{ maxWidth: '530px' }}>\n <Headline size=\"large\" align={TextAlign.Center}>\n {t(Translation.Step.Thanks.ThankYouHeadline, { hotel: hotel?.name })}\n </Headline>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text color={Color.DarkGrey}>\n {t(Translation.Step.Thanks.InvoiceNumber)} {checkoutData.itineraryNumber}\n </Text>\n </div>\n\n <div className=\"u-marg-bottom--massive\">\n <Link to=\"/\">\n <BEButton>{t(Translation.Step.Thanks.GoBackHome)}</BEButton>\n </Link>\n </div>\n\n {checkoutData?.reservations?.[0]?.guest && <InlineSignUpSection reservation={checkoutData.reservations[0]} hotelId={hotel?.hotelID || ''} />}\n\n <>\n <div className=\"u-marg-top w-100\">\n {checkoutData?.reservations?.map((obj: ReservationDTO) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (isFromRoomstay) {\n addons.push({ ...addon, nights: nights.length });\n } else {\n addons.push(addon);\n }\n });\n }\n\n if (obj.comments) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return <ReservationRow reservation={obj} key={obj.reservationNumber} />;\n })}\n </div>\n <LineBreak />\n\n <div className=\"w-100\">\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index) => (\n <Text\n style={{\n whiteSpace: 'pre',\n }}\n key={index}\n type={TextType.Small}\n >\n {comment}\n </Text>\n ))}\n </div>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n {t(Translation.Step.Thanks.IncludingTaxes)}\n </Text>\n </div>\n </>\n </div>\n </div>\n {checkoutData?.reservations?.map((obj: ReservationDTO, index) => {\n const nightKeys = Object.keys(obj.nights);\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n return (\n <script key={index} type=\"application/ld+json\">\n {JSON.stringify({\n '@context': 'http://schema.org',\n '@type': 'LodgingReservation',\n reservationId: obj.reservationNumber,\n reservationStatus: 'http://schema.org/ReservationConfirmed',\n checkinTime: firstNight.format('YYYY-MM-DDTHH:mm:ss'),\n checkoutTime: lastNight.format('YYYY-MM-DDTHH:mm:ss'),\n totalPrice: obj.total.afterTax,\n basePrice: obj.total.beforeTax,\n priceCurrency: ccx.currentCurrency,\n })}\n </script>\n );\n })}\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { Feature } from './Feature';
|
|
2
|
-
|
|
2
|
+
interface MemberPortalOptions {
|
|
3
|
+
useMemberPortalForMemberPricing?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare class MemberPortalFeature extends Feature<MemberPortalOptions> {
|
|
6
|
+
private useMemberPortalForMemberPricing;
|
|
3
7
|
constructor();
|
|
8
|
+
shouldUseMemberPortalForMemberPricing(): boolean;
|
|
9
|
+
protected onLoad(options?: MemberPortalOptions): void;
|
|
4
10
|
}
|
|
5
11
|
declare const _default: MemberPortalFeature;
|
|
6
12
|
export default _default;
|
|
@@ -4,6 +4,17 @@ const Feature_1 = require("./Feature");
|
|
|
4
4
|
class MemberPortalFeature extends Feature_1.Feature {
|
|
5
5
|
constructor() {
|
|
6
6
|
super('MemberPortalFeature');
|
|
7
|
+
// If this option is enabled, we'll force users to sign up to the member portal before showing member prices.
|
|
8
|
+
// This will require them to set a password and verify their email before proceeding to checkout.
|
|
9
|
+
this.useMemberPortalForMemberPricing = false;
|
|
10
|
+
}
|
|
11
|
+
shouldUseMemberPortalForMemberPricing() {
|
|
12
|
+
return this.useMemberPortalForMemberPricing;
|
|
13
|
+
}
|
|
14
|
+
onLoad(options) {
|
|
15
|
+
if ((options === null || options === void 0 ? void 0 : options.useMemberPortalForMemberPricing) !== undefined) {
|
|
16
|
+
this.useMemberPortalForMemberPricing = options.useMemberPortalForMemberPricing;
|
|
17
|
+
}
|
|
7
18
|
}
|
|
8
19
|
}
|
|
9
20
|
exports.default = new MemberPortalFeature();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemberPortalFeature.js","sourceRoot":"/","sources":["src/providers/feature/MemberPortalFeature.ts"],"names":[],"mappings":";;AAAA,yDAAsD;
|
|
1
|
+
{"version":3,"file":"MemberPortalFeature.js","sourceRoot":"/","sources":["src/providers/feature/MemberPortalFeature.ts"],"names":[],"mappings":";;AAAA,yDAAsD;AAMtD,MAAM,mBAAoB,SAAQ,iBAA4B;IAK1D;QACI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QALjC,6GAA6G;QAC7G,iGAAiG;QACzF,oCAA+B,GAAG,KAAK,CAAC;IAIhD,CAAC;IAEM,qCAAqC;QACxC,OAAO,IAAI,CAAC,+BAA+B,CAAC;IAChD,CAAC;IAES,MAAM,CAAC,OAA6B;QAC1C,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,+BAA+B,MAAK,SAAS,EAAE;YACxD,IAAI,CAAC,+BAA+B,GAAG,OAAO,CAAC,+BAA+B,CAAC;SAClF;IACL,CAAC;CACJ;AAED,kBAAe,IAAI,mBAAmB,EAAE,CAAC","sourcesContent":["import { Feature } from '@/providers/feature/Feature';\n\ninterface MemberPortalOptions {\n useMemberPortalForMemberPricing?: boolean;\n}\n\nclass MemberPortalFeature extends Feature<MemberPortalOptions> {\n // If this option is enabled, we'll force users to sign up to the member portal before showing member prices.\n // This will require them to set a password and verify their email before proceeding to checkout.\n private useMemberPortalForMemberPricing = false;\n\n constructor() {\n super('MemberPortalFeature');\n }\n\n public shouldUseMemberPortalForMemberPricing(): boolean {\n return this.useMemberPortalForMemberPricing;\n }\n\n protected onLoad(options?: MemberPortalOptions): void {\n if (options?.useMemberPortalForMemberPricing !== undefined) {\n this.useMemberPortalForMemberPricing = options.useMemberPortalForMemberPricing;\n }\n }\n}\n\nexport default new MemberPortalFeature();\n"]}
|
|
@@ -91,7 +91,7 @@ declare class GoogleAnalytics4 extends Analytics {
|
|
|
91
91
|
value: string | undefined;
|
|
92
92
|
tax: number;
|
|
93
93
|
coupon: undefined;
|
|
94
|
-
payment_type: import("
|
|
94
|
+
payment_type: import("@roomstay/core").EBookingPaymentMethod | undefined;
|
|
95
95
|
page_type: string;
|
|
96
96
|
items: GA4Item[];
|
|
97
97
|
};
|
|
@@ -90,7 +90,7 @@ declare class UniversalAnalytics extends Analytics {
|
|
|
90
90
|
EndDate: string;
|
|
91
91
|
BookingDate: string;
|
|
92
92
|
PageType: string;
|
|
93
|
-
paymentType: import("
|
|
93
|
+
paymentType: import("@roomstay/core").EBookingPaymentMethod | undefined;
|
|
94
94
|
};
|
|
95
95
|
} | undefined)[];
|
|
96
96
|
generateRefundMessageObject(reservation: ReservationDTO): any;
|
|
@@ -45,7 +45,7 @@ const getApplicableEvents = (events, { checkInDate, checkInTime, checkOutDate, c
|
|
|
45
45
|
};
|
|
46
46
|
exports.getApplicableEvents = getApplicableEvents;
|
|
47
47
|
const isCancelledBooking = (booking) => {
|
|
48
|
-
return booking.status === core_1.
|
|
48
|
+
return booking.status === core_1.EBookingStatus.Cancelled;
|
|
49
49
|
};
|
|
50
50
|
exports.isCancelledBooking = isCancelledBooking;
|
|
51
51
|
const isPastBooking = (booking) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsHelper.js","sourceRoot":"/","sources":["src/util/EventsHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"EventsHelper.js","sourceRoot":"/","sources":["src/util/EventsHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { EBookingStatus, IRoomstayEvent } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\n\nimport { IRoomstayMemberBookingItemWithRefAndHotelDetails } from '@/contexts';\nimport { StorageProvider } from '@/providers/storage/StorageProvider';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isBetween);\n\nconst CACHED_EVENTS_KEY = 'events';\n\ninterface ICachedEvents {\n expired: number;\n events: IRoomstayEvent[];\n}\n\nconst provider = new StorageProvider();\n\nconst createEventKey = (hotelId: string, unixStartDate: number) => [CACHED_EVENTS_KEY, hotelId, unixStartDate].join('-');\n\nconst write = (hotelId: string, unixStartDate: number, value: ICachedEvents) => provider.write(createEventKey(hotelId, unixStartDate), value);\n\nconst read = (hotelId: string, unixStartDate: number) => provider.read<ICachedEvents>(createEventKey(hotelId, unixStartDate));\n\nconst getValidEvents = (events: IRoomstayEvent[]): IRoomstayEvent[] => {\n if (!events || events.length === 0) {\n return [];\n }\n\n const today = dayjs();\n return events.filter(({ endDate, timezone, isPermanent }) => isPermanent || today.isBefore(dayjs(endDate, timezone)));\n};\n\nconst getApplicableEvents = (\n events: IRoomstayEvent[],\n {\n checkInDate,\n checkInTime,\n checkOutDate,\n checkOutTime,\n }: {\n checkInDate: string;\n checkInTime: string;\n checkOutDate: string;\n checkOutTime: string;\n }\n): IRoomstayEvent[] => {\n if (!events || events.length === 0) {\n return [];\n }\n\n const itineraryStartDate = dayjs(`${checkInDate}${checkInTime}`, 'YYYY-MM-DDHHmm');\n const itineraryEndDate = dayjs(`${checkOutDate}${checkOutTime}`, 'YYYY-MM-DDHHmm');\n\n return events.filter(({ endDate: endDateString, timezone, startDate: startDateString }) => {\n // The maximum (and minimum) date in JavaScript. This is used to represent the far future and past.\n // https://stackoverflow.com/questions/11526504/minimum-and-maximum-date\n const JS_MAX_DATE_MS = 8640000000000000;\n\n const eventStartDate = startDateString ? dayjs.tz(startDateString, timezone) : dayjs(-JS_MAX_DATE_MS);\n const eventEndDate = endDateString ? dayjs.tz(endDateString, timezone) : dayjs(JS_MAX_DATE_MS);\n\n return eventStartDate.isSameOrBefore(itineraryEndDate) && eventEndDate.isSameOrAfter(itineraryStartDate);\n });\n};\n\nconst isCancelledBooking = (booking: Pick<IRoomstayMemberBookingItemWithRefAndHotelDetails, 'status'>): boolean => {\n return booking.status === EBookingStatus.Cancelled;\n};\nconst isPastBooking = (booking: Pick<IRoomstayMemberBookingItemWithRefAndHotelDetails, 'checkOutDate'>): boolean => {\n return dayjs(booking.checkOutDate).isBefore(dayjs());\n};\n\nconst isCachedEventValid = (cachedEvents: ICachedEvents): boolean => {\n const today = dayjs();\n const expiredDate = dayjs(cachedEvents.expired);\n return today.isBefore(expiredDate) && cachedEvents.events?.length > 0;\n};\n\nexport { getApplicableEvents, getValidEvents, ICachedEvents, isCachedEventValid, isCancelledBooking, isPastBooking, read, write };\n"]}
|
|
@@ -16,10 +16,10 @@ const calculateBaseAddonTotal = (addon, dismissAddonNightCount) => {
|
|
|
16
16
|
if (addon.price && addon.quantity) {
|
|
17
17
|
indPrice = addon.quantity * Number(addon.price);
|
|
18
18
|
}
|
|
19
|
-
if (addon.pricingType ===
|
|
19
|
+
if (addon.pricingType === core_1.EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT && addon.adultQuantity) {
|
|
20
20
|
indPrice *= addon.adultQuantity;
|
|
21
21
|
}
|
|
22
|
-
else if (addon.pricingType ===
|
|
22
|
+
else if (addon.pricingType === core_1.EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT && addon.childQuantity) {
|
|
23
23
|
indPrice *= addon.childQuantity;
|
|
24
24
|
}
|
|
25
25
|
if (addon.adultPrice && addon.adultQuantity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TotalCalculator.js","sourceRoot":"/","sources":["src/util/TotalCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["import { roundMoney } from '@roomstay/core';\n\nimport { ADDON_PER_NIGHT_TYPES, AddonPricingType, BasketAddonDTO } from '@/models/Addon/Addon';\nimport ReservationsDTO, { ReservationAddonDTO } from '@/models/Api/ReservationsDTO';\n\n/**\n * Calculate the addon total for a single addon.\n *\n * This does not account for fees. Fees need to be calculated separately, because we calculate them differently\n * based on whether they are a booked addon, or an addon in the basket.\n */\nconst calculateBaseAddonTotal = (addon: BasketAddonDTO | ReservationAddonDTO, dismissAddonNightCount: boolean) => {\n let indPrice = 0;\n let indAdultPrice = 0;\n let indChildPrice = 0;\n\n if (addon.price && addon.quantity) {\n indPrice = addon.quantity * Number(addon.price);\n }\n\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT && addon.adultQuantity) {\n indPrice *= addon.adultQuantity;\n } else if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT && addon.childQuantity) {\n indPrice *= addon.childQuantity;\n }\n\n if (addon.adultPrice && addon.adultQuantity) {\n indAdultPrice = addon.adultQuantity * Number(addon.adultPrice);\n }\n\n if (addon.childPrice && addon.childQuantity) {\n indChildPrice = addon.childQuantity * Number(addon.childPrice);\n }\n\n let addonTotal = indPrice + indAdultPrice + indChildPrice;\n if (ADDON_PER_NIGHT_TYPES.includes(addon.pricingType as AddonPricingType) && addon.nights && !dismissAddonNightCount) {\n addonTotal *= addon.nights;\n }\n\n return {\n indPrice,\n indAdultPrice,\n indChildPrice,\n addonTotal,\n };\n};\n\n/**\n * Calculate totals for a Basket Addon.\n */\nexport const calculateBasketAddonTotal = (addons: BasketAddonDTO | BasketAddonDTO[], dismissAddonNightCount = false) => {\n if (!Array.isArray(addons)) {\n addons = [addons];\n }\n\n // TODO: This function is chaos! It will be slightly better when we remove the old fee fields.\n\n const result = addons.reduce(\n (acc, addon) => {\n const base = calculateBaseAddonTotal(addon, dismissAddonNightCount);\n let addonFees = 0;\n\n // Calculate fees specific to BasketAddonDTO\n if ((addon.fee || addon.fees?.length) && addon.quantity) {\n // There are no separate adult/child fees\n if (addon.fees?.length) {\n // New Itemised fees\n addon.fees.forEach((fee) => {\n addonFees += addon.quantity * fee.amount;\n });\n } else {\n // Old fees (to be removed/deprecated)\n addonFees = addon.quantity * Number(addon.fee);\n }\n } else {\n // There are separate adult/child fees, so we need to calculate them separately.\n if ((addon.adultFee || addon.adultFees?.length) && addon.adultQuantity) {\n if (addon.adultFees?.length) {\n addon.adultFees.forEach((fee) => {\n addonFees += addon.adultQuantity * fee.amount;\n });\n } else {\n addonFees += addon.adultQuantity ?? 1 * Number(addon.adultFee);\n }\n }\n\n if ((addon.childFee || addon.childFees?.length) && addon.childQuantity) {\n if (addon.childFees?.length) {\n addon.childFees.forEach((fee) => {\n addonFees += addon.childQuantity ?? 1 * fee.amount;\n });\n } else {\n addonFees += addon.childQuantity * Number(addon.childFee);\n }\n }\n }\n\n // Multiply the fees by the number of nights if it's a per-night addon.\n if (ADDON_PER_NIGHT_TYPES.includes(addon.pricingType as AddonPricingType) && addon.nights && !dismissAddonNightCount) {\n addonFees *= addon.nights;\n }\n\n return {\n price: acc.price + base.indPrice,\n adultPrice: acc.adultPrice + base.indAdultPrice,\n childPrice: acc.childPrice + base.indChildPrice,\n totalFees: acc.totalFees + addonFees,\n total: acc.total + base.addonTotal + addonFees,\n };\n },\n { price: 0, adultPrice: 0, childPrice: 0, totalFees: 0, total: 0 }\n );\n\n return result;\n};\n\n/**\n * Calculate totals for a Reservation Addon.\n */\nexport const calculateReservationAddonTotal = (addons: ReservationAddonDTO | ReservationAddonDTO[], dismissAddonNightCount = false) => {\n if (!Array.isArray(addons)) {\n addons = [addons];\n }\n\n const result = addons.reduce(\n (acc, addon) => {\n const base = calculateBaseAddonTotal(addon, dismissAddonNightCount);\n\n // For a ReservationAddonDTO, the fees have already been calculated as a part of the booking process.\n let addonFees = addon.fees || 0;\n\n // But they might be superceded by itemised fees.\n if (addon.itemisedFees?.length) {\n addonFees = addon.itemisedFees.reduce((acc, fee) => acc + fee.amount, 0);\n }\n\n // If we have Itemised Fees, the display price will be excluding fees.\n const displayPrice = addon.itemisedFees?.length ? base.addonTotal : base.addonTotal + addonFees;\n\n return {\n price: acc.price + base.indPrice,\n adultPrice: acc.adultPrice + base.indAdultPrice,\n childPrice: acc.childPrice + base.indChildPrice,\n totalFees: acc.totalFees + addonFees,\n total: acc.total + base.addonTotal + addonFees,\n displayPrice: acc.displayPrice + displayPrice,\n };\n },\n { price: 0, adultPrice: 0, childPrice: 0, totalFees: 0, total: 0, displayPrice: 0 }\n );\n\n return result;\n};\n\nexport const calculateTotalForReservation = (reservation: ReservationsDTO, dismissAddonNightCount = false) => {\n let total = 0;\n\n reservation.itemisedFees?.forEach((fee) => {\n total += fee.amount;\n });\n\n reservation.reservations.forEach((individualRes) => {\n total += individualRes.total.afterTax;\n const resNights = Object.keys(individualRes.nights)?.length ?? 0;\n\n if (individualRes.addons?.length) {\n const addons = (individualRes.addons ?? []).map((addon) => {\n return { ...addon, nights: resNights };\n });\n\n total += calculateReservationAddonTotal(addons, dismissAddonNightCount)?.total;\n }\n });\n\n return roundMoney(total);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"TotalCalculator.js","sourceRoot":"/","sources":["src/util/TotalCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["import { EAddonPricingType, roundMoney } from '@roomstay/core';\n\nimport { ADDON_PER_NIGHT_TYPES, BasketAddonDTO } from '@/models/Addon/Addon';\nimport ReservationsDTO, { ReservationAddonDTO } from '@/models/Api/ReservationsDTO';\n\n/**\n * Calculate the addon total for a single addon.\n *\n * This does not account for fees. Fees need to be calculated separately, because we calculate them differently\n * based on whether they are a booked addon, or an addon in the basket.\n */\nconst calculateBaseAddonTotal = (addon: BasketAddonDTO | ReservationAddonDTO, dismissAddonNightCount: boolean) => {\n let indPrice = 0;\n let indAdultPrice = 0;\n let indChildPrice = 0;\n\n if (addon.price && addon.quantity) {\n indPrice = addon.quantity * Number(addon.price);\n }\n\n if (addon.pricingType === EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT && addon.adultQuantity) {\n indPrice *= addon.adultQuantity;\n } else if (addon.pricingType === EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT && addon.childQuantity) {\n indPrice *= addon.childQuantity;\n }\n\n if (addon.adultPrice && addon.adultQuantity) {\n indAdultPrice = addon.adultQuantity * Number(addon.adultPrice);\n }\n\n if (addon.childPrice && addon.childQuantity) {\n indChildPrice = addon.childQuantity * Number(addon.childPrice);\n }\n\n let addonTotal = indPrice + indAdultPrice + indChildPrice;\n if (ADDON_PER_NIGHT_TYPES.includes(addon.pricingType as EAddonPricingType) && addon.nights && !dismissAddonNightCount) {\n addonTotal *= addon.nights;\n }\n\n return {\n indPrice,\n indAdultPrice,\n indChildPrice,\n addonTotal,\n };\n};\n\n/**\n * Calculate totals for a Basket Addon.\n */\nexport const calculateBasketAddonTotal = (addons: BasketAddonDTO | BasketAddonDTO[], dismissAddonNightCount = false) => {\n if (!Array.isArray(addons)) {\n addons = [addons];\n }\n\n // TODO: This function is chaos! It will be slightly better when we remove the old fee fields.\n\n const result = addons.reduce(\n (acc, addon) => {\n const base = calculateBaseAddonTotal(addon, dismissAddonNightCount);\n let addonFees = 0;\n\n // Calculate fees specific to BasketAddonDTO\n if ((addon.fee || addon.fees?.length) && addon.quantity) {\n // There are no separate adult/child fees\n if (addon.fees?.length) {\n // New Itemised fees\n addon.fees.forEach((fee) => {\n addonFees += addon.quantity * fee.amount;\n });\n } else {\n // Old fees (to be removed/deprecated)\n addonFees = addon.quantity * Number(addon.fee);\n }\n } else {\n // There are separate adult/child fees, so we need to calculate them separately.\n if ((addon.adultFee || addon.adultFees?.length) && addon.adultQuantity) {\n if (addon.adultFees?.length) {\n addon.adultFees.forEach((fee) => {\n addonFees += addon.adultQuantity * fee.amount;\n });\n } else {\n addonFees += addon.adultQuantity ?? 1 * Number(addon.adultFee);\n }\n }\n\n if ((addon.childFee || addon.childFees?.length) && addon.childQuantity) {\n if (addon.childFees?.length) {\n addon.childFees.forEach((fee) => {\n addonFees += addon.childQuantity ?? 1 * fee.amount;\n });\n } else {\n addonFees += addon.childQuantity * Number(addon.childFee);\n }\n }\n }\n\n // Multiply the fees by the number of nights if it's a per-night addon.\n if (ADDON_PER_NIGHT_TYPES.includes(addon.pricingType as EAddonPricingType) && addon.nights && !dismissAddonNightCount) {\n addonFees *= addon.nights;\n }\n\n return {\n price: acc.price + base.indPrice,\n adultPrice: acc.adultPrice + base.indAdultPrice,\n childPrice: acc.childPrice + base.indChildPrice,\n totalFees: acc.totalFees + addonFees,\n total: acc.total + base.addonTotal + addonFees,\n };\n },\n { price: 0, adultPrice: 0, childPrice: 0, totalFees: 0, total: 0 }\n );\n\n return result;\n};\n\n/**\n * Calculate totals for a Reservation Addon.\n */\nexport const calculateReservationAddonTotal = (addons: ReservationAddonDTO | ReservationAddonDTO[], dismissAddonNightCount = false) => {\n if (!Array.isArray(addons)) {\n addons = [addons];\n }\n\n const result = addons.reduce(\n (acc, addon) => {\n const base = calculateBaseAddonTotal(addon, dismissAddonNightCount);\n\n // For a ReservationAddonDTO, the fees have already been calculated as a part of the booking process.\n let addonFees = addon.fees || 0;\n\n // But they might be superceded by itemised fees.\n if (addon.itemisedFees?.length) {\n addonFees = addon.itemisedFees.reduce((acc, fee) => acc + fee.amount, 0);\n }\n\n // If we have Itemised Fees, the display price will be excluding fees.\n const displayPrice = addon.itemisedFees?.length ? base.addonTotal : base.addonTotal + addonFees;\n\n return {\n price: acc.price + base.indPrice,\n adultPrice: acc.adultPrice + base.indAdultPrice,\n childPrice: acc.childPrice + base.indChildPrice,\n totalFees: acc.totalFees + addonFees,\n total: acc.total + base.addonTotal + addonFees,\n displayPrice: acc.displayPrice + displayPrice,\n };\n },\n { price: 0, adultPrice: 0, childPrice: 0, totalFees: 0, total: 0, displayPrice: 0 }\n );\n\n return result;\n};\n\nexport const calculateTotalForReservation = (reservation: ReservationsDTO, dismissAddonNightCount = false) => {\n let total = 0;\n\n reservation.itemisedFees?.forEach((fee) => {\n total += fee.amount;\n });\n\n reservation.reservations.forEach((individualRes) => {\n total += individualRes.total.afterTax;\n const resNights = Object.keys(individualRes.nights)?.length ?? 0;\n\n if (individualRes.addons?.length) {\n const addons = (individualRes.addons ?? []).map((addon) => {\n return { ...addon, nights: resNights };\n });\n\n total += calculateReservationAddonTotal(addons, dismissAddonNightCount)?.total;\n }\n });\n\n return roundMoney(total);\n};\n"]}
|