{"version":3,"sources":["components/ui-kit/themes/assets/images.js","components/ui-kit/themes/theme.js","utilities/constants.js","components/ui-kit/Button/styles.js","components/ui-kit/Button/Button.js","components/ui-kit/icons/FacebookButtonIcon.js","components/ui-kit/icons/GoogleButtonIcon.js","components/ui-kit/SocialConnectionButton/styles.js","components/ui-kit/SocialConnectionButton/SocialConnectionButton.js","components/ui-kit/AccordionWrapper/styles.js","components/ui-kit/AccordionWrapper/AccordionWrapper.js","components/ui-kit/AccordionWrapper/index.js","components/ui-kit/Calendar/styles.js","components/ui-kit/Calendar/Calendar.js","components/ui-kit/Calendar/index.js","components/ui-kit/Callout/constants.js","components/ui-kit/Callout/Callout.js","components/ui-kit/Callout/index.js","components/ui-kit/Container.js","components/ui-kit/icons/MinusThin.js","components/ui-kit/Counter/styles.js","components/ui-kit/Counter/Counter.js","components/ui-kit/Counter/index.js","components/ui-kit/Fixed.js","components/ui-kit/Hint/constants.js","components/ui-kit/Hint/styles.js","components/ui-kit/Hint/Hint.js","components/ui-kit/Hint/index.js","components/ui-kit/ImageBox/assets/styles.js","components/ui-kit/ImageBox/ImageBox.js","components/ui-kit/ImageBox/index.js","components/ui-kit/SupAmount/index.js","components/ui-kit/SupAmount/SupAmount.js","components/Summary/components/Content/index.js","components/ui-kit/themes/colors.js","store/componentStores/Plans/plans.types.js","components/_internal_date_/gwDatesWrapper.js","store/componentStores/LodgeConfig/lodgeConfig.types.js","routes.js","components/utilities/copyFunctions.js","components/Summary/components/Suite/utilities/copy.js","store/componentStores/ReservationDetailsEntity/reservationDetailsEntity.selectors.js","utilities/storageUtils.js","infrastructure/middleware/analytics/analyticsObjectBuilders.js","utilities/dataLayerUtils.js","components/ui-kit/Text.js","api/Utils/apiURLConfiguration.js","components/Summary/components/Suite/Plan/styles.js","store/componentStores/ReservationDetailsEntity/reservationDetailsEntity.types.js","utilities/analytics.js","utilities/ABTesting.js","components/Summary/components/Suite/Reservation/utilities/copy.js","store/componentStores/Suite/suite.types.js","store/componentStores/CurrentLodge/currentLodge.selectors.js","components/ui-kit/Box.js","store/componentStores/Packages/packages.types.js","__shims__/shimDayjsInsteadOfMomentONLYForReactDatesLibrary.js","store/componentStores/Packages/packages.selectors.js","components/Summary/components/SimpleSummary/utilities/copy.js","utilities/arraysUtils.js","infrastructure/middleware/analytics/ActionListeners/EventSuccessListeners.js","infrastructure/middleware/analytics/ActionListeners/offerCodeListeners.js","infrastructure/middleware/analytics/ActionListeners/planListeners.js","infrastructure/middleware/analytics/listeners.js","infrastructure/middleware/analytics/reduxTracking.js","store/configureStore.js","components/ui-kit/Flex.js","store/componentStores/Account/account.reducer.js","store/componentStores/addAPackage/addAPackage.reducer.js","store/componentStores/BirthdayParty/birthdayParty.reducer.js","store/componentStores/BookingEngineAlertEntity/bookingEngineAlertEntity.reducer.js","store/componentStores/Cart/cart.reducer.js","store/componentStores/CurrentLodge/currentLodge.reducer.js","store/componentStores/Dates/dates.reducer.js","store/componentStores/DayPasses/dayPasses.reducer.js","store/componentStores/Deal/deal.reducer.js","store/componentStores/EventCalendar/eventCalendar.reducer.js","store/componentStores/Flow/flow.reducer.js","store/componentStores/Geolocation/geolocation.reducer.js","store/componentStores/GlobalModal/globalModal.reducer.js","store/componentStores/Guests/guests.reducer.js","store/componentStores/IEModal/ieModal.reducer.js","store/componentStores/LeadGen/leadGen.reducer.js","store/componentStores/LodgeConfig/lodgeConfig.reducer.js","store/componentStores/LodgeLocations/lodgeLocations.reducer.js","store/componentStores/ManageReservation/managereservation.reducer.js","store/componentStores/Packages/packages.reducer.js","store/componentStores/Plans/plans.reducer.js","store/componentStores/ReservationDetailsEntity/reservationDetailsEntity.reducer.js","store/componentStores/Suite/suite.reducer.js","store/reducers.js","store/componentStores/Offer/offer.types.js","store/componentStores/LodgeConfig/lodgeConfig.selectors.js","infrastructure/serializer/axios_serializers.js","api/clients/GWRApiClient.js","store/componentStores/Suite/suite.selectors.js","store/componentStores/Account/account.types.js","utilities/availabilityUtils.js","store/componentStores/ManageReservation/managereservation.types.js","components/utilities/utils.js","infrastructure/Exceptions/utils/ResponseErrorUtils.js","store/componentStores/Reservations/reservations.types.js","components/Summary/components/Content/styles.js","utilities/env.js","components/ui-kit/Card.js","components/Loyalty/assets/images.js","flows/DynamicFlow/utilities/constants.js","components/Summary/components/Suite/utilities/constants.js","api/clients/LodgeApiClient.js","utilities/guestsUtils.js","store/componentStores/BirthdayParty/birthdayParty.types.js","pages/ReservationDetail/assets/images.js","utilities/customEventsHelpers.js","components/Loyalty/utilities/constants.js","infrastructure/middleware/analytics/analyticsUtils.js","components/PaymentForm/utilities/helpers.js","utilities/cmpPackagesUtils.js","components/CheckInOutDates/styles.js","components/CheckInOutDates/CheckInOutDate.js","components/CheckInOutDates/CheckInOutDates.js","store/componentStores/Cart/cart.types.js","store/componentStores/Dates/dates.selectors.js","components/PaymentForm/ValidationMessages.js","components/utilities/ResortLocations.js","utilities/cookiesUtils.js","store/componentStores/addAPackage/addAPackage.types.js","store/componentStores/LodgeLocations/lodgeLocations.types.js","store/componentStores/Account/account.selectors.js","store/componentStores/Plans/plans.selectors.js","utilities/packagesUtils.js","components/ui-kit/icons/ArrowDownThin.js","infrastructure/middleware/analytics/utilities/helpers.js","store/componentStores/LodgeConfig/lodgeConfig.actions.js","utilities/personallyIdentifiableInformation/piiUtils.js","utilities/applicationInsights.js","infrastructure/Exceptions/ApiResponseError.js","components/ui-kit/icons/Close.js","api/Utils/affirmUtils.js","components/ui-kit/icons/AlertSuccessIcon.js","store/componentStores/utilities/util.js","api/Utils/authUtils.js","utilities/dates.js","store/componentStores/Offer/offer.selectors.js","store/componentStores/Packages/packages.actions.js","api/auth/AuthClient.js","components/ui-kit/Relative.js","utilities/planUtils.js","utilities/reservationsUtils.js","components/ui-kit/icons/Question.js","utilities/taxes.js","api/clients/RoomBookingApiClient.js","components/Summary/components/Content/SummaryContent.js","components/Summary/components/Content/utilities/copy.js","store/componentStores/GlobalModal/globalModal.types.js","utilities/navigationUtils.js","store/componentStores/GlobalModal/globalModal.actions.js","api/clients/AvailabilityApiClient.js","components/ui-kit/Scrollable/styles.js","components/ui-kit/Scrollable/index.js","store/componentStores/Guests/guests.selectors.js","components/Modal/Modal.js","store/componentStores/addAPackage/addAPackage.selectors.js","utilities/objectKeysManagementUtils.js","components/utilities/unmaskValue.js","store/componentStores/DayPasses/dayPasses.types.js","store/componentStores/EventCalendar/eventCalendar.types.js","store/componentStores/Geolocation/geolocation.types.js","components/GlobalModal/modalSource.js","components/PaymentForm/utilities/copy.js","pages/ReservationDetail/constants.js","store/componentStores/Suite/suite.actions.js","components/utilities/validation/ValidationHelperMethods.js","components/Summary/components/SummaryItem.js","components/ui-kit/Tooltip.js","components/ui-kit/icons/ArrowRight.js","store/componentStores/Dates/dates.types.js","components/ui-kit/icons/CarouselChevronRigthThin.js","store/componentStores/ManageReservation/managereservation.actions.js","utilities/resortLocation.js","components/ui-kit/Callout/styles.js","infrastructure/middleware/storage/reduxLocalStorage.js","store/componentStores/PreCheckIn/preCheckIn.types.js","api/clients/ItemApiClient.js","api/Utils/BestAvailableRate.js","api/clients/DocumentStoreApiClient.js","repositories/DocumentStoreRepository.js","repositories/RecentSearchesRepository.js","store/componentStores/Plans/plans.actions.js","components/Summary/assets/SummaryStyles.js","components/PaymentForm/assets/images.js","utilities/paymentUtils.js","utilities/duetto.js","store/componentStores/Deal/deal.types.js","store/componentStores/Profile/profile.types.js","store/componentStores/GlobalModal/globalModal.selectors.js","components/Alert/assets/images.js","components/Alert/styles.js","components/Alert/Alert.js","components/ui-kit/Absolute.js","utilities/messageUtils.js","components/GlobalModal/withGlobalModal.js","components/ui-kit/LoadingSpinner.js","api/clients/ManageBookingApiClient.js","components/Loyalty/assets/styles.js","components/Loyalty/components/LoyaltyApplied.js","components/Loyalty/utilities/copy.js","components/Loyalty/components/LoyaltyAvailable.js","components/Loyalty/components/LoyaltyAvailableMobileSearch.js","components/Loyalty/components/LoyaltyAvailableWithButton.js","components/Loyalty/components/LoyaltyEarn.js","components/Loyalty/components/LoyaltyJoinMessage.js","components/Loyalty/components/LoyaltyProfilePoints.js","hooks/api_hooks/useHistoryPagination.js","components/Loyalty/components/LoyaltyProfilePointsHistory.js","components/Loyalty/components/LoyaltyWithExpirationDate.js","components/Loyalty/Loyalty.js","store/componentStores/Cart/cart.actions.js","components/utilities/countries.js","components/Summary/assets/styles.js","components/ui-kit/Select/Select.js","components/ui-kit/Select/index.js","components/Packages/SelectPackageQuantity.js","components/LoyaltySummary/assets/images.js","components/utilities/provinces.js","components/utilities/states.js","components/ui-kit/Heading.js","store/componentStores/LeadGen/leadGen.types.js","components/Modal/styles.js","components/Modal/ModalAdapter.js","api/Utils/paypalUtils.js","store/componentStores/BookingEngineAlertEntity/bookingEngineAlertEntity.types.js","store/componentStores/CurrentLodge/currentLodge.types.js","store/componentStores/Flow/flow.types.js","store/componentStores/Guests/guests.types.js","store/componentStores/IEModal/ieModal.types.js","store/componentStores/Offer/offer.reducer.js","store/componentStores/CurrentLodge/currentLodge.actions.js","components/DiningCredit/assets/images.js","components/ReservationDetails/constants.js","components/ui-kit/Accordion.js","utilities/maskUtils.js","utilities/waitFor.js","components/Modal/index.js","pages/ReservationDetail/styles.js","api/clients/PaymentApiClient.js","api/clients/Shift4i4GoApiClient.js","components/PaymentForm/createReservationSchema.js","components/PaymentForm/utilities/createPartyReservationSchema.js","components/PaymentForm/PaymentFormHelper.js","components/ui-kit/Label.js","store/componentStores/LodgeLocations/lodgeLocations.selectors.js","components/ui-kit/TextLink/TextLink.js","components/ui-kit/TextLink/index.js","api/clients/ReservationsApiClient.js","components/_internal_date_/GWReactDatesWrapper.js","components/ui-kit/Checkbox.js","store/componentStores/Offer/offer.actions.js","components/utilities/generate-array.js","components/ui-kit/icons/Check.js","components/LoyaltySummary/utilities/functions.js","api/clients/UserAccountApiClient.js","components/DiningCredit/utilities/copy.js","components/ui-kit/icons/CheckedIcon.js","components/Modal/ModalSpinner.js","utilities/browserUtils.js","store/componentStores/Cart/cart.selectors.js","components/Summary/components/Accordion/styles.js","components/Summary/components/Accordion/SummaryAccordion.js","components/Summary/components/Accordion/SummaryAccordionContent.js","components/Summary/components/Accordion/SummaryAccordionHeader.js","components/Summary/components/Suite/Plan/Content/CartHeader.js","components/Summary/components/Suite/Plan/CartOverlay.js","components/Summary/components/Suite/Plan/Content/AdditionalCharges.js","components/Summary/components/Suite/Plan/Content/Details.js","components/Summary/components/Suite/Plan/Content/DueAmount.js","components/Summary/components/Suite/Plan/Content/Header.js","components/Summary/components/Suite/Plan/Content/Offers.js","components/Summary/components/Suite/utilities/functions.js","components/Summary/components/Suite/Plan/Content/CartCounterContainer.js","components/Summary/components/Suite/Plan/Content/PackageList.js","components/Summary/components/Suite/Plan/Content/ParkingFee.js","components/Summary/components/Suite/Plan/Content/Points.js","components/FinancingOptionText/styles.js","components/FinancingOptionText/index.js","components/Summary/components/Suite/Plan/Content/AffirmLink.js","components/Summary/components/Suite/Plan/Content/Subtotal.js","components/Summary/components/Suite/Plan/Content/TotalSavings.js","components/Summary/components/Suite/Plan/Content/Totals.js","components/Summary/components/Suite/Plan/Content/SuitePlanContent.js","components/Summary/components/Suite/Plan/assets/images.js","components/Summary/components/Suite/Plan/Content/CartLogo.js","components/Summary/components/Suite/Plan/Content/EmptyCartContent.js","components/Summary/components/Suite/Plan/Header.js","components/Summary/components/Suite/Plan/Summary.js","components/Summary/components/Suite/Plan/index.js","components/utilities/hooks/useWindowDimensions.js","components/Summary/components/Modal/styles.js","components/Summary/components/Modal/SummaryModal.js","components/Summary/components/Modal/ModalContent.js","components/Summary/components/Suite/Reservation/Content/AdditionalCharges.js","components/Summary/components/Suite/Reservation/styles.js","components/Summary/components/Suite/Reservation/Content/Deposit.js","components/Summary/components/Suite/Reservation/Content/DiscountCharges.js","components/Summary/components/Suite/Reservation/Content/Header.js","hooks/api_hooks/useGetLodgeConfig.js","components/Summary/components/Suite/Reservation/Content/PackagesList.js","components/Summary/components/Suite/Reservation/Content/SuiteDetails.js","components/Summary/components/Suite/Reservation/Content/SummaryAlert.js","components/Summary/components/Suite/Reservation/Content/Total.js","components/Summary/components/Suite/Reservation/Content/Content.js","components/Summary/components/Suite/Reservation/Summary.js","components/Summary/components/Suite/Reservation/index.js","components/TimerModalContent/assets/images.js","components/TimerModalContent/utilities/timerFunctions.js","components/ui-kit/Badge/constants.js","components/ui-kit/Badge/styles.js","components/ui-kit/Badge/Badge.js","components/ui-kit/Badge/index.js","utilities/interactionsUtils.js","store/componentStores/PreCheckIn/preCheckIn.reducer.js","components/ui-kit/icons/CarouselChevronLeftThin.js","components/Modal/MediaGalleryModal/styles.js","components/Modal/MediaGalleryModal/utilities/copy.js","components/Modal/MediaGalleryModal/MediaGalleryModal.js","store/componentStores/Profile/profile.reducer.js","components/ui-kit/icons/PlusThin.js","components/ui-kit/TextLink/styles.js","pages/BirthdayPartyFoodAndDrinks/utilities/copy.js","components/Summary/components/SimpleSummary/SimpleSummaryInfo.js","hooks/ui_hooks/useScrollToItem.js","hooks/ui_hooks/useLockBodyScroll.js","components/Summary/components/SummaryAccordion.js","components/Summary/components/SimpleSummary/Content/AdditionalCharges.js","components/Summary/components/SimpleSummary/assets/styles.js","components/Summary/components/SimpleSummary/Content/PackagesList.js","components/Summary/components/SimpleSummary/SimpleSummaryDue.js","components/Summary/components/SimpleSummary/SimpleSummaryParkingFeeWarning.js","components/Summary/components/SimpleSummary/index.js","components/utilities/useCorrectedHeight.js","components/utilities/useWindowEventListener.js","components/ui-kit/icons/ArrowCaretLeft.js","components/Modal/DrawerModal/styles.js","components/Modal/DrawerModal/ModalHeader.js","components/Modal/DrawerModal/index.js","components/ui-kit/NavigationMenu/styles.js","components/ui-kit/NavigationMenu/NavigationMenu.js","components/ui-kit/NavigationMenu/index.js","components/NotificationBanner/style.js","components/NotificationBanner/index.js","components/Summary/components/SimpleSummary/SimpleSummaryHeader.js","components/ui-kit/Animation/Animation.js","components/ui-kit/Animation/index.js","components/Summary/components/SummaryItemPackage.js","components/Summary/components/SimpleSummary/SimpleSummaryFooter.js","components/PaymentForm/AdditionalRequests/selectOptions.js","store/componentStores/Reservations/reservations.reducer.js","pages/BirthdayPartyAddOns/utilities/copy.js","components/ui-kit/icons/CloseCircle.js","utilities/isAuthorMode.js","data/location.js","assets/icons sync /^/.*/.svg$","assets/icons/OfferNotFound.svg","assets/icons/OffersNormal.svg","assets/icons/OffersNormalWhite.svg","assets/icons/OffersOpen.svg","assets/icons/ac.svg","assets/icons/accessible.svg","assets/icons/accessibleIcon.svg","assets/icons/airplane.svg","assets/icons/alertErrorIcon.svg","assets/icons/alertInfoIcon.svg","assets/icons/alertOfferIcon.svg","assets/icons/alertSuccessIcon.svg","assets/icons/arrival.svg","assets/icons/arrowCaretLeft.svg","assets/icons/arrowDown.svg","assets/icons/arrowDownRounded.svg","assets/icons/arrowDownThin.svg","assets/icons/arrowLeft.svg","assets/icons/arrowRight.svg","assets/icons/arrowRightThin.svg","assets/icons/arrowUp.svg","assets/icons/attention.svg","assets/icons/attentionWarning.svg","assets/icons/attractionsBlue.svg","assets/icons/attractionsIcon.svg","assets/icons/attractionsWhite.svg","assets/icons/automatic.svg","assets/icons/bag.svg","assets/icons/beach.svg","assets/icons/bed.svg","assets/icons/bedAkela.svg","assets/icons/birthdayBlue.svg","assets/icons/birthdayIcon.svg","assets/icons/birthdayWhite.svg","assets/icons/blueQuestion.svg","assets/icons/boxChecked.svg","assets/icons/boxEmpty.svg","assets/icons/boxMinus.svg","assets/icons/boxPlus.svg","assets/icons/breakfast.svg","assets/icons/build.svg","assets/icons/business.svg","assets/icons/cabin.svg","assets/icons/cake.svg","assets/icons/calendar-icon.svg","assets/icons/calendar-outline.svg","assets/icons/calendar.svg","assets/icons/calendarPicker.svg","assets/icons/carCircle.svg","assets/icons/carDoor.svg","assets/icons/carouselChevronLeft.svg","assets/icons/carouselChevronLeftThin.svg","assets/icons/carouselChevronRight.svg","assets/icons/carouselChevronRigthThin.svg","assets/icons/carriage.svg","assets/icons/cars.svg","assets/icons/casino.svg","assets/icons/chairs.svg","assets/icons/chart.svg","assets/icons/chat.svg","assets/icons/check.svg","assets/icons/checkedIcon.svg","assets/icons/chevron-thin-right.svg","assets/icons/chevronDown.svg","assets/icons/chevronLeft.svg","assets/icons/chevronRight.svg","assets/icons/chevronThinLeft.svg","assets/icons/chevronUp.svg","assets/icons/chevronUpThin.svg","assets/icons/circleMinus.svg","assets/icons/circlePlus.svg","assets/icons/cityView.svg","assets/icons/clock.svg","assets/icons/close-icon.svg","assets/icons/close.svg","assets/icons/closeCircle.svg","assets/icons/closeIcon.svg","assets/icons/closeThin.svg","assets/icons/closedEye.svg","assets/icons/cloud.svg","assets/icons/collisionCoverage.svg","assets/icons/condoIcon.svg","assets/icons/coupon.svg","assets/icons/credit-card-outline.svg","assets/icons/creditCard.svg","assets/icons/cruises.svg","assets/icons/delete.svg","assets/icons/departure.svg","assets/icons/devices.svg","assets/icons/directions.svg","assets/icons/discount.svg","assets/icons/document.svg","assets/icons/dollar.svg","assets/icons/dollarCircle.svg","assets/icons/doubleArrowUpIcon.svg","assets/icons/doubleOccupancy.svg","assets/icons/earlyBird.svg","assets/icons/edit.svg","assets/icons/electric.svg","assets/icons/email.svg","assets/icons/emoticon.svg","assets/icons/event.svg","assets/icons/eventAvailable.svg","assets/icons/eventBusy.svg","assets/icons/facebook.svg","assets/icons/facebookBtn.svg","assets/icons/facebookIcon.svg","assets/icons/familyBlue.svg","assets/icons/familyIcon.svg","assets/icons/familyWhite.svg","assets/icons/fan.svg","assets/icons/favoriteHotel.svg","assets/icons/filter.svg","assets/icons/fitness.svg","assets/icons/flame.svg","assets/icons/flightCircle.svg","assets/icons/flightCoverage.svg","assets/icons/flights.svg","assets/icons/forbidden.svg","assets/icons/freeCancellation.svg","assets/icons/fridge.svg","assets/icons/front-desk.svg","assets/icons/fullSofaBed.svg","assets/icons/gallery.svg","assets/icons/gas.svg","assets/icons/globe.svg","assets/icons/golf.svg","assets/icons/googleBtn.svg","assets/icons/gps.svg","assets/icons/graph.svg","assets/icons/grid-gallery.svg","assets/icons/grid.svg","assets/icons/guestScore.svg","assets/icons/guests.svg","assets/icons/hd Tv.svg","assets/icons/help.svg","assets/icons/history.svg","assets/icons/home.svg","assets/icons/hotelCircle.svg","assets/icons/hotels.svg","assets/icons/house.svg","assets/icons/hybrid.svg","assets/icons/icons-32-bottles-water.svg","assets/icons/icons-32-deck-cards.svg","assets/icons/icons-32-mini-fridge.svg","assets/icons/inclusive.svg","assets/icons/information.svg","assets/icons/informationOutline.svg","assets/icons/instagram.svg","assets/icons/key.svg","assets/icons/kitchenette.svg","assets/icons/laptop.svg","assets/icons/lateNight.svg","assets/icons/list.svg","assets/icons/localBar.svg","assets/icons/location-pointer.svg","assets/icons/location_icon.svg","assets/icons/lock.svg","assets/icons/lodge-news.svg","assets/icons/loyalty.svg","assets/icons/luggage.svg","assets/icons/manual.svg","assets/icons/map.svg","assets/icons/menu.svg","assets/icons/microwave.svg","assets/icons/mileage.svg","assets/icons/minus-thin.svg","assets/icons/minus.svg","assets/icons/mobilePhone.svg","assets/icons/multiOccupancy.svg","assets/icons/notification.svg","assets/icons/offer.svg","assets/icons/openEye.svg","assets/icons/open_modal_link.svg","assets/icons/ottoman.svg","assets/icons/overage.svg","assets/icons/overage21.svg","assets/icons/overnight.svg","assets/icons/parking.svg","assets/icons/personAdd.svg","assets/icons/pets.svg","assets/icons/phone.svg","assets/icons/phone_icon.svg","assets/icons/picture.svg","assets/icons/pin.svg","assets/icons/plus-thin.svg","assets/icons/plus.svg","assets/icons/pool.svg","assets/icons/printer.svg","assets/icons/question.svg","assets/icons/quilt.svg","assets/icons/radioChecked.svg","assets/icons/radioEmpty.svg","assets/icons/radioMinus.svg","assets/icons/radioPlus.svg","assets/icons/rateCalendar.svg","assets/icons/refresh.svg","assets/icons/restaurant.svg","assets/icons/ribbon.svg","assets/icons/roomSize.svg","assets/icons/rowing.svg","assets/icons/sales-alert-solid.svg","assets/icons/search.svg","assets/icons/searchRecent.svg","assets/icons/seat.svg","assets/icons/seatBusiness.svg","assets/icons/seatEconomy.svg","assets/icons/security.svg","assets/icons/shuttle.svg","assets/icons/singleOccupancy.svg","assets/icons/smoking.svg","assets/icons/spa.svg","assets/icons/spaIcon.svg","assets/icons/splitTicket.svg","assets/icons/star.svg","assets/icons/starHalf.svg","assets/icons/steeringWheel.svg","assets/icons/success-check.svg","assets/icons/success-icon.svg","assets/icons/success.svg","assets/icons/successDuotone.svg","assets/icons/successOutline.svg","assets/icons/swap.svg","assets/icons/thumbsDown.svg","assets/icons/thumbsUp.svg","assets/icons/timer.svg","assets/icons/trashCan.svg","assets/icons/trendingUp.svg","assets/icons/trophy.svg","assets/icons/tune.svg","assets/icons/twitter.svg","assets/icons/ui-icon-birthdays.svg","assets/icons/ui-icon-cabana.svg","assets/icons/ui-icon-dining.svg","assets/icons/ui-icon-pass.svg","assets/icons/unlock.svg","assets/icons/user-new-ui.svg","assets/icons/user.svg","assets/icons/verified.svg","assets/icons/viewDetails.svg","assets/icons/virtual-events.svg","assets/icons/warning.svg","assets/icons/warningOutline.svg","assets/icons/web.svg","assets/icons/whirlpool.svg","assets/icons/white-check-mark.svg","assets/icons/wifi.svg","assets/icons/wiley.svg","assets/icons/wolf.svg","assets/icons/youtube.svg","assets/icons/zoomOut.svg","data/birthdayPartyTimesAndLocationsJson.js","data/bookingEngineAlert.js","data/mysteryDealPromoList.js","data/promoCodeListJson.js","ScrollToTop.js","infrastructure/interceptors/axios_interceptors.js","serviceWorker.js","api/clients/GeolocationApiClient.js","store/componentStores/utilities/endpointTtlValidation.js","components/utilities/hooks/useEndpointValidation.js","components/AppConfiguration/AppConfiguration.js","store/componentStores/LodgeLocations/lodgeLocations.actions.js","store/componentStores/Geolocation/geolocation.actions.js","components/Cart/assets/styles.js","components/Cart/utilities/constants.js","components/Cart/CartContainer.js","components/FloatingMessage/assets/images.js","components/FloatingMessage/assets/styles.js","components/FloatingMessage/FloatingMessage.js","components/FloatingMessage/utilities/copy.js","components/IEModal/index.js","store/componentStores/IEModal/ieModal.actions.js","GlobalStyle.js","App.js","index.js"],"names":["THEMES_IMAGES","addAliases","arr","aliases","forEach","key","i","Object","defineProperty","enumerable","get","this","rawBreakpoints","breakpoints","map","n","mediaQueries","deviceSizes","bigScreen","desktop","tablet","phone","baseMobileFirst","mediaScreens","keys","reduce","acc","label","css","toString","space","fontPrimary","fontSecondary","fontMontBold","fontMontBlack","fontOswald","fontOswaldBold","fonts","primary","secondary","tertiary","quaternary","quinary","senary","fontSizes","fontWeights","light","regular","medium","bold","semibold","extraBold","borderGrayLight","colors","snowMountainGrey","radii","boxShadows","preciousStoneBlue","deepLakeBlue","digitalBrightRed","pureWhite","kiddiePoolBlue","elevation","timingFunctions","easeInOut","easeOut","easeIn","borders","voyagersColors","fontFamily","style","prop","cssProperty","zIndex","labels","base","createZIndex","buttonSize","large","padding","fontSize","minHeight","lineHeight","borderRadius","small","height","extraSmall","beButton","mobile","disabledBase","pointerEvents","buttonBase","display","alignItems","justifyContent","cursor","fontWeight","letterSpacing","textTransform","textAlign","textDecoration","border","whiteSpace","overflow","outline","boxShadow","focusBlue","buttonPrimaryBase","color","backgroundColor","darkPreciousStoneBlue","borderColor","buttonDealsBase","buttonSecondaryBase","buttonGhost","opacity","buttonBookBase","woodpeckerRed","socialConnectionButton","position","nightSkyBlack","svg","left","top","transform","buttonAffirmConnect","affirmBlue","backgroundSize","baseArrowButton","transition","verticalAlign","content","width","right","backgroundRepeat","paddingLeft","paddingRight","buttonPrimary","buttonDeals","buttonSecondary","buttonBook","buttons","ghost","deals","book","affirmConnect","short","shortSecondary","bookWidget","socialConnection","primaryArrow","backgroundImage","getAssetsUrl","ASSETS_LOCATIONS","ROOT","secondaryArrow","ghostArrow","dealsArrow","bookArrow","bookWidgetArrow","primaryInverted","partyRequestForm","digitalYellowOrange","primaryVoyagers","extraLarge","alerts","info","informationBlue","a","success","deepForestGreen","successGreen","warning","errorOrange","offer","sandstoneBuff","stackAccordionHeaderBase","colorDetails","borderWidth","stackAccordionHeaderExpandedBase","borderBottom","stackAccordionBodyBase","borderTop","bg","stackAccordionHeaderPrimary","stackedAccordionPrimary","header","body","baseColor","expandedHeader","stackAccordionHeaderSecondary","stackedAccordionSecondary","stackAccordionHeaderDanger","pink","stackedAccordions","danger","theme","letterSpacings","normal","caps","lineHeights","borderHighlight","kiddiePoolBlueBorder","radius","shadows","maxContainerWidth","maxContainerWidthAkela","duration","fast","slow","slowest","transitionDelays","xLarge","CONTENT","GIFS","JPG","JS","PNG","SVG","WEBP","VIDEO","ANIMATION","url","file","replace","AVAILABILITY_KEY_ERROR_TYPE","NO_INVENTORY_ERROR_TYPE","CHECKIN_TIME","SITE_NIAGON","SITE_POCOPA","RESERVATION_STATUS","canceled","LATE_CHECKOUT_PREFIXES","code","itemCode","LATE_CHECKOUT_PACKAGES_CODES","HOWL_N_LEARN_CODE","CHECKOUT_TIMES","AM_11","PM_1","PM_2","EVENT_PARAMS","fbEventId","PRODUCT_SCOPES","suiteCheckout","postPurchase","productImpressions","productClick","addToCart","standardPurchase","EVENT_CATEGORIES","GTM","transaction","purchasePackage","purchaseSuite","checkoutOption","modifyError","postPurchasePackage","fbPurchase","signIn","passwordChange","signUp","leadgen","checkoutStep","removeFromCart","packages","search","rateCalendar","daypassPackagePurchase","passPackagePurchasesVariationA","passPackagePurchasesVariationB","INTERACTIONS","postReservation","GTM_EVENT","NAME","websiteVitals","daypassDiningPackagePurchase","passPurchase","signInAttempt","signInSuccess","signInFailure","signUpAttempt","signUpSuccess","signUpFailure","ACTION","signUpAttemptRaF25","signUpAttemptRaF50","signUpSuccessRaF25","signUpSuccessRaF50","leadGenSuccess","passwordChangeRequest","passwordChangeAttempt","passwordChangeSuccess","passwordChangeFailure","openRateCalendar","closeRateCalendar","daypassPurchaseVersionB","daypassPurchaseVersionC","daypassPurchaseVersionD","LABEL","greatWolf","facebook","google","apple","greatWolfLowerCase","PURCHASE_LOCATION","post_package_purchase","standard_purchase","pre_checkin","DATE_FORMATS","default","defaultWithSlash","monthDayYearLeadingZeros","displayFormat","formatDayMoreDetailed","formatMonthDate","formatMonthLetterDate","formatDayEvenMoreDetailed","monthDayFormat","dayMonthYearFormat","monthLetterDayYear","formatDay","numberFormat","monthName","weekMonthYear","monthDayYear","dayMonthShortYearFormat","shortDateFormatWithWeekday","dayNameMonthDayYear","monthLongDayCommaYear","monthLongDay","TALL_MODAL","SHORT_MODAL","LATE_CHECKOUT_IMAGE_URL","CONFETTI_ANNIMATION_URL","PRIVACY_POLICY","CALIFORNIA_POLICY","TERMS_AND_CONDITIONS_SUFFIX","TERMS_AND_CONDITIONS_ACCOUNT_CREATION","MAX_GUESTS_COUNT","DAY_PASSES_TYPE","halfDay","fullDay","roomType","DAY_PASSES_ROOM_TYPE","WPHLF","WPFULL","DAY_PASS_QID_REQUIRED","CABANAS_CODES_TYPES","indoor","outdoor","group","PACKAGES_MESSAGES","packageNotAvailable","LODGE_CONFIG_TYPES","IDME_WIDGET","LOYALTY","PLAN","USER_SETTINGS","CREDIT_PACKAGES","CMP","PAYMENT","LEAD_GEN","CART","BOOKING_WIDGET","BDAY_BOOKING_WIDGET","PACKAGE_TYPE","dining","pass","activity","birthday","cabanasAndFlexTrip","main","attractions","flexTrip","lateCheckOut","family","bundle","PACKAGE_CHARGE_TYPE","personPerDay","byPackage","PACKAGES_CATEGORY","activities","CURRENCY_CODE","CAD","RECOMMENDED_FOR_YOU","MASK","PHONE_MASK_REGEX","ONLY_DIGITS_REGEX","PHONE_MASK_FOR_MASKED_FIELD","OFFER_CODE_TYPE","GUARANTEE_TYPE","advancePayment","checkInPayment","NOTIFICATION_TYPE","failed","NEW_DAYS_TO_ADD","SUITE_TYPES","unknown","standard","themed","premium","condo","BACKEND_PAYMENT_TYPES","Affirm","PACKAGES_TITLE","inclusiveMeal","PACKAGES_GROUPS","RATE_CAL_DAY_STATUS","available","checkout","unavailable","SORTING_CRITERIA","descending","ascending","recommendedForYou","LEADGEN_MODAL_DISPLAY_TIME","ProgressBarStatus","COMPLETED","PENDING","ACTIVE","MobileAppPageUrl","CUSTOMER_CONTACT_CENTER_NUM","PERSONALIZATION_RULES","interactions","PERSONALIZATION_PACKAGE_RULES","APPLE_SIGN_IN_SUCCESS_EVT","APPLE_SIGN_IN_FAILURE_EVT","ROOM_RATES_ERROR_TITLE","ROOM_RATES_ERROR_MSG","ROOM_RATES_DATES_EXCEEDED_ERROR_MSG","SUITE_ERROR_MSG","COSTSUMMARY_TOOLTIP","sustainabilityFee","resortFee","resortFeeJVersion","IS_CLASSES","packageContainer","packagePrice","suiteContainer","suiteDetails","roomPrice","CHECK_IN_STATUS","AVAILABLE","UNAVAILABLE","SUCCESSFUL","INVALID","PACKAGES_WITHOUT_CHARGE_TYPE","USER_PATCH_OPERATIONS","ADD","EDIT","REMOVE","SUPPORTED_COUNTRIES","UnitedStates","Canada","VALID_COUNTRIES","TOOLTIP_DIRECTION","TOOLTIP_POSITION","topLeft","topRight","bottom","bottomLeft","bottomRight","TOOLTIP_POSITIONS","tops","bottoms","PAYMENT_METHODS_ICONS","STATIC_CDN","TAXES","PARKING_FEE","RESORT_FEE","SUSTAINABILITY_FEE","PRIVATE_LODGING_FEE","CALENDAR_RESTRICTIONS_TYPES","CLOSE","CLOSE_TO_ARRIVAL","CLOSE_TO_DEPARTURE","MIN_LENGTH_OF_STAY_ON_ARRIVAL","MIN_LENGTH_OF_STAY","SUITE_AVAILABILITY_TYPES","AVAILABLE_TYPE","UNAVAILABLE_TYPE","PARKING_PACKAGE_CODE","CONNECTICUT","ROOM_RATE_TYPE","roomOnlyWithoutWaterParkPass","roomWithWaterParkPass","roomWithVoyagers","PAYMENT_ERROR_MESSAGES","OWS_SYSTEM_ERROR","CREDIT_CARD_AUTHORIZATION_FAILED","PAYPAL_AUTHORIZATION_FAILED","INVALID_CREDIT_CARD_EXPIRATION","INVALID_RATE_CODE_FOR_PROMOTION_CODE","RATE_CODE_NOT_AVAILABLE","ROOM_UNAVAILABLE","RATES_MISMATCH","AVAILABILITY_KEY_NOT_FOUND","NO_INVENTORY_FOR_SELECTED_SUITE","buttonSizeStyle","variant","StyledButton","styled","button","buttonStyle","fluid","floating","Button","props","defaultProps","size","AffirmButton","restProps","FacebookButtonIconIcon","viewBox","d","fill","displayName","GoogleButtonIconIcon","div","themeGet","Text","StyledConnectionButton","SocialConnectionButton","email","isLinked","enableUnlink","handleUnlink","Icon","StyledAccordion","Accordion","StyledAccordionItem","AccordionItem","IconIMGWrapper","Flex","IconIMG","img","IconText","AccordionWrapper","handleOnChange","selected","accordionData","renderHeader","paymentMethod","AccordionIcon","isPayment","icon","require","src","alt","title","allowZeroExpanded","preExpanded","onChange","paneData","show","allowedOnLocation","uuid","expanded","Box","py","child","CalendarWrapper","lg","shouldDisableButton","currentMonth","GwDatesWrapper","year","today","month","Calendar","date","availableDates","onMonthChange","isLoading","useState","focused","setFocused","setCurrentMonth","isDesktop","useMediaQuery","query","isDateOutsideRage","isBefore","onChangeMonth","format","onDateChange","onFocusChange","numberOfMonths","hideKeyboardShortcutsPanel","enableOutsideDays","daySize","verticalBorderSpacing","isOutsideRange","isDayBlocked","find","isSame","onNextMonthClick","onPrevMonthClick","weekDayFormat","noNavPrevButton","isDayHighlighted","onPreviousMonthClick","VARIANTS","LIGHT","bgColor","titleColor","descriptionColor","LIGHT_BLUE","DARK","Callout","image","description","buttonLabel","buttonVariant","onClick","background","pl","pr","flexDirection","StyledBox","shouldPreventOverflowX","Container","children","maxWidth","px","mx","MinusThinIcon","BUTTON_VARIATIONS","LargeButtonCSS","SmallButtonCSS","CounterWrapper","isNewWidgetStyleActive","styleVariation","md","disabled","buttonDisabledBG","variation","buttonBG","AnimationCircle","DisplayText","min","max","iconColor","iconDisabledColor","Counter","value","disableIncrease","canBeDecreased","canBeIncreased","type","id","getSvgSize","GREEN_BG","Fixed","propTypes","PLACEMENTS","TOP_RIGHT","TOP_LEFT","BOTTOM_RIGHT","BOTTOM_LEFT","PLACEMENT_CORNERS","HintWrapper","ContentWrapper","Absolute","placement","includes","split","yAnchor","xOffset","transitionStyles","entering","entered","exiting","exited","Hint","timeout","disabledGestures","delay","isActive","setActive","useEffect","defaultStyle","getContentShape","shape","Array","join","onMouseEnter","setTimeout","onMouseLeave","clearTimeout","CSSTransition","in","state","ImageBoxWrapper","ImageBox","otherBoxProps","SupOrSubText","textToUse","avoidFormat","textArray","fontSizeValue","getTheFirstElementOfArray","as","getTheLastElementOfArray","colorName","colorCategory","springGreen","deepPurple","lightPurple","magenta","deepOrange","mysteryOffer","woodBrown","brightYellow","headlineColor","deepForestGreenBorder","blueGradient","emailCaptureBg","loyaltyGreen","loyaltyBackground","loyaltyHoverBackground","voyagersGreen","plansActionTypes","SET_PLANS_AVAILABILITY_DETAILS_ERROR","GET_PLANS_AVAILABILITY_INFO_SUCCESS","GET_PLANS_AVAILABILITY_INFO_ERROR","GET_PLANS_AVAILABILITY_INFO_LOADING","SET_PLANS_IS_ERROR_MODAL_ALREADY_CLOSED","GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS","GET_PLANS_RECENT_SEARCHES_INFO_LOADING","GET_PLANS_RECENT_SEARCHES_INFO_ERROR","SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS","DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS","SELECT_PLANS_SUITE_FOR_RANGE_TYPE","UNSELECT_PLANS_SUITE_FOR_RANGE_TYPE","OPEN_PLANS_RATES_CALENDAR","CLOSE_PLANS_RATES_CALENDAR","CLEAN_PLANS_CALENDAR_RATES_BY_STAY","LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION","OPEN_PLANS_CALENDAR_RATES_BY_STAY","OPEN_PLANS_RATES_CALENDAR_RESTRICTION","OPEN_PLANS_RATES_CALENDAR_RESTRICTION_INCREMENT","CLOSE_PLANS_RATES_CALENDAR_RESTRICTION","OPEN_PLANS_PAYMENT_LEAVE_MODAL","CLOSE_PLANS_PAYMENT_LEAVE_MODAL","GET_PLANS_LOWEST_RATES_CALENDAR","GET_PLANS_LOWEST_RATES_CALENDAR_MOBILE","GET_PLANS_LOWEST_RATES_CALENDAR_ERROR","CLEAN_PLANS_CALENDAR_RESTRICTIONS_AND_LOWEST_RATES","GET_PLANS_AVAILABILITY_HIGHEST_RATES","GET_PLANS_AVAILABILITY_HIGHEST_RATES_SUCCESS","GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR","GET_PLANS_AVAILABILITY_HIGHEST_RATES_DATES_EXCEEDED_ERROR","SET_PLANS_APPLIED_FILTERS","SET_PLANS_SELECTED_SUITE_NAME_FOR_CALENDAR","GET_PLANS_AVAILABILITY_RANGE","GET_PLANS_AVAILABILITY_RANGE_SUCCESS","GET_PLANS_AVAILABILITY_RANGE_ERROR","GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING","GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR","GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_RESET","SET_PLANS_LATEST_J_VERSION_EVENT_ERROR","SET_PLANS_LATEST_H_VERSION_EVENT_ERROR","GET_PLANS_ITEM_QUANTITY_TYPE","GET_PLANS_ITEM_QUANTITY_SUCCESS","GET_PLANS_ITEM_QUANTITY_ERROR","TOGGLE_PLANS_EMAIL_CAMPAIGNS","CLEAR_PLANS_ALL_AVAILABILITY_DATA","SET_PLANS_IS_CALIFORNIA_RESIDENT","CLEAN_PLANS_IS_CALIFORNIA_RESIDENT","SET_PLANS_QUALIFYING_ID","GET_PLANS_QUALIFYING_ID_HAS_ERROR","SET_PLANS_TAB_INDEX_BY_EMAIL_CAMPAIGN","SET_PLANS_IS_BOOKING_WIDGET_FOCUSED","SET_PLANS_SORTING_ORDER","SET_PLANS_SUITE_CODE_FILTER","SET_PLANS_IS_CART_OPEN_CLOSE","SET_PLANS_IS_CART_OPEN_CLOSE_CLEAN","SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED","SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN","internalDate","isInternalDate","isDayjs","p","extend","_gwDateFromat","_today","_yesterday","subtract","_tomorrow","add","_localeData","localeData","_getInternalDate","clone","_createDate","dateStr","_todayStr","_yesterdayStr","_tomorrowStr","isStringAndDefaultFormat","inputFormat","test","yesterday","number","parseDate","monthNumberFromName","newYearNumber","endOf","unit","startOf","day","weekday","amount","diff","dateStr1","dateStr2","isBetween","start","end","inclusionRules","isAfter","isSameOrAfter","isSameOrBefore","isToday","subtractDateByAnother","date1","date2","formatRange","firstDateStr","secondDateStr","separator","set","isValid","strictCheck","getLocaleDateFormat","formatKey","longDateFormat","firstDayOfWeek","tomorrow","gwDateFromat","getLocaleData","parseZone","createCCDate","isTomorrow","isYesterday","lodgeConfigActionTypes","ID_ME_DATA_PARAMETERS","LOADING_LODGE_CONFIG","ERROR_LODGE_CONFIG_LOADING","CLEAR_LODGE_CONFIG_LOADING","SUCCESS_LODGE_CONFIG_LOADING","LOADING_LODGE_CONFIG_PLAN","ERROR_LODGE_CONFIG_LOADING_PLAN","CLEAR_LODGE_CONFIG_LOADING_PLAN","SUCCESS_LODGE_CONFIG_LOADING_PLAN","LOADING_LODGE_CONFIG_USER_SETTINGS","ERROR_LODGE_CONFIG_USER_SETTINGS","CLEAR_LODGE_CONFIG_USER_SETTINGS","SUCCESS_LODGE_CONFIG_USER_SETTINGS","LOADING_LODGE_CONFIG_CREDIT_PACKAGE","ERROR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE","CLEAR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE","SUCCESS_LODGE_CONFIG_LOADING_CREDIT_PACKAGE","LOADING_LODGE_CONFIG_CMP","ERROR_LODGE_CONFIG_LOADING_CMP","CLEAR_LODGE_CONFIG_LOADING_CMP","SUCCESS_LODGE_CONFIG_LOADING_CMP","LOADING_LODGE_CONFIG_PAYMENT","ERROR_LODGE_CONFIG_LOADING_PAYMENT","CLEAR_LODGE_CONFIG_LOADING_PAYMENT","SUCCESS_LODGE_CONFIG_LOADING_PAYMENT","LOADING_LODGE_CONFIG_LEADGEN","ERROR_LODGE_CONFIG_LOADING_LEADGEN","CLEAR_LODGE_CONFIG_LOADING_LEADGEN","SUCCESS_LODGE_CONFIG_LOADING_LEADGEN","RESET_LODGE_CONFIG","LOADING_LODGE_CONFIG_CART","ERROR_LODGE_CONFIG_LOADING_CART","CLEAR_LODGE_CONFIG_LOADING_CART","SUCCESS_LODGE_CONFIG_LOADING_CART","LOADING_LODGE_CONFIG_BOOKING_WIDGET","ERROR_LODGE_CONFIG_LOADING_BOOKING_WIDGET","CLEAR_LODGE_CONFIG_LOADING_BOOKING_WIDGET","SUCCESS_LODGE_CONFIG_LOADING_BOOKING_WIDGET","LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET","ERROR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET","CLEAR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET","SUCCESS_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET","routes","blank","home","planSearchForm","include","t2","t3","dynamicFlow","self","flowSteps","plan","payment","paymentSuccess","birthdayParties","partySelect","foodDrinks","packagesAddons","guestInfo","requestForm","daypass","booking","eventCalendar","forgotPassword","changePassword","unlockAccount","myRecentSearches","profile","myPreferences","reservations","myReservations","detail","addPackage","packagemodal","reservation","checkIn","folio","customerService","contactUs","leadGenSignUp","loyaltyLandingPageForm","promoSignUp","referAFriend","referAFriendLoggedOut","venues","planner","widget","editCopyByReplaceString","copyToChange","newCopy","editCopyByReplaceStringWithBold","splittedText","editCopyByReplaceWithComponent","stringArray","indexOfKey","indexOf","componentToUse","result","iterator","index","length","textValue","concat","push","editCopyByReplaceMultipleStrings","newCopys","keyWord","editCopyByReplaceWithMultipleComponent","keyToReplace","editCopyFindAndReplaceByKey","newKeyToAdd","pluralizeWordsDictionary","person","pluralize","word","count","suffix","ignoreDictionary","zeroCasePlural","formatPrice","price","toFixed","PROMO_CODE_COPY","CHANGE_SUITE_SELECTION","ROOM_SAVINGS_APPLIED","WATERPARK_PASS","INCLUDED","ROOM_WITH_NO_WATER_PASS","ADD_PASSES","SUBTOTAL","TAXES_NOT_INCLUDED","TOTAL_SAVINGS","POINTS_APPLIED","TOTAL","EXPIRATION_DATE","BONUS_DEALS_APPLIED","EXCEED_AMOUNT","ADDITIONAL_CHARGES","CHECK_IN","CHECK_OUT","STAY_SUMMARY_DESKTOP","STAY_SUMMARY_MOBILE","DUE_TODAY","DUE_TODAY_CAP","DUE_CHECKIN","SEASONS_CODE","BOOKING_CART_TITLE","BOOKING_CART_EMPTY","BOOKING_CART_BOOK_NOW","BOOKING_CART_SUBTOTAL","DATES","PROMOTION_CODE","REMOVE_PACKAGE","REMOVE_SUITE","EDIT_SUITE","REMOVE_ITEM_TITLE","REMOVE_SUITE_TITLE","EDIT_SUITE_TITLE","CANCEL","CONTINUE_BOOKING","CONTINUE_TO_STEP","EXPIRED_BOOKING_TITLE","EXPIRED_BOOKING_TEXT","RESTART_MY_BOOKING","WARNING","getLastName","getFirstName","getArrivalDate","getArrivalDateObject","getDepartureDate","getDepartureDateObject","getOfferCode","getReservationId","getReservationIdOnAps","getStatus","getAdults","getBillableGuest","numChildrenOverTwo","filter","kid","getKids","getKidsAges","getRoomType","getProperty","getNumberOfNights","getSuiteDetails","includePropertyAndRoomType","suiteDetail","isCabana","roomDescription","rateInfo","totalRoomRate","product","totalPrice","selection","numAdults","numChildren","adults","kids","totalKids","guests","lenght","offerCode","property","lodge","getTotalRoomRate","getTaxesAmountWithCabanas","taxesAmount","cabanas","totalTaxesCabanas","c","status","EReservationStatus","CANCELED","totalTaxes","total","roomRate","getResortFee","getParkingFee","getSustainabilityFee","getSummaryTotal","getSummaryTotalWithCabana","totalCabanas","totalCabanaWithTaxes","getPackageTotal","getTotalRoomRateAndPackages","getPackageTotalWithCabanas","getCostSummarySuiteName","getDepositePaid","getRoomDeposit","roomDeposit","getSite","getPackages","newAPI","oldAPI","getCabanas","data","addOns","item","getDisplayName","getIsLoading","getRequestSuccess","getError","getCheckoutTime","checkoutTime","pkg","packageCode","getReservation","getDueAtCheckinAmountWithCabanas","Number","RESERVATION_TYPES","suite","dayPass","cabana","getReservationType","dayPassesCodes","values","cabanaCodes","getCheckIn","getSpecialRequests","getBirthDayCelebration","getComments","getCabanasAsPackages","cabanasEntity","cabanasFiltered","sortBy","insertedAt","cabanasAcc","currentCabana","cabanaToAdd","shortDescription","endDate","arrival","startDate","packageAmount","quantity","tax","totalAmount","unitAmount","totalRoomRateAndPackages","getIsFullDayPass","getSuppressRate","getCabanaDeposit","getPointsDiscountApplied","getOffersDiscountApplied","getReservationAddress","address","billingAddress","getCanAddGuestsFlag","canAddGuests","getTotalBillAndNonBillGuest","getPackageErrorMessage","packageErrorMessageData","getAddGuestReservationObj","addGuestReservationSuccess","getAddGuestReservationErrorMessage","addGuestReservationErrorMessage","getRateType","rateType","getRoomUpgradeInfo","roomUpgrade","getTaxesAndFeesForReservation","taxesAndFees","getPrivateLodgingFee","costSummary","PRIVATE_LODGING","privateLodgingFee","cmpDataSelector","window","location","pathname","entities","reservationDetails","manageReservationDetails","LocalStorageKeys","REDUX_LOCAL_STORAGE","RecentSearches","Itineraries","Ungated","InteractionsUserId","SALE_TOKEN","GET_SESSION_STORAGE","SESSION_STORAGE","URL_LOCATION","SessionStorageKeys","REFER_A_FRIEND","ENDPOINT_TTL_KEY","initializeState","initialState","undefined","objectIntersected","objectIntersection","setNewSessionKey","sessionData","sessionStorage","getItem","existingData","JSON","parse","neTempObject","setItem","stringify","getSpecificItem","valueToSearch","keyState","getData","isReferAfriendSessionCreatedAlready","haveSessionAlready","sessionStorage_transfer","event","console","log","sessionstotransfer","localStorage","removeItem","buildPurchaseEnhancedECommerceObject","products","revenue","shipping","voyagerPointsDiscount","offersPointsDiscount","dayType","UUID","eventCategory","productScope","uniquePackages","Map","m","unique","dimension63","getPaymentDescription","resortLocation","getLocation","purchaseLocation","ecommerce","currencyCode","getReservationCurrency","site","purchase","actionField","uuidv4","confirmationNumber","externalId","affiliation","coupon","rateCode","SIP","buildSuitePurchaseEnhancedECommerceObject","maxOccupancy","suiteCategory","checkInDate","checkoutDate","name","trim","brand","category","dimension29","dimension30","dimension31","numberOfNights","dimension32","dimension33","dimension34","dimension35","dimension36","dimension61","dimension62","buildPackagesPurchaseEnhancedECommerceObject","addedPackagesCodes","groupedAddedPackages","packagesContent","formatedOffers","addedPackagesFormat","packagesByCode","keysAcc","currentPackage","pkgType","getPkgType","revenueAcc","packageItem","packageName","packageCategory","buildImpressionsEventObject","eventProps","impressions","isArray","buildImpressionsDataObject","kidsAges","adultsCount","kidsCount","currentPosition","customPurchaseLocation","suiteCode","totalRate","suiteBrand","list","dimension27","flags","dimension28","selectedSuite","extraGuestPurchaseObj","additionalGuests","nights","departure","childrenAges","buildImpressionsDataObjectPkgs","packageType","getDayPassBaseObject","city","region","stateProvince","item_code","item_group","room_type","room_name","roomTypeDescription","getBaseSuiteObject","locationDisplayName","locationState","checkout_date","num_children","num_infants","numChildrenUnderTwo","children_ages","room_nights","promo_code","getEventBaseObject","country","buildProductClickEnhancedECommerceObject","checkinDate","click","buildProductEnhancedECommerce","avgNightlyRate","buildAddToCartEnhancedEcommerceObject","eventType","buildSearchObject","searchType","bonusDealValue","searchLocation","kidAges","discountCode","residentClick","bonus_deal_value","arrival_date","departure_date","numberOfAdults","numberOfKids","NumNights","getSignInEventObject","action","getSignUpEventObject","isLeadGenSignUp","eventObject","sign_up_location","getLeadGenEventObject","getPasswordChangeEventObject","getRaFSignUpEventObject","MemberId","slice","buildCheckoutEventObject","dates","step","isUserLoggedIn","option","checkinDateSelection","checkoutDateSelection","loggedinStatus","buildPackageCartEventObject","eventPackage","packagesTable","qtyDiff","currentPathLocation","isCartOpenClose","isRecommended","isRecommendedPackage","getPackageCategory","toLowerCase","getPackageQuantity","rateCalendarGA","OFFERS_ACTIONS","offerEventBuilder","offerInfo","bonus_deal_name","buildCancelReservationEventObject","cancellationData","suiteName","suiteTotalPrice","reservationId","paymentType","totalRefundAmount","cancelNumber","cancellationFeeAmount","productPackages","dimension68","refundAmount","refund","cancellationFee","cancellationConfimationNumber","voyagersAnalyticsSignInEventDefaultParameters","sign_in_location","sign_in_group","military_status","getSignInVoyagersEventObject","eventName","getSignUpVoyagersEventObject","getSignInAttemptEventObjectVoyagers","getSignInSuccessEventObjectVoyagers","getSignInFailureEventObjectVoyagers","getSignUpAttemptEventObjectVoyagers","getSignUpSuccessEventObjectVoyagers","getSignUpFailureEventObjectVoyagers","getBirthdayPartySearchObject","partyDate","partyAdults","partyKids","partyInfant","partySpectators","partyTime","numberOfInfants","numberOfSpectators","party_time","getBirthdayPartyProductObject","productTitle","productId","productPrice","dimension64","dimension65","dimension67","getBirthdayPartySelectObject","pushEvent","dataLayer","warn","internalDataLayer","strikeThrough","italic","fontStyle","underline","toLower","capitalize","flex","numberStringOrArray","PropTypes","oneOfType","string","array","oneOf","bool","mt","mr","mb","ml","my","pt","pb","Span","withComponent","P","S","API_URLS","REACT_APP_RESERVATION_SERVICE_ENDPOINT","REACT_APP_AVAILABILITY_SERVICE_ENDPOINT","REACT_APP_MOBILE_SERVICE_ENDPOINT","REACT_APP_PAYMENT_SERVICE_ENDPOINT","REACT_APP_RECENT_SEARCHES_SERVICE_ENDPOINT","REACT_APP_PRICING_SERVICE_ENDPOINT","REACT_APP_USER_SERVICE_ENDPOINT","REACT_APP_SIP_RATE_SERVICE_ENDPOINT","REACT_APP_ITEM_SERVICE_ENDPOINT","REACT_APP_LODGE_SERVICE_ENDPOINT","REACT_APP_CONCIERGE__ENDPOINT","REACT_APP_ROOM_BOOKING_ENDPOINT","REACT_APP_TRAILHEAD_BOOKING_SERVICE_ENDPOINT","REACT_APP_USERACCOUNT_ENDPOINT_TIOGA","REACT_APP_MANAGE_BOOKING_ENDPOINT","REACT_APP_BIRTHDAY_BOOKING_ENDPOINT","apiDomainURL","regex","getApiUrl","version","tioga","envUrl","dynamicURL","document","setDynamicUrl","process","getGraphQLUrl","getTrailheadUrl","getGeolocationUrl","HeaderTextMobile","HeaderTextTotalContainer","HeaderTextTotalMobile","HeaderTextSubtotal","HeaderTextDesktop","OffersContainer","isCartVariation","OfferImageContainer","CustomSummaryItemTitle","SummaryContent","Item","CustomSummaryItemOffer","PointsContainer","CartLogoContainer","overlayVisible","CartMobileSubtotalTopArrow","arrowPosition","CartBubleTopArrow","CartBubble","CartLogoImg","CartLogoWithAnimation","showAnimation","CartLogoCounter","Overlay","OverlayContainer","isDevelopment","isCartEmpty","StyledWave","ScrollContainer","onPlanPage","EmptyCartImageContainer","CartCardsContainer","CartCardTitle","CartCardImageContainer","cover","isDiningCredit","CartPackageListItemContainer","CartModalButtonContainer","CartModalButtonsContainer","TotalSavingsContainer","AddWaterPassesSummary","AddWaterPassesPageContainer","DisableAddButtonText","SummaryPackagesCardContainer","reservationDetailsActionTypes","FETCH_RESERVATION_DETAILS_REQUEST","FETCH_RESERVATION_DETAILS_SUCCESS","FETCH_RESERVATION_DETAILS_SUCCESS_END_LOADING","FETCH_RESERVATION_DETAILS_FAILURE","FETCH_RESERVATION_DETAILS_CLEAR","UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS","GTM_POST_RESERVATION_DETAILS_SALE_PACKAGE_ADDED","RESERVATION_DETAILS_CABANA_IS_LOADING","RESERVATION_DETAILS_CABANA_SUCCESS","RESERVATION_DETAILS_CABANA_FAILURE","CLEAR_RESERVATION_DETAILS_CABANA_DETAILS","CLEAR_RESERVATION_DETAILS_DETAILS_ERROR","PACKAGE_RESERVATION_DETAILS_MESSAGE_ERROR","CLEAR_RESERVATION_DETAILS_PACKAGE_MESSAGE_ERROR","UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_SUCCESS","UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_CLEAR","UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR","UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR_CLEAR","EVENT_ACTIONS","login","dayPassPageVisit","dayPassPaymentVisit","dayPassSearchDate","dayPassSearchGuests","dayPassEnterPromoCode","dayPassPageConfirmationVisit","dayPassEnterQualifyingId","dayPassCheckout","dayPassBooking","suiteCheckoutRoomRestrictedError","suiteCheckoutRateUnavailableError","suiteCheckoutRateCodeUnavailableError","suiteCheckoutRateMismatchError","suiteCheckoutPropertyRestrictedError","suiteCheckoutRoomUnavailableError","suitePlanSearchInactiveOfferCodeError","suitePlanSearchInvalidOfferCodeError","suitePlanSearchMaximumAdvanceBookingError","suitePlanSearchMinimumAdvanceBookingError","suitePlanSearchMinStayError","suitePlanSearchMaxStayError","suitePlanSearchInactivePromoError","suitePlanSearchRoomUnavailableError","suitePlanSearchRoomRestrictedError","suitePlanSearchRateCodeNotAvailableError","suitePlanSearchRatesMismatchError","findYourReservationConfirmationNumber","findYourReservationLogin","findYourReservationLoginFail","navMyProfile","navLogout","navFindMyRes","navSignIn","navSignUp","navRecentSearches","modalClosed","specialRequestDropdownClick","specialOccasionDropdownClick","packageAdded","packageRemoved","viewPackageDetails","optinModalUserClose","optinModalUserErrorClose","bonusDealClicked","viewItemList","setLocation","logOWSError","message","ReactGA","logOfferCodeError","logFindYourReservationLoginSuccess","logFindYourReservationLoginFail","logFindYourReservationConfNumber","logDayPassBooking","logDayPassCheckout","logDayPassSearchPromoCode","logDayPassSearchGuest","logDayPassSearchDate","logDayPassSearch","logDayPassOnDateChange","logDayPassPageVisit","logDayPassPaymentVisit","logDayPassConfirmationVisit","logSuiteCheckoutError","errorType","logSuitePlanSearchError","logLoggedInUser","logBookingWidgetSearch","arrivalDate","departureDate","occupants","promoCode","logSearchArrivalDate","logSearchDepartureDate","logSearchNumberOfNights","logSearchOccupants","logSearchPromoCode","logMyProfileNav","nonInteraction","logLogout","logFindMyResNav","logSignInNav","logSignUpNav","logLeadGenModalClose","logRecentSearchesNav","logPostPackageSale","packagesBeingAdded","quantityAdded","logAddedPackagePostConversion","logRemovedPackagePostConversion","logViewPackageDetailsPostConversion","sendCheckoutStep","store","getState","currentLodge","getResortLocation","authClient","AuthClient","isUserloggedIn","isLoggedIn","checkoutEventObject","error","logBonusDealApplied","activeOffers","activeOffer","birthdayPartySuccessfulTransactionProduct","analyticsFormatDate","birthdayPartySuccessfulTransaction","birthdayFlowPayload","partyName","birthdayParty","selectedParty","priceDetails","amountTotal","selectedPackages","extraPackages","isExtra","curr","successfulTransactionEventObject","amountTax","ConfirmationNo","optimizelyChargePackagesAtCheckout","chargePackagesAtCheckout","optimizelyPackageAemBestValue","packageAemBestValue","optimizelyAttractionPassesMessaging","optimizelyHideActivityTabs","optimizelyHideFamilyTab","lateCheckoutAndEarlyAccessWaterParkModal","optimizelyShowPaymentSignIn","optimizelyHideLoyalty","optimizelyDaypassPackagesSilver","optimizelyDaypassPackagesGold","optimizelyDaypassPackagesPlatinum","optimizelyHideVoyagersBannerMobile","TESTS_DICTIONARY","optimizelySuiteCardB","optimizelySuiteFilterIcons","optimizelyPoconosTowerOption","optimizelyAddParkingFee1","optimizelyAddParkingFee2","optimizelyAddParkingFee3","optimizelyWaterParkPassesWarning","optimizelyTwoImagesSuiteCard","optimizelyNewFilters","optimizelyPaymentWarnings","optimizelyKeepPackagesOnSuiteChange","optimizelySuperscriptStaySummarySuite","optimizelyPromoClarity","optimizelyTruncateCentsVillas","optimizelyAttractionsPassesSelection","optimizelyPasswordValidationStyle","optimizelyHierarchyFlip","optimizelyResortFeeInSuiteCard","optimizelyNewCardNonPoconos","optimizelySecureCheckout","optimizelyCartFlow","optimizelyAppleGoolePayOrder","optimizelyDisplayResortFeeWithTotalInSuiteCardH","optimizelyDisplayResortFeeWithTotalInSuiteCardJ","optimizelySuiteCardGVar1","optimizelySuiteCardGVar2","optimizelySuiteCardGVar3","optimizelySuiteCardGVar4","optimizelyExpressCheckout","optimizelyI4Iframe","optimizelyVoyagersDiscountSuiteCardK","optimizelySuiteCardDefault","optimizelySuiteCardGWinner","MULTIPLE_TESTS_ACTIVE_LISTS","getTestValueAB","testName","developMode","isDevEnvironment","SUMMARY_CODE","SUMMARY_APPLIED","SUMMARY_WATER_PARK_PASSES","SUMMARY_INCLUDED","SUMMARY_INCLUDED_REGULAR","SUMMARY_CHECKIN","SUMMARY_CHECKOUT","SUMMARY_DISCOUNT_CHANGES","SUMMARY_VOYAGERS_POINTS_APPLIED","SUMMARY_BONNUS_DEALS_APPLIED","SUMMARY_DEPOSIT_PAID","SUMMARY_CABANA_DEPOSIT","SUMMARY_SUITE_RESERVATION","SUMMARY_DUE_CHECKIN","SUMMARY_ADDITIONAL_CHARGES","SUMMARY_TITLE","SUMMARY_TOTAL","NEW_GUESTS_MESSAGE","NEW_GUESTS_BOLD","NEW_GUESTS_ADDED","NEW_GUEST","NEW_GUESTS","NEW_GUESTS_IN_BASE_OCUPANCY","NEW_GUESTS_IN_MAX_OCUPANCY","DINING_DEALS_DETAILS","SUMMARY_DINING_CREDIT_PACKAGE_TITLE","suiteActionTypes","SELECT_SUITE","CLEAR_SUITE_SELECTED","GET_SUITE_DETAILED_AVAILABILITY_INFO","GET_SUITE_DETAILED_AVAILABILITY_SUCCESS","GET_SUITE_DETAILED_AVAILABILITY_ERROR","GET_SUITE_DETAILED_AVAILABILITY_RESET","GET_SUITE_PACKAGE_AVAILABILITY_INFO_ERROR","GET_SUITE_PLAN_PACKAGES_INFO_TYPE","SET_SUITE_PLAN_PACKAGES_INFO_SUCCESS","SET_SUITE_NEW_RATES","GTM_SUITE_IMPRESSIONS","SET_SUITE_PERSONALIZATION_PACKAGES","getResortLocationUrlParam","resortLocationUrl","getCurrentResort","resortData","getCurrentResortPhone","getCurrentResortDisplay","getCurrentResortDataUrl","minWidth","packagesActionTypes","GET_PACKAGES_AVAILABILITY_INFO_SUCCESS","GET_PACKAGES_AVAILABILITY_INFO_LOADING","GET_PACKAGES_AVAILABILITY_INFO_ERROR","CLEAR_PACKAGES_SELECTED","UPSERT_PACKAGES","DELETE_PACKAGES","OFFERED_PACKAGES_LCO","DECLINE_PACKAGES_LCO","CLEAR_PACKAGES_BY_CODES","CLEAR_PACKAGES_PLAN","GET_PACKAGES_CABANAS_AVAILABILITY_SUCCESS","GET_PACKAGES_CABANAS_AVAILABILITY_LOADING","GET_PACKAGES_CABANAS_AVAILABILITY_ERROR","SET_PACKAGES_PLAN_INFO_SUCCESS","GTM_PACKAGES_IMPRESSIONS","dayjs","isMoment","invalid","NaN","module","exports","getPackagesNetTotal","selectedPackage","isAdjustment","parseInt","getAllPackagesAndCabanas","joinAvailabilityDataToPackages","getFilteredPackageTypesBasedOnCabanaAvailability","packageTypes","getUpSellTilesData","upsellTile","availableCabanas","availablePackage","cabanasDetails","hasAvailableCabanas","isValidPackageType","getPackagesTaxes","getPackagesAndCabanasByType","getPackagesByType","getPackagesGrossTotal","getPackagesBookingGrossTotal","shouldBeChargedAtBooking","packageAvailabilityList","pck","getCabanaAvailability","cabanasAvailabilityList","areCabanasAvailable","getPackagesGroupedByTier","reservationType","isNewReservation","isSuite","isDayPass","isSuiteConfirmation","isDayPassConfirmation","groupBy","tierDayPassConfirmation","tierDaypassReservation","tierMyReservation","tierConfirmation","groupedByTier","None","groupedPackage","gwPackage","orderMyReservation","getPlanPackages","getRequestFailed","getSelectedPackages","allPackages","setUpSellTitleObj","packagesAndCabanas","availabilityPackages","availabilityCabanas","cabanaAvailable","avCabana","errorCode","statusText","itemAvailable","packageAvailable","avPackage","subTitle","getAvailableCabanasV3","getAddedCabanasv3","addedPkgs","addApackage","addedPackages","cabanasCodes","filteredCabanasAdded","rate","getSelectedPkgsLocationCode","selectedPkgsLocationCode","getPackageByPackageCode","TAXES_AND_FEES","NUMBER_OF_PASSES","VALID_ON","DAYPASS_SUMMARY","PROMOCODE_APPLIED","DAYPASS_DETAILS","TOOLTIP_COPY","AMENITY_FEE","PARTY_DATE","PARTY_TIME","PARTY_DETAILS","PARTY_DETAILS_EDIT","PARTY_DUE_TODAY","PARTY_DUE_BEFORE_PARTY","PARTY_72_REFUND_PARTY_DISCLAIMER","PARTY_REFUND_DISCLAIMER","PARTY_NON_REFUND_DISCLAIMER","PARTY_SUMMARY","PRICE_SECTION","PACKAGE_DESCRIPTION_SECTION","TOTAL_SECTION","DUE_TODAY_SECTION","DUE_BEFORE_PARTY_SECTION","BIRTHDAY_LINK_TEXT","isArrayEmpty","onPushImpressionsData","currentSuite","impressionsDataObj","eventData","onPkgsImpressionsData","pkgs","router","getCurrentLocation","impressionProducts","onReservationSuccess","eventsHistory","response","suiteContent","totalPoints","totalOffers","packagesResponse","pushSuiteCheckoutSuccessData","pushReservationData","pushInteractionsData","passPackagesCodes","pckCode","reservationsActionTypes","GTM_RESERVATION_NEW_OR_DAYPASS","onPackageAdded","isEmpty","pkgAvailability","sendPostPurchasePkg","reservationsData","sendCabanasAnalytics","interactionsData","reservationNumber","reservationTotal","roomCode","roomQuantity","packageQuantity","reservationPackages","packagesAcc","reservationPackage","foundPackage","packageTotalRevenue","pushEitherSuiteOrDayPass","checkout_option","purchaseSuiteObj","dimension1","purchasePackageObj","total_package_revenue","payload","getAnalyticsPayload","affirm","analytics","trackOrderConfirmed","account","selectedOffers","userOfferList","allActiveOffers","offerFound","userOffer","dollarValue","suiteProduct","getAddedPackagesCodes","getGroupedAddedPackages","packagesProducts","purchaseEnhancedECommerceData","taxes","getLocationDisplayName","baseObject","suiteObject","dayPassObject","daypassGoogleAnalyticsAction","onPackagesUpsert","packagesOld","plans","selectedPackagesOld","newAddedPackages","findElementsNotInList","pkgOld","eventTag","Math","abs","onPackageDelete","removedPackages","onOfferAdded","selectedOffer","offerId","addedOffers","offerActionTypes","ADD_OFFER_ACTIVE_TYPE","onOfferRemoved","REMOVE_OFFER_ACTIVE_TYPE","onOfferCodeError","offerCodeError","errorMessage","shouldLogOfferCodeError","CREATE_OFFER_ERROR","isAvailabilityError","isOfferCodeError","offerCodeErrorMessage","getOfferCodeErrorDetails","checkOut","onPlanListener","personalizationRules","personalizationResponses","isAvailabilitySuccess","getInteractionsData","rules","aud","userAudience","rec","recommendationEngine","recType","recommendationType","recValue","duettoTracking","trackAvailabilitySearch","trackAvailabilityDenial","onHighestRatesError","availabilityTrackError","onAvailabilityError","onDetailedAvailabilityError","onDetailedAvailabilitySuccess","personalizationPackageRules","getPackageInteractionsData","recommendation","onSuiteSelect","GTM_EVENTS","onIsCartOpenClose","clickType","customClick","click_category","click_type","onCartReturnedPageLinkClicked","cartReturnedPageLinkClicked","onSearchClick","lodgeLocations","lodgeOperaCode","resortLocationName","locationList","valueReturned","currentLoggedInUser","pointsBalance","offerList","isNaN","isCaliforniaResident","listeners","EventListeners","offerCodeListeners","planListeners","trackingMiddleware","tracker","next","actionWithOrigin","from","trackEvent","history","createBrowserHistory","basename","getResortLocationUrl","listen","page","href","composeEnhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","Tracker","trackListeners","middleware","thunk","routerMiddleware","preloadedStatesDict","accessibility","lodgesLocations","persistedState","loadState","createStore","createRootReducer","applyMiddleware","subscribe","debounce","deleteState","stateToPersist","saveState","flexGrow","gap","flexWrap","alignSelf","INITIAL_STATE","forgotPwdReqIsLoading","forgotPwdReqHasFinished","changePwdReqIsLoading","changePwdReqHasFailed","changePwdReqHasSucceded","changePwdReqErrorMessage","userIsLoggedIn","creatingNewAccount","newAccountHasSucceded","newAccountValidationErrors","newAccountErrorMessage","accountModalIsOpen","loginErrorMessage","loginHasFailed","unlockAccountReqIsLoading","unlockAccountReqHasFailed","unlockAccountReqHasSucceded","unlockAccountReqErrorMessage","accountReducer","accountActionTypes","POST_ACCOUNT_FORGOT_PWD_INFO","forgotPwdError","POST_ACCOUNT_FORGOT_PWD_INFO_SUCCESS","POST_ACCOUNT_FORGOT_PWD_INFO_FAILURE","POST_ACCOUNT_CHANGE_PWD_INFO_SUCCESS","forgotPwdErrorMessage","POST_ACCOUNT_CHANGE_PWD_INFO_LOADING","POST_ACCOUNT_CHANGE_PWD_INFO_ERROR","CURRENT_ACCOUNT_USER_IS_LOGGED_IN","CURRENT_ACCOUNT_LOGGED_IN_USER","UPDATE_ACCOUNT_USER_POINTS_AND_OFFERS","POST_ACCOUNT_NEW_LOADING","POST_ACCOUNT_NEW_SUCCESS","POST_ACCOUNT_NEW_ERROR","RESET_ACCOUNT_NEW_TO_INITIAL_STATE","LOGIN_ACCOUNT_ERROR_TYPE","POST_ACCOUNT_UNLOCK_SUCCESS","unLockAccountErrorMessage","POST_ACCOUNT_UNLOCK_LOADING","POST_ACCOUNT_UNLOCK_ERROR","RESET_ACCOUNT_PW_FEEDBACK","LOYALTY_ACCOUNT_OPT_IN","loyaltyOptIn","UPDATE_ACCOUNT_MEMBER_ID_AND_REFERRAL_CODE","loyaltyMemberId","loyaltyReferralCode","RESET_ACCOUNT_METHODS","addAPackageReducer","combineReducers","addAPackageActionTypes","ADD_ADD_A_PACKAGE","options","chargeType","REMOVE_ADD_A_PACKAGE","newState","CLEAR_ADD_A_PACKAGE_ALL_ADDED_PACKAGES","SET_ADD_A_PACKAGE_A_CABANA","REMOVE_ADD_A_PACKAGE_CABANA","newCabanasState","REMOVE_ADD_A_PACKAGE_OTHER_CABANAS","filteredCabanaPkgs","items","CLEAR_ADD_A_PACKAGE_PACKAGES_BY_CODES","flashMessage","SET_ADD_A_PACKAGE_FLASH_MESSAGE","CLEAR_ADD_A_PACKAGE_FLASH_MESSAGE","isLoadingBirthdayAvailabilityData","birthdayAvailabilityData","birthdayAvailabilityDataError","partyGuestsCount","numberOfExtraGuests","isDatePickerOpen","isLoadingCreateBirthdayReservation","partyReservationError","guestsOfHonor","birthdayPartyReducer","birthdayPartyActionTypes","FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA","FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_SUCCESS","FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_ERROR","SET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA","RESET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA","SET_SELECTED_BIRTHDAY_PARTY","TOGGLE_BIRTHDAY_PARTY_DATE_PICKER","IS_LOADING_CREATE_PARTY_BOOKING_RESERVATION","CREATE_PARTY_BOOKING_RESERVATION_SUCCESS","CREATE_PARTY_BOOKING_RESERVATION_ERROR","CLEAR_PARTY_BOOKING_RESERVATION","CLEAR_PARTY_BOOKING_RESERVATION_ERROR","SET_GUEST_OF_HONOR","CLEAR_PARTY_DATE","hasError","bookingEngineAlertReducer","bookingEngineAlertActionTypes","SET_BOOK_ENGINE_ALERT_IS_SUCCESSFUL","SET_BOOK_ENGINE_ALERT_IS_LOADING","SET_BOOK_ENGINE_ALERT_GOT_ERROR","cartResortLocation","cartLastVisitedStep","expiredCart","cartReducer","cartActionTypes","SET_CART_RESORT_LOCATION","RESET_CART_RESORT_LOCATION","SET_CART_SUITE","cartSuite","SET_CART_PACKAGES","cartPackages","SET_CART_LAST_VISITED_STEP","SET_EXPIRED_CART","RESET_EXPIRED_CART","currentLodgeReducer","currentLodgeActionTypes","UPDATE_CURRENT_LODGE","operaCode","isFetchingSipDates","sipDates","sipRatesError","datesReducer","datesActionTypes","UPDATE_DATES","CLEAR_DATES","FETCHING_DATES_SIP","fetchSipDates","UPDATE_DATES_SIP","UPDATE_DATES_SIP_ERROR","sipStatus","numberOfGuests","selectedTitle","selectedRate","selectedTaxesAndFees","selectedRateCode","selectedItemCode","selectedDescription","qualifyingId","isDayPassAvailable","baseRate","availabilityData","promoCodeData","isDaypassFetching","daypassCalendarMonth","parkingFee","dayPassesReducer","dayPassActionTypes","UPDATE_DAYPASSES_LOADING","IS_DAYPASSES_AVAILABLE","UPDATE_DAYPASSES_METADATA","SET_DAYPASSES","totalTaxesAndFees","SET_DAYPASSES_AVAILABLE_DATES","dayPasses","Date","isLastInfo","getMonth","getFullYear","promotion","UPDATE_DAYPASSES_FETCHING","fetchData","monthToFetch","dealData","sendingGet","getFailed","getErrorMessage","dealReducer","dealActionTypes","GET_DEAL_SUCCESS","GET_DEAL_LOADING","GET_DEAL_ERROR","CLEAR_DEAL","eventCalendarReducer","requestSuccess","eventCalendarActionTypes","GET_EVENT_CALENDAR_SUCCESS","GET_EVENT_CALENDAR_ERROR","loading","flowName","flowAudience","flowResortLocation","flowLastUpdated","sanitizeFlowScreens","flow","duplicatedFlow","screens","formattedScreens","screen","newScreen","k","flowStepsReducer","flowActionTypes","FETCH_FLOW_STEPS_REQUEST","FETCH_FLOW_STEPS_SUCCESS","FETCH_FLOW_STEPS_FAILURE","geolocationStateCode","geolocationClosestLodge","geolocationErrorMsg","geolocationReducer","geolocationActionTypes","GET_GEOLOCATION","geolocationData","stateCode","closestLodge","GET_GEOLOCATION_ERROR","err","GET_GEOLOCATION_CLEAR","isVisible","keyContentComponent","shouldUseGWComponent","params","globalModalReducer","globalModalActionTypes","OPEN_GLOBAL_MODAL","CLOSE_GLOBAL_MODAL","UPDATE_GLOBAL_MODAL_PARAMS","guestsReducer","guestsModalActionTypes","SET_GUESTS_ADULTS_COUNT","SET_GUESTS_KIDS_COUNT","SET_GUESTS_KIDS_AGES","isAlreadyShown","ieModalReducer","ieModalActionTypes","SET_IEMODAL_IS_ALREADY_SHOWN","isProcessing","isSignupSuccess","isSignupFailure","leadGenReducer","leadGenActionTypes","IS_LEADGEN_PROCESSING_TYPE","SET_LEADGEN_IS_ALREADY_SHOWN","RESET_LEADGEN_STATUS","configFetchIsLoading","configFetchError","additionalPersonAmount","affirmPubKey","filters","isFetchRestrictionsEnabled","isHighestRatesEnabled","isRateCalEnabled","updateSearchFullPageRefresh","isLoyaltyEnabled","loyaltyPointsToEarn","isInPrimerState","isOffersEnabled","loyaltyPointsMultiplier","loyaltyEarnThresholdNights","isLoyaltyReferralEnabled","isDiningPackagesEnhancedUIEnabled","isDynamicTileEnabled","hideOnlineCheckinText","perNightParkingFee1","perNightParkingFee2","perNightParkingFee3","parkingFeeStartDate","parkingFeeEndDate","clientCardTokenization","creditCardAuthUrl","creditEnabled","affirmEnabled","applePayEnabled","googlePayEnabled","payPalEnabled","amexEnabled","isIFrameEnabled","shouldLeadGenPop","parkingFeeCallout","parkingFeeCalloutTitle","parkingFeeCalloutDescription","bookingSummaryParkingFee","uffTileEnabled","isLoyaltyPointsExpirationOnProfileEnabled","isCartActive","pricePerWaterPass","isCancelReservationEnabled","isHoldCancelReservationEnabled","isAddGuestsEnabled","isRoomUnbundledRateWPAvailable","beginReservationsDate","newPatchEndpoint","showPackagesInAddGuestsModal","suitePriceIncludedTaxesAndFees","taxAndFeeLabels","birthdayPartyInclusionList","isBdayBookingWidgetActive","beginPartyReservationsDate","partyKidsPerAdultRatio","partyMaxGuestCount","minimumBookingDaysRestriction","maximumBookingDaysRestriction","isManageYourReservationEnabled","showDiningPageInUFFFlow","showCaliforniaResortFeeVariation","newPricingRulesLodgeList","isLocationQuestionnaireEnabled","isGeolocationEnabled","stickyBottomBookingWidget","ageThreshold","isLowestRatesRestrictionsEnabled","idMeParameters","lodgeConfigReducer","config","includeResortFeeInSuitePrice","lodgesLocationsFetchIsLoading","lodgesLocationsFetchError","lodgeLocationsReducer","lodgeLocationsActionTypes","GET_LODGE_LOCATIONS_SUCCESS","requestFailed","GET_LODGE_LOCATIONS_LOADING","GET_LODGE_LOCATIONS_ERROR","locationsList","CLEAR_LODGE_LOCATIONS_LOADING_CONFIG","manageReservationReducer","manageReservationTypes","GET_MANAGERESERVATIONDETAILS_REQUEST","GET_MANAGERESERVATIONDETAILS_SUCCESS","GET_MANAGERESERVATIONDETAILS_FAILURE","GET_RESERVATION_BY_ID_AND_LAST_NAME","GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS","GET_RESERVATION_BY_ID_AND_LAST_NAME_FAILURE","CLEAR_MANAGERESERVATIONDETAILS","isLateCheckoutDenied","isLateCheckoutOffered","planPackages","packagesReducer","availabilityList","qualifyingID","requiresQualifyingID","isIdMeValidationRequired","isIdMeValidationRequiredWithError","qualifyingIDError","promoDescription","availabilityReqIsLoading","availabilityRequestFailed","availabilityErrorMessage","selectedSuiteForRange","selectedSuiteRange","selectedSuiteRangeRestrictions","isOpenRatesCalendar","recentSearchesList","searchesGetReqIsLoading","searchesSetReqIsLoading","searchesDelReqIsLoading","searchesReqFailed","searchesErrorMessage","selectedSuiteForCalendar","availabilityHighestRatesList","availabilityHighestRatesReqIsLoading","availabilityHighestRatesRequestFailed","availabilityHighestRatesRequestDatesExceededFailed","filtersApplied","amenities","cottage","sorting","sortSuite","oldFiltersApplied","suiteAvailabilityList","getAvailabilityRangeIsLoading","getAvailabilityRangeFailed","getAvailabilityRangeMessage","getAvRangeBySuiteIsLoading","getAvRangeBySuiteFailed","getAvRangeBySuiteErrorMsg","isAPScall","itemQuantity","itemQuantityReqIsLoading","itemQuantityReqFailed","emailCampaign","isEmailCampaign","planCalendarShouldBeBlocked","startCalendarAt","endCalendarAt","campaignObject","emailCampaignSuiteType","isBookingWidgetFocused","isErrorModalAlreadyClosed","offerType","lcoPackages","dealsSummary","leavePayment","lowestRateCalendarList","lowestRatesByStayList","lowestRatesByStayListTotal","lastCalendarRatesDateSelection","getLowestRateCalendarErrorMsg","upsellPackagesContent","isTwoRateTypesSuites","latestVersionJEventErrorObj","latestVersionHEventErrorObj","plansReducer","pageToReturn","personalizationRues","shouldIgnoreOfferCodeError","availabilityHighestRatesIsLoading","sortingType","variationJObj","variationHObj","reservationDetailsEntityReducer","formatedData","isCabanaLoading","cabanaErrorMessage","cabanaRequestSuccess","addGuestsReservationObj","getAvailabilityLoading","suiteDetailedAvailability","suiteLcoPackage","flexTripAllowed","flexPackage","suiteRateMismatched","onSuiteSelectionError","responseHasPackages","suiteDetailsFetchSuccess","getPlanPackageInfoLoading","taxesAndFeesDetailAvailability","suiteReducer","suiteStoreErrorMessage","availabilityKey","globalGetReservationDetails","cart","eventDetails","bookingEngineAlert","deal","geolocation","globalModal","leadGen","ieModal","lodgeConfig","preCheckIn","connectRouter","dispatch","clearManageReservationDetails","getManageReservationDetails","getUserIsLoggedIn","reservationStatus","isValidReservation","globalGetAvailablePackages","globalGetReservationDetailsWithIdOnly","globalGetReservationsByReservationIdAndReservationKey","reservationKey","getReservationDetailsByReservationIdAndReservationKey","getPackageAvailabilityAction","Location","Arrival","Departure","getReservationDetailsEntityOfferCode","NumberOfAdults","getCabanasAction","resId","getSuiteTotalWithFees","getTaxAndFeesLabels","totalFees","taxesAndFeesPrices","getTaxesAndFeesDetailAvailability","getTaxesAndFeesDynamic","fee","getSuiteNetTotal","getGrossSummaryTotal","getSuiteGrossTotal","getDueTodayAmount","dueTodayAmount","advancedDeposit","getPackagesNetTotalByPacksAtCheckout","getDueAtCheckInAmount","getSummaryTaxes","getSuiteTaxes","getPackagesAndCabanasFromSuitableTier","packagesResult","suitableTier","getTierToShow","tierToUse","tierToShow","filterPkgsByAdvanceBookingDays","packageFromTier","availabilityPackage","packageIcon","getPackagesFromSuitableTier","cabanasResult","some","availInfo","cabanaInformation","getCabanasFromSuitableTier","getAditionalPackagesFromAddApackage","shouldSplitCabanas","keyBy","getAddedpackages","additionalPackages","packageId","packageFromAvailability","additionalPackage","additionalTitle","allCabanas","additionalCabanas","composedPackage","cabanaFromAvailability","availabilityCabana","additionalCabana","completeCabana","roomRateTotal","Boolean","getPackageTotalWithAdditionalPackages","packageTotal","availabilityPackagesByCode","packageTotalAcc","addedPackage","packageAvailability","cabanaTotalAcc","addedCabana","cabanaAvailability","getTaxesAmountWithAdditionalPackages","getSummaryTotalWithAdditionalPackages","summaryTotal","cabanasTotalAcc","getDueAtCheckinAmountWithAdditionalPackages","getAffirmPaymentDueAtCheckIn","isAlreadyPaidWithAffirm","affirmAmount","dueAtCheckinAmount","cabanaTotal","packageKey","packageMultiplier","getPackagesWithAmount","buildPackageWithAmount","packageCharge","diningCredits","getOfferCodeErrorMessage","offerCodeErrorDetail","getOfferCodeErrorObj","getOfferCodeError","getCheckOut","getAffirmPayment","reservationData","paymentype","defaultAmount","packagesTiers","packagesInReservation","getReservationDetailsEntityPackages","cabanasInReservation","tierCodes","sort","defaultTier","isCabanaAvailable","isCabanaTier","tier","packageInTier","checkIsLateCheckoutPackageOnly","suitetableTiers","tierCode","packageInReservation","packageGroup","cabanaInReservation","getPackagesNetTotalFromSources","fromReservation","addAPackageState","isResDetail","isDueToday","guaranteeType","hasDetailedAvailability","DEFAULT_RATE_CODE","pckg","FLEX_TRIP_PACKAGE_CODE","getValidOfferCode","getNormalizedCode","getValidRateCode","defaultRateCode","suiteType","getReservationPackages","packageTitle","packageAllowance","getSuiteRates","isBookingFlow","detailedAvailability","dayPassItems","dayPassCode","totalNightlyRate","getAdjustmentCodesByPackageCode","adjustmentCode","showLoyalty","isOnLLP","isPrimerState","isUserSignedIn","packagesWithAmountFromReservationData","allowance","ADD_OFFER_CODE","REMOVE_OFFER_CODE","SET_OFFER_CODE_DESCRIPTION","ADD_OFFER_EMAIL_ACTIVE_TYPE","REMOVE_OFFERS_ALL_ACTIVE_TYPE","VERIFY_ACTIVE_OFFERS","getOffersEnabledLocation","getPointsMultiplier","getReferralEnabledLocation","getDiningPackagesEnhancedUIActive","getDynamicTileActive","getHideOnlineCheckinText","getshowCaliforniaResortFeeVariation","getIsGeolocationEnabled","getStickyBottomBookingWidget","getIsLocationQuestionnaireEnabled","getPricePerWaterPass","getFilters","getAdditionalPersonAmount","getIsHighestRatesEnabled","getIsRateCalEnabled","getUpdateSearchFullPageRefresh","getFetchRestrictionsEnabled","getPerNightParkingFee1","getPerNightParkingFee2","getPerNightParkingFee3","getParkingFeeStartDate","getParkingFeeEndDate","getCreditCardAuthUrl","getNewPricingRulesLodgeList","getAgeThreshold","getIsLowestRatesRestrictionsEnabled","getPaymentMethodsAllowed","getShouldLeadGenPop","getParkingCallout","getParkingCalloutTitle","getParkingCalloutDescription","getParkingFeeWarning","getUffTileEnabled","getIsLoyaltyPointsExpirationOnProfileEnabled","getIsCartActive","getIsI4IframeActive","getIsRoomUnbundledRateWPAvailable","getIsNewPatchEndpoint","getMaxOccupancy","getBeginReservationDate","getLoyaltyPointsToEarn","getLoyaltyEarnThresholdNights","getShowPackagesInAddGuestsModal","getIsManageYourReservationEnabled","getSuitePriceIncludedTaxesAndFees","getIsCancelReservationEnabled","getIsAddGuestsEnabled","getBirthdayPartyInclusionList","getIsBdayBookingWidgetActive","getPartyKidsPerAdultRatio","getPartyMaxGuestCount","getMinimumBookingDaysRestriction","getMaximumBookingDaysRestriction","getShowDiningPageInUFFFlow","getIdMeParameters","getIsHoldCancelReservationEnabled","encodeUrlQueryParameters","axios","defaults","paramsSerializer","encodeURIComponent","substr","RequestMethods","headerJson","renewToken","user","getUser","accessTokenExpiry","getTime","GWRApiClient","token","accessToken","urlRequest","method","requestObject","withCredentials","requestObjectWithCredentials","requiredFields","hasData","verifyRequiredFields","fields","missingValueOnRequiredField","throwResponseError","ErrorTypes","MissingRequiredField","put","headers","post","delete","patch","ResponseError","apiCall","isTokenPresent","UserNotLoggedInError","details","ApiResponseError","getSelectedSuite","getSuiteHeadline","headline","getPromotionalSavings","getSuiteBaseRate","numOfNights","highestRate","rule","hasPlanPackages","getSuitIsLoading","getRoomAdjustmentTax","roomAdjustmentTax","getDetailedAvailabilitySuccessStatus","getFlexPackage","getFlexTripAllowed","REMOVE_ACCOUNT_ALL_ACTIVE_OFFERS_TYPE","GET_ACCOUNT_USER_POINTS_HISTORY","POST_ACCOUNT_USER_NOT_FOUND","RESERVED","CHANGED","PAST","SuiteStatus","arrivalAliases","departureAliases","numberOfAdultsAliases","kidsAgesAliases","offerCodeAliases","locationAliases","suiteTypeAliases","parseEmailCampaignToAvailability","getAvailabilityPropByAliases","defaultValue","returnData","alias","withSuiteTypeAliases","toUpperCase","handleTotal","userOffers","suiteTotal","currentSelectedPackages","setExcedent","offersTotal","offersAmount","e","packagesTotal","calculateQuantityPrice","handleTotalWithTaxes","taxData","totalWithoutTaxes","handleTaxes","feesTotals","handlePointsBalance","balance","taxAmount","adjustmentTax","handleDueAmounts","handleSummaryTotal","dueTodayDifference","oneNightSuite","totalPointsBurned","pointsBurnedOnDueToday","pointsToBurnOnCheckIn","dueToday","dueTodayValue","totalToDeduct","atCheckIn","dueAtCheckInValue","dueTodayAmountToShow","summaryTotalAndDueToday","dueCheckIn","haveRestrictions","restrictionList","restrictionType","res","getRestrictionNumber","ErrorMessages","UserNotLoggedInErrorMessage","UnkownErrorMessage","NotAuthorizedMessage","NotFoundMessage","InternalServerErrorMessage","MissingRequiredFieldMessage","ValidationError","CommonRequestStatus","BadRequest400","NotAuthorized401","NotFound404","InternalServerError500","getErrorResponse","validationErrors","msg","getErrorMessageByErrorType","requestStatus","request","messages","validationData","errors","Error","ErrorMessage","UnkounErrorMessage","buildResponseForErrorResponseWithStatusCode","GET_RESERVATION_BY_ID_SUCCESS","GET_RESERVATION_BY_ID_ERROR","GET_RESERVATION_BY_ID_FINISH","GET_RESERVATION_INFO_SUCCESS","GET_RESERVATION_INFO_LOADING","GET_RESERVATION_INITIAL_INFO_LOADING","GET_RESERVATION_INFO_ERROR","GET_RESERVATION_INFO_FINISH","CREATE_RESERVATION_LOADING","CREATE_RESERVATION_ERROR","CREATE_RESERVATION_SUCCESS","CREATE_RESERVATION_TEMP_USER","CLEAR_RESERVATION_ERROR","SET_RESERVATION_LAST_NAME_FIND_BY_ID","SET_RESERVATION_KEY_FIND_RESERVATION_BY_ID","Amount","Action","sm","Bottom","Description","Divider","borderThickness","SubtotalAmount","NewTagContainer","Tooltip","NewGuestsTag","NewGuestsMessageContainer","DataDescription","isTestEnvironment","Card","xl","boxShadowSize","FlexCard","LOYALTY_IMAGES","ADVENTURE_BUCK_COIN","ADVENTURE_BUCK_COIN_WHITE","FLOW_NAVIGATION_ACTIONS","FLOW_TRIGGER_NEXT_STEP","FLOW_TRIGGER_PREVIOUS_STEP","FLOW_TRIGGER_FIRST_STEP","FLOW_TRIGGER_LAST_STEP","FLOW_TRIGGER_STEP_BY_SLUG","STALE_TIME_LIMIT","FLOW_NAMES","BOOKING","BIRTHDAY","DAYPASS","BIRTHDAY_COMPARISON_CHART_CLASS","BIRTHDAY_FAQ","SUMMARY_CART_VARIATIONS","SUMMARY","CART_MODIFY_MODAL_VARIATIONS","SUITE","PACKAGE","CART_MODIFY_MODAL_TYPES","LodgeApiClient","apiVersion","urlAux","application","canadianPostalCodeRegex","canadianEmailAddressRegex","GUEST_TYPE","getAdultsCountMessage","getKidsCountMessage","getKidsUnderAge","limit","currentValue","getKidsAboveAge","lowerLimit","getNumberOfBillableGuests","isDiningPackage","normalizedKidsAges","age","numOfBillableChildren","getGuestCountLabel","adultText","kidText","guestCountText","getKidsCount","kidsCountArray","recentSearchesMessage","infantsCount","kidsAgesList","adultMessage","childrenCount","infantCount","RESERVATION_DETAIL_IMAGES","PRINT","TWENTY_ONE_OLDER","PACKAGE_DINNER","MAGIQUEST","CABANAS","GREAT_CLOCK_TOWER_SHOW","WILEY_RESERVATION","WAVE_BG","GROUP_ICON","CALENDAR_ICON","CHECK_ICON","LOCATION_ICON","BEST_VALUE_RIBBON_3","BEST_VALUE_RIBBON_4","BEST_VALUE_RIBBON_5","ATTRACTION_ADDONS","BIRTHDAY_ADDONS","DINING_ADDONS","CABANA_ADDONS","APP_ILLUSTRATION_ATTRACTIONS","CMP_NEW_MOBILE_APP","APP_STORE_CHROME_PLAY_BADGE","APP_STORE_APPLE_DOWNLOAD_BADGE","ADD_GUESTS_GUESTS","ADD_GUESTS_SUITE","INFO_ICON","CARD_LODGE_INFORMATION","CARD_STAY_DATES","CARD_GUESTS","GREEN_CHECK","CARD_PASSES","CARD_PROMOS_AND_DISCOUNTS","PLUS_CIRCLE","CMP_CALLOUT_PARKING_DESKTOP","BUNDLE_TILE_DINING","BUNDLE_TILE_ATTRACTIONS","BUNDLE_TILE_MORE","CHECK_TRANSPARENT","ERROR_MESSAGE_ICON","EVENTS_DICTIONARY","GWR_LOGIN","GWR_LOGOUT","AEM_DEALS_T2_CARDS_UPDATE","FLOW_NEXT_STEP_TEXT","emitEventsByName","Event","dispatchEvent","emitCustomEvent","CustomEvent","isInIframe","LOYALTY_TYPES","availableMobile","earn","applied","availableWithButton","withExpirationDate","profileDesktop","profilePoints","availableMobileSearch","profilePointsHistory","joinVoyagersMessage","groupedPackages","foundPackages","comments","pack","orderId","newAddedPackage","planPackage","pkgTable","packageCodes","pkgCode","isValidPackage","packageTableName","packageTabName","packageList","pkgItem","sendAddExtraGuestInfo","addExtraGuestObject","packageGroupRevenue","singlePackage","taxesTotal","getTotalPackagesRevenueAndTaxes","addedPackagesRevenue","addedPackagesTaxes","postPurchasePackageObj","transactionPackages","quantityPerson","packageProducts","postPurchaseEnhancedECommerce","propertyCode","rateDescription","cabanaDate","locationName","totalRevenue","parseFloat","cabanaPurchaseObj","trimPkgCode","filteredPackage","paymentMethodsTypes","CREDIT_CARD","CREDIT_CARD_ENABLED","AFFIRM","AFFIRM_ENABLED","PAYPAL","PAYPAL_ENABLED","APPLE_PAY","GOOGLE_PAY","getShouldDisplayGooglePay","paymentMethodsAllowed","isSuiteBookingFlow","gpayApplePayIsActive","getShouldDisplayCreditCard","getShouldDisplayAffirm","isLocationAvailableWithAffirm","getShouldDisplayPaypal","isPayPalEnabled","getShouldDisplayApplePay","ApplePaySession","getHasAvailabilityKey","getHasPointsOffers","getTotalToCharge","isDaypassBookingFlow","getValidationErrors","errorObj","accumulator","validationError","optionsCreditCardFirst","optionsApplePayFirst","getThemeColor","isValidPrice","getFormattedPrice","CheckInLabel","DateText","cases","IconContainer","ArrowRightIcon","CheckInOutDate","Label","isRequired","CheckInOutDates","getTotalNumberOfNights","paymentFieldsLengths","PHONE_MIN","PHONE_MAX","CVV_MIN","CVV_MAX","CC_MIN","CC_MAX","FIRST_NAME_REQUIRED","LAST_NAME_REQUIRED","PHONE_REQUIRED","EMAIL_REQUIRED","ADDRESS_REQUIRED","CITY_REQUIRED","STATE_REQUIRED","PROVINCE_REQUIRED","POSTAL_REQUIRED","POSTAL_ONLY_5","POSTAL_INVALID","NAME_ON_CARD_REQUIRED","CARD_NUMBER_REQUIRED","CVV_REQUIRED","EMAIL","PHONE","CVV_ONLY_NUMBERS","PHONE_LENGTH","CVV_LENGTH","OPTION","REQUIRED_MONTH","REQUIRED_YEAR","REQUIRED_COUNTRY","VALID_CREDIT_CARD_NUMBER","VALID_CREDIT_CARD_TYPE","CURRENT_PASSWORD_REQUIRED","NEW_PASSWORD_CAN_NOT_MATCH_CURRENT","NEW_COMFIRM_PASSWORD_SHOULD_MATCH","CONFIRMATION_PASSWORD_REQUIRED","NEW_PASSWORD_REQUIRED","NOT_VALID_PASSWORD","LOYALTY_PROGRAM_PASSWORD_REQUIRED","AT_LEAST_ONE_ALPHABET_REQUIRED","shorthandOrCode","ResortLocationsAux","locationCode","MANTCA","booking_phone","shortDisplayName","mobile_booking_phone","birthdayEmail","SOUTCA","SCOTAZ","ATLAGA","BLOOMN","NEWEMA","CONCNC","GURNIL","MASOOH","COLOCO","GRANWA","GRAPTX","KANSKS","NIAGON","POCOPA","SANDOH","TRAVMI","WILLVA","DELLWI","NAPLFL","WEBSTX","PERRMD","getCookie","cname","ca","decodeURIComponent","cookie","charAt","substring","checkCookie","setCookie","cvalue","exdays","setTime","expires","toUTCString","getUserFirstName","getUserLastName","getUserId","getChangePwdIsLoading","getPwChangeSuccess","getPwChangeFailed","getPwErrorMessage","getUserLoyaltyOptIn","getUserLoyaltyPointsBalance","getUserOffers","getUserReferralCode","getReferralNotEligible","shouldUseV22CreateUserAPI","getExpirationPoints","nextExpirationDate","expiringMetricValue","getCalendarRangeRestrictionList","getIsBookingWidgetFocused","getFiltersAppliedLabels","getOldFiltersAppliedLabels","getSortOrder","getAvailabilityList","getIsIdMeValidationRequired","getIsIdMeValidationRequiredWithError","getRecentSearchesList","getRecentSearchesLoading","delRecentSearchesLoading","getDealsSummary","getIsAPScall","getIsPaymentLeaveModal","getLowestRateCalendarList","getLowestRatesByStayList","getLowestRatesByStayListTotal","getLastLowestRatesByStayDateSelection","getIsCaliforniaResident","getIsTwoRateTypesSuites","getIsCartOpenClose","getCartReturnedPageLinkClicked","getItemQuantityState","getDateFromISODateString","ISODateString","isInsideRangeInclusive","checkDate","packageStartDate","packageEndDate","getReservationDates","reservationDates","datesObj","shouldAddFiltered","reservationDatesAvailable","resDate","isInsideRange","getPackageContent","packageContent","getPackageContentAvailability","packageContentData","beginDate","nextDate","getDatesFromDateRange","contentAvailableDatesArray","contentUnavailableDatesArray","unavailableDates","hasAvailableInfo","hasUnavailableInfo","calculateAvailableDates","packageTables","isNewObjectReturn","String","toLocaleLowerCase","images","packagesList","isLCOPackageOnly","getAddedPackage","suitablePackagesList","additionalPackageCode","resvPackage","resvArrival","dayDiff","advanceBookingDays","calculateAvailableDatesForDiningPackages","calculateAvailableDatesForPackages","availableDatesObj","calculateCheckinDateInsidePackageDateRange","datesWithoutUnavailable","getDropdownDataForPackage","getPackageChargeType","maxPackageLimit","availableDays","getPackageDropdownOptions","shouldShowQuantitySelect","packageData","selectLimit","generateArray","_","validPackage","numberOfAvailableNights","getPackagesAvailableNights","shouldBeShown","getPackageSelectedQuantity","packageQty","packageObjectFinder","cabanasList","filterActivitiesPackages","addNewTag","currentPackageCode","ArrowDownThinIcon","path","verifyIfIsEnabled","getBeIdMeParameters","configurationClient","getConfiguration","configurationData","getLoyaltyConfigByResort","lastResortLocation","cleanIsCaliforniaResident","getPlanConfigByResort","getUserSettingsByResort","getCreditPackageConfigByResort","getCmpConfigByResort","getPaymentConfigByResort","isAmexEnabled","getLeadGenConfigByResort","resetLodgeConfig","updateCurrentLodge","getCartConfigByResort","getBookingWidgetConfigByResort","getPartyBookingWidgetConfigByResort","kidsPerAdultRatio","maxGuestCount","PII_MASK_VALUE","PII_PROPERTIES","PII_URLS_PROPERTIES","PII_SPECIAL_PROPERTIES","errorSrc","originalUrl","windowOnError","indexOfWindowOnError","errorSrcModified","windowOnErrorLineAndColumnNumbersRegex","URL","extractUrlFromErrorSrc","maskedUrl","maskPIIPropertyInUrl","maskPIIProperties","obj","cloneDeepWith","isStringifiedObject","parsedValue","maskPIIPropertiesRecursively","isObject","getMaskedPropertyValue","forOwn","hasOwnProperty","customMaskFunction","searchParams","has","reactPlugin","ReactPlugin","ai","ApplicationInsights","instrumentationKey","enableAutoRouteTracking","extensions","distributedTracingMode","DistributedTracingModes","W3C","enableCorsCorrelation","correlationHeaderDomains","disableAjaxTracking","disableFetchTracking","addTelemetryInitializer","envelope","loadAppInsights","appInsights","trackInteractionFailureEvent","trackError","trackReservationFailureEvent","errorObject","stringfiedErrorObject","errorTitle","isDetailedAvailabilty","trackPlanPageFailureEvent","storage","userSelection","adultCount","userChoice","errorLogInfo","trackException","exception","severityLevel","SeverityLevel","properties","component","trackVariationJEventError","trackInformation","partySize","californiaResidentFlag","rateCodes","suiteStyle","trackVariationHEventError","savings","bookingEngineBookReservationError","OnVersionJEventError","OnVersionHEventError","withAppInsights","Component","withAITracking","CloseIcon","codesWithAffirm","isAffirmAvailable","getAffirmPubKey","AlertSuccessIconIcon","gaTrackingCheckoutErrorCode","cleanErrorCode","gaTrackingPlanSearchErrorCode","successfulAuthCallback","postLoginCallback","currentUserData","isSocialAccountLogin","isConnectedToFacebook","isConnectedToGoogle","isConnectedToApple","hasFutureReservation","newUserCreated","Function","referralNotEligible","rafEventData","getDateMonthDayFormat","getMonthLetterDayYearFormat","isDateValid","getDefaultOfferCode","getOfferCodeDescription","getActiveOffers","getEmailActiveOffers","emailOffers","getTotalActiveOffers","getAvailableOffersBySearch","availableOffers","formatedOffer","formatOffer","searchIsWithinOfferDates","getAdjustmentPackage","parentPackageCode","upsertToPackagesArray","packagesArray","findIndex","matchByPackageCode","removeFromPackagesArray","getPackageAvailability","AvailabilityApiclient","getAvailabilityPackage","then","packageTable","upsertPackage","currentPackages","nonBillableChildren","adjustmentPackage","lcoPackage","lateCheckoutOffered","lateCheckoutDecline","deletePackage","adjustmentPackages","w","remainingPackages","clearSelectedPackages","clearPackagesByCodes","packagesCodes","clearPlanPackages","apiClient","ReservationsApiClient","fetchCabanasV3","packagesImpressions","updateCurrentPackagesOnSuiteChange","diningCreditActive","isCreditPackageActive","availablePackages","bundlePackage","adjPackages","adjPackage","currentPkgQty","currentPkgCode","availablePkgTempData","pkgData","copyObject","DINING_CREDIT_PACKAGE_TITLE","url_v_2_1","url_v_2_2","url_v_2_3","currentRenew","username","password","calledFromVoyagers","catch","lastname","ReservationId","LastName","userId","refreshToken","provider","appleUser","isAPI_2_2_Active","isSignIn","actionUrl","LoyaltyReferralCode","newUser","contactByPhone","firstName","lastName","zip","caslOptIn","marketingEmailOptIn","marketingEmailOptions","canContactByPhone","canContactByEmail","canContactByMail","canContactBySms","contactBySms","ReferralCode","refereeId","leadGenUser","profileKey","profileId","Relative","sortSuites","suites","criteria","el1","el2","sortOrder","ratesByBrand","brandList","previousValue","mergedSuitesData","roomRates","updatedSuite","DEFAULT","offerCodeErrorNumbers","match","stayNumberOfNights","daysNumberVariable","variableDaysLabel","errorTypes","RATE_UNAVAILABLE","shouldDisplayModal","shouldDisplaySearchAgain","shouldDisplaySpecialOffers","shouldDisplaySignIn","shouldDisplaySignUp","ROOM_RESTRICTED","PROPERTY_RESTRICTED","SIGN_IN_REQUIRED","INVALID_OFFER_CODE","INACTIVE_PROMO","CLOSED","INACTIVE_OFFER_CODE","getCurrencyCodeText","shouldHideBookingWidget","hideBookingWidget","isCaliforniaVerification","isCaliforniaResorts","ReservationsHeaderMessages","UPCOMING","MY_UPCOMING","MY_PAST","MY_CANCELED","ReservationsUserMessages","getOverviewReservationDetails","isReservation","roomName","totalGuests","getOverviewReservationHeader","reservationDatesLabel","getOverviewReservationDates","propertyName","getStackedVariantByStatus","getCheckInStatus","ineligibilityReason","INELIGIBILITY_REASONS","TOO_EARLY","isEligible","PRE_CHECKED_IN","sortReservationsListByCheckin","firstElement","secondElement","QuestionIcon","getTaxesObject","tooltip","FEE_WITH_TOOLTIP","getTaxesAndFees","taxAndFeeLabelsDictionary","taxesAndFeesDetail","packagesTaxes","newTaxesAndFeesObject","kidsQueryString","availabilityRequest","kidsQs","kidAge","RoomBookingApiClient","availabilityHighestRatesRequest","paymentAvailableRequest","lowestRatesRequest","queryString","numNights","lodgeCode","lowestRatesByStayRequest","totalToCharge","origin","orderDetails","func","NewTag","Badge","DEEP_ORANGE_100","splashText","NewGuestsMessage","copy","AlertSuccessIcon","ReactHtmlParser","ref","getMobileLoggedInUserDropdownItems","resortLocationUrlParam","logoutCurrentUser","getLoggedInUserDropdownItems","routesRedirectOnSignOut","checkIfIsNiagaraProperty","NAV_MENU_FLOWS","route","compareUrlPathnames","firstUrl","secondUrl","normalizeUrl","getTermsAndConditionUrl","resortUrl","trimUrlPathname","urlPath","endsWith","joinPaths","basePath","childPath","startsWith","logConsoleMessage","objects","openModal","shouldForceOpen","closeModal","updateParams","openOrUpdateModal","currentState","verifyIfModalIsOpened","suiteRequest","suiteDataRequest","availabilityBySuiteRequest","availabilityPackagesRequest","availabilityDayPassRequest","withScrollbarStyles","isScrolling","scrollColor","showTrack","trackColor","verticalPadding","alwaysShowTrack","SCROLLBAR_PADDING","trackOnHover","defaultScrollbar","ScrollableContainer","maxHeight","isInset","hideScrollWhileScrolling","Scrollable","className","setScrolling","onStopScrolling","onScroll","getAdultsCount","getNumberOfGuests","MODAL_VARIATIONS","DRAWER","COMPONENTS","StyledModal","DrawerModal","Modal","ModalComponent","useLockBodyScroll","isOpen","VARIATIONS","onCloseComplete","backButton","onBackButtonClick","isBlocking","getFlashMessage","o1","o2","clonedObject","sortObject","x","checkObjectProperties","list1","list2","byKey","obj2","unmaskValue","str","mask","dayPassesActionTypes","MODAL_KEYS","MYSTERY_OFFER_SPINNER","INFO_CARD_DETAILS_MODAL","FIND_RESERVATION_BY_ID","AUTH_MODAL","LEAD_GEN_MODAL","IE_MODAL","OFFER_CODE_ERROR_TOAST","PACKAGE_MODAL","SMS_SIGN_UP_MODAL","SPECIAL_REQUEST_MODAL","SUITE_PRICE_MISMATCH","RECENT_SEARCHES","OFFERS_MODAL","CONFETTI_MODAL","DINING_CREDIT_MODAL","ATTRACTIONS_INFO_MODAL","CMP_ADD_GUESTS_MODAL","PARKING_BANNER_MODAL","CART_MODIFY_MODAL","WATER_PARK_PASSES_VIDEO_MODAL","BIRTHDAY_CONFIRMATION_MODAL","getModalContentByKey","ContentComponent","lazy","withGlobalModal","SECTION_TITLE","TAKE_A_MOMENT","BOOKING_CONSENT","TERMS","POLICY","REFER_OR_CONTACT","ARIA_MAILING","ARIA_SIGNATURE","AGREE_AND_BOOK","CC_CHARGED","ERROR","ERROR_DESCRIPTION","FLEX_FARE","CANCEL_RESERVATION","ARIA_HEADER","ARIA_CHECKBOX","ACCEPT_VISA","ACCEPT_MASTER","ACCEPT_AMERICAN","ACCEPT_DISCOVER","CREDIT_CARD_CONTINUE_BUTTON","CREDIT_CARD_INFO","FORM_NAME_ON_CARD","FORM_CARD_NUMBER","FORM_MONTH","FORM_YEAR","FORM_CVV","FORM_CVV_ALT","FORM_CARD_HOLDER","FORM_DONT_WORRY","FORM_WARN_FORM_ONLINE","FORM_COMPLETE_ONLINE_PROCESS","FORM_BACK_PAYMENT","QUALIFYING_ID","WISH_HAPPY_BIRTH_DAY","GREAT_WOLF_LODGE","US","SELECT_PAYMENT_METHOD","REQUIRED_FIELDS","AFFIRM_NO_LATE_FEES","AFFIRM_AFTER_CHECKING","AFFIRM_CONTINUE","AFFIRM_MESSAGE","AFFIRM_ADITIONAL","AFFIRM_CONTINUE_BUTON","AFFIRM_EDIT_BUTON","SAVE_CHANGES_BUTTON","AFFIRM_CHECKOUT_BUTTON","BILLING_INFORMATION","USE_SAME_BILLING_ADDRESS","ADDRESS_LINE_2","CONTACT_INFO","PAYMENT_BILLING","MONTHLY_PAYMENTS","PAYMENTS_OPTIONS","AFFIRM_PAYMENTS_OPTIONS","REVIEW_COMPLETE","EMAIL_TAKEN","CONTINUE","FREE_CANCELLATION_TITLE","FREE_CANCELLATION_TEXT","BEST_RATE_GUARANTEE_TITLE","BEST_RATE_GUARANTEE_TEXT","BUTTON_WARNING","GREAT_DEALS","CHECKOUT_AS_GUEST","PAYMENT_HEADER_DISCLAIMER","SIGN_IN","SIGN_OUT","ORDER_STATUS","reserved","INFO_SECTION_ID","ADDITIONAL_PACKAGE_SECTION","DINNING_TILE","ACTIVITIES_TILE","CABANAS_TILE","EVENT_CALENDAR_TILE","highlight","TIERS_CONTENT_MY_RESERVATIONS","A","B","C","TIERS_CONTENT_DAYPASS","TIERS_CONTENT_DAYPASS_CONFIRMATION","IMAGES","wileyReservation","waveSVG","bestValueRibbon3","bestValueRibbon4","bestValueRibbon5","ADDONS_PACKAGE_NAME","Passes","Birthday","Dining","ADDONS_PACKAGE_IMAGE","Cabana","ADDONS_CARD_TITLE","ADDONS_CARD_MODAL_TITLE","ADDONS_CTA_TEXT","Bundle","NOTIFICATION_MESSAGES","addLCOSuccess","addLCOFailed","MISMATCH","pushImpressionsAnalyticsData","pushToPackagesPage","pushToDiningPackagesPage","pushToPayment","selectSuite","getDetailedAvailability","failureCallback","skipCompareValidation","nightlyRate","AvailabilityApiClient","getAvailabilityBySuite","json","OfferCode","suiteRates","lco","isFlexTripAllowed","flexTripPackage","rr","isNotSameOffer","isRateNotSame","isDateChanged","clearSelectedSuite","updateSuiteRates","newSuiteRates","resetAvailabilityCall","updateRateCodes","newSelectedSuite","phoneRegExp","onlyNumberRegExp","notOnlyWhiteSpacesRegExp","validateDigitsLength","input","digitValidation","RegExp","unmaskedValue","validateCreditCardLength","creditCardNumber","onlyDigitsValidation","strLenIsBetweenRange","inputLength","validateCreditCardNumber","ccNumber","validCreditCardNumber","card","createError","SummaryItem","leftColumn","centerColumn","rightColumn","labelTitle","role","flexFirection","ALIGNMENT","mobileAlignment","alignment","verticalAlignment","tooltipWidth","tooltipContent","triggerComponent","ariaKey","textColor","triggerRef","useRef","tooltipRef","tooltipContainerRef","tooltipVisibility","setTooltipVisibility","hasCurrentTriggerRef","current","hasCurrentTooltipRef","containerOffset","getBoundingClientRect","topOffset","offsetHeight","leftOffset","offsetWidth","TooltipContent","TriggerComponent","onMouseOver","TooltipContainer","containerLeft","triggerWidth","DefaultTriggerComponent","floatingButton","CarouselChevronRigthThinIcon","manageBookingApiClient","ManageBookingApiClient","manageBooking","manageBookingResponse","reservationkey","manageBookingAPI","loginReservationsByIdAndReservationKey","updateBookingInfo","Image","Title","RightArrow","CarouselChevronRightThinIcon","preloadedStates","serializedState","jsonSerializedState","stateName","stateProperty","stateSubProperty","itemsToRemove","stateToSave","makeCopy","objConstrcutor","constructor","exceptionKeys","srcKey","copyObj","compositeKey","copiedVal","preCheckInActionTypes","UPDATE_PRE_CHECK_IN_STEP","UPDATE_PRE_CHECK_IN_ADDED_PACKAGES_FAILED","RESET_PRE_CHECK_IN_ADDED_PACKAGES_FAILED","UPDATE_PRE_CHECK_IN_NEW_PACKAGES","UPDATE_PRE_CHECK_IN_VIRDEE_REDIRECTION_FAILED","ItemApiClient","itemQuantityRequest","codes","isBBAR","DocumentStoreApiClient","DocumentStoreRepository","storageKey","stringData","upsert","documentData","getAll","dataList","dataId","dataGuuid","dataToAdd","created_at","toISOString","updated_at","unshift","setAuth","foundIndex","filteredData","deleteAll","RecentSearchesRepository","completeUrl","recentSearchData","recentSearchesData","recentSearchGuuid","recentSearchToAdd","recentSearchesListClone","listLength","setRecentSearch","recentSearchId","filteredRecentSearches","transformRestrictions","restrictions","getLowestRatesByStayNoSuiteCode","getLowestRatesForSuiteByStayNoSuiteCode","lowestRatesByStayResponse","daily","cleanLowestRatesByStayNoSuiteCode","getLowestRatesByStay","lowestRatesData","getLowestRatesForSuiteByStay","getCalendarRates","lowestRatesByStayRequestObject","getLowestRatesForSuite","lowestRatesResponse","setIsErrorModalAlreadyClosed","setIsCartOpenClose","setIsCartOpenCloseClean","setCartReturnedPageLinkClicked","setCartReturnedPageLinkClickedClean","getAvailability","fetchAvailability","existsValidSuite","isQualifyIdRequired","hasErrorCode","rateOptions","lodgeLocationName","numberOfBillableGuests","savingsLessThanFiveUpperToFithty","validGuests","suiteOnlyRate","averageNightlyBaseRate","suiteWithWaterParkRate","DPP_total","percentage","isJVersionAndIsTwoRatesTypesPresent","isJVersionAndIsCaliforniaResident","isJVersionAndIsTwoRatesTypesPresentAndNonTwoRatesPresent","st","ErrorCode","getElement","setInterval","getElementById","BindIDme","clearInterval","getAvailabilityHighestRates","fetchAvailabilityHighestRates","getRecentSearches","getAllRecentSearches","addRecentSearch","checkin","num_adults","num_children2","numOfUnbillableChildren","offer_code","kids_ages","addNewRecentSearch","deleteRecentSearch","deleteRecentSearchById","deleteAllRecentSearches","deleteRecentSearchesAll","openRatesCalendar","calendarRates","getCalendarRangeRestrictions","getDataForSelectionInRateCalendar","selectedCalendarRates","closeRatesCalendar","restrictionsEnabled","newRequest","getLowestRates","cleanCalendarRestrictionsAndLowestRates","openPaymentLeaveModal","closePaymentLeaveModal","setAppliedFilters","setSelectedSuiteForCalendar","getItemQuantity","fetchItemQuantity","toggleEmailCampaigns","clearAllAvaliabilityData","setQualifyingID","getQualifyingID","shouldTriggerValidation","setEmailCampaingSuiteType","normalizedSuiteType","setIsBookingWidgetFocused","setSortingOrder","setSortSuite","setIsCaliforniaResident","SummaryAccordionIcon","BoldText","SummaryBottom","GreenText","PAYMENT_FORM_IMAGES","VISA_CURVED","MASTERCARD_CURVED","AMERICAN_EXPRESS_CURVED","DISCOVER_CURVED","CARD_BACK_SECURITY_CVV","UI_ICON_CREDITCARD","AFFIRM_LOGO","APPLE_PAY_LOGO","GOOGLE_PAY_LOGO","PAYMENT_FORM_CARAT","AFFIRM_LOGO_WHITE","VISA","MASTER_CARD","AMERICAN_EXPRESS","DISCOVER","MONEY_ICON","PHONE_TEXT_AGREEMENT_NIAGARA","PHONE_TEXT_AGREEMENT","duettoKeys","eventTypes","callDuetto","s","createElement","async","protocol","getElementsByTagName","parentNode","insertBefore","getHost","globalObj","host","duetto","initialize","appId","tld","queue","trackQuote","trackBooking","confirmationId","profileActionTypes","IS_PROFILE_LOADING","GET_PROFILE_USER","GET_PROFILE_USER_SUCCESS","GET_PROFILE_USER_ERROR","ALERT_ICONS","CloseButton","ActionButton","AlertIcon","AlertContent","AlertDescription","AlertCloseIcon","AlertTitle","alertStyle","AlertWrapper","abTest","isHorizontal","ALERT_TYPES","isClosed","actionText","onClose","onActionClick","customCloseComponent","SelectedIcon","Alert","DEFAULT_ERROR_MESSAGE","usePrefix","getPassMessage","passQty","passTitle","mapDispatchToProps","connect","isModalOpened","LoadingspinnerIcon","attributeType","attributeName","to","dur","repeatCount","requestObj","adultsString","kidsAgesString","hasQueryData","LoyaltyGenericContainer","LoyaltyWithExpirationDateContainer","LoyaltyAvailableContainer","isMobile","LoyaltyAppliedContainer","isUserAuthenticated","ButtonAndTermContainer","TermText","TextLink","weight","BookNowButton","TextBoldWithNormal","LoyaltyProfileContainer","PointsExpirationContainer","SpanDot","span","PointConditionsAndTerms","BookNowWhite","LoyaltyProfilePointsHistoryContainer","LoyaltyProfilePointsHistoryTableRow","LoyaltyProfilePointsHistoryTableRowJoinColum","StyledChevronDownIcon","resetAvailable","SeeMoreContainer","LoyaltyProfilePointsHistoryDisclaimer","LoyaltyProfilePointsHistoryDate","LoyaltyJoinMessageContainer","LoyaltyApplied","iconLink","adventureBucks","LoyaltyContainer","enablePadding","POINTS_EARNED_UPPON_COMPLETION","JOIN_VOYAGERS","START_EARNING","EARN_POINTS","LoyaltyAvailable","iconSize","bonusDealLink","querySelector","boldText","COPY_FUNCTIONS","noPointsCopy","earnCopySelection","nwithPointsCopy","COPY","textForMobileTest","copyToUse","LoyaltyAvailableMobileSearch","loggedUserCopy","enableMobilePadding","LoyaltyAvailableWithButton","LoyaltyEarn","suitNightRate","pointsMultiplier","arrowVariation","points","roomRateWithPoints","offersSavings","calculatePointsToEarn","openSignUp","useCallback","voyagersPointsCopy","LoyaltyJoinMessage","objectForReplace","openSignIn","LoyaltyProfilePoints","currentResortPhone","expirationPointsObject","expirationObject","target","locationPhone","useHistoryPagination","initialPage","setPage","pageLimit","setPageLimit","paginationContent","setPaginationContent","rowCount","setRowCount","displayArray","setDisplayArray","nextPageAvailable","setNextPageAvailable","setResetAvailable","rowCountLimit","useMemo","toggleError","setErrorMessage","setTotal","setIsLoading","reset","updatePaginationOnSuccessEffect","historyData","initialHistory","addUUID","initialDisplayArray","spliceArrayAndAddItToAnother","totalPages","updatePaginationOnSuccessNextPage","nextPageData","newPaginationContent","prevState","newDisplayArray","updatePaginationOnFailure","fetch","toggleLoading","onSuccess","onFailure","UserAccountApiClientTioga","queryParams","fetchUserPointsHistory","resetRows","seeMoreRows","verifyIfSmallerByFive","newRowCount","timer","orderByDate","b","rawArray","rawCopy","displayCopy","canNotSpliceByFive","rawCopySlice","currentCount","countLimit","HISTORY_TYPES","referred_a_friend","points_used_on_a_booking","points_returned_from_a_cancellation","completed_stay","sl_expire","LoyaltyProfilePointsHistory","customScrollTo","useScrollToItem","seeMore","historyTitle","verifyIfNegative","behavior","block","custom","yOffset","LoyaltyWithExpirationDate","expirationDate","Loyalty","loyaltyType","setCartResortLocation","resetCartResortLocation","setCartLastVisitedStep","pushToLastVisitedStep","hasDiningPackages","setExpiredCart","resetExpiredCart","countries","PackageBox","Wrapper","applyBorder","PriceDivider","dashed","SustainabilityTooltip","SustainabilityContainer","DayPassContainer","StyledSelect","select","placeholder","paddingTop","paddingBottom","valid","StyledPlaceHolder","active","Select","onFocus","onBlur","isFocusedOrFilled","setIsFocusedOrFilled","selectRef","selectValue","hidden","for","SelectPackageQuantity","quantitySelected","handleUpdatePackageQuantity","isNiagaraProperty","shouldShowSelect","showQuantitySelect","OFFERS_IMAGES","OFFERS_GWL_VOYAGERS_CLUB","OFFERS_V_GREEN_ICON","OFFERS_V_BLUE_ICON","OFFERS_V_GRAY_ICON","provinces","abbreviation","states","Heading","H1","H2","H3","H4","H5","H6","ModalAdapter","attrs","overlayClassName","modalClassName","closeTimeoutMS","fullSizeContent","fullSizeContentTop","fullSizeBackgroundColor","loader","marginTop","portalClassName","enabledAt","fallbackValue","promoCodeList","relatedOfferCode","dealPromoCode","isGatedOffer","isExclusive","validOffer","offerReducer","offerData","activeEmailOffers","currentUserOffers","verifiedActiveOffer","offerObj","lodges","locationFromUrl","currentLocationData","DINING_CREDIT","star","rArrow","greyDiningImage","yellowDiningImage","big50","big100","big150","big300","DINING_CREDIT_COINS","MODAL_CREDIT_CARDS_IMAGE","MODAL_RESTAURANTS_CARDS_IMAGE","MODAL_CREDIT_CARDS_IMAGE_MOBILE","MODAL_RESTAURANTS_CARDS_IMAGE_MOBILE","OTHER","CHECK_IN_MESSAGES","successful","ICON_STYLES","StyledTitleText","StyledContent","DescriptionIcon","rotate","AccordionTitleTextRetro","rest","AccordionContentRetro","maskPhone","StringMask","waitFor","Promise","resolve","WaveWrapper","MobileAppDevice","AppFeaturesWrapper","ul","AppStoreButtonWrapper","StyledCloseCircleIcon","CloseCircleIcon","ReactRouterLink","xxl","PackageCardItem","InfoCardAddOnsWrapper","carouselWidth","InfoCardBody","TitleField","SeeAllCTA","FlexCardPackage","CloseModalButton","blue","CloseModalButtonText","PackageInfo","PackageDetailsContainerModal","PackageCardText","ChargeTypeText","PackageCardDescription","PackageCardDescriptionCollapsible","CabanaDetailsCardDescription","PackageCardButtonContainer","CabanaCardButtonContainer","isAvailable","DetailsButtonContainer","alignLeft","CabanaCard","PackageDetailsContainerMobile","themeColor","CMPInfoBoxesWrapper","CMPInfoBox","AddCabanaButton","isDateSelected","HeaderInfoContainer","StyledImage","PackageDetailsImage","CapitalizeTextModal","Headline","HowToRedeemText","IconImage","margin","DividerVertical","DataIcon","imgException","InfoIcon","smallerMargin","ModalTitle","DataTitle","RoomInclusionsSection","CounterLabel","CounterLabelDescription","SelectDescription","InfoAlertWrapper","NewGuestsBadgeContainer","AddGuestsCTAButton","customWidth","Total","InclusionsTitle","AddCardsButtonContainer","PlusInfoImgs","LcoHeaderImageSection","LcoContentSection","LcoButtonsSection","AddBundleButton","LcoHoursContainer","BundleImageContainer","BundleImage","MobileAddOnsContainer","isBundleAvailable","BundleInfoCardWrapper","AddonsCarouselContainer","AddGuestPolicyCont","NewReservationDetailsHeader","LineDetailsHeader","PaymentApiClient","accessBlock","i4GoServerUrl","walletConfigUrl","applePayToken","googlePayToken","form_data","FormData","formDataValues","i4go_accessBlock","i4go_successURL","i4go_failureURL","i4go_cardNumber","i4go_cvv2Code","i4go_p2peBlock","i4go_trackInformation","i4go_applePayToken","i4go_googlePayToken","i4go_cardinalInfo","i4go_referrer","i4go_cardholderName","cardNumber","cvv2Code","i4go_streetAddress","i4go_postalCode","append","Shift4i4GoApiClient","urlReq","formData","createReservationSchema","cidNumberIsRequired","creditCardValues","Yup","required","cardCode","holder","expiration","cidNumber","val","notRequired","nullable","positive","integer","creditCard","when","is","otherwise","checkoutToken","resvId","street1","province","postalCode","of","specialRequests","requestId","specialRequestOptions","sourceCode","uppercase","suiteDescription","suiteTitle","isDueBalanceBb","grandTotalDue","alert_code","alert_description","cabanaSource","cabanaItem","customer","gender","isCASLMarked","partyReservationSchema","party","partyType","infants","spectators","startTime","endTime","DAY_PASS_PAGE_TYPE","paymentMethods","SHIFT4","flowOrigins","ROOM_BOOKING","DAY_PASS","paymentFormLogos","paypal","applePay","googlePay","shift4","paymentMethododsConf","creditCardTypes","visa","mastercard","discover","DEFAULT_OFFER_CODE","getCardCode","cardType","creditCardType","bestCardMatch","bestCardType","getAffirmCheckoutPayload","stateData","contactInfo","billingInfo","summaryTaxes","billingInformation","first","last","line1","line2","addressLineTwo","zipcode","filteredSelectedPackages","metadata","mode","entity_name","merchant","user_confirmation_url","user_cancel_url","user_confirmation_url_action","billing","phone_number","display_name","sku","unit_price","qty","item_image_url","mainImage","item_url","anchorPath","shipping_amount","tax_amount","round","getPaymentDetails","paymentData","ccYear","ccMonth","ccCardNumber","ccNameOnCard","ccCvv","vaultedCardId","isI4IframeFlow","security","paymentObject","securityCode","lastFourDigits","nonce","deviceId","i4go_cardtype","extendedCardData","i4go_extendedcarddata","i4go_cardholdername","expirationMonth","i4go_expirationmonth","expirationYear","i4go_expirationyear","i4go_uniqueid","otn","cardnumber","billingContactData","i4go_applepaytoken","billingContact","givenName","familyName","getAddressDetails","billingData","contactData","street2","getOrderDetails","specialRequestsOther","specialOccasion","specialOccasionBirthday","specialOccasionOther","pageType","validOfferCode","getRateCode","commentsList","occasion","isDiningByPackage","Quantity","ItemCode","RateCode","getCustomerDetails","phoneNumber","textAgreement","isPhoneUpdated","getPaypalPaymentInfo","getPaypalBillingInfo","countryCode","getGooglePayBillingInfo","gPay","address1","locality","administrativeArea","getApplePayBillingInfo","applePayBillingContact","addressLines","setContactandBillingAddressInfo","selectedPaymentMethod","contactAndBillingAddressInfo","paymentOptions","tokenizationData","transactionIdentifier","getInitialValues","streetLine1","streetLine2","getPartyOrder","partyInfants","bdaySelectedParty","timeDate","times","timeData","BIRTHDAY_PAYMENT_INDEX","depositAmount","remainingBalance","summarySectionType","gKey","sortedPackage","createArrayBirthdayPackages","getPayload","formValues","stateValues","callBack","defaultPayload","suiteDaypassPayload","expectedRates","validate","birthdayPayload","allFieldsProvided","getPaymentMethods","isPlanPage","methods","isEnabled","isEnabledOutsidePlanPage","order","availablePaymentMethods","availableSpace","idx","firstTabSize","ceil","fetchShift4WalletConfig","payApiClient","getShift4WalletConfig","approveShift4WalletTransaction","fetchTiogaTokenAccessBlock","getShift4i4AccessBlockTioga","fillVaultedCardDetails","creditCardData","billingAddressData","ccHolder","cardTokenAccessBlockData","ccStreetAddress","i4go_accessblock","i4go_cardnumber","i4go_cvv2code","i4go_postalcode","i4go_streetaddress","getVaultedCardDetails","vaultedCardDetails","replaceAll","transformPaymentDataToOptions","paymentMethodsComponents","optionsVariation","currentOption","getSelectedPaymentMethod","appleGooglePayMethodsFirst","isGooglePaymentActive","setBasicBillingInfo","addressInfo","clickable","floatLabel","getLocationList","getLocationPhone","getLocationURL","containsLocation","locationSelectedValues","getPropertiesByRegion","regions","entries","Set","locations","propertiesByRegion","regionsSelected","propsByRegion","clearStateOnRedirect","iconPosition","iconProps","PhoneNumber","LastFourCc","Email","ReservationKey","shouldUseAuthCall","cabanasRequest","cabanaRoomCode","cabanaRateCode","extraParams","inputData","moment","formatStr","convertMomentToDates","ex","convertDatesToMoment","inputStr","formatPieces","inputPieces","isDateStr","GWReactDatesWrapper","ComponentToWrap","propsWithHandlers","nameOfHandlersToReplace","convertedProps","origHandler","param1","param2","param3","param4","param5","dateStrOutput","changeHandlersForMoments","GWRDateRangePicker","DateRangePicker","GWDayPickerRangeController","DayPickerRangeController","GWSingleDatePicker","SingleDatePicker","GWDayPicker","DayPicker","GWDayPickerSingleDateController","DayPickerSingleDateController","gwIsInclusivelyAfterDay","dt1","dt2","gwToISODateString","toISODateString","Checkbox","redesignWidth","redesignHeight","isRedesign","checked","tabIndex","valign","inputProps","CheckBoxWrapper","RedesignInput","addOfferCode","removeOfferCode","setOfferCodeDescription","addActiveOffer","addEmailActiveOffer","removeActiveOffer","verifyActiveOffers","transformationFn","arrayLength","transformation","CheckIcon","addResortLocationToOffer","isCheckBoxActive","offerObject","checkBoxActive","checkOutDate","offerStayStart","stayStartDate","offerStayEnd","stayEndDate","todayDate","isExpiring","date_1","date_2","difference","days","bookByDate","expiringSoon","nonExpiredOrderByDateOffers","offers","formattedOffers","nonExpiredOffers","notEligibleOffers","LEARN_MORE","BUY_DINING_CREDITS_NOW","INFO_TEXT","RESTAURANTS","INFO_LIST","DINING_TITLE","DINING_STAR_SUBTITLE","DINING_TITLE_UFF_FLOW","DINING_SUBTITLE_UFF_FLOW","SAVE_TAG_TEXT","CheckedIconIcon","ModalSpinner","getBrowserId","browserId","newUuid","isInternetExplorer","navigator","userAgent","appVersion","getCartResortLocation","getExpiredCart","getCartLastVisitedStep","Content","Header","HeaderContainer","SummaryIcon","AccordionContext","createContext","useAccordionContext","context","useContext","SummaryAccordion","shouldStartOpened","setExpanded","Provider","CartHeader","subTotal","subtotalCopy","floor","CartOverlay","toggleOpen","cartHasPackages","isCartExpired","otherProps","contentScrollHeight","setContentScrollHeight","getContinueTextOutsidePlan","continueButtonText","setContinueButtonText","cartHeader","cartFooter","getContinueButtonText","stepTextEvent","stepText","text","headerSize","clientHeight","vhToPixels","addEventListener","removeEventListener","vh","innerHeight","SummaryTooltip","isTablet","AdditionalCharges","hasAdditionalCharges","isParkingFeeABCDTestActive","currentParkingFeeAmount","ABTestTaxesAndFees","random","isRoomOnly","Question","Details","promotionalSavings","openModifyCartItemModal","shouldDisplayRoomSavings","shouldDisplayPromoValue","useHistory","showNegativeSign","copyObjectDates","goToLastPlanSearch","lastSearch","cal","CheckedIcon","DueAmount","parkingFeeTotal","handleDueToday","handleDuetAtCheckIn","ABCDTestForParkingFeeDueAtCheckIn","numberOfNightsLabel","ArrowRight","Offers","removeOffer","excedent","offerSkeleton","getPkgImage","CartCounterContainer","handleDeletePackage","setValue","handleUpdateStates","PackageList","handleUpdatePackageQuantityCounter","lcoCode","moveToActivitiesAndCloseCart","removeLastSlash","moveToDiningAndCloseCart","priceToDisplay","autoplay","loop","handleRemovePackageModal","PackagesList","hasSelectedPackages","updateSuite","lcoPackageCode","ParkingFee","Points","pointsBalanceAmount","AffirmContainer","rightAlign","StyledFinancingOptionText","refreshAffirm","throttle","ui","refresh","FinancingOptionText","productType","shouldRefresh","rateContainer","createRef","shouldEnableAffirm","modal","close","setListeners","parentElement","AffirmLink","Subtotal","isSuperscriptStaySummarySuite","setRefreshAffirm","handleSummarySubTotal","TotalSavings","handleSavings","shouldDisplayTotalSavings","Totals","SuitePlanContent","onPaymentPage","showBonusExcedent","setShowBonusExcedent","renderTaxes","renderExpandedNonPaymentPage","renderPackages","renderTotal","abTestingHideEarnBanner","roomSavings","pointsSavings","SUMMARY_IMAGES","CART_LOGO","CART_EMPTY_LOGO","CLOSE_MODAL_IMAGE","COUNTER_CONFETTI","CartLogo","packagesCount","setShowAnimation","showArrow","setShowArrow","currentPackageCount","headerElement","setArrowPosition","isActivitiesOrDining","appYPosition","appScrollYPosition","scrollY","closeAnimation","EmptyCartContent","TIMER_MODAL_CONTENT_IMAGES","BOOKING_EXPIRED","Summary","showLoyaltyDisclaimerOnly","avoidCartLogoRender","setOverlayVisible","handleOpenCart","prev","onCmpPage","cartHasSuite","confirmationFunction","expirationTime","countdown","getTimeRemaining","classList","roomWithPassRate","intUserId","getInteractionsUserId","remove","waterPassNoticeContainer","roomOnlyRate","innerHTML","waterPassNoticeActionText","getPlanSummaryTotal","PlanSummary","onActivitiesPage","onDiningPage","keyword","checkInDateIsInTheParkingFeeInterval","emailActiveOffers","isApsCall","getWindowDimensions","innerWidth","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize","ModalWrapper","CloseButtonContainer","SummaryModal","opened","Close","currentHeight","setCurrentHeight","measuredRef","node","contentHeight","calculatedHeight","addGuestReservation","TAX","RESORT","BAR_WIDTH","AccordionStyle","ArrowIcon","isExpanded","Leftbar","RightBar","DepositSummary","totalDeposit","cabanaDeposit","SimpleDeposit","depositPaid","newCMPGuestsCount","feeGuests","extraPerGuestAmount","Deposit","dueAtCheckIn","DiscountCharges","hasDiscountCharges","hasNewGuests","newGuestsBold","alert","useGetLodgeConfig","isCalled","toggleCalled","PKGS_WITH_NO_QTY","newAddedPackageCode","totalBillAndNonBillGuest","fetchUFFPackageCode","getUFFPackageCode","uffJSON","uffPackageCodes","UFF_CODES","getUFFPackageCodeTriggered","objectForCopy","areWaterParkPassesIncluded","splash","isString","SuiteDetails","unbillableGuests","SummaryAlert","showNotification","notificationMessage","notificationType","renderAlert","setRenderAlert","suppressRate","ReservationSummary","hasPackages","BOOKING_ABOUT_TO_EXPIRED","addMinutes","minutes","endtime","mins","secs","minutesT","secondsT","YELLOW","GREEN","BLACK","RED","BLUE","FOCUS_BLUE","SUCCESS_GREEN","YELLOW_WHITE_FONT","BLACK_WHITE_BORDER","StyledBadge","customColorBg","customColorText","customColorBorder","SIZES","SMALL","LARGE","interactionsUserId","renderInteractionsAtributes","suiteFlags","attributes","campaignId","experienceId","userGroup","PRE_CHECK_IN_STEP","DINING","ATTRACTIONS","ADVENTURE_PASS","TRANSITION","preCheckInStep","addedPackagesFailed","virdeeRedirectionFailed","preCheckInReducer","CarouselChevronLeftThinIcon","BackButtonWrapper","SuiteDetailInfoCont","MediaGalleryModal","isFullSize","showModal","onCloseModal","modalHeight","renderImages","onRequestClose","CarouselChevronLeftThin","isUpdateSuccess","street","birthdate","currentPassword","newPassword","profileReducer","isUpdated","PlusThinIcon","getColor","TextLikeLink","hoverColor","colorFocus","colorHover","SELECT_PLACEHOLDER","SUBTITLE","TITLE","MISSING_SELECTION_ERROR","EXTRA_PLACEHOLDER","REMOVE_EXTRA","FLOATING_MESSAGE_ERROR","SimpleSummaryInfo","fullWidthDescription","navigationText","onNavigateLinkClick","includedList","simpleScrollTo","inline","scrollIntoView","element","y","pageYOffset","scrollTo","useLayoutEffect","removeAttribute","overflowY","SummaryAccordionIconWrapper","DesktopLayout","MobileLayout","isOnPaymentPage","shouldStartCollapsed","setIsExpanded","isExtraLargeScreen","ItemListWrapper","allowPackageUpdate","getBirthdayScreenSlug","summarySection","ADDONS_COPY","FOOD_DRINKS_COPY","ListOfPackages","updatePackageQuantity","isBirthdayPackage","isFoodAndDrinks","splitPackagesByTabName","triggerDynamicStepNavigation","allowPackagesListLink","groupedPackagesByTabName","groupedPackagesBySectionAndType","summarySectionKey","pkgsList","TextWrapperDueToday","TextWrapperDueBeforeParty","SimpleSummaryDue","dueBeforeParty","remainingBalanceDueDate","SimpleSummaryParkingFeeWarning","SimpleSummary","showDueToday","leftTitle","leftContent","rightTitle","rightContent","onInfoLinkClick","SimpleSummaryHeader","SimpleSummaryFooter","useCorrectedHeight","correctedHeight","setHeight","handleViewportUnitsMobile","handler","passive","useWindowEventListener","ArrowCaretLeftIcon","ModalContainer","innerPadding","hasTopPadding","OutsideContainer","closeBtnHorizonPosValue","closeBtnPosition","closeBtnVertPosValue","closeBtnColor","BackButton","backButtonVertPosValue","HeadingContainer","topPadding","hasTitle","CustomBlockUi","BlockUi","containerBorderRadius","ModalHeader","backButtonSize","closeButton","closeBtnSize","headerBackgroundColor","ArrowCaretLeft","StyledDrawerModal","titleWidth","contentClassName","preventScroll","tag","blocking","React","cloneElement","auth","backGroundColor","itemStyles","accordionItemStyles","accordionNotActive","beforeDecorationStyles","activeItem","notActiveItem","NavigationMenuWrapper","NavigationItemWrapper","isAccordion","StyledAccordionItemButton","AccordionItemButton","optionsNumber","SelectedOption","MODES","ACCORDION","LIST","NavigationMenu","isReferralEnabled","useLocation","splice","activeOption","renderOptionsList","tabindex","handleSelect","NotificationMessage","NotificationBox","BoxIcon","NOTIFICATION_COLORS","NotificationBanner","Animation","onLoad","animationData","container","getJSON","loadAnimation","animation","Lottie","tempUserInfo","confirmedReservation","createdReservation","reservationList","upcomingReservationList","pastReservationList","canceledReservationList","isInitialLoading","requestHasFinished","reservationUser","cancellationHasFailed","lastNameFindReservationById","reservationKeyFindReservationById","reservationListHandler","reservedReservations","changedReservations","noShowReservations","checkedOutReservations","reservationsReducer","getValidValue","newIsLoadingValue","newErrorMessageValue","newRequestFailedValue","reservationIdKey","PAGE_TITLE","isAuthorMode","bodyClassList","contains","defaultLocation","webpackContext","req","webpackContextResolve","__webpack_require__","o","birthdayPartyTimesAndLocationsJson","enableBookingAlert","startNotificationDate","endNotificationDate","startSearchDate","endSearchDate","iconImage","iconAlt","mysteryDealPromoList","ScrollToTop","prevProps","withRouter","interceptors","use","shouldOpenCreateForm","reject","hostname","GeolocationApiClient","LODGE_CONFIG_DATA_TTL","endpointTTLData","urlList","planConfigByResort","creditPackageConfigByResort","cmpConfigByResort","paymentConfigByResort","partyBookingWidgetConfigByResort","canCallEndpoint","endpoint","minTTL","validateUrl","now","msTTL","checkURLAgainstList","markEndpointAsCalled","currentURL","clearEndpointTTLData","endpointList","enddpoint","useEndpointValidation","resetCallback","endpointCallAttemps","ep","locationData","getLocationFromUrl","setLocationFromUrl","TTL","isLodgeSpecific","call","getLodgeLocations","getLodgesLocations","Address","Name","MobileBookingPhone","ShortName","Region","BirthdayEmail","MaxOccupancy","getGeolocationData","isReferralEnabledLocation","voyagersClubPhase","dimension58","CartCustomContainer","CART_ID_MOBILE","CartPortal","cartContainer","createPortal","CartContainer","FLOATING_MESSAGE_IMAGES","breatheAnimationDesk","keyframes","breatheAnimationDMobile","FloatingMessageContainer","FloatingMessageImg","FloatingInnerMessageContainer","InnerMessage","CloseFloatingMessage","FloatingMessage","innerMessage","setInnerMessage","messageVariant","setMessageVariant","onCloseFunction","setOnCloseFunction","visible","setVisible","showFloatingMessage","closeFloatingMessage","setIEModalAlreadyShown","GlobalStyle","createGlobalStyle","DynamicFlow","BookTab","EmailCapture","AppLayout","SummaryLayout","NoMatchLayout","HeaderWithTwoColumnLayout","NavigationMenuLayout","DayPassesPicker","DayPassesHeader","DayPassesInformation","PaymentForm","GlobalModal","PlanSearchForm","BirthdaySearchFormRouter","PreCheckIn","Reservations","MyReservations","SearchReservations","ReferAFriendPage","UserProfile","EventCalendar","MyRecentSearches","ChangePassword","UpdatePassword","UnlockAccount","ReservationDetail","MyReservationsPage","MyPreferences","DaypassBooking","LandingPageForm","EmailQueuePage","MysteryModal","EventPlanner","Folio","IframeHandler","setAppElement","URLSearchParams","fallback","exact","shouldUnWrapFromContainer","matchProps","shouldHideOnMobile","shouldOpenCalendarUp","shouldRemoveBorderRadius","markupFlowAudience","markupFlowName","mediumFor","mediumEight","rootElement","bookingEngineElement","getAttribute","ReactDOM","render","serviceWorker","ready","registration","unregister"],"mappings":"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aAAc,MAEhB,CACEhgG,KAAM,UACNggG,aAAc,MAEhB,CACEhgG,KAAM,OACNggG,aAAc,MAEhB,CACEhgG,KAAM,SACNggG,aAAc,MAEhB,CACEhgG,KAAM,QACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,UACNggG,aAAc,MAEhB,CACEhgG,KAAM,OACNggG,aAAc,MAEhB,CACEhgG,KAAM,SACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,YACNggG,aAAc,MAEhB,CACEhgG,KAAM,QACNggG,aAAc,MAEhB,CACEhgG,KAAM,mBACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,gBACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,YACNggG,aAAc,MAEhB,CACEhgG,KAAM,cACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,UACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,SACNggG,aAAc,MAEhB,CACEhgG,KAAM,gBACNggG,aAAc,MAEhB,CACEhgG,KAAM,aACNggG,aAAc,MAEhB,CACEhgG,KAAM,aACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,iBACNggG,aAAc,MAEhB,CACEhgG,KAAM,eACNggG,aAAc,MAEhB,CACEhgG,KAAM,2BACNggG,aAAc,MAEhB,CACEhgG,KAAM,OACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,SACNggG,aAAc,MAEhB,CACEhgG,KAAM,QACNggG,aAAc,MAEhB,CACEhgG,KAAM,eACNggG,aAAc,MAEhB,CACEhgG,KAAM,cACNggG,aAAc,MAEhB,CACEhgG,KAAM,eACNggG,aAAc,MAEhB,CACEhgG,KAAM,iBACNggG,aAAc,MAEhB,CACEhgG,KAAM,eACNggG,aAAc,MAEhB,CACEhgG,KAAM,YACNggG,aAAc,MAEhB,CACEhgG,KAAM,QACNggG,aAAc,MAEhB,CACEhgG,KAAM,OACNggG,aAAc,MAEhB,CACEhgG,KAAM,UACNggG,aAAc,MAEhB,CACEhgG,KAAM,iBACNggG,aAAc,MAEhB,CACEhgG,KAAM,WACNggG,aAAc,MAEhB,CACEhgG,KAAM,aACNggG,aAAc,MAEhB,CACEhgG,KAAM,gBACNggG,aAAc,MAEhB,CACEhgG,KAAM,YACNggG,aAAc,MAEhB,CACEhgG,KAAM,UACNggG,aAAc,Q,6BC3OlB,mBAGME,EAAUltH,IAAK25B,cAAc,MAEnCuzF,EAAQ9tH,aAAe,CACrB7Z,WAAY,OACZhB,SAAU,EACVoH,MAAOA,IACP/H,WAAY+H,IAAMrK,aAGpB4rI,EAAQttH,YAAc,UAEtBstH,EAAQC,GAAKD,EAAQvzF,cAAc,MACnCuzF,EAAQC,GAAG/tH,aAAe,CACxB7a,SAAU,EACVgB,WAAY,OACZoG,MAAOA,IACP/H,WAAY+H,IAAMrK,aAGpB4rI,EAAQE,GAAKF,EAAQvzF,cAAc,MACnCuzF,EAAQE,GAAGhuH,aAAe,CACxB7a,SAAU,EACVgB,WAAY,OACZoG,MAAOA,IACP/H,WAAY+H,IAAMrK,aAGpB4rI,EAAQG,GAAKH,EAAQvzF,cAAc,MACnCuzF,EAAQG,GAAGjuH,aAAe,CACxB7a,SAAU,EACVgB,WAAY,OACZoG,MAAOA,IACP/H,WAAY+H,IAAMnK,cAGpB0rI,EAAQI,GAAKJ,EAAQvzF,cAAc,MACnCuzF,EAAQI,GAAGluH,aAAe,CACxB7a,SAAU,EACVoH,MAAOA,IACP/H,WAAY+H,IAAMlK,eAGpByrI,EAAQK,GAAKL,EAAQvzF,cAAc,MACnCuzF,EAAQK,GAAGnuH,aAAe,CACxB7a,SAAU,EACVgB,WAAY,OACZoG,MAAOA,IACP/H,WAAY+H,IAAMhK,gBAGpBurI,EAAQM,GAAKN,EAAQvzF,cAAc,MACnCuzF,EAAQM,GAAGpuH,aAAe,CACxB7a,SAAU,EACVgB,WAAY,OACZoG,MAAOA,IACP/H,WAAY+H,IAAMrK,aAGL4rI,O,2DCrDAv+D,IANY,CACzBC,2BAA4B,6BAC5BC,6BAA8B,+BAC9BC,qBAAsB,yB,8ECDlB+zC,EAAchkG,YAAO4uH,KAAcC,MAAM,CAC7CC,iBAAkB,UAClBC,eAAgB,QAChBC,eAAgB,KAHEhvH,CAAH,wdAON,SAAAM,GAAK,OAAKA,EAAM2uH,iBAAmB3uH,EAAM4uH,mBAA/B,UAAuD5uH,EAAM4uH,mBAA7D,MAAsF,KAInF,SAAA5uH,GAAK,OACvBA,EAAM2uH,iBAAmB3uH,EAAM6uH,wBAC3B7uH,EAAM6uH,wBADV,UAEOriI,IAAM/I,OAAOK,aAAa,KAFjC,SAIS,SAAAkc,GAAK,OAAKA,EAAMnb,OAASmb,EAAMnb,OAAS2H,IAAM3H,OAAOiqI,UAa9D,SAAA9uH,GAAK,OAAIA,EAAMxX,OAAN,kBAA0BwX,EAAMxX,MAAhC,QACT,SAAAwX,GAAK,OAAIA,EAAMva,QAAN,mBAA4Bua,EAAMva,OAAlC,QACT,SAAAua,GAAK,OAAIA,EAAMoH,UAAN,sBAAiCpH,EAAMoH,SAAvC,QACT,SAAApH,GAAK,OAAIA,EAAM+uH,WAAN,uBAAmC/uH,EAAM+uH,UAAzC,QAIT,YACA,OADyB,EAAtBJ,gBAEM3sI,YAAP,iHAGgB,SAAAge,GAAK,OACjBA,EAAM6uH,wBAA0B7uH,EAAM6uH,wBAA0B7uH,EAAMxT,MAAM/I,OAAOmE,cAAc,QAIhG5F,YAAP,8TAKgB,SAAAge,GAAK,OAAIA,EAAMxT,MAAM/I,OAAOO,UAAU,MAGzC,SAAAgc,GAAK,OAAKA,EAAM7a,QAAU6a,EAAM7a,QAAU,KACvC,SAAA6a,GAAK,OAAIA,EAAMxT,MAAM5I,WAAW,MAC7B,SAAAoc,GAAK,OAAKA,EAAMza,aAAeya,EAAMza,aAAe,YAM7Em+G,EAAYjjG,YAAc,cAE1BijG,EAAYzjG,aAAe,CACzBzT,MAAOA,IACPrH,QAAS,QAGIu+G,O,iHChEA4qB,IANM,SAAC,GAA6C,IAA3CrrB,EAA0C,EAA1CA,UAAWwrB,EAA+B,EAA/BA,eAAmBzuH,EAAY,iBAChE,OACE,cAAC,IAAD,aAAOijG,UAAWwrB,EAAgBO,gBAAiB/rB,GAAejjG,M,2CCLtE,kCAAO,IAAMg/E,EAAkB,SAACiwC,EAAWjtG,GACzC,GAAIitG,EAEF,OADWA,EAAUllH,MAAM,KACfD,SAASkY,K,6BCKVmlC,IANuB,CACpCC,oCAAqC,sCACrCC,iCAAkC,mCAClCC,gCAAiC,oC,6BCCpBgB,IAJiB,CAC9BC,qBAAsB,yB,6BCGT2E,IANS,CACtBC,yBAA0B,2BAC1BC,yBAA0B,2BAC1BC,yBAA0B,6B,6BCKbuB,IANgB,CAC7BC,wBAAyB,0BACzBC,sBAAuB,wBACvBC,qBAAsB,yB,6BCCTG,IAJY,CACzBC,6BAA8B,iC,2HCS1BzoB,EAAa,IAAIC,IAEVwtD,EAAsB,WAAyB,IAAxB+6B,EAAuB,uDAAP,GAC5Cv6F,EAAiB+R,EAAWG,aAC5BsoF,EAAgB1mG,OAAO0mG,cAAgB7kG,KAAKC,MAAM9B,OAAO0mG,eAAiB,GAC1EC,EAAmBD,EAAc5pH,MAAK,SAAA4e,GAAI,OAAIA,EAAK8gB,YAAcxc,OAAO4mG,iBACxEC,EAAeF,GAAoB9kG,KAAKC,MAAM6kG,EAAiBG,aAErE,OAAID,IAAiB36F,EACZu6F,EAGFzmG,OAAO4mG,eAAiBH,GAG3B7tE,EAAgB,CACpBxyD,KAAMslG,IACN3tF,YAAa,GACbgpH,YAAY,EACZj0E,aAAc,GACdtU,aAAc,GACdstD,YAAa,IA8EAk7B,IA3EM,SAAChkH,EAAOqoB,GAG3B,OAFAroB,EAAQme,YAAgBne,EAAO41C,GAEvBvtB,EAAOhrB,MACb,KAAKmyC,IAAiB0qB,eACpB,OAAO,2BAAKl6D,GAAZ,IAAmB5c,KAAMilC,EAAOjlC,OAClC,KAAKosD,IAAiB4qB,2BACpB,OAAO,2BACFp6D,GADL,IAEEjF,YAAastB,EAAOttB,YACpBgpH,aAAY17F,EAAOttB,YACnB+0C,aAAc,KAElB,KAAKN,IAAiB2qB,kBACpB,OAAO,2BACFn6D,GADL,IAEE5c,KAAM,KAEV,KAAKosD,IAAiBQ,mBACpB,OAAO,2BACFhwC,GADL,IAEE+jH,YAAY,EACZj0E,aAAcznB,EAAOynB,aACrB/0C,YAAa,KAEjB,KAAKy0C,IAAiBC,sBACpB,IAAMjnB,EAAc4B,YAAkBD,IAAev5B,IAAK,CACxDmwB,eAAgBsH,EAAO47F,UAAUljG,eACjCqB,KAAMiG,EAAO47F,UAAUhtH,MACvBgG,OAAQorB,EAAO47F,UAAUr2E,cAE3BvgB,YAAU7E,GACV,IAAMgT,EAAY,YAAOx7B,EAAMw7B,cAC/B,OAAKA,EAAan9B,SAASgqB,EAAO47F,UAAU3mH,IAIrC0C,GAHLw7B,EAAarrB,KAAKkY,EAAO47F,UAAU3mH,IAC5B,2BAAK0C,GAAZ,IAAmBw7B,aAAcA,KAIrC,KAAKgU,IAAiB6qB,4BACpB,IAAMyuB,EAAW,YAAO9oF,EAAM8oF,aAC9B,OAAKA,EAAYzqF,SAASgqB,EAAO47F,UAAU3mH,IAIpC0C,GAHL8oF,EAAY34E,KAAKkY,EAAO47F,UAAU3mH,IAC3B,2BAAK0C,GAAZ,IAAmB8oF,YAAaA,KAIpC,KAAKt5C,IAAiBG,yBACpB,IAAMnnB,EAAc4B,YAAkBD,IAAer5B,OAAQ,CAC3DiwB,eAAgBsH,EAAO47F,UAAUljG,eACjCqB,KAAMiG,EAAO47F,UAAUhtH,MACvBgG,OAAQorB,EAAO47F,UAAUr2E,cAE3BvgB,YAAU7E,GACV,IAAMgT,EAAex7B,EAAMw7B,aAAa1mB,QAAO,SAAAr1B,GAAK,OAAIA,IAAU4oC,EAAO47F,UAAU3mH,MAC7E4mH,EAAoBlkH,EAAM8oF,YAAYh0E,QAAO,SAAAr1B,GAAK,OAAIA,IAAU4oC,EAAO47F,UAAU3mH,MACvF,OAAO,2BAAK0C,GAAZ,IAAmBw7B,aAAcA,EAAcstD,YAAao7B,IAE9D,KAAK10E,IAAiB8qB,8BACpB,OAAO,2BAAKt6D,GAAZ,IAAmBw7B,aAAc,GAAIstD,YAAa,KAEpD,KAAKt5C,IAAiB+qB,qBACpB,IAAM/+B,EAAY,YAAOx7B,EAAMw7B,cACzB2oF,EAAoB97F,EAAO47F,UAC3BG,EAAsB5oF,EAAa1mB,QAAO,SAAAw6B,GAAO,OACrD60E,EAAkB1wD,MAAK,SAAA4wD,GAAQ,OAAIA,EAAS/mH,KAAOgyC,QAGrD,OAAO,2BAAKtvC,GAAZ,IAAmBw7B,aAAc4oF,IAEnC,QACE,OAAOpkH,K,6BC3Gb,wDAKa+hF,EAAqB,SAAAuiC,GAAM,OAAI,SAAA7zD,GAC1C,IAAMluB,EAAoBwR,cAEpBwwE,EAAkBhiF,EAAkB5/C,QAAQ,MAAO,IAEnD6hI,EAAsBtvI,OAAO0kC,OAAO0qG,GAAQxqH,MAAK,SAAAmjB,GAAQ,OAAIA,EAASx6B,MAAQ8hI,KAEhFC,GACF/zD,EAAS,CACPpzD,KAAMw/C,IAAwBC,qBAC9Bra,WAAY+hF,EACZjiF,kBAAmBA,O,iCChBzB,uNAEakiF,EAAgB,CAC3B,GAAItmI,aAAaC,IAAiBiE,IAAK,UACvC,IAAKlE,aAAaC,IAAiBiE,IAAK,WACxC,IAAKlE,aAAaC,IAAiBiE,IAAK,WACxC,IAAKlE,aAAaC,IAAiBiE,IAAK,WACxCqiI,KAAMvmI,aAAaC,IAAiBiE,IAAK,YACzCsiI,OAAQxmI,aAAaC,IAAiBiE,IAAK,qCAC3CuiI,gBAAiBzmI,aAAaC,IAAiBkE,KAAM,gCACrDuiI,kBAAmB1mI,aAAaC,IAAiBkE,KAAM,kCACvDwiI,MAAO3mI,aAAaC,IAAiBiE,IAAK,yBAC1C0iI,OAAQ5mI,aAAaC,IAAiBiE,IAAK,0BAC3C2iI,OAAQ7mI,aAAaC,IAAiBiE,IAAK,0BAC3C4iI,OAAQ9mI,aAAaC,IAAiBiE,IAAK,2BAGhC6iI,EAAsB,CAAC,GAAI,IAAK,IAAK,KAErCC,EAA2BhnI,aAAaC,IAAiBiE,IAAK,wBAE9D+iI,EAAgCjnI,aAAaC,IAAiBiE,IAAK,8BAEnEgjI,EAAkClnI,aAAaC,IAAiBiE,IAAK,+BAErEijI,EAAuCnnI,aAClDC,IAAiBiE,IACjB,sC,6BC3BF,kHAGawvG,EAAwB,CACnCC,UAAW,YACXE,eAAgB,iBAChBuzB,MAAO,SAGIC,EAAoB,CAC/Bp3H,UAAW,CACT2M,YAAa,wCACbxf,MAAOvD,IAAOmE,cAAc,KAE9BmS,YAAa,CACXyM,YAAa,4EACbxf,MAAOvD,IAAOmE,cAAc,KAE9BspI,WAAY,CACVxuH,MAAO,kCACP8D,YAAa,2CACbxf,MAAOvD,IAAOqH,gBAAgB,MAEhC2kD,QAAS,CACP/sC,MAAO,wDACP8D,YAAa,+CACbxf,MAAOvD,IAAOwH,aAEhBrF,OAAQ,CACN4gB,YAAa,qFACbxf,MAAOvD,IAAOmE,cAAc,MAInBupI,EAAc,CACzBjxH,KAAM,OACNlZ,MAAOvD,IAAOI,kBAAkB,O,8NC5B5ButI,EAAkB1xH,YAAOmB,IAAPnB,CAAH,4KACN,SAAAM,GAAK,OAAKA,EAAM5a,UAAY4a,EAAM5a,UAAa,SAI7CoH,IAAMpK,eAEZ,SAAA4d,GAAK,OAAIA,EAAMhZ,OAASwF,IAAM/I,OAAOM,iBAAiB,QAG3DstI,EAAgB3xH,YAAOmB,IAAPnB,CAAH,8KACJ,SAAAM,GAAK,OAAKA,EAAM5a,UAAY4a,EAAM5a,UAAa,SAC7CoH,IAAMpK,cAKXoK,IAAMtK,MAAM,IAGXovI,EAAkB5xH,YAAO4sF,IAAP5sF,CAAH,iOAGN,SAAAM,GAAK,OAAIA,EAAMuxH,QAAU,SAI7B/kI,IAAMtK,MAAM,GACXsK,IAAMtK,MAAM,IAGlBsvI,EAA0B,SAAAxxH,GACrC,IAAQmH,EAAgCnH,EAAhCmH,SAAUjE,EAAsBlD,EAAtBkD,SAAauuH,EAA/B,YAAwCzxH,EAAxC,GACA,OACE,eAAC,IAAD,CAAM9Z,eAAe,gBAArB,UACE,cAACkrI,EAAD,yBAAiBj3F,GAAI,GAAOs3F,GAA5B,aACGtqH,KAEH,cAAC,IAAD,CAAMJ,cAAc,mBAAmBve,MAAM,OAA7C,SACE,cAAC8oI,EAAD,CAAiBC,OAAQruH,EAAW,UAAY,eAM3CwuH,EAAwB,SAAA1xH,GACnC,IAAQmH,EAAsBnH,EAAtBmH,SAAasqH,EAArB,YAA8BzxH,EAA9B,GACA,OAAO,cAACqxH,EAAD,2BAAmBI,GAAnB,aAA0BtqH,MAGnCqqH,EAAwBvxH,aAAe,CACrCjZ,MAAOwF,IAAM/I,OAAOM,iBAAiB,O,6BC3DvC,wEAIa4tI,EAAY,SAAA1sB,GACvB,IAAMuK,EAAgBxK,YAAYC,EAAK1sG,MAEvC,OADkBq5H,IAAWv1F,QAAQmzE,EAAel3G,KACnCgjB,S,+ECPnB,kCAKO,IAAMu2G,EAAU,SAAAnnH,GAAK,OAAI,IAAIonH,SAAQ,SAAAC,GAAO,OAAI3mH,WAAW2mH,EAASrnH,Q,kCCL3E,4J,ymFCSasnH,GAActyH,aAAOq6F,KAAPr6F,CAAH,mkBAOEwsG,KAAOE,QAGzBxrG,oBAAS,gCACTA,oBAAS,2BAMbA,oBAAS,mBAKTA,oBAAS,oBASAqxH,GAAkBvyH,KAAOkC,IAAV,6CAIfswH,GAAqBxyH,KAAOyyH,GAAV,sRAEd3lI,KAAMpK,cACRoK,KAAMxJ,UAAU,GACdC,KAAYG,OAElBoJ,KAAM/I,OAAOK,aAAa,KAKxB0I,KAAM/I,OAAOM,iBAAiB,KACxBd,KAAYM,UACdiJ,KAAMxJ,UAAU,IAIpBovI,GAAwB1yH,KAAO9U,EAAV,4GASrBynI,GAAwB3yH,aAAO4yH,KAAP5yH,CAAH,mCAC9Bxd,UAGgBwd,aAAO6yH,KAAP7yH,CAAH,qEAENjc,KAAOgE,cAAc,MAGLiY,KAAOC,OAAV,iJASGD,aAAOgC,MAAM6sH,MAAM,CAC5CxnH,cAAe,SACf9gB,WAAY,SACZC,eAAgB,SAHSwZ,CAAH,ghBAMKkB,oBAAS,+BACpBA,oBAAS,WACRA,oBAAS,WAWxBpU,KAAMpL,aAAagzF,GASnB5nF,KAAMpL,aAAaoxI,KAUX/xH,YAAc,cAEnB,IAAMgyH,GAAkB/yH,aAAOgC,MAAM6sH,MAAM,CAChDxnH,cAAe,SACf9gB,WAAY,aACZC,eAAgB,iBAHawZ,CAAH,uEASfgzH,GAAwBhzH,aAAOy0E,KAAPz0E,CAAH,8iCAMvB,YAAwB,IAArBizH,EAAoB,EAApBA,cACV,OAAOA,EAAa,UAAMA,EAAN,MAA0B,8BAwB9B/xH,oBAAS,2BACrBC,KAESD,oBAAS,sBAKVA,oBAAS,uBAMZgyH,GAAelzH,aAAOkK,KAAPlK,CAAH,0FAMZmzH,GAAanzH,aAAOmB,KAAPnB,CAAH,wQAGRlT,KAAMxJ,UAAU,GACdwJ,KAAMxJ,UAAU,GAEtBwJ,KAAM/I,OAAOK,aAAa,KAGjC1C,KAAamiB,GAEA/W,KAAMxJ,UAAU,GACdwJ,KAAMxJ,UAAU,IAItB8vI,GAAYpzH,aAAOmB,KAAPnB,CAAH,0MAGXlT,KAAM/I,OAAOI,kBAAkB,KAC3B2I,KAAMxJ,UAAU,GACdwJ,KAAMxJ,UAAU,GAE7B5B,KAAamiB,GACA/W,KAAMxJ,UAAU,GACdwJ,KAAMxJ,UAAU,IActB+vI,IAVkBrzH,aAAOmB,KAAPnB,CAAH,sKAUGA,aAAO40E,KAAP50E,CAAH,8JAEfkB,oBAAS,WAElBxf,KAAamiB,GACF3C,oBAAS,WAAgBA,oBAAS,WAE7Cxf,KAAagzF,GACFxzE,oBAAS,WAAgBA,oBAAS,aAIpCoyH,GAAmBtzH,KAAOC,OAAV,ySAGlBlc,KAAOI,kBAAkB,KASvBJ,KAAOwvI,MAQPC,GAAuBxzH,aAAOmB,KAAPnB,CAAH,kFAMpByzH,GAAczzH,aAAO40E,KAAP50E,CAAH,kDAIX0zH,GAA+B1zH,aAAOyD,KAAPzD,CAAH,4mBAWtBkB,oBAAS,eACPA,oBAAS,sBAEfA,oBAAS,2BAEFA,oBAAS,WACRA,oBAAS,WAWJA,oBAAS,wBAMxByyH,GAAkB3zH,aAAOmB,KAAPnB,CAAH,6CAIf4zH,GAAiB5zH,aAAOmB,KAAPnB,CAAH,6HAEZkB,oBAAS,eACPA,oBAAS,oBACfA,oBAAS,4BAIP2yH,GAAyB7zH,aAAOmB,KAAPnB,CAAH,kIAIpBkB,oBAAS,gBAIX4yH,GAAoC9zH,aAAOmB,KAAPnB,CAAH,kIAI/BkB,oBAAS,gBAIX6yH,GAA+B/zH,aAAOmB,KAAPnB,CAAH,8JAY5Bg0H,GAA6Bh0H,aAAOgC,KAAPhC,CAAH,mLAEjBkB,oBAAS,gCAOlB+yH,GAA4Bj0H,aAAOyD,KAAPzD,CAAH,4IACzBkB,oBAAS,WAEIA,oBAAS,gCACtB,SAAAZ,GAAK,OAAKA,EAAM4zH,YAAc,UAAY,SACnC,SAAA5zH,GAAK,OAAKA,EAAM4zH,YAAc,UAAY,UAGjDC,GAAyBn0H,aAAOyD,KAAPzD,CAAH,2HACbkB,oBAAS,4BAClBA,oBAAS,WAAgBA,oBAAS,YAG3C,SAAAZ,GACA,OAAIA,EAAM8zH,UACF,gDAKA,kDAQCC,GAAar0H,aAAO40E,KAAP50E,CAAH,8RAEPkB,oBAAS,eAGrBxf,KAAamiB,GAGC3C,oBAAS,eACbA,oBAAS,YA6CVozH,IAtCmBt0H,aAAO40E,KAAP50E,CAAH,gGAMSA,aAAO40E,KAAP50E,CAAH,kIAQLA,aAAO40E,KAAP50E,CAAH,0EACLkB,oBAAS,iCAIWlB,aAAO40E,KAAP50E,CAAH,kFACvB,SAAAM,GAAK,OAAIA,EAAMi0H,cAIKv0H,aAAOmB,KAAPnB,CAAH,qOAElBkB,oBAAS,eAIPA,oBAAS,gBAIelB,aAAO40E,KAAP50E,CAAH,sDAChBkB,oBAAS,+BAGclB,aAAOyD,KAAPzD,CAAH,yGAS7Bw0H,GAAsBx0H,aAAOyD,KAAPzD,CAAH,yIAGvBlT,KAAMtK,MAAM,GAGjBsK,KAAM7K,aAAaH,OANS,mDAS5BgL,KAAM7K,aAAaJ,QATS,4FAenB4yI,GAAaz0H,aAAOyD,KAAPzD,CAAH,oDAIV00H,GAAkB10H,aAAOK,KAAPL,CAAH,0OACf,SAAAM,GAAK,OAAKA,EAAMq0H,eAAiB,UAAY,SACtC,SAAAr0H,GAAK,OAAKA,EAAMq0H,eAAiB,GAAK,SAGtDjzI,KAAamyF,GAGbnyF,KAAamiB,GAGbniB,KAAagzF,IAKJkgD,GAAsB50H,aAAOgC,KAAPhC,CAAH,iKAI5Bte,KAAagzF,GAKbhzF,KAAaoxI,KAIjB8B,GAAoB7zH,YAAc,sBAE3B,IAAM8zH,GAAc70H,KAAOkC,IAAV,kHAIpBxgB,KAAamiB,IAMJixH,GAAsB90H,KAAOkC,IAAV,qMAM5BxgB,KAAagzF,IAoBJqgD,IAbiB/0H,aAAOmB,KAAK45B,EAAZ/6B,CAAH,wLAEVkB,oBAAS,eAGPA,oBAAS,gBAQOlB,aAAOmB,KAAPnB,CAAH,mFAKnBg1H,GAAWh1H,aAAOmB,KAAPnB,CAAH,0SAGNkB,oBAAS,eAEPA,oBAAS,oBACfA,oBAAS,gCAEhBxf,KAAamyF,GAEA3yE,oBAAS,gBAMb+zH,GAAkBj1H,aAAOmB,KAAPnB,CAAH,0HAEbkB,oBAAS,eACbA,oBAAS,6BAKPg0H,GAAYl1H,KAAOkC,IAAV,8EAGlBxgB,KAAagzF,IAKJV,GAAUh0E,KAAOiB,IAAV,0FAEMnU,KAAM/I,OAAOC,iBAAiB,MAC5C,gBAAGmxI,EAAH,EAAGA,OAAH,OAAiBA,GAAkB,cAElCC,GAAkBp1H,KAAOiB,IAAV,gHAEDnU,KAAM/I,OAAOC,iBAAiB,MAK5CqxI,GAAWr1H,KAAOkC,IAAV,uFACV,qBAAGogH,SAA2B,GAAK,MAClC,gBAAGA,EAAH,EAAGA,SAAUgT,EAAb,EAAaA,aAAb,OAAiCA,IAA8BhT,EAAW,GAAK,OAI9EiT,GAAWv1H,KAAOkC,IAAV,wFAGH,SAAA5B,GAAK,OAAKA,EAAMk1H,cAAgB,EAAI,MAGzCC,GAAaz1H,aAAOmB,KAAPnB,CAAH,uIACR,qBAAGsiH,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,KACjEwJ,KAAMvJ,YAAYI,KACxBmJ,KAAM/I,OAAOK,aAAa,MACpB,qBAAGk+H,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,MAGvEoyI,GAAY11H,aAAOmB,KAAPnB,CAAH,4KACLlT,KAAMvJ,YAAYI,MACxB,qBAAGuvE,6BACqBpmE,KAAM/I,OAAOmE,cAAc,IAAM4E,KAAM/I,OAAOK,aAAa,OAC/E0I,KAAMxJ,UAAU,GAG3B5B,KAAamyF,GACA/mF,KAAMxJ,UAAU,IAIpBixF,GAAkBv0E,aAAOmB,KAAPnB,CAAH,6GACblT,KAAMxJ,UAAU,GACdwJ,KAAMvJ,YAAYG,OACxBoJ,KAAM/I,OAAOmE,cAAc,KAIzBytI,GAAwB31H,aAAOgC,KAAPhC,CAAH,iIACZlT,KAAM/I,OAAOQ,eAAe,KAMrCqxI,GAAe51H,aAAOmB,KAAPnB,CAAH,8GACV,qBAAGsiH,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,KACjEwJ,KAAMvJ,YAAYI,KACxBmJ,KAAM/I,OAAOmE,cAAc,KAIzB2tI,GAA0B71H,aAAOmB,KAAPnB,CAAH,+GACrB,qBAAGsiH,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,KACjEwJ,KAAMvJ,YAAYG,OACxBoJ,KAAM/I,OAAOK,aAAa,MACpB,qBAAGk+H,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,MAEvEwyI,GAAoB91H,aAAOmB,KAAPnB,CAAH,6GACflT,KAAMxJ,UAAU,GACdwJ,KAAMvJ,YAAYG,OACxBoJ,KAAM/I,OAAOmE,cAAc,KAIzB6tI,GAAmB/1H,aAAOgC,KAAPhC,CAAH,gLAEPlT,KAAM/I,OAAO0H,cAAc,IAC3BqB,KAAM/I,OAAO6G,oBAAoB,MAM1CorI,GAA0Bh2H,KAAOiB,IAAV,8SAQhCvf,KAAamyF,IASJoiD,GAAqBj2H,aAAOK,KAAPL,CAAH,+JAE3Bte,KAAamyF,IACJ,qBAAGqiD,eAOHC,GAAQn2H,aAAOmB,KAAPnB,CAAH,2KACH,qBAAGkzD,6BACiBpmE,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,KAEpE5B,KAAamyF,GACA/mF,KAAMxJ,UAAU,GAGhBwJ,KAAMvJ,YAAYI,MACxB,qBAAGuvE,6BACqBpmE,KAAM/I,OAAOmE,cAAc,IAAM4E,KAAM/I,OAAOK,aAAa,QAGjFgyI,GAAkBp2H,aAAOmB,KAAPnB,CAAH,6GACb,qBAAGsiH,SAA2Bx1H,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,KACjEwJ,KAAMvJ,YAAYI,KACxBmJ,KAAM/I,OAAOmE,cAAc,KACrB,qBAAGo6H,SAA2B,OAAS,UAI3C7O,GAAQzzG,KAAOkC,IAAV,mKAIdxgB,KAAamyF,IAOJwiD,GAA0Br2H,aAAOyD,KAAPzD,CAAH,wKAIhCte,KAAa0mB,IAKJkuH,GAAet2H,KAAOkC,IAAV,qNAGrBxgB,KAAa0mB,IAWJmuH,GAAwBv2H,aAAOyD,KAAPzD,CAAH,6KAQ9BlT,KAAMpL,aAAa0mB,IAKVouH,GAAoBx2H,aAAOyD,KAAPzD,CAAH,0DAIjBy2H,GAAoBz2H,aAAOgC,KAAPhC,CAAH,+NAO1BlT,KAAMpL,aAAa0mB,IAOVsuH,GAAkB12H,aAAOK,KAAPL,CAAH,gFAExBlT,KAAMpL,aAAamiB,IAKV8yH,GAAoB32H,aAAOgC,KAAPhC,CAAH,iQAERlT,KAAM/I,OAAOC,iBAAiB,IAMpB8I,KAAM/I,OAAOmE,cAAc,IAGvD4E,KAAMpL,aAAamiB,IAKV+yH,GAAuB52H,aAAOyD,KAAPzD,CAAH,+KAUpB62H,GAAc72H,KAAOkC,IAAV,kHAGpBpV,KAAMpL,aAAa0mB,IAMV0uH,GAAwB92H,aAAOyD,KAAPzD,CAAH,kIAGzBlT,KAAMtK,MAAM,IAEjB,YACA,GAD2B,EAAxBu0I,kBAED,OAAOz0I,aAAP,0WAmBO00I,GAAwBh3H,aAAOgC,KAAPhC,CAAH,uFAE9BlT,KAAMpL,aAAa0mB,IAKV6uH,GAA0Bj3H,aAAOyD,KAAPzD,CAAH,gEAMvBk3H,GAAqBl3H,aAAOgC,KAAPhC,CAAH,kRAMTlT,KAAM/I,OAAOC,iBAAiB,IAGhDtC,KAAamyF,IASJsjD,GAA8Bn3H,aAAOgC,KAAPhC,CAAH,oPAGlBlT,KAAM/I,OAAOC,iBAAiB,KAIhDtC,KAAamyF,IAOJujD,GAAoBp3H,aAAOgC,KAAPhC,CAAH,+MAK1Bte,KAAamyF,K,s4BC12BIwjD,E,kDAWnB,aAAuC,IAA3Bh7F,EAA0B,uDAAhB,GAAIwuC,EAAY,uDAAJ,GAAI,oBACpC,IAAIuL,EAAyB,KAAZ/5C,EAAiBA,EAAjB,KAEXg6C,EAASj6C,YAAUnB,IAASI,mCAAoC+6C,GAHlC,mBAK9BC,EAAQxL,G,gGAShB,WAA4BysD,EAAaC,GAAzC,eAAArsI,EAAA,6DACQssI,EADR,UAC6BD,EAD7B,uDACyFD,GADzF,2EAGgCE,EAAiB,IAAI,GAHrD,wF,4IAcA,WAAqCF,EAAaG,EAAeC,EAAgBH,GAAjF,qBAAArsI,EAAA,sDA2BE,IAASnK,KA1BH42I,EAAY,IAAIC,SAChBC,EAAiB,CACrBC,iBAAkBR,EAClBS,gBAAiB,GACjBC,gBAAiB,GACjBC,gBAAiB,GACjBC,cAAe,GACfC,eAAgB,GAChBC,sBAAuB,GACvBC,mBAAoBZ,EACpBa,oBAAqBZ,EACrBa,kBAAmB,GACnBC,cAAezvG,OAAOC,SACtByvG,oBAAqB,GACrBC,WAAY,GACZC,SAAU,GACVC,mBAAoB,GACpBC,gBAAiB,IAGfpB,SACKI,EAAeS,2BAEfT,EAAeQ,mBAGRR,EACdF,EAAUmB,OAAO/3I,EAAK82I,EAAe92I,IA5BzC,OA8BQy2I,EA9BR,UA8B6BD,EA9B7B,iHAgCiCC,EAAiBG,GAAW,GAhC7D,wF,kEAvC4C/sD,K,SCAzBmuD,E,kDAYnB,aAAmC,IAAvBvqI,EAAsB,uDAAhB,GAAIq8E,EAAY,uDAAJ,GAAI,uCAC1Br8E,EAAKq8E,G,gGASb,WAA4BmuD,EAAQz0G,GAApC,mBAAAr5B,EAAA,6DACQ6/E,EADR,UACwBiuD,EADxB,qCAEMC,EAAW,IAAIrB,SACnB32I,OAAOiB,KAAKqiC,GAAMzjC,SAAQ,SAACkoB,EAAO8S,GAChCm9G,EAASH,OAAO9vH,EAAOub,EAAKvb,OAJhC,4EAMyC+hE,EAAYkuD,GAAU,GAN/D,cAMMpiF,EANN,yBAOSA,GAPT,gD,8DAtB+C+zB,K,2JCgNlCsuD,EAhNiB,WAAiC,IAAhCC,IAA+B,yDAC1DC,EAAmB,CACrBrmH,OAAQsmH,MAAaC,WACrBC,SAAUF,MAAaC,WACvBE,OAAQH,MAAaC,WACrBG,WAAYJ,MAAWC,YAYzB,OATIH,IACFC,EAAiBM,UAAYL,MAC1BC,WACAzmH,KAAK,YAAa0/D,IAAOgQ,kBAAkB,SAAAo3C,GAAG,OAAI1pB,YAAqB0pB,MACvE9mH,KAAK,MAAO0/D,IAAOkQ,YAAY,SAAAk3C,GAAG,OACjCzpB,YAAqBypB,EAAK34C,IAAqBG,QAAU,EAAGH,IAAqBI,QAAU,OAI1Fi4C,MAAa/tH,MAAM,CACxBqtF,OAAQ0gC,MACLrlI,QAAQ,MACR4lI,cACAC,WACH9gH,QAASsgH,MAAa/tH,MAAM,CAC1BlC,KAAMiwH,MACHS,WACAC,UACAT,WACHU,WAAYX,MAAaY,KAAK,OAAQ,CACpCC,GAAI,EACJpkC,KAAMujC,MAAa/tH,MAAM8tH,GACzBe,UAAWd,MAAaO,gBAE1B1gF,OAAQmgF,MAAaY,KAAK,OAAQ,CAChCC,GAAI,EACJpkC,KAAMujC,MAAa/tH,MAAM,CACvB8uH,cAAef,MAAaC,WAC5Bh3G,SAAU+2G,MAAaC,WACvB9lH,OAAQ6lH,MAAaC,WACrBe,OAAQhB,MAAaQ,aAEvBM,UAAWd,MAAaO,kBAG5BnyG,QAAS4xG,MAAa/tH,MAAM,CAC1BgvH,QAASjB,MAAaC,WACtB3nG,KAAM0nG,MAAaC,WACnBvtH,MAAOstH,MACJY,KAAK,UAAW,CACfC,GAAIp9H,KAAoBC,aACxB+4F,KAAMujC,MACHj/F,MAAMg0F,IAAO5sI,KAAI,SAAAuqB,GAAK,OAAIA,EAAMoiH,iBAChCmL,aAEJW,KAAK,UAAW,CACfC,GAAIp9H,KAAoBE,OACxB84F,KAAMujC,MACHj/F,MAAM8zF,IAAU1sI,KAAI,SAAA+4I,GAAQ,OAAIA,EAASpM,iBACzCmL,aAEJW,KAAK,UAAW,CACfC,GAAI,SAAAP,GAAG,OAAK18H,KAAgBmN,SAASuvH,IACrC7jC,KAAMujC,MAAaO,gBAEvB9mG,QAASumG,MACNj/F,MAAMyxF,IAAUrqI,KAAI,SAAAsxC,GAAO,OAAIA,EAAQ3jC,SACvCmqI,WACHkB,WAAYnB,MACTY,KAAK,UAAW,CACfC,GAAI,SAAAP,GAAG,OAAIA,IAAQ78H,KAAoBC,cACvC+4F,KAAMujC,MAAat9G,OAAO,KAE3Bu9G,WACHh4H,MAAO+3H,MACJ/3H,QACAg4H,aAELjtD,QAASgtD,MAAa/tH,MAAM,CAC1B4wE,SAAUm9C,MACPoB,GAAGpB,OACHrlI,SAAQ,iBAAM,MACd4lI,cACAC,WACHa,gBAAiBrB,MACdoB,GACCpB,MAAa/tH,MAAM,CACjBqvH,UAAWtB,MAAarlI,QAAQ,GAChC7E,KAAMkqI,MAAaj/F,MAAMwgG,IAAsBp5I,KAAI,SAAAijC,GAAI,OAAIA,EAAKzb,aAGnE4wH,cACHiB,WAAYxB,MACTrlI,QAAQ,MACR4lI,cACH/3G,UAAWw3G,MAAa/tH,MAAM,CAC5BgX,SAAU+2G,MACPyB,YACAxB,WACH3yG,QAAS0yG,MAAaC,WACtBhoG,UAAW+nG,MAAaC,WACxBphF,SAAUmhF,MAAaC,WACvBt3G,OAAQq3G,MACLU,UACAT,WACH7xH,SAAU4xH,MACPoB,GAAGpB,MAAaU,WAChB/lI,QAAQ,IACXquB,UAAWg3G,MACRyB,YACAlB,cACHhsG,SAAUyrG,MACPyB,YACAlB,cACHxsG,KAAMisG,MACHyB,YACAxB,WACHyB,iBAAkB1B,MAAaO,cAC/BoB,WAAY3B,MAAaO,cACzB70G,aAAcs0G,MAAWO,cACzBqB,eAAgB5B,MACbrlI,SAAQ,GACR4lI,cACHsB,cAAe7B,MAAaO,gBAE9Bn0E,MAAO4zE,MACJoB,GACCpB,MAAa/tH,MAAM,CACjBwb,SAAUuyG,MACPS,WACAC,UACH11H,KAAMg1H,MAAWO,cACjBxqI,SAAUiqI,MAAaO,cACvBhsG,SAAUyrG,MACPyB,YACAlB,cACH12G,MAAOm2G,MACJS,WACAC,UACAH,iBAGN5lI,QAAQ,IACR4lI,cACH7uI,OAAQsuI,MACLoB,GACCpB,MAAa/tH,MAAM,CACjB6vH,WAAY9B,MAAaO,cACzBwB,kBAAmB/B,MAAaO,iBAGnC5lI,QAAQ,IACR4lI,cACHzoI,SAAUkoI,MACPoB,GACCpB,MAAa/tH,MAAM,CACjBxE,YAAauyH,MAAaO,cAC1BnzG,iBAAkB4yG,MAAaO,cAC/B30G,YAAao0G,MAAaO,cAC1B9yG,SAAUuyG,MACPS,WACAC,UACAH,cACH7yG,IAAKsyG,MAAaO,cAClB5yG,YAAaqyG,MAAaO,cAC1B3yG,WAAYoyG,MAAaO,cACzB/yG,cAAewyG,MAAaO,iBAG/B5lI,QAAQ,IACR4lI,gBAEL1vE,aAAcmvE,MAAaO,cAC3Br4G,SAAU83G,MACPrlI,SAAQ,GACR4lI,cACHyB,aAAchC,MAAaO,cAC3Bx/B,UAAWi/B,MACRO,cACAC,WACHyB,WAAYjC,MACT/tH,MAAM,CACLwb,SAAUuyG,MACPS,WACAC,UACAH,cACHv1H,KAAMg1H,MAAWO,cACjBxqI,SAAUiqI,MAAaO,cACvBhsG,SAAUyrG,MACPyB,YACAlB,cACH12G,MAAOm2G,MACJS,WACAC,UACAH,gBAEJ5lI,QAAQ,MACR6lI,WACAD,cACH2B,SAAUlC,MAAa/tH,MAAM,CAC3BkwH,OAAQnC,MACLj/F,MAAM,CAAC,EAAG,IACVk/F,WACHjgC,UAAWggC,MAAaC,WACxBhgC,SAAU+/B,MAAaC,WACvBmC,aAAcpC,MAAcrlI,SAAQ,Q,2BCzG3B0nI,EAnGgBrC,MAAa/tH,MAAM,CAChDqtF,OAAQ0gC,MACLrlI,QAAQ,MACR4lI,cACAC,WACH9gH,QAASsgH,MAAa/tH,MAAM,CAC1BlC,KAAMiwH,MACHS,WACAC,UACAT,WACHU,WAAYX,MAAaY,KAAK,OAAQ,CACpCC,GAAI,EACJpkC,KAAMujC,MAAa/tH,MAAM,CACvByH,OAAQsmH,MAAaC,WACrBE,OAAQH,MAAaC,WACrBG,WAAYJ,MAAWC,WACvBC,SAAUF,MAAaC,WACvBI,UAAWL,MACRC,WACAzmH,KAAK,YAAa0/D,IAAOgQ,kBAAkB,SAAAo3C,GAAG,OAAI1pB,YAAqB0pB,MACvE9mH,KAAK,MAAO0/D,IAAOkQ,YAAY,SAAAk3C,GAAG,OACjCzpB,YAAqBypB,EAAK34C,IAAqBG,QAAU,EAAGH,IAAqBI,QAAU,QAGjG+4C,UAAWd,MAAaO,gBAE1B1gF,OAAQmgF,MAAaY,KAAK,OAAQ,CAChCC,GAAI,EACJpkC,KAAMujC,MAAa/tH,MAAM,CACvB8uH,cAAef,MAAaC,WAC5Bh3G,SAAU+2G,MAAaC,WACvB9lH,OAAQ6lH,MAAaC,WACrBe,OAAQhB,MAAaQ,aAEvBM,UAAWd,MAAaO,kBAG5BnyG,QAAS4xG,MAAa/tH,MAAM,CAC1BgvH,QAASjB,MAAaC,WACtB3nG,KAAM0nG,MAAaC,WACnBvtH,MAAOstH,MACJY,KAAK,UAAW,CACfC,GAAIp9H,KAAoBC,aACxB+4F,KAAMujC,MACHj/F,MAAMg0F,IAAO5sI,KAAI,SAAAuqB,GAAK,OAAIA,EAAMoiH,iBAChCmL,aAEJW,KAAK,UAAW,CACfC,GAAIp9H,KAAoBE,OACxB84F,KAAMujC,MACHj/F,MAAM8zF,IAAU1sI,KAAI,SAAA+4I,GAAQ,OAAIA,EAASpM,iBACzCmL,aAEJW,KAAK,UAAW,CACfC,GAAI,SAAAP,GAAG,OAAK18H,KAAgBmN,SAASuvH,IACrC7jC,KAAMujC,MAAaO,gBAEvB9mG,QAASumG,MACNj/F,MAAMyxF,IAAUrqI,KAAI,SAAAsxC,GAAO,OAAIA,EAAQ3jC,SACvCmqI,WACHkB,WAAYnB,MACTY,KAAK,UAAW,CACfC,GAAI,SAAAP,GAAG,OAAIA,IAAQ78H,KAAoBC,cACvC+4F,KAAMujC,MAAat9G,OAAO,KAE3Bu9G,WACHh4H,MAAO+3H,MACJ/3H,QACAg4H,aAELl/B,UAAWi/B,MACRO,cACAC,WACH0B,SAAUlC,MAAa/tH,MAAM,CAC3BkwH,OAAQnC,MACLj/F,MAAM,CAAC,EAAG,IACVk/F,WACHjgC,UAAWggC,MAAaC,WACxBhgC,SAAU+/B,MAAaC,WACvBmC,aAAcpC,MAAcrlI,SAAQ,KAEtC2nI,MAAOtC,MAAa/tH,MAAM,CACxBg7C,cAAe+yE,MAAYC,WAC3BnhG,UAAWkhG,MAAaC,WACxBsC,UAAWvC,MAAaC,WACxBhnC,UAAW+mC,MAAa/tH,MAAM,CAC5B0W,OAAQq3G,MAAaC,WACrBr3G,KAAMo3G,MAAaC,WACnBuC,QAASxC,MAAaC,WACtBwC,WAAYzC,MAAaC,aAE3B9gG,UAAW6gG,MAAa/tH,MAAM,CAC5B6iB,KAAMkrG,MAAaC,WACnByC,UAAW1C,MAAaC,WACxB0C,QAAS3C,MAAaC,iB,SCvEtB2C,EAAqB,UAKdC,EAAiB,CAC5B59C,YAAa,EACbE,OAAQ,EACRE,OAAQ,EACRy9C,OAAQ,EACRv9C,UAAW,EACXC,WAAY,GAGDu9C,EAAc,CACzBC,aAAc,EACdC,SAAU,GAGNC,EAAmB,CACvBvC,WAAY9vI,aAAaC,IAAiBC,KAAM4yH,IAAoBM,oBACpEpkE,OAAQhvD,aAAaC,IAAiB4D,QAASivH,IAAoBO,aACnEif,OAAQ,+EACRC,SAAUvyI,aAAaC,IAAiB4D,QAASivH,IAAoBQ,gBACrEkf,UAAWxyI,aAAaC,IAAiB4D,QAASivH,IAAoBS,iBACtEkf,OAAQ,qEAQJC,EAAuB,CAC3B,cAAe,CACbxzH,KAAM8yH,EAAe59C,YACrBj8F,MAAO,cAET62D,OAAQ,CACN9vC,KAAM8yH,EAAe19C,OACrBn8F,MAAO,UAETyvE,gBAAiB,CACf1oD,KAAM8yH,EAAet9C,UACrBv8F,MAAO,iBAET0vE,iBAAkB,CAChB3oD,KAAM8yH,EAAer9C,WACrBx8F,MAAO,iBAETm6I,OAAQ,CACNpzH,KAAM8yH,EAAex9C,OACrBr8F,MAAO,UAETs6I,OAAQ,CACNvzH,KAAM8yH,EAAeC,OACrB95I,MAAO,gBAQLw6I,EAAkB,CACtBC,KAAM,KACNC,WAAY,KACZ,mBAAoB,KACpBC,SAAU,KACVhpI,QAAS,OAILipI,EAAqB,OAMdz4D,GAAoB,UA4DpB04D,GAAc,SAAAxE,GACzB,GApE8B,qBAoE1BA,EACF,OAAOmE,EAAgBC,KAGzB,IAAMK,EAAWC,yBAAe1E,GACzB2E,EAAP,YAAwBF,EAAxB,MAEA,IAAKE,EAAe,OAAOR,EAAgB7oI,QAE3C,IAAcspI,EAAiBD,EAAvBj0H,KACR,OAAOyzH,EAAgBS,IAAiBT,EAAgB7oI,SAQpDupI,GAA2B,SAACtE,EAAUuE,GAC1C,IAAQC,EAA6BxE,EAA7BwE,YAAaC,EAAgBzE,EAAhByE,YAEnBxsG,EAOEssG,EAPFtsG,cACAiE,EAMEqoG,EANFroG,qBACAC,EAKEooG,EALFpoG,sBACAtI,EAIE0wG,EAJF1wG,eACAob,EAGEs1F,EAHFt1F,iBACAu5B,EAEE+7D,EAFF/7D,aACAk8D,EACEH,EADFG,aAEI58H,EAAW,UAAMikH,IAAN,YAA+Bl4F,EAA/B,cAAmDA,EAAnD,aAAsEk4F,KAAtE,aAAkF7vF,EAAlF,YAA0GC,EAA1G,aAAoIlE,EAAcluB,OAE7J46H,EAAqB,CACzBzvG,KAAM,CACJ0vG,MAAOJ,EAAYpkC,UACnBykC,KAAML,EAAYnkC,UAEpB7xE,QAAS,CACPs2G,MAAOL,EAAYh2G,eACnBs2G,MAAON,EAAYO,gBAAkB,GACrCtsG,KAAM+rG,EAAY/rG,KAClB5lB,MAAO2xH,EAAY3xH,MACnBmyH,QAASR,EAAYlD,WACrB1nG,QAAS4qG,EAAY5qG,SAEvBxxB,MAAOm8H,EAAYn8H,OAGf68H,EAA2Bj2F,EAAiBrnB,QAChD,SAAAu9D,GAAe,YAAqCh0D,IAAjCg0D,EAAgB/tC,gBAGrC,MAAO,CACL+tF,SAAU,CACRC,KAAM,QACNC,YAAaxxG,GAEfyxG,SAAU,CACRC,sBAAsB,GAAD,OAAKz1G,OAAOC,SAASy2E,OAArB,iBACrBg/B,gBAAgB,GAAD,OAAK11G,OAAOC,SAASy2E,OAArB,iBACfi/B,6BAA8B,MAC9BvwG,KAAM,oBAERwwG,QAASf,EACT3xG,SAAS,2BACJ2xG,GADG,IAENgB,aAAct5B,YAAYm4B,EAAY17I,SAExC0jE,MAAM,CACJ,CACEo5E,aAAc99H,EACd+9H,IAAK5tG,EAAcP,UACnBouG,WAAuC,KAAd,OAAb7tG,QAAa,IAAbA,OAAA,EAAAA,EAAeN,WAC3BouG,IAAK,EAGLC,eAAgB/tG,EAAcguG,UAC9BC,SAAUjuG,EAAckuG,aATvB,mBAWAjB,EAAyB38I,KAAI,SAAA4uD,GAC9B,MAAO,CACLyuF,aAAczuF,EAAgBrgB,aAAe3uC,YAAIgvD,EAAiB,mBAAoB,IACtF0uF,IAAK1uF,EAAgBnrB,YACrB85G,WAAYhkF,KAAKC,IAAuC,IAAnC5K,EAAgBltB,MAAM9F,QAAQ,IACnD4hH,IAAK5uF,EAAgBtpB,SACrBm4G,eAAgB,GAChBE,SAAU,SAIhBE,gBAAiB,EACjBC,WAAYhvF,SAASyK,KAAKwkF,MAAqB,IAAf5B,IAChCz6G,MAAOotB,SAASyK,KAAKwkF,MAAqB,IAAf99D,MAUzB+9D,GAAoB,SAACC,EAAajC,EAAW7wE,GAAc,IAAD,IAE5D+yE,EAUED,EAVFC,OACAC,EASEF,EATFE,QACAC,EAQEH,EARFG,aACAC,EAOEJ,EAPFI,aACAC,EAMEL,EANFK,MACAx9H,EAKEm9H,EALFn9H,SACAi3H,EAIEkG,EAJFlG,SACAwG,EAGEN,EAHFM,cACAC,EAEEP,EAFFO,eACAC,EACER,EADFQ,SAGAnzG,EAWE0wG,EAXF1wG,eACA20C,EAUE+7D,EAVF/7D,aACA24D,EASEoD,EATFpD,cACAoC,EAQEgB,EARFhB,OACA/zF,EAOE+0F,EAPF/0F,mCACAi0F,EAMEc,EANFd,UACAD,EAKEe,EALFf,SACA3iH,EAIE0jH,EAJF1jH,QACAtuB,EAGEgyI,EAHFhyI,MACAijH,EAEE+uB,EAFF/uB,WACA9oC,EACE63D,EADF73D,YAEI8zD,EAAaiG,GAAUC,EAAU37H,iBAAemB,OAAf,UAAyBu6H,EAAzB,YAAmCC,EAAnC,QAAmD,KACtFO,EAAgB,GACpB,GAAiB,gBAAb59H,EACF49H,EAAa,qCACXntH,OAAQ6sH,EACRpG,OAAQqG,GACJpG,GAAc,CAAEA,eAChBsG,GAAiB,CAAEA,kBAJZ,IAKXI,aAAc,EACd5G,SAAQ,OAAEA,QAAF,IAAEA,IAAY2D,GAAY0C,GAClClG,UAAWoG,EACXJ,OAAQA,EACRC,QAASA,IAGPK,IACFE,EAAa,2BACRA,GADQ,IAEXxH,WAAYkH,EACZQ,eAAgBR,EAAa/qG,OAAO,IAChCorG,GAAY,CAAEA,mBAGjB,GAAiB,WAAb39H,EACT49H,EAAgB,CACd9F,cAAeA,EACf93G,SAAUwK,EACVtZ,OAAQiuD,EACR/qC,cAAe,WAEZ,GAAiB,WAAbp0B,EACT49H,EAAgB,CACdG,MAAO7D,EAAO6D,MACdhnC,UAAWmjC,EAAOnjC,UAClBC,SAAUkjC,EAAOljC,SACjBh4F,MAAOk7H,EAAOl7H,MACdg/H,SAAU9D,EAAO8D,eAEd,GAAiB,qBAAbh+H,EACT49H,EAAgB,CACd3G,SAAUmD,EAAU6D,cACpBC,iBAAkB9D,EAAU+D,sBAC5BjH,OAAQkD,EAAUgE,oBAClBC,gBAAiBjE,EAAUkE,qBAC3BC,eAAgBnE,EAAUoE,oBAC1Bj2D,MAAO6xD,EAAUqE,cACjBX,eAAgB1D,EAAUsE,IAAIC,WAAWpsG,MAAM,UAE5C,GAAiB,oBAAbvyB,EAAgC,CAAC,IAAD,EACnC4+H,EAAqBt2G,KAAKC,MAAM4xG,EAAS0E,oBAC/CjB,EAAgB,CACd3G,SAAUkD,EAAS8D,cACnBC,iBAAkB/D,EAASgE,sBAC3BjH,OAAM,iBACJiD,QADI,IACJA,OADI,EACJA,EAAUiE,2BADN,kBAEDQ,EAAmBE,eAAeC,UAFjC,YAE8CH,EAAmBE,eAAeE,YACtFX,gBAAiBlE,EAASmE,qBAC1BC,eAAgBpE,EAASqE,oBACzBj2D,MAAO4xD,EAASsE,cAChBX,eAAgB3D,EAASuE,IAAIC,WAAWpsG,MAAM,KAgBlD,OAAO,EAAP,CACEzrB,KAAMwzH,EAAqBt6H,GAAU8G,MADvC,cAEGwzH,EAAqBt6H,GAAUjgB,MAAQ69I,GAF1C,4CAG+Bz3F,GAH/B,uBAIUkkB,IAAa4oB,IAAWE,UAAxB,UAAmCrwD,OAfvCugD,GAAe7rD,GAAWA,EAAQ0wD,MAAQ1wD,EAAQ0wD,KAAK3rB,cACrD/kC,EAAQ0wD,KAAK3rB,eAAiB4vD,EAAW,GAAGjpC,iBACvC1rD,EAAQ0wD,KAAK3rB,cAAczhC,UACzBtD,EAAQ0wD,KAAK3rB,cAAgB4vD,EAAW,GAAGjpC,iBAC7CipC,EAAW,GAAGjpC,iBAAiBpoD,eADjC,EAIA,UAQD,QAAiE,GAJ3E,uBAKUuvC,IAAa4oB,IAAWE,UAAYjqF,GAASA,EAAM+7C,aAAe/7C,EAAM+7C,aAAe,IALjG,+BAMEy4F,GANF,GAeIuB,GAAoB,SAACC,EAAaC,GAGtC,MAAO,CACLnH,QAH2EkH,EAArE95G,eAINg6G,QAJ2EF,EAArDvD,gBAIK,GAC3BtsG,KAL2E6vG,EAArC7vG,KAMtC5lB,MAN2Ey1H,EAA/Bz1H,MAO5C+mB,QAP2E0uG,EAAxB1uG,QAQnD0nG,WAR2EgH,EAAfhH,WAS5Dl5H,MARgBmgI,EAAVngI,QAiBJqgI,GAAkB,SAAC1I,EAAUuE,GACjC,IACE9C,EAKEzB,EALFyB,gBACAkH,EAIE3I,EAJF2I,qBACAC,EAGE5I,EAHF4I,gBACAC,EAEE7I,EAFF6I,wBACAC,EACE9I,EADF8I,qBAGA7wG,EAWEssG,EAXFtsG,cACAiE,EAUEqoG,EAVFroG,qBACAC,EASEooG,EATFpoG,sBACA7E,EAQEitG,EARFjtG,YACAD,EAOEktG,EAPFltG,SACA4X,EAMEs1F,EANFt1F,iBACAgjB,EAKEsyE,EALFtyE,UACA82E,EAIExE,EAJFwE,SACAC,EAGEzE,EAHFyE,eACAhsE,EAEEunE,EAFFvnE,aACAnpC,EACE0wG,EADF1wG,eAcIo1G,EAAc,WAClB,OAAIF,IAAa/F,EAA2B/wE,EAAUnB,iBAE/C6a,YAAiB,OAAC1zC,QAAD,IAACA,OAAD,EAACA,EAAetD,WAEpCu0G,EAAe,CAACP,GAQtB,OANII,IAAa/F,GAAsB/wE,EAAUhB,aAC/Ci4E,EAAajmH,KAAKhB,YAAwB8pG,KAAoB95D,EAAUhB,aAAc,SAC7E+L,GACTksE,EAAajmH,KAAKhB,YAAwB8pG,KAAoB/uD,EAAc,SAGvE,CACLimB,SAAUimD,EACVzH,gBAAiBA,EAAgBl5I,KAAI,SAAA4wF,GAAO,MAAK,CAC/CuoD,UAAW,EACXxrI,KAAMijF,MAGRyoD,WAnWgB,OAoWhBh5G,UAAW,CACTS,SAAUwK,EACVnG,QACEq7G,IAAa/F,EACTj4H,iBAAemB,OAAO+lD,EAAU9lB,YAAarxC,IAAaC,SAC1DgQ,iBAAemB,OAAOgwB,EAAsBphC,IAAaC,SAC/Ds9B,UACE0wG,IAAa/F,EACTj4H,iBAAeiO,IAAIi5C,EAAU9lB,YAAa,EAAG,QAC7CphC,iBAAemB,OAAOiwB,EAAuBrhC,IAAaC,SAChEkkD,SAAU8pF,IAAa/F,EAAqB/wE,EAAUlB,iBAAmB94B,EAAcP,UACvFoqG,iBAAkBiH,IAAa/F,EAAqB/wE,EAAUzmC,KAAK3d,YAAcoqB,EAAcluB,MAC/Fgf,OAAQggH,IAAa/F,EAAqB/wE,EAAUvB,eAAiBp5B,EACrE9oB,SAAUu6H,IAAa/F,EAAqB,GAAK3rG,EACjDjO,UAAW2/G,IAAa/F,EAAqBr3D,YAAkB1Z,EAAU3lB,WA7CvEy8F,IAAa/F,EAA2B,GACxCpwF,IAAyB24B,IAEZ,OAAbtzC,QAAa,IAAbA,OAAA,EAAAA,EAAeioC,aAAc8jE,EACxBA,EAGFgF,EAAiBr9D,YAAkBq9D,GAAkBr9D,YAAiB,OAAC1zC,QAAD,IAACA,OAAD,EAACA,EAAetD,UAuC3FA,SAAUs0G,IACV90G,KAAMN,EACN6uC,gBAAe,OAAEzqC,QAAF,IAAEA,OAAF,EAAEA,EAAeyqC,gBAChC7kB,aAAc,CACZ/oB,aAAY,OAAEmD,QAAF,IAAEA,OAAF,EAAEA,EAAenD,aAC7BC,cAAa,OAAEkD,QAAF,IAAEA,OAAF,EAAEA,EAAelD,gBAGlCjjC,OAAQ82I,EAAgBrgJ,KAAI,SAAA4gJ,GAAQ,MAAK,CACvCjH,WAAYiH,EACZhH,kBA5XW,SA6XTgH,EACIlnH,YAAwB8pG,KAA2B8c,EAAyB,eAC5EC,MAER5wI,SACE6wI,IAAa/F,EACT/zF,EAAiB1mD,KAAI,SAAA4uD,GACnB,IAAQnrB,EAAkFmrB,EAAlFnrB,YAAaorB,EAAqED,EAArEC,aAAczpB,EAAuDwpB,EAAvDxpB,UAAWF,EAA4C0pB,EAA5C1pB,QAAS+K,EAAmC2e,EAAnC3e,YAAa4wG,EAAsBjyF,EAAtBiyF,kBACpE,MAAO,CACLp9G,cACAorB,eACAvpB,SAAU,EACV2K,YAAaA,GAAeA,EAAY1V,OAAS,EAAI0V,EAAY,GAAK,GACtE4wG,oBACAz7G,UAAW5iB,iBAAemB,OAAOyhB,EAAW7yB,IAAaC,SACzD0yB,QAAS1iB,iBAAemB,OAAOuhB,EAAS3yB,IAAaC,aAGzDk0C,EAAiB1mD,KAAI,SAAA4uD,GACnB,IACEnrB,EAQEmrB,EARFnrB,YACAorB,EAOED,EAPFC,aACAvpB,EAMEspB,EANFtpB,SACAF,EAKEwpB,EALFxpB,UACAF,EAIE0pB,EAJF1pB,QACA+K,EAGE2e,EAHF3e,YACA4wG,EAEEjyF,EAFFiyF,kBAIF,MAAO,CACL1mE,gBAHEvrB,EADFurB,gBAKA12C,cACAorB,eACAvpB,WACA2K,YAAaA,GAAeA,EAAY1V,OAAS,EAAI0V,EAAY,GAAK,GACtE4wG,oBACAz7G,UAAW5iB,iBAAemB,OAAOyhB,EAAW7yB,IAAaC,SACzD0yB,QAAS1iB,iBAAemB,OAAOuhB,EAAS3yB,IAAaC,aAG/DyxD,MACEu8E,IAAa/F,EAET,CACE,CACEqG,SAAUp3E,EAAUvB,eACpBwB,KAAMnnD,iBAAemB,OAAO+lD,EAAU9lB,YAAarxC,IAAaC,SAChEuuI,SAAUr3E,EAAUlB,iBACpBw4E,SAAUN,MAMdh6F,EACGrnB,QAAO,SAAAuvB,GAAe,OAAIA,EAAgBnrB,YAAY7a,SAASlb,IAAuBC,SACtF3N,KAAI,SAAA4uD,GACH,IAAQtpB,EAAiCspB,EAAjCtpB,SAAU5D,EAAuBktB,EAAvBltB,MAAO+B,EAAgBmrB,EAAhBnrB,YACzB,MAAO,CACLq9G,SAAUx7G,EACVqkC,KAAMnnD,iBAAemB,OAAOiwB,EAAuBrhC,IAAaC,SAChEmiI,MAAOjzG,EACPq/G,SAAUt9G,EACVu9G,SAAUN,UAUpBO,GAAqB,SAAAhF,GAAgB,IAAD,EACxC,MAAO,CAELjC,OAAQ,EACRniC,UAAWokC,EAAYpkC,UACvBC,SAAUztD,IA3cM,YA2c2B4xF,EAAYnkC,SACvDopC,YAAazQ,YAAUwL,EAAY17I,OACnC+3G,gBAAiB2jC,EAAYkF,cAC7BlH,aAAcgC,EAAYhC,aAC1BmH,eAAc,iBAAEnF,QAAF,IAAEA,OAAF,EAAEA,EAAamF,sBAAf,WAQZC,GAAuB,SAAArG,GAC3B,MAAO,CACL6D,MAAO7D,EAAO6D,MACdhnC,UAAWmjC,EAAOnwD,QAAQgtB,UAC1BC,SAAUkjC,EAAOnwD,QAAQitB,SACzBh4F,MAAOk7H,EAAOnwD,QAAQ/qE,MACtBg/H,SAAU9D,EAAO8D,WAQfwC,GAAuB,SAAAtG,GAC3B,MAAO,CACL90G,eAAgB80G,EAAOnwD,QAAQ3kD,eAAeq2G,OAAS,GACvDvD,WAAYgC,EAAOnwD,QAAQ3kD,eAAe8yG,YAAc,GACxD7oG,KAAM6qG,EAAOnwD,QAAQ3kD,eAAeiK,MAAQ,GAC5C5lB,MAAOywH,EAAOnwD,QAAQ3kD,eAAe3b,OAAS,GAC9C+mB,QAAS0pG,EAAOnwD,QAAQ3kD,eAAeq7G,aAAe,KASpDC,GAA0B,SAAAC,GAAS,IAAD,UACtC,MAAO,CACLv7G,gBAAoB,OAAJu7G,QAAI,IAAJA,GAAA,UAAAA,EAAMj4I,YAAN,eAAY08B,eAAew7G,WAAY,GACvD1I,YAAgB,OAAJyI,QAAI,IAAJA,GAAA,UAAAA,EAAMj4I,YAAN,eAAY08B,eAAe8yG,aAAc,GACrD7oG,MAAU,OAAJsxG,QAAI,IAAJA,GAAA,UAAAA,EAAMj4I,YAAN,eAAY08B,eAAey7G,WAAY,GAC7Cp3H,OAAW,OAAJk3H,QAAI,IAAJA,GAAA,UAAAA,EAAMj4I,YAAN,eAAY08B,eAAe07G,qBAAsB,GACxDtwG,SAAa,OAAJmwG,QAAI,IAAJA,GAAA,UAAAA,EAAMj4I,YAAN,eAAY08B,eAAeq7G,cAAe,KASjDM,GAAyB,SAAAC,GAC7B,MAAO,CACL57G,gBAAsC,OAAtB47G,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBC,aAAa,KAAM,GAC3D/I,YAAkC,OAAtB8I,QAAsB,IAAtBA,OAAA,EAAAA,EAAwB9I,aAAc,GAClD7oG,MAA4B,OAAtB2xG,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBH,WAAY,GAC1Cp3H,OAA6B,OAAtBu3H,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBF,qBAAsB,GACrDtwG,SAA+B,OAAtBwwG,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBP,cAAe,KAQ9CS,GAAkC,SAAC1pH,EAAS2pH,GAChD,IAAQ38F,EAAiBF,IAAMC,WAAvBC,aACJ48F,EAA4B,eA3gBT,SAAAD,GAAqB,MAAK,CACjDhG,YAAa,CACX17I,MAAO,GACPs3G,UAAW,GACXC,SAAU,GACVh4F,MAAO,GACPqhI,eAAe,GAEjBjF,YAAa,CACXh2G,eAAgB,GAChB8yG,WAAY,GACZ7oG,KAAM,GACN5lB,MAAO,KACP+mB,QAASh2B,KAAoBC,cAE/B4mI,eAAgB,CACdrhI,SAAQ,OAAEmhI,QAAF,IAAEA,IAAyB,cACnC5D,aAAc,GACdF,QAAS,GACTD,OAAQ,GACRI,MAAO,GACPF,aAAc,GACdpD,OAAQ,CACN6D,MAAO,GACPhnC,UAAW,GACXC,SAAU,GACVh4F,MAAO,GACPg/H,SAAU,IAEZ5D,UAAW,CACTkH,iBAAkB,GAClBx6H,KAAM,GACNpe,KAAM,GACN8b,YAAa,IAEf21H,SAAU,CACRgD,YAAa,GACbh9H,cAAe,GACfohI,sBAAuB,KAG3BnJ,gBAAiB,GACjBkH,qBAAsB,GACtBC,gBAAiB,GACjBE,qBAAsB,GACtBD,wBAAyB,GACzBrG,cAAc,GA6d0BqI,CAAiBL,IAkBzD,OAjBI3pH,IACF4pH,EAA6BjG,YAAc,CACzC17I,MAAOkwI,YAAUn4G,EAAQ4oH,cAAgB,GACzCrpC,UAAWv/E,EAAQu/E,WAAa,GAChCC,SAAUx/E,EAAQw/E,UAAY,GAC9Bh4F,MAAOwY,EAAQxY,OAAS,GACxBqhI,cAAe77F,EAAaha,iBAAmBh+B,MAEjD40I,EAA6BhG,YAAc,CACzCh2G,eAAgB5N,EAAQiqH,aAAe,GACvC9F,eAAgBnkH,EAAQkqH,aAAe,GACvCxJ,WAAY1gH,EAAQy/E,KAAO,GAC3B5nE,KAAM7X,EAAQ6X,MAAQ,GACtB5lB,MAAO+N,EAAQ+X,eAAiB,GAChCiB,QAAShZ,EAAQgZ,SAAWh2B,KAAoBC,eAG7C2mI,GAGHO,GAAgB,SAAAl4H,GAAU,IAAD,IAE3BosB,EASEpsB,EATFosB,UACAC,EAQErsB,EARFqsB,YACAC,EAOEtsB,EAPFssB,UACA6rG,EAMEn4H,EANFm4H,aACA3rG,EAKExsB,EALFwsB,gBACAC,EAIEzsB,EAJFysB,UACA2rG,EAGEp4H,EAHFo4H,kBACA79E,EAEEv6C,EAFFu6C,cACApe,EACEn8B,EADFm8B,iBAEIk8F,EAAWD,EAAkBn8F,aAAaq8F,MAAMx+H,MAAK,SAAAy+H,GAAQ,OAAIA,EAASn2G,OAASqK,KACnF+rG,EAAyB,CAC7B,EAAG,gBACH,EAAG,iBACH,EAAG,eACH,EAAG,iBAgDL,MAAO,CACL5I,MAAM,aACJr1E,cAAeA,EACfnuB,UAAWA,EACXm6D,UAAW,CACTtwE,OAAQoW,EACRnW,KAAMoW,EACNwjG,QAASqI,EACTpI,WAAYvjG,GAEdC,UAAW,CACTrK,KAAMi2G,EAASj2G,KACf4tG,UAAWqI,EAASrI,UACpBC,QAASoI,EAASpI,SAEpBJ,UAAWuI,EAAkBvI,UAC7B4I,cAAa,UAAEL,EAAkBn8F,oBAApB,aAAE,EAAgCw8F,cAC/CC,iBAAgB,UAAEN,EAAkBn8F,oBAApB,aAAE,EAAgCy8F,kBA9DtD,SAAqCv8F,GACnC,IAAI/2C,EAAW,GAET6qF,EAAkB,GAuCxB,OAtCA9zC,EAAiBpnD,SAAQ,SAAAkkC,GACvB,IAAM0/G,EAAqB1/G,EAAI0/G,mBAC3B1oD,EAAgB0oD,GAClB1oD,EAAgB0oD,GAAoBxoH,KAAK8I,GAEzCg3D,EAAgB0oD,GAAsB,CAAC1/G,MAI3C/jC,OAAOiB,KAAK85F,GAAiBl7F,SAAQ,SAAA6jJ,GAAS,IAAD,EAErCnoD,EAAe,GAEfooD,EAAa,UADK3jJ,OAAOmxD,QAAQlK,GAAkB,qBAAGw8F,sBACtBC,UAAnB,aAAG,EAAuBthE,MAAK,SAACn4E,EAAGw+H,GAEpD,OAAOx+H,EAAEk9C,QAAUshF,EAAEthF,WAGT,KAATu8F,EACU,OAAbC,QAAa,IAAbA,KAAe9jJ,SAAQ,SAAAkkC,GACrBw3D,EAAatgE,KAAK,CAChB/sB,KAAM61B,EAAIC,YACV6B,SAAU9B,EAAI8B,cAIlB89G,EAAc9jJ,SAAQ,SAAAkkC,GAGpB,IAFA,IAAMg6G,EAAMh6G,EAAI8B,SACV33B,EAAO61B,EAAIC,YACRjkC,EAAI,EAAGA,EAAIg+I,EAAKh+I,IACvBw7F,EAAatgE,KAAK/sB,MAKxBgC,EAASozI,EAAuBI,IAASnoD,KAGpCrrF,EAqBF0zI,CAA4B38F,MAU/B48F,GAAU,uCAAG,WAAOn4E,EAAUo4E,EAAYC,GAA7B,yDAAA95I,EAAA,yDAA0C+5I,EAA1C,+BAAqD,aAEpEtB,EAMEoB,EANFpB,eACAjG,EAKEqH,EALFrH,YACAD,EAIEsH,EAJFtH,YACA/C,EAGEqK,EAHFrK,gBACAkH,EAEEmD,EAFFnD,qBACAC,EACEkD,EADFlD,gBAEM/nH,EAAwBkrH,EAAxBlrH,QAAS20F,EAAeu2B,EAAfv2B,WAEXy2B,EAAiB,CACrB9qC,UAAWtgF,EAAQ0wD,KAAO1wD,EAAQ0wD,KAAKnhE,GAAK,KAC5Coe,QAAS85G,GAAkB7D,EAAaD,GACxC1kH,QAASymH,GAAkBmE,EAAgBqB,EAAar4E,GACxD4uE,SAAUkH,GAAmBhF,IAG3BzkF,EAAU,GAEV2T,IAAa4oB,IAAWC,SAAW7oB,IAAa4oB,IAAWG,QApB9C,wBAqBTyvD,EAAsB,CAC1B94D,QAASs1D,GACP,CACEjH,kBACAkH,uBACAC,mBAEFmD,GAGFI,cAAe32B,GAEjBz1D,EAAO,2BAAQksF,GAAmBC,GAjCnB,SAoCPhM,GAAuBwK,EAAe3D,eApC/B,UAqCA9G,EAAwBC,GAAqBkM,SAASrsF,GArCtD,2EAuCbisF,EAAQ,4CAAC,KAAO1yD,OAAO,UAAf,QAAqB,wBAC7B9mD,QAAQ4b,MAAR,MAxCa,WA6CbslB,IAAa4oB,IAAWE,SA7CX,wBA8CT6vD,EAAkBrB,GAAce,GACtChsF,EAAO,2BAAQksF,GAAmBI,GA/CnB,oBAiDA5J,EAAuB2J,SAASrsF,GAjDhC,4EAmDbisF,EAAQ,4CAAC,KAAO1yD,OAAO,UAAf,QAAqB,wBAC7B9mD,QAAQ4b,MAAR,MApDa,kEAAH,0DAkEVk+F,GAAoB,SAAA9H,GACxB,QAAKA,GAEEx4B,YAAsBw4B,IASzB+H,GAAoB,SAACC,EAAY34G,GAAoB,IAAD,EAChDwxD,EAA+DD,IAA/DC,YAAaE,EAAkDH,IAAlDG,OAAQE,EAA0CL,IAA1CK,OAAQy9C,EAAkC99C,IAAlC89C,OAAQv9C,EAA0BP,IAA1BO,UAAWC,EAAeR,IAAfQ,WAElD6mD,GAAO,mBACVpnD,EAAc,CACbqnD,WAAW,EACXC,0BAA0B,EAC1BC,MAAO,IAJE,cAMVrnD,EAAS,CACRmnD,UAAWvmD,YAA8BtyD,GACzC84G,0BAA0B,EAC1BC,MAAO,IATE,cAWVnnD,EAAS,CACRinD,UAAWrmD,YAAgB3iD,gIAAyC7P,GACpE84G,0BAA0B,EAC1BC,MAAO,IAdE,cAgBV1J,EAAS,CACRwJ,WAAWhpG,EACXipG,0BAA0B,EAC1BC,MAAO,IAnBE,cAqBVjnD,EAAY,CACX+mD,WAAW,EACXC,0BAA0B,EAC1BC,MAAO,IAxBE,cA0BVhnD,EAAa,CACZ8mD,WAAW,EACXC,0BAA0B,EAC1BC,MAAO,IA7BE,GAiCPC,EAA0B7kJ,OAAO0kC,OAAO04D,KAAqBx9D,QAAO,SAAAmqD,GAAW,IAAD,MAClF,OAAOy6D,EAAU,UACbC,EAAQ16D,UADK,aACb,EAAiB26D,WACjB,UAAAD,EAAQ16D,UAAR,eAAiB26D,aAAjB,UAA8BD,EAAQ16D,UAAtC,aAA8B,EAAiB46D,6BAGjDG,EAAiB,IAErB,OAAOD,EACJtkJ,KAAI,SAACwpF,EAAQg7D,GACZ,IAAQjqH,EAAW+pH,EAAX/pH,OACR,GAAIgqH,EAAiBhqH,IAAW,GAAa,IAARiqH,EACnC,MAAO,CAAE73G,KAAM68C,EAAQliF,MAAM,GAAD,OAAKi9I,EAAiBhqH,EAAtB,MAG9B,IAAMkqH,EAAyD,GAA1ClrF,KAAKmrF,KAAKH,EAAiBhqH,EAAS,IAEzD,OADAgqH,GAAkBE,EACX,CAAE93G,KAAM68C,EAAQliF,MAAM,GAAD,OAAKm9I,EAAL,SAE7B5iE,MAAK,SAACn4E,EAAGw+H,GAAJ,OAAUx+H,EAAE26I,MAAQnc,EAAEmc,UAG1BM,GAAuB,uCAAG,WAAO7O,EAAaC,GAApB,mBAAArsI,EAAA,sEAEtBk7I,EAAe,IAAI/O,EAFG,SAGL+O,EAAaC,sBAAsB/O,EAAaC,GAH3C,uBAGpBhzG,EAHoB,EAGpBA,KAHoB,kBAIrBA,GAJqB,gCAM5BkH,QAAQC,IAAR,MAN4B,yDAAH,wDAUvB46G,GAA8B,uCAAG,WAAOhP,EAAazsD,EAAOl0C,EAAa4gG,GAAxC,uBAAArsI,EAAA,sEAE7BusI,EAxxBa,aAwxBG9gG,EAAiCk0C,EAAQ,GACzD6sD,EAxxBc,cAwxBG/gG,EAAkCk0C,EAAQ,GAC3Du7D,EAAe,IAAI/O,EAJU,SAKZ+O,EAAaE,+BAClChP,EACAG,EACAC,EACAH,GATiC,uBAK3BhzG,EAL2B,EAK3BA,KAL2B,kBAW5BA,GAX4B,kCAanCkH,QAAQC,IAAR,MAbmC,0DAAH,4DAiBvB66G,GAA0B,uCAAG,WAAOz5G,EAAgB6J,EAAa6oE,GAApC,6BAAAt0G,EAAA,6DAAmDu0G,EAAnD,+BAA4D,KAA5D,SAEhC2mC,EAAe,IAAIpnC,IAFa,SAGzBonC,EAAaI,4BAA4B15G,EAAgB6J,EAAa6oE,EAAeC,GAH5D,wEAKtCh0E,QAAQ4b,MAAR,MALsC,yDAAH,0DAgBjCo/F,GAAsB,uCAAG,WAAOC,EAAgBC,EAAoB75G,GAA3C,mCAAA5hC,EAAA,6DACbmlH,EAAqEq2B,EAA7E3zH,OAAkB4sH,EAA2D+G,EAA3D/G,QAASD,EAAkDgH,EAAlDhH,OAAmB/G,EAA+B+N,EAA1ChN,UAA6BkN,EAAaF,EAArBlN,OACxDgB,EAAwBmM,EAAxBnM,WAAYF,EAAYqM,EAAZrM,QAFS,SAGUiM,GAA2Bz5G,EAAgB,EAAG,GAHxD,cAGvB+5G,EAHuB,OAIvBC,EAAkBxM,EAAQ5rI,QAAQ,eAAgB,MAClD61B,EAAO,CACXwiH,iBAAkBF,EAAyBtiH,KAAKsmD,MAChDm8D,gBAAiB32B,EACjBuwB,qBAAsBjB,EACtBmB,oBAAqBpB,EACrBuH,cAAetO,EACf+H,oBAAqBkG,EACrBM,gBAAiB1M,EACjB2M,mBAAoBL,GAbO,UAgBrB,IAAI/N,GAAsBqO,sBAAsBP,EAAyBtiH,KAAK/1B,IAAK+1B,GAhB9D,cAevB8iH,EAfuB,OAiB3B9iH,KAjB2B,kBAmBtB,CACLw7G,cAAesH,EAAmBtG,cAClCX,eAAgBiH,EAAmBrG,IAAIC,WAAWqG,WAAW,IAAK,IAAIl5G,OACtE6yG,WAAYoG,EAAmBrG,IAAIC,WACnCvH,UAAW,GACX3mH,OAAQs0H,EAAmBrG,IAAIC,aAxBJ,4CAAH,0DA4BfsG,GAAgC,SAACC,EAA0BC,GAA3B,OAC3CA,EAAiBtlJ,QAAO,SAAC+5I,EAAgBwL,GACvC,OAAKF,EAAyBE,GAAerkI,MAASmkI,EAAyBE,GAAepkI,kBAGxF,GAAN,mBACK44H,GADL,CAEE,CACEz5H,cAAc,aACZc,KAAMmkI,GACHF,EAAyBE,OAPzBxL,IAWR,KAEQyL,GAA2B,SACtCC,EACAC,EACA/B,GAEA,OAAK8B,EACD7+G,OAAOy2D,iBAAmBsmD,EAAwB17H,SAASi0E,IAAoBO,WAC1EP,IAAoBO,UACzBipD,GAAyB/B,EAAwB17H,SAASi0E,IAAoBQ,YACzER,IAAoBQ,WACtBR,IAAoBC,YALaD,IAAoBC,aAQjDwpD,GAAsB,SAACniH,EAAQoiH,GAC1CpiH,EAAO+3G,YAAY/rG,KAAOo2G,EAAY5E,SACtCx9G,EAAO+3G,YAAYlD,WAAauN,EAAYvN,WAC5C70G,EAAO+3G,YAAY5qG,QAAUi1G,EAAYhF,YACzCp9G,EAAO+3G,YAAY3xH,MAAQg8H,EAAY3E,qB,gECr6BnCxiD,EAAQ5gF,YAAOyD,KAAKorH,OAAM,SAAAvuH,GAAK,MAAK,CACxCmM,GAAI,WADQzM,CAAH,wVAGI,SAAAM,GAAK,OAAKA,EAAM+mC,MAAQ,OAAd,UAA0Bv6C,IAAMxJ,UAAU,GAA1C,SAGd,SAAAgd,GAAK,OAAKA,EAAM+mC,MAAQv6C,IAAM/I,OAAOM,iBAAiB,KAAOic,EAAMhZ,OAASwF,IAAM/I,OAAOmE,cAAc,MAEjG4E,IAAMpK,cACNoK,IAAMvJ,YAAYG,QAGf,SAAA4c,GAAK,OAAKA,EAAM0nI,UAAY,QAAU,UAItD,SAAA1nI,GAAK,OAtDc8I,EAsDI9I,EAAM8I,KAtDJi+B,EAsDU/mC,EAAM+mC,MArD9B,aAATj+B,EACK,CACL/gB,IAAK,QAEW,WAAT+gB,EACF,CACL/gB,IAAK,qBAGHg/C,EACK,CACLh/C,IAAK,EACLpB,SAAU,SACVtB,UAAW,OACXyC,KAAM,EACN+sI,OAAQ,SAIL,CACL9sI,IAAK,OACLC,UAAW,mBACXrB,SAAU,UACVtB,UAAW,QAxBK,IAACyjB,EAAMi+B,KAuDzB,SAAA/mC,GAAK,OAxEU,SAACusH,EAAQzjH,EAAMi+B,GAChC,GAAIwlF,EACF,MAAa,aAATzjH,EACK,CACL9gB,UAAW,+BACXhB,MAAM,GAAD,OAAKwF,IAAM/I,OAAOI,kBAAkB,OAGpC,CACLuB,SAAU,MACV4C,UAAU,cAAD,OAAgB++C,EAAQ,OAAS,QAAjC,KACT//C,MAAM,GAAD,OAAKwF,IAAM/I,OAAOI,kBAAkB,OA6DpC8jJ,CAAW3nI,EAAMusH,OAAQvsH,EAAM8I,KAAM9I,EAAM+mC,UA1BhC,SAAA/mC,GACtB,GAAIA,EAAM+mC,MACR,MAAO,CACLp/C,SAAU,WACVU,WAAY,WA0BlBi4F,EAAM7/E,YAAc,QAEpB6/E,EAAMrgF,aAAe,CACnBzT,MAAOA,IACP+/H,QAAQ,GAGKjsC,O,iUCrFFsnD,EAAkB,SAAAn8H,GAAK,OAAIA,EAAM2yC,cAEjC3xB,EAAc,SAAChhB,EAAO23E,GAAR,OAA8B,OAAL33E,QAAK,IAALA,OAAA,EAAAA,EAAO2yC,aAAaglC,KAAiB,IAE5EykD,EAAmB,SAACp8H,EAAO23E,GAAR,OAAyB32D,EAAYhhB,EAAO23E,GAAc3hG,OAE7EqmJ,EAAiB,SAACr8H,EAAO23E,GAAR,OAAyB32D,EAAYhhB,EAAO23E,GAAcl1F,KAE3E0rD,EAAyB,SAACnuC,EAAOy3E,GAAR,OAA4Bz2D,EAAYhhB,EAAOy3E,GAAiBl9F,SAQzF+hJ,EAAmB,SAACC,EAAwB5kD,GACvD,OAAO4kD,EAAuBl+H,SAASs5E,IAO5B6kD,EAAwB,SAAAx8H,GACnC,IAAIy8H,EAAUvnJ,OAAOwnJ,QAAQ18H,EAAM2yC,cAAcl9D,KAAI,YAAmB,IAAD,wBACrE,OADqE,KACxDowC,UAEf42G,EAAO,YAAO,IAAIE,IAAIF,IAEtB,IAAMG,EAAY1nJ,OAAOwnJ,QAAQ18H,EAAM2yC,cAAcl9D,KAAI,YAAmB,IAAD,mBAAXwnB,GAAW,WACzE,MAAO,CACL1iB,QAAS0iB,EAAM1iB,QACfsrC,OAAQ5oB,EAAM4oB,OACdk3B,UAAW9/C,EAAM8/C,cAIjB8/E,EAAqB,GAMzB,OAJAJ,EAAQ1nJ,SAAQ,SAAA8wC,GACdg3G,EAAmBh3G,GAAU+2G,EAAU9nH,QAAO,SAAAmI,GAAQ,OAAIA,EAAS4I,SAAWA,QAGzEg3G,GAQIC,EAAkB,SAAC98H,EAAOu8H,GACrC,IAAMQ,EAAgBP,EAAsBx8H,GAK5C,OAJiB9qB,OAAOiB,KAAK4mJ,GAAejoH,QAAO,SAAA9/B,GAAG,OACpD+nJ,EAAc/nJ,GAAKy+E,MAAK,SAAAx2C,GAAQ,OAAIq/G,EAAiBC,EAAwBt/G,EAAS8/B,mB,+MC1BpFvoD,EAAe,CACnBjZ,MAAOwF,IAAM/I,OAAOI,kBAAkB,KACtCuC,WAAYoG,IAAMvJ,YAAYI,KAC9BolJ,sBAAsB,EACtBt8H,GAAI,IACJu8H,aAAc,QACdxoI,KAAM,OACNm5B,WAAW,EACXsvG,UAAW,KACXrjJ,WAAY,MAIR+8H,EAAW,SAAC,GAWX,IAVLomB,EAUI,EAVJA,qBACA9hI,EASI,EATJA,QACAQ,EAQI,EARJA,SACM/F,EAOF,EAPJkB,KACApC,EAMI,EANJA,KACA9a,EAKI,EALJA,SACAsjJ,EAII,EAJJA,aACAC,EAGI,EAHJA,UACArjJ,EAEI,EAFJA,WACG8a,EACC,iBASJ,OACE,eAAC,IAAD,2BAAkBA,GAAlB,IAA6BuG,QATX,WACd8hI,GACF3nF,cAGFn6C,GAAWA,KAIX,UACGvF,GAAyB,SAAjBsnI,GAA2B,cAACtnI,EAAD,aAAMlB,KAAMA,EAAM,cAAY,qBAAwByoI,IAC1F,cAAC,IAAD,CAAMx8H,GAAG,OAAO/mB,SAAUA,EAAUE,WAAYA,EAAhD,SACG6hB,IAEF/F,GAAyB,UAAjBsnI,GAA4B,cAACtnI,EAAD,aAAMlB,KAAMA,EAAM,cAAY,sBAAyByoI,SAKlGtmB,EAASpiH,aAAeA,EAGToiH,QC5EAA,O,qJCOM3rB,E,kDAWnB,aAAuC,IAA3B36D,EAA0B,uDAAhB,GAAIwuC,EAAY,uDAAJ,GAAI,oBACpC,IAAIuL,EAAyB,KAAZ/5C,EAAiBA,EAAjB,KAEXg6C,EAASj6C,YAAUnB,IAASC,uCAAwCk7C,GAHtC,mBAK9BC,EAAQxL,G,8FAQhB,WAA0Bn0C,GAA1B,iBAAAxrC,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoCkoC,GADpC,+EAG2Cq0C,GAH3C,cAGMqH,EAHN,yBAKSA,GALT,gD,iIAeA,WAA4B17C,GAA5B,iBAAAxrC,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoCkoC,EADpC,4FAG6Cq0C,GAH7C,cAGQqH,EAHR,yBAKSA,GALT,gD,0IAcA,WAAqCrwF,EAAOi4I,GAA5C,mBAAA9uI,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,UAGM06H,EAAc,CAChBggB,YAAannJ,EACbonJ,WAAYnP,GALhB,+EAQ2CjvD,EAAYm+C,GARvD,cAQM92C,EARN,yBAUSA,GAVT,gD,4IAmBA,WAAqC9wE,EAAO04H,GAA5C,mBAAA9uI,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,UAGM06H,EAAc,CAChBkgB,MAAO9nI,EACP6nI,WAAYnP,GALhB,+EAQ2CjvD,EAAYm+C,GARvD,cAQM92C,EARN,yBAUSA,GAVT,gD,4IAmBA,WAAqC17C,EAAe4iE,GAApD,mBAAApuG,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,cAGM06H,EAAc,CAChBzwB,cAAe/hE,EACfgiE,SAAUY,GALd,2EAQuCvuB,EAAYm+C,GARnD,cAQM92C,EARN,yBAUSA,GAVT,gD,kJAmBA,WAA2C17C,EAAeumC,GAA1D,mBAAA/xE,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,UAGQ06H,EAAc,CAClBzwB,cAAe/hE,EACf2yG,eAAgBpsE,GALpB,2EAQyC8N,EAAYm+C,GARrD,cAQQ92C,EARR,yBAUSA,GAVT,gD,mIAkBA,WAA4B17C,GAA5B,mBAAAxrC,EAAA,6DACQ+tG,EADR,UACuBviE,EADvB,WAGQq0C,EAHR,UAGwB1pF,KAAKmN,IAH7B,YAGoCyqG,GAHpC,+EAK2CluB,EAAY,IALvD,cAKMqH,EALN,yBAOSA,GAPT,gD,6HAgBA,WAAwB/3D,GAAxB,iBAAAnvB,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,sFAGuCu8E,EAAY1wD,GAHnD,cAGM+3D,EAHN,yBAKSA,GALT,gD,kIAaA,WAA6B/3D,GAA7B,mBAAAnvB,EAAA,yDACQ6/E,EAAa1pF,KAAKmN,IAElB86I,EAHR,oFAKMl3D,EAAU,MAGVk3D,EARN,uGAS0Cv+D,EAAY1wD,GATtD,OASI+3D,EATJ,kHAWsCrH,EAAY1wD,GAXlD,QAWI+3D,EAXJ,wCAcSA,GAdT,iD,oIAuBA,WAA+B/3D,GAA/B,eAAAnvB,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,iGAG2Bu8E,EAAY1wD,IAHvC,gD,qHAUA,WAAgBkvH,GAAhB,eAAAr+I,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,gGAE2Bu8E,EAAYw+D,IAFvC,gD,uHAKA,WAAkB7yG,EAAe6yG,EAAgBjwC,GAAjD,eAAApuG,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoCkoC,EADpC,sCAC+E4iE,GAD/E,qFAE2BvuB,EAAYw+D,IAFvC,gD,gIAKA,WAAuBn3D,GAAvB,iBAAAlnF,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoC4jF,EAAQ/oE,GAD5C,yCAC+E+oE,EAAQo3D,eADvF,YACyGp3D,EAAQq3D,eADjH,YACmIr3D,EAAQs3D,aAD3I,2EAGsC3+D,EAAYqH,EAAQ82C,aAH1D,cAGMttG,EAHN,yBAKSA,GALT,gD,0HAQA,WAAqB8hD,GAArB,iBAAAxyE,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoCkvE,EADpC,4GAGsCqN,GAHtC,cAGMnvD,EAHN,yBAKSA,GALT,gD,6HAQA,WAAwBw2D,GAAxB,iBAAAlnF,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoC4jF,EAAQ1U,MAD5C,gGAG0CqN,EAAYqH,EAAQ82C,aAH9D,cAGMttG,EAHN,yBAKSA,GALT,gD,iIAQA,WAA4Bw2D,GAA5B,SAAAlnF,EAAA,4DACQ,IAAIsnF,MAAM,qCADlB,2C,oHAIA,WAAeJ,GAAf,iBAAAlnF,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoC4jF,EAAQ1U,MAD5C,qFAGsCqN,EAAYqH,EAAQ82C,aAH1D,cAGMttG,EAHN,yBAKSA,GALT,gD,4HAQA,WAAuBw2D,GAAvB,iBAAAlnF,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,YACoC4jF,EAAQ1U,MAD5C,8FAGsCqN,EAAYqH,EAAQ82C,aAH1D,cAGMttG,EAHN,yBAKSA,GALT,gD,kEA5OiDgvD,I,8pBCuB7C96B,EAAW,SAAA65F,GACf,OAAOA,aAAqBC,KAGxBC,EAAY7lI,iBAAemR,aAM3B20H,EAAuB,SAAvBA,EAAuBH,GAC3B,IAEE,OAAKA,EAGD75F,EAAS65F,GAEJ3lI,iBAAemB,OAAOwkI,EAAWE,GAC/Bt+H,MAAM6kB,QAAQu5G,GAEhBA,EAAUnoJ,KAAI,SAAAm4I,GAAG,OAAImQ,EAAqBnQ,MACxC,GAAGplB,cAAgBo1B,EAAUp1B,YAE/BtzH,OAAOwnJ,QAAQkB,GAAWxnJ,QAAO,SAACC,EAAD,GAAsB,IAAD,mBAAdrB,EAAc,KAAT44I,EAAS,KAE3D,OADAv3I,EAAIrB,GAAO+oJ,EAAqBnQ,GACzBv3I,IACN,IACSunJ,EAfSA,EAgBvB,MAAOI,GAEP,OADAt+G,QAAQ4b,MAAM,uBAAwB0iG,GAC/BJ,IAQLK,EAAuB,SAAvBA,EAAuBL,GAyB3B,IAEE,OAAKA,EAGD75F,EAAS65F,GAEJA,EA9BO,SAAAM,GAEhB,GAAwB,kBAAbA,EAAuB,OAAO,EAEzCA,EAAWA,EAAStkD,UAAU,EAAGkkD,EAAU9tH,QAE3C,IAAMmuH,EAAeL,EAAUx/H,MAAM,KAC/B8/H,EAAcF,EAAS5/H,MAAM,KAGnC,GAAI6/H,EAAanuH,SAAWouH,EAAYpuH,OAAQ,OAAO,EAEvD,IAAK,IAAI/6B,EAAI,EAAGA,EAAIkpJ,EAAanuH,OAAQ/6B,IAEvC,GAAIkpJ,EAAalpJ,GAAG+6B,SAAWouH,EAAYnpJ,GAAG+6B,OAC5C,OAAO,EAKX,OAAO,EAWIquH,CAAUT,GAEZC,IAAOD,GACLp+H,MAAM6kB,QAAQu5G,GAEhBA,EAAUnoJ,KAAI,SAAAm4I,GAAG,OAAIqQ,EAAqBrQ,MACxC,GAAGplB,cAAgBo1B,EAAUp1B,YAE/BtzH,OAAOwnJ,QAAQkB,GAAWxnJ,QAAO,SAACC,EAAD,GAAsB,IAAD,mBAAdrB,EAAc,KAAT44I,EAAS,KAE3D,OADAv3I,EAAIrB,GAAOipJ,EAAqBrQ,GACzBv3I,IACN,IACSunJ,EAlBSA,EAmBvB,MAAOI,GAEP,OADAt+G,QAAQ4b,MAAM,uBAAwB0iG,GAC/BJ,IAwDLU,EAAsB,SAAC,GAAmC,IAAjCC,EAAgC,EAAhCA,gBAAoBhqI,EAAY,iBA6B7D,MA5B2B,CAAC,UAAW,UAAW,YAAa,UAAW,OAAQ,eAoB/Dxf,SAAQ,SAAAqtC,GACrB7tB,EAAM6tB,KACR7tB,EAAM6tB,GAAQ67G,EAAqB1pI,EAAM6tB,QAI7C7tB,EA1E+B,SAACiqI,EAAmBC,GACnD,IAAMC,EAAc,eAAQF,GAsB5B,OArBAC,EAAwB1pJ,SAAQ,SAAAqtC,GAC9B,IAAMu8G,EAAcH,EAAkBp8G,GAClCu8G,IAgBFD,EAAet8G,GAfI,SAACw8G,EAAQC,EAAQC,EAAQC,EAAQC,GAGlD,IAAMC,EAAgBN,EACpBZ,EAAqBa,GACrBb,EAAqBc,GACrBd,EAAqBe,GACrBf,EAAqBgB,GACrBhB,EAAqBiB,IAIvB,OADwBf,EAAqBgB,QAO5CP,EAmDCQ,CAAyB3qI,EAzBF,CAC7B,eACA,gBACA,mBACA,mBACA,UACA,eACA,iBACA,mBACA,sBACA,kBAiBK,cAACgqI,EAAD,eAAqBhqI,KAGjB4qI,EAAqB,SAAC,GAAkB,IAAb5qI,EAAY,oBAClD,OAAO,cAAC+pI,EAAD,aAAqBC,gBAAiBa,mBAAqB7qI,KAGvD8qI,EAA6B,SAAC,GAAkB,IAAb9qI,EAAY,oBAC1D,OAAO,cAAC+pI,EAAD,aAAqBC,gBAAiBe,4BAA8B/qI,KAGhEgrI,EAAqB,SAAC,GAAkB,IAAbhrI,EAAY,oBAClD,OAAO,cAAC+pI,EAAD,aAAqBC,gBAAiBiB,oBAAsBjrI,KAGxDkrI,EAAc,SAAC,GAAkB,IAAblrI,EAAY,oBAC3C,OAAO,cAAC+pI,EAAD,aAAqBC,gBAAiBmB,aAAenrI,KAGjDorI,EAAkC,SAAC,GAAkB,IAAbprI,EAAY,oBAC/D,OAAO,cAAC+pI,EAAD,aAAqBC,gBAAiBqB,iCAAmCrrI,KAMrEsrI,EAA0B,SAACC,EAAKC,GAC3C,OAAO9nI,iBAAe4Q,QAAQi3H,IAAQ7nI,iBAAe4Q,QAAQk3H,KAAS9nI,iBAAeiB,SAAS4mI,EAAKC,IAGxFC,EAAoB,SAAA1nI,GAC/B,OAAO2nI,0BAAgB3nI,K,mOCnOnB4nI,EAAW,SAAA3rI,GACf,IACE4rI,EAWE5rI,EAXF4rI,cACAC,EAUE7rI,EAVF6rI,eACA9jI,EASE/H,EATF+H,SACA7H,EAQEF,EARFE,KACA6I,EAOE/I,EAPF+I,GACA+iI,EAME9rI,EANF8rI,WAEAC,GAIE/rI,EALFgsI,SAKEhsI,EAJF+rI,SACAppJ,EAGEqd,EAHFrd,UACAspJ,EAEEjsI,EAFFisI,OACGC,EAXL,YAYIlsI,EAZJ,GAcA,OACE,eAACmsI,EAAD,CAAiBpkI,SAAUA,EAAUkkI,OAAQA,EAAQL,cAAeA,EAAeC,eAAgBA,EAAnG,UACGC,EACC,eAACM,EAAD,CACER,cAAeA,EACfC,eAAgBA,EAChB9jI,SAAUA,EACVgkI,QAASA,EACTppJ,UAAWA,EALb,UAME,mCAAOomB,GAAIA,EAAID,KAAK,WAAWijI,QAASA,GAAaG,IACrD,cAAC,IAAD,CAAWhsI,KAAM,GAAIlZ,MAAOwF,IAAM/I,OAAOO,UAAU,QAGrD,mCAAO8kB,KAAK,WAAWijI,QAASA,EAAShjI,GAAIA,GAAQmjI,IAEvD,cAAC,IAAD,CAAMr+G,KAAK,aAAa3tB,KAAMA,EAAM,YAAU,YAC9C,cAAC,IAAD,CAAM2tB,KAAK,WAAW3tB,KAAMA,EAAM,YAAU,cAK5CksI,EAAgB1sI,YAAO,MAAPA,CAAH,kgBAER,gBAAGksI,EAAH,EAAGA,cAAH,OAAwBA,GAAgC,QACvD,gBAAGC,EAAH,EAAGA,eAAH,OAAyBA,GAAkC,OAIjDr/I,IAAM/I,OAAOqH,gBAAgB,MAC7B,gBAAGihJ,EAAH,EAAGA,QAASppJ,EAAZ,EAAYA,UAAZ,OAClBopJ,EACIppJ,EACE6J,IAAM/I,OAAOI,kBAAkB,KAC/B2I,IAAM/I,OAAOsH,aACfyB,IAAM/I,OAAOO,UAAU,MAuBzBmoJ,EAAkBzsI,YAAOyD,IAAPzD,CAAH,uaACV,gBAAGksI,EAAH,EAAGA,cAAH,OAAwBA,GAAgC,QACvD,gBAAGC,EAAH,EAAGA,eAAH,OAAyBA,GAAkC,QAGnD,SAAA7rI,GAAK,OAAKA,EAAMisI,OAASjsI,EAAMisI,OAAS,SAC5C,SAAAjsI,GAAK,OAAKA,EAAMisI,OAAS,IAAM,UACnC,qBAAGlkI,SAA2B,KAAO,aACtC,SAAA/H,GAAK,OAAKA,EAAM+H,SAAW/H,EAAMxT,MAAM/I,OAAOqH,gBAAgB,IAAMkV,EAAMxT,MAAM/I,OAAOqH,gBAAgB,OAOnG,SAAAkV,GAAK,OACZA,EAAM+H,SAAW/H,EAAMxT,MAAM/I,OAAOqH,gBAAgB,IAAMkV,EAAMxT,MAAM/I,OAAOqH,gBAAgB,OAQrGqhJ,EAAgBlsI,aAAe,CAAEzT,WAEjCm/I,EAASlrI,YAAc,WAcvBkrI,EAAS1rI,aAAe,CACtBC,KAAM,GACN6H,UAAU,EACVlF,SAAU,aACVrW,MAAOA,KAGMm/I,O,6BC/Hf,kQAKaU,EAAe,SAAAx9I,GAAI,MAAK,CACnCia,KAAMmyC,IAAiB0qB,eACvB92E,KAAMy1E,YAAkBz1E,KAGby9I,EAAkB,iBAAO,CAAExjI,KAAMmyC,IAAiB2qB,oBAClD2mE,EAA0B,SAAA/lI,GAAW,OAAI,SAAA01D,GACpDA,EAAS,CACPpzD,KAAMmyC,IAAiB4qB,2BACvBr/D,YAAaA,MAGJgmI,EAAiB,SAAA9c,GAAS,OAAI,SAAAxzD,GACzCA,EAAS,CACPpzD,KAAMmyC,IAAiBC,sBACvBw0E,UAAWA,MAGF+c,EAAsB,SAAA/c,GAAS,OAAI,SAAAxzD,GAC9CA,EAAS,CACPpzD,KAAMmyC,IAAiB6qB,4BACvB4pD,UAAWA,MAGFgd,EAAoB,SAAAhd,GAAS,OAAI,SAAAxzD,GAC5CA,EAAS,CACPpzD,KAAMmyC,IAAiBG,yBACvBs0E,UAAWA,MAIFid,EAAqB,SAAAjd,GAAS,OAAI,SAAAxzD,GAC7CA,EAAS,CACPpzD,KAAMmyC,IAAiB+qB,qBACvB0pD,UAAWA,O,yCC/Bf,SAASkd,EAAiBntD,EAAajJ,GAErC,OADAiJ,EAAY7jE,KAAK46D,GACViJ,EAmBMgM,IALf,WAA4E,IAArDohD,EAAoD,uDAAtC,EAAGC,EAAmC,uDAAlBF,EACvD,OAAKC,EACE,YAAI5hI,MAAM4hI,GAAajrJ,QAAQC,OAAOirJ,EAAgB,IADpC,K,iFCvBrBC,EAAY,SAAC,GAAD,IAChB7sI,EADgB,EAChBA,KACAlZ,EAFgB,EAEhBA,MACGgZ,EAHa,wBAKhB,+CACMA,GADN,IAEEM,QAAQ,gBACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,qSAIZwsI,EAAUtsI,YAAc,YAExBssI,EAAU9sI,aAAe,CACvBC,KAAM,GACNlZ,MAAO,gBAGM+lJ,O,8JChBFC,EAA2B,SAACxgH,EAAgBthC,GAAjB,oBAA8BshC,kBAAmBthC,IAE5E0pG,EAAc,SAAC1pG,EAAO+hJ,EAAkBjzH,EAAS8hC,GAE5D,IAAMoxF,EAAW,eACZhiJ,GAGLgiJ,EAAYC,eAAiBF,EAE7B,IAAMt/G,EAAcjqB,iBAAemB,OAAOmV,EAASvmB,IAAaC,SAC1D05I,EAAe1pI,iBAAemB,OAAOi3C,EAAUroD,IAAaC,SAC5D25I,EAAiB3pI,iBAAemB,OAAO3Z,EAAMoiJ,cAAe75I,IAAaC,SACzE65I,EAAe7pI,iBAAemB,OAAO3Z,EAAMsiJ,YAAa/5I,IAAaC,SAE3Ew5I,EAAYr4C,yBACVnxF,iBAAeiQ,cAAcga,EAAa0/G,IAC1C3pI,iBAAekQ,eAAew5H,EAAcG,GAG9C,IAAME,EAAY,IAAI5iF,KAEhB6iF,EA5BK,SAACC,EAAQC,GACpB,IAAIC,EAAaF,EAAOtjE,UAAYujE,EAAOvjE,UAE3C,OADgB5vB,KAAKmrF,KAAKiI,EAAU,OA0BjBC,CADC,IAAIjjF,KAAK3/D,EAAM6iJ,YACEN,GAGrC,OAFAP,EAAYc,aAAeN,EAAa,GAEjCR,GAGIe,EAA8B,SAACC,EAAQjB,EAAkBjzH,EAAS8hC,GAC7E,IAAMqyF,EAAkBD,EAAOhtJ,KAAI,SAAAgK,GAAK,OAAI0pG,EAAY1pG,EAAO+hJ,EAAkBjzH,EAAS8hC,MACtFsyF,EAAmB,GACnBC,EAAoB,GAClBZ,EAAY/pI,iBAAeE,QAQjC,OANAuqI,EAAgB3tJ,SAAQ,SAAA0K,GACtB,IAAMsiJ,EAAc9pI,iBAAemB,OAAO3Z,EAAMsiJ,YAAa/5I,IAAaC,SACtEgQ,iBAAeiQ,cAAc65H,EAAaC,IAAcviJ,EAAM2pG,yBAChEu5C,EAAiBxyH,KAAK1wB,GACjBmjJ,EAAkBzyH,KAAK1wB,MAEzBkjJ,EACJrrE,MAAK,SAASn4E,EAAGw+H,GAChB,OAAO,IAAIv+D,KAAKjgE,EAAEmjJ,YAAc,IAAIljF,KAAKu+D,EAAE2kB,eAE5CpyH,OAAO0yH,K,oJC5CS1lB,E,kDACnB,aAAuC,IAA3B5sF,EAA0B,uDAAhB,GAAIwuC,EAAY,uDAAJ,GAAI,oBACpC,IAAIuL,EAAyB,KAAZ/5C,EAAiBA,EAAjB,KAEXg6C,EAASj6C,YAAUnB,IAASc,qCAAsCq6C,GAHpC,mBAK9BC,EAAQxL,G,wGAOhB,8BAAA3/E,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,mGAE2Cu8E,GAF3C,cAEMqH,EAFN,yBAGSA,GAHT,gD,iIAWA,WAA6BnH,GAA7B,iBAAA//E,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,IAD7B,mGAE2Cu8E,EAF3C,OAEuDE,QAFvD,IAEuDA,OAFvD,EAEuDA,EAAei+C,aAFtE,cAEM92C,EAFN,yBAGSA,GAHT,gD,8HAWA,WAAyBnH,GAAzB,iBAAA//E,EAAA,6DACQ6/E,EADR,UACwB1pF,KAAKmN,KAD7B,iFAE6Cu8E,EAAYE,GAFzD,cAEMmH,EAFN,yBAGSA,GAHT,gD,kEAnCqDxH,I,6BCTvD,sXACO,IAAMgkE,EAAa,aACbC,EACX,uFAGWC,EACX,+GACWC,EAAc,qDACdC,EAAY,CACvB,uDACA,sDACA,4FAEWj3C,EAA2B,4CAG3Bk3C,EAAe,iCACfC,EAAuB,qCACvBC,EAAwB,uCACxBC,EACX,0FAGWC,EAAgB,mB,iFCtBvBC,EAAkB,SAAC,GAAD,IACtB9uI,EADsB,EACtBA,KACAlZ,EAFsB,EAEtBA,MACGgZ,EAHmB,wBAKtB,+CACMA,GADN,IAEEM,QAAQ,YACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,6TAIZyuI,EAAgBvuI,YAAc,kBAE9BuuI,EAAgB/uI,aAAe,CAC7BC,KAAM,GACNlZ,MAAO,gBAGMgoJ,O,+ECdAC,IANM,SAAAjvI,GAAK,OACxB,cAAC,IAAD,2BAAWA,GAAX,aACE,cAAC,IAAD,CAAoBE,KAAM,GAAIlZ,MAAOwF,IAAM/I,OAAOgE,cAAc,Y,6BCPpE,0FAEaynJ,EAAe,WAC1B,IAAIC,EAAY7jH,aAAalB,QAAQ,aACrC,IAAK+kH,EAAW,CACd,IAAMC,EAAUniH,MAChB3B,aAAab,QAAQ,YAAa2kH,GAClCD,EAAYC,EAEd,OAAOD,GAGIE,EAAqB,WAChC,OAAgD,IAAzCC,UAAUC,UAAUn0H,QAAQ,SAAkBk0H,UAAUE,WAAWp0H,QAAQ,YAAc,I,2PCZrFq0H,EAAwB,SAAAhkI,GAAK,OAAIA,EAAM87C,oBAGvCmoF,EAAiB,SAAAjkI,GAAK,OAAIA,EAAMg8C,aAGhCkoF,EAAyB,SAAAlkI,GAAK,OAAIA,EAAM+7C,qB,+RCAxCtgD,GAAYxH,aAAOyD,IAAPzD,CAAH,wFACLlT,KAAMpK,cAEnBF,SACAd,KAAamiB,IAKJqsI,GAAUlwI,aAAOyD,IAAPzD,CAAH,oCAChB,YACA,IADyB,EAAtBq9B,gBAED,OAAO/6C,aAAP,qIAEiBwK,KAAMtK,MAAM,OAOtB2tJ,GAASnwI,aAAOyD,IAAPzD,CAAH,yCAINowI,GAAkBpwI,aAAOgC,IAAPhC,CAAH,uNACNlT,KAAM/I,OAAOQ,eAAe,IAG5BuI,KAAM/I,OAAOQ,eAAe,IAEvCuI,KAAM/I,OAAOK,aAAa,KAEjC1C,KAAamiB,IAKJwsI,GAAcrwI,aAAO4sF,KAAP5sF,CAAH,8MAGF,SAAAM,GAAK,OAAIA,EAAMuxH,QAAU,SAI3CnwI,KAAamiB,I,wFC/CXysI,GAAmBC,0BAEZC,GAAsB,WACjC,IAAMC,EAAUC,qBAAWJ,IAE3B,IAAKG,EACH,MAAM,IAAIj+D,MAAM,mGAGlB,OAAOi+D,GAGIE,GAAmB,SAAC,GAAmD,IAAjDC,EAAgD,EAAhDA,kBAAmBnpI,EAA6B,EAA7BA,SAAa/G,EAAgB,kBACjF,EAAgC+D,mBAASmsI,GAAzC,mBAAOptI,EAAP,KAAiBqtI,EAAjB,KAEA,OACE,eAACP,GAAiBQ,SAAlB,CAA2B9nI,MAAO,CAAExF,WAAUqtI,eAA9C,SACE,eAACrpI,GAAD,2BAAe9G,GAAf,aAA2B+G,QAKjCkpI,GAAiBT,QCrBsB,SAAC,GAA2C,IAAzCzoI,EAAwC,EAAxCA,SAAUc,EAA8B,EAA9BA,UAAc7H,EAAgB,kBACxE8C,EAAagtI,KAAbhtI,SACR,OACE,eAAC,GAAD,2BAAa9C,GAAb,IAAwB8C,SAAUA,EAAU+E,UAAWA,EAAvD,SACGd,EAAS,CAAEjE,SAAUA,QDmB5BmtI,GAAiBR,OEvBqB,SAAC,GAAgC,IAA9B1oI,EAA6B,EAA7BA,SAAa/G,EAAgB,kBACpE,EAAkC8vI,KAA1BhtI,EAAR,EAAQA,SAAUqtI,EAAlB,EAAkBA,YAElB,OACE,gBAACT,GAAD,WACE,eAAC,GAAD,2BAAY1vI,GAAZ,aAAwB+G,KACxB,eAAC,IAAD,CAAKR,QAAS,kBAAM4pI,GAAartI,IAAjC,SACE,eAAC6sI,GAAD,CAAaxe,OAAQruH,EAAW,UAAY,OAAQ,cAAY,yC,mDCqBzDutI,GA5BI,SAAC,GAAsB,IAAD,IAAnBC,gBAAmB,MAAR,EAAQ,EACvC,OACE,uCAEE,gBAAC,IAAD,CAAMxqJ,eAAe,gBAAgB0gB,WAAYpa,KAAM/I,OAAOQ,eAAe,IAAK4iB,GAAI,EAAGwzB,GAAI,EAAGvzB,GAAI,EAAGwzB,GAAI,EAA3G,UACE,eAAC,IAAD,CAAMtzC,MAAM,mBAAmB5B,SAAU,CAAC,EAAG,EAAG,EAAG,EAAG,GAAIgB,WAAW,OAAOd,WAAY,CAAC,GAAI,GAAI,GAAI,GAAI,IAAzG,SACGo/H,OAEH,gBAAC,IAAD,CAAMz+H,WAAW,WAAjB,UACE,eAAC,IAAD,CACEe,MAAM,mBACN5B,SAAU,CAAC,EAAG,EAAG,EAAG,EAAG,GACvBgB,WAAW,OACXd,WAAY,CAAC,GAAI,GAAI,GAAI,GAAI,IAC7B20C,GAAI,EALN,SAMG02G,GAAaD,KAEhB,eAAC,IAAD,CAAM1pJ,MAAM,mBAAmB5B,SAAU,CAAC,GAAIgB,WAAW,SAASd,WAAY,CAAC,IAA/E,SACGo/H,aAKP,eAAC,KAAD,QAON,SAASisB,GAAaD,GAKpB,MACQ,IAAN,OAJ0BA,EAAW,IAAM,GAAKA,EAAW,IAAM,EAItDA,EAGFj2F,KAAKm2F,MAAMF,I,gLCjBlBG,GAAc,SAAC,GAYd,IAXLC,EAWI,EAXJA,WACAC,EAUI,EAVJA,gBACAxzG,EASI,EATJA,eACAR,EAQI,EARJA,gBACA51B,EAOI,EAPJA,SACAm3B,EAMI,EANJA,WACAw5E,EAKI,EALJA,mBACAziF,EAII,EAJJA,gBACA27G,EAGI,EAHJA,cACAxpF,EAEI,EAFJA,oBACGypF,EACC,kBAEF3iE,EAYE2iE,EAZF3iE,WACArnC,EAWEgqG,EAXFhqG,aACAo+B,EAUE4rE,EAVF5rE,YACArhB,EASEitF,EATFjtF,aACAzF,EAQE0yF,EARF1yF,cACAgwB,EAOE0iE,EAPF1iE,WACAC,EAMEyiE,EANFziE,wBACAC,EAKEwiE,EALFxiE,YACAyzC,EAIE+uB,EAJF/uB,oBACA/gD,EAGE8vE,EAHF9vE,aACAvwC,EAEEqgH,EAFFrgH,cACAu6F,EACE8lB,EADF9lB,sBAEIC,EAAiB,OAAG58C,QAAH,IAAGA,OAAH,EAAGA,EAAyBtP,MAAK,SAAAx6C,GAAG,uBAAIA,EAAIyM,mBAAR,aAAI,EAAiBrnB,SAAS,aAEzF,EAAsD3F,mBAAS,GAA/D,mBAAO+sI,EAAP,KAA4BC,EAA5B,KACA,EAAoDhtI,mBA8HtD,SAAoCqjD,EAAqB4jE,GACvD,GAAI5jE,IAAwB1vC,KAAOU,KAAKrhB,OAAO/I,QAAQ,MAAO,IAC5D,OAAIg9H,EACKxwG,aAAwB8pG,KAAuB,UAAW,UAE5D9pG,aAAwB8pG,KAAuB,SAAU,UAGlE,GAAIl9D,IAAwB1vC,KAAOU,KAAKtgB,WAAW9J,QAAQ,MAAO,IAChE,OAAOwsB,aAAwB8pG,KAAuB,aAAc,UAGtE,GAAIl9D,IAAwB1vC,KAAOU,KAAKC,QAAQrqB,QAAQ,MAAO,IAC7D,OAAOwsB,aAAwB8pG,KAAuB,UAAW,UAGnE,OAAOA,KA7IL0sB,CAA2B5pF,EAAqB4jE,IADlD,mBAAOimB,EAAP,KAA2BC,EAA3B,KAGMC,EAAangC,iBAAO,MACpBogC,EAAapgC,iBAAO,MACpB4Q,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAY6mB,GAAnC,OAOD2pI,EAAwB,SAAAC,GAAkB,IAAD,IACvCC,EAAQ,iBAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAe93H,cAAlB,aAAG,EAAuBg4H,YAA1B,QAAkC,KAC5CF,GACFJ,EAAsB12H,aAAwB8pG,KAAuBitB,EAAU,YAInF9mI,qBAAU,WACR0yB,GAAkBu6E,GAAmB,KACpC,CAACA,EAAoBv6E,IAExB1yB,qBAAU,WACR,OAAO,WACDwqB,GAAmBkI,GACrBu6E,GAAmB,MAGtB,CAACA,EAAoBziF,EAAiBkI,IAEzC1yB,qBAAU,WACR,GAAI0mI,EAAW7/B,SAAW8/B,EAAW9/B,QAAS,CAC5C,IAAM5lH,EAASqwC,SAASioF,cAAc,4BAChCytB,EAAa/lJ,EAASA,EAAOgmJ,aAAe9vB,EAAW,GAAK,GAElEmvB,EACEY,GAAW,KAAOR,EAAW7/B,QAAQogC,aAAeN,EAAW9/B,QAAQogC,aAAeD,GAItFN,EAAW7/B,UAAY8/B,EAAW9/B,SACpCy/B,EAAuBY,GAAW,KAAOR,EAAW7/B,QAAQogC,gBAE7D,CAAC9vB,EAAUzkF,IAEd1yB,qBAAU,WAGR,OAFA4d,OAAOupH,iBAAiB53D,KAAkBI,qBAAqB,SAAA5L,GAAC,OAAI6iE,EAAsB7iE,MAEnF,WACLnmD,OAAOwpH,oBAAoB73D,KAAkBI,qBAAqB,SAAA5L,GAAC,OAAI6iE,EAAsB7iE,SAE9F,IAEH,IAAM8hE,EAAWxuB,EACb7zC,aACEC,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACAC,EACAC,GACA3xD,QAAQ,GAVsB,OAWhCqkD,QAXgC,IAWhCA,OAXgC,EAWhCA,EAAcrkD,QAAQ,GAW1B,OACE,uCACGigB,EACC,eAAC,KAAD,CAASp2B,QAASmqI,EAAY/zG,gBAAiBA,EAAiBQ,eAAgBA,IAC9E,KAEJ,gBAAC,KAAD,CACEW,eAAe7B,EACfU,gBAAiBA,EACjBoB,aAAc4yG,EACdxzG,eAAgBA,EAJlB,UAKGR,EACC,eAAC,IAAD,CAAK+iE,IAAKyxC,EAAV,SACE,eAAC,GAAD,CAAYb,SAAW9/G,GAAuD,IAAtCjwC,OAAOiB,KAAKgvC,GAAenV,OAAmBi1H,EAAJ,MAElF,KAEJ,eAAC,KAAD,CAAiB3zG,gBAAiBA,EAAiBuB,WAAYA,EAAYH,aAAc4yG,EAAzF,SACE,eAAC/tC,GAAA,EAAD,CACEH,UAAW9lE,EAAkBm0G,EAAsB,KACnD9uC,YAAa51G,KAAM/I,OAAOsH,aAC1Bs3G,WAAS,EACTC,WAAY91G,KAAM/I,OAAOC,iBAAiB,IAC1Cq/G,0BAA2BhmE,EAL7B,SAMG51B,MAGH41B,IAAoBuB,GAAcyyG,IAAoBC,GACvDj0G,GAAmBuB,GAAcyyG,EAChC,eAAC,KAAD,CAA2B3tI,GAAI,EAAGiE,GAAI,CAAC,GAAIy4F,IAAK0xC,EAAhD,SACE,eAAC,IAAD,CAAQ7qI,QAvCM,WACtBmqI,IACIxyG,EA5DJm8C,aAAiBL,KAAkBzF,wBA+DjCw2C,KAkCwCtrH,OAAK,EAACL,QAAQ,OAAhD,SACG6xI,MAGH,YAOZR,GAAY5wI,aA3JS,CACnB6wI,WAAY,aACZC,iBAAiB,EACjBxzG,gBAAgB,EAChBt1B,UAAW,MAyJE4oI,UAEf,SAASkB,GAAWG,GAClB,OAAOz3F,KAAKwkF,MAAMx2G,OAAO0pH,aAAe,IAAMD,I,0CCvK1CE,GAAiB,SAAC,GAAoC,IAAlC7tI,EAAiC,EAAjCA,UAAW7B,EAAsB,EAAtBA,MAAOyE,EAAe,EAAfA,SACpCkrI,EAAW7tI,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYmzF,GAAnC,OAEP,OACE,eAACN,GAAA,EAAD,CACEpxE,MAAOA,EACPvb,YAAaqF,KAAM/I,OAAOC,iBAAiB,KAC3C6C,UAAU,OACVnB,SAAUoH,KAAMxJ,UAAU,GAAK,KAC/BkuH,UAAU,oBACVJ,aAAevsG,EAAkB,IAAN,IAC3BqsG,WAAYrsG,GAAa8tI,EAAW,QAAU,SAC9CrhC,iBAAkB,YAAqB,IAAlBG,EAAiB,EAAjBA,WACnB,OACE,eAAC,IAAD,CAAKrR,IAAKqR,EAAV,SACE,eAAC,KAAer9B,QAAhB,UAAyB3sE,UA0BxBmrI,GAAoB,SAAC,GAgB3B,IAfLC,EAeI,EAfJA,qBACApqH,EAcI,EAdJA,aACA+7F,EAaI,EAbJA,SACAt3C,EAYI,EAZJA,kBACAvH,EAWI,EAXJA,YACArhB,EAUI,EAVJA,aACAzF,EASI,EATJA,cACAgwB,EAQI,EARJA,WACAD,EAOI,EAPJA,WACArnC,EAMI,EANJA,aACA7Y,EAKI,EALJA,eACAokH,EAII,EAJJA,2BACAC,EAGI,EAHJA,wBACAluI,EAEI,EAFJA,UACAwjB,EACI,EADJA,SAIA,KAFuCwqH,GAAwC,MAAhBpqH,GAE1B,OAAO,KAI5C,IAAIuqH,EAAkB,aAAOvqH,GAC7B,GAAIqqH,EAA4B,CAC9B,IAAMroF,EAAa,CACjBphD,GAAI,iBAAmB0xC,KAAKm2F,MAAMn2F,KAAKk4F,UACvC9kH,KAAM,cACN3a,OAAQu/H,EAA0BrkH,GAG/BjG,EAAa5iB,MAAK,SAAA7kB,GAAC,MAAe,gBAAXA,EAAEmtC,SAAyB6kH,EAAmB92H,KAAKuuC,GAGjF,IAAM1f,EAAkDW,YACtDnC,IAAiBwB,iDACjB,GAGID,EAAkDY,YACtDnC,IAAiBuB,iDACjB,GAGIooG,EAAa7qH,IAAavpB,KAAeC,6BAI/C,OACE,uCACE,eAAC,KAAei1E,QAAhB,IACA,eAAC,KAAev2C,KAAhB,CAAqB/3C,SAAU,EAAGgB,WAAW,OAA7C,SACE,eAAC,KAAeqtF,YAAhB,CAA4BnuF,WAAW,OAAvC,SAA+Co/H,SAGhDguB,EAAmBxxJ,KAAI,SAAAijC,GACtB,IAAImrD,EAAYJ,aACd/qD,EAAKjR,OACLmyD,EACArhB,EACAzF,EACAgwB,EACA3B,EACA0B,EACArnC,GACAnqB,QAAQ,GAEV,OACE,gBAAC,KAAeqgB,KAAhB,CAAqB/3C,SAAU,EAA/B,UACE,gBAAC,KAAequF,YAAhB,CAA4BnuF,WAAW,OAAvC,UACG6+B,EAAK0J,KACL1J,EAAK45E,SACJ,eAAC,GAAD,CACEx5F,UAAWA,EACX7B,OACG+nC,GACCD,IACFooG,GACc,eAAdzuH,EAAK0J,KACDzyB,IAAoBG,kBACpB4oB,EAAK45E,QAEXkT,QAAS9sF,EAAK0J,KAVhB,SAWE,eAACglH,GAAA,EAAD,CAAc3yI,KAAMgkH,SAI1B,eAAC,KAAe7wC,OAAhB,qBACgB,UAAdlvD,EAAK0J,KAAmByhD,EAAYnrD,EAAKjR,OAAO4J,QAAQ,QApBrBqH,EAAKpb,WA+BtDupI,GAAkBryI,aAAe,CAC/BsyI,sBAAsB,EACtBpqH,aAAc,GACd+7F,SAAU,I,0CC1HC4uB,GAAU,SAAC,GA0BjB,IAzBLpY,EAyBI,EAzBJA,WACAnsD,EAwBI,EAxBJA,WACA4I,EAuBI,EAvBJA,eACAlyC,EAsBI,EAtBJA,UACA8tG,EAqBI,EArBJA,mBACAniH,EAoBI,EApBJA,cACA5W,EAmBI,EAnBJA,QACA8hC,EAkBI,EAlBJA,SAkBI,IAjBJ/e,uBAiBI,SAhBJi2G,EAgBI,EAhBJA,wBACAx8C,EAeI,EAfJA,kBACAmY,EAcI,EAdJA,mBACAmiC,EAaI,EAbJA,WACA94B,EAYI,EAZJA,+BACAhY,EAWI,EAXJA,uBACA1hE,EAUI,EAVJA,WACA+3D,EASI,EATJA,sBACArmE,EAQI,EARJA,SACAxD,EAOI,EAPJA,eACAnG,EAMI,EANJA,QACA2K,EAKI,EALJA,UACAf,EAII,EAJJA,YACAC,EAGI,EAHJA,UACA+iH,EAEI,EAFJA,yBACAC,EACI,EADJA,wBAEM7zF,EAAU8zF,uBACVC,EAAmBL,EAAqB,EAAI,IAAM,GAElDM,EAAkB,CACtB,aAAcr5H,EACd,cAAe8hC,GAIXw3F,EAAqB,WACzB,IAAMC,EAAajpH,KAAKC,MAAMe,aAAalB,QAAQ,oBACnDhf,YAAW,WACTqd,OAAOC,SAASi3B,KACdqgD,EACA,0CACmBuzC,EAAW7/G,eAD9B,gCAEY6/G,EAAWltH,QAFvB,kCAGcktH,EAAWviH,UAHzB,kCAIcuiH,EAAWxxH,UAJzB,iCAKawxH,EAAWvjH,SALxB,4BAMQujH,EAAWC,KAAMplJ,QAAQ,MAAO,MACzC,MAyDL,OACE,uCACI2uC,EAA+C,KAA7B,eAAC,KAAe22C,QAAhB,IAEpB,eAAC,KAAD,CAA8B32C,gBAAiBA,EAAiB1C,GAAI0C,EAAkB,CAAC,GAAK,EAA5F,SACE,gBAAC,KAAD,CAAoBA,gBAAiBA,EAArC,UAEGA,EACC,eAAC,KAAD,CAAwB9C,GAAI,EAAG0E,OAAO,EAAtC,SACE,sBAAKn8B,IAAKouB,EAAcguG,UAAWn8H,IAAKmuB,EAAcu7C,aAEtD,KAEJ,gBAAC,IAAD,CAAMplE,cAAc,SAASk6C,SAAS,IAAtC,UACE,gBAAC,IAAD,WAEE,gBAAC,KAAe9jB,KAAhB,CACE/3C,SAAU,EACVgB,WAAW,OACX8zC,GAAI6C,EAAkB,EAAI,KAC1B/C,GAAI+C,EAAkB,EAAI,KAJ5B,UAKIA,EAGA,eAAC,KAAD,CACE33C,SAAU,CAAC,GACXgB,WAAW,OACXd,WAAY,CAAC,GAAI,GAAI,GAAI,GAAI,IAC7B0B,MAAM,mBACNkzC,GAAI,EACJvzB,QApCU,WAC1BqxG,EAA+B,QAC/Bs7B,IACAxC,KA2Bc,SAOGlgH,EAAcu7C,WATjB,eAAC,KAAesH,YAAhB,CAA4BnuF,WAAW,OAAvC,SAA+Co1I,IAY/C39F,EAIE,KAHF,eAAC,KAAes2C,OAAhB,CAAuB/tF,WAAW,OAAOc,WAAW,OAApD,oBAAgEmoF,EAAWzxD,QACzE,SAKN,eAAC,KAAeqgB,KAAhB,CAAqB/3C,SAAU,EAAG80C,GAAI6C,EAAkB,EAAI,KAAM/C,GAAI+C,EAAkB,EAAI,KAA5F,SACIA,EAGA,eAAC,IAAD,CAAM33C,SAAU,CAAC,GAAIE,WAAY,CAAC,IAAKc,WAAW,SAASY,MAAM,mBAAmBuyC,YAAU,EAACW,GAAI,EAAnG,SACGi9C,IAHH,eAAC,KAAe1D,YAAhB,CAA4BnuF,WAAW,OAAvC,SAA+C6xF,MAQlDp6C,EACC,eAAC,IAAD,CAAM33C,SAAU,CAAC,GAAIE,WAAY,CAAC,IAAKc,WAAW,SAASY,MAAM,mBAAmBuyC,YAAU,EAACW,GAAI,EAAnG,SACGre,aAAiC6oG,KAAY2uB,KAE9C,MAEFt2G,GAAmBkI,EACnB,gBAAC,KAAe9H,KAAhB,CAAqB/3C,SAAU,EAAGgB,WAAW,OAAOY,MAAM,sBAA1D,UACE,gBAAC,KAAeysF,YAAhB,CAA4BnuF,WAAW,OAAvC,UACE,eAACs6G,GAAA,EAAD,CAAkB54G,MAAOwF,KAAM/I,OAAOsH,aAAcmV,KAAM,YAC1D,eAAC,IAAD,CAAM2G,GAAI,MAAV,SAAkB+T,aAAwB8pG,KAAsBz/E,EAAW,oBAE5EiuG,EACC,eAAC,KAAe7/D,OAAhB,CAAuB/tF,WAAW,OAAOc,WAAW,OAApD,mBACMgtJ,EADN,YAC0BL,EAAmBj2H,QAAQ,MAEnD,QAEJ,KACHm2H,GACC,gBAAC,KAAe91G,KAAhB,CAAqB/2C,WAAW,OAAhC,UACE,eAAC,KAAeqtF,YAAhB,UACE,eAAC,IAAD,CACEnuF,WAAW,OACX0B,MAAOwF,KAAM/I,OAAOqH,gBAAgB,KACpC1E,WAAYoG,KAAMvJ,YAAYI,KAC9B+B,SAAUoH,KAAMxJ,UAAU,GAAK,KAJjC,SAKG0hI,SAGL,eAAC,KAAerxC,OAAhB,UACE,eAAC,IAAD,CACE/tF,WAAW,OACX0B,MAAOwF,KAAM/I,OAAOqH,gBAAgB,KACpC1E,WAAYoG,KAAMvJ,YAAYI,KAC9B+B,SAAUoH,KAAMxJ,UAAU,GAAK,KAJjC,mBAKMowJ,EALN,YAK0BL,EAAmBj2H,QAAQ,WAK1DigB,GAAmBkI,EAClB,gBAAC,IAAD,CAAMh/C,WAAW,SAASi0C,GAAI,EAA9B,UACE,eAACu5G,GAAA,EAAD,CAAiBzsJ,MAAOwF,KAAM/I,OAAOsH,aAAcmV,KAAM,KACzD,eAAC,IAAD,CACE9a,SAAU,CAAC,GACXE,WAAY,CAAC,IACbc,WAAW,OACXY,MAAM,sBACNuyC,YAAU,EACVY,GAAI,EANN,SAOGvf,aAAwB8pG,KAAqBz/E,EAAW,gBAG3D,KAEFlI,EASE,KARF,eAAC,KAAeI,KAAhB,UACE,eAAC,KAAem2C,OAAhB,CACEhuF,WAAW,OACXF,SAAU,CAAEmuF,GAAI,OAAQhwE,GAAI,QAC5BoD,QAAS,kBAAM04C,EAAQzjC,KAAK9D,KAAOU,KAAKF,OAH1C,SAIGosG,YAKR3nF,EACC,gBAAC,IAAD,CAAM72C,eAAe,gBAAgB+6D,SAAS,IAA9C,UACE,gBAAC,IAAD,WACE,eAAC,IAAD,UACE,eAAC,KAAeqyB,OAAhB,CACEr5C,GAAI,EACJ30C,WAAW,OACXF,SAAUoH,KAAMxJ,UAAU,GAC1B2jB,QAnLW,WAuB7BqsI,EACEpiH,EACAglD,IAAwBr5E,OACxBk5E,IAA6BC,OAzBF,WAC3B,IAAMzhD,EAAcnB,aAClBhjC,IAAiBC,IAAIa,eACrBo/B,EACAY,EACApE,EACAwE,EACA3K,EACA4J,EACAC,EACA,EACA,4BAEF4I,aAAU7E,GAEV68G,IACAt6C,IACAmY,IACKrwE,GACHg1G,QA2JY,SAKG5uB,SAGL,eAAC,IAAD,UACE,eAAC,KAAepxC,OAAhB,CACEhuF,WAAW,OACXF,SAAUoH,KAAMxJ,UAAU,GAC1B2jB,QA3JS,WAO3BqsI,EACEpiH,EACAglD,IAAwBt5E,KACxBm5E,IAA6BC,OATJ,WACzBsiC,EAA+B,QAC/B84B,IACAz6C,IACAi9C,QAmJc,SAIG5uB,YAIP,eAAC,IAAD,UACE,gBAAC,IAAD,CACEt/H,SAAU,CAAC,GACXE,WAAY,CAAC,IACbc,WAAW,OACXY,MAAM,mBACNkzC,GAAI6C,EAAkB,EAAI,EAL5B,cAMIwxC,EAAWzxD,QAAQ,WAIzB,iB,UClRH42H,GAAY,SAAC,GAmBnB,IAlBL11E,EAkBI,EAlBJA,eACAyD,EAiBI,EAjBJA,mBACAmL,EAgBI,EAhBJA,kBACAvH,EAeI,EAfJA,YACArhB,EAcI,EAdJA,aACAzF,EAaI,EAbJA,cACAgwB,EAYI,EAZJA,WACAngD,EAWI,EAXJA,eACA8zF,EAUI,EAVJA,oBACA5zC,EASI,EATJA,WACArnC,EAQI,EARJA,aACAwnC,EAOI,EAPJA,YACA+jE,EAMI,EANJA,2BACAmB,EAKI,EALJA,gBACAxrH,EAII,EAJJA,aACAqmD,EAGI,EAHJA,wBACArN,EAEI,EAFJA,aACAj3B,EACI,EADJA,wBAIA,KAFsB41C,aAAa9hB,IAAmB8hB,aAAare,IAE/C,OAAO,KAE3B,IAAMgO,EAAqByyC,EACvBnzC,aACET,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACApmD,EACAykD,EACA4B,EACAC,GAEFtN,EAAarkD,QAAQ,GAEnB82H,EAAiB1xB,EACnB1yC,aACExR,EACAyD,EACAmL,EACAvH,EACArhB,EACAzF,EACAgwB,EACAngD,EACAkgD,EACArnC,EACAwoC,GACA7rE,MACFo6D,EAAelhD,QAAQ,GAErB+2H,EAAsB3xB,EACxB1yC,aACExR,EACAyD,EACAmL,EACAvH,EACArhB,EACAzF,EACAgwB,EACAngD,EACAkgD,EACArnC,EACAwoC,GACAS,UACFzO,EAAmB3kD,QAAQ,GAGzBg3H,IAAsCD,EAAsBF,GAAiB72H,QAAQ,GAG3F,OACE,uCACE,eAAC,KAAe42D,QAAhB,IACA,gBAAC,KAAev2C,KAAhB,CAAqB/3C,SAAW8kD,EAA8B,EAAJ,EAAO9jD,WAAW,OAA5E,UACE,eAAC,KAAeqtF,YAAhB,CAA4BnuF,WAAY4kD,EAA0B,OAAS,OAA3E,SACGA,EAA0Bw6E,KAAqBA,OAElD,eAAC,KAAerxC,OAAhB,CAAuB7qF,MAAO,kBAAmBlD,WAAY4kD,GAA2B,OAAxF,oBACO0pG,QAGT,gBAAC,KAAez2G,KAAhB,CAAqB/3C,SAAU,EAAGgB,WAAYoG,KAAMvJ,YAAYG,OAAhE,UACE,eAAC,KAAeqwF,YAAhB,CAA4BnuF,WAAY4kD,GAA2B,OAAnE,SACGw6E,OAEH,eAAC,KAAerxC,OAAhB,CAAuB7qF,MAAO,kBAAmBlD,WAAY4kD,GAA2B,OAAxF,oBACOsoG,EAA6BsB,EAAoCD,Y,oBCvFnEhE,GAAS,SAAC,GAA2C,IAAzC71H,EAAwC,EAAxCA,QAAS8hC,EAA+B,EAA/BA,SAAU1tB,EAAqB,EAArBA,eACpC2lH,EAAmB,UAAM3lH,EAAN,YAAwBA,GAAkBA,EAAiB,EAAI,SAAW,SAEnG,OACE,uCACE,eAAC,KAAe+O,KAAhB,CAAqBjD,GAAE,UAAK1tC,KAAMtK,MAAM,GAAjB,QACvB,gBAAC,KAAei7C,KAAhB,WACE,gBAAC,KAAD,WACE,eAAC,KAAemjD,MAAhB,CACEl7F,SAAU,CAAC,OAAQ,KAAM,KAAM,QAC/BE,WAAW,OACXG,OAAQ,CAAC,OAAQ,KAAM,KAAM,QAH/B,SAIGi/H,OAEH,eAAC,KAAe75D,KAAhB,CAAqBvlE,WAAW,OAAOF,SAAU,CAAC,OAAQ,QAA1D,SACG40B,OAGL,eAAC,IAAD,CAAMggB,GAAI,CAAC,OAAQ,QAASR,KAAK,IAAItzC,eAAe,SAApD,SACE,eAAC8tJ,GAAA,EAAD,CAAgBhtJ,MAAOwF,KAAM/I,OAAOI,kBAAkB,KAAM4B,OAAO,WAErE,gBAAC,KAAD,WACE,eAAC,KAAe66F,MAAhB,CACEl7F,SAAU,CAAC,OAAQ,KAAM,KAAM,QAC/BE,WAAW,OACXG,OAAQ,CAAC,OAAQ,KAAM,KAAM,QAH/B,SAIGi/H,OAEH,eAAC,KAAe75D,KAAhB,CAAqBvlE,WAAW,OAAOF,SAAU,CAAC,OAAQ,KAAM,KAAM,QAAtE,SACG02D,UAIP,eAAC,KAAe3e,KAAhB,CAAqB/2C,WAAW,OAAOhB,SAAU,CAAC,OAAQ,KAAM,KAAM,QAAtE,SACE,eAAC,KAAequF,YAAhB,CAA4BnuF,WAAW,OAAvC,SAA+CyuJ,U,UCmCxCE,GAjFA,SAAC,GAA0E,IAAxE3lE,EAAuE,EAAvEA,WAAYrnC,EAA2D,EAA3DA,aAAcitG,EAA6C,EAA7CA,YAAaC,EAAgC,EAAhCA,SAAUp3G,EAAsB,EAAtBA,gBACjE,IAAKkK,GAAyC,KAAb,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAcxrB,QACjC,OAAO,KAGT,IAAM24H,EAAgB,SAACryH,EAAWvG,GAChC,IAAMsa,EAAYw4C,EAAW/oE,MAAK,SAAAra,GAAK,OAAIA,EAAM6d,KAAOgZ,KACxD,GAAK+T,EAEL,OACE,eAAC,WAAD,UACE,eAAC,KAAeqH,KAAhB,UACE,gBAAC,IAAD,CAAK30C,MAAM,OAAX,UACE,gBAAC,IAAD,CAAMtC,eAAe,gBAAgBsC,MAAM,OAA3C,UACE,eAAC,IAAD,UACE,eAAC,IAAD,CACE0xC,GAAG,IACHF,GAAG,IACH50C,SAAU,EACVgB,WAAYoG,KAAMvJ,YAAYG,OAC9B4D,MAAOwF,KAAM/I,OAAOK,aAAa,KALnC,SAMGgyC,EAAUpzB,UAGf,eAAC,IAAD,UACE,gBAAC,IAAD,CAAMqE,cAAc,MAAM9gB,WAAW,SAArC,UACE,eAAC,KAAeqtF,OAAhB,CACEr5C,GAAI,CAAC,MAAO,MAAO,MAAO,OAC1Bx0C,OAAQ,cACRL,SAAU23C,EAAkBvwC,KAAMxJ,UAAU,GAAKwJ,KAAMxJ,UAAU,GACjEsC,WAAW,OACXqhB,QAAS,kBAAMutI,EAAYp+G,IAL7B,SAMG4uF,OAEH,eAAC,IAAD,CAAMt+H,WAAW,MAAMhB,SAAU,EAAG4B,MAAM,mBAAmBwB,MAAM,OAAOjC,UAAU,QAApF,qBACQuvC,EAAUujB,YAAYv8B,QAAQ,cAK5C,gBAAC,IAAD,CAAMx3B,WAAW,OAAO80C,GAAG,IAAIh1C,SAAU,OAAQgB,WAAW,SAASY,MAAM,mBAA3E,UACG09H,KADH,IAC0BhhH,iBAAemB,OAAOixB,EAAUi4G,WAAY,2BAQhF,OACE,gBAAC,KAAD,CAAiBhxG,gBAAiBA,EAAlC,UACIA,EAA+C,KAA7B,eAAC,KAAe22C,QAAhB,IACpB,eAAC,KAAD,CAAwBttF,WAAW,OAAnC,SACE,eAAC,KAAeqtF,YAAhB,UACE,gBAAC,IAAD,CAAM1sE,cAAc,SAApB,UACE,gBAAC,IAAD,CAAM9gB,WAAW,SAAjB,UACE,eAAC,KAAD,CAAqBg0C,GAAG,MAAxB,SACE,sBAAKz3B,IAAK+qH,KAAcG,mBAAoBjrH,IAAI,OAElD,eAAC,IAAD,CAAMzb,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMs2C,GAAG,IAAIh1C,SAAU,EAAGgB,WAAW,OAAOd,WAAW,OAA9F,SACGo/H,UAIJyvB,GACC,eAAC,IAAD,CAAM/5G,GAAG,IAAIh1C,SAAU,CAAC,OAAQ,KAAM,KAAM,QAAS4B,MAAM,MAA3D,SACG09H,cAMX,eAAC,KAAD,UACGz9E,EAAa/lD,KAAI,SAACgmD,EAAa1rB,GAAd,OAChB,eAAC,IAAD,UAAkB44H,EAAcltG,IAAtB1rB,Y,4DC/Eb,SAAS64H,GAAY3vH,GAAM,IAAD,EAE/B,OACEA,EAAI+K,cAAJ,UACA/K,EAAIyM,mBADJ,aACA,EAAiBrnB,SAAS,YAC1B4a,EAAI+K,YAAYgG,cAAc3rB,SAAS,kBAEnC4a,EAAIghD,WAAairD,KAAoB7mH,SAAS4a,EAAIghD,WAC7CwqD,KAAcxrG,EAAIghD,WAKzBhhD,EAAIq6C,YAAoBr6C,EAAIq6C,YAEP,kBAAdr6C,EAAIne,MAA2Bme,EAAIne,MAE1Cme,EAAIne,OAASme,EAAIne,MAAMrY,IAAYw2B,EAAIne,MAAMrY,SAAjD,EAWK,SAAS0wC,GAAela,GAAM,IAAD,EAClC,OACEA,EAAI+K,cAAJ,UAAmB/K,EAAIyM,mBAAvB,aAAmB,EAAiBrnB,SAAS,YAAa4a,EAAI+K,YAAYgG,cAAc3rB,SAAS,iBCxBrG,IAMMwqI,GAAuB,SAAC,GAAuE,IAAD,EAApEnnB,EAAoE,EAApEA,4BAA6BonB,EAAuC,EAAvCA,oBAAqB/kH,EAAkB,EAAlBA,YAChF,EAA0BrrB,mBAAQ,iBAACqrB,QAAD,IAACA,OAAD,EAACA,EAAahJ,gBAAd,QAA0B,GAA5D,mBAAO9d,EAAP,KAAc8rI,EAAd,KAWA,OAJA3pI,qBAAU,WAAO,IAAD,EACd2pI,EAAQ,iBAAChlH,QAAD,IAACA,OAAD,EAACA,EAAahJ,gBAAd,QAA0B,KACjC,CAACgJ,IAGF,eAAC,IAAD,UACE,eAAC,IAAD,CACE3sB,SAAU,SAAA+rE,GAAC,OAZU,SAAAlmE,GACzB,GAAc,IAAVA,EAAa,OAAO6rI,EAAoB/kH,GAC5C29F,EAA4BzkH,EAAO8mB,GAUhBilH,CAAmB7lE,IAClClmE,MAAOA,EACPT,UAAU,QACVI,IAAK,EACL7f,MAAO,GACP8f,MAAK,OAACknB,QAAD,IAACA,OAAD,EAACA,EAAa27D,sBAO3BmpD,GAAqBr0I,aAjCA,CACnBktH,4BAA6B,aAC7BonB,oBAAqB,aACrB/kH,YAAa,MAgCA8kH,UC0BTI,GAAc,SAAC,GAed,IAdLlmE,EAcI,EAdJA,wBACA+lE,EAaI,EAbJA,oBACAnnB,EAYI,EAZJA,kBACAv4F,EAWI,EAXJA,qBACAC,EAUI,EAVJA,sBACAu0B,EASI,EATJA,eACA8jE,EAQI,EARJA,4BACApwF,EAOI,EAPJA,gBACA43G,EAMI,EANJA,mCACA3B,EAKI,EALJA,wBACAh7B,EAII,EAJJA,+BACAhY,EAGI,EAHJA,uBACA8wC,EAEI,EAFJA,WACA8D,EACI,EADJA,QAEA,IAAKpmE,IAA4BA,EAAwB/yD,OAAQ,OAAO,KAExE,IAUMo5H,EAA+B,WACnC78B,EAA+B,cAC/B84B,IACA1lI,YAAW,WACTqd,OAAOC,SAASi3B,KAAOm1F,GAAgB90C,GAA0BloF,KAAOU,KAAKtgB,aAC5E,MAGC68I,EAA2B,WAC/B/8B,EAA+B,UAC/B84B,IACA1lI,YAAW,WACTqd,OAAOC,SAASi3B,KAAOm1F,GAAgB90C,GAA0BloF,KAAOU,KAAKrhB,SAC5E,MAGL,OACE,qCACE,eAAC,KAAD,CAA8B4lC,gBAAiBA,EAA/C,SAEGyxC,EAAwBttF,KAAI,SAACijC,EAAM3I,GAAW,IAAD,UArDvBgU,EFzCO9K,EE+FtBswH,EArDsB,OADPxlH,EAsDyBrL,GArDtCgnE,gBAA+B,GAAN,OAAU37D,EAAYtc,OAAO4J,QAAQ,IACxE,GAAN,QAAWkzB,SAASxgB,EAAYhJ,UAAYgJ,EAAYtc,QAAQ4J,QAAQ,IAqDhE,OACGqH,EAAK4rB,cACJ,gBAAC,KAAD,CAAwDhT,gBAAiBA,EAAzE,UAEGA,EACC,eAAC,KAAD,CACE9C,GAAI,EACJ0E,MAAuD,SAAhDzyB,aAA0BiY,EAAKgN,aACtCyN,eAAgBA,GAAeza,GAHjC,UFrGoBO,EEyGKP,EFxGhB,kBAAdO,EAAIne,OAAsBme,EAAIne,MAAMuD,SAAS,SEyGpC,eAAC,IAAD,CACEtH,IAAK6xI,GAAYlwH,GACjB0J,KAAM1J,EAAKgoD,UAAYhoD,EAAKzhB,MAC5BuyI,UAAU,EACVC,MAAM,IAGR,sBAAK1yI,IAAK6xI,GAAYlwH,GAAO1hB,IAAI,QAGnC,KAEJ,eAAC,KAAD,CAA8Bs6B,gBAAiBA,EAA/C,SACE,eAAC,KAAeI,KAAhB,CAAqB/3C,SAAU,EAA/B,SACE,gBAAC,IAAD,CACE2hB,cAAeg2B,EAAkB,SAAW,MAC5C72C,eAAgB,gBAChBsC,MAAM,OACN04D,IAAI,OAJN,UAKE,gBAAC,IAAD,CAAMD,SAAS,IAAIl6C,cAAeg2B,EAAkB,SAAW,MAA/D,UACGA,EACC,eAAC,KAAD,CACE33C,SAAU,CAAC,GACXgB,WAAW,OACXd,WAAY,CAAC,IACb0B,MAAM,mBACNkzC,GAAI,EACJvzB,SACM,OAAJwd,QAAI,IAAJA,GAAA,UAAAA,EAAMgN,mBAAN,eAAmBrnB,SAAS,WACxBirI,EACAF,EATR,SAWG1wH,EAAKgoD,UAAYhoD,EAAKzhB,QAGzB,eAAC,KAAe+wE,YAAhB,CAA4BnuF,WAAW,OAAvC,SACG6+B,EAAKsL,aAAetL,EAAKgoD,YAG3BihD,GACDjpG,EAAKqC,YACL,UAACrC,EAAKgN,mBAAN,aAAC,EAAkBrnB,SAAS,cAC5B,UAACqa,EAAKgN,mBAAN,aAAC,EAAkBrnB,SAAS,YAC5Bqa,EAAKQ,cAAgBiwH,GACtBxnB,GACCjpG,EAAKqC,UACLrC,EAAKugC,aAAe5sD,IAAoBE,aACxC,UAACmsB,EAAKgN,mBAAN,aAAC,EAAkBrnB,SAAS,YAC5Bqa,EAAKQ,cAAgBiwH,EACrB73G,EACE,eAAC,GAAD,CACEowF,4BAA6BwnB,EAC7BJ,oBAAqBA,EACrB/kH,YAAarL,IAGf,eAAC,IAAD,CAAK37B,MAAM,OAAO9D,MAAO,CAAE6B,UAAW,SAAtC,SACE,eAAC0mI,GAAA,EAAD,CACEG,kBAAmBA,EACnBv4F,qBAAsBA,EACtBC,sBAAuBA,EACvBtF,YAAarL,EACbklC,eAAgBA,EAChB8jE,4BAA6BA,MAIjC,QAEN,gBAAC,IAAD,CAAMjsE,IAAI,OAAV,UACInkB,EAIE,KAHF,eAAC,KAAeu2C,OAAhB,CAAuBhuF,WAAW,OAAOqhB,QAAS,kBAAM4tI,EAAoBpwH,IAA5E,SACGugG,OAGL,eAAC,IAAD,CAAMz+H,WAAW,SAASg7D,SAAS,IAAnC,SACGlkB,EACC,gBAAC,IAAD,CAAM72C,eAAe,gBAAgB+6D,SAAS,IAA9C,UACE,gBAAC,IAAD,WACE,eAAC,IAAD,CAAKhnB,GAAI,EAAT,SACE,eAAC,KAAeq5C,OAAhB,CACEhuF,WAAW,OACXF,SAAUoH,KAAMxJ,UAAU,GAC1B2jB,QAAS,kBA7HV,SAAA6oB,GAE/BwjH,EACExjH,EACAomD,IAAwBr5E,OACxBk5E,IAA6BE,SAJQ,kBAAM4+D,EAAoB/kH,MA4HlB2lH,CAAyBhxH,IAH1C,SAIGugG,SAGL,eAAC,IAAD,UACE,eAAC,KAAepxC,OAAhB,CACEhuF,WAAW,OACXF,SAAUoH,KAAMxJ,UAAU,GAC1B2jB,SACM,OAAJwd,QAAI,IAAJA,GAAA,UAAAA,EAAMgN,mBAAN,eAAmBrnB,SAAS,WACxBirI,EACAF,EANR,SAQGnwB,YAKP,eAAC,IAAD,UACE,gBAAC,IAAD,CAAMt/H,SAAU,CAAC,GAAIE,WAAY,CAAC,IAAKc,WAAW,OAAOY,MAAM,mBAA/D,cACIguJ,UAKR,gBAAC,KAAe3hE,OAAhB,eACI2hE,EADJ,IACqBh5C,aAAoB73E,EAAKyI,+BArH5D,UAA4BzI,EAAKQ,YAAcnJ,YAsIhD45H,GAAe,SAAC,GAmBtB,IAAD,YAlBJvgH,EAkBI,EAlBJA,qBACAC,EAiBI,EAjBJA,sBACA05C,EAgBI,EAhBJA,wBACAnlB,EAeI,EAfJA,eACA+jE,EAcI,EAdJA,kBACA13B,EAaI,EAbJA,cACAO,EAYI,EAZJA,cACAo/C,EAWI,EAXJA,oBAWI,IAVJt4G,uBAUI,SATJi2G,EASI,EATJA,wBACAhzC,EAQI,EARJA,uBACAgY,EAOI,EAPJA,+BACAj6D,EAMI,EANJA,4BACA+yF,EAKI,EALJA,WACAlgH,EAII,EAJJA,cACA0kH,EAGI,EAHJA,YACArlH,EAEI,EAFJA,YACAD,EACI,EADJA,SASMnT,GACS,OAAb+T,QAAa,IAAbA,GAAA,UAAAA,EAAe2nF,mBAAf,eAA4B98F,QAAS,GACpB,OAAbmV,QAAa,IAAbA,GAAA,UAAAA,EAAe2nF,mBAAf,mBAA4BhzG,MAAK,SAAAwuC,GAAI,OAAIA,EAAKhsB,WAAavpB,KAAeE,gCAA1E,eACIm6G,yBADJ,OAEAjoF,QAFA,IAEAA,GAFA,UAEAA,EAAe2nF,mBAFf,iBAEA,EAA4BhzG,MAAK,SAAAwuC,GAAI,OAAIA,EAAKhsB,WAAavpB,KAAeC,uCAF1E,aAEA,EACIo6G,wBACJ,EACAJ,EAAyB9hC,YAA0B1mD,EAAaD,GAChEwnE,EAAa,CACjB,WAAYihB,EACZ,UAAWh+D,KAAKwkF,MAAMpiH,GACtB,gBAAiBP,aAAU,OAAQm8F,IAG/Bm8B,EAAO,iBAAGhkH,QAAH,IAAGA,OAAH,EAAGA,EAAe2kH,sBAAlB,QAAoC,GAEjD,OACE,uCACIx4G,EAyBE,KAxBF,uCACE,eAAC,KAAe22C,QAAhB,IACA,eAAC,KAAev2C,KAAhB,CAAqB/3C,SAAU,EAAGE,WAAW,OAA7C,UACgB,OAAbsrC,QAAa,IAAbA,OAAA,EAAAA,EAAe7I,YAAavpB,KAAeC,6BAC1C,gBAAC,KAAD,CAAuBxY,WAAW,SAAlC,UACE,eAAC,IAAD,CAAMb,SAAU,EAAGE,WAAY,GAAIc,WAAW,SAA9C,SACGy5G,KAAgBhkF,aAAiC6oG,KAA8BltB,MAElF,eAAC,KAAD,CAAsBlpD,SAAS,cAA/B,SACE,eAAC,KAAeglC,OAAhB,CAAuBhuF,WAAW,OAAOqhB,QAAS2uI,EAAlD,SACE,eAAC,IAAD,CAAM/7G,YAAU,EAAhB,SACG3e,aAAwB8pG,KAAiBpoG,aAAU,OAAQ+sC,GAAiB,0BAMrF,uCACE,eAAC,KAAeoqB,YAAhB,CAA4BnuF,WAAW,OAAvC,SAA+Co/H,OAC9CA,aAOV2wB,GACC,eAAC,GAAD,CACE7mE,wBAAyBA,EACzB+lE,oBAAqBt+C,EACrBm3B,kBAAmBA,EACnBv4F,qBAAsBA,EACtBC,sBAAuBA,EACvBu0B,eAAgBA,EAChB8jE,4BA5DkC,SAACv+C,EAAGp/C,GAC5CkmE,EAAc,2BAAKlmE,GAAN,IAAmBhJ,SAAUooD,EAAEu3C,OAAOz9G,UA4D7CisI,mCA1DmC,SAACjsI,EAAO8mB,GACjDkmE,EAAc,2BAAKlmE,GAAN,IAAmBhJ,SAAU9d,MA0DpCq0B,gBAAiBA,EACjBi7E,+BAAgCA,EAChCj6D,4BAA6BA,EAC7Bi1F,wBAAyBA,EACzBhzC,uBAAwBA,EACxB8wC,WAAYA,EACZ8D,QAASA,QAenB,SAASE,GAAgB7vC,GACvB,OAAOA,EAAI72G,QAAQ,MAAO,IAP5BgnJ,GAAan1I,aAAe,CAC1BmtH,mBAAmB,EACnBioB,qBAAqB,G,+BC7VVG,GAAa,WACxB,IAAQz5E,IAAqB,OAALz1B,WAAK,IAALA,UAAA,EAAAA,KAAOC,aAAc,IAArCw1B,YACR,OACE,sCACc,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAa9J,0BACZ,eAAC,KAAe90B,KAAhB,CAAqBp0B,GAAG,2BAAxB,SACE,eAAC,IAAD,CACExiB,UAAU,OACVH,WAAYoG,KAAMvJ,YAAYG,OAC9B4D,MAAM,mBACN5B,SAAU,EACVE,WAAW,OALb,SAMGy2E,EAAY9J,6BAGf,QC+BKwjF,GA3CA,SAAC,GAQT,IAPLpwE,EAOI,EAPJA,YACArhB,EAMI,EANJA,aACAzF,EAKI,EALJA,cACAgwB,EAII,EAJJA,WACAD,EAGI,EAHJA,WACArnC,EAEI,EAFJA,aACAlK,EACI,EADJA,gBAEM24G,EAAsBtmE,aAC1B/J,EACArhB,EACAzF,EACAgwB,EACAD,EACArnC,GAMF,OACE,gBAAC,KAAD,CAAiBlK,gBAAiBA,EAAlC,UACIA,EAA+C,KAA7B,eAAC,KAAe22C,QAAhB,IACpB,eAAC,KAAeD,YAAhB,UACE,gBAAC,IAAD,CAAM1sE,cAAc,MAAM7gB,eAAe,gBAAgBsC,MAAO,EAAhE,UACE,gBAAC,IAAD,WACE,eAAC,KAAD,CAAqByxC,GAAG,MAAxB,SACE,sBAAKz3B,IAAK+qH,KAAcE,oBAAqBhrH,IAAI,OAEnD,eAAC,IAAD,CAAM23B,GAAG,IAAIh1C,SAAU,EAAG4B,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsC,WAAW,SAA5E,SACG60B,aAA+BypG,KAZnC,4CAAYgxB,EAAoB54H,QAAQ,MAYsC,iBAG/E,eAAC,IAAD,CAAM13B,SAAU,EAAG4B,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsC,WAAW,OAArE,qBAAkFsvJ,EAAoB54H,QACpG,e,6BCxCC64H,GAAkBj2I,aAAOyD,KAAPzD,CAAH,4CACxBlT,KAAM7K,aAAaF,MADK,wIAOxB+K,KAAM7K,aAAaH,OAPK,yDAQR,SAAAwe,GAAK,OAAKA,EAAM41I,WAAa,IAAM,WAI1CC,GAA4Bn2I,KAAO0R,EAAV,gpBAM3B,SAAApR,GAAK,OAAIA,EAAMhZ,OAASwF,KAAM/I,OAAOK,aAAa,OACzDsB,aACa,SAAA4a,GAAK,OAAIA,EAAM5Z,YAAcoG,KAAMvJ,YAAYE,WAC3C,SAAA6c,GAAK,OAAKA,EAAMxZ,gBAAkBwZ,EAAMxZ,eAAe+sF,IAAOvzE,EAAMxZ,gBAAkB,UAEhF,SAAAwZ,GAAK,OAAIA,EAAMhZ,OAASwF,KAAM/I,OAAOK,aAAa,OAsBvE0I,KAAM7K,aAAaH,OAjCa,oEAkCP,SAAAwe,GAAK,OAAIA,EAAMhZ,OAASwF,KAAM/I,OAAOK,aAAa,SAG7E,YAAqB,IAAlBwB,EAAiB,EAAjBA,WACH,OAAOtD,aAAP,2DACiBsD,KAGjBlE,KAAamiB,IACM,SAAAvD,GAAK,OAAKA,EAAMxZ,gBAAkBwZ,EAAMxZ,eAAe+c,IAAOvD,EAAMxZ,gBAAkB,U,0ECnDvGsvJ,GAAgBC,oBAAS,WAC7B,IACEttH,OAAOmwB,OAAOo9F,GAAGC,UACjB,MAAOrnE,OACR,KAmDYsnE,GAjDa,SAAC,GAAsF,IAApFC,EAAmF,EAAnFA,YAAajjI,EAAsE,EAAtEA,OAAQkjI,EAA8D,EAA9DA,cAAeR,EAA+C,EAA/CA,WAAYppH,EAAmC,EAAnCA,eAAmBpsB,EAAgB,kBAC1Gi2I,EAAgBC,sBAChBC,EAAqBz3D,aAA8BtyD,GACnD6yB,EAAU8zF,uBA6BhB,OA3BAtoI,qBAAU,WACR,OAAO,WAAO,IAAD,MACa,SAAb,OAAPw0C,QAAO,IAAPA,OAAA,EAAAA,EAASvrB,UAAkB,UAAArL,OAAOmwB,cAAP,mBAAeo9F,UAAf,mBAAmBQ,aAAnB,SAA0BC,YAE1D,CAACp3F,IAEJx0C,qBAAU,WACRirI,OACC,CAACM,IAEJvrI,qBAAU,WACR,GAAI0rI,EAAoB,CACtB,IAAMG,EAAe,SAAAxrH,GACAA,EAAXi7F,OACDwwB,cAAcvyB,cAAc,yBAAyBzxF,SAK9D,OAFA0jH,EAAc3kC,QAAQsgC,iBAAiB,QAAS0E,GAEzC,WACDL,GAAiBA,EAAc3kC,SACjC2kC,EAAc3kC,QAAQugC,oBAAoB,QAASyE,OAIxD,IAEEH,EAGH,qCACE,eAACZ,GAAD,CAAiB71C,IAAKu2C,EAAeT,WAAYA,EAAjD,SACE,eAACC,GAAD,aACEzpH,EAAG,EACH62E,UAAU,mBACV,iBAAgBkzC,EAChB,cAAajjI,GACT9S,QAVoB,MChCrBw2I,GAAa,SAAC,GAA8E,IAA5Ez1E,EAA2E,EAA3EA,aAAc20E,EAA6D,EAA7DA,cAAe5rG,EAA8C,EAA9CA,wBAAyB1d,EAAqB,EAArBA,eAC3EjoB,EAAYC,wBAAc,CAC9BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYsiB,GAAnC,OAEP,OACE,eAAC,GAAD,CACE6yI,cAAeN,EACfK,YAAY,OACZjjI,OAAuB,IAAfiuD,EACR36E,eAAgB,CAAE+sF,GAAI,YAAahwE,GAAI,QACvCne,SAAUmf,GAAa2lC,EAA0B,EAAI,EACrD9jD,WAAYoG,KAAMvJ,YAAYI,KAC9BiC,WAAYif,GAAa2lC,EAA0B,OAAS,OAC5DljD,MAAOwF,KAAM/I,OAAOI,kBAAkB,KACtC2oC,eAAgBA,KAOtBoqH,GAAW32I,aAAe,CACxB61I,eAAe,GCZV,IAAMe,GAAW,SAAC,GAelB,IAdLC,EAcI,EAdJA,8BACAzB,EAaI,EAbJA,oBACAl0E,EAYI,EAZJA,aACA5iB,EAWI,EAXJA,cACAyF,EAUI,EAVJA,aACAqhB,EASI,EATJA,YACAiJ,EAQI,EARJA,WACArnC,EAOI,EAPJA,aACAsnC,EAMI,EANJA,WACA2zC,EAKI,EALJA,oBACA1zC,EAII,EAJJA,wBACAC,EAGI,EAHJA,YACAjiD,EAEI,EAFJA,eACA0d,EACI,EADJA,wBAEA,EAA0C/lC,oBAAS,IAAI0mD,MAAOwf,WAA9D,mBAAOyrE,EAAP,KAAsBiB,EAAtB,KAEMC,EAAwB90B,EAC1B7zC,aACEC,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACAC,EACAC,GACA3xD,QAAQ,GAVmC,OAW7CqkD,QAX6C,IAW7CA,OAX6C,EAW7CA,EAAcrkD,QAAQ,GAM1B,OAJAjS,qBAAU,WACRksI,GAAiB,IAAIlsF,MAAOwf,aAC3B,CAACgrE,EAAqBl0E,EAAc61E,IAEhCl3D,aAAa3e,GAClB,uCACE,eAAC,KAAeuS,QAAhB,IAEA,gBAAC,KAAev2C,KAAhB,CACE/2C,WAAYoG,KAAMvJ,YAAYI,KAC9B+B,SAAU8kD,EAA0B19C,KAAMxJ,UAAU,GAAK,KAAO,CAAC,OAAQ,KAAM,KAAM,QACrFk3C,GAAG,MACH50C,WAAY4kD,EAA0B,OAAS,OAJjD,UAKE,eAAC,KAAeupC,YAAhB,UAA6BixC,OAC7B,eAAC,KAAe9wC,eAAhB,CAA+BxtF,WAAW,OAA1C,SACE,eAAC,IAAD,CACEhB,SAAU8kD,EAA0B19C,KAAMxJ,UAAU,GAAK,KAAO,EAChE8oB,UAAS,WAAMkrI,GACfjrI,aAAc+qI,SAIpB,eAAC,KAAe35G,KAAhB,CAAqBjD,GAAG,OAAO90C,SAAU,CAAC,OAAQ,KAAM,KAAM,QAASE,WAAW,OAAlF,SACE,gBAAC,KAAemuF,YAAhB,CAA4BnuF,WAAW,OAAOY,eAAe,WAA7D,cACIw+H,KADJ,SAID5lC,aAA8BtyD,GAC7B,eAAC,KAAe2Q,KAAhB,CAAqBjD,GAAE,UAAK1tC,KAAMtK,MAAM,GAAjB,MAAvB,SACE,eAAC,GAAD,CACE4zJ,cAAeA,EACf30E,aAAc61E,EACd9sG,wBAAyBA,EACzB1d,eAAgBA,MAGlB,QAEJ,MAGNqqH,GAAS52I,aAAe,CACtBo1I,qBAAqB,EACrB92F,cAAe,EACfyF,cAAc,GCzFT,IAAMizF,GAAe,SAAC,GAKtB,IAJLC,EAII,EAJJA,cAII,IAHJhtG,+BAGI,SAFJnN,EAEI,EAFJA,gBACAo6G,EACI,EADJA,0BAEMzuI,EAAQwuI,IACd,OAAKC,EAEH,uCACIp6G,EAA+C,KAA7B,eAAC,KAAe22C,QAAhB,IACpB,eAAC,KAAD,CAAuB32C,gBAAiBA,EAAxC,SACE,gBAAC,KAAeI,KAAhB,CACEn2C,MAAO+1C,EAAkBvwC,KAAM/I,OAAOsH,aAAeyB,KAAM/I,OAAOqH,gBAAgB,KAClF1F,SAAU8kD,EAA0B19C,KAAMxJ,UAAU,GAAK,KAAO,CAAC,OAAQ,KAAM,KAAM,QACrFoD,WAAYoG,KAAMvJ,YAAYI,KAC9BiC,WAAY4kD,EAA0B,OAAS,OAJjD,UAKE,eAAC,KAAeupC,YAAhB,CAA4B,cAAY,cAAxC,SAAuDixC,OACvD,eAAC,KAAe9wC,eAAhB,CACE5sF,MAAO+1C,EAAkBvwC,KAAM/I,OAAOsH,aAAeyB,KAAM/I,OAAOqH,gBAAgB,KAClF1F,SAAU8kD,EAA0B19C,KAAMxJ,UAAU,GAAK,KAAO,CAAC,OAAQ,KAAM,KAAM,QACrFoD,WAAYoG,KAAMvJ,YAAYI,KAC9BiC,WAAY4kD,EAA0B,OAAS,OAJjD,oBAKOnN,GAAmBr0B,EAAQ,EAAI,IAAM,GAL5C,YAKkDA,EAAMoU,QAAQ,cAhBjC,MCQ5Bs6H,GAAS,SAAC,GAoBhB,IAnBLN,EAmBI,EAnBJA,8BACAzB,EAkBI,EAlBJA,oBACAl0E,EAiBI,EAjBJA,aACA5iB,EAgBI,EAhBJA,cACAyF,EAeI,EAfJA,aACAqhB,EAcI,EAdJA,YACAiJ,EAaI,EAbJA,WACArnC,EAYI,EAZJA,aACAsnC,EAWI,EAXJA,WACApmD,EAUI,EAVJA,aACAykD,EASI,EATJA,kBACAs1C,EAQI,EARJA,oBACA1zC,EAOI,EAPJA,wBACAC,EAMI,EANJA,YACAklE,EAKI,EALJA,gBACAnB,EAII,EAJJA,2BACAhmH,EAGI,EAHJA,eACA0d,EAEI,EAFJA,wBACA3lC,EACI,EADJA,UAEA,EAA0CJ,oBAAS,IAAI0mD,MAAOwf,WAA9D,mBAAOyrE,EAAP,KAAsBiB,EAAtB,KAEMtnE,EAAqByyC,EACvBnzC,aACET,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACApmD,EACAykD,EACA4B,EACAC,GAXwC,OAa1CtN,QAb0C,IAa1CA,OAb0C,EAa1CA,EAAcrkD,QAAQ,GAE1BjS,qBAAU,WACRksI,GAAiB,IAAIlsF,MAAOwf,aAC3B,CAACgrE,EAAqBl0E,EAAcsO,IASvC,OAAOqQ,aAAa3e,GAClB,uCACE,eAAC,KAAeuS,QAAhB,IACA,gBAAC,KAAev2C,KAAhB,CACE/3C,SACE8kD,EACK3lC,EAECvhB,KAAU,GAAK,KADfA,KAAU,GAAK,KAEjB,CAAC,OAAQ,KAAM,KAAM,QAE3BoD,WAAYoG,KAAMvJ,YAAYI,KAC9BmtH,KAAK,gBACL,aAAW,cACXlrH,WAAY4kD,EAA0B,OAAS,OAXjD,UAYE,eAAC,KAAeupC,YAAhB,CAA4B,cAAY,cAAxC,SAAuDixC,OACvD,eAAC,KAAe9wC,eAAhB,CAA+BxtF,WAAW,OAA1C,SACE,eAAC,IAAD,CACEhB,SAAU8kD,EAA0BlnD,KAAU,GAAK,KAAO,EAC1D8oB,UAAS,WAAM0mI,GAxBY1tH,OAAO2qD,GAAsBkkE,GAC9B72H,QAAQ,GAuBgD2yD,GAClF1jE,aAAc+qI,SAKnBh4D,aAA8BtyD,GAC7B,eAAC,KAAe2Q,KAAhB,CAAqBjD,GAAE,UAAK1tC,KAAMtK,MAAM,GAAjB,MAAvB,SACE,eAAC,GAAD,CACE4zJ,cAAeA,EACf30E,aAAcsO,EACdvlC,wBAAyBA,EACzB1d,eAAgBA,MAGlB,QAEJ,MAKN4qH,GAAOn3I,aAAe,CACpBo1I,qBAAqB,EACrB92F,cAAe,EACfyF,cAAc,G,iFCgEDqzF,GA7JU,SAAC,GAA0F,IAAxFn0I,EAAuF,EAAvFA,SAAUo0I,EAA6E,EAA7EA,cAAe3oC,EAA8D,EAA9DA,mBAAoBz+C,EAA0C,EAA1CA,sBAA0B9vD,EAAgB,kBAE/G2yI,EAoBE3yI,EApBF2yI,mBACA/uF,EAmBE5jD,EAnBF4jD,aACAuqB,EAkBEnuE,EAlBFmuE,WACAngD,EAiBEhuB,EAjBFguB,eACAkgD,EAgBEluE,EAhBFkuE,WACArnC,EAeE7mC,EAfF6mC,aACAylG,EAcEtsI,EAdFssI,kBACArnE,EAaEjlE,EAbFilE,YACA68C,EAYE9hH,EAZF8hH,oBACAh8C,EAWE9lE,EAXF8lE,oBACAnkD,EAUE3hB,EAVF2hB,UACAw8B,EASEn+C,EATFm+C,cACAxhB,EAQE38B,EARF28B,gBACAvQ,EAOEpsB,EAPFosB,eACAkkC,EAMEtwD,EANFswD,2BACAsnD,EAKE53G,EALF43G,+BACAxhB,EAIEp2F,EAJFo2F,kBACAP,EAGE71F,EAHF61F,cACAP,EAEEt1F,EAFFs1F,cACAzwD,EACE7kC,EADF6kC,UAGI1gC,EAAYC,wBAAc,CAC9BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYsiB,GAAnC,OAED2gH,EAAW3/G,EAAY,OAAS,OAEtC,EAAkDJ,oBAAS,GAA3D,mBAAOozI,EAAP,KAA0BC,EAA1B,KAEMt1I,EAAegB,GAAYo0I,GAAiB/yI,EAC5CkzI,EAAcv0I,GAAYo0I,EAC1BI,EAA+Bx0I,IAAao0I,EAC5CK,EAAiBz0I,EACjB00I,GAAgB10I,GAAYqB,IAAc+yI,GAAiB/yI,IAAgBA,GAAa+yI,EACxFO,GAA2BtzI,GAAaykC,IAExC8tG,EAAgC1rG,YAAenC,IAAiBY,uCAAuC,GACvGK,EAA0BkB,YAAenC,IAAiBiB,yBAAyB,GACnF+oG,GAA4Bl2G,IAAoBkI,GAAairB,EAE7DgnF,EAAgB,WACpB,IAAMY,IAAgBn6D,WAAWo1D,EAAmBj2H,QAAQ,IACtDi7H,EAAgB3oE,aAAoB/J,EAAarhB,EAAczF,EAAegwB,GAChFg3C,EAAgB,EAUpB,OATIj3C,GAAcA,EAAW7yD,OAAS,IACpC8pG,EAAgBj3C,EAAWzsF,QAAO,SAAC24G,EAAehkB,GAChD,OAAIvvC,EAAaxrB,OAAS,GAAKwrB,EAAan9B,SAAS0sE,EAAaztE,IACzDyxF,EAAgBhkB,EAAan9B,YAE7BmhD,IAER,IAEE11E,OAAOgzH,GAAehzH,OAAOizH,GAAiBxyB,GAGvD,OACE,gBAAC,KAAD,CAAgBngI,SAAU,CAAC,GAAI,KAAM,KAAM,GAA3C,WACGigF,GAAgBwyE,GAA2B91H,IAAc2iG,MAAsB3nF,EAU5E,KATF,eAAC+tF,EAAA,EAAD,aACEC,YAAahwC,IAAcE,KAC3B7sD,eAAgBA,EAChB8zF,oBAAqBA,EACrBgD,cAAe9kH,EAAUmuE,WACzB42C,iBAAkBj/C,EAClBxV,2BAA4BA,GACxBtwD,IAIP8B,IAAiB66B,EAAkB,eAAC,GAAD,eAAiB38B,IAAgB,KACpE8C,EACC,eAAC,GAAD,2BACM9C,GADN,IAEE43G,+BAAgCA,EAChCxhB,kBAAmBA,EACnBmY,mBAAoBA,EACpBuoC,cAAeA,EACfhzB,SAAUA,EACV+uB,yBAA0BA,EAC1BC,wBAAyBhjF,KAEzB,KACHynF,EACC,eAAC,GAAD,2BACMv3I,GADN,IAEE43G,+BAAgCA,EAChC/hB,cAAeA,EACfP,cAAeA,KAEf,KACHrwB,GAAeniE,GAAYorE,EAC1B,eAAC,GAAD,CACEvxC,gBAAiBA,EACjBuxC,WAAYA,EACZrnC,aAAcA,EACditG,YAAaxH,EACbyH,SAAUoD,IAEV,KACHlyE,GAAeniE,GAAYq7C,EAAgB,eAAC,GAAD,2BAAYn+C,GAAZ,IAAuB28B,gBAAiBA,KAAsB,KAEzG06G,IAAgB16G,EAAkB,eAAC,GAAD,2BAAuB38B,GAAvB,IAAkCmE,UAAWA,KAAgB,KAC/FrB,IAAa65B,EACZ,eAAC,GAAD,aACEmN,wBAAyBA,EACzBgtG,cAAeA,EACfC,0BAA2BjnF,GACvB9vD,IAEJ,KACHs3I,IAAiC36G,EAChC,eAAC,GAAD,yBACE+5G,8BAA+BA,EAC/B5sG,wBAAyBA,GACrB9pC,GAHN,IAIEquE,YAAa+oE,EACbhrH,eAAgBA,KAEhB,MAEHorH,GAAgB1tG,GAA4BnN,EAOzC,KANF,eAAC,GAAD,yBACE+5G,8BAA+BA,GAC3B12I,GAFN,IAGEquE,YAAa+oE,EACbhrH,eAAgBA,KAGnBorH,IAAgB76G,EACf,eAAC,GAAD,aAAWmN,wBAAyBA,GAA6B9pC,IAC/D,MACHw3I,GAAgBF,GAAiC36G,EAAmC,KAAjB,eAAC,GAAD,IACnE66G,GAAe1tG,IAA4BnN,EAC1C,eAAC,GAAD,yBACEmN,wBAAyBA,EACzB3lC,UAAWA,EACXuyI,8BAA+BA,GAC3B12I,GAJN,IAKEquE,YAAa+oE,EACbhrH,eAAgBA,KAEhB,KACHtpB,GAAY65B,GAAmBm6G,IAC9B,eAAC,GAAD,yBACEA,cAAeA,GACX92I,GAFN,IAGE28B,gBAAiBA,EACjBo6G,0BAA2BjnF,KAE3B,SChLG8nF,GAAiB,CAC5BC,UAAWruJ,aAAaC,IAAiBiE,IAAK,YAC9CoqJ,gBAAiBtuJ,aAAaC,IAAiBiE,IAAK,iBACpDqqJ,kBAAmBvuJ,aAAaC,IAAiBiE,IAAK,kBACtDsqJ,iBAAkBxuJ,aAAaC,IAAiBoE,UAAW,0CCmBvDoqJ,GAAW,SAAC,GAAyF,IAAD,IAAtFC,qBAAsF,MAAtE,EAAsE,EAAnExH,EAAmE,EAAnEA,WAAYvzG,EAAuD,EAAvDA,eAAgB4jC,EAAuC,EAAvCA,aAAc6gD,EAAyB,EAAzBA,SAAUqwB,EAAe,EAAfA,SACzF,EAA0CluI,oBAAS,GAAnD,mBAAO25B,EAAP,KAAsBy6G,EAAtB,KACA,EAAkCp0I,oBAAS,GAA3C,mBAAOq0I,EAAP,KAAkBC,EAAlB,KACMC,EAAsBtnC,iBAAOknC,GAC7BK,EAAgBx8G,SAASioF,cAAc,qBAC7C,EAA0CjgH,oBAAsB,OAAbw0I,QAAa,IAAbA,OAAA,EAAAA,EAAe5mC,cAAe,EAAI,GAArF,mBAAOt0E,EAAP,KAAsBm7G,EAAtB,KAEMrsD,EAAO9jE,OAAOC,SAASC,SACvBkwH,EAAuBtsD,EAAKziF,SAAS,UAAYyiF,EAAKziF,SAAS,eAAiByiF,EAAKziF,SAAS,WAE9FgvI,EAAepzB,uBAAY,WAC/B,IAAMmsB,EAAa8G,GACF,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAe7G,gBAA6B,OAAb6G,QAAa,IAAbA,OAAA,EAAAA,EAAe7G,cAAe,IAC7D9vB,EACA,GACA,GACJ42B,GAA8B,OAAbD,QAAa,IAAbA,OAAA,EAAAA,EAAe5mC,cAAe,EAAI,GACnD,IAAMgnC,EAAqBtwH,OAAOuwH,QAE9BD,EAAqBlH,GAAY4G,GAAa,GAC9CM,GAAsBlH,GAAY4G,GAAa,KAClD,CAACz2B,EAAU22B,IAyBd,OAvBA9tI,qBAAU,WAER,OADA4d,OAAOupH,iBAAiB,UAAU,SAAApjE,GAAC,OAAIkqE,EAAalqE,MAC7C,WACLnmD,OAAOwpH,oBAAoB,UAAU,SAAArjE,GAAC,OAAIkqE,EAAalqE,SAExD,CAACkqE,IAEJjuI,qBAAU,WACR,GAAIytI,EAAgBI,EAAoBhnC,QAAS,CAC/C6mC,GAAiB,GACjBG,EAAoBhnC,QAAU4mC,EAC9B,IAAMW,EAAiB7tI,YAAW,WAChCmtI,GAAiB,KAChB,MAEH,OAAO,WACLjtI,aAAa2tI,IAENX,IAAkBI,EAAoBhnC,UAC/CgnC,EAAoBhnC,QAAU4mC,KAE/B,CAACA,IAGF,gBAAC,KAAD,CAAmB/xJ,UAAU,SAASogB,QAASmqI,EAAYvzG,eAAgBA,EAA3E,UACE,eAAC,KAAD,CAAa/6B,IAAKw1I,GAAeC,UAAWx1I,IAAI,SAC/C61I,EAAgB,EACf,gBAAC,KAAD,CAAuBx6G,cAAeA,EAAtC,UACGA,EACC,eAAC,IAAD,UACE,eAAC,IAAD,CAAWt7B,IAAKw1I,GAAeI,iBAAkBvqH,KAAK,kBAAkBonH,UAAU,EAAMC,MAAM,MAE9F,KACJ,eAAC,KAAD,UACE,eAAC,IAAD,CAAM9vJ,SAAU,EAAGgB,WAAW,OAAOd,WAAY,GAAI0B,MAAM,cAA3D,SACGsxJ,MAGJO,GAAwBL,IAAcx2B,GAAYqwB,GACjD,eAAC,KAAD,CAA4B50G,cAAeA,IACzC,QAEJ,KACFF,IAAkBs7G,GAAyB72B,GAAaqwB,EAOtD,KANF,gBAAC,KAAD,WACE,eAAC,KAAD,IACA,gBAAC,IAAD,CAAMlmI,GAAG,QAAT,UACGu4G,KADH,KACmB,gBAAC,IAAD,CAAMv4G,GAAG,OAAT,cAAkB2Y,OAAOq8C,GAAcrkD,uBASpEu7H,GAASp4I,aApFY,CACnBq4I,cAAe,EACfxH,WAAY,cAoFCuH,U,UCzFTa,GAAmB,SAAC,GAA+C,IAA7Cl5C,EAA4C,EAA5CA,uBAAwBgxC,EAAoB,EAApBA,cAKlD,OACE,gBAAC,IAAD,CAAMjqI,cAAc,SAAS9gB,WAAW,SAAxC,UACE,eAAC,KAAD,CAAyB+zC,GAAI,CAAC,OAAQ,OAAQ,GAAI,GAAI,IAAtD,SACE,sBACEx3B,IAAKwuI,EAAgBmI,KAA2BC,gBAAkBpB,GAAeE,gBACjFz1I,IAAI,sBAGR,eAAC,IAAD,CAAMzb,MAAM,mBAAmB5B,SAAU,CAAC,GAAIgB,WAAW,OAAOd,WAAY,CAAC,IAAK00C,GAAI,GAAtF,SACGg3G,EAAgBtsB,KAA6BA,OAE/CssB,EACC,eAAC,IAAD,CACEhqJ,MAAM,mBACN5B,SAAU,CAAC,GACXgB,WAAW,SACXd,WAAY,CAAC,IACb00C,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GACjBzzC,UAAU,SACViC,MAAM,QAPR,SAQGk8H,OAED,KACJ,eAAC,IAAD,CACEl8H,MAAOwoJ,EAAgB,QAAU,QACjCh3G,GAAIg3G,EAAgB,CAAC,EAAG,EAAG,EAAG,EAAG,GAAK,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,QACvE92G,GAAI,EAHN,SAIE,eAAC,IAAD,CAAQ16B,QAASwxI,EAAgB,UAAY,OAAQnxI,OAAK,EAAC8G,QA9BtC,WACzB8hB,OAAOC,SAASi3B,KAAOqgD,EAAsB,UAAMA,EAAN,QAAqCloF,KAAOU,KAAKF,MA6B1F,SACG04H,EAAgBtsB,KAA0BA,aAQrDw0B,GAAiBj5I,aA7CI,CACnB+/F,uBAAwB,IA8CXk5C,UCpCFrJ,GAAS,SAAC,GAA8B,IAA5ByH,EAA2B,EAA3BA,cAAe10H,EAAY,EAAZA,MAKtC,OAJkBpe,wBAAc,CAC9BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYsiB,GAAnC,OAIE,eAAC,KAAD,CAAmBje,WAAW,OAA9B,SAAsCo/H,OAI7C,gBAAC,IAAD,WACE,eAAC,KAAD,CAAkBp/H,WAAW,OAA7B,SAAqCo/H,OACpC5kC,aAAal9D,IACZ,gBAAC,KAAD,WACE,eAAC,KAAD,CAAuBt9B,WAAW,OAAlC,oBAA8Cs9B,KAC9C,eAAC,KAAD,UAAqB00H,EAAgB,UAAY,sBAS3DzH,GAAO5vI,aAAe,CACpBq3I,eAAe,EACf10H,MAAO,G,mICbIy2H,GAAU,SAAC,GAQjB,IAPL/I,EAOI,EAPJA,kBACAgH,EAMI,EANJA,cACAh2C,EAKI,EALJA,UACAg4C,EAII,EAJJA,0BACAppF,EAGI,EAHJA,sBACAqpF,EAEI,EAFJA,oBACGn5I,EACC,kBAEJ,EAA4C+D,oBAAS,GAArD,mBAAOo5B,EAAP,KAAuBi8G,EAAvB,KAEMC,EAAiB,WACrBD,GAAkB,SAAAE,GAAI,OAAKA,MAGvB13B,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAY6mB,GAAnC,OAGDuqI,EAAW7tI,wBAAc,CAAE4C,SAAU5a,KAAMvL,YAAYmzF,KAEvD/0B,EAAU8zF,uBAGdhyE,EA+BE/gE,EA/BF+gE,aACAmN,EA8BEluE,EA9BFkuE,WACArnC,EA6BE7mC,EA7BF6mC,aACAo+B,EA4BEjlE,EA5BFilE,YACArhB,EA2BE5jD,EA3BF4jD,aACAzF,EA0BEn+C,EA1BFm+C,cACAgwB,EAyBEnuE,EAzBFmuE,WACAC,EAwBEpuE,EAxBFouE,wBACA0zC,EAuBE9hH,EAvBF8hH,oBACA/5F,EAsBE/nB,EAtBF+nB,aACAykD,EAqBExsE,EArBFwsE,kBACAh8C,EAoBExwB,EApBFwwB,cACAovE,EAmBE5/F,EAnBF4/F,uBACAjjE,EAkBE38B,EAlBF28B,gBACA48G,EAiBEv5I,EAjBFu5I,UACAntH,EAgBEpsB,EAhBFosB,eACA+6B,EAeEnnD,EAfFmnD,mBACAonD,EAcEvuG,EAdFuuG,mBACAtY,EAaEj2F,EAbFi2F,sBACA40B,EAYE7qH,EAZF6qH,wBACAI,GAWEjrH,EAXFirH,eACA2lB,GAUE5wI,EAVF4wI,cACA/gH,GASE7vB,EATF6vB,YACA5J,GAQEjmB,EARFimB,QACA2K,GAOE5wB,EAPF4wB,UACAjP,GAME3hB,EANF2hB,UACAiO,GAKE5vB,EALF4vB,SACA++E,GAIE3uG,EAJF2uG,gBACA1lD,GAGEjpD,EAHFipD,eACAqH,GAEEtwD,EAFFswD,2BACAonD,GACE13G,EADF03G,mBAgCI8hC,GAAehpH,GAAiBjwC,OAAOiB,KAAKgvC,GAAenV,OAAS,EAEtE68H,GAAgB,EAChBv7G,GAAmB68G,KAarBtB,GAZsB9pE,EACnBjuD,QAAO,SAAAiP,GAAW,OAAKA,EAAYugB,gBACnCluD,QAAO,SAACC,EAAK0tC,GACZ,OAAIA,EAAYk1B,aAAe5sD,IAAoBC,aAC1CjW,EAAM,EAEX0tC,EAAYhJ,SACP1kC,EAAM0tC,EAAYhJ,SAEpB1kC,IACN,IAMHi7C,GAAmBilF,IAEnB7lF,SAASpwC,KAAKrH,MAAMiC,SADlB42C,EAC6B,SAEA,QAK/BR,GACFsiB,EAAQI,QAAO,SAAA3rB,GACE,SAAXA,GACF0lH,GAAkB,MAMxB,IAAMxG,GAA0B,SAAC7uH,EAAMrb,EAAMb,EAAW4xI,GACtDv4C,EACE,CACEnzC,oBAAqBi3C,IAAWmB,kBAChCl4C,OAAQ,CACNlqC,OACArb,OACAb,YACA4xI,0BAGJ,IAKJhvI,qBAAU,WACHkyB,GAAoBwqB,GACrBA,IAAuB/6B,IACzBmiF,IACAtY,IACA40B,OAED,CACD1jE,EACA8uC,EACAsY,EACA5xE,EACAkuF,EACAz+F,IAIF3hB,qBAAU,WAER,GAAKkyB,GAEAnM,IAAiBogH,GAAtB,CACA,IAAM8I,EAAiBxuH,aAAalB,QAAQ,YAE5C,GAAK0vH,EAAL,CACA,IAAMC,EAAYxgC,aAAY,WAG5B,GAFcygC,YAAiBF,GAErBl3H,MAAQ,EAMhB,OALAyoG,KACA1c,IACAtY,SACAqjB,cAAcqgC,KAIf,KACH,OAAO,WACLrgC,cAAcqgC,QAEf,CAAC1jD,EAAuBsY,EAAoBqiC,GAAej0G,EAAiBnM,EAAey6F,KAE9F,IAAMiqB,GAAc5vB,sBAAW,uCAC7B,WAAM92C,GAAN,yBAAAhkF,EAAA,6DACEgkF,EAAEu3C,OAAO8zB,UAAUtoI,IAAI,YACjBuoI,EAFR,OAE2BtpH,QAF3B,IAE2BA,GAF3B,UAE2BA,EAAe2nF,mBAF1C,aAE2B,EAA4BhzG,MACnD,SAAAwuC,GAAI,OAAIA,EAAKhsB,WAAavpB,KAAeE,yBAErCisE,EAAgB,CACpBzN,eAAgBjtC,GAChB8sC,QAASr5D,iBAAemB,OAAOwhB,GAAS5yB,IAAaC,SACrDspE,UAAWt5D,iBAAemB,OAAOmsB,GAAWv9B,IAAaC,SACzDw6G,UAAWnsF,GACX+6C,SAAUtwC,EACV01G,SAAUgY,EAAiB5sH,SAC3B0C,SAAUA,GAAS9kB,KAAK,KACxBjI,KAAMisI,cACNiL,UAAWC,cACX31E,UAAW7zC,EAAclD,cACzBghF,eAAe,EACfb,uBAAuB,EACvBxyC,gBAAiB6+E,EAAiB7+E,iBAE9B2zC,EApBR,2BAqBOp+E,GACAspH,GAtBP,SAyBQnrC,GAAgBpkC,EAAeqkC,GAzBvC,OA0BG,OAADpgC,QAAC,IAADA,GAAA,UAAAA,EAAGu3C,cAAH,mBAAW8zB,iBAAX,SAAsBI,OAAO,YA1B/B,2CAD6B,sDA6B7B,CAACpqH,GAAa5J,GAAS2K,GAAWhB,GAAUjO,GAAWyK,EAAgBoE,EAAem+E,KAyCxF,OAtCAlkG,qBAAU,WAAO,IAAD,EACRyvI,EAA2Bn+G,SAASioF,cAAc,sBACxD,GAAKk2B,EAEL,IACe,OAAb1pH,QAAa,IAAbA,OAAA,EAAAA,EAAe7I,YAAavpB,KAAeC,+BAC9B,OAAbmyB,QAAa,IAAbA,GAAA,UAAAA,EAAe2nF,mBAAf,eAA4B98F,QAAS,EACrC,CAAC,IAAD,MACA6+H,EAAyB51J,MAAMsB,QAAU,QACzC,IAAMk0J,EAAgB,OAAGtpH,QAAH,IAAGA,GAAH,UAAGA,EAAe2nF,mBAAlB,aAAG,EAA4BhzG,MACnD,SAAAwuC,GAAI,OAAIA,EAAKhsB,WAAavpB,KAAeE,yBAErC67I,EAAY,OAAG3pH,QAAH,IAAGA,GAAH,UAAGA,EAAe2nF,mBAAlB,aAAG,EAA4BhzG,MAC/C,SAAAwuC,GAAI,OAAIA,EAAKhsB,WAAavpB,KAAeC,gCAErCoe,EAAK,WAAmB,OAAhBq9H,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBrhC,yBAAlB,OAA2C0hC,QAA3C,IAA2CA,OAA3C,EAA2CA,EAAc1hC,+BAA5D,QAAsF,EAE3FJ,EAAyB9hC,YAA0B1mD,GAAaD,IAChEwnE,EAAa,CACjB,WAAYihB,EACZ,UAAWh+D,KAAKwkF,MAAMpiH,GACtB,gBAAiBP,aAAU,OAAQm8F,IAETt8E,SAASioF,cAAc,2BAC/Bo2B,UAAY3+H,aAAiC6oG,KAA8BltB,GAC/F,IAAMijD,EAA4Bt+G,SAASioF,cAAc,yCACzDq2B,EAA0BD,UAAY5/H,aACpC8pG,KACApoG,aAAU,OAAQ+sC,IAClB,iBAEFoxF,EAA0BzI,iBAAiB,QAASsD,IAAa,QAGjEgF,EAAyB51J,MAAMsB,QAAU,SAE1C,CAACqjE,GAAgBz4B,EAAe0kH,GAAarlH,GAAaD,KAEzDspH,EAEA,eAAC,IAAD,CAAKhyI,GAAI,EAAT,SACE,eAACwjH,EAAA,EAAD,aACEC,YAAahwC,IAAcE,KAC3B7sD,eAAgBhuB,EAAUguB,eAC1B8zF,oBAAqBA,EACrBgD,cAAe9kH,EAAUmuE,WACzB42C,iBAAkB/kH,EAAU8lE,oBAC5BxV,2BAA4BA,IACxBtwD,MAOV,gBAAC,GAAD,CACE1b,MACGq4C,EAEG,KADA,CAAEt2C,OAAQu7H,EAAW,OAAS,oBAAqBz8H,aAAcy8H,EAAW,gBAAkB,QAGpGsuB,qBAAoBtuB,GAAYs1B,IAAwBhH,EAN1D,UAOIvzG,EAIE,KAHF,eAAC,GAAiB8yG,OAAlB,UACE,eAAC,GAAD,CAAQyH,cAAeA,EAAe10H,MA5NrCkC,OACLo9F,EACKo1B,EAUCvoE,aACET,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACApmD,EACAykD,EACA4B,GAlBFH,aACEC,EACArnC,EACAo+B,EACArhB,EACAzF,EACAgwB,EACAC,GACA1xD,QAAQ,GAYZqkD,EAAarkD,QAAQ,SAyMxBigB,GAAoBw8G,GAAwBI,EASzC,KARF,eAAC,GAAD,CACE7I,WAAY2I,EACZnB,cAAeA,GACft2B,SAAUA,EACVqwB,SAAUA,EACVlxE,aAAcA,EACd5jC,eAAgBA,IAIpB,eAAC,GAAD,2BACMn9B,GADN,IAEE03G,mBAAoBA,GACpBi5B,gBAAiB6I,GACjBr8G,eAAgBA,EAChBuzG,WAAY2I,EALd,UAOG18G,GAAqB68G,KAAgB5I,GAGpC,eAAC,GAAiBpB,QAAlB,CAA0B7yG,gBAAiBA,EAA3C,SACG,YAAmB,IAAhB75B,EAAe,EAAfA,SACF,OACE,eAAC,GAAD,aACEA,SAAUA,EACVo0I,cAAeA,EACftE,wBAAyBA,GACzBlC,WAAY2I,EACZnE,YAAaA,GACb3mC,mBAAoBA,EACpBz+C,sBAAuBA,GACnB9vD,OAbZ,eAAC,GAAD,CAAkB4/F,uBAAwBA,EAAwBgxC,cAAeA,YA0B3FqI,GAAQp5I,aAAe,CACrBqwI,mBAAmB,GC7PrB,IAAMoK,GAAsB,SAACpD,EAAe7rI,GAC1C,OAAO6rI,EAAgBr0H,YAAgBxX,GAASoyD,YAAqBpyD,IAuIjEu1G,GAAqB,CACzBtrB,kBACAO,kBACAO,sBACAH,0BACAiL,cACA2pB,wBAAyBA,IACzBE,sBAAuBA,IACvBE,eAAgBA,IAChBvT,uBACAE,mCACArJ,uBACAlB,kBACAD,6BACAD,uBACAwB,oBACA29B,uBAGIiO,GAAc15B,mBAvJI,SAACx1G,EAAD,GAAqC,IAA3Bid,EAA0B,EAA1BA,SAAUzgB,EAAgB,EAAhBA,UAClC0gB,EAAaD,EAAbC,SAEF2uH,EAAgB3uH,EAAS7e,SAAS,YAClC8wI,EAAmBjyH,EAAS7e,SAAS,wBACrC+wI,EAAelyH,EAAS7e,SAAS,oBACjCyvI,EAAsBjC,GAAiBsD,GAAoBC,EAG3DlB,EADU,CAAC,eAAgB,4BACPz6E,MAAK,SAAA47E,GAC7B,OAAIA,aAAmBvrC,OACdurC,EAAQvoI,KAAKoW,GAEfA,EAAS7e,SAASgxI,MAGrBx8G,EAAa3V,EAAS7e,SAAS,SAE/B89B,EAAmB8K,YAAoBjnC,EAAM5a,UAE7CiiE,EAAkBwK,aAAoB7xD,EAAMswD,aAE5CyB,EAAqBC,YAAkChyD,EAAMuZ,OAE7DmD,EACHivB,YAAQ0b,IAAqB1b,YAAQomB,GAElCygC,YACEj7E,YAAqBvX,EAAMuZ,OAC3B4rB,YAAiBnlC,EAAM5a,UAAYwtE,YAAc5yD,EAAMuZ,OACvDlC,YAAarX,EAAMuZ,OACnBjC,YAActX,EAAMuZ,QALtB04C,YAAuB5K,EAAiB0K,EAAoB5sB,YAAiBnlC,EAAM5a,WASnFw4C,EAA2B+B,YAAenC,IAAiBI,0BAA0B,GACrFC,EAA2B8B,YAAenC,IAAiBK,0BAA0B,GACrFC,EAA2B6B,YAAenC,IAAiBM,0BAA0B,GACrFwxG,EAAuCr3I,iBAAe4P,UAC1D5P,iBAAemB,OAAO0gB,YAAW9Z,EAAMgpB,OAAQhhC,IAAaC,SAC5DgQ,iBAAemB,OAAOwiE,YAAuB57D,EAAMswD,aAActoE,IAAaC,SAC9EgQ,iBAAemB,OAAOyiE,YAAqB77D,EAAMswD,aAActoE,IAAaC,UAG1E++I,EAA0B,EAE1BppG,EACFopG,EAA0B3tH,OAAOoiD,YAAuBz7D,EAAMswD,cACrDzyB,EACTmpG,EAA0B3tH,OAAOqiD,YAAuB17D,EAAMswD,cACrDxyB,IACTkpG,EAA0B3tH,OAAOsiD,YAAuB37D,EAAMswD,eAGhE,IAAMy2E,EACJuI,IACC1xG,GAA4BC,GAA4BC,GAErDoqG,EAAkBlB,EAA0BhyD,YAAuBh1E,EAAMgpB,OAIzEjI,EAAiBia,YAAkBh7B,EAAM+6B,cAE/C,MAAO,CACLxsB,QACE/R,IAAcstE,IAAwBx+E,KAClC2M,iBAAemB,OAAO0gB,YAAW9Z,EAAMgpB,OAAQhhC,IAAagB,cAC5Du/F,YAAsBzuE,YAAW9Z,EAAMgpB,QAC7CqnB,SACE7zC,IAAcstE,IAAwBx+E,KAClC2M,iBAAemB,OAAOw9D,YAAY52D,EAAMgpB,OAAQhhC,IAAagB,cAC7Du/F,YAAsB3xB,YAAY52D,EAAMgpB,QAC9C+5C,wBAAyB5mC,EACzBo2B,eAAgBD,YAAkBtyD,GAClCg2D,mBAAoBtD,YAAsB1yD,GAC1CizC,qBAAsBqpC,YAAwBt8E,EAAM0uC,OACpDg9B,eAAgBH,YAAmBqsB,YAAe53F,EAAMoW,QAASu1D,YAAa3rE,EAAMoW,QAAS5Z,GAC7FsqI,qBAAsBpqH,GAAgBA,EAAa1M,OAAS,EAC5D45H,oBAAqBztG,GAAoBA,EAAiBnsB,OAAS,EACnE2xG,kBAAmBhtB,YAAyB5zE,GAC5CzE,SAAUD,YAAYrc,EAAMuZ,OAC5BqkC,eAAgBi6C,YAAkB73F,EAAMoW,QACxCuM,eAAgBqyD,YAAuBh1E,EAAMgpB,OAC7C6iH,cAAeA,EACfzoE,cAAe99B,YAAsBtlC,EAAM5a,UAC3Co0C,UAAWo/B,YAAkB54D,GAC7BsnI,mBAAoB3mE,YAAsB3gE,EAAMuZ,OAChD01G,WAAYxuD,YAAiBzgE,EAAMuZ,OACnCupD,WAAYzQ,YAAmBryD,EAAMuZ,OACrCm8C,aAAcu5E,GAAoBpD,EAAe7rI,GACjD0c,aAAcA,EACdo2B,cAAe8nC,YAA4B56E,EAAMstC,SACjDiL,aAAcoiC,YAAoB36E,EAAMstC,SACxCssB,YAAaA,YAAY55D,GACzB6iE,WAAYgY,YAAc76E,EAAMstC,SAChC9R,aAAcotD,YAAgB5oF,EAAMvgB,OACpC8vJ,kBAAmB1mD,YAAqB7oF,EAAMvgB,OAC9Cg3H,oBAAqB7lD,YAAkB5wD,EAAMstC,SAC7CmtB,oBAAqBA,YAAoBz6D,EAAMswD,aAC/C6Q,kBAAmBD,YAAqBlhE,GACxC+mI,2BAA4BA,EAC5Bh/E,iCAAkC+S,aAAoC96D,EAAMswD,aAC5E02E,wBAAyBA,EACzBkB,gBAAiBA,EACjB5xH,UAAW/B,YAAavU,EAAMvgB,OAC9BshC,iBACAoE,cAAeq7C,YAAiBxgE,EAAMuZ,OACtCg7E,uBAAwBjyD,YAA0BtiC,EAAM+6B,cACxDmzG,YACAr7G,aACA28G,UAAWxzD,YAAah8E,EAAM0uC,OAC9B9kB,gBAAiB4yD,YAAmBx8E,EAAM0uC,OAC1C4D,4BAA6BmqC,YAA+Bz8E,EAAM0uC,OAClEpd,gBACE90B,IAAcstE,IAAwBx+E,MACtCoxE,YAAgB18D,EAAMswD,cACtB3wB,YAAenC,IAAiBqB,oBAAoB,GACtDid,mBAAoBkoF,EAAsBhkI,EAAM8vD,MAChD/T,oBAAqBmoF,EAAuBlkI,EAAM8vD,MAClDy1E,cAAetB,EAAejkI,EAAM8vD,MACpCtrC,YAAaozE,YAAe53F,EAAMoW,QAClCmO,SAAUtP,YAAYjV,EAAMoW,QAC5BwE,QAASd,YAAW9Z,EAAMgpB,OAC1BzD,UAAWqxC,YAAY52D,EAAMgpB,OAC7Bi8B,2BAA4BgY,YAA8Bj9D,EAAMswD,aAChE7rC,UAAWknD,YAAa3rE,EAAMoW,QAC9BquC,sBAAuB4W,YAAyBr7D,EAAMswD,aACtDw9E,yBAuByCv4B,GAAzBC,CAA6Co4B,I,UC1QjE,SAAS6B,KACP,MAAmDzyH,OACnD,MAAO,CACLjgC,MAFF,EAAQ2yJ,WAGN11J,OAHF,EAA2B0sJ,aAO7B,I,kBAiBeiJ,GAjBa,WAC1B,MAAgDj3I,mBAC9C+2I,MADF,mBAAOG,EAAP,KAAyBC,EAAzB,KAaA,OATAzwI,qBAAU,WACR,SAAS0wI,IACPD,EAAoBJ,MAItB,OADAzyH,OAAOupH,iBAAiB,SAAUuJ,GAC3B,kBAAM9yH,OAAOwpH,oBAAoB,SAAUsJ,MACjD,IAEIF,G,UClBIG,GAAe97I,aAAOkkG,KAAPlkG,CAAH,6BAEZ+7I,GAAuB/7I,aAAOkK,IAAPlK,CAAH,iFAMpBkwI,GAAUlwI,aAAOyD,IAAPzD,CAAH,4EACHlT,KAAMtK,MAAM,IAIhBwxF,GAAUh0E,aAAOyD,IAAPzD,CAAH,iFACElT,KAAM/I,OAAOQ,eAAe,IAC/BuI,KAAMtK,MAAM,IAGlB2tJ,GAASnwI,aAAOgC,IAAPhC,CAAH,iLACNlT,KAAMtK,MAAM,GACdsK,KAAM/I,OAAOK,aAAa,KAKR0I,KAAM/I,OAAOC,iBAAiB,MAG9C0vH,GAAQ1zG,aAAOmB,IAAPnB,CAAH,0IACDlT,KAAMvJ,YAAYI,KACxBmJ,KAAM/I,OAAOI,kBAAkB,M,yEC5B7B63J,GAAe,SAAC,GAAwC,IAAtCC,EAAqC,EAArCA,OAAQx0I,EAA6B,EAA7BA,SAAa/G,EAAgB,kBAC5D4hH,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYsyF,GAAnC,OAED8+D,EAAW7tI,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAY6mB,GAAnC,6BAA0Dtb,KAAMvL,YAAYsiB,GAA5E,OAEP,OACE,eAACi4I,GAAD,yBACEz3C,OAAQ43C,EACRx2J,QAAS,GACLib,GAHN,IAIE3a,OAAQu8H,GAAYqwB,EAAW,oBAAsB,KACrD9sJ,aAAcy8H,GAAYqwB,EAAW,gBAAkB,OACvD7pJ,MAAOw5H,EAAW,MAAQ,QAN5B,SAOG76G,MAKPu0I,GAAal8B,YAAc,YAAkB,IAAf74G,EAAc,EAAdA,QAC5B,OACE,eAAC80I,GAAD,CAAsB90I,QAASA,EAA/B,SACE,eAACi1I,GAAA,EAAD,OAKNF,GAAa9L,QC5Be,SAAC,GAAgC,IAA9BzoI,EAA6B,EAA7BA,SAAa/G,EAAgB,kBAC1D,EAA0C+D,mBAAS,GAAnD,mBAAO03I,EAAP,KAAsBC,EAAtB,KACQr2J,EAAW21J,KAAX31J,OAEFu8H,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAYsyF,GAAnC,OAGD8+D,EAAW7tI,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAY6mB,GAAnC,6BAA0Dtb,KAAMvL,YAAYsiB,GAA5E,OAQDw4I,EAAcr2B,uBAAY,SAAAs2B,GACjB,OAATA,GACFF,EAAiBE,EAAKnqC,wBAAwBpsH,UAE/C,IAEGw2J,EACJx2J,EAZ4B,KAaxBA,EAAM,IACNA,EAAM,IAENy2J,EAAmBL,EAAgB,GAAKA,EAAgBI,EAAgBJ,EAAgBI,EAE9F,OACE,eAAC,GAAD,2BACM77I,GADN,IAEE3a,OAAQ,UAAAu8H,GAAYqwB,EAAc6J,EAAmB,IAAaA,EAAmB,GAA7E,MAFV,SAGE,eAAC,IAAD,CAAKp8C,IAAKi8C,EAAV,SAAwB50I,QDJ9Bu0I,GAAahoE,QAAU,WACrB,OAAO,eAACA,GAAD,KAGTgoE,GAAa7L,OAAS,YAAiC,IAA9B1oI,EAA6B,EAA7BA,SAAa/G,EAAgB,kBACpD,OAAO,eAAC,GAAD,2BAAYA,GAAZ,aAAwB+G,MAGjCu0I,GAAatoC,MAAQ,YAAiC,IAA9BjsG,EAA6B,EAA7BA,SAAa/G,EAAgB,kBACnD,OAAO,eAACgzG,GAAD,2BAAWhzG,GAAX,aAAuB+G,M,aEpC1BirI,GAAiB,SAAC,GAAoC,IAAlC7tI,EAAiC,EAAjCA,UAAW7B,EAAsB,EAAtBA,MAAOyE,EAAe,EAAfA,SAC1C,OACE,eAAC2sE,GAAA,EAAD,CACEpxE,MAAOA,EACPvb,YAAaqF,KAAM/I,OAAOC,iBAAiB,KAC3C6C,UAAU,OACV2qH,UAAU,oBACVN,UAAU,QACVD,iBAAkBpsG,EAClBnf,SAAU,OACV4rH,iBAAkB,gBAAGG,EAAH,EAAGA,WAAH,OAChB,eAAC,IAAD,CAAKrR,IAAKqR,EAAV,SACE,eAAC,KAAer9B,QAAhB,UAAyB3sE,UAsBtBmrI,GAAoB,SAAC,GAA2E,IAAD,IAAxEC,EAAwE,EAAxEA,qBAAsBpqH,EAAkD,EAAlDA,aAAcJ,EAAoC,EAApCA,SAAUo0H,EAA0B,EAA1BA,oBAC1E53I,EAAYC,wBAAc,CAC9B8pC,SAAU9hD,KAAMvL,YAAYsyF,KAG9B,IAAKg/D,EAAsB,OAAO,KAElC,IAAMK,EAAa7qH,IAAavpB,KAAeC,6BAE/C,OACE,uCACE,eAAC,KAAei1E,QAAhB,IACA,eAAC,KAAev2C,KAAhB,CAAqBjD,GAAG,OAAxB,SACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMrtF,WAAW,OAAOhB,SAAU,EAAGE,WAAY,GAAjD,SACGo/H,WAINy3B,EACC,gBAAC,KAAeh/G,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,SAGL,eAAC,KAAerxC,OAAhB,UACE,eAAC,IAAD,CAAMjuF,SAAU,EAAGE,WAAY,GAA/B,oBACOw/B,OAAOq3H,EAAoB9zH,YAAYF,aAAai0H,KAAKt/H,QAAQ,WAI1E,MACgB,OAAnBq/H,QAAmB,IAAnBA,GAAA,UAAAA,EAAqB9zH,mBAArB,mBAAkCF,oBAAlC,eAAgDk0H,QAC/C,gBAAC,KAAel/G,KAAhB,WACE,gBAAC,KAAes2C,YAAhB,WACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAW,OAAOd,WAAY,GAAjD,SACGo/H,OAEH,eAAC,GAAD,CACEngH,UAAWA,EACX7B,MAAOkwI,EAAax3I,IAAoBG,kBAAoBH,IAAoBE,UAChF21G,QAASyT,KAHX,SAIE,eAACmuB,GAAA,EAAD,CAAc3yI,KAAK,gBAGvB,eAAC,KAAemzE,OAAhB,UACE,eAAC,IAAD,CAAMjuF,SAAU,EAAGE,WAAY,GAA/B,oBACOw/B,OAAOq3H,EAAoB9zH,YAAYF,aAAak0H,QAAQv/H,QAAQ,WAI7E,MACFq/H,GACAh0H,EAAajnC,KAAI,SAAAijC,GAAI,OACnB,gBAAC,KAAegZ,KAAhB,WACE,gBAAC,KAAes2C,YAAhB,WACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACG6+B,EAAK0J,OAEP1J,EAAK45E,SACJ,eAAC,GAAD,CACEx5F,UAAWA,EACX7B,MACEkwI,GAA4B,eAAdzuH,EAAK0J,KAAwBzyB,IAAoBG,kBAAoB4oB,EAAK45E,QAE1FkT,QAAS9sF,EAAK0J,KALhB,SAME,eAACglH,GAAA,EAAD,CAAc3yI,KAAK,gBAIzB,eAAC,KAAemzE,OAAhB,UACE,eAAC,IAAD,CAAMjuF,SAAU,EAAGE,WAAY,GAA/B,oBAAwC6+B,EAAKjR,OAAO4J,QAAQ,UAjBtCqH,EAAKpb,WA2BzCupI,GAAkBryI,aAAe,CAC/BsyI,sBAAsB,EACtBpqH,aAAc,GACd+7F,SAAU,I,4BC/HNo4B,GAAY,OAELC,GAAiB78I,aAAO4B,KAAP5B,CAAH,mDAId88I,GAAY98I,KAAOiB,IAAV,gnBAUX27I,GAGEA,GAMEA,IAUX,YACA,GADoB,EAAjBG,WAED,OAAOz6J,aAAP,+WAkBO06J,GAAUh9I,KAAOkjH,KAAV,iIAQP+5B,GAAWj9I,KAAOkjH,KAAV,qJACX05B,ICzCJM,GAAiB,SAAA58I,GACrB,OACE,uCACE,eAACu8I,GAAD,CAAgB55I,mBAAiB,EAAjC,SACE,gBAAC,KAAD,WACE,eAAC,KAAD,UACE,eAAC,KAAD,UACE,gBAAC,KAAew6B,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,gBAAC,IAAD,CAAMxtF,WAAW,SAAjB,UACE,eAAC,IAAD,CAAMb,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,SACGo/H,OAEH,eAAC,KAAD,UACG,gBAAGxhH,EAAH,EAAGA,SAAH,OACC,gBAACs5I,GAAD,CAAWC,WAAYv5I,EAAvB,UACE,eAACw5I,GAAD,IACA,eAACC,GAAD,eAOV,eAAC,KAAe/oE,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,oBAAyD0a,EAAM68I,aAAa//H,QAAQ,eAK5F,gBAAC,KAAD,WACE,gBAAC,KAAeqgB,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,oBAAyD0a,EAAM88I,cAAchgI,QAAQ,WAIzF,gBAAC,KAAeqgB,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,oBAAyD0a,EAAM2jB,YAAY7G,QAAQ,mBAO7F,eAAC,KAAe42D,QAAhB,QAKAqpE,GAAgB,SAAC,GAA6D,IAA3DC,EAA0D,EAA1DA,YAAaC,EAA6C,EAA7CA,kBAAmBd,EAA0B,EAA1BA,oBAIvD,OACE,sCACoB,OAAjBc,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,WAAY,IAAMf,EACpC,uCACE,eAACI,GAAD,UACE,eAAC,KAAD,CAAW55I,mBAAiB,EAACC,YAAa,CAAC,eAA3C,SACE,gBAAC,KAAD,CAAeK,KAAM,cAArB,UACE,eAAC,KAAD,UACE,eAAC,KAAD,UACE,gBAAC,KAAek6B,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,gBAAC,IAAD,CAAMxtF,WAAW,SAAjB,UACE,eAAC,IAAD,CAAMe,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,SACGo/H,OAEH,eAAC,KAAD,UACG,gBAAGxhH,EAAH,EAAGA,SAAH,OACC,gBAACs5I,GAAD,CAAWC,WAAYv5I,EAAvB,UACE,eAACw5I,GAAD,IACA,eAACC,GAAD,eAOV,eAAC,KAAe/oE,eAAhB,UACE,eAAC,IAAD,CACE5sF,MAAOwF,KAAM/I,OAAOK,aAAa,KACjCsB,SAAU,EACVgB,WAAY,IACZd,WAAY,GAJd,oBAIuB03J,EAAYlgI,QAAQ,eAKnD,gBAAC,KAAD,WACE,gBAAC,IAAD,CAAMt0B,MAAM,OAAO0xC,GAAG,OAAOF,GAAG,OAAhC,UACE,eAAC,KAAey5C,YAAhB,UACE,eAAC,IAAD,CAAMzsF,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CACE5sF,MAAOwF,KAAM/I,OAAOK,aAAa,KACjCsB,SAAU,EACVgB,WAAY,IACZd,WAAY,GAJd,mBA9CZ,IAAN,QAAY03J,GAA+B,OAAjBC,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,YAAnB,OAA+BD,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAmBE,sBAAqBrgI,QAAQ,YAqD3F,gBAAC,IAAD,CAAMt0B,MAAM,OAAZ,UACE,gBAAC,KAAeirF,YAAhB,WACE,gBAAC,IAAD,CAAMzsF,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,iBACG23J,QADH,IACGA,OADH,EACGA,EAAmBC,UAAW,KACb,OAAjBD,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,WAAY,EAAIx4B,KAAkBA,QAChD,IACR,eAAC,KAAeplB,OAAhB,OAEF,eAAC,KAAe1rB,eAAhB,UACE,eAAC,IAAD,CAAM5sF,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,sBACmB,OAAjB23J,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,YAAnB,OAA+BD,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAmBE,sBAClDrgI,QAAQ,qBAOtB,eAAC,KAAe42D,QAAhB,OAGF,gBAAC,KAAev2C,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,oBACE62J,EAAsBA,EAAoB9zH,YAAY20H,YAAYlgI,QAAQ,GAAKkgI,EAAYlgI,QAAQ,cASpGsgI,GAAU,SAAC,GAOjB,IANLN,EAMI,EANJA,cACAE,EAKI,EALJA,YACAv7E,EAII,EAJJA,mBACA99C,EAGI,EAHJA,YACAs5H,EAEI,EAFJA,kBACAd,EACI,EADJA,oBAGA,IADyBr8D,aAAak9D,KAAiBl9D,aAAare,GAC/C,OAAO,KAC5B,IAAMo7E,EAAeC,EAAgBn5H,EAErC,OACE,uCACE,eAAC,KAAe+vD,QAAhB,IACCopE,EAAgB,EACf,eAAC,GAAD,CAAgBD,aAAcA,EAAcC,cAAeA,EAAen5H,YAAaA,IAEvF,eAAC,GAAD,CACEw4H,oBAAqBA,EACrBc,kBAAmBA,EACnBD,YAAaA,IAGjB,gBAAC,IAAD,CAAM9iH,GAAG,OAAT,UACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMzsF,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAM5sF,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMsB,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAvF,oBAEI62J,EACIA,EAAoB9zH,YAAYg1H,aAAavgI,QAAQ,GACrD2kD,EAAmB3kD,QAAQ,eCrMhCwgI,GAAkB,SAAC,GAAyE,IAAvEC,EAAsE,EAAtEA,mBAAoB3xH,EAAkD,EAAlDA,sBAAuBC,EAA2B,EAA3BA,qBAC3E,OAAK0xH,EAGH,uCACE,eAAC,KAAe7pE,QAAhB,IACA,eAAC,KAAev2C,KAAhB,CAAqB/2C,WAAW,OAAO8zC,GAAG,OAA1C,SACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,WAKoB,IAA1B94F,GACC,gBAAC,KAAeuR,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,SAGL,eAAC,KAAerxC,OAAhB,UACE,eAAC,IAAD,CAAMjuF,SAAU,EAAGE,WAAY,GAA/B,qBAAyC0kG,OAAOp+D,EAAsB9O,QAAQ,IAAI1uB,QAAQ,IAAK,YAK3E,IAAzBy9B,GACC,gBAAC,KAAesR,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,SAGL,eAAC,KAAerxC,OAAhB,UACE,eAAC,IAAD,CAAMjuF,SAAU,EAAGE,WAAY,GAA/B,qBAAyC0kG,OAAOn+D,EAAqB/O,QAAQ,IAAI1uB,QAAQ,IAAK,eAlCxE,MA4ClCkvJ,GAAgBr9I,aAAe,CAC7Bs9I,oBAAoB,EACpB3xH,sBAAuB,EACvBC,qBAAsB,GC3CjB,IAAMgkH,GAAS,SAAC,GAA8E,IAA5E71H,EAA2E,EAA3EA,QAAS8hC,EAAkE,EAAlEA,SAAU1tB,EAAwD,EAAxDA,eAAgBovH,EAAwC,EAAxCA,aAAcrB,EAA0B,EAA1BA,oBAClEpI,EAAsB,SAAAhjH,GAAM,gBAAOA,EAAP,YAAiBzU,aAAU,QAASyU,KAChE0sH,EAAgB,6BAAI/4B,OAC1B,OACE,wCACI84B,GAAgBrB,IAChB,eAAC,KAAez8C,iBAAhB,CACEC,KAAMw8C,EAAsBA,EAAoBuB,MAAQh5B,KACxD5pG,QAAS2iI,IAGb,gBAAC,KAAetgH,KAAhB,WACE,gBAAC,KAAD,WACE,eAAC,KAAemjD,MAAhB,CAAsBl7F,SAAU,EAAG40C,GAAG,OAAO10C,WAAW,OAAOG,OAAO,OAAtE,SACGi/H,OAEH,eAAC,KAAe75D,KAAhB,CAAqBzlE,SAAS,OAAOK,OAAO,OAAOH,WAAW,OAA9D,SACG62J,EAAsBz4I,iBAAemB,OAAOs3I,EAAoB91H,QAAS,SAAWrM,OAGzF,eAAC,IAAD,CAAMggB,GAAG,OAAOR,KAAK,IAAItzC,eAAe,SAAxC,SACE,eAAC8tJ,GAAA,EAAD,CAAgBhtJ,MAAOwF,KAAM/I,OAAOK,aAAa,KAAMoc,KAAM,OAE/D,gBAAC,KAAD,WACE,eAAC,KAAeogF,MAAhB,CAAsBl7F,SAAU,EAAG40C,GAAG,OAAO10C,WAAW,OAAOG,OAAO,OAAtE,SACGi/H,OAEH,eAAC,KAAe75D,KAAhB,CAAqBzlE,SAAS,OAAOK,OAAO,OAAOH,WAAW,OAA9D,SACG62J,EAAsBz4I,iBAAemB,OAAOs3I,EAAoBnrH,UAAW,SAAW8qB,UAI7F,eAAC,KAAe3e,KAAhB,UACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAY,IAAKd,WAAW,OAA/C,SAEMyuJ,EADHoI,EAEKz4I,iBAAeyP,KAAKgpI,EAAoBnrH,UAAWmrH,EAAoB91H,QAAS,QAE9D+H,a,oBChBrBuvH,GAvCW,WAExB,MAAiCx5I,oBAAS,GAA1C,mBAAOy5I,EAAP,KAAiBC,EAAjB,KACA,EAAgC15I,oBAAS,GAAzC,mBAAO8iD,EAAP,KAAiBogE,EAAjB,KACA,EAAwCljH,mBAAS,IAAjD,mBAAOo3C,EAAP,KAAqB+rE,EAArB,KAGMG,EAAQ/B,uBAAY,WACxBm4B,GAAa,GACbx2B,GAAY,GACZC,EAAgB,MACf,IAEGiB,EAAQ7C,sBAAW,uCACvB,WAAO1jG,EAAUg0D,EAAjB,gCAAAprF,EAAA,iEAAgC69H,iBAAhC,MAA4C,aAA5C,MAAsDD,qBAAtD,MAAsE,aAAtE,MAAgFE,iBAAhF,MAA4F,aAA5F,EACEjB,IACAe,GAAc,GAER/xB,EAAY,IAAI5gB,KAJxB,kBAOyB4gB,EAAU9J,iBAAiB3qE,EAAUg0D,GAP9D,OAOU16D,EAPV,OAQIuiI,GAAa,GACbr1B,GAAc,GACdC,EAAUntG,EAAO2I,MAVrB,kDAYI45H,GAAa,GACbr1B,GAAc,GACdnB,GAAY,GACZC,EAAgB,EAAD,IACfoB,EAAU,EAAD,IAhBb,0DADuB,0DAoBvB,CAACjB,IAGH,MAAO,CAACc,EAAOd,EAAO,CAAEm2B,WAAU32F,WAAU1L,kB,UCPxCuiG,GAAmB,CAAClvJ,IAAuBC,KAAMyP,KAE1C82I,GAAe,SAAC,GAStB,IARLvkJ,EAQI,EARJA,SACAwkJ,EAOI,EAPJA,oBACA0I,EAMI,EANJA,oBACAC,EAKI,EALJA,yBACA5vH,EAII,EAJJA,eACArG,EAGI,EAHJA,SACAyE,EAEI,EAFJA,eACA2vH,EACI,EADJA,oBAEA,EAA8BwB,KAAvBM,EAAP,oBAEMC,EAAoBx4B,sBAAW,sBAAC,8BAAA96H,EAAA,6DAC9B69H,EAAY,SAAAntG,GAChB,IAAM6iI,EAAU7zH,KAAKC,MAAMjP,EAAO8iI,iBAC5BC,EAAY19J,OAAO0kC,OAAO84H,GAChCL,GAAiBliI,KAAjB,MAAAkiI,GAAgB,aAASO,KAErB31B,EAAY,SAAA16D,GAAG,OAAI7iC,QAAQC,IAAI4iC,IAND,SAQ9BiwF,EAAmB,OAACzxH,QAAD,IAACA,OAAD,EAACA,EAAgBA,eAAgB,MAAO,CAAEi8F,YAAWC,cAR1C,2CASnC,CAACl8F,EAAgByxH,IAEdK,EAA6BltC,kBAAO,GAC1CvmG,qBAAU,WACHyzI,EAA2B5sC,UAC9B4sC,EAA2B5sC,SAAU,EACrCwsC,OAED,CAACA,IAEJ,IAAMK,EAAgB,CACpB,eAAgBP,EAChB,gBAAiB5vH,EACjB,iBAAkB9R,aAAU,QAAS0hI,GACrC,kBAAmB1hI,aAAU,QAAS8R,IAGlCowH,EAA6Bz2H,IAAavpB,KAAeC,6BAE/D,OACE,uCACG09I,EAAsB,eAAC,KAAezoE,QAAhB,IAA6B,KACnDyoE,EACGA,EAAoBj4H,OAAOhjC,KAAI,SAACijC,EAAM3I,GACpC,OACE,gBAAC,KAAe2hB,KAAhB,WACE,eAAC,IAAD,CAAKz4C,MAAO,CAAEu8D,SAAU,GAAxB,SACE,gBAAC,KAAewyB,YAAhB,YACO,OAAJtvD,QAAI,IAAJA,OAAA,EAAAA,EAAMqC,UACL,gBAAC,IAAD,CAAMphC,SAAU,EAAGE,WAAY,GAA/B,UACG6+B,EAAKqC,SADR,IACmBrC,EAAK57B,QAAQma,SAGhC,eAAC,IAAD,CAAMtd,SAAU,EAAGE,WAAY,GAA/B,SACG6+B,EAAK57B,QAAQma,SAGb,OAAJyhB,QAAI,IAAJA,OAAA,EAAAA,EAAMs6H,SAAU,eAAC,KAAe1qE,aAAhB,CAA6B0rB,WAAU,OAAEt7E,QAAF,IAAEA,OAAF,EAAEA,EAAMs6H,cAGpE,eAAC,KAAe7qE,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,SACuB,IAApB6+B,EAAK7C,WAAmBojG,KAAxB,WAA4DvgG,EAAK7C,WAAWxE,QAAQ,UAjB3F,sBAAyCtB,OAuB7C,KACHgjI,IAA+BrC,EAC9B,uCACE,eAAC,KAAezoE,QAAhB,IACA,gBAAC,KAAev2C,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,eAKP,KAEH2wB,IACE8G,GACDtrJ,EAAS3P,KAAI,SAACijC,EAAM3I,GAElB,IAAMg8E,EAAa,CACjB,cAAeknD,aAASv6H,EAAKygD,kBAAoBzgD,EAAKygD,iBAAvC,WAA8DzgD,EAAKygD,kBAClF,iBAAkB14D,aAA0BiY,EAAKsL,YAAY1lB,MAAM,OAE/D0lB,EACJtL,EAAKgN,cAAgBj6B,IAAaC,QAAoC,IAA1BgtB,EAAKygD,iBAC7C/oD,aAAiC6oG,KAA0CltB,GAC3ErzE,EAAKsL,YAEX,OAAyB,IAAlBtL,EAAKqC,SAAiB,KAC3B,gBAAC,KAAe2W,KAAhB,WACE,gBAAC,IAAD,CAAKz4C,MAAO,CAAEu8D,SAAU,GAAxB,UACE,gBAAC,KAAewyB,YAAhB,WACE,gBAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,oBAEIw4J,GAAiB5+E,MAAK,SAAArwE,GAAI,OAAIs1B,EAAKQ,YAAY7a,SAASjb,OACvDs1B,EAAKgN,cAAgBj6B,IAAaC,SAChCgtB,EAAK49C,gBAAkBjqE,IAAoBC,cAA0C,IAA1BosB,EAAKygD,kBAC/D,GACAzgD,EAAKqC,SANb,KAQGiJ,KAEF28D,aAAU2xD,EAAqB55H,EAAKQ,cAAgB,eAAC,KAAe26E,OAAhB,OAEtDn7E,EAAKgN,cAAgBj6B,IAAaC,QAAUgtB,EAAK49C,gBAAkBjqE,IAAoBC,aACtF,eAAC,KAAe07E,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGu2B,aAAiC6oG,KAA2B65B,OAG/D,QAEN,eAAC,KAAe3qE,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,oBAAwC6+B,EAAKjR,OAAO4J,QAAQ,UAxBhE,sBAAyCtB,WAmCrD45H,GAAan1I,aAAe,CAC1Bo1I,qBAAqB,G,cChJVsJ,GAAe,SAAC,GAStB,IAAD,IARJjkB,EAQI,EARJA,WACAxkG,EAOI,EAPJA,UACAq4C,EAMI,EANJA,WACA4I,EAKI,EALJA,eACAlyC,EAII,EAJJA,UACAu4G,EAGI,EAHJA,aACAP,EAEI,EAFJA,kBACAd,EACI,EADJA,oBAEMn6B,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,KAAMvL,YAAY6mB,GAAnC,OAUP,OACE,uCACE,eAAC,KAAe4rE,QAAhB,CAAwBC,gBAAiB,IACzC,gBAAC,KAAex2C,KAAhB,CAAqB/2C,WAAW,OAAO8zC,GAAI,EAA3C,UACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACG62J,EAAmB,OAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAqB96H,QAAQwM,KAAOqI,GAAwBwkG,MAGvF,eAAC,KAAe9mD,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,SACsB,WAAnB62J,EAAmB,OACZA,QADY,IACZA,OADY,EACZA,EAAqB96H,QAAQC,WAAWxE,QAAQ,IAEjC,OAAjBmgI,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,WAAY,GAC1B3uE,GAA8B,OAAjB0uE,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,YAAnB,OAA+BD,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAmBE,sBAAqBrgI,QAAQ,GAC7FyxD,EAAWzxD,QAAQ,WAKlCklG,GAAmBm6B,EAAR,KAA8B,eAAC,KAAD,IACzCqB,IAAiBrB,GAChB,wCACoB,OAAjBc,QAAiB,IAAjBA,OAAA,EAAAA,EAAmB2B,kBAAmB,EACrC,uCACE,gBAAC,KAAezhH,KAAhB,CAAqB/2C,WAAW,OAAO8zC,GAAI,EAA3C,UACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGs1B,aACC8pG,KACA16B,OAAM,OAACizD,QAAD,IAACA,OAAD,EAACA,EAAmB2B,kBAC1B,qBAIN,eAAC,KAAehrE,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,wBAGJ,eAAC,KAAe63C,KAAhB,UACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMzsF,MAAM,mBAAmB5B,SAAU,EAAGE,WAAY,GAAxD,SACGo/H,cAKP,MACc,OAAjBu4B,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,WAAY,EAC9B,uCACE,gBAAC,KAAe//G,KAAhB,CAAqB/2C,WAAW,OAAO8zC,GAAI,EAA3C,UACE,eAAC,KAAeu5C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGs1B,aACC8pG,KACA16B,OAAM,OAACizD,QAAD,IAACA,OAAD,EAACA,EAAmBC,WAC1B,qBAIN,eAAC,KAAetpE,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,UAnEK,OAAjB23J,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,WAAY,EAA/B,aAC0B,OAAjBD,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,YAAnB,OAA+BD,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAmBE,sBAAqBrgI,QAAQ,IADxF,eAwEQ,eAAC,KAAeqgB,KAAhB,UACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMzsF,MAAM,mBAAmB5B,SAAU,EAAGE,WAAY,GAAxD,SACGo/H,cAKP,QAGR,eAAC,KAAevnF,KAAhB,UACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACE,gBAAC,IAAD,WACG6xF,GACEglE,IAAmB,UAAIA,EAAoBt6H,cAAxB,aAAI,EAA4B48H,SAAWjB,IAC/D,eAAC,KAAezpE,aAAhB,CAA6B0rB,WAAU,UAAE08C,EAAoBt6H,cAAtB,aAAE,EAA4B48H,mBAM7Ex5G,GAAck3G,IAAmB,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAqBp6H,aAC1D,gBAAC,KAAeob,KAAhB,CAAqB/2C,WAAW,OAAOY,MAAM,eAA7C,UACE,eAAC,KAAeysF,YAAhB,UACE,eAAC,IAAD,CAAMzsF,MAAM,sBAAsB5B,SAAU,EAAGE,WAAY,GAA3D,mBACMo/H,KADN,cAC+C,OAAnBy3B,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBp6H,WAArB,OAAiCo6H,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAqBp6H,UAAYkjB,EAD9F,YAEIy/E,UAIN,eAAC9kB,GAAA,EAAD,CAAkB1/F,KAAK,gBASjCy+I,GAAa1+I,aAAe,CAC1BikH,SAAU,I,cC/IC26B,GAAe,SAAC,GAAiE,IAA/DC,EAA8D,EAA9DA,iBAAkBC,EAA4C,EAA5CA,oBAAqBC,EAAuB,EAAvBA,iBACpE,EAAsC76I,mBAAS26I,GAA/C,mBAAOG,EAAP,KAAoBC,EAApB,KAMA,GAJAr0I,qBAAU,WACRq0I,EAAeJ,KACd,CAACA,KAECG,EAAa,OAAO,KAEzB,IAAMz/I,EAAUw/I,IAAqBlmJ,IAAkBC,OAASonH,KAAYn1H,QAAUm1H,KAAYt1H,QAElG,OACE,eAAC,KAAesyC,KAAhB,UACE,eAAC,IAAD,CAAKnD,GAAG,MAAME,GAAG,QAAQ1xC,MAAM,OAA/B,SACE,eAACk4H,GAAA,EAAD,CAAOlhH,QAASA,EAAS8C,MAAI,EAA7B,SACE,eAAC,IAAD,CAAMtb,MAAM,mBAAmBZ,WAAW,SAA1C,SACGy5G,KAAgBk/C,YAS7BF,GAAa5+I,aAAe,CAC1B6+I,kBAAkB,EAClBE,iBAAkBlmJ,IAAkBjO,SCjC/B,IAAMgrI,GAAQ,SAAC,GAAoC,IAAD,IAAjCjzG,EAAiC,EAAjCA,MAAOu5H,EAA0B,EAA1BA,oBAC7B,OAAKr8D,aAAah7D,OAAOlC,IAEvB,uCACE,eAAC,KAAe8wD,QAAhB,CAAwBC,gBAAiB,IACzC,gBAAC,KAAex2C,KAAhB,WACE,eAAC,KAAes2C,YAAhB,UACE,eAAC,IAAD,CAAMruF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,SACGo/H,SAGL,eAAC,KAAe9wC,eAAhB,UACE,eAAC,IAAD,CAAMxuF,SAAU,EAAGgB,WAAY,IAAKd,WAAY,GAAhD,oBACE62J,EAAmB,OAAGA,QAAH,IAAGA,GAAH,UAAGA,EAAqB9zH,mBAAxB,iBAAG,EAAkCzF,aAArC,aAAG,EAAyC9F,QAAQ,GAAK8F,EAAM9F,QAAQ,cAZ3D,M,oBCF9B8yH,GAAU,SAAC,GAAoC,IAAlCuP,EAAiC,EAAjCA,aAAiB/+I,EAAgB,kBACzD,OACE,gBAAC,KAAD,CAAgBhb,SAAS,OAAzB,UACE,eAAC,GAAD,eAAkBgb,IAClB,eAAC,GAAD,eAAYA,KACV++I,GAAgB,eAAC,GAAD,eAAkB/+I,IACpC,eAAC,GAAD,eAAkBA,KAChB++I,GACA,uCACE,eAAC,GAAD,eAAqB/+I,IACrB,eAAC,GAAD,eAAuBA,IACvB,eAAC,GAAD,eAAWA,IACX,eAAC,GAAD,eAAaA,W,wBCVVi5I,GAAU,SAAC,GAAuC,IAArCsC,EAAoC,EAApCA,OAAQr7B,EAA4B,EAA5BA,QAAYlgH,EAAgB,kBAC5D,OACE,gBAAC,GAAD,CAAcu7I,OAAQA,EAAtB,UACE,gBAAC,GAAa9L,OAAd,WACE,eAAC,GAAaz8B,MAAd,CAAoB9tH,WAAY,GAAhC,SAAqCo/H,OACrC,eAAC,GAAalF,YAAd,CAA0B74G,QAAS25G,OAErC,eAAC,GAAasvB,QAAd,UACE,eAAC,GAAD,eAAaxvI,UAOrBi5I,GAAQp5I,aAAe,CACrB07I,QAAQ,G,aC0EJyD,GAAqBn+B,mBA7DH,SAAAx1G,GAAU,IAAD,QACzBod,EAAqBL,aAAgB/c,GACrC5a,EAAQ,UAAG40E,YAAsCh6D,UAAzC,QAAmD,GACzDsW,EAAcjB,cAAgB+H,GAA9B9G,UACFs9H,EAAcxuJ,IAAa8kD,aAAa9kD,GAExCiiE,EAAkBwK,aAAoB7xD,EAAMswD,aAE5CyB,EAAqBt1C,cAA8Bzc,EAAMmd,SAASC,oBAElEV,EACHivB,YAAQ0b,IAAqB1b,YAAQomB,GAElCygC,YACEj7E,cAAqB6F,GACrBo4C,YAAqCx1D,GACrCqX,aAAa+F,GACb9F,aAAc8F,GACdT,aAAqBS,IANvB60C,YAAuB5K,EAAiB0K,GASxC2+E,EAAsBz0H,aAA0BmB,GAEhD+C,EAAwB5E,aAAyB6B,GACjDgD,EAAuB5E,aAAyB4B,GAChD00H,KAAqB3xH,IAAyBC,GAEpD,MAAO,CACL6zC,mBAAoBJ,YAAoC7zD,GAAO,GAC/DuO,QAASg6E,YAAsBn0E,aAAqBgJ,IACpDizB,SAAUk4C,YAAsBj0E,aAAuB8I,IACvDm0H,YAAav5H,aAAgBoF,GAC7B44C,mBAAoBJ,YAA4C51D,GAChE0rE,eAAgBH,YACdmlE,EAAmB,OAAGA,QAAH,IAAGA,GAAH,UAAGA,EAAqBt6H,cAAxB,aAAG,EAA6BH,OAAStB,aAAUyI,GACtEszH,EAAmB,OAAGA,QAAH,IAAGA,GAAH,UAAGA,EAAqBt6H,cAAxB,iBAAG,EAA6B1a,gBAAhC,aAAG,EAAuCsU,OAASgF,aAAQoI,GAC9E,MACA,GAEFszH,oBAAqBA,EACrB5J,qBAAsBpqH,GAAgBA,EAAa1M,OAAS,EAC5D45H,oBAAqBgK,EACrBh2F,eAAgBhpC,aAAiBwI,GACjCuF,eAAgBvN,aAAkBgI,GAClCh4B,SAAUA,EACVo0C,UAAWljB,EACXyK,eAAgB/gB,EAAM+6B,aACtB+nC,WAAYrsD,cAAiB2G,GAC7BV,aAAcA,EACdvF,MAAOs+C,YAAsCz1D,GAC7C0zI,aAAcr4H,cAAgB+B,GAC9Bi0H,cAAe/1H,aAAiB8B,GAChClF,YAAaD,aAAemF,GAC5B00H,qBACA3xH,wBACAC,uBACAmyH,yBAA0Bz2H,cAA4BsB,GACtDd,SAAUD,aAAYe,MAI0B,KAAzBo4F,CAA+Bo4B,K,6BCxG1D,6CACaF,EAA6B,CACxCr7I,MAAOlU,aAAaC,IAAiBiE,IAAK,aAC1CsrJ,gBAAiBxvJ,aAAaC,IAAiBiE,IAAK,uBACpDwxJ,yBAA0B11J,aAAaC,IAAiBiE,IAAK,kC,+BCJxD,SAASyxJ,EAAWx7I,EAAMy7I,GAC/B,OAAO,IAAI30F,KAAK9mD,EAAKsmE,UAA8B,IAAlBvlD,OAAO06H,IAEnC,SAASxF,EAAiByF,GAC/B,IAAM78H,EAAQioC,KAAKtgC,MAAMk1H,GAAW50F,KAAKtgC,MAAM,IAAIsgC,MAC7C60F,EAAOjlG,KAAKm2F,MAAOhuH,EAAQ,IAAO,GAAM,IACxC+8H,EAAOllG,KAAKm2F,MAAOhuH,EAAQ,IAAQ,IAGzC,MAAO,CACLA,QACAg9H,SAJeF,EAAO,GAAK,IAAMA,EAAOA,EAKxCG,SAJeF,EAAO,GAAK,IAAMA,EAAOA,GAR5C,qE,uECEa55I,EAAW,CACtB+5I,OAAQ,CACN94J,MAAOvD,IAAOK,aAAa,KAC3B8iB,WAAYnjB,IAAO6G,oBAAoB,KACvCnD,YAAa1D,IAAO6G,oBAAoB,MAE1C+b,KAAM,CACJrf,MAAOvD,IAAOC,iBAAiB,IAC/BkjB,WAAYnjB,IAAOK,aAAa,KAChCqD,YAAa1D,IAAOK,aAAa,MAEnCi8J,MAAO,CACL/4J,MAAOvD,IAAOC,iBAAiB,IAC/BkjB,WAAYnjB,IAAOqH,gBAAgB,KACnC3D,YAAa1D,IAAOqH,gBAAgB,MAEtCkb,MAAO,CACLhf,MAAOvD,IAAOK,aAAa,KAC3B8iB,WAAYnjB,IAAOQ,eAAe,IAClCkD,YAAa1D,IAAOQ,eAAe,KAErC+7J,MAAO,CACLh5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOmE,cAAc,KACjCT,YAAa1D,IAAOmE,cAAc,MAEpCq4J,IAAK,CACHj5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOwH,YACnB9D,YAAa1D,IAAOwH,aAEtBi1J,KAAM,CACJl5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOI,kBAAkB,KACrCsD,YAAa1D,IAAOI,kBAAkB,MAExCuiB,WAAY,CACVpf,MAAOvD,IAAOK,aAAa,KAC3B8iB,WAAYnjB,IAAOQ,eAAe,KAClCkD,YAAa1D,IAAOQ,eAAe,MAErCk8J,WAAY,CACVn5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOqD,UACnBK,YAAa1D,IAAOqD,WAEtB04G,gBAAiB,CACfx4G,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOkpB,WAAW,KAC9BxlB,YAAa1D,IAAOkpB,WAAW,MAEjCyzI,cAAe,CACbp5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOsH,aACnB5D,YAAa1D,IAAOsH,cAEtBs1J,kBAAmB,CACjBr5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAO6G,oBAAoB,KACvCnD,YAAa1D,IAAO6G,oBAAoB,MAE1Cg2J,mBAAoB,CAClBt5J,MAAOvD,IAAOO,UAAU,GACxB4iB,WAAYnjB,IAAOmE,cAAc,KACjCT,YAAa1D,IAAOO,UAAU,K,6BC9DrBu8J,EAAc7gJ,YAAOmB,IAAPnB,CAAH,yMACL,gBAAGna,EAAH,EAAGA,aAAH,OAAuBA,GAA8BiH,IAAM7I,MAAM,GAAK,QAC7E,gBAAGwD,EAAH,EAAGA,YAAH,0BAAkCA,MAE1C,gBAAGqB,EAAH,EAAGA,MAAH,OAAgBA,EAAQA,EAAQ,IAAM,OAEzBgE,IAAM/J,MAAMI,YAKzB,YACA,OADc,EAAXqd,MAED,IAAK,QACH,OAAOle,YAAP,2HACewK,IAAMxJ,UAAU,IAIjC,IAAK,QACH,OAAOhB,YAAP,2HACewK,IAAMxJ,UAAU,IAIjC,QACE,OAAOhB,YAAP,yHAEewK,IAAMxJ,UAAU,Q,uICrBjCu8G,EAAQ,SAAC,GAaR,IAZLp4F,EAYI,EAZJA,SACA3H,EAWI,EAXJA,QACAyjG,EAUI,EAVJA,UACAu9C,EASI,EATJA,cACAC,EAQI,EARJA,gBACAl7J,EAOI,EAPJA,aACAiD,EAMI,EANJA,MACAk4J,EAKI,EALJA,kBACAxgJ,EAII,EAJJA,KAII,IAHJvT,YAGI,SADDyT,EACC,iBACJ,OACE,cAACmgJ,EAAD,yBACEt9C,UAAWA,EACX92F,GAAG,OACH3jB,MAAOA,EACPjD,aAAcA,EACdyB,MAAOy5J,GAAoCjhJ,EAAQxY,MACnD4f,WAAY45I,GAAgChhJ,EAAQoH,WACpDzf,YAAau5J,GAAwClhJ,EAAQrY,YAC7DwF,KAAMA,EACNuT,KAAI,OAAEA,QAAF,IAAEA,IAAQ,MACVE,GAVN,aAWG+G,MAKPo4F,EAAMt/F,aAAe,CACnBT,QAASuG,EAAS+5I,OAClB78C,UAAW,MAGb1D,EAAMx5F,SAAWA,EACjBw5F,EAAMohD,MA3CQ,CACZC,MAAO,QACPC,MAAO,SAgEMthD,QCrEAA,O,iCCFf,uFAGa66C,EAAwB,WACnC,IAAM0G,EAAqBx1H,aAAalB,QAAQrB,IAAiBK,oBAEjE,OAAO03H,GAA0C,MAGtCC,EAA8B,SAACC,EAAYvpG,GACtD,IAAIwpG,EAAa,GAWjB,OATmB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAYl3I,SAASzR,QAEtBo/C,IACnBwpG,EAAW,0BAA2B,EACtCA,EAAW,sBAAwBxpG,EAAiBypG,WACpDD,EAAW,wBAA0BxpG,EAAiB0pG,aACtDF,EAAW,qBAAuBxpG,EAAiB2pG,WAErDH,EAAU,UAAgBzlJ,IAAWG,eAC9BslJ,I,8FClBII,EAAoB,CAC/B7rE,QAAS,UACT8rE,OAAQ,SACRC,YAAa,cACbC,eAAgB,iBAChBC,WAAY,cAGRpgG,EAAgB,CACpBqgG,eAAgBL,EAAkB7rE,QAClCmsE,oBAAqB,EACrB/tG,cAAe,GACfguG,wBAAyB,GAsCZC,IAnCW,SAACp2I,EAAOqoB,GAGhC,OAFAroB,EAAQme,YAAgBne,EAAO41C,GAEvBvtB,EAAOhrB,MAEb,KAAKyrG,IAAsBC,yBACzB,OAAO,2BACF/oG,GADL,IAEEi2I,eAAgB5tH,EAAOY,OAE3B,KAAK6/E,IAAsBE,0CACzB,OAAO,2BACFhpG,GADL,IAEEk2I,sBAAuBl2I,EAAMk2I,sBAEjC,KAAKptC,IAAsBG,yCACzB,OAAO,2BACFjpG,GADL,IAEEk2I,oBAAqB,IAEzB,KAAKptC,IAAsBI,iCACzB,OAAO,2BACFlpG,GADL,IAEEmoC,cAAe9f,EAAOjjC,WAE1B,KAAK0jH,IAAsBK,8CACzB,OAAO,2BACFnpG,GADL,IAEEm2I,0BAA2Bn2I,EAAMm2I,0BAErC,QACE,OAAOn2I,K,mFC/CPq2I,EAA8B,SAAC,GAAD,IAClC5hJ,EADkC,EAClCA,KACAlZ,EAFkC,EAElCA,MACGgZ,EAH+B,wBAKlC,+CACMA,GADN,IAEEM,QAAQ,oBACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,2FAIZuhJ,EAA4BrhJ,YAAc,8BAE1CqhJ,EAA4B7hJ,aAAe,CACzCC,KAAM,GACNlZ,MAAO,gBAGM86J,O,8ICvBFtiC,EAAc9/G,IAAOC,OAAV,uKAUXoiJ,EAAoBriJ,IAAOC,OAAV,mLAUjBqiJ,EAAsBtiJ,IAAOiB,IAAV,0FAMhCohJ,EAAkBthJ,YAAc,oBC5BzB,I,OCiCDwhJ,EAAoB,SAAC,GAA4E,IAA1EC,EAAyE,EAAzEA,WAAYh4D,EAA6D,EAA7DA,OAAQi4D,EAAqD,EAArDA,UAAWC,EAA0C,EAA1CA,aAAcj7I,EAA4B,EAA5BA,SAAUk7I,EAAkB,EAAlBA,YAC5EC,EAAe,WACnB,cAAOp4D,QAAP,IAAOA,OAAP,EAAOA,EAAQhpG,KAAI,SAACqlB,EAAOiV,GAAR,OACjB,qBAEEhZ,IAAK+D,EAAMrY,IACXuU,IAAK8D,EAAM9D,IACXja,MAAM,OACN/C,OAAO,OACPf,MAAO,CAAEqqI,UAAWvzG,EAAQ,EAXlB,EAWkC,QALvCjV,EAAMrY,SAmEjB,OACE,cAAC01G,EAAA,EAAD,CACE+qB,gBAAiBuzB,EACjBrzB,wBA7E2B,4BA8E3B1pI,QAAQ,MACRI,aAAY,UAAKiH,IAAM7I,MAAM,GAAjB,MACZogH,OAAQo+C,EACRI,eAAgBH,EANlB,SARIF,EAtBF,cAACl/C,EAAA,EAAD,CACEF,SAAO,EACPT,WAAS,EACTQ,UAAU,OACVP,WAAY7+G,IAAOC,iBAAiB,IACpC0+G,YAAa3+G,IAAOqH,gBAAgB,IALtC,SAME,eAAC,IAAD,CAAMic,cAAc,SAAS7gB,eAAe,SAASD,WAAW,SAASuC,MAAM,OAAO8e,GAAG,MAAzF,UACE,cAAC,IAAD,CAA6B9e,MAAM,OAAnC,SACE,eAACu5J,EAAD,CAAmBp7I,QAASy7I,EAA5B,UACE,cAACI,EAAA,EAAD,CAA6BtiJ,KAAK,OAAOlZ,MAAOvD,IAAOI,kBAAkB,OACzE,cAAC,IAAD,CAAMsoB,GAAG,OAAOnlB,MAAOvD,IAAOI,kBAAkB,KAAMuB,SAAU,EAAGgB,WAAW,SAASg0C,GAAG,MAAMD,GAAG,MAAnG,SDrFM,aCkFD,qBAQRmoH,SAzCL,eAAC,IAAD,CAAM95J,MAAO,IAAKb,SAAS,WAA3B,UACE,cAAC,IAAD,CAAUI,IAAK,EAAGU,MAAO,GAAzB,SACE,cAAC+2H,EAAD,CAAa12G,KAAK,SAASnC,QAAS,kBAAMy7I,GAAa,IAAQ1/I,MAAM,QAArE,SACE,cAAC,IAAD,CAAMzc,WAAW,SAAjB,SACE,cAAC21J,EAAA,EAAD,CAAW50J,MAAOwF,IAAM/I,OAAOI,kBAAkB,KAAMqc,KAAM,WAInE,eAAC,IAAD,CAAM1X,MAAM,OAAZ,UACE,cAAC,IAAD,CAAKq6G,UAAU,OAAOz7F,SAAS,MAA/B,SACE,cAAC47F,EAAA,EAAD,CACEX,WAAS,EACTQ,UAAWw/C,EACXjgD,YAAa51G,IAAM/I,OAAOqH,gBAAgB,IAC1Cw3G,WAAY91G,IAAM/I,OAAOC,iBAAiB,IAJ5C,SAKG4+J,QAGL,cAACN,EAAD,UAAsB76I,aAmDhC86I,EAAkBhiJ,aA9FG,CACnBiqF,OAAQ,GACR/iF,SAAU,KACVk7I,YAAa,KA6FAJ,S,oFCpHF5gG,EAAgB,CAC3Bn9C,WAAW,EACXu+I,iBAAiB,EACjBv4E,KAAM,CACJ6uB,UAAW,GACXC,SAAU,GACVh4F,MAAO,GACPk6H,OAAQ,GACRwnB,OAAQ,GACRrxH,KAAM,GACNE,cAAe,GACfiB,QAAS,GACTymE,IAAK,GACLmpC,YAAa,GACbqB,YAAa,GACbC,YAAa,GACbif,UAAW,GACX5qD,SAAU,CACR6qD,gBAAiB,GACjBC,YAAa,IAEfjrJ,OAAQ,GACR27F,sBAAsB,EACtBC,uBAAuB,EACvBC,qBAAqB,IAqCVqvD,IAjCQ,WAAoC,IAAnCr3I,EAAkC,uDAA1B41C,EAAevtB,EAAW,uCACxD,OAAQA,EAAOhrB,MACb,KAAKo2G,IAAmBC,mBACtB,OAAO,2BACF1zG,GADL,IAEEvH,UAAW4vB,EAAO5vB,UAClB6+I,UAAWjvH,EAAO2uH,kBAEtB,KAAKvjC,IAAmBE,iBACtB,OAAO,2BACF3zG,GADL,IAEEvH,UAAW4vB,EAAO5vB,UAClB6+I,WAAW,IAEf,KAAK7jC,IAAmBG,yBAOxB,KAAKH,IAAmBI,uBACtB,OAAO,2BACF7zG,GADL,IAEEvH,UAAW4vB,EAAO5vB,UAClBgmE,KAAMp2C,EAAOo2C,KACb64E,WAAW,IAEf,QACE,OAAOt3I,K,iFC3DPu3I,EAAe,SAAC,GAAD,IACnB9iJ,EADmB,EACnBA,KACAlZ,EAFmB,EAEnBA,MACGgZ,EAHgB,wBAKnB,+CACMA,GADN,IAEEM,QAAQ,YACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,qQAIZyiJ,EAAaviJ,YAAc,eAE3BuiJ,EAAa/iJ,aAAe,CAC1BC,KAAM,GACNlZ,MAAO,gBAGMg8J,O,sGCrBTC,EAAW,SAAAj8J,GAAK,OAAIwF,IAAM/I,OAAOuD,IAAUA,GAkCpCk8J,EAAexjJ,YAAOmB,IAAPnB,CAAH,+PAMR,qBAAGtZ,cAtCF,SAAC,GAAsC,IAApCizC,EAAmC,EAAnCA,UAAWryC,EAAwB,EAAxBA,MAAOm8J,EAAiB,EAAjBA,WAC/BC,EAAaH,EAASj8J,GACtBq8J,EAAaF,EAAaF,EAASE,GAAcC,EAEvD,OAAK/pH,EAWEr3C,YAAP,kZAUyEqhK,EAAeA,EACzEA,GArBNrhK,YAAP,wLAKe,kBAAMqhK,QAgCZ,cAAGhqH,UAAH,IAAc8pH,EAAd,EAAcA,WAAYn8J,EAA1B,EAA0BA,MAA1B,OAAoDi8J,EAAbE,GAA6Cn8J,O,6BChDjG,8OAAO,IAAMs8J,EAAqB,gCACrBC,EACX,6KACWC,EAAQ,gBACRC,EAA0B,qCAC1BC,EAAoB,kBACpBC,EAAe,mBACfC,EAAyB,mE,6BCNtC,oGAWMC,EAAoB,SAAC,GASpB,IARL5+G,EAQI,EARJA,UACAz+B,EAOI,EAPJA,YACAs9I,EAMI,EANJA,qBACAvrH,EAKI,EALJA,aACA1b,EAII,EAJJA,MACAknI,EAGI,EAHJA,eACAC,EAEI,EAFJA,oBACAC,EACI,EADJA,aAEA,OACE,eAAC,IAAD,CAAK5pH,GAAI,EAAGrzC,MAAM,mBAAlB,UACE,cAAC,IAAD,CACEupH,WAAYmU,IACZtU,WACE,cAAC,IAAD,CAAM9qH,WAAY,GAAIF,SAAU,EAAGgB,WAAW,OAA9C,SACGmyC,IAGL+3E,YACE,eAAC,IAAD,CAAMlrH,SAAU,EAAGgB,WAAW,OAA9B,cACIy2B,OAINinI,EAUA,cAAC,IAAD,CAAMx+J,WAAY,GAAIF,SAAU,EAAGgB,WAAW,SAAS8zC,GAAI,EAA3D,SACG1zB,IAVH,cAAC,IAAD,CACE+pG,WAAYmU,IACZtU,WACE,cAAC,IAAD,CAAM9qH,WAAY,GAAIF,SAAU,EAAGgB,WAAW,SAA9C,SACGogB,MAnBX,OA6BGy9I,QA7BH,IA6BGA,OA7BH,EA6BGA,EAAc/iK,KAAI,SAACijC,EAAM1jC,GAAP,OACjB,eAAC,IAAe08C,KAAhB,CAAqBjD,GAAI,EAAGF,GAAI,MAAhC,UACE,cAAC,IAAey5C,YAAhB,UACE,cAAC,IAAD,CAAMruF,SAAU,EAAGE,WAAY,GAA/B,SACGu6G,IAAgB17E,OAGrB,cAAC,IAAeyvD,eAAhB,UACE,cAAC,IAAD,CAAMxuF,SAAU,EAAGE,WAAY,GAA/B,SACGo/H,UARqCjkI,MAc7CsjK,EACC,cAAC,IAAD,CAAUz+J,WAAY,GAAIF,SAAU,EAAGgB,WAAW,OAAOugB,QAASq9I,EAAqBhqH,GAAI,EAA3F,SACG+pH,IAED,KAEH9+G,EACC,eAAC,IAAe9H,KAAhB,CAAqB/2C,WAAW,OAAOY,MAAM,sBAA7C,UACE,cAAC,IAAeysF,YAAhB,UACE,cAAC,IAAD,CAAMnuF,WAAY,GAAIF,SAAU,EAAhC,SACGw1B,YAAwB8pG,IAAwBz/E,EAAW,mBAGhE,cAAC,IAAD,CAAkBj+C,MAAOvD,IAAOsH,aAAcmV,KAAM,UAEpD,SAaV2jJ,EAAkB5jJ,aAAe,CAC/B8zC,KAAM,GAGO8vG,O,iFC7DAz5B,IAzBS,WACtB,IAAM85B,EAAiBx+B,sBAAW,uCAAC,WAAMjhE,GAAN,2BAAA75D,EAAA,yDACzBk1G,EAA2Dr7C,EAA3Dq7C,IADyB,EACkCr7C,EAAtD+lE,gBADoB,MACT,OADS,IACkC/lE,EAAnCgmE,aADC,MACO,QADP,EACgB05B,EAAkB1/F,EAAlB0/F,SAAQz5I,EAAU+5C,EAAV/5C,OADxB,gCAEhBmnH,YAAQnnH,GAFQ,OAIjCo1F,EAAI4R,QAAQ0yC,eAAZ,aACE55B,WACAC,SACI05B,GAAU,CAAEA,YAPe,2CAAD,sDAS/B,IAEGh6B,EAAiBzE,sBAAW,uCAAC,WAAMjhE,GAAN,6BAAA75D,EAAA,yDACzBk1G,EAA0Cr7C,EAA1Cq7C,IADyB,EACiBr7C,EAArC+lE,gBADoB,MACT,OADS,EACDE,EAAkBjmE,EAAlBimE,OAAQhgH,EAAU+5C,EAAV/5C,MAClCigH,EAAUD,EAAOC,QACjB05B,EAAUvkD,EAAI4R,QACd4yC,EACJD,EAAQxyC,wBAAwB9pH,IAAM0gC,OAAO87H,YAAc55B,GACzDjgH,EAN6B,gCAMhBmnH,YAAQnnH,GANQ,OAOjC+d,OAAO+7H,SAAS,CAAEz8J,IAAKu8J,EAAG95B,aAPO,2CAAD,sDAQ/B,IAEH,MAAO,CAAE05B,iBAAgB/5B,oB,6BCnC3B,WAaermB,IAXW,SAAAC,GACxB0gD,2BAAgB,WACD,IAAD,EAAR1gD,IACF,UAAA5nE,SAASioF,cAAc,gBAAvB,SAAiCsgC,gBAAgB,eACjDvoH,SAASpwC,KAAKrH,MAAMigK,UAAY,UAGlC,OAAO,kBAAOxoH,SAASpwC,KAAKrH,MAAMigK,UAAY,aAC7C,CAAC5gD,M,4KCSA6gD,EAA8B,SAAC,GAAD,IAAG1kJ,EAAH,EAAGA,KAAH,OAClC,cAAC,IAAD,CAAsB+iG,UAAU,mBAAmB/iG,KAAMA,EAAMlZ,MAAM,sBAGjE69J,EAAgB,SAAC,GAAD,IAAGniJ,EAAH,EAAGA,MAAO+5I,EAAV,EAAUA,WAAV,OACpB,eAAC,IAAD,CACEl3J,aAAc,CAAEk3J,EAA+B,IAAlB,gBAAuB,KAAM,KAAM,iBAChEn1I,IAAK,EACLT,GAAI,EACJzD,GAAI,EACJzX,GAAIa,IAAM/I,OAAOQ,eAAe,IALlC,UAME,cAAC4c,EAAA,EAAD,CAAMta,UAAU,OAAOnB,SAAU,EAAGge,GAAI,EAAGpc,MAAM,mBAAmBZ,WAAW,OAA/E,SACGsc,IAEH,cAACkH,EAAA,EAAD,CAAUnhB,MAAO,EAAG24D,UAAU,SAA9B,SACE,cAAC,EAAD,CAA6BlhD,KAAM,WAInCyxC,EAAYlpB,OAAOC,SAASC,SAAS7e,SAAS,aAE9Cg7I,EAAe,SAAC,GAAD,IAAGpiJ,EAAH,EAAGA,MAAOqiJ,EAAV,EAAUA,gBAAiBniI,EAA3B,EAA2BA,MAA3B,OACnB,eAAC,IAAD,CACE7b,cAAc,MACdqK,EAAG,EACH9J,GAAG,QACH3b,GAAIa,IAAM/I,OAAOQ,eAAe,IAChCgC,WAAW,SACXC,eAAe,gBANjB,UAOE,eAAC,IAAD,WACE,eAAC2a,EAAA,EAAD,CAAMta,UAAU,OAAOnB,SAAU,EAAGge,GAAI,EAAGpc,MAAM,mBAAmBZ,WAAW,SAA/E,UACGsc,EADH,OAGA,eAAC,IAAD,CAAMzc,WAAW,SAASk0C,GAAI,EAA9B,UACE,eAACt5B,EAAA,EAAD,CAAMzb,SAAU,EAAG4B,MAAM,mBAAmBZ,WAAW,OAAvD,cACIw8B,EAAM9F,QAAQ,MAElB,cAACjc,EAAA,EAAD,CAAMzb,SAAU,EAAGgB,WAAW,MAAM+zC,GAAI,EAAxC,SACG4qH,GAAmBpzG,EAAY,UAAY,qBAKlD,cAAC,IAAD,UACE,cAAC,EAAD,CAA6BzxC,KAAM,WAKnCmwI,EAAmB,SAAC,GAAiF,IAA/ElpI,EAA8E,EAA9EA,SAAUyb,EAAoE,EAApEA,MAAOoiI,EAA6D,EAA7DA,qBAAsBniJ,EAAuC,EAAvCA,SAAUkiJ,EAA6B,EAA7BA,gBAAiBriJ,EAAY,EAAZA,MAC5F,EAAoCyB,oBAAU6gJ,GAA9C,mBAAOvI,EAAP,KAAmBwI,EAAnB,KACA,OACE,cAAC,IAAD,CAAY32G,SAAU9hD,IAAMvL,YAAYsiB,GAAxC,SACG,SAAAgB,GACC,OACE,cAAC,IAAD,CAAS+1B,GAAI,EAAGjzB,GAAI,CAAC,KAAM,KAAM,KAAM,GAAIqkH,YAAannH,EAAxD,SACE,cAAC,IAAD,CACE5B,mBAAmB,EACnBC,aAAc2B,GAAaygJ,EAAuB,GAAK,CAAC,aACxDniJ,SAAUA,GAAsB,KAChCogG,UAAU,GAJZ,SAKE,eAAC,IAAD,CAAehgG,KAAM,YAArB,UACE,cAAC,IAAD,UACE,cAAC,IAAD,CAAqBve,MAAO,CAAEyB,OAAQ,WAAtC,SACE,cAAC4zG,EAAA,EAAD,UACGx1F,EACC,cAAC,EAAD,CAAe7B,MAAOA,EAAO+5I,WAAYA,IAEzC,cAAC,EAAD,CAAcsI,gBAAiBA,EAAiBriJ,MAAOA,EAAOkgB,MAAOA,UAM7E,cAAC,IAAD,UACG,YAAmB,IAAhB1f,EAAe,EAAfA,SAEF,OADA+hJ,EAAc/hJ,GACPiE,EAAS,CAAEjE,WAAUqB,4BAmBhD8rI,EAAiBpwI,aAAe,CAC9B2iB,MAAO,EACPoiI,sBAAsB,EACtBniJ,SAAU,aACVkiJ,iBAAiB,GAGJ1U,Q,wBC3GFiC,EAAoB,SAAC,GAAyE,IAAvE34F,EAAsE,EAAtEA,MAAOt+C,EAA+D,EAA/DA,kBAAmB8uD,EAA4C,EAA5CA,WAAY7uD,EAAgC,EAAhCA,UAAW4iD,EAAqB,EAArBA,eAC7EgnG,EAAqB1gJ,wBAAc,CACvC8pC,SAAU9hD,IAAMvL,YAAYmzF,KAG9B,OACE,qCACE,cAAC,IAAej3C,KAAhB,CAAqB/2C,WAAW,OAAhC,SACE,cAAC,IAAeqtF,YAAhB,CAA4B/uF,MAAO,CAAEU,SAAU,QAA/C,SAA0Ds/H,QAG5D,eAAC,IAAevnF,KAAhB,WACE,cAAC,IAAes2C,YAAhB,UAA6BixC,MAC7B,cAAC,IAAerxC,OAAhB,qBAA4B15B,EAAM78B,QAAQ,SAG3CzhB,EAAoB,EACnB,eAAC,IAAe8hC,KAAhB,WACE,eAAC,IAAes2C,YAAhB,WACGixC,IAfmB,CAAC,UAgBE56G,SAASo0C,GAC9B,cAAC,IAAD,CAAMz4D,OAAQ,GAAI00C,GAAI,EAAtB,SACE,cAAC,IAAD,CACE82E,QAAQ,iBACRvuG,MAAOgiH,IACP5T,aAAeo0C,EAA2B,IAAN,IACpC/9J,YAAaqF,IAAM/I,OAAOC,iBAAiB,KAC3C6C,UAAU,OACVqqH,UAAWs0C,EAAqB,SAAW,QAC3Cl0C,iBAAkB,SAAAhxG,GAAK,OACrB,cAAC,IAAD,CAAK8/F,IAAK9/F,EAAMmxG,WAAhB,SACE,cAAC0hC,EAAA,EAAD,CAAc3yI,KAAM,QAGxB6wG,eAAgB,kBAAM,cAAC,IAAD,CAAM3rH,SAAU,EAAhB,SAAoBgW,IAAoBC,yBAGhE,QAEN,cAAC,IAAeg4E,OAAhB,qBAA4Bh4E,EAAkByhB,QAAQ,SAEtD,KAEHqtC,EAAa,EACZ,eAAC,IAAehtB,KAAhB,WACE,cAAC,IAAes2C,YAAhB,UAA6BixC,MAC7B,cAAC,IAAerxC,OAAhB,qBAA4BlpB,EAAWrtC,QAAQ,SAE/C,KAEHxhB,EAAY,EACX,eAAC,IAAe6hC,KAAhB,WACE,eAAC,IAAes2C,YAAhB,WACGixC,IACD,cAAC,IAAD,CAAMj/H,OAAQ,GAAI00C,GAAI,EAAtB,SACE,cAAC,IAAD,CACE82E,QAAQ,cACRvuG,MAAOgiH,IACP5T,aAAeo0C,EAA2B,IAAN,IACpC/9J,YAAaqF,IAAM/I,OAAOC,iBAAiB,KAC3C6C,UAAU,OACVqqH,UAAWs0C,EAAqB,SAAW,QAC3Cl0C,iBAAkB,SAAAhxG,GAAK,OACrB,cAAC,IAAD,CAAK8/F,IAAK9/F,EAAMmxG,WAAhB,SACE,cAAC0hC,EAAA,EAAD,CAAc3yI,KAAM,QAGxB6wG,eAAgB,kBAAM,cAAC,IAAD,CAAM3rH,SAAU,EAAhB,SAAoBs/H,cAIhD,cAAC,IAAerxC,OAAhB,qBAA4B/3E,EAAUwhB,QAAQ,SAE9C,KAEJ,cAAC,IAAe42D,QAAhB,QAON4+D,EAAkBryI,aAAe,CAC/B05C,MAAO,G,iFC/FIwrG,EAAkBzlJ,YAAOyD,IAAPzD,CAAH,mCACxB,YACA,IAD4B,EAAzB0lJ,mBAED,OAAOpjK,YAAP,4HC+CAqjK,EAAwB,SAAAC,GAC5B,OAAQA,GACN,KAAKC,IACH,MAAO,mBACT,KAAKC,IACH,MAAO,eACT,QACE,OAAO,OAIPC,EAAiB,SAAC,GAWjB,IAVLj3E,EAUI,EAVJA,wBACAynB,EASI,EATJA,cACAm3B,EAQI,EARJA,kBACAv4F,EAOI,EAPJA,qBACAC,EAMI,EANJA,sBACAu0B,EAKI,EALJA,eACAq8F,EAII,EAJJA,sBACAN,EAGI,EAHJA,mBACAO,EAEI,EAFJA,kBACAC,EACI,EADJA,gBAEA,OACE,mCACE,cAACT,EAAD,CAAiBC,mBAAoBA,EAArC,SACG52E,EAAwBttF,KAAI,SAAAijC,GAAI,MA7BVqL,EA6BU,OAC9BrL,EAAK4rB,aA2BF,KA1BF,eAAC,IAAe5S,KAAhB,WACE,eAAC,IAAes2C,YAAhB,CAA4BnuF,WAAY,OAAxC,UACG6+B,EAAKqC,SAAL,UAAmBrC,EAAKqC,SAAxB,KAAsC,GADzC,IAC8CrC,EAAKwgD,cAAgBxgD,EAAKzhB,SAEvE0iJ,GAAsBjhI,EAAKqC,YAAY,UAACrC,EAAKgN,mBAAN,aAAC,EAAkBrnB,SAAS,WAClE,cAAC,IAAD,CAAKthB,MAAM,OAAO9D,MAAO,CAAE6B,UAAW,SAAtC,SACE,cAAC0mI,EAAA,EAAD,CACEG,kBAAmBA,EACnBv4F,qBAAsBA,EACtBC,sBAAuBA,EACvBtF,YAAarL,EACbklC,eAAgBA,EAChBq8F,sBAAuBA,MAGzB,KACHN,EACC,cAAC,IAAe9xE,OAAhB,CAAuB3sE,QAAS,kBAAMsvF,EAAc9xE,IAApD,SAA4DugG,MAC1D,KAEJ,cAAC,IAAerxC,OAAhB,CAAuB7qF,MAAOm9J,IAAsBxhI,EAAK2jB,QAAU,OAAS,UAA5E,SACG69G,GAAqBC,IAAoBzhI,EAAK2jB,QAC3C48E,IADH,YApDcl1F,EAsDgBrL,EAtDL,WACpC6rB,SAASxgB,EAAYhJ,UAAY,GAAKgJ,EAAYtc,QAAQ4J,QAAQ,KAmDvD,YAEuCk/E,YAAoB73E,EAAKyI,eAAiB,QAvBtF,sBAAyCzI,EAAKQ,sBAiCpDywH,EAAe,SAAC,GAYf,IAXLvgH,EAWI,EAXJA,qBACAC,EAUI,EAVJA,sBACA05C,EASI,EATJA,wBACAnlB,EAQI,EARJA,eACA+jE,EAOI,EAPJA,kBACA13B,EAMI,EANJA,cACAO,EAKI,EALJA,cACA4vD,EAII,EAJJA,uBACAT,EAGI,EAHJA,mBACAU,EAEI,EAFJA,6BACAC,EACI,EADJA,sBAEA,SAASL,EAAsB92E,EAAGp/C,GAChCkmE,EAAc,2BAAKlmE,GAAN,IAAmBhJ,SAAUooD,EAAEu3C,OAAOz9G,SAGrD,IAAIs9I,EAA2B,KAE/B,GAAIH,EAAwB,CAC1B,IAAII,EAAkCtlK,OAAOmxD,QAC3C08B,GACA,qBAAG82E,kBAGL3kK,OAAOiB,KAAKqkK,GAAiCzlK,SAAQ,SAAA0lK,GACnDD,EAAgCC,GAAqBvlK,OAAOmxD,QAC1Dm0G,EAAgCC,IAChC,qBAAG9hB,yBAIP4hB,EAA2BC,EAG7B,OAAIz3E,GAA2B74B,YAAa64B,GAAiC,KAG3E,mCACGq3E,GAA0BG,EACzB,mCACGrlK,OAAOwnJ,QAAQ6d,GAA0B9kK,KAAI,YAAiC,IAAD,mBAA9BokK,EAA8B,KAAda,EAAc,KAC5E,OACE,qCACE,cAAC,IAAD,CAAM//J,WAAW,OAAOhB,SAAU,EAAGE,WAAY,OAAQi0C,YAAU,EAACvyC,MAAM,mBAAmBkzC,GAAI,EAAjG,SACGorH,IAEF3kK,OAAOiB,KAAKukK,GAAUjlK,KAAI,SAAAsvC,GAAI,OAC7B,cAAC,EAAD,CACEg+C,wBAAyB23E,EAAS31H,GAClCylE,cAAeA,EACfm3B,kBAAmBA,EACnBv4F,qBAAsBA,EACtBC,sBAAuBA,EACvBu0B,eAAgBA,EAChBq8F,sBAAuBA,EACvBN,mBAAoBA,EACpBO,kBAAmBE,GAA0BG,EAC7CJ,gBAAiBN,EAAex7I,SAAS,UAI5Ci8I,EACC,cAAC,IAAD,CACExsH,YAAU,EACVj0C,WAAY,GACZF,SAAU,EACVgB,WAAW,OACXugB,QAAS,YACN8hB,OAAOC,SAASC,SAAS7e,SAASu7I,EAAsBC,KACvDQ,EACEpxE,IAAwBK,0BACxBswE,EAAsBC,KAG5BtrH,GAAI,EAZN,SAaGpf,YAAwB8pG,IAAyB4gC,EAAgB,iBAElE,KACJ,cAAC,IAAe5xE,QAAhB,YAMR,qCACE,cAAC,EAAD,CACElF,wBAAyBA,EACzBynB,cAAeA,EACfm3B,kBAAmBA,EACnBv4F,qBAAsBA,EACtBC,sBAAuBA,EACvBu0B,eAAgBA,EAChBq8F,sBAAuBA,EACvBN,mBAAoBA,IAEtB,cAAC,IAAe1xE,QAAhB,UASV0hE,EAAan1I,aAAe,CAC1BmtH,mBAAmB,EACnBioB,qBAAqB,GAGRD,Q,SCzNTgR,EAAsB,SAAC,GAAkB,IAAhBj/I,EAAe,EAAfA,SAC7B,OACE,cAAC,IAAD,CAAM7hB,WAAY,GAAIF,SAAU,EAAGgB,WAAW,OAAOY,MAAM,mBAA3D,SACGmgB,KAKDk/I,EAA4B,SAAC,GAAkB,IAAhBl/I,EAAe,EAAfA,SACnC,OACE,cAAC,IAAD,CAAM7hB,WAAY,GAAIF,SAAU,EAAGgB,WAAW,SAASY,MAAM,mBAA7D,SACGmgB,KAuCQm/I,EAlCU,SAAC,GAA2D,IAAzDv2E,EAAwD,EAAxDA,SAAUw2E,EAA8C,EAA9CA,eAAgBC,EAA8B,EAA9BA,wBACpD,OAAKz2E,GAAaw2E,EAEhB,eAAC,IAAD,WACE,cAAC,IAAD,IACA,cAACp2C,EAAA,EAAD,CACEI,WAAYmU,IACZtU,WAAY,cAAC,EAAD,UAAsBsU,MAClCpU,YAAa,eAAC,EAAD,eAAuBvgC,EAASjzD,QAAQ,QAEvD,cAAC,IAAD,CAAMx3B,WAAY,GAAIF,SAAU,GAAIgB,WAAW,OAAOY,MAAM,mBAAmBkzC,GAAI,EAAnF,SACGqsH,EAAiB7hC,IAAwCA,MAE3D6hC,EACC,qCACE,cAACp2C,EAAA,EAAD,CACEj2E,GAAI,EACJq2E,WAAYmU,IACZtU,WACE,cAAC,EAAD,UACGx1F,YAAwB8pG,IAA6B8hC,EAAyB,YAGnFl2C,YAAa,eAAC,EAAD,eAA6Bi2C,EAAezpI,QAAQ,QAEnE,cAAC,IAAD,CAAMx3B,WAAY,GAAIF,SAAU,GAAIgB,WAAW,OAAOY,MAAM,mBAAmBkzC,GAAI,EAAnF,SACGqsH,EAAiB7hC,IAA+BA,SAGnD,QA5BiC,M,2BCD5B+hC,EAnBwB,SAAC,GAAkC,IAAhCx0F,EAA+B,EAA/BA,yBACxC,OACE,mCACGA,EACC,cAAC,IAAD,CAAK7gD,EAAG,SAAUrI,GAAG,2BAArB,SACE,cAAC,IAAD,CACExiB,UAAU,OACVH,WAAYoG,IAAMvJ,YAAYG,OAC9B4D,MAAM,mBACN5B,SAAU,EACVE,WAAW,OALb,SAMG2sE,MAGH,QCiHKy0F,IAnHc,SAAC,GAkCvB,IAjCLz0F,EAiCI,EAjCJA,yBACAzJ,EAgCI,EAhCJA,UACA3lD,EA+BI,EA/BJA,SACAH,EA8BI,EA9BJA,MACAsiJ,EA6BI,EA7BJA,qBACA/uD,EA4BI,EA5BJA,cACAP,EA2BI,EA3BJA,cACA9yE,EA0BI,EA1BJA,MACA2V,EAyBI,EAzBJA,aACA0M,EAwBI,EAxBJA,UACA6+G,EAuBI,EAvBJA,qBACAt9I,EAsBI,EAtBJA,YACAqW,EAqBI,EArBJA,MACAknI,EAoBI,EApBJA,eACA55D,EAmBI,EAnBJA,aACAxwC,EAkBI,EAlBJA,MACAgtG,EAiBI,EAjBJA,aACA52E,EAgBI,EAhBJA,SACAw2E,EAeI,EAfJA,eACAlrJ,EAcI,EAdJA,kBACA8uD,EAaI,EAbJA,WACA7uD,EAYI,EAZJA,UACAsrJ,EAWI,EAXJA,UACAC,EAUI,EAVJA,YACAC,EASI,EATJA,WACAC,EAQI,EARJA,aACAzP,EAOI,EAPJA,cACA2M,EAMI,EANJA,aACAuC,EAKI,EALJA,wBACAX,EAII,EAJJA,uBACAT,EAGI,EAHJA,mBACAU,EAEI,EAFJA,6BACAC,EACI,EADJA,sBAEM/jC,EAAWx9G,wBAAc,CAC7BC,MAAM,eAAD,OAAiBjY,IAAMvL,YAAY6mB,GAAnC,OAEDu3C,EAAU8zF,uBACV6T,EAAkB,WACtBlB,EAA6BpxE,IAAwBG,yBACjDmtC,GACF3iE,EAAQzjC,KAAK,CACX9qB,OAAQ,0BAKd,OACE,cAAC,EAAD,CACE8xB,MAAOA,EACP/f,SAAUA,EACVmiJ,qBAAsBA,EACtBtiJ,MAAOA,EACPqiJ,gBAAiBzN,EALnB,SAMG,YAA8B,IAA3Bp0I,EAA0B,EAA1BA,SAAUqB,EAAgB,EAAhBA,UACZ,OACE,qCACGrB,EACC,eAAC,IAAD,WACE,cAAC+jJ,EAAA,EAAD,CACEL,UAAWA,EACXC,YAAaA,EACbC,WAAYA,EACZC,aAAcA,IAEhB,cAAClD,EAAA,EAAD,CACE5+G,UAAWA,EACX6+G,qBAAsBA,EACtBt9I,YAAaA,EACb+xB,aAAcA,EACd1b,MAAOA,EACPknI,eAAgBA,EAChBC,oBAAqBgD,EACrB/C,aAAcA,IAEhB,cAAC,IAAD,IACA,cAAC,EAAD,CACEz1E,wBAAyB2b,EACzB8L,cAAeA,EACf4vD,uBAAwBA,EACxBT,mBAAoBA,EACpB1vD,cAAeA,EACfowD,6BAA8BA,EAC9BC,sBAAuBA,IAExBzO,EACC,cAAC,EAAD,CACE39F,MAAOA,EACPt+C,kBAAmBA,EACnB8uD,WAAYA,EACZ7uD,UAAWA,EACX4iD,eAAgBsK,IAEhB,QAEJ,KACHtlD,GAAYqB,EAAY,cAAC2iJ,EAAA,EAAD,CAAqB5P,cAAeA,EAAe10H,MAAOA,IAAY,KAC9F1f,GAAY+uD,EACX,cAAC,EAAD,CAAgCA,yBAA0BA,IACxD,KACH/uD,GAAYyjJ,EACX,cAAC,EAAD,CACE52E,SAAUA,EACVw2E,eAAgBA,EAChBC,wBAAyBA,IAEzB,a,kICvHhB,IAeeW,EAfY,SAAA1hK,GACzB,MAAqC0e,qBAArC,mBAAOijJ,EAAP,KAAwBC,EAAxB,KAEMC,EAA4B,WAChC,IAAMpV,EAA0B,IAArBzpH,OAAO0pH,YAClBkV,EAAU5hK,EAASysJ,IAOrB,OAJArnI,oBAAUy8I,EAA2B,CAAC7hK,ICVzB,SACbylC,EACAq8H,GAEC,IADDC,EACA,wDACA38I,qBAAU,WAKR,OAHA4d,OAAOupH,iBAAiB9mH,EAAOq8H,EAASC,GAGjC,WACL/+H,OAAOwpH,oBAAoB/mH,EAAOq8H,ODCtCE,CAAuB,SAAUH,GAE1BF,G,2DEdHM,EAAqB,SAAC,GAAD,IACzBxnJ,EADyB,EACzBA,KACAlZ,EAFyB,EAEzBA,MACGgZ,EAHsB,wBAKzB,+CACMA,GADN,IAEEM,QAAQ,WACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,qQAIZmnJ,EAAmBjnJ,YAAc,qBAEjCinJ,EAAmBznJ,aAAe,CAChCC,KAAM,GACNlZ,MAAO,gBAGM0gK,I,YAAAA,I,yCClBFC,EAAiBjoJ,YAAOyD,IAAPzD,CAAH,qDACd,gBAAGkoJ,EAAH,EAAGA,aAAH,gBAAyBA,EAAzB,SACT,qBAAGC,eAAoB,sBAGdC,EAAmBpoJ,YAAOgC,IAAPhC,CAAH,4CAIhB8/G,EAAc9/G,IAAOC,OAAV,4SASpB,kBAAiC,OAAjC,EAAGooJ,2BACH,gBAAGC,EAAH,EAAGA,iBAAkBC,EAArB,EAAqBA,qBAArB,MACqB,SAArBD,EAA8B,QAAUC,EAAuB,SAAWA,KAGxE,gBAAGC,EAAH,EAAGA,cAAH,OAAuBA,GAAiB,QAAUA,KAQ3CC,EAAazoJ,YAAO8/G,EAAP9/G,CAAH,2FAEnB,kBAAgC,OAAhC,EAAG0oJ,uBAA+D,gBAC5DxnJ,mBAAS,YAINynJ,EAAmB3oJ,YAAOgC,IAAPhC,CAAH,mIACP,SAAAM,GAAK,OAAIA,EAAM/Y,mBAGxB,SAAA+Y,GAAK,OAAKA,EAAMsoJ,WAAa,WAAa,OAEnD,gBAAGC,EAAH,EAAGA,SAAU/7J,EAAb,EAAaA,MAAb,OACA+7J,GAAQ,gCAEU/7J,EAAM/I,OAAOC,iBAAiB,KAFxC,6CAOC8kK,EAAgB9oJ,YAAO+oJ,IAAP/oJ,CAAH,wEAEP,SAAAM,GAAK,OAAIA,EAAM0oJ,uBAAN,UAAkC9nJ,mBAAS,WAA3C,UCnDtB+nJ,EAAc,SAAC,GAmBd,IAlBLjmJ,EAkBI,EAlBJA,MACAtd,EAiBI,EAjBJA,SACAE,EAgBI,EAhBJA,WACA88J,EAeI,EAfJA,aACAl+C,EAcI,EAdJA,WACA0kD,EAaI,EAbJA,eACAR,EAYI,EAZJA,uBACAjkD,EAWI,EAXJA,kBACA0kD,EAUI,EAVJA,YACA3iJ,EASI,EATJA,WACA8hJ,EAQI,EARJA,iBACAc,EAOI,EAPJA,aACAb,EAMI,EANJA,qBACAF,EAKI,EALJA,wBACAG,EAII,EAJJA,cACAI,EAGI,EAHJA,WACAS,EAEI,EAFJA,sBACAvgK,EACI,EADJA,MAEA,OACE,eAAC6/J,EAAD,CACEE,SAAU7lJ,EACV1b,MAAM,wBACNshK,WAAYA,EACZrhK,gBAAiB8hK,EAJnB,UAKGrmJ,GACC,cAACqrH,EAAA,EAAD,CAASxnI,UAAU,SAASnB,SAAU,EAAG80C,GAAI,EAAGF,GAAI,EAAGhzC,MAAOkf,EAAY5gB,WAAY,CAAC,GAAI,IAA3F,SACE,cAACub,EAAA,EAAD,CAAMvb,WAAYA,GAAcA,EAAYF,SAAUA,GAAYA,EAAUoD,MAAOA,GAASA,EAA5F,SACGka,MAINmmJ,GACC,cAACrpC,EAAD,CACE12G,KAAK,SACL,aAAW,QACXk/I,iBAAkBA,EAClBC,qBAAsBA,EACtBF,wBAAyBO,EAAa,KAAOP,EAC7CG,cAAeA,EACfvhJ,QAASy7I,EAPX,SAQE,cAACxG,EAAA,EAAD,CAAW17I,KAAM4oJ,EAAc9hK,MAAOkhK,GAAgC17J,IAAM/I,OAAOI,kBAAkB,SAGxGqgH,GACC,cAACikD,EAAD,CAAYC,uBAAwBA,EAAwBzhJ,QAASw9F,EAArE,SACE,cAAC6kD,EAAD,CAAgB9oJ,KAAM0oJ,GAAkC,GAAI5hK,MAAOwF,IAAM/I,OAAOI,kBAAkB,aAO5G8kK,EAAY1oJ,aAAe,CACzByC,MAAO,GACP0/I,aAAc,KACdl+C,YAAY,EACZC,kBAAmB,KACnBj+F,WAAY,wBACZjf,gBAAiB,eAWJ0hK,I,EAAAA,I,8ZCUTM,EAAoBvpJ,aA9EN,SAAAM,GAClB,IACEmH,EA2BEnH,EA3BFmH,SACA48F,EA0BE/jG,EA1BF+jG,OACA8kD,EAyBE7oJ,EAzBF6oJ,YACAtG,EAwBEviJ,EAxBFuiJ,eACAr+C,EAuBElkG,EAvBFkkG,WACA0kD,EAsBE5oJ,EAtBF4oJ,eACAR,EAqBEpoJ,EArBFooJ,uBACAjkD,EAoBEnkG,EApBFmkG,kBACAzhG,EAmBE1C,EAnBF0C,MACA0hG,EAkBEpkG,EAlBFokG,WAEAh/G,GAgBE4a,EAjBFxX,MAiBEwX,EAhBF5a,UACAE,EAeE0a,EAfF1a,WACA29G,EAcEjjG,EAdFijG,UACA2kD,EAaE5nJ,EAbF4nJ,aACA1hJ,EAYElG,EAZFkG,WACA8hJ,EAWEhoJ,EAXFgoJ,iBACAc,EAUE9oJ,EAVF8oJ,aACAb,EASEjoJ,EATFioJ,qBACAF,EAQE/nJ,EARF+nJ,wBACAG,EAOEloJ,EAPFkoJ,cAEAL,GAKE7nJ,EANFza,aAMEya,EALF6nJ,eACAkB,EAIE/oJ,EAJF+oJ,sBACAG,EAGElpJ,EAHFkpJ,WACAR,EAEE1oJ,EAFF0oJ,sBACGzX,EA3BL,YA4BIjxI,EA5BJ,GA8BMmpJ,EAAgB,UAAMlmD,EAAN,aAChBurB,EAAgB,UAAMvrB,EAAN,aAEhBJ,EAAYskD,EAAmB,IAErC,OACE,cAAC,IAAD,CACEn4B,gBAAiB/rB,EACjBA,UAAWkmD,EACX36B,iBAAkBA,EAClBzqB,OAAQA,EACRqlD,eAAa,EACb7G,eAAgBA,EAChB7zB,eAAgB,IAPlB,SAQE,cAAC1rB,EAAA,EAAD,CAAYH,UAAWA,EAAWE,0BAAwB,EAA1D,SACE,eAAC+kD,EAAD,CAAkB/gJ,cAAc,SAAhC,UACE,cAAC,EAAD,CACEuhJ,WAAYO,GAAenmJ,EAC3BslJ,iBAAkBA,EAClBc,aAAcA,EACdb,qBAAsBA,EACtBF,wBAAyBA,EACzBG,cAAeA,EACfhkD,WAAYA,EACZ0kD,eAAgBA,EAChBR,uBAAwBA,EACxBjkD,kBAAmBA,EACnBzhG,MAAOA,EACPtd,SAAUA,EACVE,WAAYA,EACZujK,YAAaA,EACbzG,aAAcG,EACdr8I,WAAYA,EACZ6iJ,sBAAuBA,EACvBvgK,MAAO0gK,IAET,cAACV,EAAD,CAAea,IAAI,MAAMC,SAAUllD,EAAYskD,sBAAuBA,EAAtE,SACE,cAACf,EAAD,CAAgBE,cAAeA,EAAeD,aAAcA,EAA5D,SACG2B,IAAMC,aAAariJ,EAAU8pI,iBASE1iB,MAAM,CAClDtrB,UAAW,eADavjG,CAAH,09CAIR,YAAiB,IAAd7a,EAAa,EAAbA,OACZ,OAAIA,GAEG2H,IAAM3H,OAAO4kK,OAUpB3uE,IAAa,GAAK,6CAOTtuF,IAAM3H,OAAO2xJ,MASGhqJ,IAAM7I,MAAM,GACb6I,IAAM7I,MAAM,IACpC,gBAAG4B,EAAH,EAAGA,aAAH,MACA,2BAA6BA,EAAe,4BAA8BA,EAAe,OAGvE,gBAAGmkK,EAAH,EAAGA,gBAAH,OAA0BA,GAAoCl9J,IAAM/I,OAAOO,UAAU,KAQvGwI,IAAMpL,aAAa0mB,GAerBtb,IAAMpL,aAAa0mB,IAMf,kBAAsB,iBAAtB,EAAGviB,gBAGI,gBAAGiD,EAAH,EAAGA,MAAH,gBAAkBA,EAAlB,SAafygK,EAAkBhpJ,aAAe,CAC/B+nJ,iBAAkB,QAClBc,aAAc,GACdb,qBAAsB,OACtBF,wBAAyB,MACzBG,cAAe,UACf3iK,aAAa,GAAD,OAAKiH,IAAM7I,MAAM,GAAjB,MACZkkK,eAAe,EACf1gJ,SAAU,KACV+mD,WAAW,EACX+1C,gBAAiB,KACjBC,YAAY,EACZC,kBAAmB,KACnBzhG,MAAO,GACPtd,SAAU,KACVE,WAAY,KACZ8+G,YAAY,EACZ57G,MAAO,IACPqgK,aAAa,EACbjB,aAAcp7J,IAAMtK,MAAM,IAG5B+mK,EAAkB9/I,UAAY,CAC5B6+I,iBAAkBtuH,IAAUE,OAC5BkvH,aAAcpvH,IAAUjnB,OACxBw1I,qBAAsBvuH,IAAUE,OAChCmuH,wBAAyBruH,IAAUE,OACnCsuH,cAAexuH,IAAUE,OACzBr0C,aAAcm0C,IAAUE,OACxBiuH,cAAenuH,IAAUK,KACzB5yB,SAAUuyB,IAAUsiH,KACpB9tF,UAAWx0B,IAAUK,KACrBqoH,aAAc1oH,IAAU2lE,KACxB6E,WAAYxqE,IAAUK,KACtBoqE,kBAAmBzqE,IAAU2lE,KAC7B38F,MAAOg3B,IAAUE,OACjBt0C,WAAYo0C,IAAUE,OACtBx0C,SAAUs0C,IAAUE,OACpBwqE,WAAY1qE,IAAUK,KACtBvxC,MAAOkxC,IAAUjnB,OACjBo2I,YAAanvH,IAAUK,KACvB6tH,aAAcluH,IAAUC,UAAU,CAACD,IAAUjnB,OAAQinB,IAAUE,UAGlDqvH,O,gOCpNTU,EAAa3nK,YAAH,sTAKH4e,mBAAS,WAAgBA,mBAAS,WAChCA,mBAAS,eACPA,mBAAS,sBACPA,mBAAS,YAStBgpJ,EAAsB5nK,YAAH,yEAEN4e,mBAAS,YAGtBipJ,EAAqB7nK,YAAH,oHACF4e,mBAAS,8BACpBA,mBAAS,0BAGIA,mBAAS,4BAI3BkpJ,EAAyB9nK,YAAH,2MAIf4e,mBAAS,WACLA,mBAAS,WAENA,mBAAS,YAKvBmpJ,EAAa/nK,YAAH,oHACM4e,mBAAS,2BACpBA,mBAAS,8BAGIA,mBAAS,+BAI3BopJ,EAAgBhoK,YAAH,yIACR4e,mBAAS,0BAGIA,mBAAS,0BAITA,mBAAS,+BAIpBqpJ,EAAwBvqJ,YAAOgC,IAAPhC,CAAH,yPAmBrBwqJ,EAAwBxqJ,aAAO,cAAGiL,SAAH,EAAaw/I,YAAb,IAA6B14B,EAA7B,wBAAwC,cAAC,IAAD,eAAUA,MAAzD/xH,CAAH,8DAC9BiqJ,EACAG,GACA,qBAAGn/I,SAA2Bo/I,EAAaC,KAC3C,qBAAGG,aAAiCP,KACpC,gBAAGj/I,EAAH,EAAGA,SAAUw/I,EAAb,EAAaA,YAAb,OAA+Bx/I,GAAYw/I,GAAeN,KAGjDO,EAA4B1qJ,YAAO2qJ,IAAP3qJ,CAAH,ggBAClCiqJ,EACAI,EACAH,EACAE,GAuBSzoJ,EAAkB3B,aAAO,cAAG4qJ,cAAH,IAAqB74B,EAArB,wBAAgC,cAAC,IAAD,eAAeA,MAAtD/xH,CAAH,sMAItB,gBAAG4qJ,EAAH,EAAGA,cAAH,4BAAsD,GAAhBA,EAAtC,SASOC,EAAiB7qJ,YAAOmB,IAAPnB,CAAH,6JACZkB,mBAAS,eACPA,mBAAS,oBAGTA,mBAAS,eACbA,mBAAS,uBC9HhB4pJ,EAAQ,CACZC,UAAW,YACXC,KAAM,QA4BFC,EAAiB,SAAC,GAAwE,IAAtEniK,EAAqE,EAArEA,MAAOi8D,EAA8D,EAA9DA,QAAS5hD,EAAqD,EAArDA,SAAUk7H,EAA2C,EAA3CA,KAAM14D,EAAqC,EAArCA,YAAaulF,EAAwB,EAAxBA,kBAC/DliI,EAAWmiI,wBAEbxlF,GAAeulF,KAEJnmG,EAAQl/C,MAAK,SAAAqvB,GAAM,MAAqB,mBAAjBA,EAAOlyB,UAChC+hD,EAAQqmG,OAAO,EAAG,EAAG,CAAExqD,MAAOxoF,IAAOyC,aAAc7X,MAAO,oBAGvE,IAAMqoJ,EAAetmG,EAAQl/C,MAAK,SAAAqvB,GAAM,OAAI2rE,YAAoB3rE,EAAO0rE,MAAO53E,EAASC,cAAc87B,EAAQ,GAEvGlgD,EAAYC,wBAAc,CAAE8pC,SAAU9hD,IAAMvL,YAAYmzF,KAExD+1E,EAAcpsB,EAAOA,IAASysB,EAAMC,WAAalmJ,EAEjDoG,EAAW,SAAAiqB,GAAM,OAAI2rE,YAAoB3rE,EAAO0rE,MAAOyqD,EAAazqD,QAQpE0qD,EAAoB,kBACxB,cAACf,EAAD,CAAuBzhK,MAAO2hK,EAAc,OAAS3hK,EAArD,SACGi8D,EAAQvjE,KAAI,SAAA0zC,GAAM,OACjB,cAACs1H,EAAD,CACE,uBAAet1H,EAAOlyB,MAAtB,WACA,gBAAeiI,EAASiqB,GACxBq2H,SAAS,KACTtkJ,QAAS,kBAbI,SAAAiuB,GACfm2H,IAAiBn2H,GACnB/xB,EAAS+xB,GAWUs2H,CAAat2H,IAC5BjqB,SAAUA,EAASiqB,GACnBu1H,YAAaA,EACb7oC,GAAI1sF,EAAO0rE,MAPb,SASE,cAACz/F,EAAA,EAAD,CAAM7Z,MAAQ2jB,EAASiqB,GAAsB,KAAZ,UAAjC,SAAoDA,EAAOlyB,SADtDkyB,EAAO0rE,aAOpB,OAAK6pD,EAKH,cAAC9oJ,EAAD,CAAiBipJ,cAAe7lG,EAAQhpC,OAAQ,cAAY,gBAAgB9Y,mBAAiB,EAA7F,SACE,eAAC,IAAD,WACE,cAAC,IAAD,UACE,cAACynJ,EAAD,UACE,cAACG,EAAD,UAAiBQ,EAAaroJ,YAGlC,cAAC,IAAD,UAAqBsoJ,WAXlBA,KAiBXL,EAAeH,MAAQA,EAEvBG,EAAe1qJ,aArEM,CACnBzX,MAAO,GACPqa,SAAU,aACVk7H,KAAM,KACN14D,aAAa,EACbulF,mBAAmB,GAkEND,QC7GAA,O,2HCGFQ,EAAsBzrJ,YAAOmB,IAAPnB,CAAH,6QAGflT,IAAMpK,cAMZoK,IAAM/I,OAAOmE,cAAc,KASzBwjK,EAAkB1rJ,YAAOyD,IAAPzD,CAAH,oLAOZlT,IAAM/I,OAAOqH,gBAAgB,KAGhCugK,EAAU3rJ,YAAOyD,IAAPzD,CAAH,6C,OCjBd4rJ,EAAsB,CAC1B53J,QAASlH,IAAM/I,OAAOmE,cAAc,IACpCoD,QAASwB,IAAM/I,OAAO6G,oBACtBO,QAAS2B,IAAM/I,OAAOsH,aACtBg8C,MAAOv6C,IAAM/I,OAAOwH,aAyBPsgK,EApBY,SAAC,GAAuB,IAFlCvkK,EAEa8hB,EAAoB,EAApBA,KAAM26B,EAAc,EAAdA,QAClC,OACE,cAAC2nH,EAAD,CAAiB3kK,OAAQ,cAJZO,EAIoC8hB,EAJ3BwiJ,EAAoBtkK,IAAUskK,EAAoB53J,SAIxE,SACE,eAACy3J,EAAD,CAAqBnxH,GAAI,EAAGE,GAAI,EAAhC,UACY,YAATpxB,EACC,cAACuiJ,EAAD,UACE,cAACzrD,EAAA,EAAD,CAAkB54G,MAAOvD,IAAOsH,aAAcmV,KAAM,OAEpD,KACJ,cAAC,IAAD,UAAM2/F,IAAgBp8D,W,iBCyBfwjH,IApDa,SAAC,GAQtB,IAPLjI,EAOI,EAPJA,iBACAD,EAMI,EANJA,oBACAD,EAKI,EALJA,iBAKI,IAJJ8H,iBAII,MAJQ,KAIR,MAHJC,mBAGI,MAHU,KAGV,MAFJC,kBAEI,MAFS,KAET,MADJC,oBACI,MADW,KACX,EACJ,OACE,eAAC,IAAD,CAAkBz/I,IAAK,EAAvB,UACGw3I,EACC,cAAC,EAAD,CAAoB9kH,GAAI,EAAGE,GAAI,EAAGpxB,KAAMk2I,EAAkBv7G,QAASs7G,IACjE,KAEJ,eAACr9I,EAAA,EAAD,CACElZ,MAAO,GACPvC,WAAW,SACXR,OAAQq5J,EAAmB,IAAM,GACjC54J,eAAgB,SAChB6gB,cAAc,SACd3D,GAAI,EANN,UAOE,cAACvC,EAAA,EAAD,CAAMza,WAAW,MAAM8zC,GAAI,EAAG90C,SAAU,EAAGi1C,GAAIykH,GAAoB,GAAnE,SACG8H,IAEH,cAAC/lJ,EAAA,EAAD,CAAMza,WAAW,OAAOY,MAAM,mBAAmB5B,SAAU,GAA3D,SACGyhK,OAGL,eAACnlJ,EAAA,EAAD,CACElZ,MAAO,GACPvC,WAAW,SACXR,OAAQq5J,EAAmB,IAAM,GACjC54J,eAAgB,SAChB6gB,cAAc,SACd3D,GAAI,EANN,UAOE,cAACvC,EAAA,EAAD,CAAMza,WAAW,MAAM8zC,GAAI,EAAG90C,SAAU,EAAGi1C,GAAIykH,GAAoB,GAAnE,SACGgI,IAEH,cAACjmJ,EAAA,EAAD,CAAMza,WAAW,OAAOY,MAAM,mBAAmB5B,SAAU,GAA3D,SACG2hK,Y,sMCRLyE,EAAY,SAAC,GAAgF,IAA9EhpJ,EAA6E,EAA7EA,IAAKipJ,EAAwE,EAAxEA,OAAQC,EAAgE,EAAhEA,cAAexW,EAAiD,EAAjDA,KAAMD,EAA2C,EAA3CA,SAAUpnH,EAAiC,EAAjCA,KAAM9rC,EAA2B,EAA3BA,MAAUkvJ,EAAiB,iBAC1F0a,EAAYv6C,mBAEZw6C,EAAUlmC,sBAAW,sBAAC,4BAAA96H,EAAA,sEACR8+E,IAAM5oF,IAAI0hB,GAAKy1F,OAAM,SAASlxD,GAiB9C,OAhBA5b,QAAQC,IAAI,0DAA2D5oB,GACnEukC,EAAMwP,UAGRprB,QAAQC,IAAI,OAAQ2b,EAAMwP,SAAStyB,MACnCkH,QAAQC,IAAI,SAAU2b,EAAMwP,SAAS/zB,QACrC2I,QAAQC,IAAI,UAAW2b,EAAMwP,SAASg1B,UAC7BxkC,EAAM+qC,QAIf3mD,QAAQC,IAAI,UAAW2b,EAAM+qC,SAG7B3mD,QAAQC,IAAI,UAAW2b,EAAMtD,UAExB,KAlBiB,cACpBitC,EADoB,gBAqBbA,EAAIzsD,KArBS,mFAsBzB,CAACzhB,IAEEqpJ,EAAgBnmC,sBAAW,sBAAC,8BAAA96H,EAAA,mEAEjB4X,EAFiB,iCAEJopJ,IAFI,gDAEUF,EAFV,8CAE0BA,EAF1B,eAExBznI,EAFwB,KAIxB6nI,EAAYC,IAAOF,cAAc,CACrCF,UAAWA,EAAUj6C,QACrBg6C,cAAeznI,EACfixH,OACAD,WACApnH,SAGE49H,GACFA,EAAOK,GAbqB,kBAgBvBA,GAhBuB,kCAkB9B3gI,QAAQ4b,MAAM,+CAAd,MAlB8B,0DAoB/B,CAAC2kH,EAAexW,EAAMD,EAAUpnH,EAAM49H,EAAQG,EAASppJ,IAM1D,OAJAqI,qBAAU,WACRghJ,MACC,CAACA,IAEG,cAAC1oJ,EAAA,EAAD,yBAAK,aAAYphB,GAAWkvJ,GAA5B,IAAwCnxC,IAAK6rD,MAGtDH,EAAUvrJ,aAvEW,CACnBuC,IAAK,KACLkpJ,cAAe,KACfxW,MAAM,EACND,UAAU,EACVpnH,KAAM,KACN49H,OAAQ,KACR1pK,MAAO,MAoEMypK,QCjGAA,O,qJCaAr7C,EAZK,SAAC,GAAD,IAAGC,EAAH,EAAGA,WAAYC,EAAf,EAAeA,aAAcC,EAA7B,EAA6BA,YAAiCtwG,GAA9D,EAA0C3c,KAA1C,EAAgDsoH,UAAhD,yBAClB,eAACjqG,EAAA,EAAD,yBAAMw4B,GAAI,EAAGu2E,cAAc,MAAMvqH,eAAe,iBAAoB8Z,GAApE,cACE,cAAC0B,EAAA,EAAD,CAAMlZ,MAAO,CAAC,GAAO,EAAI,EAAG,GAAO,GAAO,GAAO,IAAjD,SAA0D4nH,IAC1D,cAAC1uG,EAAA,EAAD,CAAMxb,eAAe,WAAWsC,MAAO,CAAC,GAAO,EAAI,EAAG,EAAI,EAAG,EAAG,GAAO,IAAvE,SACG6nH,IAEH,cAAC3uG,EAAA,EAAD,CAAMlZ,MAAO,CAAC,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,GAAItC,eAAe,WAAxE,SACGoqH,S,QCHD42C,EAAsB,SAAC,GAA8B,IAA5BtkI,EAA2B,EAA3BA,MAAO00H,EAAoB,EAApBA,cACpC,OACE,cAAC,IAAD,UACE,cAAC,EAAD,CACE/mC,WAAYmU,IACZlU,KAAK,gBACL,aAAW,cACXn2E,GAAI,EACJ+1E,WACE,cAAC,IAAD,CAAUlrH,OAAK,EAAC8B,MAAM,mBAAtB,SACGswJ,EAAgB5yB,IAAaA,MAGlCpU,YACE,eAAC,IAAD,CAAUprH,OAAK,EAAC8B,MAAM,mBAAtB,cACIy3D,MAAM77B,GAAS,EAAMA,EAAM9F,QAAQ,WAYjDoqI,EAAoBjnJ,aAAe,CACjC2iB,MAAO,GAGMskI,O,8ICtCf,kCAAO,IAAM5sB,EAAwB,CACnC,CACEv4I,MAAO,oBACP2mB,MAAO,MAET,CACE3mB,MAAO,yBACP2mB,MAAO,OAET,CACE3mB,MAAO,oBACP2mB,MAAO,MAET,CACE3mB,MAAO,cACP2mB,MAAO,MAET,CACE3mB,MAAO,eACP2mB,MAAO,OAET,CACE3mB,MAAO,YACP2mB,MAAO,MAET,CACE3mB,MAAO,QACP2mB,MAAO,U,mGCtBL24C,EAAgB,CACpB2qG,aAAc,GACdC,qBAAsB,GACtBC,mBAAoB,GACpBC,gBAAiB,GACjBC,wBAAyB,GACzBC,oBAAqB,GACrBC,wBAAyB,GACzBpoJ,WAAW,EACXqoJ,kBAAkB,EAClB/3F,eAAe,EACfg4F,oBAAoB,EACpBC,qBAAiB3iI,EACjByxB,aAAc,KACd7W,UAAW,GACXliB,OAAQ,GACRkqI,uBAAuB,EACvBC,4BAA6B,GAC7BC,kCAAmC,CAAEnsK,IAAK,GAAI21C,cAAe,KAUxD,SAASy2H,EAAuBtqF,GAAkB,IAAD,MAChDuqF,EAAuBvqF,EAAe,SAAeA,EAAe,SAAe,GACnFwqF,EAAsBxqF,EAAe,QAAcA,EAAe,QAAc,GAChFyqF,EAAqBzqF,EAAe,QAAcA,EAAe,QAAc,GAC/E0qF,EAAyB1qF,EAAe,WAAiBA,EAAe,WAAiB,GAM/F,MAL6B,CAC3B6pF,wBAAuB,gCAAMU,GAAN,YAA+BC,WAA/B,QAAuD,GAC9EV,oBAAmB,gCAAMW,GAAN,YAA6BC,WAA7B,QAAwD,GAC3EX,wBAAuB,UAAE/pF,EAAe,gBAAjB,QAAiC,IA+S7C2qF,IA1Sa,SAACzhJ,EAAOqoB,GAIlC,OAHAroB,EAAQme,YAAgBne,EAAO41C,GAGvBvtB,EAAOhrB,MACb,KAAKmuC,IAAwBk8B,qCAC3B,OAAO,2BACF1nE,GADL,IAEEkhJ,4BAA6B74H,EAAOklE,WAExC,KAAK/hD,IAAwB+7B,2BAC3B,OAAO,2BACFvnE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAqB,eAChBxgJ,EAAMwgJ,sBAEXC,mBAAoBp4H,EAAOo4H,mBAC3BC,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,2BAEvC,KAAKr1G,IAAwB67B,2BAC3B,OAAO,2BACFrnE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAqB,eAChBxgJ,EAAMwgJ,sBAEXC,mBAAmB,2BACdzgJ,EAAMygJ,oBADO,IAEhBnyI,YAAY,eACPtO,EAAMygJ,mBAAmBnyI,eAGhCoyI,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,yBACnCpoJ,UAAW4vB,EAAO5vB,YAEtB,KAAK+yC,IAAwB87B,yBAC3B,OAAO,2BACFtnE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAqB,eAChBxgJ,EAAMwgJ,sBAEXC,mBAAmB,2BACdzgJ,EAAMygJ,oBADO,IAEhBnyI,YAAY,eACPtO,EAAMygJ,mBAAmBnyI,eAGhCoyI,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,yBACnC/wG,aAAcznB,EAAOynB,aACrB7W,UAAW5Q,EAAO4Q,YAEtB,KAAKuS,IAAwBq7B,8BAC3B,OAAO,2BACF7mE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAsBn4H,EAAOm4H,qBAC7BC,mBAAmB,2BACdzgJ,EAAMygJ,oBADO,IAEhBnyI,YAAY,eACPtO,EAAMygJ,mBAAmBnyI,eAGhCoyI,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,yBACnC93F,eAAe,EACftwD,WAAW,EACXq3C,aAAc,OAGlB,KAAKtE,IAAwBs7B,4BAC3B,OAAO,2BACF9mE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAqB,eAChB5qG,EAAc4qG,sBAEnBC,mBAAmB,2BACdzgJ,EAAMygJ,oBADO,IAEhBnyI,YAAY,eACPtO,EAAMygJ,mBAAmBnyI,eAGhCoyI,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,yBACnCpoJ,WAAW,IAGf,KAAK+yC,IAAwBu7B,6BAC3B,OAAO,2BACF/mE,GADL,IAEEugJ,aAAa,2BACRvgJ,EAAMugJ,cADC,IAEV/wB,SAAS,eACJxvH,EAAMugJ,aAAa/wB,UAExBlvD,QAAQ,eACHtgE,EAAMugJ,aAAajgF,SAExB5kD,QAAQ,eACH1b,EAAMugJ,aAAa7kI,SAExB1O,QAAQ,eACHhN,EAAMugJ,aAAavzI,WAG1BwzI,qBAAqB,eAChBxgJ,EAAMwgJ,sBAEXC,mBAAmB,eACdzgJ,EAAMygJ,oBAEXC,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,yBACnCE,mBAAoB14H,EAAO04H,qBAI/B,KAAKv1G,IAAwBw7B,6BAC3B,OAAO,2BACFhnE,GADL,IAEEwgJ,qBAAsBn4H,EAAOm4H,qBAC7BE,gBAAiBr4H,EAAOq4H,gBACxBC,wBAAyBt4H,EAAOs4H,wBAChCC,oBAAqBv4H,EAAOu4H,oBAC5BC,wBAAyBx4H,EAAOw4H,wBAChCG,gBAAiB34H,EAAO24H,gBACxBj4F,eAAe,EACftwD,WAAW,EACXqoJ,kBAAkB,EAClBhxG,aAAc,OAGlB,KAAKtE,IAAwBy7B,6BAC3B,OAAO,2BACFjnE,GADL,IAEEvH,UAAW4vB,EAAO5vB,YAGtB,KAAK+yC,IAAwB27B,2BAC3B,OAAO,2BACFnnE,GADL,IAEE0gJ,gBAAiBr4H,EAAOq4H,gBACxBC,wBAAyB,GACzBC,oBAAqB,GACrBC,wBAAyB,GACzBG,gBAAiB34H,EAAO24H,gBACxBj4F,cAAe1gC,EAAO0gC,cACtBjZ,aAAcznB,EAAOynB,aACrBr3C,WAAW,EACXqoJ,kBAAkB,IAGtB,KAAKt1G,IAAwB47B,4BAC3B,IAAMs6E,EAAgB,SAACzkJ,EAAOjoB,GAAR,YAA2BqpC,IAAVphB,EAAsBA,EAAQ+C,EAAMhrB,IAErE2sK,EAAoBD,EAAcr5H,EAAO5vB,UAAW,aACpDmpJ,EAAuBF,EAAcr5H,EAAOynB,aAAc,gBAC1D+xG,EAAwBH,EAAcr5H,EAAO0gC,cAAe,iBAElE,OAAO,2BACF/oD,GADL,IAEE+gJ,mBAAoB14H,EAAO04H,mBAC3BtoJ,UAAWkpJ,EACX7xG,aAAc8xG,EACd74F,cAAe84F,IAGnB,KAAKr2G,IAAwBg8B,6BAC3B,OAAO,2BACFxnE,GADL,IAEEugJ,aAAa,eACRl4H,EAAOk4H,cAEZC,qBAAqB,eAChBxgJ,EAAMwgJ,sBAEXC,mBAAmB,eACdzgJ,EAAMygJ,oBAEXC,gBAAgB,YAAK1gJ,EAAM0gJ,iBAC3BC,wBAAwB,YAAK3gJ,EAAM2gJ,yBACnCC,oBAAoB,YAAK5gJ,EAAM4gJ,qBAC/BC,wBAAwB,YAAK7gJ,EAAM6gJ,2BAGvC,KAAKr1G,IAAwBi8B,wBAC3B,OAAO,2BACFznE,GADL,IAEE+oD,eAAe,EACfjZ,aAAc,KACd7W,UAAW,KAIf,KAAKuS,IAAwB07B,qCAC3B,OAAO,2BACFlnE,GADL,IAEE8gJ,iBAAkBz4H,EAAOy4H,mBAG7B,KAAKt1G,IAAwBm8B,2CAC3B,OAAO,2BACF3nE,GADL,IAEEmhJ,kCAAmC94H,EAAOy5H,mBAG9C,QACE,OAAO9hJ,K,0FCpVb,kCAAO,IAAM+hJ,EAAa,W,iFCEpBl7B,EAAkB,SAAC,GAAD,IACtBpyH,EADsB,EACtBA,KACAlZ,EAFsB,EAEtBA,MACGgZ,EAHmB,wBAKtB,+CACMA,GADN,IAEEM,QAAQ,YACR9X,MAAO0X,EACPza,OAAQya,EACRM,KAAMxZ,EALR,SAOE,sBAAMuZ,EAAE,41CAIZ+xH,EAAgB7xH,YAAc,kBAE9B6xH,EAAgBryH,aAAe,CAC7BC,KAAM,GACNlZ,MAAO,gBAGMsrI,O,6BCrBAm7B,IAJM,WACnB,IAAMC,EAAgBvxH,SAASpwC,KAAKkuJ,UACpC,OAAOyT,EAAcC,SAAS,SAAWD,EAAcC,SAAS,a,6CCFlE,kCACO,IAAMC,EAAkB,CAC7BllI,SAAU,SACVx6B,IAAK,iB,2ZCHP,IAAIhN,EAAM,CACT,sBAAuB,KACvB,qBAAsB,KACtB,0BAA2B,KAC3B,mBAAoB,KACpB,WAAY,KACZ,mBAAoB,KACpB,uBAAwB,KACxB,iBAAkB,KAClB,uBAAwB,KACxB,sBAAuB,KACvB,uBAAwB,KACxB,yBAA0B,KAC1B,gBAAiB,KACjB,uBAAwB,KACxB,kBAAmB,KACnB,yBAA0B,KAC1B,sBAAuB,KACvB,kBAAmB,KACnB,mBAAoB,KACpB,uBAAwB,KACxB,gBAAiB,KACjB,kBAAmB,KACnB,yBAA0B,KAC1B,wBAAyB,KACzB,wBAAyB,KACzB,yBAA0B,KAC1B,kBAAmB,KACnB,YAAa,KACb,cAAe,KACf,YAAa,KACb,iBAAkB,KAClB,qBAAsB,KACtB,qBAAsB,KACtB,sBAAuB,KACvB,qBAAsB,KACtB,mBAAoB,KACpB,iBAAkB,KAClB,iBAAkB,KAClB,gBAAiB,KACjB,kBAAmB,KACnB,cAAe,KACf,iBAAkB,KAClB,cAAe,KACf,aAAc,KACd,sBAAuB,KACvB,yBAA0B,KAC1B,iBAAkB,KAClB,uBAAwB,KACxB,kBAAmB,KACnB,gBAAiB,KACjB,4BAA6B,KAC7B,gCAAiC,KACjC,6BAA8B,KAC9B,iCAAkC,KAClC,iBAAkB,KAClB,aAAc,KACd,eAAgB,KAChB,eAAgB,KAChB,cAAe,KACf,aAAc,KACd,cAAe,KACf,oBAAqB,KACrB,2BAA4B,KAC5B,oBAAqB,KACrB,oBAAqB,KACrB,qBAAsB,KACtB,wBAAyB,KACzB,kBAAmB,KACnB,sBAAuB,KACvB,oBAAqB,KACrB,mBAAoB,KACpB,iBAAkB,KAClB,cAAe,KACf,mBAAoB,KACpB,cAAe,KACf,oBAAqB,KACrB,kBAAmB,KACnB,kBAAmB,KACnB,kBAAmB,KACnB,cAAe,KACf,0BAA2B,KAC3B,kBAAmB,KACnB,eAAgB,KAChB,4BAA6B,KAC7B,mBAAoB,KACpB,gBAAiB,KACjB,eAAgB,KAChB,kBAAmB,KACnB,gBAAiB,KACjB,mBAAoB,KACpB,iBAAkB,KAClB,iBAAkB,KAClB,eAAgB,KAChB,qBAAsB,KACtB,0BAA2B,KAC3B,wBAAyB,KACzB,kBAAmB,KACnB,aAAc,KACd,iBAAkB,KAClB,cAAe,KACf,iBAAkB,KAClB,cAAe,KACf,uBAAwB,KACxB,kBAAmB,KACnB,iBAAkB,KAClB,oBAAqB,KACrB,qBAAsB,KACtB,mBAAoB,KACpB,mBAAoB,KACpB,oBAAqB,KACrB,YAAa,KACb,sBAAuB,KACvB,eAAgB,KAChB,gBAAiB,KACjB,cAAe,KACf,qBAAsB,KACtB,uBAAwB,KACxB,gBAAiB,KACjB,kBAAmB,KACnB,yBAA0B,KAC1B,eAAgB,KAChB,mBAAoB,KACpB,oBAAqB,KACrB,gBAAiB,KACjB,YAAa,KACb,cAAe,KACf,aAAc,KACd,kBAAmB,KACnB,YAAa,KACb,cAAe,KACf,qBAAsB,KACtB,aAAc,KACd,mBAAoB,KACpB,eAAgB,KAChB,cAAe,KACf,aAAc,KACd,gBAAiB,KACjB,aAAc,KACd,oBAAqB,KACrB,eAAgB,KAChB,cAAe,KACf,eAAgB,KAChB,+BAAgC,KAChC,4BAA6B,KAC7B,6BAA8B,KAC9B,kBAAmB,KACnB,oBAAqB,KACrB,2BAA4B,KAC5B,kBAAmB,KACnB,YAAa,KACb,oBAAqB,KACrB,eAAgB,KAChB,kBAAmB,KACnB,aAAc,KACd,iBAAkB,KAClB,yBAA0B,KAC1B,sBAAuB,KACvB,aAAc,KACd,mBAAoB,KACpB,gBAAiB,KACjB,gBAAiB,KACjB,eAAgB,KAChB,YAAa,KACb,aAAc,KACd,kBAAmB,KACnB,gBAAiB,KACjB,mBAAoB,KACpB,cAAe,KACf,oBAAqB,KACrB,uBAAwB,KACxB,qBAAsB,KACtB,cAAe,KACf,gBAAiB,KACjB,wBAAyB,KACzB,gBAAiB,KACjB,gBAAiB,KACjB,kBAAmB,KACnB,kBAAmB,KACnB,gBAAiB,KACjB,kBAAmB,KACnB,aAAc,KACd,cAAe,KACf,mBAAoB,KACpB,gBAAiB,KACjB,YAAa,KACb,kBAAmB,KACnB,aAAc,KACd,aAAc,KACd,gBAAiB,KACjB,iBAAkB,KAClB,cAAe,KACf,qBAAsB,KACtB,mBAAoB,KACpB,mBAAoB,KACpB,kBAAmB,KACnB,qBAAsB,KACtB,gBAAiB,KACjB,mBAAoB,KACpB,eAAgB,KAChB,iBAAkB,KAClB,eAAgB,KAChB,0BAA2B,KAC3B,eAAgB,KAChB,qBAAsB,KACtB,aAAc,KACd,qBAAsB,KACtB,oBAAqB,KACrB,iBAAkB,KAClB,gBAAiB,KACjB,wBAAyB,KACzB,gBAAiB,KACjB,YAAa,KACb,gBAAiB,KACjB,oBAAqB,KACrB,aAAc,KACd,iBAAkB,KAClB,sBAAuB,KACvB,sBAAuB,KACvB,qBAAsB,KACtB,gBAAiB,KACjB,uBAAwB,KACxB,uBAAwB,KACxB,aAAc,KACd,mBAAoB,KACpB,iBAAkB,KAClB,cAAe,KACf,iBAAkB,KAClB,mBAAoB,KACpB,eAAgB,KAChB,aAAc,KACd,gBAAiB,KACjB,0BAA2B,KAC3B,uBAAwB,KACxB,uBAAwB,KACxB,qBAAsB,KACtB,eAAgB,KAChB,oBAAqB,KACrB,aAAc,KACd,iBAAkB,KAClB,oBAAqB,KACrB,uBAAwB,KACxB,gBAAiB,KACjB,uBAAwB,KACxB,YAAa,KACb,kBAAmB,KACnB,yBAA0B,KAC1B,aAAc,KACd,cAAe,KACf,aAAc,KACd,gBAAiB,KACjB,gBAAiB,MAIlB,SAAS2sK,EAAeC,GACvB,IAAI/kJ,EAAKglJ,EAAsBD,GAC/B,OAAOE,EAAoBjlJ,GAE5B,SAASglJ,EAAsBD,GAC9B,IAAIE,EAAoBC,EAAE/sK,EAAK4sK,GAAM,CACpC,IAAIl/E,EAAI,IAAIsD,MAAM,uBAAyB47E,EAAM,KAEjD,MADAl/E,EAAE//E,KAAO,mBACH+/E,EAEP,OAAO1tF,EAAI4sK,GAEZD,EAAejsK,KAAO,WACrB,OAAOjB,OAAOiB,KAAKV,IAEpB2sK,EAAe97B,QAAUg8B,EACzBp+G,EAAOC,QAAUi+G,EACjBA,EAAe9kJ,GAAK,M,6BChRpB,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,+C,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,gC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,iD,6BCAzC,OAAe,cAA0B,qD,6BCAzC,OAAe,cAA0B,kD,6BCAzC,OAAe,cAA0B,sD,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,gD,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,+C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,iD,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,+C,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,oD,6BCAzC,OAAe,cAA0B,iD,6BCAzC,OAAe,cAA0B,kD,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,gD,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,8C,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,uC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,+C,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,6C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,iC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,yC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,2C,6BCAzC,OAAe,cAA0B,0C,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,wC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,sC,6BCAzC,OAA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","file":"static/js/main.9b86dc70.chunk.js","sourcesContent":["export const THEMES_IMAGES = {\r\n BTN_ARROW_ICON_WHITE: 'button_arrow_icon_white.svg',\r\n BTN_ARROW_ICON_GREEN: 'button_arrow_icon_green.svg',\r\n BTN_ARROW_ICON_BLUE: 'button_arrow_icon_blue.svg'\r\n};\r\n","import { css } from 'styled-components';\r\nimport { style } from 'styled-system';\r\nimport { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\nimport { THEMES_IMAGES } from './assets/images';\r\nimport colors from './colors';\r\n\r\nconst createMediaQuery = n => `@media screen and (min-width:${n})`;\r\n\r\nconst addAliases = (arr, aliases) =>\r\n aliases.forEach((key, i) =>\r\n Object.defineProperty(arr, key, {\r\n enumerable: false,\r\n get() {\r\n return this[i];\r\n }\r\n })\r\n );\r\n\r\nexport const rawBreakpoints = [32, 40, 48, 64, 90];\r\nexport const breakpoints = rawBreakpoints.map(n => n + 'em');\r\n\r\nexport const mediaQueries = breakpoints.map(createMediaQuery);\r\n\r\nconst aliases = ['sm', 'md', 'lg', 'xl', 'xxl'];\r\n\r\n// Potential Solution to Buttons, for now see ./ui-kit/Button.js\r\n// const buttonIntentTypes = [\"primary\", \"reverse\"];\r\n// addAliases(buttonIntentTypes, buttonIntentAliases);\r\n\r\naddAliases(breakpoints, aliases);\r\naddAliases(mediaQueries, aliases);\r\n\r\nconst deviceSizes = {\r\n // bigScreen: 1440,\r\n // desktop: 992,\r\n // tablet: 768,\r\n // phone: 576,\r\n // baseMobileFirst: 0,\r\n bigScreen: 90,\r\n desktop: 64,\r\n tablet: 48,\r\n phone: 0,\r\n baseMobileFirst: 0\r\n};\r\n\r\n// Iterate through the sizes and create a media template\r\nexport const mediaScreens = Object.keys(deviceSizes).reduce((acc, label) => {\r\n acc[label] = (...args) =>\r\n css`\r\n @media screen and (min-width: ${deviceSizes[label].toString()}em) {\r\n ${css(...args)}\r\n }\r\n `;\r\n return acc;\r\n}, {});\r\nexport const space = [0, 4, 8, 16, 32, 64, 128, 24, 6, 12, 48, 40, 60, 20, 80, 14];\r\n\r\nexport const fontPrimary = `'Raleway','Helvetica Neue',Helvetica,Arial,sans-serif`;\r\nexport const fontSecondary = `'Montserrat','Helvetica Neue',Helvetica,Arial,sans-serif`;\r\nexport const fontMontBold = `'Montserrat-Bold','Montserrat','Helvetica Neue',Helvetica,Arial,sans-serif`;\r\nexport const fontMontBlack = `'Montserrat-Black','Montserrat','Helvetica Neue',Helvetica,Arial,sans-serif`;\r\nexport const fontOswald = 'Oswald';\r\nexport const fontOswaldBold = 'Oswald-Bold';\r\n\r\nexport const fonts = {\r\n primary: fontPrimary,\r\n secondary: fontSecondary,\r\n tertiary: fontOswald,\r\n quaternary: fontMontBold,\r\n quinary: fontMontBlack,\r\n senary: fontOswaldBold\r\n};\r\n\r\nexport const fontSizes = [12, 14, 16, 20, 24, 32, 48, 18, 22, 10, 36, 8, 80, 56, 9, 13, 40];\r\nexport const lineHeights = [1, 1.5, 2];\r\nexport const light = 200;\r\nexport const regular = 400;\r\nexport const medium = 500;\r\nexport const semibold = 600;\r\nexport const bold = 700;\r\nexport const extraBold = 900;\r\n\r\n// styled-system's `fontWeight` function can hook into the `fontWeights` object\r\nexport const fontWeights = {\r\n light,\r\n regular,\r\n medium,\r\n bold,\r\n semibold,\r\n extraBold\r\n};\r\n\r\nconst letterSpacings = {\r\n normal: 'normal',\r\n caps: '0.025em'\r\n};\r\n\r\nexport { colors };\r\n\r\nconst border = '1px solid';\r\nconst borderHighlight = '4px solid';\r\nconst borderGrayLight = `1px solid ${colors.snowMountainGrey[100]}`;\r\nconst kiddiePoolBlueBorder = '1px solid #85c6cc32';\r\n\r\n// styled-system's `borderRadius` function can hook into the `radii` object/array\r\nexport const radii = [0, 2, 6, 16, 20, 25, 30];\r\nexport const radius = '10px';\r\n\r\nexport const maxContainerWidth = '1280px';\r\nexport const maxContainerWidthAkela = '1232px';\r\n\r\n// boxShadows\r\nexport const boxShadows = [\r\n `0 0 2px 0 rgba(0,0,0,.08),0 1px 4px 0 rgba(0,0,0,.16)`,\r\n `0 0 2px 0 rgba(0,0,0,.08),0 2px 8px 0 rgba(0,0,0,.16)`,\r\n `0 0 2px 0 rgba(0,0,0,.08),0 4px 16px 0 rgba(0,0,0,.16)`,\r\n `0 0 2px 0 rgba(0,0,0,.08),0 8px 32px 0 rgba(0,0,0,.16)`,\r\n `2px 0 2px 0 rgba(0,0,0,.08)`,\r\n `0px 8px 8px -8px rgba(0,0,0,.08)`,\r\n `0px 2px 4px 0 rgba(0,0,0,.08)`,\r\n `rgba(0,0,0,0.05) 0 -2px 4px 1px`,\r\n `rgba(0,0,0,0.05) 0 -3px 4px 1px`,\r\n `0 2px 7px 1px #F0F0F0`,\r\n `1px 1px 6px 0 rgba(0, 0, 0, 0.3)`,\r\n `-2px 2px 3px 0 rgba(0, 0, 0, 0.1)`,\r\n ` 0 23px 20px 20px #00000040`,\r\n `0 10px 15px 5px rgba(0, 0, 0, 0.24);`,\r\n `0 0 4px 2px ${colors.preciousStoneBlue[50]}`,\r\n `0 0 4px 2px ${colors.deepLakeBlue[100]}50`,\r\n `0 0 4px 2px ${colors.digitalBrightRed[100]}`,\r\n `0 0 0 1px ${colors.deepLakeBlue[20]}`,\r\n `inset 0 1px 4px 0 rgba(28, 103, 85, 0.8)`,\r\n `0 0 4px 0 rgba(66, 103, 178, 0.5)`,\r\n `0 0 4px 2px ${colors.pureWhite[0]}`,\r\n `0 19px 30px -20px rgba(40, 56, 76, 0.5);`,\r\n `inset 0 0 5px 0 rgba(40, 56, 76, 0.1);`,\r\n `0 23px 20px 20px rgba(0, 0, 0, 0.25)`,\r\n '0px 0px 15px 0 rgba(0,0,0,.08)',\r\n `0 0 4px 2px ${colors.kiddiePoolBlue[50]}`,\r\n `0 4px 18px 5px rgba(0, 0, 0, 0.076)`,\r\n '0 2px 5px 0 rgba(0, 0, 0, 0.2)'\r\n];\r\n\r\n// elevations (new rebrand-2022 box-shadows)\r\nexport const elevation = {\r\n 1: '0 2px 7px 1px rgba(0, 0, 0, 0.06)',\r\n 2: '0 4px 8px 0 rgba(0, 0, 0, 0.06)',\r\n 3: '0 4px 18px 5px rgba(0, 0, 0, 0.076)',\r\n 4: '0 11px 24px 0 rgba(0, 0, 0, 0.23)'\r\n};\r\n\r\n// animation duration\r\nexport const duration = {\r\n fast: `150ms`,\r\n normal: `300ms`,\r\n slow: `450ms`,\r\n slowest: `600ms`\r\n};\r\n\r\n// animation easing curves\r\nconst easeInOut = 'cubic-bezier(0.5, 0, 0.25, 1)';\r\nconst easeOut = 'cubic-bezier(0, 0, 0.25, 1)';\r\nconst easeIn = 'cubic-bezier(0.5, 0, 1, 1)';\r\n\r\nconst timingFunctions = {\r\n easeInOut,\r\n easeOut,\r\n easeIn\r\n};\r\n\r\n// animation delay\r\nconst transitionDelays = {\r\n small: `60ms`,\r\n medium: `160ms`,\r\n large: `260ms`,\r\n xLarge: `360ms`\r\n};\r\n\r\n// borders\r\nconst borders = [\r\n `1px solid ${colors.deepLakeBlue[10]}`,\r\n `1px solid ${colors.preciousStoneBlue[50]}`,\r\n 'solid 1px rgba(0, 93, 120, 0.15);',\r\n `1px solid ${colors.pureWhite[0]}`,\r\n `solid 0.5px rgba(133, 198, 204, 0.5);`,\r\n `1px solid rgba(40, 56, 76, 0.32)`,\r\n `1px solid ${colors.kiddiePoolBlue[20]}`,\r\n `2px solid ${colors.voyagersColors[100]}`\r\n];\r\n\r\nexport const fontFamily = style({\r\n prop: 'fontFamily',\r\n cssProperty: 'font-family',\r\n key: 'fonts'\r\n});\r\n\r\n// z-index stack layers.\r\nconst zIndexesOrder = [\r\n 'inputIcon',\r\n 'dropdown',\r\n 'widget',\r\n 'floatingButton',\r\n 'header',\r\n 'navHeader',\r\n 'modal',\r\n 'loader',\r\n 'mobileBookingWidget',\r\n 'paypalBooking',\r\n 'auth'\r\n];\r\n\r\nconst createZIndex = labels => {\r\n const increment = 100;\r\n let base = 100;\r\n return labels.reduce((acc, label) => {\r\n acc[label] = base;\r\n base += increment;\r\n return acc;\r\n }, {});\r\n};\r\nconst zIndex = createZIndex(zIndexesOrder);\r\n\r\nconst buttonSize = {\r\n large: {\r\n padding: '10px 38px',\r\n fontSize: fontSizes[2],\r\n minHeight: '48px',\r\n lineHeight: '1.5',\r\n borderRadius: '35px'\r\n },\r\n medium: {\r\n padding: '6px 38px',\r\n fontSize: fontSizes[2],\r\n minHeight: '40px',\r\n lineHeight: '1.5',\r\n borderRadius: '35px'\r\n },\r\n small: {\r\n padding: '0 22px',\r\n fontSize: fontSizes[0],\r\n height: '24px',\r\n lineHeight: '2',\r\n borderRadius: '20px'\r\n },\r\n extraSmall: {\r\n padding: '2px 8px',\r\n fontSize: fontSizes[0],\r\n lineHeight: '1.71',\r\n borderRadius: '15px'\r\n },\r\n beButton: {\r\n padding: '8.5px 36px',\r\n fontSize: fontSizes[1],\r\n lineHeight: '1',\r\n height: '40px',\r\n borderRadius: '25px'\r\n },\r\n mobile: {\r\n padding: '6px 32px',\r\n fontSize: fontSizes[1],\r\n minHeight: '34px',\r\n lineHeight: '18px',\r\n borderRadius: '35px'\r\n }\r\n};\r\n\r\nconst disabledBase = {\r\n pointerEvents: 'none'\r\n};\r\n\r\nconst buttonBase = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n cursor: 'pointer',\r\n fontFamily: fonts.secondary,\r\n fontWeight: fontWeights.bold,\r\n letterSpacing: '0.2px',\r\n textTransform: 'capitalize',\r\n textAlign: 'center',\r\n textDecoration: 'none',\r\n border: '2px solid transparent',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n ':focus': {\r\n outline: 'unset',\r\n boxShadow: `0 0 0 3px ${colors.focusBlue}`\r\n }\r\n};\r\n\r\nconst buttonPrimaryBase = {\r\n ...buttonBase,\r\n color: colors.pureWhite[0],\r\n backgroundColor: colors.preciousStoneBlue[100],\r\n ':hover': {\r\n backgroundColor: colors.darkPreciousStoneBlue\r\n },\r\n ':focus': {\r\n borderColor: colors.pureWhite[0],\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n boxShadow: 'unset',\r\n backgroundColor: colors.darkPreciousStoneBlue,\r\n borderColor: 'transparent'\r\n },\r\n ':disabled': {\r\n backgroundColor: colors.preciousStoneBlue[50],\r\n ...disabledBase\r\n }\r\n};\r\n\r\nconst buttonDealsBase = {\r\n ...buttonPrimaryBase\r\n};\r\n\r\nconst buttonSecondaryBase = {\r\n ...buttonBase,\r\n color: colors.preciousStoneBlue[100],\r\n backgroundColor: colors.pureWhite[0],\r\n border: `2px solid ${colors.preciousStoneBlue[100]}`,\r\n ':hover': {\r\n backgroundColor: colors.snowMountainGrey[50]\r\n },\r\n ':focus': {\r\n borderColor: colors.pureWhite[0],\r\n backgroundColor: colors.snowMountainGrey[50],\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n outline: 'unset',\r\n boxShadow: 'unset',\r\n backgroundColor: colors.snowMountainGrey[50],\r\n borderColor: colors.preciousStoneBlue[100]\r\n },\r\n ':disabled': {\r\n backgroundColor: colors.deepLakeBlue[20],\r\n ...disabledBase\r\n }\r\n};\r\n\r\nconst buttonGhost = {\r\n ...buttonBase,\r\n padding: '6.5px 34px',\r\n color: colors.pureWhite[0],\r\n backgroundColor: 'transparent',\r\n border: `2px solid ${colors.pureWhite[0]}`,\r\n ':hover': {\r\n backgroundColor: `${colors.pureWhite[0]}10`\r\n },\r\n ':focus': {\r\n ...buttonBase[':focus']\r\n },\r\n ':disabled': {\r\n opacity: '.5',\r\n ...disabledBase\r\n }\r\n};\r\n\r\nconst buttonBookBase = {\r\n ...buttonBase,\r\n backgroundColor: colors.digitalBrightRed[100],\r\n color: colors.pureWhite[0],\r\n ':hover': {\r\n backgroundColor: colors.woodpeckerRed[100]\r\n },\r\n ':focus': {\r\n backgroundColor: colors.woodpeckerRed[100],\r\n borderColor: colors.pureWhite[0],\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n outline: 'unset',\r\n boxShadow: 'unset',\r\n backgroundColor: colors.woodpeckerRed[100],\r\n borderColor: colors.woodpeckerRed[100]\r\n },\r\n ':disabled': {\r\n backgroundColor: colors.woodpeckerRed[50],\r\n ...disabledBase\r\n }\r\n};\r\n\r\nconst socialConnectionButton = {\r\n position: 'relative',\r\n height: '40px',\r\n padding: '10px 16px 9px 50px',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n borderRadius: radii[4],\r\n border: 'none',\r\n backgroundColor: colors.pureWhite[0],\r\n color: colors.nightSkyBlack[60],\r\n boxShadow: boxShadows[27],\r\n svg: {\r\n position: 'absolute',\r\n left: 16,\r\n top: '50%',\r\n transform: 'translateY(-50%)'\r\n },\r\n ':focus': {\r\n opacity: '.5',\r\n ...buttonBase[':focus']\r\n }\r\n};\r\n\r\nconst buttonAffirmConnect = {\r\n ...buttonBase,\r\n backgroundColor: colors.affirmBlue,\r\n backgroundSize: '240px 40px !important',\r\n border: 'none !important',\r\n color: colors.pureWhite[0],\r\n height: '40px !important',\r\n position: 'relative',\r\n ':focus': {\r\n opacity: '.5',\r\n ...buttonBase[':focus']\r\n },\r\n textTransform: 'none'\r\n};\r\n\r\nconst baseArrowButton = {\r\n position: 'relative',\r\n transition: 'padding .2s ease-in-out',\r\n verticalAlign: 'middle',\r\n '&:after': {\r\n content: '\"\"',\r\n width: 16,\r\n height: 16,\r\n display: 'inline-block',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translate(-100%, -50%)',\r\n right: '16px',\r\n opacity: 0,\r\n transition: 'all .2s ease-in-out',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover'\r\n },\r\n ':hover, :focus': {\r\n paddingLeft: '16px',\r\n paddingRight: '38px',\r\n opacity: 1,\r\n '&:after': {\r\n transform: 'translate(0, -50%)',\r\n opacity: 1\r\n }\r\n },\r\n ':focus': {\r\n ...buttonBase[':focus']\r\n }\r\n};\r\n\r\nconst buttonPrimary = buttonPrimaryBase;\r\nconst buttonDeals = buttonDealsBase;\r\nconst buttonSecondary = buttonSecondaryBase;\r\nconst buttonBook = buttonBookBase;\r\n\r\nconst buttonShort = {\r\n ...buttonPrimary,\r\n padding: '2px 24px'\r\n};\r\n\r\nconst buttonShortSecondary = {\r\n ...buttonSecondary,\r\n padding: '2px 24px'\r\n};\r\n\r\nconst buttons = {\r\n primary: buttonPrimary,\r\n secondary: buttonSecondary,\r\n ghost: buttonGhost,\r\n deals: buttonDeals,\r\n book: buttonBook,\r\n affirmConnect: buttonAffirmConnect,\r\n short: buttonShort,\r\n shortSecondary: buttonShortSecondary,\r\n bookWidget: buttonBookBase,\r\n socialConnection: socialConnectionButton, // TODO: once ab testing ends, we have to make sure the name of the variant changes as well\r\n\r\n primaryArrow: {\r\n ...buttonPrimary,\r\n ...baseArrowButton,\r\n '&:after': {\r\n ...baseArrowButton['&:after'],\r\n backgroundImage: `url(\"${getAssetsUrl(ASSETS_LOCATIONS.ROOT, THEMES_IMAGES.BTN_ARROW_ICON_WHITE)}\");`\r\n },\r\n ':focus': {\r\n border: `2px solid ${colors.pureWhite[0]}`,\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n outline: 'unset',\r\n boxShadow: 'unset'\r\n }\r\n },\r\n\r\n secondaryArrow: {\r\n ...buttonSecondary,\r\n ...baseArrowButton,\r\n '&:after': {\r\n ...baseArrowButton['&:after'],\r\n backgroundImage: `url(\"${getAssetsUrl(ASSETS_LOCATIONS.ROOT, THEMES_IMAGES.BTN_ARROW_ICON_GREEN)}\");`\r\n }\r\n },\r\n\r\n ghostArrow: {\r\n ...buttonGhost,\r\n ...baseArrowButton,\r\n '&:after': {\r\n ...baseArrowButton['&:after'],\r\n backgroundImage: `url(\"${getAssetsUrl(ASSETS_LOCATIONS.ROOT, THEMES_IMAGES.BTN_ARROW_ICON_WHITE)}\");`\r\n }\r\n },\r\n\r\n dealsArrow: {\r\n ...buttonDeals,\r\n ...baseArrowButton,\r\n '&:after': {\r\n ...baseArrowButton['&:after'],\r\n backgroundImage: `url(\"${getAssetsUrl(ASSETS_LOCATIONS.ROOT, THEMES_IMAGES.BTN_ARROW_ICON_BLUE)}\");`\r\n }\r\n },\r\n\r\n bookArrow: {\r\n ...buttonBook,\r\n ...baseArrowButton,\r\n '&:after': {\r\n ...baseArrowButton['&:after'],\r\n backgroundImage: `url(\"${getAssetsUrl(ASSETS_LOCATIONS.ROOT, THEMES_IMAGES.BTN_ARROW_ICON_WHITE)}\");`\r\n },\r\n ':focus': {\r\n borderColor: colors.pureWhite[0],\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n outline: 'unset',\r\n boxShadow: 'unset'\r\n }\r\n },\r\n\r\n bookWidgetArrow: {\r\n ...buttonBookBase,\r\n ':focus': {\r\n ...buttonBookBase[':focus']\r\n },\r\n ':active': {\r\n outline: 'unset',\r\n boxShadow: 'unset'\r\n }\r\n },\r\n primaryInverted: {\r\n ...buttonPrimary,\r\n color: colors.preciousStoneBlue[100],\r\n backgroundColor: colors.pureWhite[0],\r\n ':hover': {\r\n backgroundColor: colors.preciousStoneBlue[10]\r\n },\r\n ':focus': {\r\n borderColor: colors.pureWhite[0],\r\n ...buttonBase[':focus']\r\n },\r\n ':active': {\r\n boxShadow: 'unset',\r\n backgroundColor: colors.preciousStoneBlue[10],\r\n borderColor: 'transparent'\r\n },\r\n ':disabled': {\r\n backgroundColor: colors.deepLakeBlue[20],\r\n ...disabledBase\r\n }\r\n },\r\n\r\n partyRequestForm: {\r\n ...buttonPrimary,\r\n backgroundColor: colors.digitalYellowOrange[100],\r\n color: colors.deepLakeBlue[100],\r\n borderColor: 'transparent'\r\n },\r\n primaryVoyagers: {\r\n ...buttonPrimary,\r\n backgroundColor: colors.voyagersColors[100]\r\n },\r\n extraLarge: {\r\n ...buttonBook,\r\n height: '56px',\r\n lineHeight: 1\r\n }\r\n};\r\n\r\nconst alerts = {\r\n info: {\r\n backgroundColor: colors.kiddiePoolBlue[10],\r\n color: colors.deepLakeBlue[100],\r\n border: `${colors.informationBlue} 1px solid`,\r\n '.icon': {\r\n color: colors.preciousStoneBlue[100]\r\n },\r\n '.closeIcon': {\r\n color: colors.preciousStoneBlue[100]\r\n },\r\n a: {\r\n color: 'inherit',\r\n '&:hover': {\r\n color: colors.preciousStoneBlue[100]\r\n }\r\n }\r\n },\r\n success: {\r\n backgroundColor: colors.deepForestGreen[20],\r\n color: colors.deepLakeBlue[100],\r\n border: `${colors.successGreen} 1px solid`,\r\n '.icon': {\r\n color: colors.deepForestGreen[100]\r\n },\r\n '.closeIcon': {\r\n color: colors.preciousStoneBlue[100]\r\n },\r\n a: {\r\n color: 'inherit',\r\n '&:hover': {\r\n color: colors.deepForestGreen[50]\r\n }\r\n }\r\n },\r\n warning: {\r\n backgroundColor: colors.digitalBrightRed[20],\r\n color: colors.deepLakeBlue[100],\r\n border: `${colors.errorOrange} 1px solid`,\r\n '.icon': {\r\n color: colors.errorOrange\r\n },\r\n a: {\r\n color: 'inherit',\r\n '&:hover': {\r\n color: colors.digitalBrightRed[100]\r\n }\r\n }\r\n },\r\n offer: {\r\n backgroundColor: colors.sandstoneBuff[20],\r\n color: colors.deepLakeBlue[100],\r\n border: `${colors.digitalYellowOrange[100]} 1px solid`,\r\n '.icon': {\r\n color: colors.digitalYellowOrange[100]\r\n },\r\n a: {\r\n color: 'inherit',\r\n '&:hover': {\r\n color: colors.preciousStoneBlue[100]\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Stacked accordion variants\r\n */\r\nconst stackAccordionHeaderBase = {\r\n borderRadius: ['10px 10px 10px 10px'],\r\n color: colors.deepLakeBlue[50],\r\n colorDetails: colors.deepLakeBlue[100],\r\n border: '1px solid',\r\n borderWidth: '1px 1px 1px 3px'\r\n};\r\n\r\nconst stackAccordionHeaderExpandedBase = {\r\n borderRadius: ['10px 10px 0px 0px'],\r\n borderBottom: '1px solid transparent'\r\n};\r\n\r\nconst stackAccordionBodyBase = {\r\n borderRadius: ['0px 0px 10px 10px'],\r\n borderTop: 'none',\r\n bg: colors.pureWhite[0],\r\n color: colors.deepLakeBlue[50],\r\n colorDetails: colors.deepLakeBlue[100]\r\n};\r\n\r\nconst stackAccordionHeaderPrimary = {\r\n ...stackAccordionHeaderBase,\r\n bg: colors.preciousStoneBlue[10],\r\n borderColor: colors.preciousStoneBlue[100]\r\n};\r\n\r\nconst stackAccordionBodyPrimary = {\r\n ...stackAccordionBodyBase,\r\n baseColor: stackAccordionHeaderPrimary.bg,\r\n border: `1px solid ${stackAccordionHeaderPrimary.borderColor}`\r\n};\r\n\r\nconst stackedAccordionPrimary = {\r\n header: stackAccordionHeaderPrimary,\r\n body: stackAccordionBodyPrimary,\r\n expandedHeader: stackAccordionHeaderExpandedBase\r\n};\r\n\r\nconst stackAccordionHeaderSecondary = {\r\n ...stackAccordionHeaderBase,\r\n bg: colors.snowMountainGrey[50],\r\n borderColor: colors.snowMountainGrey[100]\r\n};\r\n\r\nconst stackAccordionBodySecondary = {\r\n ...stackAccordionBodyBase,\r\n baseColor: stackAccordionHeaderSecondary.bg,\r\n border: `1px solid ${stackAccordionHeaderSecondary.borderColor}`\r\n};\r\n\r\nconst stackedAccordionSecondary = {\r\n header: stackAccordionHeaderSecondary,\r\n body: stackAccordionBodySecondary,\r\n expandedHeader: stackAccordionHeaderExpandedBase\r\n};\r\n\r\nconst stackAccordionHeaderDanger = {\r\n ...stackAccordionHeaderBase,\r\n bg: colors.pink[20],\r\n borderColor: colors.digitalBrightRed[100]\r\n};\r\n\r\nconst stackAccordionBodyDanger = {\r\n ...stackAccordionBodyBase,\r\n baseColor: stackAccordionHeaderDanger.bg,\r\n border: `1px solid ${stackAccordionHeaderDanger.borderColor}`\r\n};\r\n\r\nconst stackedAccordionDanger = {\r\n header: stackAccordionHeaderDanger,\r\n body: stackAccordionBodyDanger,\r\n expandedHeader: stackAccordionHeaderExpandedBase\r\n};\r\n\r\nconst stackedAccordions = {\r\n primary: stackedAccordionPrimary,\r\n secondary: stackedAccordionSecondary,\r\n danger: stackedAccordionDanger\r\n};\r\n\r\nconst theme = {\r\n //Potential Exports here, future consideration\r\n rawBreakpoints,\r\n // buttonIntentTypes,\r\n //Exports for component consumption\r\n borders,\r\n breakpoints,\r\n mediaQueries,\r\n space,\r\n zIndex,\r\n fontPrimary,\r\n fonts,\r\n fontSecondary,\r\n fontMontBold,\r\n fontMontBlack,\r\n fontOswald,\r\n fontOswaldBold,\r\n fontFamily,\r\n fontSizes,\r\n fontWeights,\r\n letterSpacings,\r\n lineHeights,\r\n regular,\r\n bold,\r\n border,\r\n borderHighlight,\r\n borderGrayLight,\r\n kiddiePoolBlueBorder,\r\n colors,\r\n radii,\r\n radius,\r\n boxShadows,\r\n shadows: boxShadows,\r\n elevation,\r\n maxContainerWidth,\r\n maxContainerWidthAkela,\r\n duration,\r\n timingFunctions,\r\n transitionDelays,\r\n mediaScreens,\r\n buttons,\r\n alerts,\r\n buttonSize,\r\n stackedAccordions\r\n};\r\n\r\nexport default theme;\r\n","export const ASSETS_DOMAIN = 'https://cdn.greatwolf.com';\r\n\r\nexport const ASSETS_LOCATIONS = {\r\n ROOT: '{ASSETS_DOMAIN}/{FILE_NAME}',\r\n CONTENT: '{ASSETS_DOMAIN}/content/{FILE_NAME}',\r\n GIFS: '{ASSETS_DOMAIN}/content/gifs/{FILE_NAME}',\r\n JPG: '{ASSETS_DOMAIN}/content/jpg/{FILE_NAME}',\r\n JS: '{ASSETS_DOMAIN}/content/js/{FILE_NAME}',\r\n PNG: '{ASSETS_DOMAIN}/content/png/{FILE_NAME}',\r\n SVG: '{ASSETS_DOMAIN}/content/svg/{FILE_NAME}',\r\n WEBP: '{ASSETS_DOMAIN}/content/webp/{FILE_NAME}',\r\n VIDEO: '{ASSETS_DOMAIN}/content/video/{FILE_NAME}',\r\n ANIMATION: '{ASSETS_DOMAIN}/content/animations/{FILE_NAME}'\r\n};\r\n\r\nexport const getAssetsUrl = (url, file) => {\r\n return url?.replace('{ASSETS_DOMAIN}', ASSETS_DOMAIN)?.replace('{FILE_NAME}', file);\r\n};\r\n\r\nexport const AVAILABILITY_KEY_ERROR_TYPE = 'CRS006';\r\nexport const NO_INVENTORY_ERROR_TYPE = 'CRS009';\r\n\r\nexport const CHECKIN_TIME = '4 p.m.';\r\nexport const SITE_NIAGON = 'NIAGON';\r\nexport const SITE_POCOPA = 'POCOPA';\r\nexport const SITE_CONCORD = 'CONCNC';\r\nexport const SITE_GRAPEVINE = 'GRAPTX';\r\nexport const SITE_MANTECA = 'MANTCA';\r\nexport const SITE_ANAHEIM = 'SOUTCA';\r\nexport const SUITE_RATE = 'Suite Rate';\r\nexport const RESERVATION_STATUS = {\r\n canceled: 'CANCELED'\r\n};\r\n\r\nexport const LATE_CHECKOUT_PREFIXES = {\r\n code: 'LCO',\r\n itemCode: 'LCO'\r\n};\r\n\r\nexport const LATE_CHECKOUT_PACKAGES_CODES = ['2LCOSTAN', '2LCOTHEM', '2LCOPREM'];\r\n\r\nexport const HOWL_N_LEARN_CODE = 'HOWLEARN';\r\n\r\nexport const CHECKOUT_TIMES = {\r\n AM_11: '11 a.m.',\r\n PM_1: '1 p.m.',\r\n PM_2: '2 p.m.'\r\n};\r\n\r\n// Analytics related constants\r\nexport const EVENT_PARAMS = {\r\n fbEventId: 'x-fb-event_id'\r\n};\r\n\r\nexport const PRODUCT_SCOPES = {\r\n suiteCheckout: 'suite-checkout',\r\n postPurchase: 'post-purchase',\r\n productImpressions: 'product-impressions',\r\n productClick: 'product-click',\r\n addToCart: 'add-to-cart',\r\n standardPurchase: 'standard purchase'\r\n};\r\n\r\nexport const EVENT_CATEGORIES = {\r\n GTM: {\r\n transaction: 'transaction',\r\n purchasePackage: 'purchasePackage',\r\n purchaseSuite: 'purchaseSuite',\r\n checkoutOption: 'checkoutOption',\r\n modifyError: 'modify-error',\r\n postPurchasePackage: 'postPurchasePackage',\r\n fbPurchase: 'fbPurchase',\r\n signIn: 'SignIn',\r\n passwordChange: 'PasswordChange',\r\n signUp: 'SignUp',\r\n leadgen: 'LeadGen',\r\n checkoutStep: 'checkout-step',\r\n addToCart: 'add-to-cart',\r\n removeFromCart: 'remove-from-cart',\r\n postPurchase: 'post-purchase',\r\n packages: 'packages',\r\n search: 'search',\r\n rateCalendar: 'rate-calendar',\r\n daypassPackagePurchase: 'daypassPackagePurchase',\r\n passPackagePurchasesVariationA: 'passPackagePurchasesVariationA',\r\n passPackagePurchasesVariationB: 'passPackagePurchasesVariationB'\r\n },\r\n INTERACTIONS: {\r\n postReservation: 'InteractionStudioReservation'\r\n }\r\n};\r\n\r\nexport const GTM_EVENT = {\r\n NAME: {\r\n websiteVitals: 'WebsiteVitals',\r\n daypassDiningPackagePurchase: 'daypassDiningPackagePurchase',\r\n passPurchase: 'passPackagePurchase',\r\n signInAttempt: 'sign_in_attempt',\r\n signInSuccess: 'sign_in_success',\r\n signInFailure: 'sign_in_failure',\r\n signUpAttempt: 'sign_up_attempt',\r\n signUpSuccess: 'sign_up_success',\r\n signUpFailure: 'sign_up_failure'\r\n },\r\n ACTION: {\r\n signInAttempt: 'SignInAttempt',\r\n signInSuccess: 'SignInSuccess',\r\n signInFailure: 'SignInFailure',\r\n signUpAttempt: 'SignUpAttempt',\r\n signUpFailure: 'SignUpFailure',\r\n signUpAttemptRaF25: 'SignUpAttemptReferral25Group',\r\n signUpAttemptRaF50: 'SignUpAttemptReferral50Group',\r\n signUpSuccess: 'SignUpSuccess',\r\n signUpSuccessRaF25: 'SignUpSuccessReferral25Group',\r\n signUpSuccessRaF50: 'SignUpSuccessReferral50Group',\r\n leadGenSuccess: 'LeadGenSuccess',\r\n passwordChangeRequest: 'PasswordChangeRequest',\r\n passwordChangeAttempt: 'PasswordChangeAttempt',\r\n passwordChangeSuccess: 'PasswordChangeSuccess',\r\n passwordChangeFailure: 'PasswordChangeFailure',\r\n openRateCalendar: 'OpenRateCalendar',\r\n closeRateCalendar: 'CloseRateCalendar',\r\n daypassPurchaseVersionB: 'DaypassPurchaseVersionB',\r\n daypassPurchaseVersionC: 'DaypassPurchaseVersionC',\r\n daypassPurchaseVersionD: 'DaypassPurchaseVersionD'\r\n },\r\n LABEL: {\r\n greatWolf: 'Great Wolf',\r\n facebook: 'Facebook',\r\n google: 'Google',\r\n apple: 'Apple',\r\n greatWolfLowerCase: 'great wolf'\r\n },\r\n PURCHASE_LOCATION: {\r\n post_package_purchase: 'post package purchase',\r\n standard_purchase: 'standard purchase',\r\n pre_checkin: 'pre checkin'\r\n }\r\n};\r\n\r\nexport const DATE_FORMATS = {\r\n default: 'YYYY-MM-DD',\r\n defaultWithSlash: 'YYYY/MM/DD',\r\n monthDayYearLeadingZeros: 'MM/DD/YYYY',\r\n displayFormat: 'LT',\r\n formatDayMoreDetailed: 'ddd, MMM DD',\r\n formatMonthDate: 'MMM DD',\r\n formatMonthLetterDate: 'MMMM DD',\r\n formatDayEvenMoreDetailed: 'dddd, MMMM, D, YYYY',\r\n monthDayFormat: 'MM/DD',\r\n dayMonthYearFormat: 'DD/MM/YYYY',\r\n monthLetterDayYear: 'MMM. DD, YYYY',\r\n formatDay: 'DD',\r\n numberFormat: 'YYYYMMDDHHmmss',\r\n monthName: 'MMMM',\r\n weekMonthYear: 'ddd, MMM DD, YYYY',\r\n monthDayYear: 'MMM DD, YYYY',\r\n dayMonthShortYearFormat: 'MM/DD/YY',\r\n shortDateFormatWithWeekday: 'ddd, MMM D, YYYY',\r\n dayNameMonthDayYear: 'ddd. MMM D, YYYY',\r\n monthLongDayCommaYear: 'MMMM D, YYYY',\r\n monthLongDay: 'MMMM D'\r\n};\r\n\r\nexport const TALL_MODAL = 'tall-modal';\r\nexport const SHORT_MODAL = 'short-modal';\r\n\r\nexport const NO_DATE = '1901-01-01';\r\n\r\n// Suite image URL.\r\nexport const LATE_CHECKOUT_IMAGE_URL =\r\n '/content/dam/greatwolf/sites/www/locations/master/Deals/characters-sleeping.png';\r\n\r\nexport const CONFETTI_ANNIMATION_URL = getAssetsUrl(ASSETS_LOCATIONS.ANIMATION, 'colorful-confetti.json');\r\n\r\nexport const PRIVACY_POLICY = `/terms#privacy-policy`;\r\nexport const CALIFORNIA_POLICY = '/your-california-privacy-rights#nofi';\r\nexport const TERMS_AND_CONDITIONS_SUFFIX = `policies/booking-policy`;\r\nexport const TERMS_AND_CONDITIONS_ACCOUNT_CREATION = '/terms';\r\n\r\nexport const MAX_GUESTS_COUNT = 8;\r\n\r\nexport const DAY_PASSES_TYPE = {\r\n halfDay: 'WPHLF',\r\n fullDay: 'WPFULL',\r\n roomType: 'WPPASS'\r\n};\r\n\r\nexport const DAY_PASSES_ROOM_TYPE = {\r\n WPHLF: 'half',\r\n WPFULL: 'full'\r\n};\r\n\r\nexport const DAY_PASS_QID_REQUIRED = 'QIDREQUIRED';\r\n\r\nexport const CABANAS_CODES_TYPES = {\r\n indoor: 'CBINDR',\r\n outdoor: 'CBOTDR',\r\n group: 'CA'\r\n};\r\n\r\nexport const PACKAGES_MESSAGES = {\r\n packageNotAvailable: 'Package Not Available'\r\n};\r\n\r\nexport const LODGE_CONFIG_TYPES = {\r\n IDME_WIDGET: 'idme-widget',\r\n LOYALTY: 'loyalty',\r\n PLAN: 'plan',\r\n USER_SETTINGS: 'user-settings',\r\n CREDIT_PACKAGES: 'credit-packages',\r\n CMP: 'cmp',\r\n PAYMENT: 'payment',\r\n LEAD_GEN: 'lead-gen',\r\n CART: 'cart',\r\n BOOKING_WIDGET: 'booking-widget',\r\n BDAY_BOOKING_WIDGET: 'bday-booking-widget'\r\n};\r\n\r\nexport const PACKAGE_TYPE = {\r\n dining: 'dining',\r\n pass: 'Pass',\r\n activity: 'activity',\r\n birthday: 'Birthday',\r\n cabanasAndFlexTrip: 'favorite',\r\n main: 'main',\r\n attractions: 'attractions',\r\n flexTrip: 'FLEXTRIP',\r\n lateCheckOut: 'lco',\r\n family: 'Family',\r\n bundle: 'bundle',\r\n default: 'Default'\r\n};\r\n\r\nexport const PACKAGE_CHARGE_TYPE = {\r\n personPerDay: 'person/day',\r\n byPackage: 'by package'\r\n};\r\n\r\nexport const PACKAGES_CATEGORY = {\r\n dining: 'Dining',\r\n activities: 'Activities'\r\n};\r\n\r\n// Add only those currency code which we want to show as a price text\r\nexport const CURRENCY_CODE = {\r\n CAD: 'CAD' // currency code for canadian dollar\r\n};\r\n\r\nexport const RECOMMENDED_FOR_YOU = 'REC_FOR_YOU';\r\n\r\nexport const MASK = '(000) 000-0000';\r\nexport const PHONE_MASK_REGEX = /\\(|\\)|-|\\s/g;\r\nexport const ONLY_DIGITS_REGEX = /\\D/g;\r\nexport const PHONE_MASK_FOR_MASKED_FIELD = [\r\n '(',\r\n /[1-9]/,\r\n /\\d/,\r\n /\\d/,\r\n ')',\r\n ' ',\r\n /\\d/,\r\n /\\d/,\r\n /\\d/,\r\n '-',\r\n /\\d/,\r\n /\\d/,\r\n /\\d/,\r\n /\\d/\r\n];\r\n\r\nexport const OFFER_CODE_TYPE = {\r\n group: 'GROUP'\r\n};\r\n\r\nexport const GUARANTEE_TYPE = {\r\n advancePayment: 'ADV',\r\n checkInPayment: 'CCG'\r\n};\r\n\r\n// Type of response, success or error\r\nexport const NOTIFICATION_TYPE = {\r\n success: 'success',\r\n failed: 'error'\r\n};\r\n\r\nexport const NEW_DAYS_TO_ADD = 5; // Days to add when an old date is entered in plan\r\n\r\nexport const SUITE_TYPES = {\r\n unknown: 'UNKNOWN',\r\n standard: 'standard',\r\n themed: 'themed',\r\n premium: 'premium',\r\n condo: 'condo'\r\n};\r\n\r\nexport const BACKEND_PAYMENT_TYPES = {\r\n Affirm: 'AF'\r\n};\r\n\r\nexport const PACKAGES_TITLE = {\r\n inclusiveMeal: 'Inclusive Meal'\r\n};\r\n\r\n/**\r\n * If any package has packageGrouo equal toa ny of these values, it should be\r\n * grouped by the packageGroup instead of the packageCode.\r\n *\r\n * Example:\r\n * const packages = [\r\n * {\r\n * \"description\": \"B/L Breakfast FOOD\",\r\n * \"packageCode\": \"BFSTFOOD2\",\r\n * \"packageGroup\": \"BKFTLNCH\",\r\n * },\r\n * {\r\n * \"description\": \"\"B/L Breakfast GRAT\",\r\n * \"packageCode\": \"BFSTFOOD2\",\r\n * \"packageGroup\": \"BKFTLNCH\",\r\n * }\r\n * ]\r\n *\r\n * These packages belong to 'BKFTLNCH' packageCode hence, they should be grouped\r\n * into BKFTLNCH code to be able to calculate rates.\r\n */\r\nexport const PACKAGES_GROUPS = [\r\n 'ALLMEALS',\r\n 'BFSTNLNCH',\r\n 'BKFTLNCH',\r\n 'BKFTLNCH2',\r\n 'BFSTNLNCH',\r\n 'ALLMEALZ',\r\n 'ALLMEALS2',\r\n 'HWLHUNGER2'\r\n];\r\n\r\n/**\r\n * Rate Calendar Day Status Types\r\n */\r\nexport const RATE_CAL_DAY_STATUS = {\r\n available: 'AVAILABLE',\r\n checkout: 'CHECKOUT',\r\n unavailable: 'UNAVAILABLE'\r\n};\r\n\r\n/**\r\n * Sorting types\r\n * @enum {string}\r\n */\r\nexport const SORTING_CRITERIA = {\r\n descending: 'desc',\r\n ascending: 'asc',\r\n recommendedForYou: 'rec'\r\n};\r\n\r\n/** Time used to display the Lead Gen modal */\r\nexport const LEADGEN_MODAL_DISPLAY_TIME = 30000;\r\n\r\nexport const ProgressBarStatus = {\r\n COMPLETED: 'completed',\r\n PENDING: 'pending',\r\n ACTIVE: 'active'\r\n};\r\n\r\n/**Mobile app download page url */\r\nexport const MobileAppPageUrl = '/mobile-app';\r\n\r\n/** Customer contact center phone number */\r\nexport const CUSTOMER_CONTACT_CENTER_NUM = '800-905-9653';\r\n\r\nexport const PERSONALIZATION_RULES = {\r\n interactions: 4\r\n};\r\n\r\nexport const PERSONALIZATION_PACKAGE_RULES = {\r\n interactions: 1\r\n};\r\n\r\nexport const APPLE_SIGN_IN_SUCCESS_EVT = 'AppleIDSignInOnSuccess';\r\nexport const APPLE_SIGN_IN_FAILURE_EVT = 'AppleIDSignInOnFailure';\r\n\r\nexport const ROOM_RATES_ERROR_TITLE = 'An error has occurred';\r\nexport const ROOM_RATES_ERROR_MSG = 'Sorry, Rooms for selected dates are not available, please check other dates';\r\nexport const ROOM_RATES_DATES_EXCEEDED_ERROR_MSG =\r\n 'Sorry, we are unable to process reservations of longer than one month. Please go back and try again.';\r\nexport const SUITE_ERROR_MSG = 'SOME ERRORS OCCURRED';\r\n\r\nexport const COSTSUMMARY_TOOLTIP = {\r\n sustainabilityFee:\r\n 'Great Wolf Lodge Arizona is located in the Salt River Pima - Maricopa Indian Community and is subject to a Sustainability Fee charged by SRPMIC equal to 3% of sales. SRPMIC allocates these revenues to support its seven generation stewardship and related initiatives. Please see our FAQ page for further details.',\r\n resortFee:\r\n 'The Resort Fee includes services that are often charged individually, including water park amenities life jackets and towels, resort-wide wireless internet, virtual concierge service, in-room amenities such as a coffee maker and mini-fridge, and perks unique to Great Wolf Lodge like complimentary arts & craft projects provided during select kids’ entertainment programs.',\r\n resortFeeJVersion:\r\n 'The Resort Fee includes services that are often charged individually, including resort-wide wireless internet, virtual concierge service, in-room amenities such as a coffee maker and mini-fridge, and perks unique to Great Wolf Lodge like arts & craft projects provided during select kids’ entertainment programs.'\r\n};\r\n\r\n//Interaction Studio will track a user's behavior with help of these fixed class names\r\nexport const IS_CLASSES = {\r\n packageContainer: 'sfis-package-container',\r\n packagePrice: 'sfis-package-price',\r\n suiteContainer: 'sfis-suite-container',\r\n suiteDetails: 'sfis-suite-details',\r\n roomPrice: 'sfis-suite-price'\r\n};\r\n\r\nexport const CHECK_IN_STATUS = {\r\n AVAILABLE: 'available',\r\n UNAVAILABLE: 'unavailable',\r\n SUCCESSFUL: 'successful',\r\n INVALID: 'invalid'\r\n};\r\n\r\n//Some packageCodes aren't supposed to show person by price labels\r\nexport const PACKAGES_WITHOUT_CHARGE_TYPE = ['BFSTFOOD', 'BFSTFOOD1', 'BREAKFAST'];\r\n\r\nexport const USER_PATCH_OPERATIONS = {\r\n ADD: 'add',\r\n EDIT: 'replace',\r\n REMOVE: 'remove'\r\n};\r\n\r\nexport const SUPPORTED_COUNTRIES = {\r\n UnitedStates: 'US',\r\n Canada: 'CA'\r\n};\r\n\r\nexport const VALID_COUNTRIES = [SUPPORTED_COUNTRIES.UnitedStates, SUPPORTED_COUNTRIES.Canada];\r\n\r\nexport const TOOLTIP_DIRECTION = {\r\n right: 'right',\r\n left: 'left'\r\n};\r\n\r\nexport const TOOLTIP_POSITION = {\r\n top: 'top',\r\n topLeft: 'top-left',\r\n topRight: 'top-right',\r\n bottom: 'bottom',\r\n bottomLeft: 'bottom-left',\r\n bottomRight: 'bottom-right'\r\n};\r\n\r\nexport const TOOLTIP_POSITIONS = {\r\n tops: [TOOLTIP_POSITION.top, TOOLTIP_POSITION.topLeft, TOOLTIP_POSITION.topRight],\r\n bottoms: [TOOLTIP_POSITION.bottom, TOOLTIP_POSITION.bottomLeft, TOOLTIP_POSITION.bottomRight]\r\n};\r\n\r\nexport const PAYMENT_METHODS_ICONS = 'https://cdn.greatwolf.com/content/png/';\r\n\r\nexport const STATIC_CDN = 'https://cdn.greatwolf.com/content/png/';\r\n\r\nexport const TAXES = 'Taxes';\r\nexport const PARKING_FEE = 'Parking Fee';\r\nexport const RESORT_FEE = 'Resort Fee';\r\nexport const SUSTAINABILITY_FEE = 'Sustainability Fee';\r\nexport const PRIVATE_LODGING_FEE = 'Private Lodging Fee';\r\n\r\nexport const CALENDAR_RESTRICTIONS_TYPES = {\r\n CLOSE: 'CLOSE',\r\n CLOSE_TO_ARRIVAL: 'CLOSE_TO_ARRIVAL',\r\n CLOSE_TO_DEPARTURE: 'CLOSE_TO_DEPARTURE',\r\n MIN_LENGTH_OF_STAY_ON_ARRIVAL: 'MIN_LENGTH_OF_STAY_ON_ARRIVAL',\r\n MIN_LENGTH_OF_STAY: 'MIN_LENGTH_OF_STAY'\r\n};\r\n\r\nexport const SUITE_AVAILABILITY_TYPES = {\r\n AVAILABLE_TYPE: 'AVAILABLE_TYPE',\r\n UNAVAILABLE_TYPE: 'UNAVAILABLE_TYPE'\r\n};\r\n\r\nexport const PARKING_PACKAGE_CODE = 'PARKING';\r\n\r\nexport const CONNECTICUT = 'MASHCT';\r\n\r\nexport const ROOM_RATE_TYPE = {\r\n roomOnlyWithoutWaterParkPass: 'ROOM_ONLY',\r\n roomWithWaterParkPass: 'WITH_WP',\r\n roomWithVoyagers: 'VOYAGERS'\r\n};\r\n\r\nexport const PAYMENT_ERROR_MESSAGES = {\r\n default: 'Oops - we had a problem with processing the information.',\r\n OWS_SYSTEM_ERROR: `Unfortunately, there is been an error processing your credit card. Please contact our call center at ${CUSTOMER_CONTACT_CENTER_NUM} in order to complete your reservation`,\r\n CREDIT_CARD_AUTHORIZATION_FAILED: 'Credit card authorization has failed. Please check the numbers and try again.',\r\n PAYPAL_AUTHORIZATION_FAILED:\r\n 'PayPal authorization has failed. Please select a different payment method and try again.',\r\n INVALID_CREDIT_CARD_EXPIRATION: 'The credit card expiration date is invalid. Please check the numbers and try again.',\r\n INVALID_RATE_CODE_FOR_PROMOTION_CODE:\r\n 'The Offer Code you have entered does not match the Rate Code, this may be caused by multiple browser tabs opened to the Great Wolf website. Please close additional tabs and try your booking again.',\r\n RATE_CODE_NOT_AVAILABLE:\r\n 'The Offer Code you have entered is no longer valid, please visit our deals page to find our latest offers.',\r\n ROOM_UNAVAILABLE:\r\n 'We apologize for the inconvenience, but the room you are trying to book is no longer available, please go back and select another room type.',\r\n RATES_MISMATCH:\r\n 'We apologize for the inconvenience, but the rates of the room you are trying to book has changed, please note cost summary has been updated with the new rates',\r\n AVAILABILITY_KEY_NOT_FOUND:\r\n 'Booking availability has expired. To proceed with your booking, please return to the suites page and start again.',\r\n NO_INVENTORY_FOR_SELECTED_SUITE:\r\n \"We're sorry—the suite you are attempting to book is no longer available. Please select a different suite from the available options.\"\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport { buttonStyle, variant } from 'styled-system';\r\n\r\nconst widthStyle = ({ fluid }) => {\r\n if (!fluid) return null;\r\n\r\n return css`\r\n width: 100%;\r\n padding-left: 0;\r\n padding-right: 0;\r\n `;\r\n};\r\n\r\nconst floatingStyle = ({ floating }) => {\r\n if (!floating) return null;\r\n\r\n return css`\r\n transform: rotate(-90deg) translateY(-100%);\r\n transform-origin: right top;\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n `;\r\n};\r\n\r\nconst buttonSizeStyle = variant({ key: 'buttonSize', prop: 'size' });\r\n\r\nexport const StyledButton = styled.button`\r\n ${buttonSizeStyle}\r\n ${buttonStyle}\r\n ${widthStyle}\r\n ${floatingStyle}\r\n `;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { StyledButton } from './styles';\r\n\r\nconst propTypes = {\r\n /**\r\n * Use the variant prop to select different styles for the button.\r\n */\r\n variant: PropTypes.oneOf([\r\n 'primary',\r\n 'secondary',\r\n 'ghost',\r\n 'deals',\r\n 'book',\r\n 'affirmConnect',\r\n 'primaryArrow',\r\n 'secondaryArrow',\r\n 'ghostArrow',\r\n 'dealsArrow',\r\n 'bookArrow',\r\n 'short',\r\n 'shortSecondary',\r\n 'bookWidget',\r\n 'bookWidgetArrow',\r\n 'newPrimary',\r\n 'newPrimarySecondary',\r\n 'partyRequestForm',\r\n 'primaryVoyagers'\r\n ]),\r\n /**\r\n * Instead of use full width prop to make the button take 100% of the available space please use fluid.\r\n */\r\n fluid: PropTypes.bool,\r\n\r\n /**\r\n * Use the floating prop to indicate the button will be floated to the right, this is intended ot be used with the `Sticky` component.\r\n */\r\n floating: PropTypes.bool,\r\n /**\r\n * An string indicating if the component should render an element that is different from the normal button element.\r\n */\r\n as: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.object]),\r\n /**\r\n * An string indicating the size variant for the button.\r\n */\r\n size: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n variant: 'primary',\r\n fluid: false,\r\n size: 'medium'\r\n};\r\n\r\nconst Button = props => ;\r\n\r\nButton.defaultProps = defaultProps;\r\nButton.propTypes = propTypes;\r\n\r\nexport default Button;\r\n\r\nexport const AffirmButton = props => {\r\n const { variant, ...restProps } = props;\r\n return \r\n )}\r\n {buttonLabel && !isDesktop && }\r\n \r\n );\r\n};\r\n\r\nCallout.propTypes = propTypes;\r\nCallout.defaultProps = defaultProps;\r\nCallout.VARIANTS = VARIANTS;\r\n\r\nexport default Callout;\r\n","import Callout from './Callout';\r\n\r\nexport default Callout;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport Box from './Box';\r\nimport theme from './themes/theme';\r\n\r\nconst StyledBox = styled(Box)`\r\n overflow-x: ${props => (props.shouldPreventOverflowX ? 'hidden' : 'unset')};\r\n`;\r\n\r\nconst Container = ({ children, shouldPreventOverflowX }) => {\r\n const maxWidth = theme.maxContainerWidthAkela;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default Container;\r\n","import React from 'react'\n\nconst MinusThinIcon = ({\n size,\n color,\n ...props\n}) => (\n \n \n \n)\n\nMinusThinIcon.displayName = 'MinusThinIcon'\n\nMinusThinIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default MinusThinIcon","import styled, { css } from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\nimport Flex from '../Flex';\r\nimport Text from '../Text';\r\nimport colors from '../themes/colors';\r\nimport theme from '../themes/theme';\r\n\r\nexport const BUTTON_VARIATIONS = {\r\n LARGE: 'large',\r\n SMALL: 'small'\r\n};\r\n\r\nconst LargeButtonCSS = () => {\r\n return css`\r\n width: 48px;\r\n height: 48px;\r\n `;\r\n};\r\n\r\nconst SmallButtonCSS = () => {\r\n return css`\r\n width: 32px;\r\n height: 32px;\r\n `;\r\n};\r\n\r\nconst GreenBgStylesCSS = ({ styleVariation }) => {\r\n if (!styleVariation) return;\r\n\r\n return css`\r\n background: ${theme.colors.preciousStoneBlue[20]};\r\n border-radius: 25px;\r\n\r\n div {\r\n font-size: 18px;\r\n line-height: 22px;\r\n color: ${theme.colors.nightSkyBlack[100]};\r\n }\r\n button {\r\n width: 48px;\r\n height: 48px;\r\n background: ${theme.colors.preciousStoneBlue[20]};\r\n :hover {\r\n background: ${theme.colors.preciousStoneBlue[20]};\r\n }\r\n svg {\r\n width: 30px;\r\n height: 30px;\r\n fill: ${theme.colors.preciousStoneBlue[100]};\r\n }\r\n\r\n ${theme.mediaQueries.md} {\r\n width: 40px;\r\n height: 40px;\r\n svg {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n }\r\n }\r\n `;\r\n};\r\n\r\nexport const CounterWrapper = styled(Flex)`\r\n align-items: center;\r\n justify-content: ${({ isNewWidgetStyleActive }) => (isNewWidgetStyleActive ? 'flex-end' : 'center')};\r\n ${GreenBgStylesCSS}\r\n`;\r\n\r\nexport const StyledButton = styled.button`\r\n ${({ disabled }) => {\r\n if (disabled)\r\n return css`\r\n opacity: 0.6;\r\n pointer-events: none;\r\n background-color: ${({ buttonDisabledBG }) => buttonDisabledBG};\r\n `;\r\n }}\r\n ${({ variation }) => {\r\n return variation === BUTTON_VARIATIONS.LARGE ? LargeButtonCSS() : SmallButtonCSS();\r\n }}\r\n\r\n border-radius: 50%;\r\n border: none;\r\n outline-color: ${colors.focusBlue};\r\n outline-offset: 4px;\r\n transition: background-color 0.2s;\r\n background-color: ${({ buttonBG }) => buttonBG};\r\n position: relative;\r\n\r\n svg {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n }\r\n\r\n &:active {\r\n background-color: ${colors.preciousStoneBlue[100]};\r\n\r\n #animation-circle {\r\n transform: scale(1);\r\n background-color: ${colors.deepLakeBlue[50]};\r\n }\r\n }\r\n\r\n ${theme.mediaQueries.md} {\r\n &:hover {\r\n cursor: pointer;\r\n background-color: ${colors.deepLakeBlue[100]};\r\n }\r\n }\r\n`;\r\n\r\nexport const AnimationCircle = styled.div`\r\n ${({ variation }) => (variation === BUTTON_VARIATIONS.LARGE ? LargeButtonCSS() : SmallButtonCSS())}\r\n border-radius: 50%;\r\n background-color: ${colors.deepLakeBlue[100]};\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n transform: scale(0);\r\n transition: transform 0.2s, background-color 0.2s;\r\n`;\r\n\r\nexport const DisplayText = styled(Text)`\r\n display: flex;\r\n justify-content: center;\r\n font-size: ${({ variation, fontSize }) => {\r\n return fontSize\r\n ? themeGet('fontSizes.' + fontSize)\r\n : variation === BUTTON_VARIATIONS.LARGE\r\n ? themeGet('fontSizes.3')\r\n : themeGet('fontSizes.7');\r\n }}px;\r\n line-height: ${({ lineHeight }) => (lineHeight ? lineHeight : '24px')};\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n width: ${({ variation, width }) => {\r\n if (width) {\r\n return width;\r\n } else return variation === BUTTON_VARIATIONS.LARGE ? 65 : 56;\r\n }}px;\r\n color: ${({ color }) => (color ? color : themeGet('colors.deepLakeBlue.100'))};\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport MinusIcon from '../icons/MinusThin';\r\nimport PlusIcon from '../icons/PlusThin';\r\nimport colors from '../themes/colors';\r\nimport { AnimationCircle, BUTTON_VARIATIONS, CounterWrapper, DisplayText, StyledButton } from './styles';\r\n\r\nconst propTypes = {\r\n value: PropTypes.number.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n variation: PropTypes.string,\r\n width: PropTypes.number\r\n};\r\n\r\nconst defaultProps = {\r\n disabled: false,\r\n min: 0,\r\n max: 999,\r\n variation: BUTTON_VARIATIONS.LARGE,\r\n iconColor: colors.pureWhite[0],\r\n iconDisabledColor: colors.pureWhite[0],\r\n buttonBG: colors.preciousStoneBlue[100],\r\n buttonDisabledBG: colors.preciousStoneBlue[100]\r\n};\r\n\r\nexport const STYLES_VARIATIONS = {\r\n GREEN_BG: 'GREEN_BG'\r\n};\r\n\r\n/** Default Counter component*/\r\nconst Counter = ({\r\n isNewWidgetStyleActive = false,\r\n fontSize,\r\n lineHeight,\r\n color,\r\n disabled,\r\n value,\r\n onChange,\r\n min,\r\n max,\r\n disableIncrease,\r\n variation = BUTTON_VARIATIONS.LARGE,\r\n width,\r\n buttonBG,\r\n buttonDisabledBG,\r\n iconColor,\r\n iconDisabledColor,\r\n styleVariation\r\n}) => {\r\n const canBeDecreased = value > min;\r\n const canBeIncreased = value < max;\r\n\r\n return (\r\n \r\n onChange(+value - 1)}\r\n variation={variation}>\r\n {!isNewWidgetStyleActive ? : null}\r\n \r\n \r\n\r\n \r\n {+value}\r\n \r\n\r\n onChange(+value + 1)}\r\n variation={variation}>\r\n {!isNewWidgetStyleActive ? : null}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCounter.VARIANTS = STYLES_VARIATIONS;\r\nCounter.propTypes = propTypes;\r\nCounter.defaultProps = defaultProps;\r\n\r\nexport default Counter;\r\n\r\nfunction getSvgSize(variation) {\r\n return variation === BUTTON_VARIATIONS.LARGE ? '32px' : '24px';\r\n}\r\n","import Counter from './Counter';\r\n\r\nexport default Counter;\r\n","import styled from 'styled-components';\r\nimport Box from './Box';\r\nimport { zIndex, top, bottom, left, right, color } from 'styled-system';\r\n\r\nconst Fixed = styled(Box)`\r\n position: fixed;\r\n ${top} ${bottom} ${left} ${right}\r\n ${zIndex} ${color}\r\n`;\r\n\r\nFixed.displayName = 'Fixed';\r\n\r\nFixed.propTypes = {\r\n ...top.propTypes,\r\n ...left.propTypes,\r\n ...right.propTypes,\r\n ...bottom.propTypes,\r\n ...zIndex.propTypes\r\n};\r\n\r\nexport default Fixed;\r\n","export const HINT_WIDTH = 120;\r\n\r\nexport const PLACEMENTS = {\r\n TOP_RIGHT: 'top-right',\r\n TOP_LEFT: 'top-left',\r\n BOTTOM_RIGHT: 'bottom-right',\r\n BOTTOM_LEFT: 'bottom-left'\r\n};\r\n\r\nexport const PLACEMENT_CORNERS = {\r\n 'bottom-right': 0,\r\n 'bottom-left': 1,\r\n 'top-left': 2,\r\n 'top-right': 3\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport { zIndex } from 'styled-system';\r\nimport { Absolute } from '..';\r\nimport { HINT_WIDTH } from './constants';\r\n\r\nexport const HintWrapper = styled.div`\r\n display: inline-block;\r\n position: relative;\r\n & > div {\r\n pointer-events: none;\r\n }\r\n`;\r\n\r\nHintWrapper.displayName = 'HintWrapper';\r\n\r\nconst withPlacementStyles = ({ placement }) => {\r\n if (placement && placement.includes('-')) {\r\n const [yPlacement, xPlacement] = placement.split('-');\r\n const yAnchor = yPlacement === 'bottom' ? 'top' : 'bottom';\r\n const xOffset = xPlacement === 'left' ? `-${HINT_WIDTH}px` : '100%';\r\n\r\n return css`\r\n ${yAnchor}: 100%;\r\n left: ${xOffset};\r\n `;\r\n }\r\n return css`\r\n top: 100%;\r\n left: 100%;\r\n `;\r\n};\r\n\r\nexport const ContentWrapper = styled(Absolute)`\r\n width: ${HINT_WIDTH}px;\r\n\r\n ${zIndex}\r\n ${withPlacementStyles}\r\n`;\r\n\r\nContentWrapper.displayName = 'ContentWrapper';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { Box, Text } from '..';\r\nimport theme from '../themes/theme';\r\nimport { PLACEMENTS, PLACEMENT_CORNERS } from './constants';\r\nimport { ContentWrapper, HintWrapper } from './styles';\r\n\r\nconst transitionStyles = {\r\n entering: { opacity: 1 },\r\n entered: { opacity: 1 },\r\n exiting: { opacity: 0 },\r\n exited: { opacity: 0 }\r\n};\r\n\r\nconst propTypes = {\r\n /**\r\n * Controls whether the hint should be shown right from the start instead of waiting for gestures.\r\n */\r\n show: PropTypes.bool,\r\n /**\r\n * Decides whether or not the onMouseEntered & onMouseLeaved should handle the hint visibility.\r\n */\r\n disabledGestures: PropTypes.bool,\r\n /**\r\n * The amount of time in ms, that takes the hint to be shown.\r\n */\r\n delay: PropTypes.number,\r\n /**\r\n * Animation duration in ms.\r\n */\r\n duration: PropTypes.number,\r\n /**\r\n * Controls the zIndex for the hint content.\r\n */\r\n zIndex: PropTypes.number,\r\n /**\r\n * Controls the placement corner for the hint.\r\n */\r\n placement: PropTypes.oneOf(Object.values(PLACEMENTS)),\r\n /**\r\n * A string to render inside the hint.\r\n */\r\n content: PropTypes.object.isRequired\r\n};\r\nconst defaultProps = {\r\n show: false,\r\n disabledGestures: false,\r\n delay: 250,\r\n duration: 230,\r\n zIndex: 1,\r\n placement: PLACEMENTS.BOTTOM_RIGHT\r\n};\r\n\r\nconst Hint = ({ show, disabledGestures, delay, duration, zIndex, placement, content, children }) => {\r\n let timeout;\r\n const [isActive, setActive] = useState(false);\r\n\r\n useEffect(() => {\r\n setActive(show);\r\n }, [show]);\r\n\r\n const defaultStyle = {\r\n transition: `opacity ${duration}ms ease-in-out`,\r\n opacity: 0\r\n };\r\n\r\n const getContentShape = () => {\r\n let shape = Array(4).fill('10px');\r\n const cornerIndex = PLACEMENT_CORNERS[placement || 'bottom-right'];\r\n shape[cornerIndex] = '0';\r\n return shape.join(' ');\r\n };\r\n\r\n const showHint = () => {\r\n if (!disabledGestures) {\r\n timeout = setTimeout(() => {\r\n setActive(true);\r\n }, delay);\r\n }\r\n };\r\n\r\n const hideHint = () => {\r\n if (!disabledGestures) {\r\n clearTimeout(timeout);\r\n setActive(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n {state => {\r\n return (\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n \r\n );\r\n};\r\n\r\nHint.propTypes = propTypes;\r\nHint.defaultProps = defaultProps;\r\nHint.PLACEMENTS = PLACEMENTS;\r\n\r\nexport default Hint;\r\n","import Hint from './Hint';\r\n\r\nexport default Hint;\r\n","import styled from 'styled-components';\r\nimport Box from '../../Box';\r\n\r\nexport const ImageBoxWrapper = styled(Box)`\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n vertical-align: unset;\r\n }\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { ImageBoxWrapper } from './assets/styles';\r\n\r\nconst propTypes = {\r\n src: PropTypes.string,\r\n alt: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n src: '',\r\n alt: ''\r\n};\r\n\r\nconst ImageBox = ({ src, alt, ...otherBoxProps }) => {\r\n return (\r\n \r\n {alt}\r\n \r\n );\r\n};\r\n\r\nImageBox.propTypes = propTypes;\r\nImageBox.defaultProps = defaultProps;\r\n\r\nexport default ImageBox;\r\n","import ImageBox from './ImageBox';\r\n\r\nexport default ImageBox;\r\n","import SupOrSubText from './SupAmount';\r\n\r\nexport default SupOrSubText;\r\n","import React from 'react';\r\nimport { getTheFirstElementOfArray, getTheLastElementOfArray } from '../../../utilities/arraysUtils';\r\nimport LoadingspinnerIcon from '../LoadingSpinner';\r\nimport Text from '../Text';\r\nimport theme from '../themes/theme';\r\n\r\nconst SupAmount = ({ textToUse, avoidFormat, isLoading, ...props }) => {\r\n const { fontSize } = props;\r\n let textArray = textToUse?.toString().split('.');\r\n const fontSizeValue = theme.fontSizes[fontSize] / 2;\r\n\r\n return (\r\n <>\r\n {isLoading ? (\r\n \r\n ) : (\r\n \r\n {textToUse && avoidFormat ? (\r\n textToUse\r\n ) : (\r\n <>\r\n {getTheFirstElementOfArray(textArray)}\r\n 10 ? fontSizeValue : 10}px`}\r\n style={{ verticalAlign: 'super' }}>\r\n {getTheLastElementOfArray(textArray)}\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default SupAmount;\r\n","import { SummaryContent } from './SummaryContent';\r\n\r\nexport { SummaryContent };\r\n","// Rebrand 2022\r\n// Primary Colors\r\nconst kiddiePoolBlue = {\r\n 100: '#00C3C8',\r\n 50: '#7FE1E3',\r\n 20: '#CCF3F4',\r\n 10: '#E5F9F9',\r\n colorName: 'Kiddie Pool Blue',\r\n colorCategory: 'Primary'\r\n};\r\nconst preciousStoneBlue = {\r\n 100: '#008489',\r\n 50: '#7FC1C4',\r\n 20: '#CCE6E7',\r\n 10: '#E5F2F3',\r\n colorName: 'Precious Stone Blue',\r\n colorCategory: 'Primary'\r\n};\r\nconst deepLakeBlue = {\r\n 100: '#1C3750',\r\n 80: '#436075',\r\n 50: '#8D9BA7',\r\n 40: '#A4AFB9',\r\n 20: '#D2D7DC',\r\n 10: '#E8EBED',\r\n colorName: 'Deep Lake Blue',\r\n colorCategory: 'Primary'\r\n};\r\nconst digitalBrightRed = {\r\n 100: '#CF0000',\r\n 50: '#E47C7C',\r\n 20: '#F0C7C7',\r\n 10: '#F5E0E0',\r\n colorName: 'Digital Bright Red',\r\n colorCategory: 'Primary'\r\n};\r\nconst deepForestGreen = {\r\n 100: '#005C3C',\r\n 70: '#4C8D76',\r\n 50: '#7FAD9D',\r\n 20: '#CCDED8',\r\n 10: '#E5EEEB',\r\n colorName: 'Deep Forest Green',\r\n colorCategory: 'Primary'\r\n};\r\nconst springGreen = {\r\n 100: '#00DC81',\r\n 50: '#7FEDC0',\r\n 20: '#CCF8E6',\r\n 10: '#E5FBF2',\r\n colorName: 'Spring Green',\r\n colorCategory: 'Primary'\r\n};\r\nconst sandstoneBuff = {\r\n 100: '#F2D997',\r\n 50: '#F8ECCB',\r\n 20: '#FCF7EA',\r\n colorName: 'Sandstone Buff',\r\n colorCategory: 'Primary'\r\n};\r\n\r\n// Secondary Colors\r\nconst deepPurple = {\r\n 100: '#450C3E',\r\n 50: '#A2859E',\r\n 20: '#DACED8',\r\n colorName: 'Deep Purple',\r\n colorCategory: 'Secondary'\r\n};\r\nconst lightPurple = {\r\n 100: '#D45DD0',\r\n 50: '#E9AEE7',\r\n 20: '#F6DFF6',\r\n colorName: 'Light Purple',\r\n colorCategory: 'Secondary'\r\n};\r\nconst magenta = {\r\n 100: '#E80065',\r\n 50: '#F37FB2',\r\n 20: '#FACCE0',\r\n colorName: 'Magenta',\r\n colorCategory: 'Secondary'\r\n};\r\nconst pink = {\r\n 100: '#FFC2D0',\r\n 50: '#FFE0E7',\r\n 20: '#FFF3F6',\r\n colorName: 'Pink',\r\n colorCategory: 'Secondary'\r\n};\r\nconst woodpeckerRed = {\r\n 100: '#980000',\r\n 50: '#CB7F7F',\r\n 20: '#EACCCC',\r\n colorName: 'Woodpecker Red',\r\n colorCategory: 'Secondary'\r\n};\r\nconst deepOrange = {\r\n 100: '#FF6229',\r\n 50: '#FFB094',\r\n 20: '#FFE0D4',\r\n colorName: 'Deep Orange',\r\n colorCategory: 'Secondary'\r\n};\r\nconst digitalYellowOrange = {\r\n 100: '#F4B615',\r\n 50: '#F9DA8A',\r\n 20: '#FDF0D0',\r\n colorName: 'Digital Yellow Orange',\r\n colorCategory: 'Secondary'\r\n};\r\n\r\n// Neutral Colors\r\nconst nightSkyBlack = {\r\n 100: '#000000',\r\n 80: '#333333',\r\n 60: '#666666',\r\n colorName: 'Night Sky Black',\r\n colorCategory: 'Neutral'\r\n};\r\nconst snowMountainGrey = {\r\n 100: '#E4EBEE',\r\n 50: '#F1F5F6',\r\n 20: '#FAFBFC',\r\n colorName: 'Snow Mountain Grey',\r\n colorCategory: 'Neutral'\r\n};\r\nconst pureWhite = {\r\n 0: '#FFFFFF',\r\n colorName: 'Pure White',\r\n colorCategory: 'Neutral'\r\n};\r\n\r\n// System Colors\r\nconst informationBlue = '#4EB9D8';\r\nconst successGreen = '#159F7E';\r\nconst errorOrange = '#B33F1C';\r\nconst focusBlue = '#005BD4';\r\n\r\n// Special Custom Colors\r\nconst mysteryOffer = {\r\n woodBrown: '#642d04',\r\n darkPreciousStoneBlue: '#125e78',\r\n brightYellow: '#f1e807',\r\n borderColor: '#193c5f',\r\n headlineColor: '#042340'\r\n};\r\n\r\nconst voyagersColors = {\r\n 100: '#008903'\r\n};\r\n\r\nconst voyagersGreen = '#0D8B44';\r\nconst deepForestGreenBorder = `${deepForestGreen[50]}20`;\r\nconst blueGradient = `radial-gradient(circle at -21% -28%, ${preciousStoneBlue[100]}, ${deepLakeBlue[100]} 102%)`;\r\nconst darkPreciousStoneBlue = '#00676b';\r\nconst emailCaptureBg = '#FBFCF9';\r\n\r\nconst loyaltyGreen = '#009a44';\r\nconst loyaltyBackground = '#008903';\r\nconst loyaltyHoverBackground = '#006D02';\r\nconst affirmBlue = '#4A4AF4';\r\n\r\nconst colors = {\r\n // Primary\r\n kiddiePoolBlue,\r\n preciousStoneBlue,\r\n deepLakeBlue,\r\n digitalBrightRed,\r\n deepForestGreen,\r\n springGreen,\r\n sandstoneBuff,\r\n // Secondary\r\n deepPurple,\r\n lightPurple,\r\n magenta,\r\n pink,\r\n woodpeckerRed,\r\n deepOrange,\r\n digitalYellowOrange,\r\n // Neutrals\r\n snowMountainGrey,\r\n nightSkyBlack,\r\n pureWhite,\r\n // System Colors\r\n informationBlue,\r\n successGreen,\r\n errorOrange,\r\n focusBlue,\r\n mysteryOffer,\r\n deepForestGreenBorder,\r\n blueGradient,\r\n darkPreciousStoneBlue,\r\n emailCaptureBg,\r\n loyaltyGreen,\r\n loyaltyBackground,\r\n loyaltyHoverBackground,\r\n affirmBlue,\r\n voyagersColors,\r\n voyagersGreen\r\n};\r\n\r\nexport default colors;\r\n","// Plans action types\r\n\r\nconst plansActionTypes = {\r\n SET_PLANS_AVAILABILITY_DETAILS_ERROR: 'SET_PLANS_AVAILABILITY_DETAILS_ERROR',\r\n GET_PLANS_AVAILABILITY_INFO_SUCCESS: 'GET_PLANS_AVAILABILITY_INFO_SUCCESS',\r\n GET_PLANS_AVAILABILITY_INFO_ERROR: 'GET_PLANS_AVAILABILITY_INFO_ERROR',\r\n GET_PLANS_AVAILABILITY_INFO_LOADING: 'GET_PLANS_AVAILABILITY_INFO_LOADING',\r\n SET_PLANS_IS_ERROR_MODAL_ALREADY_CLOSED: 'SET_PLANS_IS_ERROR_MODAL_ALREADY_CLOSED',\r\n GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS: 'GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS',\r\n GET_PLANS_RECENT_SEARCHES_INFO_LOADING: 'GET_PLANS_RECENT_SEARCHES_INFO_LOADING',\r\n GET_PLANS_RECENT_SEARCHES_INFO_ERROR: 'GET_PLANS_RECENT_SEARCHES_INFO_ERROR',\r\n SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS: 'SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS',\r\n DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS: 'DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS',\r\n SELECT_PLANS_SUITE_FOR_RANGE_TYPE: 'SELECT_PLANS_SUITE_FOR_RANGE_TYPE',\r\n UNSELECT_PLANS_SUITE_FOR_RANGE_TYPE: 'UNSELECT_PLANS_SUITE_FOR_RANGE_TYPE',\r\n OPEN_PLANS_RATES_CALENDAR: 'OPEN_PLANS_RATES_CALENDAR',\r\n CLOSE_PLANS_RATES_CALENDAR: 'CLOSE_PLANS_RATES_CALENDAR',\r\n CLEAN_PLANS_CALENDAR_RATES_BY_STAY: 'CLEAN_PLANS_CALENDAR_RATES_BY_STAY',\r\n LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION: 'LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION',\r\n OPEN_PLANS_CALENDAR_RATES_BY_STAY: 'OPEN_PLANS_CALENDAR_RATES_BY_STAY',\r\n OPEN_PLANS_RATES_CALENDAR_RESTRICTION: 'OPEN_PLANS_RATES_CALENDAR_RESTRICTION',\r\n OPEN_PLANS_RATES_CALENDAR_RESTRICTION_INCREMENT: 'OPEN_PLANS_RATES_CALENDAR_RESTRICTION_INCREMENT',\r\n CLOSE_PLANS_RATES_CALENDAR_RESTRICTION: 'CLOSE_PLANS_RATES_CALENDAR_RESTRICTION',\r\n OPEN_PLANS_PAYMENT_LEAVE_MODAL: 'OPEN_PLANS_PAYMENT_LEAVE_MODAL',\r\n CLOSE_PLANS_PAYMENT_LEAVE_MODAL: 'CLOSE_PLANS_PAYMENT_LEAVE_MODAL',\r\n GET_PLANS_LOWEST_RATES_CALENDAR: 'GET_PLANS_LOWEST_RATES_CALENDAR',\r\n GET_PLANS_LOWEST_RATES_CALENDAR_MOBILE: 'GET_PLANS_LOWEST_RATES_CALENDAR_MOBILE',\r\n GET_PLANS_LOWEST_RATES_CALENDAR_ERROR: 'GET_PLANS_LOWEST_RATES_CALENDAR_ERROR',\r\n CLEAN_PLANS_CALENDAR_RESTRICTIONS_AND_LOWEST_RATES: 'CLEAN_PLANS_CALENDAR_RESTRICTIONS_AND_LOWEST_RATES',\r\n GET_PLANS_AVAILABILITY_HIGHEST_RATES: 'GET_PLANS_AVAILABILITY_HIGHEST_RATES',\r\n GET_PLANS_AVAILABILITY_HIGHEST_RATES_SUCCESS: 'GET_PLANS_AVAILABILITY_HIGHEST_RATES_SUCCESS',\r\n GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR: 'GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR',\r\n GET_PLANS_AVAILABILITY_HIGHEST_RATES_DATES_EXCEEDED_ERROR:\r\n 'GET_PLANS_AVAILABILITY_HIGHEST_RATES_DATES_EXCEEDED_ERROR',\r\n SET_PLANS_APPLIED_FILTERS: 'SET_PLANS_APPLIED_FILTERS',\r\n SET_PLANS_SELECTED_SUITE_NAME_FOR_CALENDAR: 'SET_PLANS_SELECTED_SUITE_NAME_FOR_CALENDAR',\r\n GET_PLANS_AVAILABILITY_RANGE: 'GET_PLANS_AVAILABILITY_RANGE',\r\n GET_PLANS_AVAILABILITY_RANGE_SUCCESS: 'GET_PLANS_AVAILABILITY_RANGE_SUCCESS',\r\n GET_PLANS_AVAILABILITY_RANGE_ERROR: 'GET_PLANS_AVAILABILITY_RANGE_ERROR',\r\n GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING: 'GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING',\r\n GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR: 'GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR',\r\n GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_RESET: 'GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_RESET',\r\n SET_PLANS_LATEST_J_VERSION_EVENT_ERROR: 'SET_PLANS_LATEST_J_VERSION_EVENT_ERROR',\r\n SET_PLANS_LATEST_H_VERSION_EVENT_ERROR: 'SET_PLANS_LATEST_H_VERSION_EVENT_ERROR',\r\n GET_PLANS_ITEM_QUANTITY_TYPE: 'GET_PLANS_ITEM_QUANTITY_TYPE',\r\n GET_PLANS_ITEM_QUANTITY_SUCCESS: 'GET_PLANS_ITEM_QUANTITY_SUCCESS',\r\n GET_PLANS_ITEM_QUANTITY_ERROR: 'GET_PLANS_ITEM_QUANTITY_ERROR',\r\n TOGGLE_PLANS_EMAIL_CAMPAIGNS: 'TOGGLE_PLANS_EMAIL_CAMPAIGNS',\r\n CLEAR_PLANS_ALL_AVAILABILITY_DATA: 'CLEAR_PLANS_ALL_AVAILABILITY_DATA',\r\n SET_PLANS_IS_CALIFORNIA_RESIDENT: 'SET_PLANS_IS_CALIFORNIA_RESIDENT',\r\n CLEAN_PLANS_IS_CALIFORNIA_RESIDENT: 'CLEAN_PLANS_IS_CALIFORNIA_RESIDENT',\r\n SET_PLANS_QUALIFYING_ID: 'SET_PLANS_QUALIFYING_ID',\r\n GET_PLANS_QUALIFYING_ID_HAS_ERROR: 'GET_PLANS_QUALIFYING_ID_HAS_ERROR',\r\n SET_PLANS_TAB_INDEX_BY_EMAIL_CAMPAIGN: 'SET_PLANS_TAB_INDEX_BY_EMAIL_CAMPAIGN',\r\n SET_PLANS_IS_BOOKING_WIDGET_FOCUSED: 'SET_PLANS_IS_BOOKING_WIDGET_FOCUSED',\r\n SET_PLANS_SORTING_ORDER: 'SET_PLANS_SORTING_ORDER',\r\n SET_PLANS_SUITE_CODE_FILTER: 'SET_PLANS_SUITE_CODE_FILTER',\r\n SET_PLANS_IS_CART_OPEN_CLOSE: 'SET_PLANS_IS_CART_OPEN_CLOSE',\r\n SET_PLANS_IS_CART_OPEN_CLOSE_CLEAN: 'SET_PLANS_IS_CART_OPEN_CLOSE_CLEAN',\r\n SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED: 'SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED',\r\n SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN: 'SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN'\r\n};\r\n\r\nexport default plansActionTypes;\r\n","/*\r\nAs detailed on this user story: https://dev.azure.com/gwdigital/GW%20Digital%20Project/_workitems/edit/55167/\r\nduring the removal of the 'moment' date library it was chosen to have\r\nthis file be the only place where 'dayjs' would be allowed to be imported or mentioned.\r\n*/\r\nimport internalDate from 'dayjs';\r\nimport { DATE_FORMATS } from '../../utilities/constants';\r\ninternalDate.isInternalDate = internalDate.isDayjs;\r\nconst plugins = [\r\n require('dayjs/plugin/localeData'),\r\n require('dayjs/plugin/localizedFormat'),\r\n require('dayjs/plugin/pluralGetSet'),\r\n require('dayjs/plugin/isBetween'),\r\n require('dayjs/plugin/weekday'),\r\n require('dayjs/plugin/customParseFormat'),\r\n require('dayjs/plugin/duration')\r\n];\r\nplugins.forEach(p => internalDate.extend(p));\r\n\r\nconst _gwDateFromat = DATE_FORMATS.default;\r\nconst _today = internalDate();\r\nconst _yesterday = _today.subtract(1, 'day');\r\nconst _tomorrow = _today.add(1, 'day');\r\nconst _localeData = internalDate.localeData();\r\nconst _getInternalDate = (date, format, clone = false) =>\r\n internalDate.isInternalDate(date)\r\n ? clone\r\n ? date.clone()\r\n : date\r\n : format\r\n ? internalDate(date, format)\r\n : internalDate(date);\r\nconst _createDate = dateStr => _getInternalDate(dateStr).format(_gwDateFromat);\r\nconst _todayStr = _createDate(_today);\r\nconst _yesterdayStr = _createDate(_yesterday);\r\nconst _tomorrowStr = _createDate(_tomorrow);\r\n\r\n/**\r\n * This wrapper is going to abstract the date library used in the application.\r\n *  https://medium.com/swlh/best-moment-js-alternatives-5dfa6861a1eb\r\n * Main principles/approach:\r\n *  1. We only deal with 'date' portion of the 'Date' object, not the 'time' portion in this application\r\n *  2. We represent the 'date' as a string using 'DATE_FORMATS.default' date format\r\n *  3. No part of this application should use 'Date' or 'moment' object to create, store, calculate or format date information\r\n *  4. Code in this application should use this wrapper class for any date related operation instead of importing 'moment' library and utilizing that, only exception (for now) is this wrapper class\r\n */\r\n\r\nconst isStringAndDefaultFormat = (dateStr, inputFormat = _gwDateFromat) =>\r\n typeof dateStr === 'string' && inputFormat === _gwDateFromat && /^(1|2)\\d{3}-(0|1)\\d-(0|1|2|3)\\d$/.test(dateStr); // Regex for YYYY-MM-DD\r\n// Year 4 digits must start with 1 or 2 / Month 2 digits: 0 or 1 / Day 2 digits: 0, 1, 2, or 3\r\n\r\nexport const GwDatesWrapper = {\r\n // GET CURRENT DATE\r\n today: () => _todayStr,\r\n yesterday: () => _yesterdayStr,\r\n // DURATION\r\n duration: number => internalDate.duration(number),\r\n // PARSE DATESTR USING FORMAT AND RETURN STANDARD DATE AS STRING\r\n parseDate: (dateStr, format) => _createDate(_getInternalDate(dateStr, format)),\r\n // GET CURRENT MONTH\r\n month: (dateStr, monthName) => _getInternalDate(dateStr).month(monthName),\r\n // GET MONTH NUMBER FROM MONTH NAME\r\n monthNumberFromName: monthName => _getInternalDate(monthName, 'MMMM').month(),\r\n // GET CURRENT YEAH\r\n year: (dateStr, newYearNumber) => _getInternalDate(dateStr).year(newYearNumber),\r\n // FORMAT DATE\r\n format: (dateStr, format = _gwDateFromat) =>\r\n isStringAndDefaultFormat(dateStr, format) ? dateStr : _getInternalDate(dateStr).format(format),\r\n // END OF UNITY\r\n endOf: (dateStr, unit = 'days') => _createDate(_getInternalDate(dateStr, null, true).endOf(unit)),\r\n // START OF UNITY\r\n startOf: (dateStr, unit = 'days') => _createDate(_getInternalDate(dateStr, null, true).startOf(unit)),\r\n // DAY\r\n day: dateStr => _getInternalDate(dateStr).day(),\r\n // WEEKDAY\r\n weekday: dateStr => _getInternalDate(dateStr).weekday(),\r\n // ADD TIME TO DATE\r\n add: (dateStr, amount, unit = 'days') => _createDate(_getInternalDate(dateStr, null, true).add(amount, unit)),\r\n // SUBTRACT TIME TO DATE\r\n subtract: (dateStr, amount, unit = 'days') =>\r\n _createDate(_getInternalDate(dateStr, null, true).subtract(amount, unit)),\r\n // DIFFERENCE BETWEEN DATES\r\n diff: (dateStr1, dateStr2, unit = 'days') => _getInternalDate(dateStr1).diff(_getInternalDate(dateStr2), unit),\r\n // IS DATE BETWEEN\r\n isBetween: (dateStr, start, end, unit = 'days', inclusionRules) =>\r\n _getInternalDate(dateStr).isBetween(_getInternalDate(start), _getInternalDate(end), unit, inclusionRules),\r\n // IS DATE THE SAME\r\n isSame: (dateStr1, dateStr2, unit = 'days') =>\r\n ((unit === 'day' || unit === 'days') && dateStr1 === dateStr2) ||\r\n _getInternalDate(dateStr1).isSame(_getInternalDate(dateStr2), unit),\r\n // IS DATE AFTER\r\n isAfter: (dateStr1, dateStr2, unit = 'days') => _getInternalDate(dateStr1).isAfter(_getInternalDate(dateStr2), unit),\r\n // IS DATE BEFORE\r\n isBefore: (dateStr1, dateStr2, unit = 'days') =>\r\n _getInternalDate(dateStr1).isBefore(_getInternalDate(dateStr2), unit),\r\n // IS DATE THE SAME OR AFTER\r\n isSameOrAfter: (dateStr1, dateStr2, unit = 'days') =>\r\n _getInternalDate(dateStr1).isSame(_getInternalDate(dateStr2), unit) ||\r\n _getInternalDate(dateStr1).isAfter(_getInternalDate(dateStr2), unit),\r\n // IS DATE THE SAME OR BEFORE\r\n isSameOrBefore: (dateStr1, dateStr2, unit = 'days') =>\r\n _getInternalDate(dateStr1).isSame(_getInternalDate(dateStr2), unit) ||\r\n _getInternalDate(dateStr1).isBefore(_getInternalDate(dateStr2), unit),\r\n // IS DATE TODAY\r\n isToday: dateStr => _getInternalDate(dateStr).isSame(_today, 'day'),\r\n //SUBTRACT A DATE BY ANOTHER\r\n subtractDateByAnother: (date1, date2) => {\r\n return _createDate(_getInternalDate(date1) - _getInternalDate(date2));\r\n },\r\n // FORMAT RANGE\r\n formatRange: (firstDateStr, secondDateStr, format, separator = '-') =>\r\n `${_getInternalDate(firstDateStr).format(format)} ${separator} ${_getInternalDate(secondDateStr).format(format)}`,\r\n // SET DATE - Generic setter, accepting unit as first argument, and value as second argument\r\n set: (dateStr, unit = 'days', value) => _createDate(_getInternalDate(dateStr).set(unit, value)),\r\n // IS DATE A VALID DATE\r\n isValid: (date, strictCheck = false) =>\r\n strictCheck ? isStringAndDefaultFormat(date) && _getInternalDate(date).isValid() : _getInternalDate(date).isValid(),\r\n // FORMAT OF LOCALE\r\n getLocaleDateFormat: (formatKey = 'L') => _localeData.longDateFormat(formatKey),\r\n // LOCALE FIRST DAY OF THE WEEK\r\n firstDayOfWeek: () => _localeData.firstDayOfWeek(),\r\n // --------------------- UNUSED LEFT FOR FUTURE REFERENCE:\r\n tomorrow: () => _tomorrowStr,\r\n // STANDARD DATE FORMAT FOR THIS WRAPPER\r\n gwDateFromat: _gwDateFromat,\r\n // GET LOCALE DATA\r\n getLocaleData: () => _localeData,\r\n // INTERNAL DATE PARSEZONE\r\n parseZone: dateStr => internalDate.parseZone(dateStr),\r\n // CREATE CC DATE\r\n createCCDate: (month, year) => this.format(this.parseDate(`${month}/${year}`, 'MM/YYYY'), 'YYYY-MM'),\r\n // IS DATE TOMORROW\r\n isTomorrow: dateStr => _getInternalDate(dateStr).isSame(_tomorrow, 'day'),\r\n // IS DATE YESTERDAY\r\n isYesterday: dateStr => _getInternalDate(dateStr).isSame(_yesterday, 'day')\r\n};\r\n","// Lodge Config action types\r\n\r\nconst lodgeConfigActionTypes = {\r\n ID_ME_DATA_PARAMETERS: 'ID_ME_DATA_PARAMETERS',\r\n LOADING_LODGE_CONFIG: 'LOADING_LODGE_CONFIG',\r\n ERROR_LODGE_CONFIG_LOADING: 'ERROR_LODGE_CONFIG_LOADING',\r\n CLEAR_LODGE_CONFIG_LOADING: 'CLEAR_LODGE_CONFIG_LOADING',\r\n SUCCESS_LODGE_CONFIG_LOADING: 'SUCCESS_LODGE_CONFIG_LOADING',\r\n LOADING_LODGE_CONFIG_PLAN: 'LOADING_LODGE_CONFIG_PLAN',\r\n ERROR_LODGE_CONFIG_LOADING_PLAN: 'ERROR_LODGE_CONFIG_LOADING_PLAN',\r\n CLEAR_LODGE_CONFIG_LOADING_PLAN: 'CLEAR_LODGE_CONFIG_LOADING_PLAN',\r\n SUCCESS_LODGE_CONFIG_LOADING_PLAN: 'SUCCESS_LODGE_CONFIG_LOADING_PLAN',\r\n LOADING_LODGE_CONFIG_USER_SETTINGS: 'LOADING_LODGE_CONFIG_USER_SETTINGS',\r\n ERROR_LODGE_CONFIG_USER_SETTINGS: 'ERROR_LODGE_CONFIG_USER_SETTINGS',\r\n CLEAR_LODGE_CONFIG_USER_SETTINGS: 'CLEAR_LODGE_CONFIG_USER_SETTINGS',\r\n SUCCESS_LODGE_CONFIG_USER_SETTINGS: 'SUCCESS_LODGE_CONFIG_USER_SETTINGS',\r\n LOADING_LODGE_CONFIG_CREDIT_PACKAGE: 'LOADING_LODGE_CONFIG_CREDIT_PACKAGE',\r\n ERROR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE: 'ERROR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE',\r\n CLEAR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE: 'CLEAR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE',\r\n SUCCESS_LODGE_CONFIG_LOADING_CREDIT_PACKAGE: 'SUCCESS_LODGE_CONFIG_LOADING_CREDIT_PACKAGE',\r\n LOADING_LODGE_CONFIG_CMP: 'LOADING_LODGE_CONFIG_CMP',\r\n ERROR_LODGE_CONFIG_LOADING_CMP: 'ERROR_LODGE_CONFIG_LOADING_CMP',\r\n CLEAR_LODGE_CONFIG_LOADING_CMP: 'CLEAR_LODGE_CONFIG_LOADING_CMP',\r\n SUCCESS_LODGE_CONFIG_LOADING_CMP: 'SUCCESS_LODGE_CONFIG_LOADING_CMP',\r\n LOADING_LODGE_CONFIG_PAYMENT: 'LOADING_LODGE_CONFIG_PAYMENT',\r\n ERROR_LODGE_CONFIG_LOADING_PAYMENT: 'ERROR_LODGE_CONFIG_LOADING_PAYMENT',\r\n CLEAR_LODGE_CONFIG_LOADING_PAYMENT: 'CLEAR_LODGE_CONFIG_LOADING_PAYMENT',\r\n SUCCESS_LODGE_CONFIG_LOADING_PAYMENT: 'SUCCESS_LODGE_CONFIG_LOADING_PAYMENT',\r\n LOADING_LODGE_CONFIG_LEADGEN: 'LOADING_LODGE_CONFIG_LEADGEN',\r\n ERROR_LODGE_CONFIG_LOADING_LEADGEN: 'ERROR_LODGE_CONFIG_LOADING_LEADGEN',\r\n CLEAR_LODGE_CONFIG_LOADING_LEADGEN: 'CLEAR_LODGE_CONFIG_LOADING_LEADGEN',\r\n SUCCESS_LODGE_CONFIG_LOADING_LEADGEN: 'SUCCESS_LODGE_CONFIG_LOADING_LEADGEN',\r\n RESET_LODGE_CONFIG: 'RESET_LODGE_CONFIG',\r\n LOADING_LODGE_CONFIG_CART: 'LOADING_LODGE_CONFIG_CART',\r\n ERROR_LODGE_CONFIG_LOADING_CART: 'ERROR_LODGE_CONFIG_LOADING_CART',\r\n CLEAR_LODGE_CONFIG_LOADING_CART: 'CLEAR_LODGE_CONFIG_LOADING_CART',\r\n SUCCESS_LODGE_CONFIG_LOADING_CART: 'SUCCESS_LODGE_CONFIG_LOADING_CART',\r\n LOADING_LODGE_CONFIG_BOOKING_WIDGET: 'LOADING_LODGE_CONFIG_BOOKING_WIDGET',\r\n ERROR_LODGE_CONFIG_LOADING_BOOKING_WIDGET: 'ERROR_LODGE_CONFIG_LOADING_BOOKING_WIDGET',\r\n CLEAR_LODGE_CONFIG_LOADING_BOOKING_WIDGET: 'CLEAR_LODGE_CONFIG_LOADING_BOOKING_WIDGET',\r\n SUCCESS_LODGE_CONFIG_LOADING_BOOKING_WIDGET: 'SUCCESS_LODGE_CONFIG_LOADING_BOOKING_WIDGET',\r\n LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET: 'LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET',\r\n ERROR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET: 'ERROR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET',\r\n CLEAR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET: 'CLEAR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET',\r\n SUCCESS_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET: 'SUCCESS_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET'\r\n};\r\n\r\nexport default lodgeConfigActionTypes;\r\n","import { include } from 'named-urls';\r\n\r\nconst routes = {\r\n blank: '/',\r\n home: '/home',\r\n planSearchForm: include('/(waterpark-attractions|suites|dining-shopping|dates|deals)', {\r\n t2: '',\r\n t3: '/*'\r\n }),\r\n dynamicFlow: include('/booking', {\r\n self: '',\r\n flowSteps: ':slugUrl'\r\n }),\r\n plan: include('/plan', {\r\n self: '',\r\n activities: 'packages-activities',\r\n dining: 'packages-dining',\r\n payment: 'payment',\r\n paymentSuccess: 'confirmation'\r\n }),\r\n birthdayParties: include('/birthday-parties', {\r\n self: '',\r\n partySelect: 'booking',\r\n foodDrinks: 'food-drinks',\r\n packagesAddons: 'packages-addons',\r\n guestInfo: 'guest-info',\r\n payment: 'payment',\r\n paymentSuccess: 'confirmation',\r\n requestForm: 'birthday-party-request-form'\r\n }),\r\n daypass: include('/daypass', {\r\n self: '',\r\n payment: 'payment',\r\n booking: 'booking',\r\n paymentSuccess: 'confirmation'\r\n }),\r\n eventCalendar: '/waterpark-attractions/calendar/:date?',\r\n forgotPassword: '/forgotpassword',\r\n changePassword: '/changepassword',\r\n unlockAccount: '/unlockaccount',\r\n myRecentSearches: '/my-recent-searches',\r\n profile: include('/user/profile', {\r\n self: '',\r\n myPreferences: 'my-preferences'\r\n }),\r\n reservations: include('/reservations', {\r\n self: '',\r\n myReservations: include('my-reservations', {\r\n self: '',\r\n detail: include(':reservationId', {\r\n self: '',\r\n addPackage: 'add-a-package',\r\n packagemodal: '(cabanas|passes|birthday-packages|dining|lco)'\r\n })\r\n }),\r\n search: 'search/'\r\n }),\r\n reservation: include('/reservation', {\r\n self: '',\r\n detail: include(':reservationId', {\r\n self: '',\r\n checkIn: 'check-in',\r\n folio: 'folio'\r\n })\r\n }),\r\n customerService: include('/customer-service', {\r\n self: '',\r\n contactUs: 'contact-us'\r\n }),\r\n leadGenSignUp: '/leadgen-signup',\r\n loyaltyLandingPageForm: '/voyagers-club',\r\n promoSignUp: '/promo-sign-up',\r\n referAFriend: '/user/refer-a-friend',\r\n referAFriendLoggedOut: '/refer-a-friend',\r\n venues: include('/venues', {\r\n self: '',\r\n planner: 'event-planners'\r\n }),\r\n widget: '/widget'\r\n};\r\n\r\nexport default routes;\r\n","/**\r\n *\r\n * @param {string} copyToChange text that will be edited\r\n * @param {string} newCopy text to be replaced\r\n * @param {string} key key or word to replace\r\n */\r\nexport function editCopyByReplaceString(copyToChange, newCopy, key) {\r\n return copyToChange.replace(key, newCopy);\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} copyToChange text that will be edited\r\n * @param {string} newCopy text to be replaced\r\n * @param {string} key key or word to replace\r\n */\r\nexport function editCopyByReplaceStringWithBold(copyToChange, newCopy, key) {\r\n const splittedText = copyToChange.split(key);\r\n return (\r\n <>\r\n {splittedText[0]}\r\n {newCopy}\r\n {splittedText[1]}\r\n \r\n );\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} copyToChange text that will be edited\r\n * @param {JSX component} newCopy component to be used, it needs to be JSX\r\n * @param {string} key key or word to replace\r\n */\r\nexport function editCopyByReplaceWithComponent(copyToChange, newCopy, key) {\r\n const stringArray = copyToChange.split(' ');\r\n const indexOfKey = stringArray.indexOf(key);\r\n const componentToUse = [' ', newCopy, ' '];\r\n stringArray[indexOfKey] = componentToUse;\r\n\r\n const result = [''];\r\n for (const iterator of stringArray) {\r\n if (typeof iterator === 'string') {\r\n const index = result.length - 1;\r\n const textValue = result[index];\r\n result[index] = textValue.concat(' ', iterator);\r\n } else {\r\n if (typeof iterator === 'object') {\r\n result.push(iterator);\r\n result.push('');\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} copyToChange\r\n * @param {object} newCopys\r\n */\r\nexport function editCopyByReplaceMultipleStrings(copyToChange, newCopys) {\r\n const allKeysToReplace = Object.keys(newCopys);\r\n let result = copyToChange;\r\n\r\n for (const keyWord of allKeysToReplace) {\r\n result = result.replace(keyWord, newCopys[keyWord]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} copyToChange\r\n * @param {object} newCopys\r\n */\r\nexport function editCopyByReplaceWithMultipleComponent(copyToChange, newCopys) {\r\n const stringArray = copyToChange.split(' ');\r\n const allKeysToReplace = Object.keys(newCopys);\r\n\r\n for (const keyToReplace of allKeysToReplace) {\r\n const indexOfKey = stringArray.indexOf(keyToReplace);\r\n const componentToUse = [' ', newCopys[keyToReplace], ' '];\r\n stringArray[indexOfKey] = componentToUse;\r\n }\r\n\r\n const result = [''];\r\n for (const iterator of stringArray) {\r\n if (typeof iterator === 'string') {\r\n const index = result.length - 1;\r\n const textValue = result[index];\r\n result[index] = textValue.concat(' ', iterator);\r\n } else {\r\n if (typeof iterator === 'object') {\r\n result.push(iterator);\r\n result.push('');\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport const editCopyFindAndReplaceByKey = (copyToChange, keyToReplace, newKeyToAdd) => {\r\n const copyHasNewKey = copyToChange.split(' ').includes(newKeyToAdd);\r\n if (copyHasNewKey) return copyToChange;\r\n\r\n const newCopy = copyToChange.replace(keyToReplace, newKeyToAdd);\r\n return newCopy;\r\n};\r\n\r\n// PLURALIZE WORDS DICTIONARY FOR WORDS THAT CAN'T BE PLURALIZED BY ADDING AN S\r\nconst pluralizeWordsDictionary = {\r\n person: 'people',\r\n pass: 'passes'\r\n};\r\n\r\n/**\r\n * This function will pluralize a word if the count is greater than 1\r\n * @param {string} word\r\n * @param {number} count\r\n * @param {string} suffix\r\n * @param {boolean} ignoreDictionary some legal words can be pluralized by adding an s like persons, this will ignore the dictionary\r\n * @param {boolean} zeroCasePlural if we have a case that the 0 quantity of count needs to be in plural\r\n */\r\nexport function pluralize(word, count, suffix = 's', ignoreDictionary = false, zeroCasePlural = false) {\r\n if (count > 1) {\r\n if (ignoreDictionary) {\r\n return `${word}${suffix}`;\r\n } else {\r\n return pluralizeWordsDictionary[word] || `${word}${suffix}`;\r\n }\r\n }\r\n if (zeroCasePlural && count === 0) return `${word}${suffix}`;\r\n return word;\r\n}\r\n\r\n/**\r\n * Formats price to have two decimals when it has more than two decimals but leaves it as it is when it is less or equal than two decimals\r\n * @param {number} price\r\n * @returns formated price\r\n */\r\nexport const formatPrice = price => {\r\n if (price == null || typeof price !== 'number') return '0';\r\n if (price.toString().includes('.') && price.toString().split('.')[1].length > 2) return price.toFixed(2);\r\n return price.toString();\r\n};\r\n","//details.js\r\nexport const PROMO_CODE_COPY = 'Code: applied';\r\nexport const CHANGE_SUITE_SELECTION = 'Change Suite Selection';\r\nexport const ROOM_SAVINGS_APPLIED = 'Room Savings Applied:';\r\n\r\n//Footer.js\r\nexport const YOUR_SAVINGS = 'Your Savings:';\r\n\r\n//PackageList.js\r\nexport const REMOVE = 'Remove';\r\nexport const WATERPARK_PASS = 'Water Park Passes';\r\nexport const INCLUDED = 'INCLUDED';\r\nexport const ROOM_WITH_NO_WATER_PASS =\r\n 'Add water park for just $ per night - Unlimited access during all days of your stay';\r\nexport const ADD_PASSES = 'Add ';\r\n\r\n//Subtotal.js\r\nexport const SUBTOTAL = 'Subtotal';\r\nexport const TAXES_NOT_INCLUDED = 'Taxes and fees not included';\r\n\r\n//TotalSavings.js\r\nexport const TOTAL_SAVINGS = 'Total Savings';\r\n\r\n//Totals.js\r\nexport const POINTS_APPLIED = ' Voyagers Points applied';\r\nexport const TOTAL = 'Total';\r\n\r\n//Offers.js\r\nexport const EXPIRATION_DATE = 'This Deal will expire on ';\r\nexport const BONUS_DEALS_APPLIED = 'Bonus Deals applied';\r\nexport const EXCEED_AMOUNT = 'Amount exceeds the room price, please remove & continue';\r\n\r\n//AdditionalCharges.js\r\nexport const ADDITIONAL_CHARGES = 'Additional Charges';\r\n\r\n//Header.js\r\nexport const CHECK_IN = 'Check-In';\r\nexport const CHECK_OUT = 'Check-Out';\r\nexport const STAY_SUMMARY_DESKTOP = 'Stay Summary';\r\nexport const STAY_SUMMARY_MOBILE = 'Stay Summary:';\r\n\r\n//DueAmount.js\r\nexport const DUE_TODAY = 'Due today';\r\nexport const DUE_TODAY_CAP = 'Due Today';\r\nexport const DUE_CHECKIN = 'Due at Check-In';\r\n\r\n//Content.js\r\nexport const SEASONS_CODE = 'SEASONS';\r\n\r\n//Cart Copy\r\nexport const BOOKING_CART_TITLE = 'Booking Cart';\r\nexport const BOOKING_CART_EMPTY = 'Your Cart is currently empty';\r\nexport const BOOKING_CART_BOOK_NOW = 'Book Now';\r\nexport const BOOKING_CART_SUBTOTAL = '(Subtotal)';\r\nexport const GUESTS_COPY = ' - ';\r\nexport const DATES = ' - ';\r\nexport const PROMOTION_CODE = 'Code: ';\r\nexport const REMOVE_PACKAGE = 'Are you sure you want to remove from your cart?';\r\nexport const REMOVE_SUITE =\r\n ' Removing a suite will empty your cart. Are you sure you want to remove and all additional items?\"';\r\nexport const EDIT_SUITE =\r\n 'The other items in your cart are attached to the . Changing suites empties your cart and they will need to be re-added.';\r\nexport const REMOVE_ITEM_TITLE = 'Remove Item';\r\nexport const REMOVE_SUITE_TITLE = 'Remove Suite';\r\nexport const EDIT_SUITE_TITLE = 'Edit Suite';\r\nexport const EDIT = 'Edit';\r\nexport const CANCEL = 'Cancel';\r\nexport const CONTINUE_BOOKING = 'Continue Booking';\r\nexport const CONTINUE_TO_STEP = 'Continue to ';\r\nexport const EXPIRED_BOOKING_TITLE = 'Your booking session has expired';\r\nexport const EXPIRED_BOOKING_TEXT = 'Please return to the Suites page to restart your booking.';\r\nexport const RESTART_MY_BOOKING = 'Restart My Booking';\r\nexport const WARNING = 'Warning';\r\n","// Reservation Details Selectors\r\n\r\nimport get from 'lodash-es/get';\r\nimport sortBy from 'lodash-es/sortBy';\r\nimport { GwDatesWrapper } from '../../../components/_internal_date_/gwDatesWrapper';\r\nimport { EReservationStatus } from '../../../utilities/availabilityUtils';\r\nimport {\r\n CABANAS_CODES_TYPES,\r\n CHECKOUT_TIMES,\r\n DATE_FORMATS,\r\n DAY_PASSES_TYPE,\r\n HOWL_N_LEARN_CODE,\r\n LATE_CHECKOUT_PREFIXES\r\n} from '../../../utilities/constants';\r\n\r\n/**\r\n * Get lastName (users) for the reservation.\r\n * @return {String} - Arrival Date;\r\n */\r\nexport const getLastName = state => get(state, 'data.lastName');\r\n\r\n/**\r\n * Get firstName (users) for the reservation.\r\n * @return {String} - Reservation guest's first name;\r\n */\r\nexport const getFirstName = state => get(state, 'data.firstName');\r\n\r\n/**\r\n * Get check-in (arrival) date for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {String} - Arrival Date.\r\n */\r\nexport const getArrivalDate = state => get(state, 'data.arrival');\r\n\r\n/**\r\n *\r\n * @param {Object} state reservationDetails entity store.\r\n * @returns {String} - Arrival Date as Date Object\r\n */\r\nexport const getArrivalDateObject = state => {\r\n const date = get(state, 'data.arrival');\r\n if (!date) return date;\r\n\r\n return GwDatesWrapper.format(date, DATE_FORMATS.default);\r\n};\r\n\r\n/**\r\n *\r\n * Get check-out (departure) date for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {String} - Departure Date.\r\n */\r\nexport const getDepartureDate = state => get(state, 'data.departure');\r\n\r\n/**\r\n *\r\n * @param {Object} state reservationDetails entity store.\r\n * @returns {String} - Departure Date as Date Object\r\n */\r\nexport const getDepartureDateObject = state => {\r\n const date = get(state, 'data.departure');\r\n if (!date) return date;\r\n\r\n return GwDatesWrapper.format(date, DATE_FORMATS.default);\r\n};\r\n\r\n/**\r\n * Get the offer code added for the reservation.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation offer code.\r\n */\r\nexport const getOfferCode = state => get(state, 'data.offerCode');\r\n\r\n/**\r\n * Get the id for the reservation.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation id.\r\n */\r\nexport const getReservationId = state => get(state, 'data.id');\r\n\r\n/**\r\n * Get the id for the reservation on APS.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation id.\r\n */\r\nexport const getReservationIdOnAps = state => {\r\n return get(state, 'data.externalId') ?? get(state, 'data.id');\r\n};\r\n\r\n/**\r\n * Get the reservation status.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation status.\r\n */\r\nexport const getStatus = state => get(state, 'data.status');\r\n\r\n/**\r\n * Get the number of adults.\r\n * @param {Object} state Reservations store.\r\n * @return {number} Confirmed reservation number of adults.\r\n */\r\nexport const getAdults = state => {\r\n return get(state, 'data.guests.adults') ?? get(state, 'data.selection.numAdults');\r\n};\r\n\r\n/**\r\n * Get the number of billable kids.\r\n * @param {Object} state Reservations store.\r\n * @return {number} Confirmed reservation number of billable kids.\r\n */\r\nexport const getBillableGuest = state => {\r\n const children = get(state, 'data.guests.children');\r\n const numChildrenOverTwo = get(state, 'data.selection.numChildrenOverTwo')\r\n ? get(state, 'data.selection.numChildrenOverTwo')\r\n : children\r\n ? children.filter(kid => kid > 2).length\r\n : 0;\r\n return getAdults(state) + numChildrenOverTwo;\r\n};\r\n\r\n/**\r\n * Get the number of children.\r\n * @param {Object} state Reservations store.\r\n * @return {number} Confirmed reservation number of children.\r\n */\r\nexport const getKids = state => {\r\n return get(state, 'data.selection.numChildren')\r\n ? get(state, 'data.selection.numChildren')\r\n : get(state, 'data.guests.children')\r\n ? get(state, 'data.guests.children').length\r\n : 0;\r\n};\r\n\r\n/* Get the selected ages of kids for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {array} - kids ages\r\n */\r\nexport const getKidsAges = state => {\r\n return get(state, 'data.guests.children') ?? get(state, 'data.children') ?? [];\r\n};\r\n\r\n/**\r\n * Get the room type.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation room type.\r\n */\r\nexport const getRoomType = state => {\r\n return get(state, 'data.product.code') ?? get(state, 'data.roomType');\r\n};\r\n\r\n/**\r\n * Get the property.\r\n * @param {Object} state Reservations store.\r\n * @return {string} Confirmed reservation property.\r\n */\r\nexport const getProperty = state => {\r\n return get(state, 'data.lodge.code') ?? get(state, 'data.property');\r\n};\r\n\r\n/**\r\n * Get the number of nights for reservation.\r\n * @param {Object} state Reservations store.\r\n * @return {number} Confirmed reservation number of nights.\r\n */\r\nexport const getNumberOfNights = state => {\r\n return (\r\n get(state, 'data.selection.numberOfNights') ??\r\n GwDatesWrapper.diff(getDepartureDate(state), getArrivalDate(state), 'days')\r\n );\r\n};\r\n\r\n/**\r\n * Get sutie details for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {Object} - Suite details[Suite name, adults count, kids count, infants count, offer code] of the confirmed suite.\r\n */\r\nexport const getSuiteDetails = (state, includePropertyAndRoomType) => {\r\n const reservation = get(state, 'data');\r\n let suiteDetail = {};\r\n if (reservation) {\r\n if (reservation?.isCabana) {\r\n suiteDetail.title = reservation.roomDescription;\r\n }\r\n\r\n // Adding total room rate for selected suite\r\n if (reservation?.rateInfo) {\r\n const { totalRoomRate } = reservation.rateInfo;\r\n suiteDetail.totalRoomRate = totalRoomRate;\r\n } else {\r\n suiteDetail.totalRoomRate = reservation?.product?.totalPrice;\r\n }\r\n\r\n // Setting guests count.\r\n if (reservation?.selection) {\r\n const { numAdults, numChildrenOverTwo, numChildren } = reservation.selection;\r\n suiteDetail.adults = numAdults;\r\n suiteDetail.kids = numChildrenOverTwo;\r\n suiteDetail.totalKids = numChildren;\r\n } else {\r\n suiteDetail.adults = reservation?.guests?.adults;\r\n suiteDetail.kids = reservation?.guests?.children ? reservation.guests.children.filter(kid => kid > 2).lenght : 0;\r\n suiteDetail.totalKids = reservation?.guests?.children ? reservation.guests.children.length : 0;\r\n }\r\n\r\n suiteDetail.offerCode = reservation.offerCode;\r\n if (includePropertyAndRoomType) {\r\n suiteDetail.property = reservation.property || reservation?.lodge?.code;\r\n suiteDetail.roomType = reservation.roomType;\r\n }\r\n }\r\n return suiteDetail;\r\n};\r\n\r\n/**\r\n * Get the total room rate.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Total room rate of confirmed suite for the reservation.\r\n */\r\nexport const getTotalRoomRate = state => {\r\n return get(state, 'data.costSummary.subtotal') ?? get(state, 'data.rateInfo.totalRoomRate') ?? 0;\r\n};\r\n\r\n/**\r\n * Get the taxes amount.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Taxes amount for the reservation.\r\n */\r\nexport const getTaxesAmount = state => {\r\n return get(state, 'data.costSummary.taxesAndFees.TAX') ?? get(state, 'data.rateInfo.taxes');\r\n};\r\n\r\n/**\r\n * Get the taxes amount including cabanas.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Taxes amount for the reservation including cabanas.\r\n */\r\nexport const getTaxesAmountWithCabanas = state => {\r\n const taxesAmount = get(state, 'data.costSummary.taxesAndFees.TAX') ?? get(state, 'data.rateInfo.taxes');\r\n\r\n const cabanas = get(state, 'data.cabanas');\r\n let totalTaxesCabanas = 0;\r\n if (cabanas) {\r\n totalTaxesCabanas = cabanas\r\n .filter(c => c.status !== EReservationStatus.CANCELED)\r\n .map(c => c.totalTaxes)\r\n .reduce((total, roomRate) => {\r\n return total + roomRate;\r\n }, 0);\r\n }\r\n return taxesAmount + totalTaxesCabanas;\r\n};\r\n\r\n/**\r\n * Get the resort fee for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Resort fee for the reservation.\r\n */\r\nexport const getResortFee = state => {\r\n return get(state, 'data.costSummary.taxesAndFees.RESORT') ?? get(state, 'data.rateInfo.resortFee');\r\n};\r\n\r\n/**\r\n * Get the parking fee for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Parking fee for the reservation.\r\n */\r\nexport const getParkingFee = state => {\r\n return get(state, 'data.costSummary.taxesAndFees.PARKING') ?? get(state, 'data.rateInfo.parkingFee');\r\n};\r\n\r\n/**\r\n * Get the Sustainability fee for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Resort fee for the reservation.\r\n */\r\nexport const getSustainabilityFee = state => {\r\n return get(state, 'data.costSummary.taxesAndFees.SUSTAINABILITY') ?? get(state, 'data.rateInfo.sustainabilityFee');\r\n};\r\n\r\n/**\r\n * Get the summary total for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Summary total for the reservation.\r\n */\r\nexport const getSummaryTotal = state => {\r\n return get(state, 'data.costSummary.total') ?? get(state, 'data.rateInfo.total');\r\n};\r\n\r\n/**\r\n * Gets the summary total for the reservation including cabanas.\r\n * @param {Object} state reservationDetails entity store.\r\n * @returns {number} - Summary total for the reservation including cabanas.\r\n */\r\nexport const getSummaryTotalWithCabana = state => {\r\n const cabanas = get(state, 'data.cabanas');\r\n let totalCabanas = 0;\r\n if (cabanas) {\r\n totalCabanas = cabanas\r\n .filter(c => c.status !== EReservationStatus.CANCELED)\r\n .map(c => c.total)\r\n .reduce((total, totalCabanaWithTaxes) => {\r\n return total + totalCabanaWithTaxes;\r\n }, 0);\r\n }\r\n return getSummaryTotal(state) + totalCabanas;\r\n};\r\n\r\n/**\r\n * Get total room rate plus packages rate.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Total room rate plus packages.\r\n */\r\nexport const getTotalRoomRateAndPackages = state => {\r\n return get(state, 'data.rateInfo.totalRoomRateAndPackages', 0);\r\n};\r\n\r\n/**\r\n * Get the package total for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Total amount of the packages selected.\r\n */\r\nexport const getPackageTotal = state => {\r\n return getTotalRoomRateAndPackages(state) - getTotalRoomRate(state);\r\n};\r\n\r\n/**\r\n * Get the package total with cabanas for the reservation.\r\n * @param {Object} state reservationDetails entity store\r\n * @returns {number} Total sum of amounts for packages including cabanas\r\n */\r\nexport const getPackageTotalWithCabanas = state => {\r\n const cabanas = get(state, 'data.cabanas');\r\n let totalCabanas = 0;\r\n if (cabanas) {\r\n totalCabanas = cabanas\r\n .filter(c => c.status !== EReservationStatus.CANCELED)\r\n .map(c => c.totalRoomRate)\r\n .reduce((total, roomRate) => {\r\n return total + roomRate;\r\n }, 0);\r\n }\r\n return getPackageTotal(state) + totalCabanas;\r\n};\r\n\r\nexport const getCostSummarySuiteName = state => {\r\n return get(state, 'data.product.name');\r\n};\r\n\r\n/**\r\n * Get the deposit paid for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - deposit paid for the reservation.\r\n */\r\nexport const getDepositePaid = state => {\r\n const roomDeposit = get(state, 'data.costSummary.depositPaid')\r\n ? get(state, 'data.costSummary.depositPaid')\r\n : get(state, 'data.advancedDeposit', get(state, 'data.rateInfo.advancedDeposit', 0));\r\n const cabanaDeposit = get(state, 'data.cabanasDepositAmount') ? get(state, 'data.cabanasDepositAmount') : 0;\r\n return roomDeposit + cabanaDeposit;\r\n};\r\n\r\n/**\r\n * Get the room deposit paid for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - deposit paid for the reservation.\r\n */\r\nexport const getRoomDeposit = state => {\r\n const roomDeposit = get(state, 'data.advancedDeposit', get(state, 'data.rateInfo.advancedDeposit', 0));\r\n\r\n return get(state, 'data.costSummary.depositPaid') ? get(state, 'data.costSummary.depositPaid') : roomDeposit;\r\n};\r\n\r\n/**\r\n * Get the site for reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {string} Confirmed reservation site.\r\n */\r\nexport const getSite = state => {\r\n return get(state, 'data.lodge.code') ?? get(state, 'data.selection.site');\r\n};\r\n\r\n/**\r\n * Get packages added to the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {array.} List of packages added.\r\n */\r\nexport const getPackages = state => {\r\n const newAPI = get(state, 'data.addOns', []);\r\n const oldAPI = get(state, 'data.packages', []);\r\n return newAPI.length > 0 ? get(state, 'data.addOns', []) : oldAPI.length > 0 ? get(state, 'data.packages', []) : [];\r\n};\r\n\r\n/**\r\n * Get cabanas added in the same days of the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @returns {array.} List of cabanas added in the same days of the reservation.\r\n */\r\nexport const getCabanas = state => {\r\n const cabanasList =\r\n state?.data?.addOns && state.data.addOns.find(item => item.type === 'favorite')\r\n ? state.data.addOns.filter(item => item.type === 'favorite')\r\n : get(state, 'data.cabanas', []);\r\n return cabanasList || [];\r\n};\r\n\r\n/**\r\n * Get the display name for confirmed reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {string} Confirmed reservation display name.\r\n */\r\nexport const getDisplayName = state => {\r\n return get(state, 'data.lodge.name') ?? get(state, 'data.selection.siteDisplayName');\r\n};\r\n\r\n/**\r\n * Get the value of isLoading.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {boolean} True if we are fetching data.\r\n */\r\nexport const getIsLoading = state => get(state, 'isLoading');\r\n\r\n/**\r\n * Get the value of requestSuccess.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {boolean} True if we succesfully fetched data.\r\n */\r\nexport const getRequestSuccess = state => get(state, 'requestSuccess');\r\n\r\n/**\r\n * Get the error message.\r\n * @param {Object} state ReservationDetails entity store.\r\n * @return {string} Error message\r\n */\r\nexport const getError = state => get(state, 'errorMessage');\r\n\r\n/**\r\n * Get the checkout time selected for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {String} - String containing the checkout time.\r\n */\r\nexport const getCheckoutTime = state => {\r\n const reservation = get(state, 'data');\r\n let checkoutTime = CHECKOUT_TIMES.AM_11;\r\n if (reservation) {\r\n if (reservation?.addOns?.length > 0) {\r\n const lateCheckoutPkg = reservation.addOns.find(\r\n pkg => pkg.code.includes(LATE_CHECKOUT_PREFIXES.code) || pkg.code.includes(HOWL_N_LEARN_CODE)\r\n );\r\n\r\n if (lateCheckoutPkg) {\r\n checkoutTime = CHECKOUT_TIMES.PM_2;\r\n }\r\n }\r\n const { packages } = reservation;\r\n if (packages) {\r\n const lateCheckoutPkg = packages.find(\r\n pkg => pkg.packageCode.includes(LATE_CHECKOUT_PREFIXES.code) || pkg.packageCode.includes(HOWL_N_LEARN_CODE)\r\n );\r\n\r\n if (lateCheckoutPkg) {\r\n checkoutTime = CHECKOUT_TIMES.PM_2;\r\n }\r\n }\r\n }\r\n return checkoutTime;\r\n};\r\n\r\n/**\r\n * Get the whole reservation object\r\n * @param {Object} state\r\n */\r\nexport const getReservation = state => {\r\n return get(state, 'data');\r\n};\r\n\r\n/**\r\n * Get the due at Checkin amount for the reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {number} - Due at Checkin amount for the reservation.\r\n */\r\nexport const getDueAtCheckinAmount = state => {\r\n return getSummaryTotal(state) - getDepositePaid(state);\r\n};\r\n\r\n/**\r\n * Get the due at Checking amount for the reservation including cabanas.\r\n * @param {Object} state reservationDetails entity store.\r\n * @returns {number} - Due at Checkin amount for the reservation.\r\n */\r\nexport const getDueAtCheckinAmountWithCabanas = state => {\r\n const totalWithCabana = Number(getSummaryTotalWithCabana(state).toFixed(2));\r\n const totalDepositPaid = Number(getDepositePaid(state).toFixed(2));\r\n return totalWithCabana - totalDepositPaid;\r\n};\r\n\r\n/**\r\n * Types of reservations.\r\n * @enum {string}\r\n */\r\nexport const RESERVATION_TYPES = {\r\n suite: 'suite',\r\n dayPass: 'dayPass',\r\n cabana: 'cabana'\r\n};\r\n/**\r\n * Returns if is a suite, day pass or a cabana reservation.\r\n * @param {Object} state Reservations store.\r\n * @return {String} Type of reservation\r\n */\r\nexport const getReservationType = state => {\r\n const roomType = getRoomType(state);\r\n const dayPassesCodes = Object.values(DAY_PASSES_TYPE);\r\n const cabanaCodes = Object.values(CABANAS_CODES_TYPES);\r\n if (dayPassesCodes.includes(roomType)) {\r\n return RESERVATION_TYPES.dayPass;\r\n } else if (cabanaCodes.includes(roomType)) {\r\n return RESERVATION_TYPES.cabana;\r\n }\r\n\r\n return RESERVATION_TYPES.suite;\r\n};\r\n\r\n/**\r\n * Get the check-in details for reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {Object} EStandBy upgrade details.\r\n */\r\nexport const getCheckIn = state => get(state, 'data.checkIn');\r\n\r\n/**\r\n * Get the special request from reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {array.} List of special request added.\r\n */\r\nexport const getSpecialRequests = state => get(state, 'data.specialRequest');\r\n\r\n/**\r\n * Get the special request from reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {Object} Birth Day Celebration Special Request.\r\n */\r\nexport const getBirthDayCelebration = state => get(state, 'data.birthDayCelebration');\r\n\r\n/**\r\n * Get comments from reservation.\r\n * @param {Object} state reservationDetails entity store.\r\n * @return {array.} List of comments.\r\n */\r\nexport const getComments = state => get(state, 'data.comments');\r\n\r\n/**\r\n * Get Reservation's packages\r\n * @param {Object} state reservationDetails entity store\r\n * @return {array.} List of packages.\r\n */\r\nexport const getReservationPackages = state => {\r\n return get(state, 'data.packages') || [];\r\n};\r\n\r\nexport const getCabanasAsPackages = state => {\r\n // Check if this is cabana object is present.\r\n const cabanasEntity = get(state, 'data.cabanas', []);\r\n if (!cabanasEntity) {\r\n return;\r\n }\r\n\r\n const cabanasFiltered = cabanasEntity.filter(c => c.status !== EReservationStatus.CANCELED);\r\n const cabanas = sortBy(cabanasFiltered, item => GwDatesWrapper.format(item.insertedAt, DATE_FORMATS.numberFormat), [\r\n 'asc'\r\n ]);\r\n return cabanas.reduce((cabanasAcc, currentCabana, index) => {\r\n const cabanaToAdd = {\r\n description: currentCabana.roomDescription,\r\n shortDescription: currentCabana.roomDescription,\r\n endDate: currentCabana.arrival,\r\n startDate: currentCabana.arrival,\r\n packageAmount: currentCabana.totalRoomRate,\r\n packageCode: index === cabanas.length - 1 ? currentCabana.roomType : `${currentCabana.roomType}_${index}`,\r\n quantity: 1,\r\n tax: currentCabana.totalTaxes,\r\n totalAmount: currentCabana.total,\r\n unitAmount: currentCabana.totalRoomRate,\r\n isCabana: true,\r\n totalRoomRateAndPackages: currentCabana.totalRoomRateAndPackages\r\n };\r\n cabanasAcc.push(cabanaToAdd);\r\n return cabanasAcc;\r\n }, []);\r\n};\r\n\r\nexport const getIsDayPass = state => get(state, 'data.isDayPass');\r\n\r\nexport const getIsFullDayPass = state => {\r\n return get(state, 'data.product.code') || get(state, 'data.isFullDayPass');\r\n};\r\n\r\nexport const getSuppressRate = state => get(state, 'data.rateInfo.suppressRate');\r\n\r\nexport const getCabanaDeposit = state => {\r\n const cabanaDepositEntry = get(state, 'data.cabanasDepositAmount');\r\n\r\n return cabanaDepositEntry;\r\n};\r\n\r\nexport const getPointsDiscountApplied = state => get(state, 'data.rateInfo.totalPoints');\r\n\r\nexport const getOffersDiscountApplied = state => get(state, 'data.rateInfo.totalOffers');\r\n\r\nexport const getReservationAddress = state => {\r\n return state.data?.address || state.data?.payment.billingAddress || {};\r\n};\r\nexport const getCanAddGuestsFlag = state => {\r\n return state?.data?.canAddGuests;\r\n};\r\n\r\n/**\r\n * Get the number of adults and kids.\r\n * @param {Object} state Reservations store.\r\n * @return {number} Confirmed reservation number of adults and kids.\r\n */\r\nexport const getTotalBillAndNonBillGuest = state => {\r\n return getAdults(state) + getKids(state);\r\n};\r\n\r\nexport const getPackageErrorMessage = state => {\r\n return state.packageErrorMessageData;\r\n};\r\n\r\nexport const getAddGuestReservationObj = state => {\r\n return state.addGuestReservationSuccess;\r\n};\r\n\r\nexport const getAddGuestReservationErrorMessage = state => {\r\n return state.addGuestReservationErrorMessage;\r\n};\r\n\r\nexport const getRateType = state => {\r\n return state?.data?.rateType || '';\r\n};\r\n\r\nexport const getRoomUpgradeInfo = state => {\r\n return state?.data?.roomUpgrade;\r\n};\r\n\r\nexport const getTaxesAndFeesForReservation = state => {\r\n return state.data.taxesAndFees;\r\n};\r\n\r\nexport const getPrivateLodgingFee = state => {\r\n return state?.data?.costSummary?.taxesAndFees?.PRIVATE_LODGING || state?.data?.rateInfo?.privateLodgingFee;\r\n};\r\n\r\nexport const cmpDataSelector = state => {\r\n const isConfirmation = window.location.pathname.includes('confirmation');\r\n return isConfirmation ? state.entities.reservationDetails : state.entities.manageReservationDetails;\r\n};\r\n","import { objectIntersection } from './objectKeysManagementUtils';\r\n\r\nexport const LocalStorageKeys = {\r\n REDUX_LOCAL_STORAGE: 'state',\r\n RecentSearches: 'RECENT_SEARCHES',\r\n Itineraries: 'ITINERARIES', // TODO: Remove after local development, this is just for test purposes\r\n Ungated: 'UNGATED', // Flag to ungate deals pages\r\n InteractionsUserId: 'intUserId',\r\n SALE_TOKEN: 'saleToken',\r\n GET_SESSION_STORAGE: 'getSessionStorage',\r\n SESSION_STORAGE: 'sessionStorage',\r\n URL_LOCATION: 'urlLocation'\r\n};\r\n\r\nexport const SessionStorageKeys = {\r\n REFER_A_FRIEND: 'referFriend',\r\n ENDPOINT_TTL_KEY: 'endpointTTLData'\r\n};\r\n\r\n/**\r\n * @function\r\n * Populate the initial state for the storage. This will allow the live updates for the Redux's localStorage.\r\n * If the state has more properties than the initialState then the those remaining properties will be removed from the state.\r\n * Otherwise, if the initialState has more properties than the state, then those properties will be added to the state.\r\n * @param {Object} state\r\n * The state of the store. It may come from the localStorage.\r\n * @param {Object} initialState\r\n * The initial values of the state in the store.\r\n */\r\nexport function initializeState(state, initialState) {\r\n if (state !== undefined && state !== null) {\r\n // Remove the properties not present in initialState\r\n let objectIntersected = objectIntersection(state, initialState);\r\n // This will merge the initial object on the saved state.\r\n // The second object will overwrite the values, this way we\r\n // can get the saved state values\r\n state = { ...initialState, ...objectIntersected };\r\n } else {\r\n state = initialState;\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} key state name for the sessionStorage\r\n * @param {object} value value of the sessionStorage\r\n */\r\nexport function setNewSessionKey(key, value) {\r\n // get current key object\r\n const sessionData = sessionStorage.getItem(key);\r\n // verify if the key exists\r\n const sessionExists = !!sessionData;\r\n // flow for existing key\r\n if (sessionExists) {\r\n // get current key object\r\n const existingData = JSON.parse(sessionData);\r\n // update or create new session values\r\n const neTempObject = { ...existingData, ...value };\r\n sessionStorage.setItem(key, JSON.stringify(neTempObject));\r\n } else {\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} valueToSearch value to search for\r\n * @param {string} keyState state name\r\n * @returns\r\n */\r\nexport function getSpecificItem(valueToSearch, keyState) {\r\n const getData = sessionStorage.getItem(keyState);\r\n if (getData) {\r\n const getParsedData = JSON.parse(getData);\r\n return getParsedData[valueToSearch];\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function isReferAfriendSessionCreatedAlready() {\r\n let haveSessionAlready = true;\r\n\r\n const data = sessionStorage.getItem(SessionStorageKeys.REFER_A_FRIEND);\r\n if (data === null) {\r\n haveSessionAlready = false;\r\n }\r\n return haveSessionAlready;\r\n}\r\n\r\nexport function sessionStorage_transfer(event) {\r\n if (event.key === LocalStorageKeys.GET_SESSION_STORAGE) {\r\n // Some tab asked for the sessionStorage -> send it\r\n console.log('transfer');\r\n let sessionstotransfer = {};\r\n\r\n // Get session that can be transerred\r\n const getData = JSON.parse(sessionStorage.getItem(SessionStorageKeys.REFER_A_FRIEND));\r\n if (getData) {\r\n sessionstotransfer = getData;\r\n }\r\n\r\n // Set Local storage for transfers\r\n if (Object.keys(sessionstotransfer).length > 0) {\r\n localStorage.setItem(LocalStorageKeys.SESSION_STORAGE, JSON.stringify(sessionstotransfer));\r\n }\r\n } else if (event.key === LocalStorageKeys.SESSION_STORAGE && !isReferAfriendSessionCreatedAlready()) {\r\n // sessionStorage is empty -> fill it\r\n console.log('should rehydrate?', !isReferAfriendSessionCreatedAlready());\r\n // Get Session from Local\r\n const data = JSON.parse(localStorage.getItem(LocalStorageKeys.SESSION_STORAGE));\r\n // Remove the session on local\r\n localStorage.removeItem(LocalStorageKeys.SESSION_STORAGE);\r\n console.log(data);\r\n // Restore sessionStorage\r\n if (data) {\r\n sessionStorage.setItem(SessionStorageKeys.REFER_A_FRIEND, JSON.stringify(data));\r\n }\r\n }\r\n}\r\n","import get from 'lodash-es/get';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { GwDatesWrapper } from '../../../components/_internal_date_/gwDatesWrapper';\r\nimport { getLocation } from '../../../components/utilities/ResortLocations';\r\nimport {\r\n DATE_FORMATS,\r\n DAY_PASSES_ROOM_TYPE,\r\n EVENT_CATEGORIES,\r\n EVENT_PARAMS,\r\n GTM_EVENT,\r\n PRODUCT_SCOPES,\r\n RECOMMENDED_FOR_YOU\r\n} from '../../../utilities/constants';\r\nimport { getReservationCurrency } from '../../../utilities/reservationsUtils';\r\nimport { SessionStorageKeys, getSpecificItem } from '../../../utilities/storageUtils';\r\nimport { getPaymentDescription } from '../analytics/analyticsUtils';\r\nimport { getPackageCategory, getPackageQuantity, getPkgType, isRecommendedPackage } from './analyticsUtils';\r\n\r\n// Full enhanced E-Commerce Object\r\nexport const buildPurchaseEnhancedECommerceObject = (\r\n { reservation, products, revenue, tax, shipping, voyagerPointsDiscount, offersPointsDiscount, dayType, UUID },\r\n eventCategory = EVENT_CATEGORIES.GTM.transaction,\r\n productScope = PRODUCT_SCOPES.suiteCheckout\r\n) => {\r\n const uniquePackages = [...new Map(products.map(m => [m.id, m])).values()];\r\n uniquePackages.forEach(unique => {\r\n unique.dimension63 = getPaymentDescription(reservation);\r\n });\r\n return {\r\n event: eventCategory,\r\n resortLocation: getLocation(reservation.property).url, //custom dimension for resort location that we can easily filter EE events by,\r\n purchaseLocation: productScope, //custom dimension for transaction location\r\n ecommerce: {\r\n currencyCode: getReservationCurrency(reservation.selection.site),\r\n purchase: {\r\n actionField: {\r\n id: UUID ? UUID : uuidv4(),\r\n confirmationNumber: reservation.externalId ? reservation.externalId : reservation.id,\r\n affiliation: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n revenue: revenue,\r\n shipping: shipping,\r\n tax: tax,\r\n coupon: reservation.rateCode,\r\n voyagerPointsDiscount: voyagerPointsDiscount,\r\n offersPointsDiscount: offersPointsDiscount,\r\n SIP: dayType\r\n },\r\n products: uniquePackages\r\n }\r\n }\r\n };\r\n};\r\n\r\n// Enhanced E-Commerce experience for suite\r\nexport const buildSuitePurchaseEnhancedECommerceObject = (\r\n suite,\r\n reservation,\r\n productScope = PRODUCT_SCOPES.suiteCheckout,\r\n maxOccupancy,\r\n suiteCategory\r\n) => {\r\n const checkInDate = get(reservation, 'arrival', '');\r\n const checkoutDate = get(reservation, 'departure', '');\r\n\r\n return {\r\n name: reservation.roomDescription.split('-')[0].trim() || reservation.roomType,\r\n id: reservation.roomType,\r\n price: reservation.rateInfo.totalRoomRate,\r\n brand: 'great wolf',\r\n category: 'suites',\r\n variant: suiteCategory, // standard, themed, premium, condo, cabin\r\n quantity: 1,\r\n coupon: reservation.offerCode,\r\n dimension29: getLocation(reservation.property).url, // product scope dimension for resort\r\n dimension30: 'suites', // product scope dimension for category\r\n dimension31: reservation.selection.numberOfNights, // product scope dimension for number of nights\r\n dimension32: reservation.selection.numAdults, // product scope dimension for number of adults\r\n dimension33: reservation.selection.numChildren, // product scope dimension for number of kids\r\n dimension34: productScope, // product scope dimension for add to cart location (pre vs post transaction)\r\n dimension35: GwDatesWrapper.format(checkInDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: Number(maxOccupancy) || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: reservation?.children || [] // product scope dimension for Kids Ages\r\n };\r\n};\r\n\r\n// New enhances E-Commerce experience for packages\r\nexport const buildPackagesPurchaseEnhancedECommerceObject = (\r\n {\r\n addedPackagesCodes,\r\n packages,\r\n groupedAddedPackages,\r\n reservation,\r\n packagesContent,\r\n formatedOffers = [],\r\n maxOccupancy\r\n },\r\n productScope = PRODUCT_SCOPES.postPurchase\r\n) => {\r\n const checkInDate = get(reservation, 'arrival', '');\r\n const checkoutDate = get(reservation, 'departure', '');\r\n const addedPackagesFormat = addedPackagesCodes.reduce((acc, packageCode) => {\r\n const packagesByCode = packages.reduce((keysAcc, currentPackage) => {\r\n keysAcc[currentPackage.packageCode] = currentPackage;\r\n return keysAcc;\r\n }, {});\r\n\r\n const pkgType = getPkgType(packagesContent, packageCode);\r\n\r\n acc.push({\r\n name: packagesByCode[packageCode].title || packagesByCode[packageCode].description,\r\n id: packageCode,\r\n price: groupedAddedPackages[packageCode].reduce((revenueAcc, packageItem) => {\r\n return revenueAcc + packageItem.unitAmount;\r\n }, 0),\r\n brand: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n category: 'packages',\r\n variant: pkgType,\r\n quantity: packageCode.includes('PARKING')\r\n ? reservation.selection.numberOfNights\r\n : packagesByCode[packageCode].quantity,\r\n coupon: reservation.offerCode,\r\n dimension29: getLocation(reservation.property).url, //product scope dimension for resort\r\n dimension30: 'packages', //product scope dimension for category\r\n dimension31: reservation.selection.numberOfNights, //product scope dimension for number of nights\r\n dimension32: reservation.selection.numAdults, //product scope dimension for number of adults\r\n dimension33: reservation.selection.numChildren, //product scope dimension for number of kids\r\n dimension34: productScope, //product scope dimension for add to cart location (pre vs post transaction)\r\n dimension35: GwDatesWrapper.format(checkInDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: Number(maxOccupancy) || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: reservation.children || [] // product scope dimension for Kids Ages\r\n });\r\n const uniquePackages = [...new Map(acc.map(m => [m.id, m])).values()];\r\n return uniquePackages;\r\n }, []);\r\n\r\n if (formatedOffers.length > 0) {\r\n formatedOffers.forEach(offer => {\r\n addedPackagesFormat.push({\r\n name: offer.packageName,\r\n id: offer.packageCode,\r\n price: -offer.amount,\r\n brand: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n category: offer.category,\r\n variant: offer.packageCategory,\r\n quantity: offer.quantity,\r\n coupon: reservation.offerCode,\r\n dimension29: getLocation(reservation.property).url, //product scope dimension for resort\r\n dimension30: 'packages', //product scope dimension for category\r\n dimension31: reservation.selection.numberOfNights, //product scope dimension for number of nights\r\n dimension32: reservation.selection.numAdults, //product scope dimension for number of adults\r\n dimension33: reservation.selection.numChildren, //product scope dimension for number of kids\r\n dimension34: productScope, //product scope dimension for add to cart location (pre vs post transaction)\r\n dimension35: GwDatesWrapper.format(checkInDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default)\r\n });\r\n });\r\n\r\n return addedPackagesFormat;\r\n }\r\n\r\n return addedPackagesFormat;\r\n};\r\n\r\nexport const buildImpressionsEventObject = (resortLocation, eventProps, purchaseLocation) => ({\r\n event: PRODUCT_SCOPES.productImpressions,\r\n resortLocation: resortLocation,\r\n purchaseLocation: purchaseLocation || null,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n impressions: Array.isArray(eventProps) ? eventProps : [eventProps]\r\n }\r\n});\r\n\r\nexport const buildImpressionsDataObject = (\r\n kidsAges,\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkInDate,\r\n adultsCount,\r\n kidsCount,\r\n currentPosition,\r\n customPurchaseLocation = null\r\n) => ({\r\n name: suite.title,\r\n id: suite.suiteCode,\r\n price: suite.totalRate,\r\n brand: suite.suiteBrand,\r\n category: 'suites',\r\n variant: suite.suiteCategory,\r\n list: 'suites',\r\n position: currentPosition,\r\n dimension27: suite.flags && suite.flags[RECOMMENDED_FOR_YOU] ? 'recommended' : '',\r\n dimension28: '',\r\n dimension29: resortLocation,\r\n dimension30: 'suites',\r\n dimension31: GwDatesWrapper.diff(checkoutDate, checkInDate, 'days'),\r\n dimension32: adultsCount,\r\n dimension33: kidsCount,\r\n dimension34: customPurchaseLocation ? customPurchaseLocation : 'suite-checkout',\r\n dimension35: GwDatesWrapper.format(checkInDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: Number(suite?.selectedSuite?.maxOccupancy) || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: kidsAges || [] // product scope dimension for Kids Ages\r\n});\r\n\r\nexport const extraGuestPurchaseObj = (reservation, maxOccupancy, suiteCategory, amount, additionalGuests) => {\r\n const nights = GwDatesWrapper.diff(reservation?.departure, reservation?.arrival, 'days');\r\n\r\n return {\r\n name: reservation?.roomDescription.split('-')[0],\r\n id: reservation?.roomType,\r\n price: amount.toFixed(2),\r\n brand: 'great wolf',\r\n category: 'suites',\r\n variant: suiteCategory,\r\n quantity: 1,\r\n dimension27: 'recommended',\r\n dimension28: 'recommended',\r\n dimension29: reservation?.property,\r\n dimension30: 'suites',\r\n dimension31: nights.toString() + (nights > 1 || nights === 0 ? ' nights' : nights > 0 && ' night'),\r\n dimension32: !additionalGuests.adultsCount\r\n ? '0 adults'\r\n : additionalGuests.adultsCount.toString() +\r\n (additionalGuests.adultsCount > 1 ? ' adults' : additionalGuests.adultsCount === 1 && ' adult'),\r\n dimension33: !additionalGuests.childrenAges\r\n ? '0 kids'\r\n : additionalGuests.childrenAges.length.toString() +\r\n (additionalGuests.childrenAges.length > 1 ? ' kids' : additionalGuests.childrenAges.length === 1 && ' kid'),\r\n dimension34: 'modify reservation',\r\n dimension35: GwDatesWrapper.format(reservation?.departure, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(reservation?.arrival, DATE_FORMATS.default),\r\n dimension61: Number(maxOccupancy), // product scope dimension for Maximum Suite Occupancy\r\n dimension62: !additionalGuests.childrenAges ? [] : additionalGuests.childrenAges // product scope dimension for Kids Ages\r\n };\r\n};\r\n\r\nexport const buildImpressionsDataObjectPkgs = (\r\n pkg,\r\n resortLocation,\r\n checkoutDate,\r\n checkInDate,\r\n adultsCount,\r\n kidsCount,\r\n currentPosition,\r\n purchaseLocation\r\n) => {\r\n return {\r\n name: pkg.title,\r\n id: pkg.packageCode,\r\n price: pkg.amount,\r\n brand: 'great wolf',\r\n category: 'package',\r\n variant: pkg.packageType ? pkg.packageType[0]?.trim() : '',\r\n list: 'suites',\r\n position: currentPosition,\r\n dimension27: pkg.flags && pkg.flags[RECOMMENDED_FOR_YOU] ? 'recommended' : '',\r\n dimension28: '',\r\n dimension29: resortLocation,\r\n dimension30: 'suites',\r\n dimension31: GwDatesWrapper.diff(checkoutDate, checkInDate, 'days'),\r\n dimension32: adultsCount,\r\n dimension33: kidsCount,\r\n dimension34: purchaseLocation || 'suite-checkout',\r\n dimension35: GwDatesWrapper.format(checkInDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default)\r\n };\r\n};\r\n\r\nexport const getDayPassBaseObject = reservation => {\r\n return {\r\n city: reservation.address.city,\r\n region: reservation.address.stateProvince,\r\n item_code: reservation.roomType,\r\n item_group: 'WPF',\r\n room_type: DAY_PASSES_ROOM_TYPE[reservation.roomType] || '',\r\n room_name: reservation.selection.roomTypeDescription,\r\n value: reservation.rateInfo.totalRoomRate\r\n };\r\n};\r\n\r\nexport const getBaseSuiteObject = (reservation, locationDisplayName, locationState, suiteCategory) => {\r\n return {\r\n checkout_date: GwDatesWrapper.format(reservation.departure, DATE_FORMATS.default),\r\n num_children: reservation.selection.numChildrenOverTwo,\r\n num_infants: reservation.selection.numChildrenUnderTwo,\r\n children_ages: reservation.children,\r\n city: locationDisplayName,\r\n region: locationState,\r\n room_nights: reservation.selection.numberOfNights,\r\n promo_code: reservation.offerCode,\r\n room_type: suiteCategory,\r\n room_name: reservation.selection.roomTypeDescription.split(' - ')[0]\r\n };\r\n};\r\n\r\nexport const getEventBaseObject = (event, reservation, currencyCode) => {\r\n return {\r\n [EVENT_PARAMS.fbEventId]: uuidv4(),\r\n event,\r\n transaction_id: reservation.id,\r\n checkin_date: GwDatesWrapper.format(reservation.arrival, DATE_FORMATS.default),\r\n num_travelers: reservation.adults + reservation.children.length,\r\n num_adults: reservation.selection.numAdults,\r\n value: reservation.rateInfo.totalRoomRate,\r\n average_room_rate: (reservation.rateInfo.totalRoomRate / reservation.selection.numberOfNights).toFixed(2),\r\n currency: currencyCode,\r\n country: reservation.address.country\r\n };\r\n};\r\n\r\nexport const buildProductClickEnhancedECommerceObject = (\r\n kidsAges,\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n currentPosition,\r\n purchaseLocation\r\n) => {\r\n return {\r\n event: PRODUCT_SCOPES.productClick,\r\n resortLocation: resortLocation,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n click: {\r\n actionField: {\r\n list: 'suites'\r\n },\r\n products: [\r\n {\r\n ...buildProductEnhancedECommerce(\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n suite.avgNightlyRate,\r\n purchaseLocation\r\n ),\r\n position: currentPosition\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const buildAddToCartEnhancedEcommerceObject = (\r\n eventType,\r\n kidsAges,\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n currentPosition,\r\n purchaseLocation\r\n) => {\r\n return {\r\n event: eventType,\r\n resortLocation: resortLocation,\r\n purchaseLocation,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n [eventType === EVENT_CATEGORIES.GTM.addToCart ? 'add' : 'remove']: {\r\n actionField: {\r\n list: 'suites',\r\n position: currentPosition || '',\r\n coupon: suite.rateCode ?? ''\r\n },\r\n products: [\r\n {\r\n ...buildProductEnhancedECommerce(\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n suite.totalRate,\r\n purchaseLocation,\r\n kidsAges\r\n ),\r\n quantity: 1\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const buildSearchObject = (\r\n resortLocation,\r\n searchType,\r\n bonusDealValue,\r\n searchLocation,\r\n checkinDate,\r\n checkoutDate,\r\n adultsCount,\r\n kidsCount,\r\n kidAges,\r\n discountCode,\r\n residentClick\r\n) => {\r\n return {\r\n event: EVENT_CATEGORIES.GTM.search,\r\n resortLocation: resortLocation,\r\n searchType: searchType,\r\n bonus_deal_value: bonusDealValue,\r\n searchLocation: searchLocation,\r\n arrival_date: checkinDate,\r\n departure_date: checkoutDate,\r\n numberOfAdults: adultsCount,\r\n numberOfKids: kidsCount,\r\n kidAges: kidAges,\r\n discountCode: discountCode,\r\n NumNights: GwDatesWrapper.diff(checkoutDate, checkinDate, 'days'),\r\n residentClick: residentClick\r\n };\r\n};\r\n\r\nconst buildProductEnhancedECommerce = (\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n price,\r\n purchaseLocation,\r\n kidsAges\r\n) => {\r\n const nights = GwDatesWrapper.diff(checkoutDate, checkinDate, 'days');\r\n return {\r\n name: suite.title,\r\n id: suite.suiteCode,\r\n price: price,\r\n brand: 'great wolf',\r\n category: 'suites',\r\n variant: suite.suiteCategory,\r\n dimension27: suite?.flags && suite?.flags.includes(RECOMMENDED_FOR_YOU) ? 'recommended' : '',\r\n dimension28: '',\r\n dimension29: resortLocation,\r\n dimension30: 'suites',\r\n dimension31: nights,\r\n dimension32: adultsCount,\r\n dimension33: kidsCount,\r\n dimension34: purchaseLocation || 'suite-checkout',\r\n dimension35: GwDatesWrapper.format(checkinDate, DATE_FORMATS.default),\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: Number(suite?.maxOccupancy) || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: kidsAges || [], // product scope dimension for Kids Ages\r\n coupon: suite.rateCode ?? ''\r\n };\r\n};\r\n\r\nexport const getSignInEventObject = (action, label) => {\r\n if (!action || !label) return;\r\n return {\r\n event: GTM_EVENT.NAME.websiteVitals,\r\n category: EVENT_CATEGORIES.GTM.signIn,\r\n action: action,\r\n label: label\r\n };\r\n};\r\n\r\nexport const getSignUpEventObject = (action, label, isLeadGenSignUp) => {\r\n if (!action || !label) return;\r\n const eventObject = {\r\n event: GTM_EVENT.NAME.websiteVitals,\r\n category: EVENT_CATEGORIES.GTM.signUp,\r\n action: action,\r\n label: label\r\n };\r\n if (label === GTM_EVENT.LABEL.google || label === GTM_EVENT.LABEL.greatWolf)\r\n return {\r\n ...eventObject,\r\n sign_up_location: isLeadGenSignUp ? 'subscribe' : 'sign up'\r\n };\r\n else return eventObject;\r\n};\r\n\r\nexport const getLeadGenEventObject = (action, label) => {\r\n if (!action || !label) return;\r\n return {\r\n event: GTM_EVENT.NAME.websiteVitals,\r\n category: EVENT_CATEGORIES.GTM.leadgen,\r\n action: action,\r\n label: label\r\n };\r\n};\r\n\r\nexport const getPasswordChangeEventObject = (action, label) => {\r\n if (!action || !label) return;\r\n return {\r\n event: GTM_EVENT.NAME.websiteVitals,\r\n category: EVENT_CATEGORIES.GTM.passwordChange,\r\n action: action,\r\n label: label\r\n };\r\n};\r\n\r\nexport const getRaFSignUpEventObject = () => {\r\n if (sessionStorage.getItem(SessionStorageKeys.REFER_A_FRIEND)) {\r\n const MemberId = getSpecificItem('MemberId', 'referFriend');\r\n\r\n if (typeof MemberId === 'string' && MemberId) {\r\n const lst = MemberId.slice(-1);\r\n const action = +lst % 2 === 0 ? GTM_EVENT.ACTION.signUpAttemptRaF50 : GTM_EVENT.ACTION.signUpAttemptRaF25;\r\n return getSignUpEventObject(action, GTM_EVENT.LABEL.greatWolf);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Build enhanced ecommerce object for Checkout steps\r\n * @param {Object} suite Suite redux object\r\n * @param {Object} guests Guest redux object\r\n * @param {Object} dates Dates redux object\r\n * @param {Object} resortLocation Resort location redux object\r\n * @param {number} step Current step at checkout page\r\n * @param {boolean} isUserLoggedIn User status\r\n * @param {string} option Payment type\r\n * @returns Object\r\n */\r\nexport const buildCheckoutEventObject = (suite, guests, dates, resortLocation, step, isUserLoggedIn, option = '') => {\r\n const { adultsCount, kidsCount, kidsAges } = guests;\r\n const { checkinDateSelection: checkinDate, checkoutDateSelection: checkoutDate } = dates;\r\n return {\r\n event: EVENT_CATEGORIES.GTM.checkoutStep,\r\n resortLocation: resortLocation,\r\n loggedinStatus: isUserLoggedIn,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n checkout: {\r\n actionField: {\r\n step,\r\n option\r\n },\r\n products: [\r\n {\r\n ...buildProductEnhancedECommerce(\r\n suite,\r\n resortLocation,\r\n checkoutDate,\r\n checkinDate,\r\n adultsCount,\r\n kidsCount,\r\n suite.totalRate,\r\n undefined,\r\n kidsAges\r\n ),\r\n quantity: 1\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Build enhanced ecommerce object for add/removal cart\r\n * @param {string} eventType Event type one of: add-to-cart, remove-from-cart\r\n * @param {Object} eventPackage Object of the new or removed package\r\n * @param {Object} packagesTable Packages planPackages redux object -- packagesTableJson\r\n * @param {Object} guests Guest redux object\r\n * @param {Object} dates Dates redux object\r\n * @param {Object} resortLocation Resort location redux object\r\n * @param {string} purchaseLocation Location of the event on the Booking Flow\r\n * @returns Object\r\n */\r\nexport const buildPackageCartEventObject = (\r\n eventType,\r\n eventPackage,\r\n packagesTable,\r\n guests,\r\n dates,\r\n resortLocation,\r\n qtyDiff = null,\r\n purchaseLocation = 'standard purchase',\r\n currentPathLocation = '',\r\n suite = [],\r\n isCartOpenClose\r\n) => {\r\n const { adultsCount, kidsCount, kidsAges } = guests;\r\n const { checkinDateSelection: checkinDate, checkoutDateSelection: checkoutDate } = dates;\r\n const numberOfNights = checkoutDate !== undefined && GwDatesWrapper.diff(checkoutDate, checkinDate);\r\n\r\n // Get Products\r\n const products = eventPackage.map(pkg => {\r\n let { packageName, packageCode, amount, category, packageCategory, quantity } = pkg;\r\n // Check if is recommended\r\n const isRecommended = packagesTable && eventPackage ? isRecommendedPackage(eventPackage, packagesTable) : false;\r\n // Get package type\r\n packageCategory = packageCategory ? packageCategory : getPackageCategory(pkg, packagesTable)?.toLowerCase();\r\n\r\n // Get quanity -- for dining by package we should to perform one operation\r\n quantity = quantity\r\n ? quantity\r\n : qtyDiff\r\n ? qtyDiff\r\n : getPackageQuantity(pkg, packageCategory, guests, numberOfNights);\r\n\r\n category = category ? category : 'packages';\r\n\r\n return {\r\n name: packageName,\r\n id: packageCode,\r\n price: amount, // the nightly rate. what the user sees on the room card\r\n brand: 'great wolf', // static\r\n category: category, // static\r\n variant: packageCategory, // one of: attractions, family, birthday, dining, lco, flextrip\r\n quantity: quantity,\r\n dimension27: '', // empty string\r\n dimension28: isRecommended ? 'recommended' : '', // if the recommended package, otherwise empty string\r\n dimension29: resortLocation,\r\n dimension30: 'packages', // static\r\n dimension31: numberOfNights, // number of nights\r\n dimension32: adultsCount, // number of adults\r\n dimension33: kidsCount, // number of kids\r\n dimension34: isCartOpenClose\r\n ? 'standard purchase - cart'\r\n : purchaseLocation\r\n ? purchaseLocation\r\n : currentPathLocation, // static\r\n dimension35: GwDatesWrapper.format(checkinDate, DATE_FORMATS.default), // arrival date\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: Number(suite?.selectedSuite?.maxOccupancy) || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: kidsAges || [], // product scope dimension for Kids Ages\r\n coupon: suite?.selectedSuite?.rateCode ?? ''\r\n };\r\n });\r\n\r\n //const { packageCode, packageName, amount } = eventPackage;\r\n\r\n return {\r\n event: eventType, // one of: add-to-cart, remove-from-cart\r\n resortLocation: resortLocation,\r\n purchaseLocation: isCartOpenClose ? 'standard purchase - cart' : purchaseLocation,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n [eventType === EVENT_CATEGORIES.GTM.addToCart ? 'add' : 'remove']: {\r\n actionField: {\r\n list: 'packages',\r\n position: '',\r\n coupon: suite?.selectedSuite?.rateCode ?? ''\r\n },\r\n products: products\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const rateCalendarGA = (action, label) => {\r\n if (!action || !label) return;\r\n return {\r\n event: GTM_EVENT.NAME.websiteVitals,\r\n category: EVENT_CATEGORIES.GTM.rateCalendar,\r\n action: action,\r\n label: label\r\n };\r\n};\r\n\r\nexport const OFFERS_ACTIONS = {\r\n ADD: 'add',\r\n REMOVE: 'remove'\r\n};\r\n\r\nexport const offerEventBuilder = (action, offerInfo) => {\r\n return {\r\n event: `bonus_deal_click_${action}`,\r\n resortLocation: offerInfo.resortLocation, //custom dimension for resort location that we can easily filter EE events by\r\n bonus_deal_name: offerInfo.name, //ex. July Bonus,\r\n bonus_deal_value: offerInfo.value //ex. 50 points,\r\n };\r\n};\r\n\r\n/**\r\n * Build enhanced ecommerce object for reservation cancellation\r\n * @param {Object} eventProps Object with relevant data for event\r\n * @param {Object} resortLocation Resort location redux object\r\n * @param {string} cancellationData Data related to the cancellation response\r\n * @returns Object\r\n */\r\nexport const buildCancelReservationEventObject = (\r\n eventProps,\r\n resortLocation,\r\n cancellationData,\r\n purchaseLocation = 'standard purchase'\r\n) => {\r\n const {\r\n suiteName,\r\n suiteCode,\r\n suiteTotalPrice,\r\n reservationId,\r\n adultsCount,\r\n kidsCount,\r\n kidsAges,\r\n rateCode,\r\n maxOccupancy,\r\n checkinDate,\r\n checkoutDate,\r\n paymentType,\r\n packages,\r\n tax,\r\n resortFee,\r\n total\r\n } = eventProps;\r\n\r\n const numberOfNights = checkoutDate !== undefined && GwDatesWrapper.diff(checkoutDate, checkinDate);\r\n\r\n const { totalRefundAmount, cancelNumber, cancellationFeeAmount } = cancellationData;\r\n\r\n const productPackages = packages.map(pkg => ({\r\n name: pkg.description,\r\n id: pkg.packageCode,\r\n price: 0,\r\n brand: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n category: 'packages',\r\n variant: pkg.packageType,\r\n quantity: pkg.quantity,\r\n coupon: rateCode,\r\n dimension31: numberOfNights, //product scope dimension for number of nights\r\n dimension32: adultsCount, //product scope dimension for number of adults\r\n dimension33: kidsCount, //product scope dimension for number of kids\r\n dimension34: PRODUCT_SCOPES.standardPurchase, //product scope dimension for add to cart location (pre vs post transaction)\r\n dimension35: checkinDate,\r\n dimension36: checkoutDate,\r\n dimension63: paymentType,\r\n dimension68: -pkg.unitAmount\r\n }));\r\n\r\n const products = [\r\n {\r\n name: suiteName,\r\n id: suiteCode,\r\n price: suiteTotalPrice / numberOfNights, // the nightly rate. what the user sees on the room card\r\n brand: 'great wolf', // static\r\n category: 'suites', // static\r\n variant: 'standard', // one of: attractions, family, birthday, dining, lco, flextrip\r\n quantity: 1,\r\n coupon: rateCode ?? '',\r\n dimension31: numberOfNights, // number of nights\r\n dimension32: adultsCount, // number of adults\r\n dimension33: kidsCount, // number of kids\r\n dimension34: purchaseLocation, // static\r\n dimension35: GwDatesWrapper.format(checkinDate, DATE_FORMATS.default), // arrival date\r\n dimension36: GwDatesWrapper.format(checkoutDate, DATE_FORMATS.default),\r\n dimension61: maxOccupancy || null, // product scope dimension for Maximum Suite Occupancy\r\n dimension62: kidsAges || [], // product scope dimension for Kids Ages\r\n dimension63: paymentType,\r\n dimension68: -suiteTotalPrice\r\n },\r\n ...productPackages\r\n ];\r\n\r\n const refundAmount = total ? -Number(total) : 0;\r\n\r\n return {\r\n event: 'refund', // one of: add-to-cart, remove-from-cart\r\n resortLocation: resortLocation,\r\n purchaseLocation: purchaseLocation,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n refund: {\r\n actionField: {\r\n id: uuidv4(),\r\n affiliation: 'great wolf',\r\n revenue: totalRefundAmount,\r\n shipping: -resortFee,\r\n tax: -tax,\r\n coupon: rateCode,\r\n voyagerPointsDiscount: 0,\r\n offersPointsDiscount: 0,\r\n SIP: 2,\r\n confirmationNumber: reservationId,\r\n refundAmount,\r\n cancellationFee: cancellationFeeAmount,\r\n cancellationConfimationNumber: cancelNumber\r\n },\r\n products: products\r\n }\r\n }\r\n };\r\n};\r\n\r\nconst voyagersAnalyticsSignInEventDefaultParameters = {\r\n sign_in_location: 'voyager_booking_flow',\r\n sign_in_group: '',\r\n military_status: ''\r\n};\r\n\r\nconst getSignInVoyagersEventObject = (eventName, label) => {\r\n if (!label) return;\r\n return {\r\n ...voyagersAnalyticsSignInEventDefaultParameters,\r\n event: eventName,\r\n label\r\n };\r\n};\r\n\r\nconst getSignUpVoyagersEventObject = (eventName, label) => {\r\n if (!label) return;\r\n return {\r\n sign_up_location: 'voyager_booking_flow',\r\n event: eventName,\r\n label\r\n };\r\n};\r\n\r\nexport const getSignInAttemptEventObjectVoyagers = label =>\r\n getSignInVoyagersEventObject(GTM_EVENT.NAME.signInAttempt, label);\r\nexport const getSignInSuccessEventObjectVoyagers = label =>\r\n getSignInVoyagersEventObject(GTM_EVENT.NAME.signInSuccess, label);\r\nexport const getSignInFailureEventObjectVoyagers = label =>\r\n getSignInVoyagersEventObject(GTM_EVENT.NAME.signInFailure, label);\r\nexport const getSignUpAttemptEventObjectVoyagers = label =>\r\n getSignUpVoyagersEventObject(GTM_EVENT.NAME.signUpAttempt, label);\r\nexport const getSignUpSuccessEventObjectVoyagers = label =>\r\n getSignUpVoyagersEventObject(GTM_EVENT.NAME.signUpSuccess, label);\r\nexport const getSignUpFailureEventObjectVoyagers = label =>\r\n getSignUpVoyagersEventObject(GTM_EVENT.NAME.signUpFailure, label);\r\n\r\nexport const getBirthdayPartySearchObject = (\r\n resortLocation,\r\n searchLocation,\r\n partyDate,\r\n partyAdults,\r\n partyKids,\r\n partyInfant,\r\n partySpectators,\r\n partyTime\r\n) => {\r\n return {\r\n event: EVENT_CATEGORIES.GTM.search,\r\n resortLocation,\r\n searchType: 'birthday',\r\n bonus_deal_value: '',\r\n searchLocation: `${searchLocation} - birthday party`,\r\n arrival_date: partyDate,\r\n departure_date: '',\r\n numberOfAdults: partyAdults,\r\n numberOfKids: partyKids,\r\n numberOfInfants: partyInfant,\r\n numberOfSpectators: partySpectators,\r\n kidAges: [],\r\n discountCode: '',\r\n NumNights: '',\r\n party_time: partyTime\r\n };\r\n};\r\n\r\nconst getBirthdayPartyProductObject = (\r\n resortLocation,\r\n searchLocation,\r\n partyDate,\r\n partyAdults,\r\n partyKids,\r\n partyInfant,\r\n partySpectators,\r\n partyTime,\r\n productTitle,\r\n productId,\r\n productPrice\r\n) => {\r\n return {\r\n name: productTitle,\r\n id: productId,\r\n price: productPrice,\r\n brand: 'great wolf',\r\n category: 'birthday party',\r\n variant: 'birthday party',\r\n quantity: 1,\r\n dimension27: '',\r\n dimension28: '',\r\n dimension29: resortLocation, //product scope dimension for resort\r\n dimension30: 'packages', //product scope dimension for item category\r\n dimension31: 1, //product scope dimension for number of nights\r\n dimension32: partyAdults, //product scope dimension for number of adults\r\n dimension33: partyKids, //product scope dimension for number of kids\r\n dimension34: `${searchLocation} - birthday party`, //product scope dimension for add location\r\n dimension35: partyDate, //party date\r\n dimension36: '',\r\n dimension61: '', //product scope dimension for max occupancy\r\n dimension62: [], //product scope dimension for kids ages\r\n coupon: '',\r\n dimension64: partyInfant, // product scope dimension for number of infants\r\n dimension65: partySpectators, // product scope dimension for number of spectators\r\n dimension67: partyTime // product scope dimension for party time\"\r\n };\r\n};\r\n\r\nexport const getBirthdayPartySelectObject = (\r\n eventType,\r\n resortLocation,\r\n searchLocation,\r\n partyDate,\r\n partyAdults,\r\n partyKids,\r\n partyInfant,\r\n partySpectators,\r\n partyTime,\r\n productTitle,\r\n productId,\r\n productPrice\r\n) => {\r\n return {\r\n event: eventType,\r\n resortLocation,\r\n purchaseLocation: `${searchLocation} - birthday party`,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n [eventType === EVENT_CATEGORIES.GTM.addToCart ? 'add' : 'remove']: {\r\n actionField: {\r\n list: 'packages',\r\n position: '',\r\n coupon: ''\r\n },\r\n products: [\r\n getBirthdayPartyProductObject(\r\n resortLocation,\r\n searchLocation,\r\n partyDate,\r\n partyAdults,\r\n partyKids,\r\n partyInfant,\r\n partySpectators,\r\n partyTime,\r\n productTitle,\r\n productId,\r\n productPrice\r\n )\r\n ]\r\n }\r\n }\r\n };\r\n};\r\n","const internalDataLayer = (event, data) => {\r\n if (!window.dataLayer) {\r\n window.dataLayer = [];\r\n console.warn('Data Layer not found, creating instance...');\r\n }\r\n\r\n return window.dataLayer[event](data);\r\n};\r\n\r\nexport const pushEvent = data => {\r\n if (!data) return;\r\n internalDataLayer('push', data);\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n fontSize,\r\n space,\r\n color,\r\n style,\r\n border,\r\n borderTop,\r\n borderBottom,\r\n fontWeight,\r\n background,\r\n flex,\r\n letterSpacing,\r\n width\r\n} from 'styled-system';\r\nimport theme, { fontFamily } from './themes/theme';\r\n\r\nexport const capitalize = props =>\r\n props.capitalize\r\n ? css`\r\n text-transform: capitalize;\r\n `\r\n : null;\r\nexport const caps = props =>\r\n props.caps\r\n ? css`\r\n text-transform: uppercase;\r\n `\r\n : null;\r\n\r\nexport const toLower = props =>\r\n props.toLower\r\n ? css`\r\n text-transform: lowercase;\r\n `\r\n : null;\r\n\r\nexport const strikeThrough = props =>\r\n props.strikeThrough\r\n ? css`\r\n text-decoration: line-through;\r\n `\r\n : null;\r\n\r\nexport const underline = props =>\r\n props.underline\r\n ? css`\r\n text-decoration: underline;\r\n `\r\n : null;\r\n\r\nexport const regular = props => (props.regular ? { fontWeight: props.theme.regular } : null);\r\n\r\nexport const italic = props => (props.italic ? { fontStyle: 'italic' } : null);\r\n\r\nconst textAlign = style({\r\n // React prop name\r\n prop: 'textAlign',\r\n // The corresponding CSS property (defaults to prop argument)\r\n cssProperty: 'text-align'\r\n});\r\nconst lineHeight = style({\r\n // React prop name\r\n prop: 'lineHeight',\r\n // The corresponding CSS property (defaults to prop argument)\r\n cssProperty: 'line-height'\r\n});\r\n\r\nconst whiteSpace = style({\r\n // React prop name\r\n prop: 'whiteSpace',\r\n // The corresponding CSS property (defaults to prop argument)\r\n cssProperty: 'white-space'\r\n});\r\n\r\nconst display = style({\r\n // React prop name\r\n prop: 'display',\r\n // The corresponding CSS property (defaults to prop argument)\r\n cssProperty: 'display'\r\n});\r\n\r\nconst Text = styled.div`\r\n${border} ${borderTop} ${borderBottom} ${strikeThrough} ${italic} ${underline} ${fontSize} ${fontFamily}\r\n${space} ${color} ${caps} ${toLower} ${fontWeight} ${textAlign} ${lineHeight} ${capitalize}\r\n${background} ${flex} ${letterSpacing} ${whiteSpace} ${display} ${width};\r\n`;\r\n\r\nText.displayName = 'Text';\r\n\r\nconst numberStringOrArray = PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]);\r\n\r\nText.propTypes = {\r\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]),\r\n lineHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n textAlign: PropTypes.oneOf(['left', 'center', 'right', 'justify']),\r\n caps: PropTypes.bool,\r\n toLower: PropTypes.bool,\r\n regular: PropTypes.bool,\r\n italic: PropTypes.bool,\r\n underline: PropTypes.bool,\r\n color: PropTypes.string,\r\n /** Margin */\r\n m: numberStringOrArray,\r\n mt: numberStringOrArray,\r\n mr: numberStringOrArray,\r\n mb: numberStringOrArray,\r\n ml: numberStringOrArray,\r\n mx: numberStringOrArray,\r\n my: numberStringOrArray,\r\n /** Padding */\r\n p: numberStringOrArray,\r\n pt: numberStringOrArray,\r\n pr: numberStringOrArray,\r\n pb: numberStringOrArray,\r\n pl: numberStringOrArray,\r\n px: numberStringOrArray,\r\n py: numberStringOrArray\r\n};\r\n\r\nText.Span = Text.withComponent('span');\r\nText.P = Text.withComponent('p');\r\nText.S = Text.withComponent('s');\r\n\r\nText.defaultProps = {\r\n theme: theme,\r\n fontFamily: theme.fontSecondary\r\n};\r\nText.P.defaultProps = {\r\n theme: theme,\r\n fontFamily: theme.fontSecondary\r\n};\r\nText.Span.defaultProps = {\r\n theme: theme,\r\n fontFamily: theme.fontSecondary\r\n};\r\nText.S.defaultProps = {\r\n theme: theme,\r\n fontFamily: theme.fontSecondary\r\n};\r\n\r\nexport default Text;\r\n","export const API_URLS = {\r\n REACT_APP_RESERVATION_SERVICE_ENDPOINT: '{DOMAIN_URL}/reservation/api/{VER}/Reservation',\r\n REACT_APP_AVAILABILITY_SERVICE_ENDPOINT: '{DOMAIN_URL}/availability/api/{VER}/Availability',\r\n REACT_APP_MOBILE_SERVICE_ENDPOINT: '{DOMAIN_URL}/mobile/api/{VER}/mobile',\r\n REACT_APP_PAYMENT_SERVICE_ENDPOINT: '{DOMAIN_URL}/payment/api/{VER}/payment',\r\n REACT_APP_RECENT_SEARCHES_SERVICE_ENDPOINT: '{DOMAIN_URL}/recentsearches/api/{VER}/ows',\r\n REACT_APP_PRICING_SERVICE_ENDPOINT: '{DOMAIN_URL}/pricing/api/{VER}/PricingApi',\r\n REACT_APP_USER_SERVICE_ENDPOINT: '{DOMAIN_URL}/user/api/{VER}',\r\n REACT_APP_SIP_RATE_SERVICE_ENDPOINT: '{DOMAIN_URL}/availability/api/{VER}/Rate',\r\n REACT_APP_ITEM_SERVICE_ENDPOINT: '{DOMAIN_URL}/availability/api/{VER}/Item',\r\n REACT_APP_LODGE_SERVICE_ENDPOINT: '{DOMAIN_URL}/lodge-info/{VER}',\r\n REACT_APP_CONCIERGE__ENDPOINT: '{DOMAIN_URL}/concierge/{VER}',\r\n REACT_APP_ROOM_BOOKING_ENDPOINT: '{DOMAIN_URL}/room-booking/{VER}/lodges',\r\n REACT_APP_TRAILHEAD_BOOKING_SERVICE_ENDPOINT: '{DOMAIN_URL}/booking/',\r\n REACT_APP_USERACCOUNT_ENDPOINT_TIOGA: '{DOMAIN_URL}/user-account/{VER}/user',\r\n REACT_APP_MANAGE_BOOKING_ENDPOINT: '{DOMAIN_URL}/manage-booking/{VER}',\r\n REACT_APP_BIRTHDAY_BOOKING_ENDPOINT: '{DOMAIN_URL}/birthday-booking/{VER}/lodges'\r\n};\r\n\r\nconst DYNAMIC_API_URL = 'https://<>.api.greatwolf.com';\r\nconst apiDomainURL = sessionStorage.getItem('apiDomain');\r\nconst regex = /^[a-zA-Z0-9]+$/;\r\n\r\nconst setDynamicUrl = () => {\r\n const dynamicURL = DYNAMIC_API_URL.replace('<>', apiDomainURL);\r\n window.document.body.style.border = '50px solid #0000FF';\r\n return dynamicURL;\r\n};\r\nexport const getApiUrl = (url, version, tioga) => {\r\n const envUrl =\r\n apiDomainURL && regex.test(apiDomainURL)\r\n ? setDynamicUrl()\r\n : tioga\r\n ? process.env.REACT_APP_GWR_API_DOMAIN_TIOGA\r\n : process.env.REACT_APP_GWR_API_DOMAIN;\r\n const formatedUrl = url.replace('{DOMAIN_URL}', envUrl).replace('{VER}', version);\r\n const apiUrl = formatedUrl;\r\n return apiUrl;\r\n};\r\n\r\nexport const getGraphQLUrl = () => {\r\n return process.env.REACT_APP_GRAPHQL_GREATWOLF_ENDPOINT;\r\n};\r\n\r\nexport const getTrailheadUrl = () => {\r\n return process.env.REACT_APP_GWR_API_DOMAIN_TRAILHEAD;\r\n};\r\nexport const getGeolocationUrl = () => {\r\n return process.env.REACT_APP_GEOLOCATION_GREATWOLF_ENDPOINT;\r\n};\r\n","import styled, { css } from 'styled-components';\r\n\r\nimport { Absolute, Box, Flex, Text } from '../../../../ui-kit';\r\nimport theme from '../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../Content';\r\n\r\nexport const HeaderTextMobile = styled(Text)`\r\n font-size: ${theme.fontSizes[1]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n margin-right: 12px;\r\n`;\r\n\r\nexport const HeaderTextTotalContainer = styled(Flex)`\r\n gap: ${theme.space[2]}px;\r\n align-items: center;\r\n`;\r\n\r\nexport const HeaderTextTotalMobile = styled(Text)`\r\n font-size: ${theme.fontSizes[1]}px;\r\n font-weight: ${theme.fontWeights.bold};\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const HeaderTextSubtotal = styled(Text)`\r\n font-size: ${theme.fontSizes[9]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n`;\r\n\r\nexport const HeaderTextDesktop = styled(Text)`\r\n font-size: ${theme.fontSizes[1]}px;\r\n font-weight: ${theme.fontWeights.bold};\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const OffersContainer = styled.div`\r\n background-color: ${theme.colors.springGreen[10]};\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n padding: 24px 16px;\r\n margin: 0;\r\n width: calc(100% + 16px);\r\n `;\r\n } else {\r\n return css`\r\n padding: 0 16px 24px;\r\n margin: 0 -16px -24px;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const OfferImageContainer = styled(Box)`\r\n width: 16px;\r\n height: 16px;\r\n & > img {\r\n width: 16px;\r\n height: 16px;\r\n vertical-align: unset !important;\r\n }\r\n`;\r\n\r\nexport const CustomSummaryItemTitle = styled(SummaryContent.Item)`\r\n margin-bottom: 24px;\r\n`;\r\n\r\nexport const CustomSummaryItemOffer = styled(Box)`\r\n & > div {\r\n margin-bottom: 24px;\r\n margin-top: 0px;\r\n & > div {\r\n margin: 0;\r\n }\r\n }\r\n & > div:last-child {\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nexport const PointsContainer = styled.div`\r\n background-color: ${theme.colors.springGreen[10]};\r\n\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n position: relative;\r\n padding: 24px 16px;\r\n margin: 0;\r\n width: calc(100% + 16px);\r\n ::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0 auto;\r\n width: calc(100% - 32px);\r\n height: 1px;\r\n background-color: ${theme.colors.snowMountainGrey[100]};\r\n }\r\n `;\r\n } else {\r\n return css`\r\n padding: 0 16px 24px;\r\n margin: 0 -16px -24px;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\n/**\r\n * CART STYLES\r\n */\r\n\r\n// Cart Logo\r\nexport const CartLogoContainer = styled(Box)`\r\n position: relative;\r\n margin: 0 auto;\r\n cursor: pointer;\r\n max-width: 24px;\r\n max-height: 24px;\r\n\r\n ${theme.mediaQueries.md} {\r\n ${({ overlayVisible }) => {\r\n if (overlayVisible) {\r\n return css`\r\n ::after {\r\n content: '';\r\n position: absolute;\r\n border-style: solid;\r\n border-width: 0 12px 8px;\r\n border-color: ${theme.colors.kiddiePoolBlue[20]} transparent;\r\n display: block;\r\n width: 0;\r\n z-index: 451;\r\n bottom: 0;\r\n left: 6px;\r\n bottom: -39px;\r\n }\r\n `;\r\n }\r\n }}\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n max-width: 32px;\r\n max-height: 32px;\r\n }\r\n`;\r\n\r\nexport const CartMobileSubtotalTopArrow = styled(Absolute)`\r\n top: ${({ arrowPosition }) => arrowPosition + 'px'};\r\n right: 10px;\r\n width: 10px;\r\n height: 10px;\r\n transform: rotate(45deg);\r\n background: ${theme.colors.kiddiePoolBlue[20]};\r\n z-indez: 0;\r\n`;\r\n\r\nexport const CartBubleTopArrow = styled(Absolute)`\r\n top: -5px;\r\n right: 38px;\r\n width: 10px;\r\n height: 10px;\r\n transform: rotate(45deg);\r\n background: ${theme.colors.kiddiePoolBlue[20]};\r\n z-indez: 0;\r\n`;\r\n\r\nexport const CartBubble = styled(Absolute)`\r\n display: flex;\r\n align-items: center;\r\n top: 40px;\r\n right: -30px;\r\n min-width: 146px;\r\n min-height: 36px;\r\n padding: 8px 16px;\r\n background: ${theme.colors.kiddiePoolBlue[20]};\r\n border-radius: 24px;\r\n font-weight: ${theme.fontWeights.medium};\r\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.05);\r\n\r\n span {\r\n position: relative;\r\n z-index: 1;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n font-size: ${theme.fontSizes[7]}px;\r\n line-height: 18px;\r\n font-weight: ${theme.fontWeights.bold};\r\n }\r\n label {\r\n display: flex;\r\n gap: 12px;\r\n position: relative;\r\n line-height: 20px;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n font-size: ${theme.fontSizes[7]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n z-index: 1;\r\n }\r\n`;\r\n\r\nexport const CartLogoImg = styled.img`\r\n width: 24px;\r\n height: 24px;\r\n\r\n @media (min-width: 1024px) {\r\n width: 32px;\r\n height: 32px;\r\n }\r\n`;\r\n\r\nexport const CartLogoWithAnimation = styled(Absolute)`\r\n width: 14px;\r\n height: 14px;\r\n top: -2px;\r\n right: -4px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n & > div {\r\n position: absolute;\r\n }\r\n\r\n ${({ showAnimation }) => {\r\n if (showAnimation) {\r\n return css`\r\n top: -17.5px;\r\n right: -19.5px;\r\n width: 45px;\r\n height: 45px;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const CartLogoCounter = styled(Box)`\r\n width: 14px;\r\n height: 14px;\r\n\r\n border-radius: 50%;\r\n background: ${theme.colors.deepOrange[100]};\r\n`;\r\n\r\n// Cart Overlay\r\nexport const Overlay = styled.div`\r\n ${({ isCartVariation, overlayVisible }) => {\r\n if (isCartVariation)\r\n return css`\r\n position: fixed;\r\n width: 100vw;\r\n height: 100vh;\r\n background-color: transparent;\r\n left: 0;\r\n top: 0;\r\n ${'' /* Booking widget is 300 zIndex */}\r\n z-index: 450;\r\n ${overlayVisible\r\n ? css`\r\n display: block;\r\n `\r\n : css`\r\n display: none;\r\n `}\r\n `;\r\n }}\r\n`;\r\n\r\nexport const OverlayContainer = styled.div`\r\n ${({ isCartVariation, overlayVisible, isDevelopment }) => {\r\n if (isCartVariation)\r\n return css`\r\n ${'' /* Booking widget is 300 zIndex */}\r\n z-index: 450;\r\n position: fixed;\r\n right: 0;\r\n margin-top: 8px;\r\n width: 100%;\r\n ${isDevelopment ? 'height: calc(100% - 80px);' : 'height: calc(100% - 64px);'}\r\n \r\n background-color: ${theme.colors.pureWhite[0]};\r\n border-top: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n\r\n ${theme.mediaQueries.md} {\r\n border-radius: 24px;\r\n position: absolute;\r\n height: 100%;\r\n width: 398px;\r\n height: fit-content;\r\n max-height: calc(100vh - 64px);\r\n border: 2px solid ${theme.colors.kiddiePoolBlue[20]};\r\n margin-top: 38px;\r\n box-shadow: 0px 4px 18px 5px rgba(0, 0, 0, 0.07);\r\n right: -35px;\r\n ${({ isCartEmpty }) =>\r\n isCartEmpty\r\n ? css`\r\n height: 499px;\r\n `\r\n : ``}\r\n\r\n \r\n }\r\n ${\r\n overlayVisible\r\n ? css`\r\n display: flex;\r\n `\r\n : css`\r\n display: none;\r\n `\r\n }\r\n\r\n @media (min-width: 640px) and (max-width: 1024px) {\r\n margin-top: 5px;\r\n }\r\n `;\r\n }}\r\n`;\r\n\r\nexport const StyledWave = styled(Box)`\r\n width: 100%;\r\n height: 24px;\r\n position: relative;\r\n overflow: hidden;\r\n background-image: url(\"data:image/svg+xml,%3Csvg width='380' height='24' viewBox='0 0 380 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 9.46479V0H380V9.52252C339.034 20.4459 235.736 35.7438 150.271 9.52252C94.587 -4.6034 37.1739 -1.90735e-06 0 9.46479Z' fill='%23CCF3F4'/%3E%3C/svg%3E\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n background-position-y: -2px;\r\n`;\r\n\r\nexport const ScrollContainer = styled(Box)`\r\n ${({ isCartVariation, isCartEmpty }) => {\r\n if (isCartVariation) {\r\n return css`\r\n flex-grow: 1;\r\n overflow-y: hidden;\r\n overflow-x: auto;\r\n padding-left: 0px;\r\n padding-right: 0px;\r\n margin-top: -24px;\r\n\r\n${isCartEmpty &&\r\n css`\r\n & > div {\r\n padding-right: 0px;\r\n }\r\n `}\r\n ${({ onPlanPage }) => {\r\n if (!onPlanPage) {\r\n return css`\r\n padding-bottom: 0;\r\n `;\r\n }\r\n }}\r\n\r\n ${theme.mediaQueries.md} {\r\n padding: 0px;\r\n ${({ onPlanPage }) => {\r\n if (!onPlanPage) {\r\n return css`\r\n padding-bottom: 0;\r\n `;\r\n }\r\n }};\r\n }\r\n `;\r\n } else {\r\n return css`\r\n & > div {\r\n overflow: unset;\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\n// Cart Overlay Empty Content\r\nexport const EmptyCartImageContainer = styled(Box)`\r\n width: 120px;\r\n height: 120px;\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n`;\r\n\r\n// Cart Cards\r\nexport const CartCardsContainer = styled(Box)`\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n display: flex;\r\n padding: 24px 0;\r\n border-bottom: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const CartCardTitle = styled(Text)`\r\n cursor: pointer;\r\n text-decoration: underline;\r\n`;\r\n\r\nexport const CartCardImageContainer = styled(Box)`\r\n width: 88px;\r\n height: 105px;\r\n border: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n border-radius: 4px;\r\n overflow: hidden;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n img {\r\n max-width: 73px;\r\n height: 88px;\r\n }\r\n\r\n ${({ cover }) => {\r\n return cover\r\n ? css`\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100%;\r\n max-height: 100%;\r\n object-fit: cover;\r\n }\r\n `\r\n : '';\r\n }}\r\n\r\n ${({ isDiningCredit }) => {\r\n return isDiningCredit\r\n ? css`\r\n img {\r\n max-width: 64px;\r\n max-height: 64px;\r\n }\r\n `\r\n : '';\r\n }}\r\n`;\r\n\r\nexport const CartPackageListItemContainer = styled(Box)`\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n flex-grow: 1;\r\n & > div {\r\n margin-top: 0px;\r\n margin-bottom: 0px;\r\n width: auto;\r\n justify-content: space-between;\r\n align-items: unset;\r\n gap: 0;\r\n height: 100%;\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\n// Cart Modal\r\nexport const RemoveModifyItemTitle = styled(Text)`\r\n display: inline-block;\r\n`;\r\n\r\nexport const CartModalButtonContainer = styled(Flex)`\r\n position: relative;\r\n ::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -16px;\r\n width: calc(100% + 32px);\r\n height: 1px;\r\n background-color: ${theme.colors.snowMountainGrey[100]};\r\n }\r\n\r\n ${theme.mediaQueries.md} {\r\n ::before {\r\n content: none;\r\n }\r\n }\r\n`;\r\n\r\nexport const CartModalButtonsContainer = styled(Flex)`\r\n box-shadow: 0px -4px 12px 0px rgba(0, 0, 0, 0.08);\r\n\r\n ${theme.mediaQueries.md} {\r\n border-top: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n justify-content: end;\r\n }\r\n`;\r\n\r\nexport const TotalSavingsContainer = styled(Box)`\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n position: relative;\r\n padding: 24px 32px;\r\n margin: 0;\r\n width: calc(100% + 16px);\r\n background-color: ${theme.colors.snowMountainGrey[20]};\r\n & > div {\r\n margin: 0;\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const AddWaterPassesSummary = styled(Flex)`\r\n background-color: ${theme.colors.kiddiePoolBlue[10]};\r\n padding: 8px 12px;\r\n border-radius: 8px;\r\n column-gap: 10px;\r\n`;\r\n\r\nexport const AddWaterPassesPageContainer = styled(Box)`\r\n display: none;\r\n background-color: ${theme.colors.kiddiePoolBlue[10]};\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n border: 1px solid ${theme.colors.informationBlue};\r\n margin: 0px 16px;\r\n margin-top: 33px;\r\n`;\r\n\r\nexport const DisableAddButtonText = styled(Box)`\r\n .disabled {\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n color: ${theme.colors.deepLakeBlue[50]};\r\n }\r\n`;\r\n\r\nexport const SummaryPackagesCardContainer = styled(Box)`\r\n ${({ isCartVariation }) => {\r\n if (isCartVariation) {\r\n return css`\r\n padding-left: 16px;\r\n `;\r\n }\r\n }}\r\n`;\r\n","// Reservation Details action types\r\n\r\nconst reservationDetailsActionTypes = {\r\n FETCH_RESERVATION_DETAILS_REQUEST: 'FETCH_RESERVATION_DETAILS_REQUEST',\r\n FETCH_RESERVATION_DETAILS_SUCCESS: 'FETCH_RESERVATION_DETAILS_SUCCESS',\r\n FETCH_RESERVATION_DETAILS_SUCCESS_END_LOADING: 'FETCH_RESERVATION_DETAILS_SUCCESS_END_LOADING',\r\n FETCH_RESERVATION_DETAILS_FAILURE: 'FETCH_RESERVATION_DETAILS_FAILURE',\r\n FETCH_RESERVATION_DETAILS_CLEAR: 'FETCH_RESERVATION_DETAILS_CLEAR',\r\n UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS: 'UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS',\r\n GTM_POST_RESERVATION_DETAILS_SALE_PACKAGE_ADDED: 'GTM_POST_RESERVATION_DETAILS_SALE_PACKAGE_ADDED',\r\n RESERVATION_DETAILS_CABANA_IS_LOADING: 'RESERVATION_DETAILS_CABANA_IS_LOADING',\r\n RESERVATION_DETAILS_CABANA_SUCCESS: 'RESERVATION_DETAILS_CABANA_SUCCESS',\r\n RESERVATION_DETAILS_CABANA_FAILURE: 'RESERVATION_DETAILS_CABANA_FAILURE',\r\n CLEAR_RESERVATION_DETAILS_CABANA_DETAILS: 'CLEAR_RESERVATION_DETAILS_CABANA_DETAILS',\r\n CLEAR_RESERVATION_DETAILS_DETAILS_ERROR: 'CLEAR_RESERVATION_DETAILS_DETAILS_ERROR',\r\n PACKAGE_RESERVATION_DETAILS_MESSAGE_ERROR: 'PACKAGE_RESERVATION_DETAILS_MESSAGE_ERROR',\r\n CLEAR_RESERVATION_DETAILS_PACKAGE_MESSAGE_ERROR: 'CLEAR_RESERVATION_DETAILS_PACKAGE_MESSAGE_ERROR',\r\n UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_SUCCESS:\r\n 'UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_SUCCESS',\r\n UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_CLEAR: 'UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_CLEAR',\r\n UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR: 'UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR',\r\n UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR_CLEAR:\r\n 'UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR_CLEAR'\r\n};\r\n\r\nexport default reservationDetailsActionTypes;\r\n","import ReactGA from 'react-ga';\r\nimport { getLocation } from '../components/utilities/ResortLocations';\r\nimport { buildCheckoutEventObject } from '../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport { pushEvent } from '../utilities/dataLayerUtils';\r\n// Auth\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport AuthClient from '../api/auth/AuthClient';\r\nimport { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport { getResortLocation } from '../store/componentStores/CurrentLodge/currentLodge.selectors';\r\nimport { store } from '../store/configureStore';\r\nimport { DATE_FORMATS } from './constants';\r\n\r\n/**\r\n * Categories used to trigger Google Analytics events.\r\n * @enum {string}\r\n */\r\nexport const EVENT_CATEGORIES = {\r\n arrivalDate: 'Search Arrival Date',\r\n departureDate: 'Search Departure Date',\r\n numberOfNights: 'Search Number of Nights',\r\n occupants: 'Search Occupants',\r\n promoCode: 'Search Promo',\r\n userType: 'User Type',\r\n dayPassInteraction: 'Day Pass Interaction',\r\n suiteInteraction: 'Suite Interaction',\r\n findYourReservation: 'Find Your Reservation',\r\n navigation: 'Navigation',\r\n leadGenerationForm: 'Lead Generation Form',\r\n specialRequests: 'Special Requests',\r\n celebration: 'Celebration',\r\n backendError: 'BE Error Messaging',\r\n searchDayPass: 'Search Day Pass',\r\n OWSError: 'OwsError',\r\n postPackageSale: 'Post Conversion - Package Sale',\r\n postPackageInteraction: 'Post Conversion - Package Interaction',\r\n optinModalUserClose: 'User closed the OPT-IN modal',\r\n optinModalUserErrorClose: 'Error closed the OPT-IN modal',\r\n bonusDealClicked: 'User clicked bonus deal'\r\n};\r\n\r\n/**\r\n * Event actions to push to Google analytics.\r\n * @enum {string}\r\n */\r\nexport const EVENT_ACTIONS = {\r\n login: 'Logged In - MGW',\r\n dayPassPageVisit: 'daypass_page_visit',\r\n dayPassPaymentVisit: 'daypass_page_payment_visit',\r\n dayPassSearchDate: 'daypass_page_searchdate',\r\n dayPassSearchGuests: 'daypass_page_searchguests',\r\n dayPassEnterPromoCode: 'daypass_page_enter_promocode',\r\n dayPassPageConfirmationVisit: 'daypass_page_confirmation_visit',\r\n dayPassEnterQualifyingId: 'daypass_page_enter_qualifying_id',\r\n dayPassCheckout: 'daypass_page_checkout',\r\n dayPassBooking: 'daypass_click_agree_buy',\r\n suiteCheckoutRoomRestrictedError: 'suite_page_checkout_room_restricted_error',\r\n suiteCheckoutRateUnavailableError: 'suite_page_checkout_rate_unavailable_error',\r\n suiteCheckoutRateCodeUnavailableError: 'suite_page_checkout_rate_code_unavailable_error',\r\n suiteCheckoutRateMismatchError: 'suite_page_checkout_rate_mismatch_error',\r\n suiteCheckoutPropertyRestrictedError: 'suite_page_checkout_property_restricted_error',\r\n suiteCheckoutRoomUnavailableError: 'suite_page_checkout_room_unavailable_error',\r\n suitePlanSearchInactiveOfferCodeError: 'suite_page_plan_search_inactive_offer_code_error',\r\n suitePlanSearchInvalidOfferCodeError: 'suite_page_plan_search_invalid_offer_code_error',\r\n suitePlanSearchMaximumAdvanceBookingError: 'suite_page_plan_search_maximum_advance_booking_error',\r\n suitePlanSearchMinimumAdvanceBookingError: 'suite_page_plan_search_minimum_advance_booking_error',\r\n suitePlanSearchMinStayError: 'suite_page_plan_search_min_stay_error',\r\n suitePlanSearchMaxStayError: 'suite_page_plan_search_max_stay_error',\r\n suitePlanSearchInactivePromoError: 'suite_page_plan_search_inactive_promo_error',\r\n suitePlanSearchRoomUnavailableError: 'suite_page_plan_search_room_unavailable_error',\r\n suitePlanSearchRoomRestrictedError: 'suite_page_plan_search_room_restricted_error',\r\n suitePlanSearchRateCodeNotAvailableError: 'suite_page_plan_search_rate_code_not_available_error',\r\n suitePlanSearchRatesMismatchError: 'suite_page_plan_search_rates_mismatch_error',\r\n findYourReservationConfirmationNumber: 'Entered Confirmation Number',\r\n findYourReservationLogin: 'Login Success',\r\n findYourReservationLoginFail: 'Login Fail',\r\n navMyProfile: 'nav_myprofile',\r\n navLogout: 'nav_logout',\r\n navFindMyRes: 'nav_findmyres',\r\n navSignIn: 'nav_signin',\r\n navSignUp: 'nav_signup',\r\n navRecentSearches: 'nav_recentsearches',\r\n modalClosed: 'modal_closed',\r\n specialRequestDropdownClick: 'Click on Special Request Dropdown',\r\n specialOccasionDropdownClick: 'Click on Special Occasion Dropdown',\r\n packageAdded: 'Added Package',\r\n packageRemoved: 'Removed Package',\r\n viewPackageDetails: 'View Details Toggled',\r\n optinModalUserClose: 'user_closed_optin_modal',\r\n optinModalUserErrorClose: 'error_closed_optin_modal',\r\n bonusDealClicked: 'Bonus Deal Clicked',\r\n viewItemList: 'view_item_list'\r\n};\r\n\r\nlet location = '';\r\n\r\nexport const setLocation = resortLocation => (location = getLocation(resortLocation).display);\r\n\r\nexport const logOWSError = message => {\r\n if (!message) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.OWSError,\r\n label: location,\r\n action: message\r\n });\r\n};\r\n\r\nexport const logOfferCodeError = message => {\r\n if (!message) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.backendError,\r\n label: location,\r\n action: message\r\n });\r\n};\r\n\r\nexport const logFindYourReservationLoginSuccess = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.findYourReservation,\r\n label: location,\r\n action: EVENT_ACTIONS.findYourReservationLogin\r\n });\r\n};\r\n\r\nexport const logFindYourReservationLoginFail = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.findYourReservation,\r\n label: location,\r\n action: EVENT_ACTIONS.findYourReservationLoginFail\r\n });\r\n};\r\n\r\nexport const logFindYourReservationConfNumber = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.findYourReservation,\r\n label: location,\r\n action: EVENT_ACTIONS.findYourReservationConfirmationNumber\r\n });\r\n};\r\n\r\nexport const logDayPassBooking = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassBooking\r\n });\r\n};\r\n\r\nexport const logDayPassCheckout = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassCheckout\r\n });\r\n};\r\n\r\nexport const logDayPassSearchPromoCode = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassEnterPromoCode\r\n });\r\n};\r\n\r\nexport const logDayPassSearchGuest = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassSearchGuests\r\n });\r\n};\r\n\r\nexport const logDayPassSearchDate = date => {\r\n logDayPassSearch(date);\r\n logDayPassOnDateChange();\r\n};\r\n\r\nexport const logDayPassSearch = date => {\r\n if (!date) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.searchDayPass,\r\n label: location,\r\n action: date\r\n });\r\n};\r\n\r\nexport const logDayPassOnDateChange = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassSearchDate\r\n });\r\n};\r\n\r\nexport const logDayPassPageVisit = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassPageVisit\r\n });\r\n};\r\n\r\nexport const logDayPassPaymentVisit = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassPaymentVisit\r\n });\r\n};\r\n\r\nexport const logDayPassConfirmationVisit = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.dayPassInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.dayPassPageConfirmationVisit\r\n });\r\n};\r\n\r\nexport const logSuiteCheckoutError = errorType => {\r\n if (!errorType) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.suiteInteraction,\r\n label: location,\r\n action: errorType\r\n });\r\n};\r\n\r\nexport const logSuitePlanSearchError = errorType => {\r\n if (!errorType) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.suiteInteraction,\r\n label: location,\r\n action: errorType\r\n });\r\n};\r\n\r\nexport const logLoggedInUser = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.userType,\r\n label: location,\r\n action: EVENT_ACTIONS.login\r\n });\r\n};\r\n\r\nexport const logBookingWidgetSearch = ({ arrivalDate, departureDate, numberOfNights, occupants, promoCode }) => {\r\n logSearchArrivalDate(arrivalDate);\r\n logSearchDepartureDate(departureDate);\r\n logSearchNumberOfNights(numberOfNights);\r\n logSearchOccupants(occupants);\r\n logSearchPromoCode(promoCode);\r\n};\r\n\r\nexport const logSearchArrivalDate = arrivalDate => {\r\n if (!arrivalDate) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.arrivalDate,\r\n label: location,\r\n action: arrivalDate\r\n });\r\n};\r\n\r\nexport const logSearchDepartureDate = departureDate => {\r\n if (!departureDate) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.departureDate,\r\n label: location,\r\n action: departureDate\r\n });\r\n};\r\n\r\nexport const logSearchNumberOfNights = numberOfNights => {\r\n if (!numberOfNights) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.numberOfNights,\r\n label: location,\r\n action: numberOfNights.toString()\r\n });\r\n};\r\n\r\nexport const logSearchOccupants = occupants => {\r\n if (!occupants) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.occupants,\r\n label: location,\r\n action: occupants.toString()\r\n });\r\n};\r\n\r\nexport const logSearchPromoCode = promoCode => {\r\n if (!promoCode) return;\r\n\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.promoCode,\r\n label: location,\r\n action: promoCode\r\n });\r\n};\r\n\r\nexport const logMyProfileNav = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navMyProfile,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logLogout = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navLogout,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logFindMyResNav = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navFindMyRes,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logSignInNav = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navSignIn,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logSignUpNav = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navSignUp,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logLeadGenModalClose = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.leadGenerationForm,\r\n label: location,\r\n action: EVENT_ACTIONS.modalClosed,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logRecentSearchesNav = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.navigation,\r\n label: location,\r\n action: EVENT_ACTIONS.navRecentSearches,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logSpecialRequestOrOccasionClick = (category, action) => {\r\n if (!category || !action) return;\r\n\r\n ReactGA.event({\r\n category: category,\r\n label: location,\r\n action: action,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logSpecialRequestsClick = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.specialRequests,\r\n label: location,\r\n action: EVENT_ACTIONS.specialRequestDropdownClick,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logSpecialOccasionClick = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.celebration,\r\n label: location,\r\n action: EVENT_ACTIONS.specialOccasionDropdownClick,\r\n nonInteraction: true\r\n });\r\n};\r\n\r\nexport const logPostPackageSale = packagesBeingAdded => {\r\n packagesBeingAdded &&\r\n packagesBeingAdded.forEach(pkg => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.postPackageSale,\r\n label: location,\r\n action: pkg.title,\r\n value: pkg.packageAmount * pkg.quantityAdded,\r\n nonInteraction: true\r\n });\r\n });\r\n};\r\n\r\nexport const logAddedPackagePostConversion = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.postPackageInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.packageAdded\r\n });\r\n};\r\n\r\nexport const logRemovedPackagePostConversion = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.postPackageInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.packageRemoved\r\n });\r\n};\r\n\r\nexport const logViewPackageDetailsPostConversion = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.postPackageInteraction,\r\n label: location,\r\n action: EVENT_ACTIONS.viewPackageDetails\r\n });\r\n};\r\n\r\n/**\r\n * Listener on checkout page diff events\r\n * @param {numbers} step, current step of the checkout page process\r\n * @param {string} option, selected payment type credit-card|paypal|affirm\r\n */\r\nexport const sendCheckoutStep = (step = 1, paymentMethod = '') => {\r\n try {\r\n const { suite, guests, dates, currentLodge } = store.getState();\r\n const resortLocation = getResortLocation(currentLodge);\r\n const selectedSuite = suite.selectedSuite;\r\n if (!selectedSuite || !guests || !dates) return;\r\n\r\n const authClient = new AuthClient();\r\n const isUserloggedIn = authClient.isLoggedIn();\r\n\r\n const checkoutEventObject = buildCheckoutEventObject(\r\n selectedSuite,\r\n guests,\r\n dates,\r\n resortLocation,\r\n step,\r\n isUserloggedIn,\r\n paymentMethod\r\n );\r\n pushEvent(checkoutEventObject);\r\n } catch (error) {}\r\n};\r\n\r\nexport const optinModalUserClose = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.optinModalUserClose,\r\n label: location,\r\n action: EVENT_ACTIONS.optinModalUserClose\r\n });\r\n};\r\n\r\nexport const optinModalUserErrorClose = () => {\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.optinModalUserErrorClose,\r\n label: location,\r\n action: EVENT_ACTIONS.optinModalUserErrorClose\r\n });\r\n};\r\n\r\n// LOYALTY EVENTS\r\nexport const logBonusDealApplied = () => {\r\n const { offer } = store.getState();\r\n offer.activeOffers &&\r\n offer.activeOffers.forEach(activeOffer =>\r\n ReactGA.event({\r\n category: EVENT_CATEGORIES.bonusDealClicked,\r\n label: activeOffer,\r\n action: EVENT_ACTIONS.bonusDealClicked\r\n })\r\n );\r\n};\r\n\r\n//Birthday events\r\n\r\nconst birthdayPartySuccessfulTransactionProduct = (\r\n name,\r\n id,\r\n total,\r\n resortLocation,\r\n partyAdults,\r\n partyKids,\r\n analyticsFormatDate,\r\n partyInfant,\r\n partySpectators,\r\n partyTime\r\n) => {\r\n return {\r\n name,\r\n id, // product/item ID\r\n price: total,\r\n brand: 'great wolf',\r\n category: 'birthday party',\r\n variant: 'birthday party',\r\n quantity: 1,\r\n coupon: '',\r\n dimension29: resortLocation,\r\n dimension30: 'suites',\r\n dimension31: 0,\r\n dimension32: partyAdults, // adults\r\n dimension33: partyKids, // kids\r\n dimension34: 'standard purchase – birthday party',\r\n dimension35: analyticsFormatDate,\r\n dimension36: '',\r\n dimension61: '', //max occupancy\r\n dimension62: [],\r\n dimension63: 'Credit Card', // payment type\r\n dimension64: partyInfant, // product scope dimension for number of infants​\r\n dimension65: partySpectators, // product scope dimension for number of spectators​\r\n dimension67: partyTime //product scope dimension for party time​\r\n };\r\n};\r\n\r\nexport const birthdayPartySuccessfulTransaction = birthdayFlowPayload => {\r\n const { reservationId, partyName, date, total } = birthdayFlowPayload;\r\n const { birthdayParty, currentLodge, packages } = store.getState();\r\n const analyticsFormatDate = GwDatesWrapper.format(date, DATE_FORMATS.default);\r\n const resortLocation = getResortLocation(currentLodge);\r\n\r\n const products = [];\r\n\r\n // Push party\r\n products.push(\r\n birthdayPartySuccessfulTransactionProduct(\r\n partyName,\r\n birthdayParty.selectedParty.priceDetails.packageCode,\r\n birthdayParty.selectedParty.priceDetails.amountTotal,\r\n resortLocation,\r\n birthdayParty.partyAdults,\r\n birthdayParty.partyKids,\r\n analyticsFormatDate,\r\n birthdayParty.partyInfant,\r\n birthdayParty.partySpectators,\r\n birthdayParty.partyTime\r\n )\r\n );\r\n\r\n // Push selected packages\r\n packages.selectedPackages.forEach(pkg => {\r\n products.push(\r\n birthdayPartySuccessfulTransactionProduct(\r\n pkg.title,\r\n pkg.packageCode,\r\n pkg.amount,\r\n resortLocation,\r\n birthdayParty.partyAdults,\r\n birthdayParty.partyKids,\r\n analyticsFormatDate,\r\n birthdayParty.partyInfant,\r\n birthdayParty.partySpectators,\r\n birthdayParty.partyTime\r\n )\r\n );\r\n });\r\n\r\n const extraPackages = packages.selectedPackages\r\n .filter(pkg => pkg.isExtra === true)\r\n .reduce((acc, curr) => {\r\n return acc + curr.tax;\r\n }, 0);\r\n\r\n const successfulTransactionEventObject = {\r\n event: 'transaction',\r\n resortLocation,\r\n purchaseLocation: 'standard purchase – birthday party',\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n purchase: {\r\n actionField: {\r\n id: uuidv4(), // random unique code​​\r\n affiliation: 'great wolf',\r\n revenue: total,\r\n shipping: '0.00',\r\n tax: birthdayParty.selectedParty.priceDetails.amountTax + extraPackages,\r\n coupon: '',\r\n voyagerPointsDiscount: 0,\r\n offersPointsDiscount: 0,\r\n SIP: 2,\r\n ConfirmationNo: reservationId, // Pass along APS/Opera confirmation no.​\r\n products\r\n }\r\n }\r\n }\r\n };\r\n pushEvent(successfulTransactionEventObject);\r\n};\r\n","import { isDevEnvironment } from './env';\r\n\r\n/* In here we store the Google Optimize global variables which are the parameters\r\n for the A/B testing\r\n*/\r\n\r\nexport const optimizelyChargePackagesAtCheckout = window.chargePackagesAtCheckout || false;\r\n\r\nexport const optimizelyPackageAemBestValue = window.packageAemBestValue || false;\r\n\r\n// the window variable is to be defined.\r\nexport const optimizelyAttractionPassesMessaging = window.optimizelyAttractionPassesMessaging || false;\r\n\r\nexport const optimizelyHideActivityTabs = window.optimizelyHideActivityTabs || false;\r\n\r\nexport const optimizelyHideFamilyTab = window.optimizelyHideFamilyTab || false;\r\n\r\nexport const optimizelyShowPaymentSignIn = window.optimizelyShowPaymentSignIn || false;\r\n\r\nexport const lateCheckoutAndEarlyAccessWaterParkModal = window.lateCheckoutAndEarlyAccessWaterParkModal || false;\r\n\r\nexport const optimizelyHideLoyalty = window.optimizelyHideLoyalty || false;\r\n\r\nexport const optimizelyDaypassPackagesSilver = window.optimizelyDaypassPackagesSilver || false;\r\n\r\nexport const optimizelyDaypassPackagesGold = window.optimizelyDaypassPackagesGold || false;\r\n\r\nexport const optimizelyDaypassPackagesPlatinum = window.optimizelyDaypassPackagesPlatinum || false;\r\n\r\nexport const optimizelyHideVoyagersBannerMobile = window.optimizelyHideVoyagersBannerMobile || false;\r\n\r\nexport const TESTS_DICTIONARY = {\r\n optimizelySuiteCardB: 'optimizelySuiteCardB',\r\n optimizelySuiteFilterIcons: 'optimizelySuiteFilterIcons',\r\n optimizelyPoconosTowerOption: 'optimizelyPoconosTowerOption',\r\n optimizelyAddParkingFee1: 'optimizelyAddParkingFee1',\r\n optimizelyAddParkingFee2: 'optimizelyAddParkingFee2',\r\n optimizelyAddParkingFee3: 'optimizelyAddParkingFee3',\r\n // COMMENTED BY HOTFIX 51917 UNTIL APRIL 1 2024\r\n // optimizelyBundleDealModalB: 'optimizelyBundleDealModalB',\r\n // optimizelyBundleDealModalC: 'optimizelyBundleDealModalC',\r\n optimizelyWaterParkPassesWarning: 'optimizelyWaterParkPassesWarning',\r\n optimizelyTwoImagesSuiteCard: 'optimizelyTwoImagesSuiteCard',\r\n optimizelyNewFilters: 'optimizelyNewFilters',\r\n optimizelyPaymentWarnings: 'optimizelyPaymentWarnings',\r\n optimizelyKeepPackagesOnSuiteChange: 'optimizelyKeepPackagesOnSuiteChange',\r\n optimizelySuperscriptStaySummarySuite: 'optimizelySuperscriptStaySummarySuite',\r\n optimizelyPromoClarity: 'optimizelyPromoClarity',\r\n optimizelyTruncateCentsVillas: 'optimizelyTruncateCentsVillas',\r\n optimizelyAttractionsPassesSelection: 'optimizelyAttractionsPassesSelection',\r\n optimizelyPasswordValidationStyle: 'optimizelyPasswordValidationStyle',\r\n optimizelyHierarchyFlip: 'optimizelyHierarchyFlip',\r\n optimizelyResortFeeInSuiteCard: 'optimizelyResortFeeInSuiteCard',\r\n optimizelyNewCardNonPoconos: 'optimizelyNewCardNonPoconos',\r\n optimizelySecureCheckout: 'optimizelySecureCheckout',\r\n optimizelyCartFlow: 'optimizelyCartFlow',\r\n optimizelyAppleGoolePayOrder: 'optimizelyAppleGoolePayOrder',\r\n optimizelyDisplayResortFeeWithTotalInSuiteCardH: 'optimizelyDisplayResortFeeWithTotalInSuiteCardH',\r\n optimizelyDisplayResortFeeWithTotalInSuiteCardJ: 'optimizelyDisplayResortFeeWithTotalInSuiteCardJ',\r\n optimizelySuiteCardGVar1: 'optimizelySuiteCardGVar1',\r\n optimizelySuiteCardGVar2: 'optimizelySuiteCardGVar2',\r\n optimizelySuiteCardGVar3: 'optimizelySuiteCardGVar3',\r\n optimizelySuiteCardGVar4: 'optimizelySuiteCardGVar4',\r\n optimizelyExpressCheckout: 'optimizelyExpressCheckout',\r\n optimizelyI4Iframe: 'optimizelyI4Iframe',\r\n optimizelyVoyagersDiscountSuiteCardK: 'optimizelyVoyagersDiscountSuiteCardK',\r\n optimizelySuiteCardDefault: 'optimizelySuiteCardDefault',\r\n optimizelySuiteCardGWinner: 'optimizelySuiteCardGWinner'\r\n};\r\n\r\n/**\r\n * This is for tests that are located on multiple pages or components.\r\n * This array is to be empty by default.\r\n */\r\nconst MULTIPLE_TESTS_ACTIVE_LISTS = [];\r\n\r\n/**\r\n *\r\n * @param {*} testName This is the name of the global variable that is set in Optimizely\r\n * @param {*} developMode This is a boolean that is set to true if you want to see the test in develop mode\r\n * @returns\r\n */\r\nexport const getTestValueAB = (testName, developMode = false) => {\r\n if (developMode) {\r\n return true;\r\n }\r\n if (isDevEnvironment && MULTIPLE_TESTS_ACTIVE_LISTS.includes(testName)) {\r\n return true;\r\n }\r\n\r\n return window[testName] || false;\r\n};\r\n","export const SUMMARY_CODE = 'Code';\r\nexport const SUMMARY_APPLIED = 'applied';\r\nexport const SUMMARY_WATER_PARK_PASSES = 'Water Park Passes';\r\nexport const SUMMARY_INCLUDED = 'INCLUDED';\r\nexport const SUMMARY_INCLUDED_REGULAR = 'Included';\r\nexport const SUMMARY_CHECKIN = 'Check-In';\r\nexport const SUMMARY_CHECKOUT = 'Check-Out';\r\nexport const SUMMARY_DISCOUNT_CHANGES = 'Discount Charges';\r\nexport const SUMMARY_VOYAGERS_POINTS_APPLIED = 'Voyagers Points Applied';\r\nexport const SUMMARY_BONNUS_DEALS_APPLIED = 'Bonus Deals Applied';\r\nexport const SUMMARY_DEPOSIT_PAID = 'Deposit Paid';\r\nexport const SUMMARY_CABANA_DEPOSIT = 'Cabana Deposit';\r\nexport const SUMMARY_SUITE_RESERVATION = 'Suite Reservation';\r\nexport const SUMMARY_DUE_CHECKIN = 'Due at Check-In';\r\nexport const SUMMARY_ADDITIONAL_CHARGES = 'Additional Charges';\r\nexport const SUMMARY_TITLE = 'Stay Summary';\r\nexport const SUMMARY_TOTAL = 'Total';\r\nexport const NEW_GUESTS_MESSAGE = 'Your have been successfully added to your reservation.';\r\nexport const NEW_GUESTS_BOLD = 'new guests';\r\nexport const NEW_GUESTS_ADDED = ' New Guests';\r\nexport const NEW_GUEST = 'New Guest';\r\nexport const TAXES = 'Taxes';\r\nexport const RESORT_FEE = 'Resort Fee';\r\nexport const NEW_GUESTS = 'New Guests';\r\nexport const NEW_GUESTS_IN_BASE_OCUPANCY = 'Included in base occupancy';\r\nexport const NEW_GUESTS_IN_MAX_OCUPANCY = 'Expanded occupancy fee';\r\nexport const DINING_DEALS_DETAILS = '(For & )';\r\nexport const SUMMARY_DINING_CREDIT_PACKAGE_TITLE = ` Dining Credits`;\r\n","// Suite action types\r\n\r\nconst suiteActionTypes = {\r\n SELECT_SUITE: 'SELECT_SUITE',\r\n CLEAR_SUITE_SELECTED: 'CLEAR_SUITE_SELECTED',\r\n GET_SUITE_DETAILED_AVAILABILITY_INFO: 'GET_SUITE_DETAILED_AVAILABILITY_INFO',\r\n GET_SUITE_DETAILED_AVAILABILITY_SUCCESS: 'GET_SUITE_DETAILED_AVAILABILITY_SUCCESS',\r\n GET_SUITE_DETAILED_AVAILABILITY_ERROR: 'GET_SUITE_DETAILED_AVAILABILITY_ERROR',\r\n GET_SUITE_DETAILED_AVAILABILITY_RESET: 'GET_SUITE_DETAILED_AVAILABILITY_RESET',\r\n GET_SUITE_PACKAGE_AVAILABILITY_INFO_ERROR: 'GET_PACKAGE_AVAILABILITY_INFO_ERROR__FIX_DUPLICATE',\r\n GET_SUITE_PLAN_PACKAGES_INFO_TYPE: 'GET_SUITE_PLAN_PACKAGES_INFO_TYPE',\r\n SET_SUITE_PLAN_PACKAGES_INFO_SUCCESS: 'SET_PLAN_PACKAGES_INFO_SUCCESS__FIX_DUPLICATE',\r\n SET_SUITE_NEW_RATES: 'SET_SUITE_NEW_RATES',\r\n GTM_SUITE_IMPRESSIONS: 'GTM_SUITE_IMPRESSIONS',\r\n SET_SUITE_PERSONALIZATION_PACKAGES: 'SET_SUITE_PERSONALIZATION_PACKAGES'\r\n};\r\n\r\nexport default suiteActionTypes;\r\n","// Current Lodge Selectors\r\n\r\nexport const getResortLocation = state => {\r\n return state.resortLocation;\r\n};\r\n\r\nexport const getResortLocationUrlParam = state => {\r\n return state.resortLocationUrl;\r\n};\r\nexport const getCurrentResort = state => {\r\n return state.resortData;\r\n};\r\n\r\nexport const getCurrentResortPhone = state => {\r\n return state.resortData.phone;\r\n};\r\n\r\nexport const getCurrentResortDisplay = state => {\r\n return state.resortData.display;\r\n};\r\n\r\nexport const getCurrentResortDataUrl = state => {\r\n return state.resortData.url;\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport {\r\n space,\r\n width,\r\n height,\r\n color,\r\n textAlign,\r\n borders,\r\n borderColor,\r\n minWidth,\r\n maxWidth,\r\n minHeight,\r\n boxShadow,\r\n borderRadius\r\n} from 'styled-system';\r\nimport theme from './themes/theme';\r\n\r\nconst Box = styled.div`\r\n ${props =>\r\n css`\r\n background-image: ${props.backgroundImage && props.backgroundImage};\r\n background-size: ${props.backgroundSize && props.backgroundSize};\r\n background-repeat: ${props.backgroundRepeat && props.backgroundRepeat};\r\n background-color: ${props.backgroundColor && props.backgroundColor};\r\n `}\r\n\r\n ${space} ${width} ${maxWidth} ${color} ${textAlign} ${borders} ${borderRadius} ${borderColor} ${height} ${minWidth} ${minHeight} ${boxShadow};\r\n`;\r\n\r\nBox.propTypes = {\r\n ...space.propTypes,\r\n ...width.propTypes,\r\n ...color.propTypes,\r\n ...textAlign.propTypes,\r\n ...boxShadow.propTypes,\r\n ...borders.propTypes,\r\n ...borderRadius.propTypes,\r\n ...borderColor.propTypes,\r\n ...height.propTypes,\r\n ...minWidth.propTypes,\r\n ...minHeight.propTypes,\r\n ...maxWidth.propTypes\r\n};\r\n\r\nBox.defaultProps = {\r\n theme: theme\r\n};\r\n\r\nBox.displayName = 'Box';\r\n\r\nexport default Box;\r\n","// Packages action types\r\n\r\nconst packagesActionTypes = {\r\n GET_PACKAGES_AVAILABILITY_INFO_SUCCESS: 'GET_PACKAGES_AVAILABILITY_INFO_SUCCESS',\r\n GET_PACKAGES_AVAILABILITY_INFO_LOADING: 'GET_PACKAGES_AVAILABILITY_INFO_LOADING',\r\n GET_PACKAGES_AVAILABILITY_INFO_ERROR: 'GET_PACKAGE_AVAILABILITY_INFO_ERROR__FIX_DUPLICATE',\r\n CLEAR_PACKAGES_SELECTED: 'CLEAR_PACKAGES_SELECTED',\r\n UPSERT_PACKAGES: 'UPSERT_PACKAGES',\r\n DELETE_PACKAGES: 'DELETE_PACKAGES',\r\n OFFERED_PACKAGES_LCO: 'OFFERED_PACKAGES_LCO',\r\n DECLINE_PACKAGES_LCO: 'DECLINE_PACKAGES_LCO',\r\n CLEAR_PACKAGES_BY_CODES: 'CLEAR_PACKAGES_BY_CODES__FIX_DUPLICATE',\r\n CLEAR_PACKAGES_PLAN: 'CLEAR_PACKAGES_PLAN',\r\n GET_PACKAGES_CABANAS_AVAILABILITY_SUCCESS: 'GET_PACKAGES_CABANAS_AVAILABILITY_SUCCESS',\r\n GET_PACKAGES_CABANAS_AVAILABILITY_LOADING: 'GET_PACKAGES_CABANAS_AVAILABILITY_LOADING',\r\n GET_PACKAGES_CABANAS_AVAILABILITY_ERROR: 'GET_PACKAGES_CABANAS_AVAILABILITY_ERROR',\r\n SET_PACKAGES_PLAN_INFO_SUCCESS: 'SET_PLAN_PACKAGES_INFO_SUCCESS__FIX_DUPLICATE',\r\n GTM_PACKAGES_IMPRESSIONS: 'GTM_PACKAGES_IMPRESSIONS'\r\n};\r\n\r\nexport default packagesActionTypes;\r\n","const dayjs = require('dayjs');\r\n\r\nconst plugins = [\r\n require('dayjs/plugin/badMutable'),\r\n require('dayjs/plugin/localeData'),\r\n require('dayjs/plugin/localizedFormat'),\r\n require('dayjs/plugin/pluralGetSet'),\r\n require('dayjs/plugin/isBetween'),\r\n require('dayjs/plugin/weekday')\r\n];\r\n\r\nplugins.forEach(p => dayjs.extend(p));\r\n\r\ndayjs.isMoment = dayjs.isDayjs;\r\ndayjs.invalid = () => dayjs(NaN);\r\n\r\nmodule.exports = dayjs;\r\n","// Packages Selectors\r\n\r\nimport forEach from 'lodash-es/forEach';\r\nimport get from 'lodash-es/get';\r\nimport groupBy from 'lodash-es/groupBy';\r\nimport sortBy from 'lodash-es/sortBy';\r\nimport { getTheFirstElementOfArray, isArrayEmpty } from '../../../utilities/arraysUtils';\r\nimport { PACKAGE_TYPE, STATIC_CDN } from '../../../utilities/constants';\r\nimport { areCabanasAvailable, setUpSellTitleObj } from '../../../utilities/packagesUtils';\r\nimport { RESERVATION_TYPES } from '../ReservationDetailsEntity/reservationDetailsEntity.selectors';\r\n\r\n/**\r\n * Get the sum of all selected packages an its quantities.\r\n * @param {Object} state Packages store\r\n * @return {number} Net total\r\n */\r\nexport const getPackagesNetTotal = state => {\r\n const { selectedPackages } = state;\r\n const packagesNetTotal = selectedPackages.reduce((acc, selectedPackage) => {\r\n const { total, quantity, isAdjustment } = selectedPackage;\r\n return !isAdjustment ? total * parseInt(quantity) + acc : acc;\r\n }, 0);\r\n\r\n return packagesNetTotal;\r\n};\r\n\r\n/**\r\n * This function returns all the packages and cabanas data and merges the result with their\r\n * availability date.\r\n * @param {Object} state Global state\r\n * @return {array} List of objects cotaining packages and cabanas data.\r\n */\r\nexport const getAllPackagesAndCabanas = state => {\r\n const packages = getPackages(state.packages);\r\n return joinAvailabilityDataToPackages(state, packages);\r\n};\r\n\r\n/**\r\n * Function to return the available cabanas\r\n * @param {Object} state Global state\r\n * @returns {array} List of the cabanas available\r\n */\r\nexport const getAvailableCabanas = state => {\r\n const packages = getAllPackagesAndCabanas(state);\r\n return packages.filter(pkg => pkg.isCabana);\r\n};\r\n\r\n/**\r\n * Function to get the valid package types based on cabana availability\r\n * @param {Object} state\r\n * @returns PackageTypes available based cabanas availability\r\n */\r\nexport const getFilteredPackageTypesBasedOnCabanaAvailability = state => {\r\n const upsellTiles = getUpSellTilesData(state);\r\n\r\n const packageTypes = upsellTiles.map(upsellTile => upsellTile.packageType);\r\n\r\n const availablePackages = getAllPackagesAndCabanas(state);\r\n const availableCabanas = availablePackages.filter(\r\n availablePackage =>\r\n availablePackage.isCabana && availablePackage.cabanasDetails && availablePackage.cabanasDetails.length\r\n );\r\n\r\n const hasAvailableCabanas = availableCabanas && availableCabanas.length;\r\n const isValidPackageType = packageType =>\r\n hasAvailableCabanas || (!hasAvailableCabanas && packageType !== PACKAGE_TYPE.cabanasAndFlexTrip);\r\n\r\n return packageTypes.filter(packageType => isValidPackageType(packageType));\r\n};\r\n\r\n/**\r\n * Get the sum of all selected packages taxes.\r\n * @param {Object} state Packages store\r\n * @return {number} All packages taxes\r\n */\r\nexport const getPackagesTaxes = state => {\r\n const { selectedPackages } = state;\r\n\r\n return selectedPackages.reduce((acc, selectedPackage) => {\r\n const { tax, quantity, isAdjustment } = selectedPackage;\r\n return !isAdjustment ? tax * parseInt(quantity) + acc : acc;\r\n }, 0);\r\n};\r\n\r\n/**\r\n * This function returns all the packages by type and merges the result with their\r\n * availability date.\r\n * @param {Object} state Global state\r\n * @param {String} type The package type\r\n * @return {array} List of objects cotaining packages and cabanas data.\r\n */\r\nexport const getPackagesAndCabanasByType = (state, type) => {\r\n const packages = getPackagesByType(state.packages, type);\r\n return joinAvailabilityDataToPackages(state, packages);\r\n};\r\n\r\nexport const getPackagesGrossTotal = state => {\r\n const { selectedPackages } = state;\r\n\r\n if (!selectedPackages) return 0;\r\n\r\n const packagesGrossTotal = selectedPackages.reduce((acc, selectedPackage) => {\r\n const { amount, quantity, isAdjustment } = selectedPackage;\r\n return !isAdjustment ? amount * parseInt(quantity) + acc : acc;\r\n }, 0);\r\n\r\n return packagesGrossTotal;\r\n};\r\n\r\n/**\r\n * Get the sum of the amount of packages that should be charged at booking.\r\n * Those packages should be charged at the Due today and the credit card amount\r\n * @param {Object} state Packages store\r\n * @return {number} All packages amount\r\n */\r\nexport const getPackagesBookingGrossTotal = state => {\r\n const { selectedPackages } = state;\r\n\r\n if (!selectedPackages) return 0;\r\n\r\n const packagesGrossTotal = selectedPackages.reduce((acc, selectedPackage) => {\r\n const { amount, quantity, shouldBeChargedAtBooking, isAdjustment } = selectedPackage;\r\n if (!shouldBeChargedAtBooking) return acc;\r\n return !isAdjustment ? amount * parseInt(quantity) + acc : acc;\r\n }, 0);\r\n\r\n return packagesGrossTotal;\r\n};\r\n\r\n/**\r\n * Get the sum of all selected packages an its quantities, without those packages which will be charged at the suite price.\r\n * @param {Object} state Packages store\r\n * @return {number} Net total\r\n */\r\nexport const getPackagesWithoutBookChargeNetTotal = state => {\r\n const { selectedPackages } = state;\r\n const packagesNetTotal = selectedPackages.reduce((acc, selectedPackage) => {\r\n const { amount, quantity, tax, shouldBeChargedAtBooking, isAdjustment } = selectedPackage;\r\n if (shouldBeChargedAtBooking) return acc;\r\n\r\n const qty = parseInt(quantity);\r\n return !isAdjustment ? tax * qty + amount * qty + acc : acc;\r\n }, 0);\r\n\r\n return packagesNetTotal;\r\n};\r\n\r\n/**\r\n * Returns packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getPackages = state => get(state, 'packageAvailabilityList');\r\n\r\n/**\r\n * Returns the Dining packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getDiningPackages = state => {\r\n const { packageAvailabilityList } = state;\r\n if (!packageAvailabilityList) return [];\r\n\r\n return packageAvailabilityList.filter(\r\n w => w.packageType.includes(PACKAGE_TYPE.dining) || w.packageType.includes(PACKAGE_TYPE.main)\r\n );\r\n};\r\n\r\n/**\r\n * Returns the Birthday packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getPackagesByType = (state, packageType) => {\r\n const { packageAvailabilityList } = state;\r\n if (!packageAvailabilityList) return [];\r\n\r\n return packageAvailabilityList.filter(pck => pck.packageType?.includes(packageType));\r\n};\r\n\r\n/**\r\n * Returns the Activity and Attractions packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getActivitiesAndAttractionsPackages = state => {\r\n const { packageAvailabilityList } = state;\r\n if (!packageAvailabilityList) return [];\r\n\r\n return packageAvailabilityList.filter(\r\n pck => pck.packageType.includes(PACKAGE_TYPE.attractions) || pck.packageType.includes(PACKAGE_TYPE.activity)\r\n );\r\n};\r\n\r\n/**\r\n * @function\r\n * Returns the Activity and Attractions packages availability list.\r\n * @param {object} state Package storage state\r\n */\r\nexport const getAttractionPassesPackages = state => {\r\n const { packageAvailabilityList } = state;\r\n if (!packageAvailabilityList) return [];\r\n\r\n return packageAvailabilityList.filter(pck => pck.packageType.includes(PACKAGE_TYPE.pass));\r\n};\r\n\r\n/**\r\n * Returns cabanas availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability cabanas.\r\n */\r\nexport const getCabanas = state => get(state, 'cabanasAvailabilityList');\r\n\r\n/**\r\n * Check if cabana is available for the selected dates and suites\r\n * @param {array} packagesList - available package and cabana list.\r\n * @return {boolean} - wether to show cabana tile or not.\r\n */\r\nexport const getCabanaAvailability = state => {\r\n const cabanasAvailabilityList = getCabanas(state);\r\n return areCabanasAvailable(cabanasAvailabilityList);\r\n};\r\n\r\n/**\r\n * Returns packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {boolean} True if it is loading.\r\n */\r\nexport const getIsLoading = state => get(state, 'isLoading');\r\n\r\n/**\r\n * Returns Late Checkout Package Declined status.\r\n * @param {Object} State Packages Store.\r\n * @return {boolean} True if declined\r\n */\r\nexport const getLateCheckoutDeclineStatus = state => get(state, 'isLateCheckoutDenied');\r\n\r\nexport const getLateCheckoutOfferStatus = state => get(state, 'isLateCheckoutOffered');\r\n\r\nexport const getPackagesByCode = state => {\r\n const packages = getPackages(state.packages);\r\n return packages?.reduce((packageAcc, selectedPackage) => {\r\n packageAcc[selectedPackage.packageCode.trim()] = {\r\n ...selectedPackage\r\n };\r\n return packageAcc;\r\n }, {});\r\n};\r\n\r\nexport const getPackagesGroupedByTier = (state, reservationType, isNewReservation) => {\r\n const packages = getPackages(state);\r\n const isSuite = reservationType === RESERVATION_TYPES.suite;\r\n const isDayPass = reservationType === RESERVATION_TYPES.dayPass;\r\n const isSuiteConfirmation = isSuite && isNewReservation;\r\n const isDayPassConfirmation = isDayPass && isNewReservation;\r\n\r\n const { '': noTier, None, ...groupedByTier } = groupBy(\r\n packages,\r\n ({ tierDayPassConfirmation, tierDaypassReservation, tierMyReservation, tierConfirmation }) => {\r\n if (isDayPassConfirmation) {\r\n return tierDayPassConfirmation;\r\n } else if (isDayPass) {\r\n return tierDaypassReservation;\r\n } else if (isSuiteConfirmation) {\r\n return tierConfirmation;\r\n }\r\n return tierMyReservation;\r\n }\r\n );\r\n\r\n let result = {};\r\n\r\n forEach(groupedByTier, (groupedPackage, key) => {\r\n result[key] = sortBy(groupedPackage, gwPackage => parseInt(gwPackage.orderMyReservation));\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport const getPlanPackages = state => get(state, 'planPackages');\r\n\r\n/**\r\n * Returns packages availability list.\r\n * @param {Object} State Packages Store.\r\n * @return {boolean} True if request failed\r\n */\r\nexport const getRequestFailed = state => get(state, 'requestFailed');\r\n\r\n/**\r\n * Returns selected packages list.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getSelectedPackages = state => get(state, 'selectedPackages');\r\n\r\n/**\r\n * This function returns the Upsell tiles data based on the packageTablesJson and cabanasJson\r\n * content files which comes from AEM\r\n * @returns {Array of Objects}\r\n */\r\nexport const getUpSellTilesData = state => {\r\n const packages = getPlanPackages(state.packages);\r\n const allPackages = getPackages(state.packages);\r\n\r\n return setUpSellTitleObj(allPackages, packages, state);\r\n};\r\n\r\n/**\r\n * This function properly join the availability data to the packages and cabanas\r\n * returning a full detailed list of packages and cabanas.\r\n * @param {Object} state Global state.\r\n * @param {Object} packagesAndCabanas List of packages and cabanas whitout the\r\n * availability information.\r\n * @return {array} List of packages and cabanas fully detailed with their\r\n * availability information.\r\n */\r\nconst joinAvailabilityDataToPackages = (state, packagesAndCabanas) => {\r\n const availabilityPackages = getPackages(state.packages);\r\n const availabilityCabanas = getCabanas(state.packages);\r\n\r\n return (\r\n packagesAndCabanas.length > 0 &&\r\n packagesAndCabanas?.map(pkg => {\r\n const cabanaAvailable =\r\n availabilityCabanas?.length > 0 &&\r\n availabilityCabanas?.filter(avCabana => avCabana.itemCode === pkg.packageCode && !avCabana.errorCode);\r\n\r\n if (cabanaAvailable && cabanaAvailable?.length > 0) {\r\n return {\r\n ...pkg,\r\n isCabana: true,\r\n cabanasDetails: cabanaAvailable?.map(cabana => {\r\n return {\r\n amount: get(cabana, 'roomBaseRate'),\r\n tax: get(cabana, 'taxesAndFees'),\r\n total: get(cabana, 'roomRateTotal'),\r\n errorCode: get(cabana, 'errorCode'),\r\n statusText: get(cabana, 'statusText'),\r\n itemAvailable: get(cabana, 'itemAvailable'),\r\n date: get(cabana, 'date')\r\n };\r\n })\r\n };\r\n }\r\n const packageAvailable = availabilityPackages?.find(avPackage => avPackage.packageCode === pkg.packageCode);\r\n return {\r\n ...pkg,\r\n subTitle: get(packageAvailable, 'subTitle', ''),\r\n amount: get(packageAvailable, 'amount'),\r\n tax: get(packageAvailable, 'tax'),\r\n total: get(packageAvailable, 'total')\r\n };\r\n })\r\n );\r\n};\r\n\r\n/**\r\n * Function to return the available cabanas\r\n * @param {Object} state Global state\r\n * @returns {array} List of the cabanas available\r\n */\r\nexport const getAvailableCabanasV3 = state => {\r\n const cabanas = state.cabanasAvailabilityList;\r\n return cabanas;\r\n};\r\n\r\nexport const getAddedCabanasv3 = ({ packages, addApackage }) => {\r\n const addedPkgs = addApackage.addedPackages;\r\n const cabanasCodes = packages?.cabanasAvailabilityList?.map(pkg => pkg.rateCode);\r\n const filteredCabanasAdded = [];\r\n for (const pkg in addedPkgs) {\r\n if (cabanasCodes?.includes(addedPkgs[pkg].item.rate)) {\r\n filteredCabanasAdded?.push(addedPkgs[pkg]);\r\n }\r\n }\r\n\r\n return filteredCabanasAdded;\r\n};\r\n\r\n/**\r\n * Returns the Early Waterpark Access package if available.\r\n * @param {Object} State Packages Store.\r\n * @return {Object} Early Waterpark Access package.\r\n */\r\nexport const getEarlyWaterparkAccess = state => {\r\n const { planPackages } = state;\r\n if (!planPackages) return [];\r\n const familyPackage = planPackages?.filter(pck => pck.packageTabName === 'Family');\r\n const earlyWaterparkAccess =\r\n familyPackage[0]?.packageList && familyPackage[0]?.packageList?.find(pck => pck.title === 'Early Waterpark Access');\r\n\r\n if (earlyWaterparkAccess) {\r\n const fullEarlyWaterparkAccess = {\r\n ...earlyWaterparkAccess,\r\n image: {\r\n url: STATIC_CDN + 'early-access-wp.png',\r\n alt: STATIC_CDN + 'early-access-wp.png'\r\n },\r\n cardTitle: 'Add Early Water Park Access',\r\n description: 'This one-time cost gets your group 9:00 am early access to our water park each day!'\r\n };\r\n return fullEarlyWaterparkAccess;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const getBundlePackage = state => {\r\n const BUNDLE_TABLE_NAME = 'Bundle';\r\n const bundlePkg = state.planPackages?.find(packageItem => packageItem.packageTableName === BUNDLE_TABLE_NAME);\r\n if (bundlePkg && !isArrayEmpty(bundlePkg?.packageList ?? [])) {\r\n return getTheFirstElementOfArray(bundlePkg.packageList);\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Returns the selected packages location.\r\n * @param {Object} State Packages Store.\r\n * @return {array} List of availability packages.\r\n */\r\nexport const getSelectedPkgsLocationCode = state => state.selectedPkgsLocationCode;\r\n\r\n/**\r\n * Rreturn fing available package by code\r\n * @param {*} state\r\n * @param {*} packageCode\r\n * @returns\r\n */\r\nexport const getPackageByPackageCode = (packages, packageCode) => {\r\n const availablePackages = getPackages(packages);\r\n return availablePackages.find(pkg => pkg.packageCode === packageCode);\r\n};\r\n","//DAYPASS TOTALS\r\nexport const SUBTOTAL = 'Subtotal';\r\nexport const TAXES = 'Taxes';\r\nexport const TAXES_AND_FEES = 'Taxes and Fees';\r\nexport const PARKING_FEE = 'Parking Fee';\r\nexport const SUSTAINABILITY_FEE = 'Sustainability Fee';\r\n\r\n//DAYPASS HEADER\r\nexport const NUMBER_OF_PASSES = '# of Day Passes';\r\nexport const VALID_ON = 'Valid On';\r\nexport const DAYPASS_SUMMARY = 'Day Pass Summary';\r\n\r\n//DAYPASS FOOTER\r\nexport const TOTAL = 'Total';\r\n\r\n//DAYPASS DETAILS\r\nexport const PRICE_PER_GUEST = 'Price per guest';\r\nexport const PROMOCODE_APPLIED = 'Code: Applied';\r\nexport const DAYPASS_DETAILS = ' ';\r\n\r\n//ADITIONAL CHARGES\r\nexport const ADDITIONAL_CHARGES = 'Additional Charges';\r\n\r\n//PACKAGE LIST\r\nexport const REMOVE = 'Remove';\r\n\r\n//DAYPASS TOTALS AND ADDITIONAL CHARGES SHARED COPIES\r\nexport const TOOLTIP_COPY =\r\n 'The Day Pass Amenity Fee at Great Wolf Lodge encompasses a range of services and inclusions crafted to elevate family experiences and add extra conveniences. This fee covers amenities such as water park life jackets and towels, resort-wide access to wireless internet, and delightful complimentary Wolf Ears for children aged 12 and under.';\r\nexport const AMENITY_FEE = 'Amenity Fee';\r\n\r\n//BIRTHDAY PARTY\r\nexport const PARTY_DATE = 'Party Date';\r\nexport const PARTY_TIME = 'Party Time';\r\nexport const PARTY_DETAILS = '<ADULTS> adults, <KIDS> kids, <INFANTS> infants, <SPECTATORS> spectators';\r\nexport const PARTY_DETAILS_EDIT = 'Edit Number of Guests';\r\nexport const PARTY_DUE_TODAY = 'Due Today';\r\nexport const PARTY_DUE_BEFORE_PARTY = 'Due <DATE>';\r\nexport const PARTY_72_REFUND_PARTY_DISCLAIMER = '*Deposits are fully refundable within the first 72 hours of booking';\r\nexport const PARTY_REFUND_DISCLAIMER = '*A lodge member will reach out to help complete payment* ';\r\nexport const PARTY_NON_REFUND_DISCLAIMER = '*Booking less than 7 days before, this deposit is non-refundable*';\r\nexport const PARTY_SUMMARY = 'Party Summary';\r\n\r\n//ARIA LABELS\r\nexport const PRICE_SECTION = 'Price Section';\r\nexport const PACKAGE_DESCRIPTION_SECTION = 'Package Description Section';\r\nexport const TOTAL_SECTION = 'Total Section';\r\nexport const DUE_TODAY_SECTION = 'Due Today Section';\r\nexport const DUE_BEFORE_PARTY_SECTION = 'Due Before Party Section';\r\n\r\nexport const SUMMARY_WATER_PARK_PASSES = 'Water Park Passes';\r\nexport const SUMMARY_INCLUDED = 'INCLUDED';\r\n\r\nexport const BIRTHDAY_LINK_TEXT = 'Edit <LINK_TEXT> Choices';\r\n","export function getTheFirstElementOfArray(array) {\r\n if (!array) return '';\r\n const [firstElement] = array;\r\n return firstElement;\r\n}\r\n\r\nexport function getTheLastElementOfArray(array) {\r\n const lastElement = array[array.length - 1];\r\n return lastElement;\r\n}\r\n\r\nexport function isArrayEmpty(array = []) {\r\n return array.length === 0;\r\n}\r\n","import get from 'lodash-es/get';\r\nimport isEmpty from 'lodash-es/isEmpty';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport AuthClient from '../../../../api/auth/AuthClient';\r\nimport { getLocationDisplayName } from '../../../../components/utilities/ResortLocations';\r\nimport { getResortLocation } from '../../../../store/componentStores/CurrentLodge/currentLodge.selectors';\r\nimport offerActionTypes from '../../../../store/componentStores/Offer/offer.types';\r\nimport packagesActionTypes from '../../../../store/componentStores/Packages/packages.types';\r\nimport reservationDetailsActionTypes from '../../../../store/componentStores/ReservationDetailsEntity/reservationDetailsEntity.types';\r\nimport reservationsActionTypes from '../../../../store/componentStores/Reservations/reservations.types';\r\nimport suiteActionTypes from '../../../../store/componentStores/Suite/suite.types';\r\nimport { store } from '../../../../store/configureStore';\r\nimport {\r\n optimizelyDaypassPackagesGold,\r\n optimizelyDaypassPackagesPlatinum,\r\n optimizelyDaypassPackagesSilver\r\n} from '../../../../utilities/ABTesting';\r\nimport { DAY_PASSES_TYPE, EVENT_CATEGORIES, GTM_EVENT, PRODUCT_SCOPES } from '../../../../utilities/constants';\r\nimport { pushEvent } from '../../../../utilities/dataLayerUtils';\r\nimport { findElementsNotInList } from '../../../../utilities/objectKeysManagementUtils';\r\nimport { getReservationCurrency } from '../../../../utilities/reservationsUtils';\r\nimport {\r\n buildImpressionsDataObject,\r\n buildImpressionsDataObjectPkgs,\r\n buildImpressionsEventObject,\r\n buildPackageCartEventObject,\r\n buildPackagesPurchaseEnhancedECommerceObject,\r\n buildPurchaseEnhancedECommerceObject,\r\n buildSuitePurchaseEnhancedECommerceObject,\r\n getBaseSuiteObject,\r\n getDayPassBaseObject,\r\n getEventBaseObject\r\n} from '../analyticsObjectBuilders';\r\nimport {\r\n getAddedPackagesCodes,\r\n getAnalyticsPayload,\r\n getGroupedAddedPackages,\r\n getPaymentDescription,\r\n sendCabanasAnalytics,\r\n sendPostPurchasePkg\r\n} from '../analyticsUtils';\r\nimport { getCurrentLocation } from '../utilities/helpers';\r\n\r\nexport const onPushImpressionsData = ({ eventProps }) => {\r\n const {\r\n currentSuite,\r\n resortLocation,\r\n checkoutDateSelection,\r\n checkinDateSelection,\r\n adultsCount,\r\n kidsCount,\r\n position,\r\n customPurchaseLocation\r\n } = eventProps;\r\n const { guests } = store.getState();\r\n const kidsAges = guests.kidsAges;\r\n const impressionsDataObj = buildImpressionsDataObject(\r\n kidsAges,\r\n currentSuite,\r\n resortLocation,\r\n checkoutDateSelection,\r\n checkinDateSelection,\r\n adultsCount,\r\n kidsCount,\r\n position,\r\n customPurchaseLocation\r\n );\r\n\r\n const eventData = buildImpressionsEventObject(resortLocation, impressionsDataObj, customPurchaseLocation);\r\n\r\n pushEvent(eventData);\r\n};\r\n\r\nonPushImpressionsData.eventType = suiteActionTypes.GTM_SUITE_IMPRESSIONS;\r\n\r\nexport const onPkgsImpressionsData = ({ eventProps }) => {\r\n const {\r\n pkgs,\r\n resortLocation,\r\n checkoutDateSelection,\r\n checkinDateSelection,\r\n adultsCount,\r\n kidsCount,\r\n customPurchaseLocation\r\n } = eventProps;\r\n\r\n if (!pkgs || pkgs.length === 0) {\r\n return;\r\n }\r\n\r\n const { router } = store.getState();\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n\r\n const impressionProducts = pkgs.map((pkg, index) => {\r\n return buildImpressionsDataObjectPkgs(\r\n pkg,\r\n resortLocation,\r\n checkoutDateSelection,\r\n checkinDateSelection,\r\n adultsCount,\r\n kidsCount,\r\n index,\r\n customPurchaseLocation ?? purchaseLocation\r\n );\r\n });\r\n\r\n const eventData = buildImpressionsEventObject(\r\n resortLocation,\r\n impressionProducts,\r\n customPurchaseLocation ?? purchaseLocation\r\n );\r\n\r\n pushEvent(eventData);\r\n};\r\n\r\nonPkgsImpressionsData.eventType = packagesActionTypes.GTM_PACKAGES_IMPRESSIONS;\r\n\r\nconst handlePackagePurchaseTrackingAction = pckCode => {\r\n return `${pckCode} Pass Purchased`;\r\n};\r\n\r\n/**\r\n * Listener on purchase event\r\n * @param {Object} event\r\n * @param {Array} eventsHistory\r\n */\r\nexport const onReservationSuccess = (event, eventsHistory) => {\r\n const UUID = uuidv4();\r\n const { suite } = store.getState();\r\n const { reservation, packages, suiteContent } = event.response;\r\n const { suiteCategory } = suiteContent;\r\n if (!reservation) return;\r\n const voyagerPointsDiscount = reservation.rateInfo.totalPoints;\r\n const offersPointsDiscount = reservation.rateInfo.totalOffers;\r\n const packagesResponse = reservation.packages || [];\r\n pushSuiteCheckoutSuccessData(\r\n reservation,\r\n packagesResponse,\r\n packages,\r\n voyagerPointsDiscount,\r\n offersPointsDiscount,\r\n suite.dayType,\r\n suiteContent,\r\n UUID\r\n );\r\n pushReservationData(reservation, packagesResponse, packages, suite.dayType, suiteCategory, UUID);\r\n pushInteractionsData(reservation, packagesResponse);\r\n // In order to save this event in the history (so we can log it) we should return it!\r\n // otherwise it will be ignored!\r\n\r\n const passPackagesCodes = packages.filter(pck => pck.packageType === 'Pass').map(pck => pck.packageCode);\r\n const fullPassPackages = packagesResponse.filter(pck => passPackagesCodes.includes(pck.packageCode));\r\n\r\n fullPassPackages.forEach(pck => {\r\n pushEvent({\r\n event: GTM_EVENT.NAME.passPurchase,\r\n category: EVENT_CATEGORIES.GTM.passPackagePurchasesVariationB,\r\n action: handlePackagePurchaseTrackingAction(pck.packageCode),\r\n label: `Revenue: ${pck.packageAmount}`\r\n });\r\n });\r\n\r\n return event;\r\n};\r\n\r\nonReservationSuccess.eventType = reservationsActionTypes.GTM_RESERVATION_NEW_OR_DAYPASS; // Redux Action Type. Get it from the store\r\n\r\n/**\r\n * Listener triggered on post package added, currently on CMP\r\n * @param {Object} event Event object triggered by redux\r\n * @returns Object -- event\r\n */\r\nexport const onPackageAdded = event => {\r\n try {\r\n const { response, getState } = event;\r\n\r\n if (!response) return;\r\n\r\n const reservation = get(response, 'reservation', {});\r\n const packages = get(response, 'packages', []);\r\n const cabanas = get(response, 'cabanas', []);\r\n const maxOccupancy = get(response, 'maxOccupancy', 0);\r\n const customPurchaseLocation = get(response, 'customPurchaseLocation', null);\r\n\r\n const { router, suite } = store.getState();\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = customPurchaseLocation ? customPurchaseLocation : getCurrentLocation(currentPathLocation);\r\n\r\n if (!isEmpty(packages) && !isEmpty(reservation)) {\r\n const pkgAvailability = get(getState(), 'packages.packageAvailabilityList', []);\r\n sendPostPurchasePkg(packages, reservation, pkgAvailability, purchaseLocation, suite.dayType, maxOccupancy);\r\n }\r\n\r\n if (!isEmpty(cabanas) && !isEmpty(cabanas.reservations)) {\r\n const { entities } = getState();\r\n const reservationsData = get(entities, 'reservationDetails.data', []);\r\n\r\n if (!isEmpty(reservationsData)) {\r\n sendCabanasAnalytics(cabanas, reservationsData, suite.dayType);\r\n }\r\n }\r\n } catch {\r\n // Ingore error an continue excecution as normal\r\n }\r\n\r\n return event;\r\n};\r\n\r\nonPackageAdded.eventType = reservationDetailsActionTypes.GTM_POST_RESERVATION_DETAILS_SALE_PACKAGE_ADDED;\r\n\r\nconst pushInteractionsData = (reservation, packages) => {\r\n const interactionsData = {\r\n event: EVENT_CATEGORIES.INTERACTIONS.postReservation,\r\n reservationNumber: reservation.id ? reservation.id : reservation.externalId,\r\n reservationTotal: reservation.rateInfo.total,\r\n roomCode: reservation.selection.roomCode,\r\n roomQuantity: reservation.selection.numAdults + reservation.selection.numChildren,\r\n roomPrice: reservation.rateInfo.totalRoomRate,\r\n packages:\r\n packages && packages.length > 0\r\n ? packages.map(pkg => ({\r\n packageCode: pkg.packageCode,\r\n packageQuantity: pkg.quantity,\r\n packagePrice: pkg.packageAmount\r\n }))\r\n : null\r\n };\r\n pushEvent(interactionsData);\r\n};\r\n\r\nconst pushReservationData = (reservation, reservationPackages, packagesContent, dayType, suiteCategory, UUID) => {\r\n const authClient = new AuthClient();\r\n const isUserLoggedIn = authClient.isLoggedIn();\r\n\r\n const { packages, packageTotalRevenue } = reservationPackages.reduce(\r\n (packagesAcc, reservationPackage) => {\r\n if (reservationPackage) {\r\n const foundPackage = packagesContent.find(pkg => pkg.packageCode === reservationPackage.packageCode);\r\n packagesAcc.packages.push({\r\n name: reservationPackage.description,\r\n id: reservationPackage.packageCode,\r\n variant: foundPackage ? foundPackage.packageType : '',\r\n brand: 'great wolf',\r\n price: reservationPackage.unitAmount,\r\n quantity: reservationPackage.quantity,\r\n category: 'packages',\r\n coupon: reservation.offerCode\r\n });\r\n\r\n packagesAcc.packageTotalRevenue += reservationPackage.quantity * reservationPackage.unitAmount;\r\n }\r\n return packagesAcc;\r\n },\r\n { packages: [], packageTotalRevenue: 0 }\r\n );\r\n\r\n // 1. Push data - track reservation id\r\n pushEitherSuiteOrDayPass(reservation, suiteCategory);\r\n\r\n // 2. Track checkout step 1 for checkout and 2 for confirmation\r\n pushEvent({\r\n event: EVENT_CATEGORIES.GTM.checkoutOption,\r\n ecommerce: {\r\n checkout_option: {\r\n actionField: {\r\n step: 2,\r\n option: reservation.rateCode\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 3. PuchaseSuite\r\n const purchaseSuiteObj = {\r\n event: EVENT_CATEGORIES.GTM.purchaseSuite,\r\n loggedinStatus: isUserLoggedIn,\r\n ecommerce: {\r\n purchase: {\r\n actionField: {\r\n id: UUID,\r\n confirmationNumber: reservation.id ? reservation.id : reservation.externalId,\r\n coupon: reservation.rateCode,\r\n revenue: reservation.rateInfo.totalRoomRate,\r\n SIP: dayType\r\n },\r\n products: [\r\n {\r\n name: reservation.roomDescription.split('-')[0].trim() || reservation.roomType,\r\n id: reservation.roomType,\r\n price: (reservation.rateInfo.totalRoomRate / reservation.selection.numberOfNights).toFixed(2),\r\n category: suiteCategory,\r\n variant: 'standard',\r\n brand: 'great wolf',\r\n quantity: reservation.selection.numberOfNights,\r\n dimension1: getPaymentDescription(reservation),\r\n coupon: reservation.offerCode\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n\r\n pushEvent(purchaseSuiteObj);\r\n\r\n const uniquePackages = [...new Map(packages.map(m => [m.id, m])).values()];\r\n\r\n // 4. PurchasePackage\r\n const purchasePackageObj = {\r\n event: EVENT_CATEGORIES.GTM.purchasePackage,\r\n ecommerce: {\r\n purchase: {\r\n actionField: {\r\n id: UUID,\r\n confirmationNumber: reservation.id ? reservation.id : reservation.externalId,\r\n coupon: reservation.rateCode,\r\n revenue: packageTotalRevenue.toFixed(2),\r\n SIP: dayType\r\n },\r\n products: uniquePackages\r\n }\r\n }\r\n };\r\n\r\n pushEvent(purchasePackageObj);\r\n\r\n // 5. Package revenue\r\n pushEvent({\r\n total_package_revenue: packageTotalRevenue.toFixed(2)\r\n });\r\n\r\n // 6. Affirm\r\n try {\r\n const payload = getAnalyticsPayload(reservation);\r\n window.affirm.analytics.trackOrderConfirmed(payload);\r\n } catch (error) {}\r\n};\r\n\r\nconst pushSuiteCheckoutSuccessData = (\r\n reservation,\r\n packages,\r\n packagesContent,\r\n voyagerPointsDiscount,\r\n offersPointsDiscount,\r\n dayType,\r\n suiteContent,\r\n UUID\r\n) => {\r\n const { maxOccupancy, suiteCategory } = suiteContent;\r\n const products = [];\r\n const { router, suite, offer, account } = store.getState();\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n const selectedOffers = get(offer, 'activeOffers', []);\r\n const userOfferList = get(account, 'currentLoggedInUser.offerList', []);\r\n\r\n let allActiveOffers = [];\r\n let formatedOffers = [];\r\n // If we have offer we add the offers to the newAddedPackages\r\n if (selectedOffers.length > 0 && userOfferList.length > 0) {\r\n allActiveOffers = selectedOffers.map(offer => {\r\n const offerFound = userOfferList.find(userOffer => userOffer.id === offer);\r\n return {\r\n ...offerFound\r\n };\r\n });\r\n\r\n if (allActiveOffers.length > 0) {\r\n formatedOffers = allActiveOffers.map((offer, index) => {\r\n return {\r\n packageName: 'Bonus deal',\r\n packageCode: `bonusdeal${index}`,\r\n amount: offer.dollarValue,\r\n category: 'bonusDeal',\r\n packageCategory: offer.title,\r\n quantity: 1\r\n };\r\n });\r\n }\r\n }\r\n\r\n const suiteProduct = buildSuitePurchaseEnhancedECommerceObject(\r\n suite,\r\n reservation,\r\n purchaseLocation || PRODUCT_SCOPES.suiteCheckout,\r\n maxOccupancy,\r\n suiteCategory\r\n );\r\n\r\n products.push(suiteProduct);\r\n\r\n const uniquePackages = [...new Map(packages.map(m => [m.packageCode, m])).values()];\r\n\r\n if (uniquePackages) {\r\n const addedPackagesCodes = getAddedPackagesCodes(uniquePackages);\r\n const groupedAddedPackages = getGroupedAddedPackages({\r\n addedPackagesCodes,\r\n reservation\r\n });\r\n\r\n const packagesProducts = buildPackagesPurchaseEnhancedECommerceObject(\r\n {\r\n suite,\r\n addedPackagesCodes,\r\n packages: uniquePackages,\r\n groupedAddedPackages,\r\n reservation,\r\n packagesContent,\r\n formatedOffers,\r\n maxOccupancy\r\n },\r\n purchaseLocation || PRODUCT_SCOPES.suiteCheckout\r\n );\r\n products.push(...packagesProducts);\r\n }\r\n const purchaseEnhancedECommerceData = buildPurchaseEnhancedECommerceObject(\r\n {\r\n reservation,\r\n products,\r\n revenue: reservation.rateInfo.total.toFixed(2),\r\n tax: reservation.rateInfo.taxes.toFixed(2),\r\n shipping: reservation.rateInfo.resortFee.toFixed(2),\r\n voyagerPointsDiscount,\r\n offersPointsDiscount,\r\n dayType,\r\n UUID\r\n },\r\n EVENT_CATEGORIES.GTM.transaction,\r\n purchaseLocation || PRODUCT_SCOPES.suiteCheckout\r\n );\r\n\r\n pushEvent(purchaseEnhancedECommerceData);\r\n};\r\n\r\nconst pushEitherSuiteOrDayPass = (reservation, suiteCategory) => {\r\n // get currency code\r\n const currencyCode = getReservationCurrency(reservation.selection.site);\r\n\r\n const [locationDisplayName, locationState] = getLocationDisplayName(reservation.property).split(', ');\r\n\r\n const isDayPass = Object.values(DAY_PASSES_TYPE).includes(reservation.roomType);\r\n\r\n const baseObject = getEventBaseObject(EVENT_CATEGORIES.GTM.fbPurchase, reservation, currencyCode);\r\n\r\n const suiteObject = getBaseSuiteObject(reservation, locationDisplayName, locationState, suiteCategory);\r\n\r\n const dayPassObject = getDayPassBaseObject(reservation);\r\n\r\n pushEvent({\r\n ...baseObject,\r\n ...(isDayPass ? dayPassObject : suiteObject)\r\n });\r\n\r\n //Daypass Dining packages event\r\n const daypassGoogleAnalyticsAction = {\r\n optimizelyDaypassPackagesSilver: GTM_EVENT.ACTION.daypassPurchaseVersionB,\r\n optimizelyDaypassPackagesGold: GTM_EVENT.ACTION.daypassPurchaseVersionC,\r\n optimizelyDaypassPackagesPlatinum: GTM_EVENT.ACTION.daypassPurchaseVersionD\r\n };\r\n\r\n const handleABCDTesting = () => {\r\n if (optimizelyDaypassPackagesGold) return 'optimizelyDaypassPackagesGold';\r\n if (optimizelyDaypassPackagesSilver) return 'optimizelyDaypassPackagesSilver';\r\n if (optimizelyDaypassPackagesPlatinum) return 'optimizelyDaypassPackagesPlatinum';\r\n };\r\n\r\n reservation.packages.length !== 0 &&\r\n (optimizelyDaypassPackagesGold || optimizelyDaypassPackagesPlatinum || optimizelyDaypassPackagesSilver) &&\r\n pushEvent({\r\n event: GTM_EVENT.NAME.daypassDiningPackagePurchase,\r\n category: EVENT_CATEGORIES.GTM.daypassPackagePurchase,\r\n action: daypassGoogleAnalyticsAction[handleABCDTesting()],\r\n label: `Dining Revenue: ${reservation.packages[0].totalAmount} - Total Daypass Revenue: ${reservation.rateInfo.totalAmount} `\r\n });\r\n};\r\n\r\n/**\r\n * Listener on purchase event\r\n * @param {Object} event\r\n * @param {Array} eventsHistory\r\n */\r\nexport const onPackagesUpsert = (event, eventsHistory) => {\r\n // load state contains the historic of the state\r\n // this event is triggered before it reaches to the reducer so we\r\n // load the prev saved state\r\n const { packages: packagesOld, guests, dates, currentLodge, router, suite, plans } = store.getState();\r\n const selectedPackages = get(event, 'selectedPackages', []);\r\n const selectedPackagesOld = get(packagesOld, 'selectedPackages', []);\r\n const packagesTable = get(packagesOld, 'planPackages', []);\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n const resortLocation = getResortLocation(currentLodge);\r\n const isCartOpenClose = plans.isCartOpenClose;\r\n\r\n if (!selectedPackages.length > 0 || !packagesTable.length > 0) return;\r\n\r\n //Find values that are in selectedPackages but not in selectedPackagesOld\r\n let newAddedPackages = findElementsNotInList(selectedPackages, selectedPackagesOld, 'packageCode');\r\n\r\n // NOTE: Package completely removed -- this case is handled on this method: onPackageDelete\r\n // A. PACKAGE ADDITION\r\n // 1. New added package, new Added Packages comes with an object\r\n if (newAddedPackages && newAddedPackages.length > 0) {\r\n // Perform added package\r\n const eventObject = buildPackageCartEventObject(\r\n EVENT_CATEGORIES.GTM.addToCart,\r\n newAddedPackages,\r\n packagesTable,\r\n guests,\r\n dates,\r\n resortLocation,\r\n null,\r\n purchaseLocation,\r\n currentPathLocation,\r\n suite,\r\n isCartOpenClose\r\n );\r\n pushEvent(eventObject);\r\n }\r\n // historic and new state. But the event was triggered, need to check the quantity diff\r\n else {\r\n selectedPackagesOld.forEach(pkgOld => {\r\n const pkg = selectedPackages.find(pkg => pkg.packageCode === pkgOld.packageCode);\r\n\r\n const qtyDiff = pkg ? pkg.quantity - pkgOld.quantity : 0;\r\n // if there is a difference between the historic and new information then we should track it\r\n // else ignore it\r\n if (qtyDiff !== 0) {\r\n // 2. Package already added but quantity added. Quanity is positive due the incresed difference\r\n let eventTag = EVENT_CATEGORIES.GTM.addToCart;\r\n\r\n // B. PACKAGE REMOVAL\r\n // 3. Package already added but quantity decreased. Quantity is negative due the decrese difference\r\n if (qtyDiff < 0) {\r\n // Perform removed package\r\n eventTag = EVENT_CATEGORIES.GTM.removeFromCart;\r\n }\r\n\r\n const eventObject = buildPackageCartEventObject(\r\n eventTag,\r\n [pkg],\r\n packagesTable,\r\n guests,\r\n dates,\r\n resortLocation,\r\n Math.abs(qtyDiff),\r\n purchaseLocation,\r\n currentPathLocation,\r\n suite,\r\n isCartOpenClose\r\n );\r\n pushEvent(eventObject);\r\n }\r\n });\r\n }\r\n\r\n // In order to save this event in the history (so we can log it) we should return it!\r\n // otherwise it will be ignored!\r\n return event;\r\n};\r\nonPackagesUpsert.eventType = packagesActionTypes.UPSERT_PACKAGES; // Redux Action Type. Get it from the store\r\n\r\nexport const onPackageDelete = (event, eventsHistory) => {\r\n // load state contains the historic of the state\r\n // this event is triggered before it reaches to the reducer so we\r\n // load the prev saved state\r\n const { packages: packagesOld, guests, dates, currentLodge, router, suite, plans } = store.getState();\r\n const selectedPackages = get(event, 'selectedPackages', []);\r\n const selectedPackagesOld = get(packagesOld, 'selectedPackages', []);\r\n const packagesTable = get(packagesOld, 'planPackages', []);\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n const resortLocation = getResortLocation(currentLodge);\r\n const isCartOpenClose = plans.isCartOpenClose;\r\n\r\n if (!selectedPackagesOld.length > 0 || !packagesTable.length > 0) return;\r\n\r\n let removedPackages = findElementsNotInList(selectedPackagesOld, selectedPackages, 'packageCode');\r\n\r\n if (removedPackages && removedPackages.length > 0) {\r\n // Perform added package\r\n const eventObject = buildPackageCartEventObject(\r\n EVENT_CATEGORIES.GTM.removeFromCart,\r\n removedPackages,\r\n packagesTable,\r\n guests,\r\n dates,\r\n resortLocation,\r\n null,\r\n purchaseLocation,\r\n currentPathLocation,\r\n suite,\r\n isCartOpenClose\r\n );\r\n\r\n pushEvent(eventObject);\r\n }\r\n\r\n // In order to save this event in the history (so we can log it) we should return it!\r\n // otherwise it will be ignored!\r\n return event;\r\n};\r\nonPackageDelete.eventType = packagesActionTypes.DELETE_PACKAGES; // Redux Action Type. Get it from the store\r\n\r\nexport const onOfferAdded = (event, eventsHistory) => {\r\n // load state contains the historic of the state\r\n // this event is triggered before it reaches to the reducer so we\r\n // load the prev saved state\r\n const { guests, dates, currentLodge, router, account, suite, plans } = store.getState();\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n const resortLocation = getResortLocation(currentLodge);\r\n const selectedOffer = event.offerId;\r\n const userOfferList = get(account, 'currentLoggedInUser.offerList', []);\r\n const isCartOpenClose = plans.isCartOpenClose;\r\n let addedOffers = [];\r\n\r\n // If we have offer we add the offers to the newAddedPackages\r\n if (selectedOffer) {\r\n const activeOffer = userOfferList.filter(offer => offer.id === selectedOffer);\r\n\r\n if (activeOffer) {\r\n const formatedOffers = activeOffer.map((offer, index) => {\r\n return {\r\n packageName: 'Bonus deal',\r\n packageCode: `bonusdeal${index}`,\r\n amount: offer.dollarValue,\r\n category: 'bonusDeal',\r\n packageCategory: offer.title,\r\n quantity: 1\r\n };\r\n });\r\n addedOffers = [...formatedOffers];\r\n }\r\n }\r\n\r\n if (addedOffers && addedOffers.length > 0) {\r\n // Perform added package\r\n const eventObject = buildPackageCartEventObject(\r\n EVENT_CATEGORIES.GTM.addToCart,\r\n addedOffers,\r\n null,\r\n guests,\r\n dates,\r\n resortLocation,\r\n null,\r\n purchaseLocation,\r\n currentPathLocation,\r\n suite,\r\n isCartOpenClose\r\n );\r\n\r\n pushEvent(eventObject);\r\n }\r\n};\r\n\r\nonOfferAdded.eventType = offerActionTypes.ADD_OFFER_ACTIVE_TYPE; // Redux Action Type. Get it from the store\r\n\r\nexport const onOfferRemoved = (event, eventsHistory) => {\r\n // load state contains the historic of the state\r\n // this event is triggered before it reaches to the reducer so we\r\n // load the prev saved state\r\n const { guests, dates, currentLodge, router, account, suite, plans } = store.getState();\r\n const currentPathLocation = get(router, 'location.pathname', '');\r\n const purchaseLocation = getCurrentLocation(currentPathLocation);\r\n const resortLocation = getResortLocation(currentLodge);\r\n const selectedOffer = event.offerId;\r\n const userOfferList = get(account, 'currentLoggedInUser.offerList', []);\r\n const isCartOpenClose = plans.isCartOpenClose;\r\n\r\n let addedOffers = [];\r\n\r\n // If we have offer we add the offers to the newAddedPackages\r\n if (selectedOffer) {\r\n const activeOffer = userOfferList.filter(offer => offer.id === selectedOffer);\r\n\r\n if (activeOffer) {\r\n const formatedOffers = activeOffer.map((offer, index) => {\r\n return {\r\n packageName: 'Bonus deal',\r\n packageCode: `bonusdeal${index}`,\r\n amount: offer.dollarValue,\r\n category: 'bonusDeal',\r\n packageCategory: offer.title,\r\n quantity: 1\r\n };\r\n });\r\n addedOffers = [...formatedOffers];\r\n }\r\n }\r\n\r\n if (addedOffers && addedOffers.length > 0) {\r\n // Perform added package\r\n const eventObject = buildPackageCartEventObject(\r\n EVENT_CATEGORIES.GTM.removeFromCart,\r\n addedOffers,\r\n null,\r\n guests,\r\n dates,\r\n resortLocation,\r\n null,\r\n purchaseLocation,\r\n currentPathLocation,\r\n suite,\r\n isCartOpenClose\r\n );\r\n\r\n pushEvent(eventObject);\r\n }\r\n};\r\n\r\nonOfferRemoved.eventType = offerActionTypes.REMOVE_OFFER_ACTIVE_TYPE; // Redux Action Type. Get it from the store\r\n","import { getOfferCodeErrorDetails } from '../../../../utilities/planUtils';\r\nimport { logOfferCodeError } from '../../../../utilities/analytics';\r\nimport offerActionTypes from '../../../../store/componentStores/Offer/offer.types';\r\nimport plansActionTypes from '../../../../store/componentStores/Plans/plans.types';\r\n\r\nexport const onOfferCodeError = ({ type, offerCodeError, errorMessage, getState }) => {\r\n const shouldLogOfferCodeError =\r\n type === offerActionTypes.CREATE_OFFER_ERROR || type === plansActionTypes.GET_PLANS_AVAILABILITY_INFO_SUCCESS;\r\n const isAvailabilityError = type === plansActionTypes.GET_PLANS_AVAILABILITY_INFO_SUCCESS;\r\n const isOfferCodeError = type === offerActionTypes.CREATE_OFFER_ERROR;\r\n\r\n if (!shouldLogOfferCodeError) return;\r\n\r\n if (isAvailabilityError) {\r\n const { dates: { checkinDateSelection, checkoutDateSelection } = {} } = getState();\r\n const { errorCode, offerCode } = offerCodeError || {};\r\n\r\n const offerCodeErrorMessage = getOfferCodeErrorDetails({\r\n offerCode,\r\n offerCodeError: errorCode,\r\n checkIn: checkinDateSelection,\r\n checkOut: checkoutDateSelection\r\n });\r\n\r\n if (offerCodeErrorMessage && offerCodeErrorMessage.message) {\r\n logOfferCodeError(offerCodeErrorMessage.message);\r\n }\r\n }\r\n\r\n if (isOfferCodeError) {\r\n logOfferCodeError(errorMessage);\r\n }\r\n};\r\n","import get from 'lodash-es/get';\r\nimport { GwDatesWrapper } from '../../../../components/_internal_date_/gwDatesWrapper';\r\nimport { getResortLocation } from '../../../../store/componentStores/CurrentLodge/currentLodge.selectors';\r\nimport { getInteractionsData } from '../../../../store/componentStores/Plans/plans.selectors';\r\nimport plansActionTypes from '../../../../store/componentStores/Plans/plans.types';\r\nimport { getPackageInteractionsData } from '../../../../store/componentStores/Suite/suite.selectors';\r\nimport suiteActionTypes from '../../../../store/componentStores/Suite/suite.types';\r\nimport { availabilityTrackError } from '../../../../utilities/applicationInsights';\r\nimport {\r\n DATE_FORMATS,\r\n EVENT_CATEGORIES as GTM_EVENTS,\r\n ROOM_RATES_ERROR_MSG,\r\n SUITE_ERROR_MSG\r\n} from '../../../../utilities/constants';\r\nimport duettoTracking from '../../../../utilities/duetto';\r\nimport {\r\n buildAddToCartEnhancedEcommerceObject,\r\n buildProductClickEnhancedECommerceObject,\r\n buildSearchObject\r\n} from '../analyticsObjectBuilders';\r\nimport { getCurrentLocation } from '../utilities/helpers';\r\n\r\nexport const onPlanListener = ({ type, personalizationRules, personalizationResponses, getState }) => {\r\n const isAvailabilitySuccess = type === plansActionTypes.GET_PLANS_AVAILABILITY_INFO_SUCCESS;\r\n const isAvailabilityError = type === plansActionTypes.GET_PLANS_AVAILABILITY_INFO_ERROR;\r\n\r\n if (isAvailabilitySuccess) {\r\n const { dates, currentLodge } = getState();\r\n const resortLocation = getResortLocation(currentLodge);\r\n if (personalizationRules && personalizationRules.length > 0) {\r\n const interactionsData = getInteractionsData({\r\n personalizationResponses\r\n });\r\n window.dataLayer.push({\r\n event: EVENT_CATEGORIES.personalizationRules,\r\n rules: personalizationRules.join(),\r\n ...(interactionsData && {\r\n aud: interactionsData.userAudience,\r\n rec: interactionsData.recommendationEngine,\r\n recType: interactionsData.recommendationType,\r\n recValue: interactionsData.suiteCategory ? interactionsData.suiteCategory : ''\r\n })\r\n });\r\n }\r\n duettoTracking.trackAvailabilitySearch({\r\n resortLocation,\r\n arrival: dates.checkinDateSelection,\r\n departure: dates.checkoutDateSelection\r\n });\r\n }\r\n\r\n if (isAvailabilityError) {\r\n const { dates, currentLodge } = getState();\r\n const resortLocation = getResortLocation(currentLodge);\r\n duettoTracking.trackAvailabilityDenial({\r\n resortLocation,\r\n arrival: dates.checkinDateSelection,\r\n departure: dates.checkoutDateSelection\r\n });\r\n }\r\n};\r\n\r\nexport const onHighestRatesError = event => {\r\n const { plans } = event.getState();\r\n availabilityTrackError(plans, plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR, SUITE_ERROR_MSG);\r\n return event;\r\n};\r\nonHighestRatesError.eventType = plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR;\r\n\r\nexport const onAvailabilityError = event => {\r\n const { plans } = event.getState();\r\n availabilityTrackError(plans, plansActionTypes.GET_PLANS_AVAILABILITY_INFO_ERROR, ROOM_RATES_ERROR_MSG);\r\n return event;\r\n};\r\nonAvailabilityError.eventType = plansActionTypes.GET_PLANS_AVAILABILITY_INFO_ERROR;\r\n\r\nexport const onDetailedAvailabilityError = event => {\r\n const { suite } = event.getState();\r\n availabilityTrackError(suite, suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR, ROOM_RATES_ERROR_MSG, true);\r\n return event;\r\n};\r\nonDetailedAvailabilityError.eventType = suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR;\r\n\r\nexport const onDetailedAvailabilitySuccess = event => {\r\n const { suite } = event.getState();\r\n const personalizationPackageRules = get(suite, 'personalizationPackageRules');\r\n if (personalizationPackageRules && personalizationPackageRules.length > 0) {\r\n const interactionsData = getPackageInteractionsData(suite);\r\n if (interactionsData && interactionsData.length > 0) {\r\n interactionsData.forEach(recommendation => {\r\n window.dataLayer.push({\r\n event: EVENT_CATEGORIES.personalizationRules,\r\n rules: personalizationPackageRules.join(),\r\n rec: recommendation.recommendationEngine,\r\n recType: recommendation.recommendationType,\r\n recValue: recommendation.packageCode\r\n });\r\n });\r\n } else {\r\n window.dataLayer.push({\r\n event: EVENT_CATEGORIES.personalizationRules,\r\n rules: personalizationPackageRules.join()\r\n });\r\n }\r\n }\r\n};\r\nonDetailedAvailabilitySuccess.eventType = suiteActionTypes.SET_SUITE_PERSONALIZATION_PACKAGES;\r\n\r\nexport const onSuiteSelect = ({ type, eventProps, getState, selectedSuite }) => {\r\n if (type !== suiteActionTypes.SELECT_SUITE || !selectedSuite) return;\r\n\r\n const { dates, currentLodge, guests, router } = getState();\r\n const currentPathLocation = router.location.pathname || '';\r\n const purchaseLocation = eventProps?.customPurchaseLocation\r\n ? eventProps?.customPurchaseLocation\r\n : getCurrentLocation(currentPathLocation);\r\n const resortLocation = getResortLocation(currentLodge);\r\n const position = eventProps?.currentPosition + 1;\r\n\r\n window.dataLayer.push(\r\n buildProductClickEnhancedECommerceObject(\r\n guests.kidsAges,\r\n selectedSuite,\r\n resortLocation,\r\n dates.checkoutDateSelection,\r\n dates.checkinDateSelection,\r\n guests.adultsCount,\r\n guests.kidsCount,\r\n position,\r\n purchaseLocation\r\n )\r\n );\r\n\r\n window.dataLayer.push(\r\n buildAddToCartEnhancedEcommerceObject(\r\n GTM_EVENTS.GTM.addToCart,\r\n guests.kidsAges,\r\n selectedSuite,\r\n resortLocation,\r\n dates.checkoutDateSelection,\r\n dates.checkinDateSelection,\r\n guests.adultsCount,\r\n guests.kidsCount,\r\n position,\r\n purchaseLocation\r\n )\r\n );\r\n};\r\n\r\nexport const onIsCartOpenClose = ({ type, getState }) => {\r\n if (type !== 'SET_PLANS_IS_CART_OPEN_CLOSE') return;\r\n const { plans } = getState();\r\n const clickType = !plans.isCartOpenClose ? 'cart opened' : 'cart closed';\r\n window.dataLayer.push({\r\n event: EVENT_CATEGORIES.customClick,\r\n click_category: 'cart click',\r\n click_type: clickType\r\n });\r\n};\r\n\r\nexport const onCartReturnedPageLinkClicked = ({ type, getState }) => {\r\n if (type !== 'SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN') return;\r\n const { plans } = getState();\r\n const clickType = plans.cartReturnedPageLinkClicked;\r\n window.dataLayer.push({\r\n event: EVENT_CATEGORIES.customClick,\r\n click_category: 'cart_link_click',\r\n click_type: clickType\r\n });\r\n};\r\n\r\nexport const onSearchClick = ({ type, getState }) => {\r\n if (type !== 'GET_PLANS_AVAILABILITY_INFO_SUCCESS') return;\r\n\r\n const { dates, currentLodge, guests, router, offer, account, lodgeLocations, plans } = getState();\r\n const currentPathLocation = router.location.pathname || '';\r\n const searchLocation = getCurrentLocation(currentPathLocation);\r\n const bonusDealValue = () => {\r\n let valueReturned = 0 + account?.currentLoggedInUser?.pointsBalance;\r\n account?.currentLoggedInUser?.offerList?.forEach(offer => {\r\n valueReturned = valueReturned + offer.dollarValue;\r\n });\r\n return (!isNaN(valueReturned) ? valueReturned : 0) + ' points';\r\n };\r\n const searchType = 'reservation';\r\n const resortLocation = getResortLocation(currentLodge);\r\n const lodgeOperaCode = resortLocation ?? '';\r\n const resortLocationName = lodgeLocations?.locationList[lodgeOperaCode]?.url ?? '';\r\n\r\n window.dataLayer.push(\r\n buildSearchObject(\r\n resortLocationName,\r\n searchType,\r\n bonusDealValue(),\r\n searchLocation,\r\n GwDatesWrapper.format(dates?.checkinDateSelection, DATE_FORMATS.default),\r\n GwDatesWrapper.format(dates?.checkoutDateSelection, DATE_FORMATS.default),\r\n guests?.adultsCount,\r\n guests?.kidsCount,\r\n guests?.kidsAges,\r\n offer?.code,\r\n plans.isCaliforniaResident ? 'cali-checked' : 'cali-unchecked'\r\n )\r\n );\r\n};\r\n\r\nconst EVENT_CATEGORIES = {\r\n personalizationRules: 'Personalization Rules',\r\n customClick: 'custom_click'\r\n};\r\n","import values from 'lodash-es/values';\r\nimport * as EventListeners from './ActionListeners/EventSuccessListeners';\r\nimport * as offerCodeListeners from './ActionListeners/offerCodeListeners';\r\nimport * as planListeners from './ActionListeners/planListeners';\r\n\r\nconst listeners = [...values(EventListeners), ...values(offerCodeListeners), ...values(planListeners)];\r\n\r\nexport default listeners;\r\n","import { isDevEnvironment } from '../../../utilities/env';\r\n\r\n/**\r\n * Simple redux middleware to use redux actions as input of tracking!\r\n * this will call the track function from the provided instance of tracker on every action\r\n * and use the action type as the event type and the action payload as the event data\r\n * @param {Object} tracker\r\n */\r\nconst trackingMiddleware = tracker => store => next => action => {\r\n const actionWithOrigin = {\r\n ...action,\r\n ...store,\r\n ...{\r\n from: 'REDUX'\r\n }\r\n };\r\n\r\n // For dev purposes emulate a dataLayer push with a console log so dev can actually see what is the object that eventually will get pushed.\r\n if (isDevEnvironment) {\r\n window.dataLayer = {\r\n push: console.log\r\n };\r\n }\r\n\r\n tracker.trackEvent(actionWithOrigin);\r\n next(action);\r\n};\r\n\r\nexport default trackingMiddleware;\r\n","import { routerMiddleware } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport debounce from 'lodash-es/debounce';\r\nimport ReactGA from 'react-ga';\r\nimport { Tracker } from 'react-tracker';\r\nimport { applyMiddleware, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport trackListeners from '../infrastructure/middleware/analytics/listeners';\r\nimport trackingMiddleware from '../infrastructure/middleware/analytics/reduxTracking';\r\nimport { deleteState, loadState, saveState } from '../infrastructure/middleware/storage/reduxLocalStorage';\r\nimport { getResortLocationUrl } from '../utilities/resortLocation';\r\nimport createRootReducer from './reducers';\r\n\r\nexport const history = createBrowserHistory({\r\n basename: getResortLocationUrl()\r\n});\r\n\r\n// Set page on every router navigation, page view is triggered from GTM\r\nhistory.listen(location => {\r\n ReactGA.set({ page: location.pathname });\r\n});\r\n\r\n// Set location and page on first load\r\nReactGA.set({\r\n location: window.location.href,\r\n page: window.location.pathname + window.location.search\r\n});\r\n\r\nconst composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nconst tracker = new Tracker(trackListeners);\r\n\r\nconst middleware = [thunk, routerMiddleware(history), trackingMiddleware(tracker)];\r\n\r\nconst debounceTimeout = 3600000 * 24; // 1h = 3600000ms, 1 day = 24h\r\n\r\n// WARNING: This will override any values previously saved\r\n// if property doesn't exist in the storage it will be created\r\nconst preloadedStatesDict = {\r\n 'account.changePwdReqIsLoading': false,\r\n 'account.loginHasFailed': false,\r\n 'account.unlockAccountReqIsLoading': false,\r\n 'account.unlockAccountReqHasFailed': false,\r\n 'account.unlockAccountReqHasSucceded': false,\r\n 'account.loginErrorMessage': '',\r\n 'account.unlockAccountReqErrorMessage': '',\r\n 'account.forgotPwdReqIsLoading': false,\r\n 'account.forgotPwdReqHasFinished': false,\r\n 'account.changePwdReqHasFailed': false,\r\n 'account.changePwdReqHasSucceded': false,\r\n 'account.changePwdReqErrorMessage': '',\r\n 'account.creatingNewAccount': false,\r\n 'account.newAccountHasSucceded': false,\r\n 'account.newAccountValidationErrors': null,\r\n 'account.newAccountErrorMessage': '',\r\n 'plans.availabilityReqIsLoading': false,\r\n 'plans.availabilityRequestFailed': false,\r\n 'plans.searchesGetReqIsLoading': false,\r\n 'plans.searchesSetReqIsLoading': false,\r\n 'plans.searchesDelReqIsLoading': false,\r\n 'plans.searchesReqFailed': false,\r\n 'plans.filtersApplied': {\r\n themed: false,\r\n standard: false,\r\n premium: false,\r\n accessibility: false\r\n },\r\n 'plans.sorting': 'rec',\r\n 'plans.sortSuite': '',\r\n 'plans.oldFiltersApplied': {},\r\n 'plans.requiresQualifyingID': false,\r\n 'plans.qualifyingIDError': false,\r\n 'plans.isOpenRatesCalendar': false,\r\n 'plans.availabilityHighestRatesReqIsLoading': false,\r\n 'plans.availabilityHighestRatesRequestFailed': false,\r\n 'plans.getAvailabilityRangeIsLoading': false,\r\n 'plans.getAvailabilityRangeFailed': false,\r\n 'plans.getAvRangeBySuiteIsLoading': false,\r\n 'plans.getAvRangeBySuiteFailed': false,\r\n 'plans.itemQuantityReqIsLoading': false,\r\n 'plans.itemQuantityReqFailed': false,\r\n 'plans.isBookingWidgetFocused': false,\r\n 'plans.isErrorModalAlreadyClosed': false,\r\n 'plans.availabilityErrorMessage': '',\r\n 'plans.searchesErrorMessage': '',\r\n 'plans.getAvailabilityRangeMessage': '',\r\n 'plans.getAvRangeBySuiteErrorMsg': '',\r\n 'plans.status': '',\r\n 'plans.offerCodeError': {},\r\n 'plans.availabilityHighestRatesIsLoading': false,\r\n 'plans.availabilityHighestRatesList': [],\r\n 'plans.availabilityList': [],\r\n 'plans.emailCampaign': {},\r\n 'plans.lcoPackages': {},\r\n 'plans.offerType': '',\r\n 'plans.personalizationResponses': [],\r\n 'plans.promoDescription': '',\r\n 'plans.qualifyingID': '',\r\n 'plans.recentSearchesList': [],\r\n 'plans.selectedSuiteForCalendar': '',\r\n 'plans.selectedSuiteForRange': '',\r\n 'packages.isLoading': false,\r\n 'packages.requestFailed': false,\r\n 'packages.isLateCheckoutDenied': false,\r\n 'packages.isLateCheckoutOffered': false,\r\n 'packages.cabanasAvailabilityList': [],\r\n 'packages.errorMessage': '',\r\n 'packages.status': '',\r\n 'birthdayParty.summaryData': {},\r\n 'birthdayParty.sendingPost': false,\r\n 'birthdayParty.postFailed': false,\r\n 'birthdayParty.postErrorMessage': '',\r\n 'suite.getAvailabilityLoading': false,\r\n 'suite.suiteRateMismatched': false,\r\n 'suite.errorMessage': '',\r\n 'suite.onSuiteSelectionError': '',\r\n 'suite.responseHasPackages': false,\r\n 'addApackage.addedPackages': {},\r\n 'addApackage.flashMessage': '',\r\n 'entities.eventDetails': {},\r\n 'entities.bookingEngineAlert': undefined,\r\n 'entities.suites': undefined,\r\n 'entities.packages': undefined,\r\n 'entities.cabanas': undefined,\r\n 'entities.deal.sendingGet': false,\r\n 'entities.deal.getFailed': false,\r\n 'entities.deal.getErrorMessage': '',\r\n 'entities.reservationDetails.cabanaRequestSuccess': false,\r\n 'entities.reservationDetails.isCabanaLoading': false,\r\n 'entities.reservationDetails.isLoading': false,\r\n 'entities.reservationDetails.requestSuccess': false,\r\n 'globalModal.isVisible': false,\r\n 'globalModal.keyContentComponent': undefined,\r\n 'globalModal.shouldUseGWComponent': false,\r\n 'globalModal.params': {},\r\n 'profile.isLoading': false,\r\n 'profile.isUpdateSuccess': false,\r\n 'profile.user': {},\r\n 'profile.isUpdated': false,\r\n 'offer.description': false,\r\n 'offer.validOffer': false,\r\n 'offer.errorMessage': false,\r\n reservations: {},\r\n 'dayPasses.isLoading': false,\r\n 'dayPasses.isDayPassAvailable': false,\r\n 'dayPasses.availabilityData': [],\r\n 'dayPasses.promoCodeData': null,\r\n 'dayPasses.isDaypassFetching': false,\r\n 'lodgeConfig.configFetchError': '',\r\n 'lodgeConfig.configFetchIsLoading': false,\r\n lodgesLocations: {},\r\n 'leadGen.isProcessing': false,\r\n 'leadGen.isSignupSuccess': false,\r\n 'leadGen.isSignupFailure': false\r\n};\r\n\r\nlet persistedState = loadState(preloadedStatesDict);\r\nexport const localCreateStore = () => {\r\n const store = createStore(\r\n createRootReducer(history), // root reducer with router state\r\n persistedState,\r\n composeEnhancer(\r\n applyMiddleware(\r\n ...middleware\r\n // for dispatching history actions\r\n // ... other middlewares ...\r\n )\r\n )\r\n );\r\n\r\n return store;\r\n};\r\n\r\nexport const store = localCreateStore();\r\n\r\nstore.subscribe(\r\n debounce(() => {\r\n deleteState();\r\n console.log('Storage deleted');\r\n }, debounceTimeout)\r\n);\r\n\r\nstore.subscribe(\r\n debounce(() => {\r\n const state = store.getState();\r\n // We should not persist router state\r\n const { router, ...stateToPersist } = state;\r\n saveState(stateToPersist, preloadedStatesDict);\r\n }, 100)\r\n);\r\n","import styled from 'styled-components';\r\nimport {\r\n space,\r\n width,\r\n color,\r\n alignItems,\r\n justifyContent,\r\n flexWrap,\r\n border,\r\n flexDirection,\r\n propTypes,\r\n alignSelf,\r\n borderTop,\r\n borderBottom,\r\n minWidth,\r\n maxWidth,\r\n minHeight,\r\n flex,\r\n background,\r\n borderRadius,\r\n overflow,\r\n boxShadow,\r\n style,\r\n height\r\n} from 'styled-system';\r\nimport theme from './themes/theme';\r\n\r\nconst flexGrow = style({\r\n prop: 'flexGrow',\r\n cssProperty: 'flex-grow'\r\n});\r\n\r\nconst position = style({\r\n prop: 'position',\r\n cssProperty: 'position'\r\n});\r\n\r\nconst Flex = styled.div`\r\n display:flex;\r\n gap: ${({ gap }) => `${gap}`};\r\n ${space} ${width} ${color} ${overflow} ${alignItems} ${justifyContent} ${flexWrap} ${flexDirection} ${border} ${alignSelf} ${minHeight} ${minWidth} ${maxWidth} ${flex} ${background} ${flexGrow} ${borderRadius} ${borderTop} ${borderBottom} ${boxShadow} ${height} ${position} ;\r\n`;\r\n\r\nFlex.defaultProps = {\r\n theme\r\n};\r\n\r\nFlex.propTypes = {\r\n ...propTypes.space,\r\n ...propTypes.width,\r\n ...propTypes.color,\r\n ...propTypes.alignItems,\r\n ...propTypes.justifyContent,\r\n ...propTypes.flexWrap,\r\n ...propTypes.flexDirection,\r\n ...propTypes.border,\r\n ...propTypes.borderTop,\r\n ...propTypes.borderBottom,\r\n ...propTypes.alignSelf,\r\n ...propTypes.minWidth,\r\n ...propTypes.maxWidth,\r\n ...propTypes.minHeight,\r\n ...propTypes.flex,\r\n ...propTypes.background,\r\n ...propTypes.borderRadius,\r\n ...boxShadow.propTypes,\r\n ...height.propTypes\r\n};\r\n\r\nFlex.displayName = 'Flex';\r\n\r\nexport default Flex;\r\n","//Account reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport accountActionTypes from './account.types';\r\n\r\nconst INITIAL_STATE = {\r\n forgotPwdReqIsLoading: false,\r\n forgotPwdReqHasFinished: false,\r\n changePwdReqIsLoading: false,\r\n changePwdReqHasFailed: false,\r\n changePwdReqHasSucceded: false,\r\n changePwdReqErrorMessage: '',\r\n userIsLoggedIn: false,\r\n creatingNewAccount: false,\r\n newAccountHasSucceded: false,\r\n newAccountValidationErrors: null,\r\n newAccountErrorMessage: '',\r\n accountModalIsOpen: false,\r\n loginErrorMessage: '',\r\n loginHasFailed: false,\r\n currentLoggedInUser: null,\r\n unlockAccountReqIsLoading: false,\r\n unlockAccountReqHasFailed: false,\r\n unlockAccountReqHasSucceded: false,\r\n unlockAccountReqErrorMessage: ''\r\n};\r\n\r\nconst accountReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n // Account information reducers\r\n switch (action.type) {\r\n case accountActionTypes.POST_ACCOUNT_FORGOT_PWD_INFO:\r\n return {\r\n ...state,\r\n forgotPwdReqIsLoading: true,\r\n forgotPwdReqHasFinished: false,\r\n forgotPwdError: false\r\n };\r\n // The request is currently running\r\n case accountActionTypes.POST_ACCOUNT_FORGOT_PWD_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n forgotPwdReqIsLoading: false,\r\n forgotPwdReqHasFinished: true,\r\n forgotPwdError: false\r\n };\r\n case accountActionTypes.POST_ACCOUNT_FORGOT_PWD_INFO_FAILURE:\r\n return {\r\n ...state,\r\n forgotPwdReqIsLoading: false,\r\n forgotPwdReqHasFinished: false,\r\n forgotPwdError: action.error\r\n };\r\n // CHANGE PASSWORD\r\n // Post to change password request succeded\r\n case accountActionTypes.POST_ACCOUNT_CHANGE_PWD_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n changePwdReqIsLoading: false,\r\n changePwdReqHasFailed: false,\r\n changePwdReqHasSucceded: true,\r\n forgotPwdErrorMessage: ''\r\n };\r\n // The request is currently running\r\n case accountActionTypes.POST_ACCOUNT_CHANGE_PWD_INFO_LOADING:\r\n return {\r\n ...state,\r\n changePwdReqIsLoading: action.changePwdReqIsLoading\r\n };\r\n // Post to change password request failed\r\n case accountActionTypes.POST_ACCOUNT_CHANGE_PWD_INFO_ERROR:\r\n return {\r\n ...state,\r\n changePwdReqIsLoading: false,\r\n changePwdReqHasFailed: true,\r\n changePwdReqHasSucceded: false,\r\n changePwdReqErrorMessage: action.changePwdReqErrorMessage\r\n };\r\n // Set if user is already logged in\r\n case accountActionTypes.CURRENT_ACCOUNT_USER_IS_LOGGED_IN:\r\n return {\r\n ...state,\r\n userIsLoggedIn: action.userIsLoggedIn\r\n };\r\n\r\n case accountActionTypes.CURRENT_ACCOUNT_LOGGED_IN_USER:\r\n return {\r\n ...state,\r\n currentLoggedInUser: action.currentLoggedInUser\r\n };\r\n\r\n case accountActionTypes.UPDATE_ACCOUNT_USER_POINTS_AND_OFFERS:\r\n return {\r\n ...state,\r\n currentLoggedInUser: {\r\n ...state.currentLoggedInUser,\r\n pointsBalance: action.pointsBalance,\r\n offerList: action.offerList\r\n }\r\n };\r\n\r\n // A new account is being created\r\n case accountActionTypes.POST_ACCOUNT_NEW_LOADING:\r\n return {\r\n ...state,\r\n creatingNewAccount: action.creatingNewAccount\r\n };\r\n // The new account request has successfully finished\r\n case accountActionTypes.POST_ACCOUNT_NEW_SUCCESS:\r\n return {\r\n ...state,\r\n newAccountHasSucceded: true,\r\n creatingNewAccount: false,\r\n newAccountValidationErrors: null,\r\n newAccountErrorMessage: ''\r\n };\r\n // The new account request has successfully finished\r\n case accountActionTypes.POST_ACCOUNT_NEW_ERROR:\r\n return {\r\n ...state,\r\n newAccountHasSucceded: false,\r\n creatingNewAccount: false,\r\n newAccountValidationErrors: action.newAccountValidationErrors,\r\n newAccountErrorMessage: action.newAccountErrorMessage\r\n };\r\n // Reset all values to their initial state\r\n case accountActionTypes.RESET_ACCOUNT_NEW_TO_INITIAL_STATE:\r\n return {\r\n ...state,\r\n creatingNewAccount: false,\r\n newAccountHasSucceded: false,\r\n newAccountValidationErrors: null,\r\n newAccountErrorMessage: ''\r\n };\r\n // Set an login error\r\n case accountActionTypes.LOGIN_ACCOUNT_ERROR_TYPE:\r\n return {\r\n ...state,\r\n loginErrorMessage: action.loginErrorMessage,\r\n loginHasFailed: true\r\n };\r\n\r\n // post to unlock account request is succeded.\r\n case accountActionTypes.POST_ACCOUNT_UNLOCK_SUCCESS:\r\n return {\r\n ...state,\r\n unlockAccountReqIsLoading: false,\r\n unlockAccountReqHasFailed: false,\r\n unlockAccountReqHasSucceded: true,\r\n unLockAccountErrorMessage: ''\r\n };\r\n\r\n // The request is currently running\r\n case accountActionTypes.POST_ACCOUNT_UNLOCK_LOADING:\r\n return {\r\n ...state,\r\n unlockAccountReqIsLoading: action.unlockAccountReqIsLoading\r\n };\r\n\r\n // Post to unlock account request failed\r\n case accountActionTypes.POST_ACCOUNT_UNLOCK_ERROR:\r\n return {\r\n ...state,\r\n unlockAccountReqIsLoading: false,\r\n unlockAccountReqHasFailed: true,\r\n unlockAccountReqHasSucceded: false,\r\n unlockAccountReqErrorMessage: action.unlockAccountReqErrorMessage\r\n };\r\n //Reset pw feedback\r\n case accountActionTypes.RESET_ACCOUNT_PW_FEEDBACK:\r\n return {\r\n ...state,\r\n changePwdReqHasFailed: false,\r\n changePwdReqHasSucceded: false\r\n };\r\n //Update Loyalty Flagh\r\n case accountActionTypes.LOYALTY_ACCOUNT_OPT_IN:\r\n return {\r\n ...state,\r\n currentLoggedInUser: { ...state.currentLoggedInUser, loyaltyOptIn: action.loyaltyOptIn }\r\n };\r\n //Update currentLoggedInUser with the memberId and referralCode\r\n case accountActionTypes.UPDATE_ACCOUNT_MEMBER_ID_AND_REFERRAL_CODE:\r\n return {\r\n ...state,\r\n currentLoggedInUser: {\r\n ...state.currentLoggedInUser,\r\n loyaltyMemberId: action.loyaltyMemberId,\r\n loyaltyReferralCode: action.loyaltyReferralCode\r\n }\r\n };\r\n\r\n // Reset all account methods\r\n case accountActionTypes.RESET_ACCOUNT_METHODS:\r\n return {\r\n forgotPwdReqIsLoading: false,\r\n forgotPwdReqHasFinished: false,\r\n changePwdReqIsLoading: false,\r\n changePwdReqHasFailed: false,\r\n changePwdReqHasSucceded: false,\r\n changePwdReqErrorMessage: '',\r\n creatingNewAccount: false,\r\n newAccountHasSucceded: false,\r\n newAccountValidationErrors: null,\r\n newAccountErrorMessage: '',\r\n loginErrorMessage: '',\r\n loginHasFailed: false,\r\n unlockAccountReqIsLoading: false,\r\n unlockAccountReqHasFailed: false,\r\n unlockAccountReqHasSucceded: false,\r\n unlockAccountReqErrorMessage: ''\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default accountReducer;\r\n","import { combineReducers } from 'redux';\r\nimport addAPackageActionTypes from './addAPackage.types';\r\n\r\nconst addedPackages = (state = {}, action) => {\r\n switch (action.type) {\r\n case addAPackageActionTypes.ADD_ADD_A_PACKAGE:\r\n return {\r\n ...state,\r\n [action.id]: {\r\n id: action.id,\r\n value: action.value,\r\n options: action.options,\r\n chargeType: action.chargeType\r\n }\r\n };\r\n case addAPackageActionTypes.REMOVE_ADD_A_PACKAGE:\r\n const { [action.id]: deletedItem, ...newState } = state;\r\n return newState;\r\n case addAPackageActionTypes.CLEAR_ADD_A_PACKAGE_ALL_ADDED_PACKAGES:\r\n return {};\r\n case addAPackageActionTypes.SET_ADD_A_PACKAGE_A_CABANA:\r\n return {\r\n ...state,\r\n [action.id]: {\r\n id: action.id,\r\n item: action.item\r\n }\r\n };\r\n case addAPackageActionTypes.REMOVE_ADD_A_PACKAGE_CABANA:\r\n const { [action.id]: deletedCabana, ...newCabanasState } = state;\r\n return newCabanasState;\r\n case addAPackageActionTypes.REMOVE_ADD_A_PACKAGE_OTHER_CABANAS:\r\n const filteredCabanaPkgs = {};\r\n Object.keys(state).forEach(key => {\r\n if (action.items.includes(key)) {\r\n filteredCabanaPkgs[key] = state[key];\r\n }\r\n });\r\n return filteredCabanaPkgs;\r\n case addAPackageActionTypes.CLEAR_ADD_A_PACKAGE_PACKAGES_BY_CODES:\r\n return { ...action.addedPackages };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst flashMessage = (state = '', action) => {\r\n switch (action.type) {\r\n case addAPackageActionTypes.SET_ADD_A_PACKAGE_FLASH_MESSAGE:\r\n return action.message;\r\n case addAPackageActionTypes.CLEAR_ADD_A_PACKAGE_FLASH_MESSAGE:\r\n return '';\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst addAPackageReducer = combineReducers({\r\n addedPackages,\r\n flashMessage\r\n});\r\n\r\nexport default addAPackageReducer;\r\n","import { initializeState } from '../../../utilities/storageUtils';\r\nimport birthdayPartyActionTypes from './birthdayParty.types';\r\n\r\nconst INITIAL_STATE = {\r\n isLoadingBirthdayAvailabilityData: false,\r\n birthdayAvailabilityData: null,\r\n birthdayAvailabilityDataError: '',\r\n partyDate: null,\r\n partyGuestsCount: 10,\r\n partyTime: null,\r\n partyAdults: 2,\r\n partyKids: 8,\r\n partyInfant: null,\r\n partySpectators: null,\r\n numberOfExtraGuests: null,\r\n selectedParty: null,\r\n isDatePickerOpen: false,\r\n isLoadingCreateBirthdayReservation: false,\r\n partyReservationError: null,\r\n guestsOfHonor: []\r\n};\r\n\r\nconst birthdayPartyReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n // Get Book information reducers\r\n switch (action.type) {\r\n case birthdayPartyActionTypes.FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA:\r\n return {\r\n ...state,\r\n isLoadingBirthdayAvailabilityData: true\r\n };\r\n case birthdayPartyActionTypes.FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_SUCCESS:\r\n return {\r\n ...state,\r\n isLoadingBirthdayAvailabilityData: false,\r\n birthdayAvailabilityData: action.birthdayAvailabilityData,\r\n birthdayAvailabilityDataError: null\r\n };\r\n case birthdayPartyActionTypes.FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_ERROR:\r\n return {\r\n ...state,\r\n isLoadingBirthdayAvailabilityData: false,\r\n birthdayAvailabilityDataError: action.birthdayAvailabilityDataError\r\n };\r\n\r\n case birthdayPartyActionTypes.SET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA:\r\n return {\r\n ...state,\r\n partyDate: action.partyDate,\r\n partyGuestsCount: action.partyGuestsCount,\r\n partyTime: action.partyTime,\r\n partyAdults: action.partyAdults,\r\n partyKids: action.partyKids,\r\n partyInfant: action.partyInfant,\r\n partySpectators: action.partySpectators,\r\n ...(!isNaN(action.numberOfExtraGuests) && { numberOfExtraGuests: action.numberOfExtraGuests })\r\n };\r\n\r\n case birthdayPartyActionTypes.RESET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA:\r\n return {\r\n ...state,\r\n partyDate: null,\r\n partyGuestsCount: null,\r\n partyTime: null,\r\n partyAdults: null,\r\n partyKids: null,\r\n partyInfant: null,\r\n partySpectators: null,\r\n numberOfExtraGuests: null,\r\n selectedParty: null\r\n };\r\n\r\n case birthdayPartyActionTypes.SET_SELECTED_BIRTHDAY_PARTY:\r\n return {\r\n ...state,\r\n selectedParty: action.selectedParty\r\n };\r\n\r\n case birthdayPartyActionTypes.TOGGLE_BIRTHDAY_PARTY_DATE_PICKER:\r\n return {\r\n ...state,\r\n isDatePickerOpen: action.isDatePickerOpen\r\n };\r\n\r\n case birthdayPartyActionTypes.IS_LOADING_CREATE_PARTY_BOOKING_RESERVATION:\r\n return {\r\n ...state,\r\n isLoadingCreateBirthdayReservation: true,\r\n partyReservationError: null\r\n };\r\n case birthdayPartyActionTypes.CREATE_PARTY_BOOKING_RESERVATION_SUCCESS:\r\n return {\r\n ...state,\r\n isLoadingCreateBirthdayReservation: false,\r\n partyReservationError: null\r\n };\r\n case birthdayPartyActionTypes.CREATE_PARTY_BOOKING_RESERVATION_ERROR:\r\n return {\r\n ...state,\r\n isLoadingCreateBirthdayReservation: false,\r\n partyReservationError: action.error\r\n };\r\n case birthdayPartyActionTypes.CLEAR_PARTY_BOOKING_RESERVATION:\r\n return {\r\n ...state,\r\n ...INITIAL_STATE\r\n };\r\n case birthdayPartyActionTypes.CLEAR_PARTY_BOOKING_RESERVATION_ERROR:\r\n return {\r\n ...state,\r\n partyReservationError: null\r\n };\r\n case birthdayPartyActionTypes.SET_GUEST_OF_HONOR:\r\n return {\r\n ...state,\r\n guestsOfHonor: action.guestsOfHonor\r\n };\r\n case birthdayPartyActionTypes.CLEAR_PARTY_DATE:\r\n return {\r\n ...state,\r\n partyDate: null\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default birthdayPartyReducer;\r\n","// Booking Engine Alert reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport bookingEngineAlertActionTypes from './bookingEngineAlertEntity.types';\r\n\r\nconst INITIAL_STATE = {\r\n data: [],\r\n isLoading: false,\r\n hasError: false,\r\n errorMessage: ''\r\n};\r\n\r\nconst bookingEngineAlertReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case bookingEngineAlertActionTypes.SET_BOOK_ENGINE_ALERT_IS_SUCCESSFUL:\r\n return {\r\n ...state,\r\n data: action.data,\r\n isLoading: false,\r\n hasError: false,\r\n errorMessage: ''\r\n };\r\n\r\n case bookingEngineAlertActionTypes.SET_BOOK_ENGINE_ALERT_IS_LOADING:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n hasError: false,\r\n errorMessage: ''\r\n };\r\n\r\n case bookingEngineAlertActionTypes.SET_BOOK_ENGINE_ALERT_GOT_ERROR:\r\n return {\r\n ...state,\r\n data: [],\r\n isLoading: true,\r\n hasError: true,\r\n errorMessage: action.errorMessage\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default bookingEngineAlertReducer;\r\n","// Import types\r\nimport cartActionTypes from './cart.types';\r\n\r\n// Initial State\r\nconst INITIAL_STATE = {\r\n cartResortLocation: null,\r\n selectedSuite: null,\r\n selectedPackages: [],\r\n cartLastVisitedStep: null,\r\n expiredCart: false\r\n};\r\n\r\nconst cartReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case cartActionTypes.SET_CART_RESORT_LOCATION:\r\n return {\r\n ...state,\r\n cartResortLocation: action.cartResortLocation\r\n };\r\n case cartActionTypes.RESET_CART_RESORT_LOCATION:\r\n return {\r\n ...state,\r\n cartResortLocation: null\r\n };\r\n case cartActionTypes.SET_CART_SUITE:\r\n return {\r\n ...state,\r\n selectedSuite: action.cartSuite\r\n };\r\n case cartActionTypes.SET_CART_PACKAGES:\r\n return {\r\n ...state,\r\n selectedPackages: action.cartPackages\r\n };\r\n case cartActionTypes.SET_CART_LAST_VISITED_STEP:\r\n return {\r\n ...state,\r\n cartLastVisitedStep: action.cartLastVisitedStep\r\n };\r\n case cartActionTypes.SET_EXPIRED_CART:\r\n return {\r\n ...state,\r\n expiredCart: action.expiredCart\r\n };\r\n case cartActionTypes.RESET_EXPIRED_CART:\r\n return {\r\n ...state,\r\n expiredCart: action.expiredCart\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default cartReducer;\r\n","// Current Lodge Reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport currentLodgeActionTypes from './currentLodge.types';\r\n\r\nconst INITIAL_STATE = {\r\n resortLocation: '',\r\n resortLocationUrl: '',\r\n resortData: {}\r\n};\r\n\r\nconst currentLodgeReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case currentLodgeActionTypes.UPDATE_CURRENT_LODGE:\r\n return {\r\n ...state,\r\n resortData: action.resortData,\r\n resortLocation: action.resortData.operaCode,\r\n resortLocationUrl: action.resortLocationUrl\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default currentLodgeReducer;\r\n","import { initializeState } from '../../../utilities/storageUtils';\r\nimport datesActionTypes from './dates.types';\r\n\r\nconst INITIAL_STATE = {\r\n checkinDateSelection: undefined,\r\n checkoutDateSelection: undefined,\r\n isFetchingSipDates: false,\r\n sipDates: {},\r\n sipRatesError: null\r\n};\r\n\r\nconst datesReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n switch (action.type) {\r\n case datesActionTypes.UPDATE_DATES:\r\n return {\r\n ...state,\r\n checkinDateSelection: action.checkinDateSelection,\r\n checkoutDateSelection: action.checkoutDateSelection\r\n };\r\n case datesActionTypes.CLEAR_DATES:\r\n return INITIAL_STATE;\r\n case datesActionTypes.FETCHING_DATES_SIP:\r\n return {\r\n ...state,\r\n isFetchingSipDates: action.fetchSipDates\r\n };\r\n case datesActionTypes.UPDATE_DATES_SIP:\r\n return {\r\n ...state,\r\n sipDates: action.sipDates\r\n };\r\n case datesActionTypes.UPDATE_DATES_SIP_ERROR:\r\n return {\r\n ...state,\r\n sipRatesError: action.sipStatus\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default datesReducer;\r\n","// DayPasses reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport dayPassActionTypes from './dayPasses.types';\r\n\r\nconst INITIAL_STATE = {\r\n numberOfGuests: 0,\r\n arrivalDate: null,\r\n selectedTitle: '',\r\n selectedRate: 0,\r\n selectedTaxesAndFees: 0,\r\n selectedRateCode: '',\r\n selectedItemCode: '',\r\n selectedDescription: '',\r\n promoCode: '',\r\n qualifyingId: '',\r\n isLoading: false, //remove on next realease\r\n isDayPassAvailable: false, //remove on next realease\r\n item: {\r\n rate: '',\r\n itemCode: '',\r\n rateCode: '',\r\n baseRate: 0\r\n },\r\n availabilityData: [],\r\n promoCodeData: null,\r\n isDaypassFetching: false,\r\n daypassCalendarMonth: null,\r\n parkingFee: 0,\r\n resortFee: 0,\r\n sustainabilityFee: 0,\r\n taxesAndFees: 0\r\n};\r\n\r\nconst dayPassesReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case dayPassActionTypes.UPDATE_DAYPASSES_LOADING:\r\n return {\r\n ...state,\r\n item: {\r\n ...state.item\r\n },\r\n isLoading: action.isLoading\r\n };\r\n\r\n case dayPassActionTypes.IS_DAYPASSES_AVAILABLE:\r\n return {\r\n ...state,\r\n item: {\r\n ...state.item\r\n },\r\n isDayPassAvailable: action.isDayPassAvailable\r\n };\r\n\r\n case dayPassActionTypes.UPDATE_DAYPASSES_METADATA:\r\n return {\r\n ...state,\r\n item: {\r\n ...action.item\r\n }\r\n };\r\n\r\n case dayPassActionTypes.SET_DAYPASSES:\r\n return {\r\n ...state,\r\n arrivalDate: action.arrivalDate,\r\n numberOfGuests: action.numberOfGuests,\r\n selectedTitle: action.selectedTitle,\r\n selectedRate: action.selectedRate,\r\n selectedTaxesAndFees: action.selectedTaxesAndFees,\r\n selectedItemCode: action.selectedItemCode,\r\n selectedRateCode: action.selectedRateCode,\r\n promoCode: action.promoCode,\r\n qualifyingId: action.qualifyingId,\r\n selectedDescription: action.selectedDescription,\r\n parkingFee: action.parkingFee,\r\n resortFee: action.resortFee,\r\n sustainabilityFee: action.sustainabilityFee,\r\n taxesAndFees: action.totalTaxesAndFees,\r\n item: [action.item]\r\n };\r\n\r\n case dayPassActionTypes.SET_DAYPASSES_AVAILABLE_DATES:\r\n // We get the month of the request if the request has days\r\n const date =\r\n action.availabilityData.dayPasses?.length > 0 ? new Date(action.availabilityData.dayPasses[0].date) : null;\r\n const monthFromAPI = date ? date.getMonth() + 1 : null;\r\n const isLastInfo = monthFromAPI === action.date.month && date.getFullYear() === action.date.year;\r\n\r\n return {\r\n ...state,\r\n promoCodeData: action.availabilityData.promotion ? action.availabilityData.promotion : '',\r\n ...(isLastInfo && {\r\n availabilityData: action.availabilityData.dayPasses ? action.availabilityData.dayPasses : []\r\n })\r\n };\r\n case dayPassActionTypes.UPDATE_DAYPASSES_FETCHING:\r\n return {\r\n ...state,\r\n isDaypassFetching: action.fetchData.isDaypassFetching,\r\n daypassCalendarMonth: action.fetchData.isDaypassFetching ? action.fetchData.monthToFetch : null,\r\n ...(action.fetchData.isDaypassFetching && { availabilityData: [] })\r\n };\r\n\r\n default:\r\n }\r\n\r\n return state;\r\n};\r\n\r\nexport default dayPassesReducer;\r\n","// Deal reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport dealActionTypes from './deal.types';\r\n\r\nconst INITIAL_STATE = {\r\n dealData: {},\r\n sendingGet: false,\r\n getFailed: false,\r\n getErrorMessage: ''\r\n};\r\n\r\nconst dealReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n // Get Book information reducers\r\n switch (action.type) {\r\n // Post data request succeded\r\n case dealActionTypes.GET_DEAL_SUCCESS:\r\n return {\r\n ...state,\r\n dealData: action.dealData,\r\n sendingGet: false,\r\n getFailed: false,\r\n getErrorMessage: ''\r\n };\r\n // The request is currently running\r\n case dealActionTypes.GET_DEAL_LOADING:\r\n return {\r\n ...state,\r\n sendingGet: action.sendingGet\r\n };\r\n // The Post request failed\r\n case dealActionTypes.GET_DEAL_ERROR:\r\n return {\r\n ...state,\r\n dealData: {},\r\n sendingGet: false,\r\n getFailed: true,\r\n getErrorMessage: action.getErrorMessage\r\n };\r\n\r\n // handle the offerCode clear event\r\n case dealActionTypes.CLEAR_DEAL:\r\n return {\r\n ...state,\r\n dealData: {}\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default dealReducer;\r\n","// Event Calendar reducer\r\n\r\nimport { combineReducers } from 'redux';\r\nimport eventCalendarActionTypes from './eventCalendar.types';\r\n\r\nconst data = (state = {}, action) => {\r\n switch (action.type) {\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_SUCCESS:\r\n return action.response;\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_ERROR:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst errorMessage = (state = null, action) => {\r\n switch (action.type) {\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_ERROR:\r\n return action.message;\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_SUCCESS:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst requestSuccess = (state = false, action) => {\r\n switch (action.type) {\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_SUCCESS:\r\n return true;\r\n case eventCalendarActionTypes.GET_EVENT_CALENDAR_ERROR:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst eventCalendarReducer = combineReducers({\r\n requestSuccess,\r\n data,\r\n errorMessage\r\n});\r\n\r\nexport default eventCalendarReducer;\r\n","import flowActionTypes from './flow.types';\r\n\r\nconst initialState = {\r\n loading: false,\r\n error: null,\r\n flowSteps: null,\r\n flowName: null,\r\n flowAudience: null,\r\n flowResortLocation: null,\r\n flowLastUpdated: null\r\n};\r\n\r\nconst sanitizeFlowScreens = flow => {\r\n const duplicatedFlow = { ...flow };\r\n if (duplicatedFlow.screens) {\r\n const formattedScreens =\r\n duplicatedFlow.screens?.map(screen => {\r\n const newScreen = { ...screen };\r\n Object.keys(screen).forEach(k => {\r\n if (typeof newScreen[k] === 'string') {\r\n newScreen[k] = newScreen[k].trim();\r\n }\r\n });\r\n return newScreen;\r\n }) ?? [];\r\n\r\n duplicatedFlow.screens = formattedScreens;\r\n\r\n return duplicatedFlow;\r\n } else {\r\n return flow;\r\n }\r\n};\r\n\r\nconst flowStepsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case flowActionTypes.FETCH_FLOW_STEPS_REQUEST:\r\n return { ...state, loading: true, error: null };\r\n case flowActionTypes.FETCH_FLOW_STEPS_SUCCESS:\r\n return {\r\n ...state,\r\n loading: false,\r\n flowSteps: sanitizeFlowScreens(action.payload.data.flow),\r\n flowName: action.payload.flowName,\r\n flowAudience: action.payload.flowAudience,\r\n flowResortLocation: action.payload.resortLocation,\r\n flowLastUpdated: action.payload.flowLastUpdated\r\n };\r\n case flowActionTypes.FETCH_FLOW_STEPS_FAILURE:\r\n return { ...state, loading: false, error: action.payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default flowStepsReducer;\r\n","// Import types\r\nimport geolocationActionTypes from './geolocation.types';\r\n\r\n// Initial State\r\nconst INITIAL_STATE = {\r\n geolocationStateCode: '',\r\n geolocationClosestLodge: '',\r\n geolocationErrorMsg: null\r\n};\r\n\r\nconst geolocationReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case geolocationActionTypes.GET_GEOLOCATION:\r\n return {\r\n ...state,\r\n geolocationStateCode: action.geolocationData.stateCode,\r\n geolocationClosestLodge: action.geolocationData.closestLodge\r\n };\r\n case geolocationActionTypes.GET_GEOLOCATION_ERROR:\r\n return {\r\n ...state,\r\n geolocationErrorMsg: action.geolocationData.err\r\n };\r\n case geolocationActionTypes.GET_GEOLOCATION_CLEAR:\r\n return {\r\n ...state,\r\n geolocationStateCode: INITIAL_STATE.geolocationStateCode,\r\n geolocationClosestLodge: INITIAL_STATE.geolocationClosestLodge,\r\n geolocationErrorMsg: INITIAL_STATE.geolocationErrorMsg\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default geolocationReducer;\r\n","// Global Modal reducer\r\n\r\nimport globalModalActionTypes from './globalModal.types';\r\n\r\nconst INITIAL_STATE = {\r\n isVisible: false,\r\n keyContentComponent: undefined,\r\n shouldUseGWComponent: false,\r\n params: {}\r\n};\r\n\r\nconst globalModalReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case globalModalActionTypes.OPEN_GLOBAL_MODAL:\r\n return {\r\n isVisible: true,\r\n keyContentComponent: action.payload.keyContentComponent,\r\n shouldUseGWComponent: action.payload.shouldUseGWComponent,\r\n params: action.payload.params\r\n };\r\n case globalModalActionTypes.CLOSE_GLOBAL_MODAL:\r\n return {\r\n isVisible: false,\r\n keyContentComponent: undefined,\r\n shouldUseGWComponent: false,\r\n params: {}\r\n };\r\n case globalModalActionTypes.UPDATE_GLOBAL_MODAL_PARAMS:\r\n return {\r\n ...state,\r\n params: {\r\n ...state.params,\r\n ...action.payload.params\r\n }\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default globalModalReducer;\r\n","// Guests reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport guestsModalActionTypes from './guests.types';\r\n\r\nconst INITIAL_STATE = { adultsCount: 0, kidsCount: 0, kidsAges: [] };\r\n\r\nconst guestsReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case guestsModalActionTypes.SET_GUESTS_ADULTS_COUNT:\r\n return {\r\n ...state,\r\n adultsCount: action.count\r\n };\r\n case guestsModalActionTypes.SET_GUESTS_KIDS_COUNT:\r\n return {\r\n ...state,\r\n kidsCount: action.count\r\n };\r\n case guestsModalActionTypes.SET_GUESTS_KIDS_AGES:\r\n return {\r\n ...state,\r\n kidsAges: action.kidsAges\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default guestsReducer;\r\n","// IEModal reducer\r\n\r\nimport ieModalActionTypes from './ieModal.types';\r\n\r\nconst INITIAL_STATE = {\r\n isAlreadyShown: false\r\n};\r\n\r\nconst ieModalReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case ieModalActionTypes.SET_IEMODAL_IS_ALREADY_SHOWN:\r\n return {\r\n ...state,\r\n isAlreadyShown: action.isAlreadyShown\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default ieModalReducer;\r\n","// LeadGen reducer\r\n\r\nimport leadGenActionTypes from './leadGen.types';\r\n\r\nconst INITIAL_STATE = {\r\n isProcessing: false,\r\n isSignupSuccess: false,\r\n isSignupFailure: false,\r\n isAlreadyShown: false\r\n};\r\n\r\nconst leadGenReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case leadGenActionTypes.IS_LEADGEN_PROCESSING_TYPE:\r\n return {\r\n ...state,\r\n isProcessing: action.isProcessing,\r\n isSignupSuccess: action.isSignupSuccess,\r\n isSignupFailure: action.isSignupFailure,\r\n isAlreadyShown: action.isAlreadyShown\r\n };\r\n case leadGenActionTypes.SET_LEADGEN_IS_ALREADY_SHOWN:\r\n return {\r\n ...state,\r\n isAlreadyShown: action.isAlreadyShown\r\n };\r\n case leadGenActionTypes.RESET_LEADGEN_STATUS:\r\n return {\r\n ...state,\r\n isProcessing: action.isProcessing,\r\n isSignupSuccess: action.isSignupSuccess,\r\n isSignupFailure: action.isSignupFailure\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default leadGenReducer;\r\n","// Lodge Config Reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport lodgeConfigActionTypes from './lodgeConfig.types';\r\n\r\nconst INITIAL_STATE = {\r\n configFetchIsLoading: false,\r\n configFetchError: '',\r\n additionalPersonAmount: 0,\r\n affirmPubKey: '',\r\n filters: null,\r\n isFetchRestrictionsEnabled: false,\r\n isHighestRatesEnabled: false,\r\n isRateCalEnabled: false,\r\n updateSearchFullPageRefresh: false,\r\n isLoyaltyEnabled: false,\r\n loyaltyPointsToEarn: '',\r\n isInPrimerState: false,\r\n isOffersEnabled: false,\r\n loyaltyPointsMultiplier: 0.1,\r\n loyaltyEarnThresholdNights: 2,\r\n isLoyaltyReferralEnabled: false,\r\n isDiningPackagesEnhancedUIEnabled: true,\r\n isDynamicTileEnabled: false,\r\n hideOnlineCheckinText: false,\r\n perNightParkingFee1: '',\r\n perNightParkingFee2: '',\r\n perNightParkingFee3: '',\r\n parkingFeeStartDate: '',\r\n parkingFeeEndDate: '',\r\n clientCardTokenization: false,\r\n creditCardAuthUrl: '',\r\n creditEnabled: false,\r\n affirmEnabled: false,\r\n applePayEnabled: false,\r\n googlePayEnabled: false,\r\n payPalEnabled: false,\r\n amexEnabled: false,\r\n isIFrameEnabled: false,\r\n shouldLeadGenPop: '',\r\n parkingFeeCallout: false,\r\n parkingFeeCalloutTitle: '',\r\n parkingFeeCalloutDescription: '',\r\n bookingSummaryParkingFee: '',\r\n uffTileEnabled: false,\r\n isLoyaltyPointsExpirationOnProfileEnabled: false,\r\n isCartActive: false,\r\n pricePerWaterPass: 0,\r\n isCancelReservationEnabled: false,\r\n isHoldCancelReservationEnabled: false,\r\n isAddGuestsEnabled: false,\r\n isRoomUnbundledRateWPAvailable: false,\r\n beginReservationsDate: null,\r\n maxOccupancy: 0,\r\n newPatchEndpoint: false,\r\n showPackagesInAddGuestsModal: false,\r\n suitePriceIncludedTaxesAndFees: [],\r\n taxAndFeeLabels: '',\r\n birthdayPartyInclusionList: [],\r\n isBdayBookingWidgetActive: false,\r\n beginPartyReservationsDate: null,\r\n partyKidsPerAdultRatio: 4,\r\n partyMaxGuestCount: 20,\r\n minimumBookingDaysRestriction: 3,\r\n maximumBookingDaysRestriction: 90,\r\n isManageYourReservationEnabled: false,\r\n showDiningPageInUFFFlow: false,\r\n showCaliforniaResortFeeVariation: false,\r\n newPricingRulesLodgeList: null,\r\n isLocationQuestionnaireEnabled: false,\r\n isGeolocationEnabled: false,\r\n stickyBottomBookingWidget: false,\r\n ageThreshold: 21,\r\n isLowestRatesRestrictionsEnabled: false,\r\n idMeParameters: null\r\n};\r\n\r\nconst lodgeConfigReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n switch (action.type) {\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG:\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CREDIT_PACKAGE:\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CMP:\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CART:\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG_BOOKING_WIDGET:\r\n case lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET:\r\n return {\r\n ...state,\r\n configFetchIsLoading: action.configFetchIsLoading\r\n };\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING:\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE:\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CMP:\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CART:\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_BOOKING_WIDGET:\r\n case lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET:\r\n return {\r\n ...state,\r\n configFetchError: action.configFetchError\r\n };\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING:\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE:\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CMP:\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CART:\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_BOOKING_WIDGET:\r\n case lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET:\r\n return {\r\n ...state,\r\n configFetchError: ''\r\n };\r\n case lodgeConfigActionTypes.ID_ME_DATA_PARAMETERS:\r\n return {\r\n ...state,\r\n idMeParameters: action.idMeParameters\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING:\r\n return {\r\n ...state,\r\n isLoyaltyEnabled: action.isLoyaltyEnabled,\r\n isInPrimerState: action.isInPrimerState,\r\n isOffersEnabled: action.isOffersEnabled,\r\n loyaltyPointsMultiplier: action.loyaltyPointsMultiplier,\r\n isLoyaltyReferralEnabled: action.isLoyaltyReferralEnabled,\r\n isLoyaltyPointsExpirationOnProfileEnabled: action.isLoyaltyPointsExpirationOnProfileEnabled,\r\n loyaltyPointsToEarn: action.loyaltyPointsToEarn,\r\n loyaltyEarnThresholdNights: action.loyaltyEarnThresholdNights,\r\n isHoldCancelReservationEnabled: action.isHoldCancelReservationEnabled\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PLAN:\r\n return {\r\n ...state,\r\n additionalPersonAmount: action.config.additionalPersonAmount,\r\n affirmPubKey: action.config.affirmPubKey,\r\n filters: action.config.filters,\r\n isFetchRestrictionsEnabled: action.config.isFetchRestrictionsEnabled,\r\n isHighestRatesEnabled: action.config.isHighestRatesEnabled,\r\n isRateCalEnabled: action.config.isRateCalEnabled,\r\n updateSearchFullPageRefresh: action.config.updateSearchFullPageRefresh,\r\n includeResortFeeInSuitePrice: action.includeResortFeeInSuitePrice,\r\n pricePerWaterPass: action.config.pricePerWaterPass,\r\n isRoomUnbundledRateWPAvailable: action.config.isRoomUnbundledRateWPAvailable,\r\n suitePriceIncludedTaxesAndFees: action.config.suitePriceIncludedTaxesAndFees,\r\n showDiningPageInUFFFlow: action.config.showDiningPageInUFFFlow\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CREDIT_PACKAGE:\r\n return {\r\n ...state,\r\n isDiningPackagesEnhancedUIEnabled: action.isDiningPackagesEnhancedUIEnabled\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CMP:\r\n return {\r\n ...state,\r\n isDynamicTileEnabled: action.isDynamicTileEnabled,\r\n hideOnlineCheckinText: action.hideOnlineCheckinText,\r\n parkingFeeCallout: action.parkingFeeCallout,\r\n parkingFeeCalloutTitle: action.parkingFeeCalloutTitle,\r\n parkingFeeCalloutDescription: action.parkingFeeCalloutDescription,\r\n uffTileEnabled: action.uffTileEnabled,\r\n isCancelReservationEnabled: action.isCancelReservationEnabled,\r\n showPackagesInAddGuestsModal: action.showPackagesInAddGuestsModal,\r\n isManageYourReservationEnabled: action.isManageYourReservationEnabled,\r\n isAddGuestsEnabled: action.isAddGuestsEnabled\r\n };\r\n /* ABCD TEST FOR PARKING FEE */\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PAYMENT:\r\n return {\r\n ...state,\r\n perNightParkingFee1: action.perNightParkingFee1,\r\n perNightParkingFee2: action.perNightParkingFee2,\r\n perNightParkingFee3: action.perNightParkingFee3,\r\n parkingFeeStartDate: action.parkingFeeStartDate,\r\n parkingFeeEndDate: action.parkingFeeEndDate,\r\n clientCardTokenization: action.clientCardTokenization,\r\n creditCardAuthUrl: action.creditCardAuthUrl,\r\n creditEnabled: action.creditEnabled,\r\n affirmEnabled: action.affirmEnabled,\r\n applePayEnabled: action.applePayEnabled,\r\n googlePayEnabled: action.googlePayEnabled,\r\n payPalEnabled: action.payPalEnabled,\r\n amexEnabled: action.amexEnabled,\r\n isIFrameEnabled: action.isIFrameEnabled,\r\n taxAndFeeLabels: action.taxAndFeeLabels,\r\n bookingSummaryParkingFee: action.bookingSummaryParkingFee\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_LEADGEN:\r\n return {\r\n ...state,\r\n shouldLeadGenPop: action.shouldLeadGenPop\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_USER_SETTINGS:\r\n return {\r\n ...state,\r\n newPatchEndpoint: action.newPatchEndpoint\r\n };\r\n case lodgeConfigActionTypes.RESET_LODGE_CONFIG:\r\n return {\r\n ...INITIAL_STATE\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CART:\r\n return {\r\n ...state,\r\n isCartActive: action.config.isCartActive\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_BOOKING_WIDGET:\r\n return {\r\n ...state,\r\n beginReservationsDate: action.beginReservationsDate,\r\n maxOccupancy: action.maxOccupancy,\r\n showCaliforniaResortFeeVariation: action.showCaliforniaResortFeeVariation,\r\n newPricingRulesLodgeList: action.newPricingRulesLodgeList,\r\n ageThreshold: action.ageThreshold || state.ageThreshold,\r\n isLowestRatesRestrictionsEnabled: action.isLowestRatesRestrictionsEnabled,\r\n isLocationQuestionnaireEnabled: action.isLocationQuestionnaireEnabled,\r\n isGeolocationEnabled: action.isGeolocationEnabled,\r\n stickyBottomBookingWidget: action.stickyBottomBookingWidget\r\n };\r\n case lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET:\r\n return {\r\n ...state,\r\n isBdayBookingWidgetActive: action.isBdayBookingWidgetActive,\r\n birthdayPartyInclusionList: action.birthdayPartyInclusionList,\r\n beginPartyReservationsDate: action.beginPartyReservationsDate,\r\n partyKidsPerAdultRatio: action.partyKidsPerAdultRatio,\r\n partyMaxGuestCount: action.partyMaxGuestCount,\r\n minimumBookingDaysRestriction: action.minimumBookingDaysRestriction,\r\n maximumBookingDaysRestriction: action.maximumBookingDaysRestriction\r\n };\r\n /* ABCD TEST FOR PARKING FEE */\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default lodgeConfigReducer;\r\n","// Lodge Locations reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport lodgeLocationsActionTypes from './lodgeLocations.types';\r\n\r\nconst INITIAL_STATE = {\r\n lodgesLocationsFetchIsLoading: false,\r\n lodgesLocationsFetchError: '',\r\n locationList: {}\r\n};\r\n\r\nconst lodgeLocationsReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n // Get Resort Locations SUCCESS\r\n case lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_SUCCESS:\r\n return {\r\n ...state,\r\n locationList: action.locationList,\r\n requestFailed: false,\r\n errorMessage: ''\r\n };\r\n // Get Resort Locations LOADING\r\n case lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_LOADING:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading\r\n };\r\n // Get Resort Locations FAIL\r\n case lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_ERROR:\r\n return {\r\n ...state,\r\n locationsList: {},\r\n requestFailed: action.requestFailed,\r\n errorMessage: action.errorMessage\r\n };\r\n case lodgeLocationsActionTypes.CLEAR_LODGE_LOCATIONS_LOADING_CONFIG:\r\n return {\r\n ...state,\r\n errorMessage: ''\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default lodgeLocationsReducer;\r\n","import manageReservationTypes from './managereservation.types';\r\n\r\nconst INITIAL_STATE = {\r\n data: {},\r\n isLoading: false,\r\n errorMessage: null,\r\n requestSuccess: false\r\n};\r\n\r\nconst manageReservationReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case manageReservationTypes.GET_MANAGERESERVATIONDETAILS_REQUEST:\r\n return { ...state, isLoading: true };\r\n case manageReservationTypes.GET_MANAGERESERVATIONDETAILS_SUCCESS:\r\n return {\r\n isLoading: false,\r\n data: { ...state.data, ...action.response },\r\n errorMessage: null\r\n };\r\n case manageReservationTypes.GET_MANAGERESERVATIONDETAILS_FAILURE:\r\n return { ...state, isLoading: false, data: {}, errorMessage: action.message };\r\n case manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME:\r\n return { ...state, isLoading: true };\r\n case manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS:\r\n return {\r\n isLoading: false,\r\n data: { ...state.data, ...action.response },\r\n errorMessage: null\r\n };\r\n case manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME_FAILURE:\r\n return { ...state, isLoading: false, data: {}, errorMessage: action.message };\r\n case manageReservationTypes.CLEAR_MANAGERESERVATIONDETAILS:\r\n return INITIAL_STATE;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default manageReservationReducer;\r\n","// Packages Reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport packagesActionTypes from './packages.types';\r\n\r\nconst INITIAL_STATE = {\r\n selectedPkgsLocationCode: '',\r\n selectedPackages: [],\r\n packageAvailabilityList: [],\r\n cabanasAvailabilityList: [],\r\n isLoading: false,\r\n requestFailed: false,\r\n errorMessage: '',\r\n status: '',\r\n isLateCheckoutDenied: false,\r\n isLateCheckoutOffered: false,\r\n planPackages: []\r\n};\r\n\r\nconst packagesReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case packagesActionTypes.SET_PACKAGES_PLAN_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n planPackages: action.planPackages\r\n };\r\n // Get Package Availability SUCCESS\r\n case packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n packageAvailabilityList: action.packageAvailabilityList,\r\n requestFailed: false,\r\n isLoading: false,\r\n errorMessage: ''\r\n };\r\n // Get Package Availability LOADING\r\n case packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_LOADING:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading\r\n };\r\n // Get Package Availability FAIL\r\n case packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_ERROR:\r\n return {\r\n ...state,\r\n packageAvailabilityList: action.packageAvailabilityList,\r\n requestFailed: action.requestFailed,\r\n isLoading: false,\r\n errorMessage: action.errorMessage\r\n };\r\n case packagesActionTypes.UPSERT_PACKAGES:\r\n return {\r\n ...state,\r\n selectedPackages: action.selectedPackages,\r\n selectedPkgsLocationCode: action.selectedPkgsLocationCode\r\n };\r\n case packagesActionTypes.OFFERED_PACKAGES_LCO:\r\n return {\r\n ...state,\r\n isLateCheckoutOffered: action.isLateCheckoutOffered\r\n };\r\n case packagesActionTypes.DECLINE_PACKAGES_LCO:\r\n return {\r\n ...state,\r\n isLateCheckoutDenied: action.isLateCheckoutDenied\r\n };\r\n case packagesActionTypes.DELETE_PACKAGES:\r\n return {\r\n ...state,\r\n selectedPackages: action.selectedPackages\r\n };\r\n case packagesActionTypes.CLEAR_PACKAGES_SELECTED:\r\n return {\r\n ...state,\r\n selectedPackages: action.selectedPackages,\r\n selectedPkgsLocationCode: action.selectedPkgsLocationCode\r\n };\r\n\r\n case packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_SUCCESS:\r\n return {\r\n ...state,\r\n cabanasAvailabilityList: action.cabanasAvailabilityList,\r\n isLoading: false\r\n };\r\n // Get Package Availability LOADING\r\n case packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_LOADING:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading\r\n };\r\n // Get Package Availability FAIL\r\n case packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_ERROR:\r\n return {\r\n ...state,\r\n cabanasAvailabilityList: action.cabanasAvailabilityList,\r\n isLoading: false\r\n };\r\n case packagesActionTypes.CLEAR_PACKAGES_BY_CODES:\r\n return {\r\n ...state,\r\n selectedPackages: action.selectedPackages\r\n };\r\n case packagesActionTypes.CLEAR_PACKAGES_PLAN:\r\n return {\r\n ...state,\r\n selectedPackages: action.selectedPackages,\r\n planPackages: action.planPackages,\r\n selectedPkgsLocationCode: action.selectedPkgsLocationCode\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default packagesReducer;\r\n","// Plans Reducer\r\n\r\nimport { SORTING_CRITERIA, SUITE_TYPES } from '../../../utilities/constants';\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport plansActionTypes from './plans.types';\r\n\r\nconst INITIAL_STATE = {\r\n availabilityList: [],\r\n qualifyingID: undefined,\r\n requiresQualifyingID: false,\r\n isIdMeValidationRequired: false,\r\n isIdMeValidationRequiredWithError: false,\r\n qualifyingIDError: false,\r\n offerCodeError: undefined,\r\n promoDescription: '',\r\n availabilityReqIsLoading: false,\r\n availabilityRequestFailed: false,\r\n availabilityErrorMessage: '',\r\n status: '',\r\n selectedSuiteForRange: '',\r\n selectedSuiteRange: {},\r\n selectedSuiteRangeRestrictions: {},\r\n isOpenRatesCalendar: false,\r\n recentSearchesList: [],\r\n searchesGetReqIsLoading: false,\r\n searchesSetReqIsLoading: false,\r\n searchesDelReqIsLoading: false,\r\n searchesReqFailed: false,\r\n searchesErrorMessage: '',\r\n selectedSuiteForCalendar: '',\r\n availabilityHighestRatesList: [],\r\n availabilityHighestRatesReqIsLoading: false,\r\n availabilityHighestRatesRequestFailed: false,\r\n availabilityHighestRatesRequestDatesExceededFailed: false,\r\n filtersApplied: {\r\n amenities: [],\r\n accessibility: false,\r\n themed: false,\r\n standard: false,\r\n premium: false,\r\n condo: false,\r\n cottage: false\r\n },\r\n sorting: SORTING_CRITERIA.recommendedForYou,\r\n sortSuite: '',\r\n oldFiltersApplied: {},\r\n suiteAvailabilityList: [],\r\n getAvailabilityRangeIsLoading: false,\r\n getAvailabilityRangeFailed: false,\r\n getAvailabilityRangeMessage: '',\r\n getAvRangeBySuiteIsLoading: false,\r\n getAvRangeBySuiteFailed: false,\r\n getAvRangeBySuiteErrorMsg: '',\r\n isAPScall: false,\r\n itemQuantity: [],\r\n itemQuantityReqIsLoading: false,\r\n itemQuantityReqFailed: false,\r\n emailCampaign: {\r\n isEmailCampaign: false,\r\n planCalendarShouldBeBlocked: false,\r\n startCalendarAt: '',\r\n endCalendarAt: '',\r\n campaignObject: {}\r\n },\r\n emailCampaignSuiteType: SUITE_TYPES.unknown,\r\n isBookingWidgetFocused: false,\r\n isErrorModalAlreadyClosed: false,\r\n offerType: '',\r\n lcoPackages: {},\r\n personalizationResponses: [],\r\n dealsSummary: {},\r\n leavePayment: false,\r\n lowestRateCalendarList: {},\r\n lowestRatesByStayList: {},\r\n lowestRatesByStayListTotal: {},\r\n lastCalendarRatesDateSelection: { start: '', end: '' },\r\n getLowestRateCalendarErrorMsg: '',\r\n upsellPackagesContent: [],\r\n isCaliforniaResident: false,\r\n isTwoRateTypesSuites: false,\r\n latestVersionJEventErrorObj: null,\r\n latestVersionHEventErrorObj: null,\r\n isCartOpenClose: false,\r\n cartReturnedPageLinkClicked: ''\r\n};\r\n\r\nconst plansReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n // Get Book information reducers\r\n switch (action.type) {\r\n case plansActionTypes.SET_PLANS_AVAILABILITY_DETAILS_ERROR:\r\n return {\r\n ...state,\r\n offerCodeError: action.error,\r\n availabilityRequestFailed: false,\r\n availabilityReqIsLoading: false,\r\n availabilityErrorMessage: ''\r\n };\r\n case plansActionTypes.SET_PLANS_IS_CART_OPEN_CLOSE:\r\n return {\r\n ...state,\r\n isCartOpenClose: action.value\r\n };\r\n case plansActionTypes.SET_PLANS_IS_CART_OPEN_CLOSE_CLEAN:\r\n return {\r\n ...state,\r\n isCartOpenClose: false\r\n };\r\n case plansActionTypes.SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED:\r\n return {\r\n ...state,\r\n cartReturnedPageLinkClicked: action.pageToReturn\r\n };\r\n case plansActionTypes.SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN:\r\n return {\r\n ...state,\r\n cartReturnedPageLinkClicked: ''\r\n };\r\n // Availability item request succeded\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n availabilityList: action.availabilityList,\r\n isAPScall: action.isAPScall,\r\n availabilityRequestFailed: false,\r\n availabilityReqIsLoading: false,\r\n availabilityErrorMessage: '',\r\n requiresQualifyingID: action.requiresQualifyingID,\r\n isIdMeValidationRequired: action.isIdMeValidationRequired,\r\n isIdMeValidationRequiredWithError: action.isIdMeValidationRequiredWithError,\r\n offerCodeError: action.offerCodeError,\r\n isErrorModalAlreadyClosed: action.isErrorModalAlreadyClosed,\r\n promoDescription: action.promoDescription,\r\n offerType: action.offerType,\r\n personalizationRues: action.personalizationRules,\r\n personalizationResponses: action.personalizationResponses,\r\n lcoPackages: action.lcoPackages,\r\n upsellPackagesContent: action.upsellPackagesContent,\r\n isTwoRateTypesSuites: action.isTwoRateTypesSuites\r\n };\r\n // The request is currently running\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_INFO_LOADING:\r\n return {\r\n ...state,\r\n availabilityReqIsLoading: action.availabilityReqIsLoading,\r\n ...(action.availabilityReqIsLoading && {\r\n availabilityList: []\r\n }),\r\n ...(!action.shouldIgnoreOfferCodeError && {\r\n offerCodeError: action.offerCodeError\r\n })\r\n };\r\n // Availability item request failed\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_INFO_ERROR:\r\n return {\r\n ...state,\r\n availabilityList: action.availabilityList,\r\n availabilityRequestFailed: action.availabilityRequestFailed,\r\n availabilityErrorMessage: action.availabilityErrorMessage,\r\n availabilityReqIsLoading: false,\r\n requiresQualifyingID: action.requiresQualifyingID,\r\n isIdMeValidationRequired: action.isIdMeValidationRequired,\r\n isIdMeValidationRequiredWithError: action.isIdMeValidationRequiredWithError,\r\n promoDescription: action.promoDescription\r\n };\r\n case plansActionTypes.SET_PLANS_IS_ERROR_MODAL_ALREADY_CLOSED:\r\n return {\r\n ...state,\r\n isErrorModalAlreadyClosed: action.value\r\n };\r\n // Recent Searches items request succeded\r\n case plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n recentSearchesList: action.recentSearchesList,\r\n searchesReqFailed: false,\r\n searchesErrorMessage: ''\r\n };\r\n // The request is currently running\r\n case plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_LOADING:\r\n return {\r\n ...state,\r\n searchesGetReqIsLoading: action.searchesGetReqIsLoading\r\n };\r\n // The set request is currently running\r\n case plansActionTypes.SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n searchesSetReqIsLoading: action.searchesSetReqIsLoading\r\n };\r\n // The delete request is currently running\r\n case plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n searchesDelReqIsLoading: action.searchesDelReqIsLoading\r\n };\r\n // Recent Searches item request failed\r\n case plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_ERROR:\r\n return {\r\n ...state,\r\n searchesReqFailed: action.searchesReqFailed,\r\n searchesErrorMessage: action.searchesErrorMessage\r\n };\r\n\r\n case plansActionTypes.SELECT_PLANS_SUITE_FOR_RANGE_TYPE:\r\n return {\r\n ...state,\r\n selectedSuiteForRange: action.selectedSuiteForRange\r\n };\r\n\r\n case plansActionTypes.UNSELECT_PLANS_SUITE_FOR_RANGE_TYPE:\r\n return {\r\n ...state,\r\n selectedSuiteForRange: INITIAL_STATE.selectedSuiteForRange\r\n };\r\n\r\n case plansActionTypes.OPEN_PLANS_RATES_CALENDAR:\r\n return {\r\n ...state,\r\n selectedSuiteRange: action.selectedSuiteRange,\r\n dealsSummary: action.dealsSummary\r\n };\r\n\r\n case plansActionTypes.CLOSE_PLANS_RATES_CALENDAR:\r\n return {\r\n ...state,\r\n isOpenRatesCalendar: false,\r\n selectedSuiteRange: INITIAL_STATE.selectedSuiteRange\r\n };\r\n\r\n case plansActionTypes.OPEN_PLANS_RATES_CALENDAR_RESTRICTION:\r\n return {\r\n ...state,\r\n selectedSuiteRangeRestrictions: action.selectedSuiteRangeRestrictions,\r\n dealsSummary: action.dealsSummary\r\n };\r\n\r\n case plansActionTypes.OPEN_PLANS_CALENDAR_RATES_BY_STAY:\r\n return {\r\n ...state,\r\n lowestRatesByStayList: action.lowestRatesByStayList,\r\n lowestRatesByStayListTotal: action.lowestRatesByStayListTotal\r\n };\r\n\r\n case plansActionTypes.LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION:\r\n return {\r\n ...state,\r\n lastCalendarRatesDateSelection: action.lastCalendarRatesDateSelection\r\n };\r\n\r\n case plansActionTypes.CLEAN_PLANS_CALENDAR_RATES_BY_STAY:\r\n return {\r\n ...state,\r\n lowestRatesByStayList: {},\r\n lowestRatesByStayListTotal: {}\r\n };\r\n\r\n case plansActionTypes.OPEN_PLANS_RATES_CALENDAR_RESTRICTION_INCREMENT:\r\n return {\r\n ...state,\r\n selectedSuiteRangeRestrictions:\r\n Object.keys(action.selectedSuiteRangeRestrictions).length > 0\r\n ? { ...state.selectedSuiteRangeRestrictions, ...action.selectedSuiteRangeRestrictions }\r\n : { ...state.selectedSuiteRangeRestrictions },\r\n dealsSummary: action.dealsSummary\r\n };\r\n\r\n case plansActionTypes.GET_PLANS_LOWEST_RATES_CALENDAR:\r\n return {\r\n ...state,\r\n lowestRateCalendarList: action.lowestRateCalendarList\r\n };\r\n\r\n case plansActionTypes.GET_PLANS_LOWEST_RATES_CALENDAR_MOBILE:\r\n return {\r\n ...state,\r\n lowestRateCalendarList:\r\n Object.keys(action.lowestRateCalendarList).length > 0\r\n ? { ...state.lowestRateCalendarList, ...action.lowestRateCalendarList }\r\n : { ...state.lowestRateCalendarList }\r\n };\r\n\r\n case plansActionTypes.GET_PLANS_LOWEST_RATES_CALENDAR_ERROR:\r\n return {\r\n ...state,\r\n getLowestRateCalendarErrorMsg: action.getLowestRateCalendarErrorMsg\r\n };\r\n\r\n case plansActionTypes.CLEAN_PLANS_CALENDAR_RESTRICTIONS_AND_LOWEST_RATES:\r\n return {\r\n ...state,\r\n lowestRateCalendarList: INITIAL_STATE.lowestRateCalendarList,\r\n selectedSuiteRangeRestrictions: INITIAL_STATE.selectedSuiteRangeRestrictions\r\n };\r\n\r\n case plansActionTypes.CLOSE_PLANS_RATES_CALENDAR_RESTRICTION:\r\n return {\r\n ...state,\r\n isOpenRatesCalendar: false,\r\n selectedSuiteRangeRestrictions: INITIAL_STATE.selectedSuiteRangeRestrictions\r\n };\r\n\r\n case plansActionTypes.OPEN_PLANS_PAYMENT_LEAVE_MODAL:\r\n return {\r\n ...state,\r\n leavePayment: true\r\n };\r\n\r\n case plansActionTypes.CLOSE_PLANS_PAYMENT_LEAVE_MODAL:\r\n return {\r\n ...state,\r\n leavePayment: false\r\n };\r\n\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING:\r\n return {\r\n ...state,\r\n getAvRangeBySuiteIsLoading: action.getAvRangeBySuiteIsLoading\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR:\r\n return {\r\n ...state,\r\n getAvRangeBySuiteFailed: action.getAvRangeBySuiteFailed,\r\n getAvRangeBySuiteErrorMsg: action.getAvRangeBySuiteErrorMsg\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_RESET:\r\n return {\r\n ...state,\r\n selectedSuiteRange: {},\r\n getAvRangeBySuiteIsLoading: false,\r\n getAvRangeBySuiteFailed: false,\r\n getAvRangeBySuiteErrorMsg: ''\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_SUCCESS:\r\n return {\r\n ...state,\r\n availabilityHighestRatesList: action.availabilityHighestRatesList,\r\n availabilityHighestRatesIsLoading: false,\r\n availabilityHighestRatesRequestFailed: false,\r\n availabilityHighestRatesRequestDatesExceededFailed: false\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR:\r\n return {\r\n ...state,\r\n availabilityHighestRatesList: [],\r\n availabilityHighestRatesIsLoading: false,\r\n availabilityHighestRatesRequestFailed: true,\r\n availabilityHighestRatesRequestDatesExceededFailed: false\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_DATES_EXCEEDED_ERROR:\r\n return {\r\n ...state,\r\n availabilityHighestRatesList: [],\r\n availabilityHighestRatesIsLoading: false,\r\n availabilityHighestRatesRequestFailed: false,\r\n availabilityHighestRatesRequestDatesExceededFailed: true\r\n };\r\n case plansActionTypes.SET_PLANS_APPLIED_FILTERS:\r\n return {\r\n ...state,\r\n filtersApplied: action.filtersApplied,\r\n oldFiltersApplied: state.filtersApplied\r\n };\r\n\r\n case plansActionTypes.SET_PLANS_SELECTED_SUITE_NAME_FOR_CALENDAR:\r\n return {\r\n ...state,\r\n selectedSuiteForCalendar: action.selectedSuiteForCalendar\r\n };\r\n\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE:\r\n return {\r\n ...state,\r\n getAvailabilityRangeIsLoading: action.getAvailabilityRangeIsLoading\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_SUCCESS:\r\n return {\r\n ...state,\r\n suiteAvailabilityList: action.suiteAvailabilityList,\r\n getAvailabilityRangeIsLoading: false,\r\n getAvailabilityRangeFailed: false,\r\n getAvailabilityRangeMessage: ''\r\n };\r\n case plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_ERROR:\r\n return {\r\n ...state,\r\n suiteAvailabilityList: [],\r\n getAvailabilityRangeIsLoading: false,\r\n getAvailabilityRangeFailed: true,\r\n getAvailabilityRangeMessage: action.getAvailabilityRangeMessage\r\n };\r\n case plansActionTypes.GET_PLANS_ITEM_QUANTITY_TYPE:\r\n return {\r\n ...state,\r\n itemQuantityReqIsLoading: action.itemQuantityReqIsLoading\r\n };\r\n case plansActionTypes.GET_PLANS_ITEM_QUANTITY_SUCCESS:\r\n return {\r\n ...state,\r\n itemQuantity: action.itemQuantity,\r\n itemQuantityReqIsLoading: false,\r\n itemQuantityReqFailed: false\r\n };\r\n case plansActionTypes.GET_PLANS_ITEM_QUANTITY_ERROR:\r\n return {\r\n ...state,\r\n itemQuantity: action.itemQuantity,\r\n itemQuantityReqIsLoading: false,\r\n itemQuantityReqFailed: true\r\n };\r\n case plansActionTypes.TOGGLE_PLANS_EMAIL_CAMPAIGNS:\r\n return {\r\n ...state,\r\n emailCampaign: action.emailCampaign\r\n };\r\n case plansActionTypes.SET_PLANS_QUALIFYING_ID:\r\n return {\r\n ...state,\r\n qualifyingID: action.code\r\n };\r\n case plansActionTypes.GET_PLANS_QUALIFYING_ID_HAS_ERROR:\r\n return {\r\n ...state,\r\n qualifyingIDError: action.hasError\r\n };\r\n case plansActionTypes.SET_PLANS_TAB_INDEX_BY_EMAIL_CAMPAIGN:\r\n return {\r\n ...state,\r\n emailCampaignSuiteType: action.emailCampaignSuiteType\r\n };\r\n case plansActionTypes.SET_PLANS_IS_BOOKING_WIDGET_FOCUSED:\r\n return {\r\n ...state,\r\n isBookingWidgetFocused: action.value\r\n };\r\n case plansActionTypes.SET_PLANS_SORTING_ORDER:\r\n return {\r\n ...state,\r\n sorting: action.sortingType\r\n };\r\n case plansActionTypes.SET_PLANS_SUITE_CODE_FILTER:\r\n return {\r\n ...state,\r\n sortSuite: action.suiteCode\r\n };\r\n case plansActionTypes.SET_PLANS_IS_CALIFORNIA_RESIDENT:\r\n return {\r\n ...state,\r\n isCaliforniaResident: action.isCaliforniaResident\r\n };\r\n case plansActionTypes.CLEAN_PLANS_IS_CALIFORNIA_RESIDENT:\r\n return {\r\n ...state,\r\n isCaliforniaResident: INITIAL_STATE.isCaliforniaResident\r\n };\r\n case plansActionTypes.SET_PLANS_LATEST_J_VERSION_EVENT_ERROR:\r\n return {\r\n ...state,\r\n latestVersionJEventErrorObj: action.variationJObj\r\n };\r\n case plansActionTypes.SET_PLANS_LATEST_H_VERSION_EVENT_ERROR:\r\n return {\r\n ...state,\r\n latestVersionHEventErrorObj: action.variationHObj\r\n };\r\n case plansActionTypes.CLEAR_PLANS_ALL_AVAILABILITY_DATA:\r\n return INITIAL_STATE;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default plansReducer;\r\n","// Reservation Details Reducer\r\n\r\nimport { combineReducers } from 'redux';\r\nimport addAPackageActionTypes from '../addAPackage/addAPackage.types';\r\nimport reservationDetailsActionTypes from './reservationDetailsEntity.types';\r\n\r\nconst isLoading = (state = false, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_REQUEST:\r\n return true;\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_SUCCESS:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_SUCCESS_END_LOADING:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_FAILURE:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n case addAPackageActionTypes.SET_ADD_A_PACKAGE_FLASH_MESSAGE:\r\n case reservationDetailsActionTypes.PACKAGE_RESERVATION_DETAILS_MESSAGE_ERROR:\r\n return false;\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst data = (state = {}, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_SUCCESS:\r\n const formatedData = { ...action.response };\r\n if (!formatedData.arrival) {\r\n formatedData.arrival = formatedData?.selection?.arrival ?? null;\r\n }\r\n if (!formatedData.departure) {\r\n formatedData.departure = formatedData?.selection?.departure ?? null;\r\n }\r\n return formatedData;\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS:\r\n return { ...state, checkIn: { ...action.response } };\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst errorMessage = (state = null, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_FAILURE:\r\n return action.message;\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_REQUEST:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_SUCCESS:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n case reservationDetailsActionTypes.CLEAR_RESERVATION_DETAILS_DETAILS_ERROR:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst requestSuccess = (state = false, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_SUCCESS:\r\n return true;\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_FAILURE:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_REQUEST:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n return false;\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_CHECK_IN_VALUE_SUCCESS:\r\n return true;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst isCabanaLoading = (state = false, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_IS_LOADING:\r\n return true;\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_SUCCESS:\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_FAILURE:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n case reservationDetailsActionTypes.CLEAR_RESERVATION_DETAILS_CABANA_DETAILS:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst cabanaErrorMessage = (state = null, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_FAILURE:\r\n return action.message;\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_IS_LOADING:\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_SUCCESS:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n case reservationDetailsActionTypes.CLEAR_RESERVATION_DETAILS_CABANA_DETAILS:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst cabanaRequestSuccess = (state = false, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_SUCCESS:\r\n return true;\r\n case reservationDetailsActionTypes.RESERVATION_DETAILS_CABANA_FAILURE:\r\n case reservationDetailsActionTypes.CLEAR_RESERVATION_DETAILS_CABANA_DETAILS:\r\n case reservationDetailsActionTypes.FETCH_RESERVATION_DETAILS_CLEAR:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst packageErrorMessageData = (state = null, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.PACKAGE_RESERVATION_DETAILS_MESSAGE_ERROR:\r\n return action.message;\r\n case reservationDetailsActionTypes.CLEAR_RESERVATION_DETAILS_PACKAGE_MESSAGE_ERROR:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst addGuestReservationSuccess = (state = null, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_SUCCESS:\r\n return action.addGuestsReservationObj;\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_CLEAR:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst addGuestReservationErrorMessage = (state = null, action) => {\r\n switch (action.type) {\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR:\r\n return action.message;\r\n case reservationDetailsActionTypes.UPDATE_RESERVATION_DETAILS_NEW_GUESTS_RESERVATION_ERROR_CLEAR:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst reservationDetailsEntityReducer = combineReducers({\r\n isLoading,\r\n requestSuccess,\r\n data,\r\n errorMessage,\r\n isCabanaLoading,\r\n cabanaErrorMessage,\r\n cabanaRequestSuccess,\r\n packageErrorMessageData,\r\n addGuestReservationSuccess,\r\n addGuestReservationErrorMessage\r\n});\r\n\r\nexport default reservationDetailsEntityReducer;\r\n","// Suite Reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport suiteActionTypes from './suite.types';\r\n\r\nconst INITIAL_STATE = {\r\n selectedSuite: null,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: [],\r\n errorMessage: '',\r\n suiteLcoPackage: {},\r\n flexTripAllowed: false,\r\n flexPackage: {},\r\n //planPackages: [],\r\n dayType: 0,\r\n suiteRateMismatched: false,\r\n onSuiteSelectionError: '', // Variable for tracking purposes, seems we are not using error variables anymore, and reuse/add them again could be risky\r\n personalizationPackageRules: [],\r\n personalizationResponses: [],\r\n responseHasPackages: false,\r\n suiteDetailsFetchSuccess: false,\r\n getPlanPackageInfoLoading: false,\r\n taxesAndFeesDetailAvailability: {}\r\n};\r\n\r\nconst suiteReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case suiteActionTypes.SELECT_SUITE:\r\n return {\r\n ...state,\r\n selectedSuite: action.selectedSuite,\r\n suiteStoreErrorMessage: ''\r\n };\r\n case suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_INFO:\r\n return {\r\n ...state,\r\n getAvailabilityLoading: action.getAvailabilityLoading,\r\n suiteRateMismatched: action.suiteRateMismatched\r\n };\r\n case suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR:\r\n return {\r\n ...state,\r\n suiteStoreErrorMessage: action.suiteStoreErrorMessage,\r\n getAvailabilityLoading: action.getAvailabilityLoading,\r\n suiteDetailedAvailability: action.suiteDetailedAvailability,\r\n onSuiteSelectionError: action.suiteStoreErrorMessage\r\n };\r\n case suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_SUCCESS:\r\n return {\r\n ...state,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: action.suiteDetailedAvailability,\r\n suiteLcoPackage: action.suiteLcoPackage,\r\n flexTripAllowed: action.flexTripAllowed ?? false,\r\n flexPackage: action.flexPackage,\r\n dayType: action.dayType,\r\n personalizationPackageRules: action.personalizationPackageRules,\r\n personalizationResponses: action.personalizationResponses,\r\n responseHasPackages: action.responseHasPackages,\r\n suiteDetailsFetchSuccess: action.suiteDetailsFetchSuccess,\r\n selectedSuite: {\r\n ...state.selectedSuite,\r\n ...(action.availabilityKey && { availabilityKey: action.availabilityKey }),\r\n ...(action.rateCode && { rateCode: action.rateCode })\r\n },\r\n taxesAndFeesDetailAvailability: action.taxesAndFeesDetailAvailability\r\n };\r\n case suiteActionTypes.SET_SUITE_NEW_RATES:\r\n return {\r\n ...state,\r\n suiteDetailedAvailability: action.suiteDetailedAvailability\r\n };\r\n case suiteActionTypes.CLEAR_SUITE_SELECTED:\r\n return {\r\n ...state,\r\n selectedSuite: action.selectedSuite,\r\n suiteRateMismatched: action.suiteRateMismatched,\r\n suiteDetailedAvailability: action.suiteDetailedAvailability\r\n };\r\n case suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_RESET:\r\n return {\r\n ...state,\r\n suiteDetailsFetchSuccess: false\r\n };\r\n case suiteActionTypes.GET_SUITE_PLAN_PACKAGES_INFO_TYPE:\r\n return {\r\n ...state,\r\n getPlanPackageInfoLoading: action.getPlanPackageInfoLoading\r\n };\r\n case suiteActionTypes.SET_SUITE_PLAN_PACKAGES_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n planPackages: action.planPackages,\r\n getPlanPackageInfoLoading: action.getPlanPackageInfoLoading\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default suiteReducer;\r\n","import { connectRouter } from 'connected-react-router';\r\nimport find from 'lodash-es/find';\r\nimport get from 'lodash-es/get';\r\nimport isEmpty from 'lodash-es/isEmpty';\r\nimport keyBy from 'lodash-es/keyBy';\r\nimport map from 'lodash-es/map';\r\nimport { combineReducers } from 'redux';\r\nimport { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport { DEFAULT_RATE_CODE } from '../components/PaymentForm/PaymentFormHelper';\r\nimport {\r\n TIERS_CONTENT_DAYPASS,\r\n TIERS_CONTENT_DAYPASS_CONFIRMATION,\r\n TIERS_CONTENT_MY_RESERVATIONS\r\n} from '../pages/ReservationDetail/constants';\r\nimport { optimizelyChargePackagesAtCheckout, optimizelyHideLoyalty } from '../utilities/ABTesting';\r\nimport { getNormalizedCode } from '../utilities/availabilityUtils';\r\nimport {\r\n BACKEND_PAYMENT_TYPES,\r\n CABANAS_CODES_TYPES,\r\n GUARANTEE_TYPE,\r\n OFFER_CODE_TYPE,\r\n PACKAGE_TYPE,\r\n PACKAGES_GROUPS,\r\n SUITE_TYPES,\r\n TAXES\r\n} from '../utilities/constants';\r\nimport { checkIsLateCheckoutPackageOnly, filterPkgsByAdvanceBookingDays } from '../utilities/packagesUtils';\r\nimport { FLEX_TRIP_PACKAGE_CODE } from '../utilities/paymentUtils';\r\nimport { getOfferCodeErrorDetails } from '../utilities/planUtils';\r\nimport { isValidReservation } from '../utilities/reservationsUtils';\r\nimport { getTaxesAndFeesDynamic } from '../utilities/taxes';\r\nimport account from './componentStores/Account/account.reducer';\r\nimport addApackage from './componentStores/addAPackage/addAPackage.reducer';\r\nimport birthdayParty from './componentStores/BirthdayParty/birthdayParty.reducer';\r\nimport bookingEngineAlert from './componentStores/BookingEngineAlertEntity/bookingEngineAlertEntity.reducer';\r\nimport cart from './componentStores/Cart/cart.reducer';\r\nimport currentLodge from './componentStores/CurrentLodge/currentLodge.reducer';\r\nimport dates from './componentStores/Dates/dates.reducer';\r\nimport dayPasses from './componentStores/DayPasses/dayPasses.reducer';\r\nimport deal from './componentStores/Deal/deal.reducer';\r\nimport eventDetails from './componentStores/EventCalendar/eventCalendar.reducer';\r\nimport flow from './componentStores/Flow/flow.reducer';\r\nimport geolocation from './componentStores/Geolocation/geolocation.reducer';\r\nimport globalModal from './componentStores/GlobalModal/globalModal.reducer';\r\nimport guests from './componentStores/Guests/guests.reducer';\r\nimport ieModal from './componentStores/IEModal/ieModal.reducer';\r\nimport leadGen from './componentStores/LeadGen/leadGen.reducer';\r\nimport lodgeConfig from './componentStores/LodgeConfig/lodgeConfig.reducer';\r\nimport lodgeLocations from './componentStores/LodgeLocations/lodgeLocations.reducer';\r\nimport {\r\n clearManageReservationDetails,\r\n getManageReservationDetails\r\n} from './componentStores/ManageReservation/managereservation.actions';\r\nimport manageReservationDetails from './componentStores/ManageReservation/managereservation.reducer';\r\nimport offer from './componentStores/Offer/offer.reducer';\r\nimport packages from './componentStores/Packages/packages.reducer';\r\nimport plans from './componentStores/Plans/plans.reducer';\r\nimport preCheckIn from './componentStores/PreCheckIn/preCheckIn.reducer';\r\nimport profile from './componentStores/Profile/profile.reducer';\r\nimport reservationDetails from './componentStores/ReservationDetailsEntity/reservationDetailsEntity.reducer';\r\nimport reservations from './componentStores/Reservations/reservations.reducer';\r\nimport suite from './componentStores/Suite/suite.reducer';\r\n\r\nimport { getUserIsLoggedIn } from './componentStores/Account/account.selectors';\r\nimport { getAddedpackages } from './componentStores/addAPackage/addAPackage.selectors';\r\nimport { getCheckIn, getCheckOut } from './componentStores/Dates/dates.selectors';\r\nimport { getTaxAndFeesLabels } from './componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport { getReservationDetailsByReservationIdAndReservationKey } from './componentStores/ManageReservation/managereservation.actions';\r\nimport { getOfferCode } from './componentStores/Offer/offer.selectors';\r\nimport {\r\n getCabanas as getCabanasAction,\r\n getPackageAvailability as getPackageAvailabilityAction\r\n} from './componentStores/Packages/packages.actions';\r\nimport {\r\n getCabanaAvailability,\r\n getCabanas,\r\n getFilteredPackageTypesBasedOnCabanaAvailability,\r\n getPackages,\r\n getPackagesGrossTotal,\r\n getPackagesGroupedByTier,\r\n getPackagesNetTotal,\r\n getPackagesTaxes\r\n} from './componentStores/Packages/packages.selectors';\r\nimport { getOfferCodeError } from './componentStores/Plans/plans.selectors';\r\nimport {\r\n cmpDataSelector,\r\n getAdults,\r\n getArrivalDate,\r\n getCabanasAsPackages,\r\n getDepartureDate,\r\n getDueAtCheckinAmountWithCabanas,\r\n getKidsAges,\r\n getPackageTotal,\r\n getPackageTotalWithCabanas,\r\n getOfferCode as getReservationDetailsEntityOfferCode,\r\n getPackages as getReservationDetailsEntityPackages,\r\n getReservationType,\r\n getRoomType,\r\n getSite,\r\n getStatus,\r\n getSummaryTotalWithCabana,\r\n getTaxesAmountWithCabanas,\r\n RESERVATION_TYPES\r\n} from './componentStores/ReservationDetailsEntity/reservationDetailsEntity.selectors';\r\nimport {\r\n getParkingFee,\r\n getResortFee,\r\n getSuiteGrossTotal,\r\n getSuiteNetTotal,\r\n getSuiteTaxes,\r\n getSustainabilityFee,\r\n getTaxesAndFeesDetailAvailability\r\n} from './componentStores/Suite/suite.selectors';\r\n\r\n// Follow A-Z order\r\nconst createRootReducer = history =>\r\n combineReducers({\r\n account,\r\n flow,\r\n addApackage,\r\n birthdayParty,\r\n cart,\r\n currentLodge,\r\n dates,\r\n dayPasses,\r\n entities: combineReducers({\r\n reservationDetails,\r\n eventDetails,\r\n bookingEngineAlert,\r\n deal,\r\n manageReservationDetails\r\n }),\r\n geolocation,\r\n globalModal,\r\n guests,\r\n leadGen,\r\n ieModal,\r\n lodgeConfig,\r\n lodgeLocations,\r\n offer,\r\n plans,\r\n packages,\r\n profile,\r\n preCheckIn,\r\n router: connectRouter(history),\r\n reservations,\r\n suite\r\n });\r\n\r\nexport default createRootReducer;\r\n\r\nexport const globalGetReservationDetails = reservationId => async (dispatch, getState) => {\r\n let status = {};\r\n dispatch(clearManageReservationDetails());\r\n await dispatch(getManageReservationDetails(reservationId));\r\n const state = getState();\r\n const reservationDetails = state.entities.manageReservationDetails;\r\n const isLoggedIn = getUserIsLoggedIn(state.account);\r\n const departureDate = getDepartureDate(reservationDetails);\r\n const reservationStatus = getStatus(reservationDetails);\r\n if (isValidReservation(departureDate, reservationStatus) && !isLoggedIn) {\r\n dispatch(globalGetAvailablePackages(reservationDetails));\r\n status.success = true;\r\n }\r\n return status;\r\n};\r\n\r\nexport const globalGetReservationDetailsWithIdOnly = reservationId => async (dispatch, getState) => {\r\n await dispatch(getManageReservationDetails(reservationId));\r\n const state = getState();\r\n const reservationDetails = state.entities.manageReservationDetails;\r\n const departureDate = getDepartureDate(reservationDetails);\r\n const reservationStatus = getStatus(reservationDetails);\r\n if (isValidReservation(departureDate, reservationStatus)) {\r\n dispatch(globalGetAvailablePackages(reservationDetails));\r\n }\r\n};\r\n\r\nexport const globalGetReservationsByReservationIdAndReservationKey = (reservationId, reservationKey) => async (\r\n dispatch,\r\n getState\r\n) => {\r\n await dispatch(getReservationDetailsByReservationIdAndReservationKey(reservationId, reservationKey));\r\n const state = getState();\r\n const reservationDetails = state.entities.manageReservationDetails;\r\n const departureDate = getDepartureDate(reservationDetails);\r\n const reservationStatus = getStatus(reservationDetails);\r\n if (isValidReservation(departureDate, reservationStatus)) {\r\n dispatch(globalGetAvailablePackages(reservationDetails));\r\n }\r\n};\r\n\r\nexport const globalGetAvailablePackages = reservation => dispatch => {\r\n const kidsAges = getKidsAges(reservation);\r\n const arrivalDate = getArrivalDate(reservation);\r\n const departureDate = getDepartureDate(reservation);\r\n const site = getSite(reservation);\r\n const numberOfAdults = getAdults(reservation);\r\n const suiteCode = getRoomType(reservation);\r\n //const isDayPass = getIsDayPass(reservation);\r\n\r\n dispatch(\r\n getPackageAvailabilityAction({\r\n Location: site,\r\n Arrival: arrivalDate,\r\n Departure: departureDate,\r\n offerCode: getReservationDetailsEntityOfferCode(reservation),\r\n NumberOfAdults: numberOfAdults,\r\n kidsAges: kidsAges && kidsAges.join(),\r\n suiteCode\r\n })\r\n );\r\n if (reservation.data.id) {\r\n dispatch(\r\n getCabanasAction({\r\n resId: reservation.data.id\r\n })\r\n );\r\n }\r\n};\r\n\r\n// Selectors\r\n/**\r\n * Get summary total, this is suite + packages net totals.\r\n * @param {Object} state Global state\r\n * @return {number} Summary total\r\n */\r\nexport const getSummaryTotal = state => {\r\n return getPackagesNetTotal(state.packages) + getSuiteTotalWithFees(state);\r\n};\r\n\r\n/**\r\n * Get Suite Rate Total + Resort Fees to compare\r\n * @param {object} state Global state\r\n * @returns {number} Suite Rate total with fees\r\n */\r\nexport const getSuiteTotalWithFees = state => {\r\n const taxAndFeeLabels = getTaxAndFeesLabels(state.lodgeConfig);\r\n let totalFees = 0;\r\n if (!isEmpty(taxAndFeeLabels)) {\r\n const taxesAndFeesPrices = getTaxesAndFeesDetailAvailability(state.suite);\r\n const fees = getTaxesAndFeesDynamic(taxAndFeeLabels, taxesAndFeesPrices);\r\n totalFees = fees.reduce((acc, fee) => {\r\n if (fee.name !== TAXES) return acc + fee.amount;\r\n return acc;\r\n }, 0);\r\n } else {\r\n totalFees = getResortFee(state.suite) + getParkingFee(state.suite) + getSustainabilityFee(state.suite);\r\n }\r\n return getSuiteNetTotal(state.suite) + totalFees;\r\n};\r\n\r\n/**\r\n * Get summary total, this is suite + packages gross totals.\r\n * @param {Object} state Global state\r\n * @return {number} Summary gross total\r\n */\r\nexport const getGrossSummaryTotal = state => {\r\n return getSuiteGrossTotal(state.suite) + getPackagesGrossTotal(state.packages);\r\n};\r\n\r\n/**\r\n * Get Due today amount.\r\n * @param {Object} state Suite store\r\n * @return {number} Due today amount.\r\n */\r\nexport const getDueTodayAmount = state => {\r\n const { suiteDetailedAvailability } = state.suite;\r\n\r\n let dueTodayAmount = 0;\r\n\r\n const hasDetailedAvailability = suiteDetailedAvailability && suiteDetailedAvailability.length > 0;\r\n\r\n // Add the due today only if guaranteeType is \"ADV\"\r\n // We should add the amount and taxes just for the first one night\r\n\r\n dueTodayAmount += hasDetailedAvailability ? suiteDetailedAvailability[0].advancedDeposit : 0;\r\n\r\n dueTodayAmount += getPackagesNetTotalByPacksAtCheckout(state, false, true);\r\n\r\n return dueTodayAmount;\r\n};\r\n\r\n/**\r\n * Get Due at checkin amount.\r\n * @param {Object} state Suite store\r\n * @return {number} Due at checkin amount.\r\n */\r\nexport const getDueAtCheckInAmount = state => {\r\n const summaryTotal = getSummaryTotal(state).toFixed(2);\r\n const dueTodayAmount = getDueTodayAmount(state).toFixed(2);\r\n return summaryTotal - dueTodayAmount;\r\n};\r\n\r\n/**\r\n * Get the sum of packages taxes + suite taxes.\r\n * @param {Object} state Global state\r\n * @return {number} Taxes from suite and packages\r\n */\r\nexport const getSummaryTaxes = state => {\r\n return getSuiteTaxes(state.suite) + getPackagesTaxes(state.packages);\r\n};\r\n\r\n/**\r\n * Based on the packages found for the reservation, determine from what tier\r\n * should we show packages.\r\n * Packages are divided in tiers(A,B,C) and orders(1,2,3,4), this is configured\r\n * from AEM; When one of the already added packages is found in one tier we\r\n * automatically go to the next tier and check until we find a tier that has no\r\n * packages added to the reservation, this would be the returned tier.\r\n * @param {Object} state Global state.\r\n * @return {array} List of packages inside a Tier that is not present in the\r\n * current reservation.\r\n */\r\nexport const getPackagesFromSuitableTier = (state, isNewReservation) => {\r\n const suitableTier = getTierToShow(state, isNewReservation);\r\n const availabilityPackages = getPackages(state.packages);\r\n const reservationType = getReservationType(state.entities.reservationDetails);\r\n const tierToUse = getPackagesGroupedByTier(state.packages, reservationType, isNewReservation);\r\n\r\n const { arrival } = state.entities.reservationDetails.data;\r\n let tierToShow = filterPkgsByAdvanceBookingDays(arrival, tierToUse[suitableTier]);\r\n\r\n if (isEmpty(availabilityPackages) || !suitableTier || !tierToShow) return;\r\n // if there are packages we should get the ones that are not already added into the reservation.\r\n const result = map(\r\n tierToShow.filter(\r\n pkg => pkg.packageCode !== CABANAS_CODES_TYPES.indoor && pkg.packageCode !== CABANAS_CODES_TYPES.outdoor\r\n ),\r\n packageFromTier => {\r\n const availabilityPackage = find(availabilityPackages, ['packageCode', packageFromTier.packageCode]);\r\n return {\r\n ...packageFromTier,\r\n subTitle: get(availabilityPackage, 'subTitle', ''),\r\n packageIcon: get(availabilityPackage, 'packageIcon', ''),\r\n amount: get(availabilityPackage, 'amount'),\r\n tax: get(availabilityPackage, 'tax'),\r\n total: get(availabilityPackage, 'total')\r\n };\r\n }\r\n );\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Based on the packages found for the reservation, determine from what tier\r\n * should we show cabanas.\r\n * Packages are divided in tiers(A,B,C) and orders(1,2,3,4), this is configured\r\n * from AEM; When one of the already added packages is found in one tier we\r\n * automatically go to the next tier and check until we find a tier that has no\r\n * packages added to the reservation, this would be the returned tier.\r\n * @param {Object} state Global state.\r\n * @return {array} List of packages inside a Tier that is not present in the\r\n * current reservation.\r\n */\r\nexport const getCabanasFromSuitableTier = (state, isNewReservation) => {\r\n const suitableTier = getTierToShow(state, isNewReservation);\r\n const reservationType = getReservationType(state.entities.reservationDetails);\r\n const availabilityCabanas = getCabanas(state.packages);\r\n const tierToUse = getPackagesGroupedByTier(state.packages, reservationType, isNewReservation);\r\n const tierToShow = tierToUse[suitableTier];\r\n\r\n if (isEmpty(availabilityCabanas) || !suitableTier || !tierToShow) return;\r\n // Get the cabanas per day information\r\n const cabanasResult = map(\r\n tierToShow.filter(\r\n pkg =>\r\n (pkg.packageCode === CABANAS_CODES_TYPES.indoor || pkg.packageCode === CABANAS_CODES_TYPES.outdoor) &&\r\n availabilityCabanas.some(availInfo => availInfo.itemCode === pkg.packageCode)\r\n ),\r\n packageFromTier => {\r\n const availabilityPackages = availabilityCabanas.filter(\r\n availInfo => availInfo.itemCode === packageFromTier.packageCode\r\n );\r\n let cabanaInformation = {\r\n ...packageFromTier,\r\n isCabana: true,\r\n cabanasDetails: [],\r\n amount: 0, // Avoid the price warning\r\n tax: 0,\r\n total: 0\r\n };\r\n availabilityPackages.forEach(availabilityPackage => {\r\n cabanaInformation.cabanasDetails.push({\r\n amount: get(availabilityPackage, 'roomBaseRate'),\r\n tax: get(availabilityPackage, 'taxesAndFees'),\r\n total: get(availabilityPackage, 'roomRateTotal'),\r\n errorCode: get(availabilityPackage, 'errorCode'),\r\n statusText: get(availabilityPackage, 'statusText'),\r\n itemAvailable: get(availabilityPackage, 'itemAvailable'),\r\n date: get(availabilityPackage, 'date')\r\n });\r\n });\r\n return cabanaInformation;\r\n }\r\n );\r\n\r\n return cabanasResult;\r\n};\r\n\r\n/**\r\n * Based on the packages found for the reservation, determine from what tier\r\n * should we show packages/cabanas.\r\n * Packages are divided in tiers(A,B,C) and orders(1,2,3,4), this is configured\r\n * from AEM; When one of the already added packages is found in one tier we\r\n * automatically go to the next tier and check until we find a tier that has no\r\n * packages added to the reservation, this would be the returned tier.\r\n * @param {Object} state Global state.\r\n * @return {array} List of packages inside a Tier that is not present in the\r\n * current reservation.\r\n */\r\nexport const getPackagesAndCabanasFromSuitableTier = (state, isNewReservation) => {\r\n const packagesResult = getPackagesFromSuitableTier(state, isNewReservation) || [];\r\n const cabanasResult = getCabanasFromSuitableTier(state, isNewReservation) || [];\r\n\r\n return [...packagesResult, ...cabanasResult];\r\n};\r\n\r\n/**\r\n * Shapes the data related to the additional packages added for add a package\r\n * store. The package for this objects is merged from availability packages\r\n * data and the actual interactions from the user saved in addApackage strore.\r\n * @param {Object} state Global state\r\n * @return {array} List of objects containing additional packages data.\r\n */\r\nexport const getAditionalPackagesFromAddApackage = (state, shouldSplitCabanas) => {\r\n const availabilityPackages = keyBy(getPackages(state.packages), 'packageCode');\r\n\r\n const addedPackages = getAddedpackages(state.addApackage);\r\n\r\n // console.log('US#29565 - availabilityPackages', availabilityPackages);\r\n // console.log('US#29565 - addedPackages', addedPackages);\r\n\r\n const additionalPackages = Object.keys(addedPackages).map(packageId => {\r\n const packageFromAvailability = availabilityPackages[packageId];\r\n\r\n let additionalPackage = null;\r\n\r\n if (packageFromAvailability) {\r\n additionalPackage = {\r\n id: packageFromAvailability.packageCode,\r\n title: packageFromAvailability.title,\r\n packageAmount: packageFromAvailability.amount * addedPackages[packageId].value,\r\n quantityAdded: addedPackages[packageId].value,\r\n options: addedPackages[packageId].options,\r\n additionalTitle: packageFromAvailability.title,\r\n packageType: packageFromAvailability.packageType[0],\r\n chargeType: packageFromAvailability.chargeType\r\n };\r\n }\r\n\r\n return additionalPackage;\r\n });\r\n\r\n // Cabanas\r\n const allCabanas = getCabanas(state.packages);\r\n const availabilityCabanas = !shouldSplitCabanas ? keyBy(allCabanas, 'itemCode') : allCabanas;\r\n\r\n const additionalCabanas = Object.keys(addedPackages).map(packageId => {\r\n const cabana = addedPackages[packageId];\r\n const composedPackage = packageId.split('~');\r\n const cabanaFromAvailability = !shouldSplitCabanas\r\n ? availabilityCabanas[composedPackage[0]]\r\n : availabilityCabanas.find(\r\n availabilityCabana =>\r\n cabana.item &&\r\n cabana.item.packageCode === availabilityCabana.itemCode &&\r\n cabana.item.date === availabilityCabana.date\r\n );\r\n\r\n let additionalCabana = null;\r\n const completeCabana = availabilityPackages[cabana?.item?.packageCode];\r\n\r\n if (cabanaFromAvailability) {\r\n additionalCabana = {\r\n id: `${cabanaFromAvailability.itemCode}~${cabana.item.date}`,\r\n title: `${completeCabana?.title} ${GwDatesWrapper.format(cabana.item.date, 'ddd, MMM DD')}`,\r\n packageAmount: cabanaFromAvailability.roomRateTotal,\r\n quantityAdded: 1,\r\n options: 0,\r\n isCabana: true,\r\n rateCode: cabanaFromAvailability.rateCode\r\n };\r\n }\r\n\r\n return additionalCabana;\r\n });\r\n\r\n const packagesAux = additionalPackages.concat(additionalCabanas);\r\n\r\n return packagesAux.filter(Boolean);\r\n};\r\n\r\n/**\r\n * Get total package price from reservation detail taking into account if there\r\n * were added packages.\r\n * @param {Object} state GLobal state.\r\n * @return {number} Package total.\r\n */\r\nexport const getPackageTotalWithAdditionalPackages = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const addedPackages = getAddedpackages(state.addApackage);\r\n const packageTotal = getPackageTotalWithCabanas(reservationDetails);\r\n\r\n const availabilityPackagesByCode = keyBy(getPackages(state.packages), 'packageCode');\r\n\r\n if (isEmpty(addedPackages)) return packageTotal;\r\n const addedPackagesTotal = Object.keys(addedPackages).reduce((packageTotalAcc, addedPackage) => {\r\n const packageAvailability = availabilityPackagesByCode[addedPackage];\r\n\r\n if (!packageAvailability) return packageTotalAcc;\r\n\r\n return packageTotalAcc + packageAvailability.amount * addedPackages[addedPackage].value;\r\n }, packageTotal);\r\n\r\n // Cabanas calculation\r\n const addedCabanasTotal = Object.keys(addedPackages).reduce((cabanaTotalAcc, addedCabana) => {\r\n const availabilityCabanas = getCabanas(state.packages);\r\n const composedPackage = addedCabana.split('~');\r\n const cabanaAvailability = availabilityCabanas.find(\r\n cabana => cabana.itemCode === composedPackage[0] && cabana.date === composedPackage[1]\r\n );\r\n\r\n if (!cabanaAvailability) return 0;\r\n\r\n return cabanaTotalAcc + cabanaAvailability.roomRateTotal;\r\n }, 0);\r\n\r\n return addedPackagesTotal + addedCabanasTotal;\r\n};\r\n\r\n/**\r\n * Get total taxes amount from reservation detail taking into account if there\r\n * were added packages.\r\n * @param {Object} state GLobal state.\r\n * @return {number} Package total.\r\n */\r\nexport const getTaxesAmountWithAdditionalPackages = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const taxesAmount = getTaxesAmountWithCabanas(reservationDetails);\r\n const addedPackages = getAddedpackages(state.addApackage);\r\n const availabilityPackagesByCode = keyBy(getPackages(state.packages), 'packageCode');\r\n\r\n if (isEmpty(addedPackages)) return taxesAmount;\r\n\r\n return Object.keys(addedPackages).reduce((packageTotalAcc, addedPackage) => {\r\n const packageAvailability = availabilityPackagesByCode[addedPackage];\r\n\r\n if (!packageAvailability) return packageTotalAcc;\r\n\r\n return packageTotalAcc + packageAvailability.tax * addedPackages[addedPackage].value;\r\n }, taxesAmount);\r\n};\r\n\r\n/**\r\n * Get summary total from reservation detail taking into account if there\r\n * were added packages.\r\n * @param {Object} state GLobal state.\r\n * @return {number} Package total.\r\n */\r\nexport const getSummaryTotalWithAdditionalPackages = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const summaryTotal = getSummaryTotalWithCabana(reservationDetails);\r\n const addedPackages = getAddedpackages(state.addApackage);\r\n const availabilityPackagesByCode = keyBy(getPackages(state.packages), 'packageCode');\r\n\r\n if (isEmpty(addedPackages)) return summaryTotal;\r\n\r\n const packagesTotal = Object.keys(addedPackages).reduce((packageTotalAcc, addedPackage) => {\r\n const packageAvailability = availabilityPackagesByCode[addedPackage];\r\n\r\n let packageTotal = packageTotalAcc;\r\n\r\n if (packageAvailability) {\r\n packageTotal = packageTotalAcc + packageAvailability.total * addedPackages[addedPackage].value;\r\n }\r\n\r\n return packageTotal;\r\n }, summaryTotal);\r\n\r\n const cabanasTotal = Object.keys(addedPackages).reduce((cabanasTotalAcc, addedPackage) => {\r\n // Cabanas\r\n const availabilityCabanas = getCabanas(state.packages);\r\n const composedPackage = addedPackage.split('~');\r\n const cabanaAvailability = availabilityCabanas.find(\r\n cabana => cabana.itemCode === composedPackage[0] && cabana.date === composedPackage[1]\r\n );\r\n\r\n if (!cabanaAvailability) return 0;\r\n\r\n return cabanasTotalAcc + cabanaAvailability.roomRateTotal;\r\n }, 0);\r\n\r\n return packagesTotal + cabanasTotal;\r\n};\r\n\r\n/**\r\n * Get due at check in amount from reservation detail taking into account if\r\n * there were added packages.\r\n * @param {Object} state GLobal state.\r\n * @return {number} Package total.\r\n */\r\nexport const getDueAtCheckinAmountWithAdditionalPackages = state => {\r\n // If is paid with affirm we return 0\r\n const { isAlreadyPaidWithAffirm, affirmAmount } = getAffirmPaymentDueAtCheckIn(state, 0);\r\n if (isAlreadyPaidWithAffirm) {\r\n return affirmAmount;\r\n }\r\n const reservationDetails = cmpDataSelector(state);\r\n // If is not paid with affirm then the codes flows as normal\r\n const dueAtCheckinAmount = getDueAtCheckinAmountWithCabanas(reservationDetails);\r\n\r\n const addedPackages = getAddedpackages(state.addApackage);\r\n\r\n // Cabanas\r\n const cabanasTotal = Object.keys(addedPackages).reduce((cabanaTotalAcc, addedPackage) => {\r\n const availabilityCabanas = getCabanas(state.packages);\r\n const composedPackage = addedPackage.split('~');\r\n const cabanaAvailability = availabilityCabanas.find(\r\n cabana => cabana.itemCode === composedPackage[0] && cabana.date === composedPackage[1]\r\n );\r\n\r\n let cabanaTotal = 0;\r\n\r\n if (cabanaAvailability) {\r\n cabanaTotal = cabanaTotalAcc + cabanaAvailability.roomRateTotal;\r\n }\r\n\r\n return cabanaTotal;\r\n }, 0);\r\n\r\n // Additional Packages (not cabanas)\r\n const additionalPackagesTotal = Object.keys(addedPackages).reduce((acc, packageKey) => {\r\n const { value } = addedPackages[packageKey] || {};\r\n const selectedPackage = state.packages.packageAvailabilityList.find(item => item.packageCode === packageKey);\r\n\r\n const packageMultiplier = value ? value : 0;\r\n\r\n if (packageMultiplier && selectedPackage && selectedPackage.total) {\r\n return acc + selectedPackage.total * packageMultiplier;\r\n }\r\n\r\n return acc;\r\n }, 0);\r\n\r\n return dueAtCheckinAmount + cabanasTotal + additionalPackagesTotal;\r\n};\r\n\r\n/**\r\n * Get packages from reservation details entity and package amount.\r\n * @param {Object} state Global state.\r\n * @return {Object} Object shaped to be used.\r\n */\r\nexport const getPackagesWithAmount = state => {\r\n const {\r\n entities: {\r\n manageReservationDetails: { data, requestSuccess }\r\n }\r\n } = state;\r\n\r\n //if we get a false on the requestSuccess and we don't have existing data we end the run\r\n if (!requestSuccess && !data) return;\r\n //if we are done loading we check if we have data\r\n if (!data || Object.keys(data).length === 0) return;\r\n\r\n const reservationPackages = data.addOns;\r\n if (!reservationPackages) return;\r\n\r\n const formattedPackages = reservationPackages.map(pck => {\r\n return buildPackageWithAmount(\r\n pck.code,\r\n pck.content.title,\r\n pck.totalPrice,\r\n pck.quantity,\r\n pck.type,\r\n pck.packageCharge,\r\n pck.content.diningCredits\r\n );\r\n });\r\n\r\n return formattedPackages;\r\n};\r\n\r\n/**\r\n * Return and offer code error message with dynamic number of days if applies.\r\n * @param {*} state Global state.\r\n * @return {string|undefined} Offer code error message or undefined if valid.\r\n */\r\nexport const getOfferCodeErrorMessage = state => {\r\n const offerCodeErrorDetail = getOfferCodeErrorObj(state);\r\n\r\n return offerCodeErrorDetail && offerCodeErrorDetail.message;\r\n};\r\n\r\nexport const getOfferCodeErrorObj = state => {\r\n const offerCode = getOfferCode(state.offer);\r\n const { errorCode } = getOfferCodeError(state.plans) || {};\r\n const checkIn = getCheckIn(state.dates);\r\n const checkOut = getCheckOut(state.dates);\r\n\r\n if (!checkIn || !checkOut) return;\r\n\r\n return getOfferCodeErrorDetails({\r\n offerCode,\r\n offerCodeError: errorCode,\r\n checkIn,\r\n checkOut\r\n });\r\n};\r\n\r\n/**\r\n * @Function\r\n * Gets the amount payed with affirm, if a default amount is setted, then that amount is returned\r\n * amongside with the isAlreadyPaidWithAffirm flag\r\n * @param {Object} state\r\n * @param {Number} defaultAmount\r\n * @returns {Object} with the keys: {isAlreadyPaidWithAffirm, affirmAmount}.\r\n * The Flag isAlreadyPaidWithAffirm means the current reservation was paid with affirm\r\n * Amount is the amount paid with affirm, this value can be overwritten to fullfill some scenarios\r\n * such the dueAtCheckIn calculation\r\n */\r\nexport const getAffirmPayment = (state, defaultAmount = null) => {\r\n const reservationData = get(state.entities, 'reservationDetails.data', {});\r\n\r\n // If the reservation data is not empty\r\n if (!isEmpty(reservationData)) {\r\n const affirmAmount = get(reservationData, 'rateInfo.total');\r\n\r\n const paymentype = get(reservationData, 'paymentType');\r\n\r\n const isAlreadyPaidWithAffirm = paymentype === BACKEND_PAYMENT_TYPES.Affirm;\r\n\r\n return { isAlreadyPaidWithAffirm, affirmAmount };\r\n }\r\n\r\n return { isAlreadyPaidWithAffirm: false, affirmAmount: 0 };\r\n};\r\n\r\n/**\r\n * @Function\r\n * Gets the amount due at checkin with affirm\r\n * @param {Object} state\r\n * @param {Number} defaultAmount\r\n * @returns {Object} with the keys: {isAlreadyPaidWithAffirm, affirmAmount}.\r\n * The Flag isAlreadyPaidWithAffirm means the current reservation was paid with affirm\r\n * Amount is the amount paid with affirm, this value can be overwritten to fullfill some scenarios\r\n * such the dueAtCheckIn calculation\r\n */\r\nexport const getAffirmPaymentDueAtCheckIn = (state, defaultAmount = null) => {\r\n const reservationData = get(state.entities, 'reservationDetails.data', {});\r\n\r\n // If the reservation data is not empty\r\n if (!isEmpty(reservationData)) {\r\n const affirmAmount = defaultAmount ? defaultAmount : 0;\r\n\r\n const isAlreadyPaidWithAffirm = get(reservationData, 'isAffirm');\r\n\r\n return { isAlreadyPaidWithAffirm, affirmAmount };\r\n }\r\n\r\n return { isAlreadyPaidWithAffirm: false, affirmAmount: defaultAmount ? defaultAmount : 0 };\r\n};\r\n\r\nconst getTierToShow = (state, isNewReservation = false) => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const reservationType = getReservationType(reservationDetails);\r\n\r\n if (reservationType === RESERVATION_TYPES.cabana) return 'default';\r\n\r\n // 1. Get packages from AEM grouped by tiers\r\n const packagesTiers = getPackagesGroupedByTier(state.packages, reservationType, isNewReservation);\r\n\r\n // 2. get packages added to reservation\r\n const packagesInReservation = getReservationDetailsEntityPackages(reservationDetails);\r\n // 3. get cabanas added to reservation\r\n const cabanasInReservation = getCabanas(reservationDetails);\r\n // 4. get tier codes\r\n const tierCodes = Object.keys(packagesTiers).sort();\r\n // 5. get the default tier\r\n const defaultTier = tierCodes[tierCodes.indexOf('A')];\r\n const isCabanaAvailable = getCabanaAvailability(state.packages);\r\n const isCabanaTier = tier => {\r\n const packageTiers = packagesTiers[tier];\r\n\r\n if (!packageTiers) return false;\r\n\r\n return packagesTiers[tier].some(packageInTier => {\r\n return Object.values(CABANAS_CODES_TYPES).includes(packageInTier.packageCode);\r\n });\r\n };\r\n // 5. If the reservation is new or there are no packages added or is late checkout package only we return the default tier, tier A.\r\n if (\r\n (isEmpty(packagesInReservation) && isEmpty(cabanasInReservation)) ||\r\n isNewReservation ||\r\n checkIsLateCheckoutPackageOnly(packagesInReservation)\r\n ) {\r\n return isCabanaTier(defaultTier) && !isCabanaAvailable ? 'default' : defaultTier;\r\n }\r\n\r\n // 6. Select the suitable tier. If a package from tier A exist fallback to\r\n // tier B or C and so on until reaching last tear which fallback to default.\r\n const suitetableTiers = tierCodes.reduce((acc, tierCode) => {\r\n acc[tierCode] = true;\r\n return acc;\r\n }, {});\r\n\r\n suitetableTiers.default = true;\r\n\r\n if (packagesInReservation) {\r\n packagesInReservation.forEach(packageInReservation => {\r\n tierCodes.forEach(tierCode => {\r\n const isInTier = packagesTiers[tierCode].some(packageInTier => {\r\n if (PACKAGES_GROUPS.includes(packageInReservation.packageGroup)) {\r\n return packageInTier.packageCode === packageInReservation.packageGroup;\r\n }\r\n return packageInTier.packageCode === packageInReservation.packageCode;\r\n });\r\n\r\n if (isInTier) suitetableTiers[tierCode] = false;\r\n });\r\n });\r\n }\r\n\r\n if (cabanasInReservation) {\r\n cabanasInReservation.forEach(cabanaInReservation => {\r\n tierCodes.forEach(tierCode => {\r\n const isInTier = packagesTiers[tierCode].some(\r\n packageInTier => packageInTier.packageCode === cabanaInReservation.roomType\r\n );\r\n\r\n if (isInTier) suitetableTiers[tierCode] = false;\r\n });\r\n });\r\n }\r\n\r\n const suitableTier = Object.keys(suitetableTiers).find(suitableTier => suitetableTiers[suitableTier]);\r\n\r\n return isCabanaTier(suitableTier) && !isCabanaAvailable ? 'default' : suitableTier;\r\n};\r\n\r\n/**\r\n * Gets the dynamic tile based on availability and existing packages\r\n * @param {Object} state store\r\n * @param {boolean} isNewReservation flag that indicates if the reservation is a new reservation\r\n * @return {(Object|undefined)} The dynamic tile content for the respective\r\n * tier or undefined if there is no tier to show.\r\n */\r\nexport const getDynamicTile = (state, isNewReservation = false) => {\r\n const validPackageTypes = getValidPackageTypes(state);\r\n const tiers = getTierForReservationType(state, isNewReservation);\r\n\r\n const selectedTier = Object.keys(tiers).find(tierKey => validPackageTypes.includes(tiers[tierKey].packageType));\r\n\r\n return tiers[selectedTier || 'default'];\r\n};\r\n\r\n/**\r\n * We can get the packages amount from different sources, we check in this order\r\n * 1. getPackagesNetTotal -- from this Packages Selectors\r\n * 2. getPackageTotal -- from Reservation Details Entity\r\n * 3. getAddedpackages -- And at least from getAddedPackages\r\n * @param {Object} state Store\r\n * @param {bool} fromReservation Flag to get the amounts from Reservation Detail entity\r\n */\r\nexport const getPackagesNetTotalFromSources = (state, fromReservation = false) => {\r\n let amount = 0;\r\n\r\n let packages = get(state, 'packages.selectedPackages', null);\r\n\r\n if (packages && !fromReservation) {\r\n amount = getPackagesNetTotal(state.packages);\r\n } else {\r\n // 1. Get the packages directly from reservation\r\n const reservationDetails = get(state, 'entities.reservationDetails', null);\r\n const addAPackageState = get(state, 'addApackage', null);\r\n if (reservationDetails) {\r\n amount = getPackageTotal(reservationDetails);\r\n }\r\n // 2. Get the packages from addAPackage state\r\n else if (addAPackageState) {\r\n const addedPackages = getAddedpackages(addAPackageState);\r\n const availabilityPackagesByCode = keyBy(getPackages(state.packages), 'packageCode');\r\n\r\n if (isEmpty(addedPackages)) return amount;\r\n\r\n Object.keys(addedPackages).reduce((packageTotalAcc, addedPackage) => {\r\n const packageAvailability = availabilityPackagesByCode[addedPackage];\r\n\r\n let packageTotal = packageTotalAcc;\r\n\r\n if (packageAvailability) {\r\n packageTotal = packageTotalAcc + packageAvailability.total * addedPackages[addedPackage].value;\r\n }\r\n\r\n return packageTotal;\r\n }, amount);\r\n }\r\n }\r\n\r\n return amount;\r\n};\r\n\r\n/**\r\n *\r\n * @param {object} state Redux State\r\n * @param {boolean} isResDetail Flag to check if the packages charge is at CMP page\r\n * @param {boolean} isDueToday Flag to check if the package charge is a due today at summary cost\r\n */\r\nexport const getPackagesNetTotalByPacksAtCheckout = (state, isResDetail = false, isDueToday = false) => {\r\n let guaranteeType = '';\r\n let offerType = '';\r\n let offerCode = '';\r\n\r\n // Get the offer type, place the amount if is ADV\r\n if (isResDetail) {\r\n guaranteeType = get(state, 'entities.reservationDetails.data.guaranteeType', '');\r\n\r\n offerCode = get(state, 'entities.reservationDetails.data.offerCode', '');\r\n\r\n // Add the due today on Group Offer Codes\r\n // We should add the amount and taxes just for the first one night\r\n offerType = get(state, 'suite.selectedSuite.offerType', '');\r\n } else {\r\n // Get guarantee and offer by availability call\r\n const { suiteDetailedAvailability, selectedSuite } = state.suite;\r\n const hasDetailedAvailability = suiteDetailedAvailability && suiteDetailedAvailability.length > 0;\r\n\r\n offerCode = get(state, 'offer.code', '');\r\n\r\n guaranteeType = hasDetailedAvailability ? get(suiteDetailedAvailability[0], 'guaranteeType', '') : '';\r\n\r\n offerType = get(selectedSuite, 'offerType', '');\r\n }\r\n\r\n // If we have the packages upfront disabled and\r\n // If the offer code doesn't require any advance payment\r\n // Like ADV or a Group Code then we don't send this calculation\r\n // Or if the offer code is AMTCERT we send a 0 for the due today\r\n if (\r\n (isDueToday && !optimizelyChargePackagesAtCheckout) ||\r\n offerCode === DEFAULT_RATE_CODE ||\r\n (guaranteeType !== GUARANTEE_TYPE.advancePayment && offerType !== OFFER_CODE_TYPE.group)\r\n ) {\r\n // Flex package should be inside the Due Today.\r\n // So we get the selected packages and see if there is any flex package in there\r\n // If the condition don't fall here, getPackagesNetTotalFromSources take care about it\r\n const { packages } = state;\r\n const selectedPackages = get(packages, 'selectedPackages');\r\n if (selectedPackages) {\r\n const flexPackage = selectedPackages.find(pckg => pckg.packageCode === FLEX_TRIP_PACKAGE_CODE);\r\n return get(flexPackage, 'amount', 0);\r\n }\r\n return 0;\r\n }\r\n\r\n return getPackagesNetTotalFromSources(state, isResDetail);\r\n};\r\n\r\nexport const getValidOfferCode = state => {\r\n const offerCode = getOfferCode(state.offer);\r\n const offerCodeError = getOfferCodeError(state.plans);\r\n\r\n if (offerCode && (!offerCodeError || (offerCodeError && !offerCodeError.errorCode))) {\r\n return getNormalizedCode(offerCode);\r\n }\r\n\r\n return '';\r\n};\r\n\r\nexport const getValidRateCode = (state, suite) => {\r\n const defaultRateCodeSuites = 'BBAR';\r\n const defaultRateCodeCondos = 'BARC';\r\n\r\n const offerCode = getValidOfferCode(state);\r\n const isCondo = suite.suiteType === SUITE_TYPES.condo;\r\n const defaultRateCode = isCondo ? defaultRateCodeCondos : defaultRateCodeSuites;\r\n\r\n if (!offerCode) {\r\n return defaultRateCode;\r\n }\r\n\r\n return suite.rateCode ?? offerCode;\r\n};\r\n\r\n/**\r\n * Get List Packages from Reservation Details\r\n * @param {Object} state Redux state\r\n * @return {Array.<Object>} List of packages from Reservation Details\r\n */\r\nexport const getReservationPackages = state => {\r\n const reservationPackages = getReservationPackages(state);\r\n return reservationPackages;\r\n};\r\n\r\n/**\r\n * Get the day type or SIP for the selected suite\r\n * @param {object} state Redux state of the application\r\n * @returns number\r\n */\r\nexport const getDayTypeForSelectedSuite = state => {\r\n const dayType = get(state, 'suite.dayType', 0);\r\n return dayType;\r\n};\r\n\r\n/**\r\n * Gets a package with amount for the package section in the cost summary.\r\n * @param {string} packageCode for differentiate it in the package section for the cost summary.\r\n * @param {string} packageTitle which will appear in the package section for the cost summary.\r\n * @param {Package Amount} amount package amount.\r\n * @param {number} quantity for the package.\r\n * @returns Package for the package section.\r\n */\r\nconst buildPackageWithAmount = (\r\n packageCode,\r\n packageTitle,\r\n amount,\r\n quantity,\r\n packageType = '',\r\n packageCharge = '',\r\n packageAllowance = 0,\r\n diningCredits\r\n) => {\r\n return {\r\n packageCode: packageCode,\r\n packageTitle: packageTitle,\r\n packageAmount: amount,\r\n quantity: quantity,\r\n packageType,\r\n packageCharge,\r\n packageAllowance: packageAllowance,\r\n diningCredits\r\n };\r\n};\r\n\r\n/**\r\n * Get current booking engine rates to send to backend\r\n * @param {object} state Redux state\r\n * @param {bool} isBookingFlow Check if isBookingFlow (plan page || isDynamicFlow) this is the reservation normal flow, or daypasses\r\n * @returns Array.object With the current booking engine rates\r\n */\r\nexport const getSuiteRates = (state, isBookingFlow) => {\r\n let detailedAvailability = [];\r\n\r\n if (isBookingFlow) {\r\n detailedAvailability = get(state, 'suite.suiteDetailedAvailability', []);\r\n } else {\r\n const { dayPasses } = state;\r\n const dayPassItems = get(dayPasses, 'item', []);\r\n const dayPassCode = get(dayPasses, 'selectedItemCode', '');\r\n\r\n for (var key in dayPassItems) {\r\n var item = dayPassItems[key];\r\n if (item.itemCode === dayPassCode) {\r\n detailedAvailability = [\r\n {\r\n date: item.date,\r\n suiteCode: item.itemCode,\r\n totalNightlyRate: item.roomRateTotal,\r\n taxesAndFees: item.taxesAndFees\r\n }\r\n ];\r\n }\r\n }\r\n }\r\n\r\n return detailedAvailability;\r\n};\r\n\r\nexport const getAdjustmentCodesByPackageCode = (state, packageCode) => {\r\n const allPackages = getPackages(state.packages);\r\n const foundPackage = allPackages.find(pkg => pkg.packageCode === packageCode);\r\n\r\n const { adjustmentCode } = foundPackage;\r\n\r\n return adjustmentCode;\r\n};\r\n\r\nconst getExistingPackageTypes = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const packages = getPackages(state.packages);\r\n const packagesInReservation = getReservationDetailsEntityPackages(reservationDetails);\r\n const cabanasInReservation = getCabanas(reservationDetails);\r\n\r\n const existingPackageTypes = [];\r\n existingPackageTypes.push(...getExistingPackageTypesForPackages(packagesInReservation, packages));\r\n existingPackageTypes.push(...getExistingPackageTypesForCabanas(cabanasInReservation, packages));\r\n return existingPackageTypes;\r\n};\r\n\r\nconst getExistingPackageTypesForCabanas = (cabanasInReservation, packages) => {\r\n const cabanas = packages.filter(p => p.packageType && p.packageType[0] === PACKAGE_TYPE.cabanasAndFlexTrip);\r\n return cabanasInReservation.reduce((packageTypes, currentCabana) => {\r\n const cabanaAvailable = cabanas.filter(cabanaAvailable => cabanaAvailable.packageCode === currentCabana.roomType);\r\n\r\n const containsCabana =\r\n cabanaAvailable &&\r\n cabanaAvailable.length > 0 &&\r\n cabanaAvailable[0].packageType &&\r\n cabanaAvailable[0].packageType.length > 0;\r\n\r\n if (!containsCabana) return packageTypes;\r\n\r\n return [...packageTypes, cabanaAvailable[0].packageType[0]];\r\n }, []);\r\n};\r\n\r\nconst getExistingPackageTypesForPackages = (packagesInReservation, packages) => {\r\n return packagesInReservation.reduce((packageTypes, currentPackage) => {\r\n const packageAvailable = packages.filter(\r\n pkgAvailable =>\r\n pkgAvailable.packageCode === currentPackage.packageCode ||\r\n pkgAvailable.packageCode === currentPackage.packageGroup\r\n );\r\n\r\n const containsPackageType =\r\n packageAvailable &&\r\n packageAvailable.length > 0 &&\r\n packageAvailable[0].packageType &&\r\n packageAvailable[0].packageType.length > 0;\r\n\r\n if (!containsPackageType) return packageTypes;\r\n\r\n return [...packageTypes, packageAvailable[0].packageType[0]];\r\n }, []);\r\n};\r\n\r\nconst getTierForReservationType = (state, isNewReservation) => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const reservationType = getReservationType(reservationDetails);\r\n\r\n /**\r\n * Suite and Cabana should use TIERS_CONTENT_MY_RESERVATIONS as the default\r\n * Daypas on confirmation should show TIERS_CONTENT_DAYPASS_CONFIRMATION\r\n * Daypass on CMP should show TIERS_CONTENT_DAYPASS\r\n */\r\n switch (reservationType) {\r\n case RESERVATION_TYPES.dayPass:\r\n if (isNewReservation) return TIERS_CONTENT_DAYPASS_CONFIRMATION;\r\n return TIERS_CONTENT_DAYPASS;\r\n default:\r\n return TIERS_CONTENT_MY_RESERVATIONS;\r\n }\r\n};\r\n\r\nconst getValidPackageTypes = state => {\r\n const filteredPackageTypes = getFilteredPackageTypesBasedOnCabanaAvailability(state);\r\n\r\n const existingPackageTypes = getExistingPackageTypes(state);\r\n return filteredPackageTypes.reduce((packageTypes, currentPackageType) => {\r\n if (existingPackageTypes.includes(currentPackageType)) return packageTypes;\r\n\r\n return [...packageTypes, currentPackageType];\r\n }, []);\r\n};\r\n\r\nexport const showLoyalty = state => {\r\n const isLoyaltyEnabled = state.lodgeConfig.isLoyaltyEnabled;\r\n const isOnLLP = state.router.location.pathname === '/voyagers-club';\r\n const isPrimerState = state.lodgeConfig.isInPrimerState;\r\n const isUserSignedIn = state.account.userIsLoggedIn;\r\n const loyaltyOptIn = state.account.currentLoggedInUser?.loyaltyOptIn || false;\r\n\r\n if (isLoyaltyEnabled === false || optimizelyHideLoyalty === true) return false; // no Loyalty if in 'Dark' state or AB test is true\r\n if (isOnLLP === true) return true; // show Loyalty if not in 'dark' state and user is in LLP\r\n\r\n // not in 'dark' and not in 'LLP' - BkgEng\r\n if (isPrimerState === true) {\r\n // BkgEng with Loyalty in 'Primer' state\r\n if (isUserSignedIn === true) {\r\n // BkgEng with Loyalty in 'Primer' state + user is logged in\r\n if (loyaltyOptIn === true) {\r\n // BkgEng with Loyalty in 'Primer' state + user is logged in + user is Opted in Loyalty program\r\n return true; //\r\n } // BkgEng with Loyalty in 'Primer' state + user is logged in + user is NOT Opted in Loyalty program\r\n else {\r\n return false;\r\n }\r\n } // BkgEng with Loyalty in 'Primer' state + guest user\r\n else {\r\n return false;\r\n }\r\n } // BkgEng with Loyalty in 'Public' state\r\n else {\r\n return true;\r\n }\r\n};\r\n\r\n/**\r\n * Get the total amount of the packages\r\n * @param {*} state\r\n * @returns\r\n */\r\nexport const packagesWithAmountFromReservationData = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const { data, requestSuccess } = reservationDetails;\r\n\r\n //if we get a false on the requestSuccess and we don't have existing data we end the run\r\n if (!requestSuccess && !data) return;\r\n //if we are done loading we check if we have data\r\n if (!data || Object.keys(data).length === 0) return;\r\n\r\n const reservationPackages =\r\n data?.addOns?.filter(pkg => !pkg.isAdjustment) ?? data?.packages?.filter(pkg => !pkg.isAdjustment) ?? [];\r\n const cabanas = getCabanasAsPackages(reservationDetails) ?? [];\r\n\r\n const formattedPackages = [...reservationPackages, ...cabanas]\r\n .filter(pkg => !pkg.isAdjustment)\r\n .map(pkg => {\r\n return {\r\n amount: pkg.totalPrice ?? pkg.packageAmount ?? 0,\r\n packageAllowance: pkg.allowance ?? pkg.content?.diningCredits ?? 0,\r\n packageCharge: pkg.chargeType ?? '',\r\n packageCode: pkg.code ?? pkg.packageCode ?? '',\r\n packageName: pkg.content?.title ?? pkg.packageTitle ?? pkg.shortDescription ?? pkg.description ?? '',\r\n packageType: pkg.type ?? pkg.packageType ?? '',\r\n quantity: pkg.quantity ?? 0\r\n };\r\n });\r\n\r\n return formattedPackages;\r\n};\r\n","// Offer action types\r\n\r\nconst offerActionTypes = {\r\n ADD_OFFER_CODE: 'ADD_OFFER_CODE',\r\n REMOVE_OFFER_CODE: 'REMOVE_OFFER_CODE',\r\n SET_OFFER_CODE_DESCRIPTION: 'SET_OFFER_CODE_DESCRIPTION',\r\n CREATE_OFFER_ERROR: 'CREATE_OFFER_ERROR',\r\n ADD_OFFER_ACTIVE_TYPE: 'ADD_OFFER_ACTIVE_TYPE',\r\n ADD_OFFER_EMAIL_ACTIVE_TYPE: 'ADD_OFFER_EMAIL_ACTIVE_TYPE',\r\n REMOVE_OFFER_ACTIVE_TYPE: 'REMOVE_OFFER_ACTIVE_TYPE',\r\n REMOVE_OFFERS_ALL_ACTIVE_TYPE: 'REMOVE_ALL_ACTIVE_OFFERS_TYPE__FIX_DUPLICATE',\r\n VERIFY_ACTIVE_OFFERS: 'VERIFY_ACTIVE_OFFERS'\r\n};\r\n\r\nexport default offerActionTypes;\r\n","// Lodge Config Selectors\r\n\r\nexport const getLoyaltyEnabledLocation = state => {\r\n return state.isLoyaltyEnabled;\r\n};\r\n\r\nexport const getOffersEnabledLocation = state => {\r\n return state.isOffersEnabled;\r\n};\r\n\r\nexport const getPointsMultiplier = state => {\r\n return state.loyaltyPointsMultiplier;\r\n};\r\n\r\nexport const getReferralEnabledLocation = state => {\r\n return state.isLoyaltyReferralEnabled;\r\n};\r\n\r\nexport const getDiningPackagesEnhancedUIActive = state => {\r\n return state.isDiningPackagesEnhancedUIEnabled;\r\n};\r\n\r\nexport const getDynamicTileActive = state => {\r\n return state.isDynamicTileEnabled;\r\n};\r\n\r\nexport const getHideOnlineCheckinText = state => {\r\n return state.hideOnlineCheckinText;\r\n};\r\n\r\nexport const getaffirmPubKey = state => {\r\n return state.affirmPubKey;\r\n};\r\n\r\nexport const getshowCaliforniaResortFeeVariation = state => {\r\n return state.showCaliforniaResortFeeVariation;\r\n};\r\n\r\nexport const getIsGeolocationEnabled = state => {\r\n return state.isGeolocationEnabled;\r\n};\r\n\r\nexport const getStickyBottomBookingWidget = state => {\r\n return state.stickyBottomBookingWidget;\r\n};\r\n\r\nexport const getIsLocationQuestionnaireEnabled = state => {\r\n return state.isLocationQuestionnaireEnabled;\r\n};\r\n\r\nexport const getPricePerWaterPass = state => {\r\n return state.pricePerWaterPass;\r\n};\r\n\r\nexport const getFilters = state => {\r\n return JSON.parse(state.filters);\r\n};\r\n\r\nexport const getAdditionalPersonAmount = state => {\r\n return state.additionalPersonAmount;\r\n};\r\n\r\nexport const getIsHighestRatesEnabled = state => {\r\n return state.isHighestRatesEnabled;\r\n};\r\n\r\nexport const getIsRateCalEnabled = state => {\r\n return state.isRateCalEnabled;\r\n};\r\n\r\nexport const getUpdateSearchFullPageRefresh = state => {\r\n return state.updateSearchFullPageRefresh;\r\n};\r\n\r\nexport const getFetchRestrictionsEnabled = state => {\r\n return state.isFetchRestrictionsEnabled;\r\n};\r\n\r\nexport const getPerNightParkingFee1 = state => {\r\n return state.perNightParkingFee1;\r\n};\r\n\r\nexport const getPerNightParkingFee2 = state => {\r\n return state.perNightParkingFee2;\r\n};\r\n\r\nexport const getPerNightParkingFee3 = state => {\r\n return state.perNightParkingFee3;\r\n};\r\n\r\nexport const getParkingFeeStartDate = state => {\r\n return state.parkingFeeStartDate;\r\n};\r\n\r\nexport const getParkingFeeEndDate = state => {\r\n return state.parkingFeeEndDate;\r\n};\r\n\r\nexport const getClientCardTokenization = state => {\r\n return state.clientCardTokenization;\r\n};\r\n\r\nexport const getCreditCardAuthUrl = state => {\r\n return state.creditCardAuthUrl;\r\n};\r\n\r\nexport const getNewPricingRulesLodgeList = state => {\r\n return JSON.parse(state?.newPricingRulesLodgeList);\r\n};\r\n\r\nexport const getAgeThreshold = state => {\r\n return state?.ageThreshold;\r\n};\r\n\r\nexport const getIsLowestRatesRestrictionsEnabled = state => {\r\n return state.isLowestRatesRestrictionsEnabled;\r\n};\r\n\r\nexport const getPaymentMethodsAllowed = state => {\r\n return {\r\n creditEnabled: state.creditEnabled,\r\n affirmEnabled: state.affirmEnabled,\r\n applePayEnabled: state.applePayEnabled,\r\n googlePayEnabled: state.googlePayEnabled,\r\n payPalEnabled: state.payPalEnabled,\r\n amexEnabled: state.amexEnabled\r\n };\r\n};\r\n\r\nexport const getShouldLeadGenPop = state => {\r\n return state.shouldLeadGenPop;\r\n};\r\n\r\nexport const getParkingCallout = state => {\r\n return state.parkingFeeCallout;\r\n};\r\n\r\nexport const getParkingCalloutTitle = state => {\r\n return state.parkingFeeCalloutTitle;\r\n};\r\n\r\nexport const getParkingCalloutDescription = state => {\r\n return state.parkingFeeCalloutDescription;\r\n};\r\n\r\nexport const getParkingFeeWarning = state => {\r\n return state.bookingSummaryParkingFee;\r\n};\r\n\r\nexport const getUffTileEnabled = state => {\r\n return state.uffTileEnabled;\r\n};\r\n\r\nexport const getIsLoyaltyPointsExpirationOnProfileEnabled = state => {\r\n return state.isLoyaltyPointsExpirationOnProfileEnabled;\r\n};\r\n\r\nexport const getIsCartActive = state => {\r\n return state.isCartActive;\r\n};\r\nexport const getIsI4IframeActive = state => {\r\n return state.isIFrameEnabled;\r\n};\r\n\r\nexport const getIsRoomUnbundledRateWPAvailable = state => {\r\n return state.isRoomUnbundledRateWPAvailable;\r\n};\r\n\r\nexport const getIsNewPatchEndpoint = state => {\r\n return state.newPatchEndpoint;\r\n};\r\n\r\nexport const getMaxOccupancy = state => state.maxOccupancy;\r\n\r\nexport const getBeginReservationDate = state => state.beginReservationsDate;\r\n\r\nexport const getLoyaltyPointsToEarn = state => {\r\n return state.loyaltyPointsToEarn;\r\n};\r\n\r\nexport const getLoyaltyEarnThresholdNights = state => {\r\n return state.loyaltyEarnThresholdNights;\r\n};\r\n\r\nexport const getShowPackagesInAddGuestsModal = state => {\r\n return state.showPackagesInAddGuestsModal;\r\n};\r\n\r\nexport const getIsManageYourReservationEnabled = state => {\r\n return state.isManageYourReservationEnabled;\r\n};\r\n\r\nexport const getSuitePriceIncludedTaxesAndFees = state => {\r\n return state.suitePriceIncludedTaxesAndFees;\r\n};\r\n\r\nexport const getTaxAndFeesLabels = state => {\r\n return state.taxAndFeeLabels ? JSON.parse(state.taxAndFeeLabels) : {};\r\n};\r\n\r\nexport const getIsCancelReservationEnabled = state => {\r\n return state.isCancelReservationEnabled;\r\n};\r\n\r\nexport const getIsAddGuestsEnabled = state => {\r\n return state.isAddGuestsEnabled;\r\n};\r\n\r\nexport const getBirthdayPartyInclusionList = state => {\r\n return state.birthdayPartyInclusionList;\r\n};\r\n\r\nexport const getIsBdayBookingWidgetActive = state => {\r\n return state.isBdayBookingWidgetActive;\r\n};\r\n\r\nexport const getBeginPartyReservationsDate = state => {\r\n return state.beginPartyReservationsDate;\r\n};\r\nexport const getPartyKidsPerAdultRatio = state => {\r\n return state.partyKidsPerAdultRatio;\r\n};\r\nexport const getPartyMaxGuestCount = state => {\r\n return state.partyMaxGuestCount;\r\n};\r\n\r\nexport const getMinimumBookingDaysRestriction = state => {\r\n return state.minimumBookingDaysRestriction;\r\n};\r\nexport const getMaximumBookingDaysRestriction = state => {\r\n return state.maximumBookingDaysRestriction;\r\n};\r\n\r\nexport const getShowDiningPageInUFFFlow = state => {\r\n return state.showDiningPageInUFFFlow;\r\n};\r\n\r\nexport const getIdMeParameters = state => {\r\n return state.idMeParameters;\r\n};\r\n\r\nexport const getIsHoldCancelReservationEnabled = state => state.isHoldCancelReservationEnabled;\r\n","import axios from 'axios';\r\n\r\nfunction encodeUrlQueryParameters() {\r\n axios.defaults.paramsSerializer = params => {\r\n let result = '';\r\n Object.keys(params).forEach(key => {\r\n const values = Array.isArray(params[key]) ? params[key] : [params[key]];\r\n values.forEach(value => {\r\n result += `${key}=${encodeURIComponent(value)}&`;\r\n });\r\n });\r\n return result.substr(0, result.length - 1);\r\n };\r\n}\r\n\r\nexport { encodeUrlQueryParameters };\r\n","import axios from 'axios';\r\nimport ApiResponseError from '../../infrastructure/Exceptions/ApiResponseError';\r\nimport { ErrorTypes } from '../../infrastructure/Exceptions/utils/ResponseErrorUtils';\r\nimport { encodeUrlQueryParameters } from '../../infrastructure/serializer/axios_serializers';\r\nimport { isArrayEmpty } from '../../utilities/arraysUtils';\r\nimport AuthClient from '../auth/AuthClient';\r\n\r\nconst RequestMethods = {\r\n GET: 'GET',\r\n PUT: 'PUT',\r\n POST: 'POST',\r\n DELETE: 'DELETE',\r\n PATCH: 'PATCH'\r\n};\r\nconst headerJson = { 'Content-Type': 'application/json' };\r\n\r\nconst authClient = new AuthClient();\r\nconst renewToken = async () => {\r\n var user = authClient.getUser();\r\n if (user) {\r\n // check to see if we should renew the access token\r\n if (user.accessTokenExpiry < new Date().getTime()) {\r\n await authClient.renewToken();\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Abstract wrapper class to call the API Endpoints\r\n * @abstract\r\n * @class GWRApiClient\r\n */\r\nexport default class GWRApiClient {\r\n /**\r\n * @constructor\r\n * If a token is provided, then we use that token and we set isLoggedIn as true to perform the API calls\r\n * If there isn't any token provided, then we use the one from the current logged user.\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(url = '', token = '') {\r\n this.url = url;\r\n this.token = token;\r\n this.isLoggedIn = token !== '';\r\n\r\n if (token === '') {\r\n var user = authClient.getUser();\r\n if (user && user.id) {\r\n this.token = user.accessToken;\r\n this.isLoggedIn = true;\r\n }\r\n }\r\n\r\n encodeUrlQueryParameters();\r\n }\r\n\r\n /**\r\n * @function\r\n * Upper wrapper method to perform the call to the API.\r\n * @param {string} urlRequest\r\n * The url to the API endpoint\r\n * @param {RequestMethods} method\r\n * The http verb\r\n * @param {object} requestObject\r\n * All the information regarding the request: params (query string), data and headers\r\n */\r\n async apiCall(urlRequest, method, requestObject, withCredentials = true) {\r\n const requestObjectWithCredentials = {\r\n ...requestObject,\r\n withCredentials: withCredentials\r\n };\r\n\r\n // GET REQUIRED FIELDS\r\n const requiredFields = requestObject.requiredFields;\r\n\r\n // VALIDATE REQURED FIELDS ON PARAMS OR DATA\r\n if (requiredFields && !isArrayEmpty(requiredFields)) {\r\n const hasParams = 'params' in requestObject;\r\n const hasData = 'data' in requestObject;\r\n\r\n const verifyRequiredFields = (fields, values) => {\r\n const missingValueOnRequiredField = fields.filter(key => !values[key]);\r\n if (!isArrayEmpty(missingValueOnRequiredField)) {\r\n const error = this.throwResponseError(\r\n ErrorTypes.MissingRequiredField,\r\n null,\r\n `${missingValueOnRequiredField.join(', ')}`\r\n );\r\n console.log('error', error);\r\n return error;\r\n }\r\n };\r\n\r\n if (hasParams) {\r\n verifyRequiredFields(requiredFields, requestObject.params);\r\n }\r\n if (hasData) {\r\n verifyRequiredFields(requiredFields, requestObject.data);\r\n }\r\n }\r\n\r\n try {\r\n switch (method) {\r\n case RequestMethods.GET:\r\n return await axios.get(urlRequest, requestObjectWithCredentials);\r\n case RequestMethods.PUT:\r\n return await axios.put(urlRequest, requestObject.data, {\r\n headers: requestObject.headers,\r\n withCredentials: withCredentials\r\n });\r\n case RequestMethods.POST:\r\n return await axios.post(urlRequest, requestObject.data, {\r\n headers: requestObject.headers,\r\n withCredentials: withCredentials\r\n });\r\n case RequestMethods.DELETE:\r\n return await axios.delete(urlRequest, requestObjectWithCredentials);\r\n case RequestMethods.PATCH:\r\n return await axios.patch(urlRequest, requestObject.data, {\r\n headers: requestObject.headers,\r\n withCredentials: withCredentials\r\n });\r\n default:\r\n return undefined;\r\n }\r\n } catch (err) {\r\n this.throwResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a GET request for a non authenticated API endpoint.\r\n * @param {string} urlRequest\r\n * @param {object} params\r\n * sent as a query string parameters\r\n */\r\n async getApiCall(urlRequest, params = {}, withCredentials = true, requiredFields = []) {\r\n let requestObject = {\r\n headers: headerJson,\r\n params: params,\r\n requiredFields\r\n };\r\n return this.apiCall(urlRequest, RequestMethods.GET, requestObject, withCredentials);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a GET request for an Authenticated API endpoint.\r\n * If the user is not logged in nor any token provided then an Error will be thrown.\r\n * @param {string} urlRequest\r\n * @param {object} params\r\n * sent as a query string parameters\r\n */\r\n async getApiCallAuth(urlRequest, params = {}, requiredFields = []) {\r\n if (!authClient.isTokenPresent()) {\r\n this.throwResponseError(ErrorTypes.UserNotLoggedInError);\r\n }\r\n\r\n await renewToken();\r\n\r\n let requestObject = {\r\n headers: {\r\n headerJson\r\n },\r\n params: params,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.GET, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a PUT request for an Non-Authenticated API endpoint.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async putApiCall(urlRequest, data, requiredFields = []) {\r\n let requestObject = {\r\n headers: headerJson,\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.PUT, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a PUT request for an Authenticated API endpoint.\r\n * If the user is not logged in nor any token provided then an Error will be thrown.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async putApiCallAuth(urlRequest, data, requiredFields = []) {\r\n if (!authClient.isTokenPresent()) {\r\n this.throwResponseError(ErrorTypes.UserNotLoggedInError);\r\n }\r\n\r\n await renewToken();\r\n\r\n let requestObject = {\r\n headers: {\r\n headerJson\r\n },\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.PUT, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a POST request for an Non-Authenticated API endpoint.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async postApiCall(urlRequest, data, withCredentials = true, requiredFields = []) {\r\n let requestObject = {\r\n headers: headerJson,\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.POST, requestObject, withCredentials);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a POST request for an Authenticated API endpoint.\r\n * If the user is not logged in nor any token provided then an Error will be thrown.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async postApiCallAuth(urlRequest, data, requiredFields = []) {\r\n if (!authClient.isTokenPresent()) {\r\n this.throwResponseError(ErrorTypes.UserNotLoggedInError);\r\n }\r\n\r\n await renewToken();\r\n\r\n let requestObject = {\r\n headers: {\r\n headerJson\r\n },\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.POST, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a DELETE request for an Authenticated API endpoint.\r\n * If the user is not logged in nor any token provided then an Error will be thrown.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async deleteApiCallAuth(urlRequest, data, requiredFields = []) {\r\n if (!authClient.isTokenPresent()) {\r\n this.throwResponseError(ErrorTypes.UserNotLoggedInError);\r\n }\r\n\r\n await renewToken();\r\n\r\n let requestObject = {\r\n headers: {\r\n headerJson\r\n },\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.DELETE, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Function to call a PATCH request for an Authenticated API endpoint.\r\n * If the user is not logged in nor any token provided then an Error will be thrown.\r\n * @param {string} urlRequest\r\n * @param {object} data\r\n * Payload for the request\r\n */\r\n async patchApiCallAuth(urlRequest, data, requiredFields = []) {\r\n if (!authClient.isTokenPresent()) {\r\n this.throwResponseError(ErrorTypes.UserNotLoggedInError);\r\n }\r\n\r\n await renewToken();\r\n\r\n let requestObject = {\r\n headers: {\r\n headerJson\r\n },\r\n data: data,\r\n requiredFields\r\n };\r\n\r\n return this.apiCall(urlRequest, RequestMethods.PATCH, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Error manager\r\n * @param {ErrorTypes} errorType\r\n * @param {object} err\r\n * @param {string} details\r\n * Any further details for the provided error\r\n */\r\n throwResponseError(errorType, err = {}, details = '') {\r\n throw new ApiResponseError(errorType, err, details);\r\n }\r\n\r\n /**\r\n * @function\r\n * Get if the user is logged in so she/he can use Auth calls\r\n * @returns {bool}\r\n */\r\n shouldUseAuthenticatedCalls() {\r\n return this.isLoggedIn;\r\n }\r\n}\r\n","// Suite Selectors\r\n\r\nimport { PERSONALIZATION_PACKAGE_RULES } from '../../../utilities/constants';\r\nimport { getPackagesBookingGrossTotal } from '../Packages/packages.selectors';\r\n\r\n/**\r\n * Get selected suite\r\n * @param {Object} state\r\n * @returns {Object} Represent selected suite.\r\n */\r\nexport const getSelectedSuite = state => {\r\n return state.selectedSuite;\r\n};\r\n\r\n/**\r\n * Get suite net total.\r\n * @param {Object} state Suite store\r\n * @return {number} Suite gross total plus taxes\r\n */\r\nexport const getSuiteNetTotal = state => {\r\n const suiteGrossTotal = getSuiteGrossTotal(state);\r\n const suiteTaxesAndFees = getSuiteTaxes(state);\r\n return suiteGrossTotal + suiteTaxesAndFees;\r\n};\r\n\r\n/**\r\n * Get suite title\r\n * @param {Object} state Suite store\r\n * @return {string} Suite title\r\n */\r\nexport const getSuiteTitle = state => {\r\n const selectedSuite = getSelectedSuite(state);\r\n return selectedSuite ? selectedSuite.title : '';\r\n};\r\n\r\n/**\r\n * Get suite headline\r\n * @param {Object} state Suite store\r\n * @return {string} Suite headline\r\n */\r\nexport const getSuiteHeadline = state => {\r\n const selectedSuite = getSelectedSuite(state);\r\n return selectedSuite ? selectedSuite.headline : '';\r\n};\r\n\r\n/**\r\n * Get the Sustainability fee all selected packages an its quantities.\r\n * @param {Object} state Packages store\r\n * @return {number} Sustainability Fee\r\n */\r\nexport const getSustainabilityFee = state => {\r\n const { suiteDetailedAvailability } = state;\r\n return suiteDetailedAvailability && suiteDetailedAvailability.length > 0\r\n ? suiteDetailedAvailability[0].sustainabilityFee\r\n : 0;\r\n};\r\n\r\n/**\r\n * Get the Resort fee all selected packages an its quantities.\r\n * @param {Object} state Packages store\r\n * @return {number} Resort Fee\r\n */\r\nexport const getResortFee = state => {\r\n const { suiteDetailedAvailability } = state;\r\n return suiteDetailedAvailability && suiteDetailedAvailability.length > 0 ? suiteDetailedAvailability[0].resortFee : 0;\r\n};\r\n\r\n/**\r\n * Get the Parking fee all selected packages an its quantities.\r\n * @param {Object} state Packages store\r\n * @return {number} Parking Fee\r\n */\r\nexport const getParkingFee = state => {\r\n const { suiteDetailedAvailability } = state;\r\n return suiteDetailedAvailability && suiteDetailedAvailability.length > 0\r\n ? suiteDetailedAvailability[0].parkingFee\r\n : 0;\r\n};\r\n\r\n/**\r\n * Get suite promotional savings.\r\n * @param {Object} state Suite store\r\n * @return {number} Suite promotional savings\r\n */\r\nexport const getPromotionalSavings = state => {\r\n return Math.abs(getSuiteBaseRate(state) - getSuiteGrossTotal(state));\r\n};\r\n\r\n/**\r\n * Get suite taxes for the current stay.\r\n * @param {Object} state Suite store\r\n * @return {number} Suite taxes for the stay\r\n */\r\nexport const getSuiteTaxes = state => {\r\n const { suiteDetailedAvailability } = state;\r\n return suiteDetailedAvailability && suiteDetailedAvailability.length > 0 ? suiteDetailedAvailability[0].taxes : 0;\r\n};\r\n\r\n/**\r\n * Get suite gross total for the stay.\r\n * @param {Object} state Suite store\r\n * @return {number} Suite gross total\r\n */\r\nexport const getSuiteGrossTotal = state => {\r\n const { suiteDetailedAvailability } = state;\r\n\r\n return suiteDetailedAvailability && suiteDetailedAvailability.length > 0\r\n ? suiteDetailedAvailability[0].totalNightlyRate\r\n : 0;\r\n};\r\n\r\n/**\r\n * Get suite base rate for the stay.\r\n * @param {Object} state Suite store\r\n * @return {number} Suite base rate\r\n */\r\nexport const getSuiteBaseRate = state => {\r\n const { selectedSuite, suiteDetailedAvailability } = state;\r\n const numOfNights = suiteDetailedAvailability ? suiteDetailedAvailability.length : 0;\r\n return Number(selectedSuite?.highestRate ?? 0) * numOfNights;\r\n};\r\n\r\nexport const getSuiteAndPackageTotalCharge = state => {\r\n const suiteNetTotal = getSuiteNetTotal(state.suite);\r\n const packageSuiteNetTotal = getPackagesBookingGrossTotal(state.packages);\r\n return suiteNetTotal + packageSuiteNetTotal;\r\n};\r\n\r\nexport const getSuiteType = state => {\r\n const selectedSuite = getSelectedSuite(state);\r\n return selectedSuite ? selectedSuite.suiteType : '';\r\n};\r\n\r\n/**\r\n * Returns the Interactions package personalization data from the detail availability reponse\r\n * @param {Object} state\r\n */\r\nexport const getPackageInteractionsData = state => {\r\n const interactions =\r\n state.personalizationResponses &&\r\n state.personalizationResponses.filter(pr => pr.rule === PERSONALIZATION_PACKAGE_RULES.interactions);\r\n\r\n return interactions && interactions.length > 0 && interactions[0].data;\r\n};\r\n\r\nexport const hasPlanPackages = state => {\r\n return state.suite.responseHasPackages;\r\n};\r\n\r\nexport const getSuitIsLoading = state => {\r\n return state.suite.getAvailabilityLoading;\r\n};\r\n\r\nexport const getRoomAdjustmentTax = state => {\r\n return state?.suite?.suiteDetailedAvailability[0]?.roomAdjustmentTax ?? 0;\r\n};\r\n\r\nexport const getSuiteLCO = state => {\r\n return state.suiteLcoPackage;\r\n};\r\n\r\nexport const getDetailedAvailabilitySuccessStatus = state => {\r\n return state.suiteDetailsFetchSuccess;\r\n};\r\n\r\nexport const getPlanPackageInfoLoading = state => {\r\n return state.getPlanPackageInfoLoading;\r\n};\r\n\r\nexport const getRateType = state => {\r\n return state?.selectedSuite?.rateType || '';\r\n};\r\n\r\nexport const getTaxesAndFeesDetailAvailability = state => {\r\n return state.taxesAndFeesDetailAvailability;\r\n};\r\n\r\nexport const getFlexPackage = state => state.flexPackage;\r\n\r\nexport const getFlexTripAllowed = state => state.flexTripAllowed;\r\n","// Account action types\r\n\r\nconst accountActionTypes = {\r\n RESET_ACCOUNT_NEW_TO_INITIAL_STATE: 'RESET_ACCOUNT_NEW_TO_INITIAL_STATE',\r\n POST_ACCOUNT_FORGOT_PWD_INFO: 'POST_ACCOUNT_FORGOT_PWD_INFO',\r\n POST_ACCOUNT_FORGOT_PWD_INFO_SUCCESS: 'POST_ACCOUNT_FORGOT_PWD_INFO_SUCCESS',\r\n POST_ACCOUNT_FORGOT_PWD_INFO_FAILURE: 'POST_ACCOUNT_FORGOT_PWD_INFO_FAILURE',\r\n POST_ACCOUNT_CHANGE_PWD_INFO_SUCCESS: 'POST_ACCOUNT_CHANGE_PWD_INFO_SUCCESS',\r\n POST_ACCOUNT_CHANGE_PWD_INFO_LOADING: 'POST_ACCOUNT_CHANGE_PWD_INFO_LOADING',\r\n POST_ACCOUNT_CHANGE_PWD_INFO_ERROR: 'POST_ACCOUNT_CHANGE_PWD_INFO_ERROR',\r\n POST_ACCOUNT_UNLOCK_SUCCESS: 'POST_ACCOUNT_UNLOCK_SUCCESS',\r\n POST_ACCOUNT_UNLOCK_LOADING: 'POST_ACCOUNT_UNLOCK_LOADING',\r\n POST_ACCOUNT_UNLOCK_ERROR: 'POST_ACCOUNT_UNLOCK_ERROR',\r\n CURRENT_ACCOUNT_USER_IS_LOGGED_IN: 'CURRENT_ACCOUNT_USER_IS_LOGGED_IN',\r\n CURRENT_ACCOUNT_LOGGED_IN_USER: 'CURRENT_ACCOUNT_LOGGED_IN_USER',\r\n POST_ACCOUNT_NEW_SUCCESS: 'POST_ACCOUNT_NEW_SUCCESS',\r\n POST_ACCOUNT_NEW_LOADING: 'POST_ACCOUNT_NEW_LOADING',\r\n POST_ACCOUNT_NEW_ERROR: 'POST_ACCOUNT_NEW_ERROR',\r\n LOGIN_ACCOUNT_ERROR_TYPE: 'LOGIN_ACCOUNT_ERROR_TYPE',\r\n RESET_ACCOUNT_METHODS: 'RESET_ACCOUNT_METHODS',\r\n RESET_ACCOUNT_PW_FEEDBACK: 'RESET_ACCOUNT_PW_FEEDBACK',\r\n LOYALTY_ACCOUNT_OPT_IN: 'LOYALTY_ACCOUNT_OPT_IN',\r\n UPDATE_ACCOUNT_MEMBER_ID_AND_REFERRAL_CODE: 'UPDATE_ACCOUNT_MEMBER_ID_AND_REFERRAL_CODE',\r\n REMOVE_ACCOUNT_ALL_ACTIVE_OFFERS_TYPE: 'REMOVE_ALL_ACTIVE_OFFERS_TYPE__FIX_DUPLICATE',\r\n UPDATE_ACCOUNT_USER_POINTS_AND_OFFERS: 'UPDATE_ACCOUNT_USER_POINTS_AND_OFFERS',\r\n GET_ACCOUNT_USER_POINTS_HISTORY: 'GET_ACCOUNT_USER_POINTS_HISTORY',\r\n POST_ACCOUNT_USER_NOT_FOUND: 'POST_ACCOUNT_USER_NOT_FOUND'\r\n};\r\n\r\nexport default accountActionTypes;\r\n","import get from 'lodash-es/get';\r\nimport { SUITE_TYPES } from './constants';\r\n\r\nexport const EReservationStatus = {\r\n RESERVED: 'RESERVED',\r\n CHANGED: 'CHANGED',\r\n CANCELED: 'CANCELED',\r\n PAST: 'PAST'\r\n};\r\n\r\nexport const SuiteStatus = {\r\n AVAILABLE: 'AVAILABLE',\r\n UNAVAILABLE: 'UNAVAILABLE',\r\n RESERVED: 'RESERVED',\r\n CANCELED: 'CANCELED'\r\n};\r\n\r\nexport const arrivalAliases = ['staystart', 'arrival', 'checkin'];\r\nexport const departureAliases = ['stayend', 'departure', 'checkout'];\r\nexport const numberOfAdultsAliases = ['numberOfAdults', 'num_adults', 'adults'];\r\nexport const kidsAgesAliases = ['kidsAges', 'children_ages'];\r\nexport const offerCodeAliases = ['offerCode', 'offer_code', 'promoCode', 'promo_code'];\r\nexport const locationAliases = ['location'];\r\nexport const suiteTypeAliases = [\r\n 'suite_type',\r\n 'suiteType',\r\n 'room_cat',\r\n 'roomcat',\r\n 'roomCat',\r\n 'room_type',\r\n 'roomType',\r\n 'roomtype'\r\n];\r\n\r\n/**\r\n * @function\r\n * This adds and parse query string params being sent on a different way, so we handle\r\n * different aliases for the\r\n * @param {Object} campaignObject, the availability query string params as object *\r\n */\r\nexport const parseEmailCampaignToAvailability = campaignObject => {\r\n // Get arrival\r\n const arrival = getAvailabilityPropByAliases(campaignObject, arrivalAliases);\r\n // Get Departure\r\n const departure = getAvailabilityPropByAliases(campaignObject, departureAliases);\r\n // Get Number of adults\r\n const numberOfAdults = getAvailabilityPropByAliases(campaignObject, numberOfAdultsAliases, 1);\r\n // Get Kids Ages\r\n const kidsAges = getAvailabilityPropByAliases(campaignObject, kidsAgesAliases, '');\r\n // Get Offer Code\r\n const offerCode = getNormalizedCode(getAvailabilityPropByAliases(campaignObject, offerCodeAliases, ''));\r\n // Get Location\r\n const location = getAvailabilityPropByAliases(campaignObject, locationAliases);\r\n // Get Suite Type\r\n const suiteType = getAvailabilityPropByAliases(campaignObject, suiteTypeAliases, SUITE_TYPES.unknown);\r\n\r\n const availabilityObject = {\r\n ...campaignObject,\r\n arrival,\r\n departure,\r\n numberOfAdults,\r\n kidsAges,\r\n offerCode,\r\n location,\r\n suiteType\r\n };\r\n\r\n return availabilityObject;\r\n};\r\n\r\n/**\r\n * @function\r\n * Explore and check all the aliases for a parameter and translate them as our app needs\r\n * @param {Object} campaignObject -- The query string param\r\n * @param {Array} aliases -- The aliases for an app prop coming from the query string\r\n * @param {Object} defaultValue -- A default value if there is no incoming param inside the query string\r\n */\r\nexport const getAvailabilityPropByAliases = (campaignObject, aliases, defaultValue = null) => {\r\n let returnData = defaultValue;\r\n aliases.forEach(alias => {\r\n const data = get(campaignObject, alias, null);\r\n if (data !== null) {\r\n returnData = data;\r\n }\r\n });\r\n\r\n return returnData;\r\n};\r\n\r\n/**\r\n * @function\r\n * This function is in charge to translate the different ways to receive the suite type\r\n * @param {Object} campaignObject -- The query string param\r\n */\r\nexport const withSuiteTypeAliases = campaignObject => {\r\n // Get Suite Type\r\n const suiteType = getAvailabilityPropByAliases(campaignObject, suiteTypeAliases, SUITE_TYPES.unknown);\r\n\r\n const availabilityObject = {\r\n ...campaignObject,\r\n suiteType: suiteType\r\n };\r\n\r\n return availabilityObject;\r\n};\r\n\r\nexport const getNormalizedCode = code => {\r\n if (code && typeof code === 'string') {\r\n return code.toUpperCase().trim();\r\n }\r\n return code;\r\n};\r\n","const manageReservationTypes = {\r\n GET_MANAGERESERVATIONDETAILS_REQUEST: 'FETCH_MANAGE_RESERVATION_DETAILS_REQUEST',\r\n GET_MANAGERESERVATIONDETAILS_SUCCESS: 'FETCH_MANAGE_RESERVATION_DETAILS_SUCCESS',\r\n GET_MANAGERESERVATIONDETAILS_FAILURE: 'FETCH_MANAGE_RESERVATION_DETAILS_FAILURE',\r\n GET_RESERVATION_BY_ID_AND_LAST_NAME: 'GET_RESERVATION_BY_ID_AND_LAST_NAME',\r\n GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS: 'GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS',\r\n GET_RESERVATION_BY_ID_AND_LAST_NAME_FAILURE: 'GET_RESERVATION_BY_ID_AND_LAST_NAME_FAILURE',\r\n CLEAR_MANAGERESERVATIONDETAILS: 'CLEAR_MANAGERESERVATIONDETAILS'\r\n};\r\n\r\nexport default manageReservationTypes;\r\n","import { isArrayEmpty } from '../../utilities/arraysUtils';\r\nimport { DATE_FORMATS, TAXES } from '../../utilities/constants';\r\nimport { GwDatesWrapper } from '../_internal_date_/gwDatesWrapper';\r\n\r\nexport const handleTotal = (\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n setExcedent\r\n) => {\r\n let offersTotal = 0;\r\n const offersAmount =\r\n userOffers &&\r\n userOffers.map(e => {\r\n return activeOffers.includes(e.id) && (offersTotal = offersTotal + e.dollarValue);\r\n });\r\n\r\n let total = suiteTotal;\r\n if (showLoyalty && loyaltyOptIn) {\r\n if (offersAmount && !isArrayEmpty(offersAmount) && offersTotal <= total) {\r\n total = total - offersTotal;\r\n setExcedent && setExcedent(false);\r\n } else {\r\n setExcedent && setExcedent(true);\r\n }\r\n if (pointsBalance && pointsBalance > 0 && pointsBalance < total) {\r\n total = total - pointsBalance;\r\n } else if (pointsBalance >= total) {\r\n total = 0;\r\n }\r\n }\r\n let packagesTotal = 0;\r\n if (currentSelectedPackages) {\r\n currentSelectedPackages.forEach(currentPackage => {\r\n if (currentPackage.amount && currentPackage.quantity) {\r\n let calculateQuantityPrice = currentPackage.amount * currentPackage.quantity;\r\n packagesTotal = packagesTotal + calculateQuantityPrice;\r\n }\r\n });\r\n }\r\n\r\n return total + packagesTotal;\r\n};\r\n\r\nexport const handleTotalWithTaxes = (\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n currentSelectedPackages,\r\n setExcedent\r\n) => {\r\n const taxData = taxesAndFees.find(({ name }) => name === TAXES) || {};\r\n const totalWithoutTaxes = handleTotal(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n setExcedent\r\n );\r\n let taxes = handleTaxes(\r\n Number(taxData.amount || 0),\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n roomAdjustmentTax,\r\n userOffers,\r\n activeOffers\r\n ).toFixed(2);\r\n\r\n let feesTotals = 0;\r\n taxesAndFees.map(item => {\r\n if (item.name !== TAXES) {\r\n feesTotals += item.amount;\r\n }\r\n return feesTotals;\r\n });\r\n\r\n return (totalWithoutTaxes + Number(taxes) + feesTotals).toFixed(2);\r\n};\r\n\r\nexport const handlePointsBalance = (showLoyalty, loyaltyOptIn, pointsBalance, suiteTotal, userOffers, activeOffers) => {\r\n let balance = 0;\r\n let offersTotal = 0;\r\n\r\n userOffers &&\r\n userOffers.map(e => {\r\n return activeOffers.includes(e.id) && (offersTotal = offersTotal + e.dollarValue);\r\n });\r\n\r\n if (showLoyalty && loyaltyOptIn) {\r\n if (pointsBalance > suiteTotal - offersTotal) {\r\n balance = suiteTotal - offersTotal;\r\n } else {\r\n balance = pointsBalance;\r\n }\r\n }\r\n return balance;\r\n};\r\n\r\nexport const handleTaxes = (\r\n taxAmount,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n roomAdjustmentTax,\r\n userOffers,\r\n activeOffers\r\n) => {\r\n let offersTotal = 0;\r\n\r\n userOffers &&\r\n userOffers.forEach(e => {\r\n activeOffers.includes(e.id) && (offersTotal = offersTotal + e.dollarValue);\r\n });\r\n\r\n const pointsBalanceTotal = handlePointsBalance(\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n userOffers,\r\n activeOffers\r\n );\r\n\r\n const adjustmentTax = +((pointsBalanceTotal + offersTotal) * (roomAdjustmentTax / 100)).toFixed(2);\r\n if (taxAmount < adjustmentTax) {\r\n return 0;\r\n }\r\n\r\n return taxAmount - adjustmentTax;\r\n};\r\n\r\nexport const handleDueAmounts = (\r\n dueTodayAmount,\r\n dueAtCheckinAmount,\r\n roomAdjustmentTax,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n numberOfNights,\r\n userOffers,\r\n activeOffers,\r\n handleSummaryTotal\r\n) => {\r\n let dueTodayDifference = 0;\r\n let offersTotal = 0;\r\n\r\n userOffers &&\r\n userOffers.forEach(e => {\r\n activeOffers.includes(e.id) && (offersTotal = offersTotal + e.dollarValue);\r\n });\r\n\r\n let oneNightSuite = suiteTotal / numberOfNights;\r\n let totalPointsBurned = pointsBalance > suiteTotal - offersTotal ? suiteTotal - offersTotal : pointsBalance;\r\n let pointsBurnedOnDueToday = totalPointsBurned > oneNightSuite ? oneNightSuite : totalPointsBurned;\r\n\r\n let adjustmentTax = +(\r\n (handlePointsBalance(showLoyalty, loyaltyOptIn, pointsBalance, suiteTotal, userOffers, activeOffers) +\r\n offersTotal) *\r\n (roomAdjustmentTax / 100)\r\n ).toFixed(2);\r\n\r\n let pointsToBurnOnCheckIn =\r\n totalPointsBurned > pointsBurnedOnDueToday ? totalPointsBurned - pointsBurnedOnDueToday : 0;\r\n\r\n const dueToday = () => {\r\n let dueTodayValue = dueTodayAmount;\r\n let totalToDeduct = pointsBurnedOnDueToday + adjustmentTax + offersTotal;\r\n if (dueTodayValue >= totalToDeduct) {\r\n dueTodayValue = dueTodayValue - totalToDeduct;\r\n } else {\r\n dueTodayDifference = totalToDeduct - dueTodayValue;\r\n dueTodayValue = 0;\r\n }\r\n return showLoyalty && loyaltyOptIn ? dueTodayValue : dueTodayAmount;\r\n };\r\n\r\n const dueCheckIn = () => {\r\n let dueAtCheckInValue = dueAtCheckinAmount;\r\n\r\n if (dueAtCheckInValue > pointsToBurnOnCheckIn + dueTodayDifference) {\r\n dueAtCheckInValue = dueAtCheckInValue - dueTodayDifference - pointsToBurnOnCheckIn;\r\n }\r\n const dueTodayAmountToShow =\r\n showLoyalty && loyaltyOptIn ? +dueAtCheckInValue.toFixed(2) : +dueAtCheckinAmount.toFixed(2);\r\n\r\n const summaryTotalAndDueToday = +handleSummaryTotal - +dueToday();\r\n\r\n if (+summaryTotalAndDueToday.toFixed(2) === dueTodayAmountToShow) {\r\n return dueTodayAmountToShow;\r\n } else {\r\n return +summaryTotalAndDueToday.toFixed(2);\r\n }\r\n };\r\n\r\n let due = {\r\n today: dueToday().toFixed(2),\r\n atCheckIn: dueCheckIn().toFixed(2)\r\n };\r\n\r\n return due;\r\n};\r\n\r\nexport const haveRestrictions = (date, restrictionList, restrictionType) => {\r\n return restrictionList[GwDatesWrapper.format(date, DATE_FORMATS.default)]?.some(res => res.type === restrictionType);\r\n};\r\n\r\nexport const getRestrictionNumber = (date, restrictionList, restrictionType) => {\r\n return restrictionList[GwDatesWrapper.format(date, DATE_FORMATS.default)]?.find(res => res.type === restrictionType)\r\n ?.number;\r\n};\r\n","import get from 'lodash-es/get';\r\n\r\nexport const ErrorMessages = {\r\n UserNotLoggedInErrorMessage: 'You are not logged in',\r\n UnkownErrorMessage: 'An unkown error happened, please contact to the admin',\r\n NotAuthorizedMessage: 'You are not authorized',\r\n NotFoundMessage: \"We couldn't find the resource we are trying to connect\",\r\n InternalServerErrorMessage: 'An Error happened, please try again later or contact to the admin',\r\n MissingRequiredFieldMessage: 'Missing fields for API:'\r\n};\r\n\r\nexport const ErrorTypes = {\r\n UserNotLoggedInError: 'LOGIN_ERROR',\r\n ResponseError: 'RESPONSE_ERROR',\r\n ValidationError: 'VALIDATION_ERROR',\r\n MissingRequiredField: 'MISSING_REQUIRED_FIELD'\r\n};\r\n\r\nexport const CommonRequestStatus = {\r\n BadRequest400: 400,\r\n NotAuthorized401: 401,\r\n NotFound404: 404,\r\n InternalServerError500: 500\r\n};\r\n\r\nconst buildResponseForErrorResponseWithStatusCode = (requestStatus, err) => {\r\n switch (requestStatus) {\r\n case CommonRequestStatus.BadRequest400:\r\n const existsValidationError = get(err, 'response.data');\r\n if (!existsValidationError) {\r\n return getErrorResponse(ErrorMessages.UnkownErrorMessage, requestStatus);\r\n }\r\n\r\n const validationData = get(err, 'response.data.errors') ? err.response.data.errors : err.response.data;\r\n return getErrorResponse('Bad Request, please check your data and try again', requestStatus, validationData);\r\n case CommonRequestStatus.NotAuthorized401:\r\n return getErrorResponse(ErrorMessages.NotAuthorizedMessage, requestStatus);\r\n case CommonRequestStatus.NotFound404:\r\n return getErrorResponse(ErrorMessages.NotFoundMessage, requestStatus);\r\n case CommonRequestStatus.InternalServerError500:\r\n const message = err.response.data?.Error?.ErrorMessage\r\n ? err.response.data.Error.ErrorMessage\r\n : ErrorMessages.InternalServerErrorMessage;\r\n return getErrorResponse(message, requestStatus);\r\n default:\r\n return getErrorResponse(ErrorMessages.UnkounErrorMessage, requestStatus);\r\n }\r\n};\r\n\r\nconst getErrorResponse = (message, code, validationErrors = null) => {\r\n return {\r\n msg: message,\r\n code: code,\r\n validationErrors: validationErrors\r\n };\r\n};\r\n\r\nexport function getErrorMessageByErrorType(errorType, err, details) {\r\n switch (errorType) {\r\n case ErrorTypes.UserNotLoggedInError:\r\n return getErrorResponse(`${ErrorMessages.UserNotLoggedInErrorMessage}`, null, details);\r\n case ErrorTypes.ValidationError:\r\n return getErrorResponse('A validation error occurred', null, details);\r\n case ErrorTypes.ResponseError:\r\n const existsStatusError = get(err, 'request.status');\r\n const requestStatus = existsStatusError ? err.request.status : null;\r\n\r\n if (!requestStatus || !Object.values(CommonRequestStatus).includes(requestStatus)) {\r\n const errorMessage = get(err, 'response.data.messages')\r\n ? err.response.data.messages.join()\r\n : get(err, 'message')\r\n ? err.message\r\n : err;\r\n\r\n return getErrorResponse(`${errorMessage}. ${details}`, requestStatus);\r\n }\r\n\r\n return buildResponseForErrorResponseWithStatusCode(requestStatus, err);\r\n case ErrorTypes.MissingRequiredField:\r\n return getErrorResponse(`${ErrorMessages.MissingRequiredFieldMessage} ${details}`, requestStatus);\r\n default:\r\n return getErrorResponse(`${ErrorMessages.UnkownErrorMessage}. ${details}`, requestStatus);\r\n }\r\n}\r\n","// Reservations action types\r\n\r\nconst reservationsActionTypes = {\r\n GET_RESERVATION_BY_ID_SUCCESS: 'GET_RESERVATION_BY_ID_SUCCESS',\r\n GET_RESERVATION_BY_ID_ERROR: 'GET_RESERVATION_BY_ID_ERROR',\r\n GET_RESERVATION_BY_ID_FINISH: 'GET_RESERVATION_BY_ID_FINISH',\r\n GET_RESERVATION_INFO_SUCCESS: 'GET_RESERVATION_INFO_SUCCESS',\r\n GET_RESERVATION_INFO_LOADING: 'GET_RESERVATION_INFO_LOADING',\r\n GET_RESERVATION_INITIAL_INFO_LOADING: 'GET_RESERVATION_INITIAL_INFO_LOADING',\r\n GET_RESERVATION_INFO_ERROR: 'GET_RESERVATION_INFO_ERROR',\r\n GET_RESERVATION_INFO_FINISH: 'GET_RESERVATION_INFO_FINISH',\r\n CREATE_RESERVATION_LOADING: 'CREATE_RESERVATION_LOADING',\r\n CREATE_RESERVATION_ERROR: 'CREATE_RESERVATION_ERROR',\r\n CREATE_RESERVATION_SUCCESS: 'CREATE_RESERVATION_SUCCESS',\r\n CREATE_RESERVATION_TEMP_USER: 'CREATE_RESERVATION_TEMP_USER',\r\n CLEAR_RESERVATION_ERROR: 'CLEAR_RESERVATION_ERROR',\r\n SET_RESERVATION_LAST_NAME_FIND_BY_ID: 'SET_RESERVATION_LAST_NAME_FIND_BY_ID',\r\n SET_RESERVATION_KEY_FIND_RESERVATION_BY_ID: 'SET_RESERVATION_KEY_FIND_RESERVATION_BY_ID',\r\n GTM_RESERVATION_NEW_OR_DAYPASS: 'GTM_RESERVATION_NEW_OR_DAYPASS'\r\n};\r\n\r\nexport default reservationsActionTypes;\r\n","import styled, { css } from 'styled-components';\r\nimport { fontSize, fontWeight } from 'styled-system';\r\n\r\nimport { Box, Flex, Text } from '../../../ui-kit/index';\r\nimport theme, { mediaQueries } from '../../../ui-kit/themes/theme';\r\n\r\nexport const Amount = styled(Text)`\r\n text-align: right;\r\n width: 55px;\r\n ${fontWeight}\r\n\r\n ${({ lineHeight, width }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n width: ${width} !important;\r\n `;\r\n }};\r\n`;\r\n\r\nexport const Action = styled(Box)`\r\n color: ${theme.colors.preciousStoneBlue[100]};\r\n font-weight: bold;\r\n line-height: ${({ lineHeight }) => (lineHeight ? lineHeight : '16px')};\r\n text-decoration: underline;\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n font-size: ${props => (props.fontSize && props.fontSize.sm) || `${props.fontSize}px` || `${theme.fontSizes[9]}px`};\r\n\r\n ${mediaQueries.lg} {\r\n font-size: ${props => (props.fontSize && props.fontSize.lg) || `${props.fontSize}px` || '8px'};\r\n }\r\n`;\r\n\r\nexport const Bottom = styled(Flex)`\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n padding: ${theme.space[3]}px 0px;\r\n margin: 0 -16px;\r\n flex-direction: column;\r\n background: ${theme.colors.deepForestGreen[100]}06;\r\n border-bottom-left-radius: 20px;\r\n border-bottom-right-radius: 20px;\r\n text-align: center;\r\n font-weight: bold;\r\n gap: 4px;\r\n\r\n font-size: ${props => (props.fontSize && props.fontSize.sm) || props.fontSize || `${theme.fontSizes[1]}px`};\r\n\r\n ${mediaQueries.lg} {\r\n font-size: ${props => (props.fontSize && props.fontSize.lg) || props.fontSize || `${theme.fontSizes[0]}px`};\r\n }\r\n`;\r\n\r\nexport const Container = styled(Box)`\r\n font-family: ${theme.fontSecondary};\r\n ${fontSize}\r\n\r\n font-size: ${props => (props.fontSize && props.fontSize.sm) || props.fontSize || `${theme.fontSizes[1]}px`};\r\n\r\n ${mediaQueries.lg} {\r\n font-size: ${props => (props.fontSize && props.fontSize.lg) || props.fontSize || `${theme.fontSizes[0]}px`};\r\n }\r\n`;\r\n\r\nexport const Description = styled(Flex)`\r\n align-items: center;\r\n flex: 1;\r\n margin: 0;\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const Divider = styled(Box)`\r\n border-bottom: ${props => (props.borderThickness ? props.borderThickness + 'px' : `1px`)} solid\r\n ${theme.colors.snowMountainGrey[100]};\r\n margin-bottom: ${props => props.mb || `${theme.space[7]}px`};\r\n margin-top: ${props => props.mb || `${theme.space[7]}px`};\r\n width: 100%;\r\n opacity: 1;\r\n`;\r\n\r\nexport const Item = styled(Flex)`\r\n font-family: ${theme.fontSecondary};\r\n width: 100%;\r\n font-weight: ${props => props.fontWeight || theme.fontWeights.medium};\r\n color: ${props => props.color || theme.colors.deepLakeBlue[100]};\r\n ${fontSize}\r\n ${props => {\r\n if (!props.mb && props.mb !== 0) return `margin-bottom: ${theme.space[3]}px`;\r\n }};\r\n ${props => {\r\n if (!props.mt && props.mt !== 0) return `margin-top: ${theme.space[3]}px`;\r\n }};\r\n align-items: center;\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n gap: 14px;\r\n`;\r\n\r\nexport const SubtotalAmount = styled(Text)`\r\n text-align: right;\r\n width: 100px;\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const NewTagContainer = styled(Flex)`\r\n margin-left: 12px;\r\n`;\r\n\r\nexport const Tooltip = styled(Flex)`\r\n align-items: center;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n margin-left: 8px;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const NewGuestsTag = styled(Text)`\r\n color: ${theme.colors.pureWhite[0]};\r\n background-color: ${theme.colors.deepOrange[100]};\r\n height: 18px;\r\n border-radius: 2px;\r\n padding: 2px 8px;\r\n margin-left: 12px;\r\n font-size: 10px;\r\n line-height: 14px;\r\n font-weight: ${theme.fontWeights.bold};\r\n span {\r\n display: block;\r\n position: relative;\r\n top: 1px;\r\n height: 14px;\r\n }\r\n`;\r\n\r\nexport const NewGuestsMessageContainer = styled(Flex)`\r\n align-items: flex-start;\r\n background-color: ${theme.colors.deepForestGreen[10]};\r\n border: 1px solid ${theme.colors.successGreen};\r\n border-radius: 10px;\r\n padding: 12px 16px;\r\n margin-top: 33px;\r\n`;\r\n\r\nexport const DataDescription = styled(Text)`\r\n font-size: ${theme.fontSizes[0]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n line-height: 18px;\r\n margin-left: 12px;\r\n\r\n b {\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n }\r\n`;\r\n","export const Environments = {\r\n DEVELOPMENT: 'development',\r\n PRODUCTION: 'production',\r\n TEST: 'test'\r\n};\r\n\r\nconst _isDevEnvironment = () => {\r\n return process.env.NODE_ENV === Environments.DEVELOPMENT;\r\n};\r\n\r\nconst _isProductionEnvironment = () => {\r\n return process.env.REACT_APP_ENVIRONMENT === Environments.PRODUCTION;\r\n};\r\n\r\nconst _isTestEnvironment = () => {\r\n return process.env.NODE_ENV === Environments.TEST;\r\n};\r\n\r\nexport const isDevEnvironment = _isDevEnvironment();\r\nexport const isProdEnvironment = _isProductionEnvironment();\r\nexport const isTestEnvironment = _isTestEnvironment();\r\n","import styled, { css } from 'styled-components';\r\nimport Box from './Box';\r\nimport theme from './themes/theme';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n borderRadius,\r\n propTypes,\r\n borderColor,\r\n flexDirection,\r\n justifyContent,\r\n alignItems,\r\n flexWrap,\r\n borderTop,\r\n borderBottom,\r\n flex\r\n} from 'styled-system';\r\n\r\nconst boxShadow = props => {\r\n const boxShadows = {\r\n sm: {\r\n 'box-shadow': props.theme.boxShadows[0]\r\n },\r\n md: {\r\n 'box-shadow': props.theme.boxShadows[1]\r\n },\r\n lg: {\r\n 'box-shadow': props.theme.boxShadows[2]\r\n },\r\n xl: {\r\n 'box-shadow': props.theme.boxShadows[3]\r\n }\r\n };\r\n return boxShadows[props.boxShadowSize];\r\n};\r\n\r\nconst boxBorder = props => ({\r\n border:\r\n props.borderWidth === 0\r\n ? '0'\r\n : `${props.borderWidth}px solid ${props.theme.colors[props.borderColor]}`\r\n});\r\n\r\nconst Card = styled(Box)`\r\noverflow: hidden;\r\n ${props =>\r\n props.height &&\r\n css`\r\n height: ${props.height};\r\n `}\r\n ${borderColor} ${boxShadow} ${boxBorder} ${borderRadius} ${borderTop} ${borderBottom};\r\n`;\r\nexport const FlexCard = styled(Card)`\r\n display: flex;\r\n ${alignItems} ${justifyContent} ${flexWrap} ${flexDirection} ${flex};\r\n`;\r\nCard.propTypes = {\r\n boxShadowSize: PropTypes.oneOf(['sm', 'md', 'lg', 'xl']),\r\n borderColor: PropTypes.string,\r\n ...propTypes.borderRadius,\r\n borderWidth: PropTypes.oneOf([0, 1, 2]),\r\n borderTop: PropTypes.string,\r\n borderBottom: PropTypes.string\r\n};\r\n\r\nCard.defaultProps = {\r\n borderColor: 'deepLakeBlue.20',\r\n borderRadius: 1,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n theme: theme\r\n};\r\n\r\nCard.displayName = 'Card';\r\n\r\nexport default Card;\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\n\r\nexport const LOYALTY_IMAGES = {\r\n ADVENTURE_BUCK_COIN: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'v-adventure-buck-coin.svg'),\r\n ADVENTURE_BUCK_COIN_WHITE: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'v-2-adventure-buck-coin-white.svg')\r\n};\r\n","export const FLOW_NAVIGATION_ACTIONS = {\r\n FLOW_TRIGGER_NEXT_STEP: 'flow.navigateToNextStep',\r\n FLOW_TRIGGER_PREVIOUS_STEP: 'flow.navigateToPreviousStep',\r\n FLOW_TRIGGER_FIRST_STEP: 'flow.navigateToFirstStep',\r\n FLOW_TRIGGER_LAST_STEP: 'flow.navigateToLastStep',\r\n FLOW_TRIGGER_STEP_BY_SLUG: 'flow.navigateToStepBySlug'\r\n};\r\n\r\nexport const STALE_TIME_LIMIT = 5 * 60 * 1000; // 5 minutes in milliseconds\r\n\r\nexport const FLOW_NAMES = {\r\n BOOKING: 'booking',\r\n BIRTHDAY: 'birthday',\r\n DAYPASS: 'daypass'\r\n};\r\n\r\n//birthday-parties-comparison-chart\r\nexport const BIRTHDAY_COMPARISON_CHART_CLASS = 'birthday-parties-comparison-chart';\r\nexport const BIRTHDAY_FAQ = 'faq-one-page';\r\n","export const SUMMARY_CART_VARIATIONS = {\r\n CART: 'cart',\r\n SUMMARY: 'summary'\r\n};\r\n\r\nexport const CART_MODIFY_MODAL_VARIATIONS = {\r\n SUITE: 'SUITE',\r\n PACKAGE: 'PACKAGE'\r\n};\r\n\r\nexport const CART_MODIFY_MODAL_TYPES = {\r\n REMOVE: 'REMOVE',\r\n EDIT: 'EDIT'\r\n};\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Lodge MicroService endpoints\r\n *\r\n * @class LodgeApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class LodgeApiClient extends GWRApiClient {\r\n constructor(version = '', token = '', tiogasAPI = false) {\r\n let apiVersion = version !== '' ? version : `v1`;\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_LODGE_SERVICE_ENDPOINT, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function returns the lodge configuration for given application\r\n *\r\n * @function\r\n * @param {Property: string, Application: string}\r\n * Example: {Property: GURNIL, Application: payment}\r\n */\r\n async getConfiguration(property, application) {\r\n const urlRequest = `${this.url}/lodges/${property}/applications/${application}`;\r\n let response = await super.getApiCall(urlRequest);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * function returns the lodge location information\r\n * THIS FUNCTION WAS IMPORTED FROM LodgeConfigurationApiClient.js REMOVED ON PR 9614\r\n * @function\r\n *\r\n */\r\n async getLodgesLocations() {\r\n const urlRequest = this.url + `/lodges`;\r\n let response = await super.getApiCall(urlRequest);\r\n\r\n return response;\r\n }\r\n}\r\n","import { SUMMARY_CART_VARIATIONS } from '../components/Summary/components/Suite/utilities/constants';\r\nimport { pluralize } from '../components/utilities/copyFunctions';\r\n\r\n// Regular expressions to validate canadian postal code and email\r\nexport const canadianPostalCodeRegex = /^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$/;\r\nexport const canadianEmailAddressRegex = /^(.*)(.ca|.CA)(.*)$/;\r\n\r\n/**\r\n * Type of guest.\r\n * @enum {string} - Guest Type\r\n */\r\nexport const GUEST_TYPE = {\r\n KID: 'Kid',\r\n KIDS: 'Kids',\r\n ADULT: 'Adult',\r\n ADULTS: 'Adults',\r\n INFANT: 'Infant',\r\n INFANTS: 'Infants'\r\n};\r\n\r\n/**\r\n * Gives message for adults count.\r\n * @param {*} adultsCount - Adults count.\r\n */\r\nexport const getAdultsCountMessage = adultsCount => {\r\n return adultsCount\r\n ? adultsCount > 1\r\n ? `${adultsCount} ${GUEST_TYPE.ADULTS}`\r\n : `${adultsCount} ${GUEST_TYPE.ADULT}`\r\n : `0 ${GUEST_TYPE.ADULTS}`;\r\n};\r\n\r\n/**\r\n * Gives message for kids count.\r\n * @param {*} kidsCount - Kids count.\r\n */\r\nexport const getKidsCountMessage = kidsCount => {\r\n return kidsCount > 1 ? `${kidsCount} ${GUEST_TYPE.KIDS}` : `${kidsCount} ${GUEST_TYPE.KID}`;\r\n};\r\n\r\n/**\r\n * Gives message for infants count.\r\n * @param {*} infantsCount - Infants count\r\n */\r\nexport const getInfantsCountMessage = infantsCount => {\r\n return infantsCount > 1 ? `${infantsCount} ${GUEST_TYPE.INFANTS}` : `${infantsCount} ${GUEST_TYPE.INFANT}`;\r\n};\r\n\r\n/**\r\n * Based on an array of numbers get the ones below the limit.\r\n * @param {string[]} kids List of kids ages.\r\n * @param {number} limit Age limit, kid will be added if is below this age.\r\n * @return {number} Numbers of kids below the limit age.\r\n */\r\nexport const getKidsUnderAge = (kids, limit) => {\r\n return kids.reduce((acc, currentValue) => {\r\n if (parseInt(currentValue) < limit) {\r\n return (acc += 1);\r\n }\r\n return acc;\r\n }, 0);\r\n};\r\n\r\n/**\r\n * Based on an array of numbers get the ones below the limit.\r\n * @param {string[]} kids List of kids ages.\r\n * @param {number} limit Age limit, kid will be added if is above this age.\r\n * @return {number} Numbers of kids above the limit age.\r\n */\r\nexport const getKidsAboveAge = (kids, lowerLimit) => {\r\n if (!kids) return 0;\r\n return kids.reduce((acc, currentValue) => {\r\n if (parseInt(currentValue) > lowerLimit) {\r\n return (acc += 1);\r\n }\r\n return acc;\r\n }, 0);\r\n};\r\n\r\n/**\r\n * Get the number of guest that will be charged (including 4+ years old kids)\r\n * @param {number} adultsCount\r\n * @param {string} kidsAges\r\n */\r\nexport const getNumberOfBillableGuests = (adultsCount = 0, kidsAges = [], isDiningPackage = false) => {\r\n const normalizedKidsAges = typeof kidsAges === 'string' ? kidsAges.split(',') : kidsAges;\r\n\r\n const age = isDiningPackage ? 3 : 2;\r\n const numOfBillableChildren = getKidsAboveAge(normalizedKidsAges, age);\r\n\r\n return adultsCount + numOfBillableChildren;\r\n};\r\n\r\n/**\r\n * Get the number of unbillable guests.\r\n * @param {string} kidsAges The ages of the kids.\r\n */\r\nexport const getNumberOfUnbillableGuests = kidsAges => {\r\n const kidsCount = kidsAges.length;\r\n return kidsCount > 0 ? kidsAges.filter(age => age <= 3).length : 0;\r\n};\r\n\r\n/**\r\n *\r\n * @param {number} adultsCount number of adults\r\n * @param {number} kidsCount number of kids\r\n * @returns Label describing the amount of adults and kids as (adultsCount) Adults, (Kids) Kids\r\n */\r\nexport const getGuestCountLabel = (adultsCount, kidsCount, variation = null, capitalize = false) => {\r\n const adultText = pluralize(capitalize ? 'Adult' : 'adult', adultsCount);\r\n const kidText = pluralize(capitalize ? 'Kid' : 'kid', kidsCount, 's', false, true);\r\n let guestCountText = `${adultsCount} ${adultText}, ${kidsCount} ${kidText}`;\r\n if (variation === SUMMARY_CART_VARIATIONS.CART) {\r\n guestCountText = `${adultsCount} ${adultText} - ${kidsCount} ${kidText}`;\r\n }\r\n return guestCountText;\r\n};\r\n\r\n/**\r\n * Returns the Children ages as array\r\n * @param {Array} kidsAges Array of kids/children ages\r\n * @returns Array\r\n */\r\nexport const getKidsCount = kidsAges => {\r\n let kidsCountArray = [];\r\n\r\n if (kidsAges) {\r\n if (typeof kidsAges === 'string') {\r\n kidsCountArray = kidsAges.split(',');\r\n } else if (Array.isArray(kidsAges)) {\r\n kidsCountArray = kidsAges;\r\n }\r\n }\r\n\r\n return kidsCountArray;\r\n};\r\n\r\n/**\r\n * Gives message for guests information.\r\n * @param {Array} kidsAges List/Array of children ages\r\n * @param {number} numberOfAdults Count of adults in the stay\r\n * @param {string} offerCode Offer code used for reservation\r\n * @returns String containing information regarding guests\r\n */\r\nexport const recentSearchesMessage = (kidsAges, numberOfAdults, offerCode) => {\r\n const kidsAgesList = getKidsCount(kidsAges);\r\n const adultMessage = getAdultsCountMessage(numberOfAdults);\r\n const childrenCount = getKidsAboveAge(kidsAgesList, 2); // Children above 2\r\n const infantCount = getKidsUnderAge(kidsAgesList, 3); // Children age 2 and under\r\n const kidsMessage = childrenCount > 0 ? getKidsCountMessage(childrenCount) : '';\r\n const infantsMessage = infantCount > 0 ? getInfantsCountMessage(infantCount) : '';\r\n const offerMessage = offerCode ? offerCode : '';\r\n\r\n return [adultMessage, kidsMessage, infantsMessage, offerMessage].filter(Boolean).join(', ');\r\n};\r\n","// Birthday Party action types\r\n\r\nconst birthdayPartyActionTypes = {\r\n FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA: 'FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA',\r\n FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_SUCCESS: 'FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_SUCCESS',\r\n FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_ERROR: 'FETCH_PARTY_BOOKING_WIDGET_SEARCH_DATA_ERROR',\r\n SET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA: 'SET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA',\r\n RESET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA: 'RESET_PARTY_BOOKING_WIDGET_FORM_SEARCH_DATA',\r\n SET_SELECTED_BIRTHDAY_PARTY: 'SET_SELECTED_BIRTHDAY_PARTY',\r\n TOGGLE_BIRTHDAY_PARTY_DATE_PICKER: 'TOGGLE_BIRTHDAY_PARTY_DATE_PICKER',\r\n CREATE_PARTY_BOOKING_RESERVATION_SUCCESS: 'CREATE_PARTY_BOOKING_RESERVATION_SUCCESS',\r\n CREATE_PARTY_BOOKING_RESERVATION_ERROR: 'CREATE_PARTY_BOOKING_RESERVATION_ERROR',\r\n IS_LOADING_CREATE_PARTY_BOOKING_RESERVATION: 'IS_LOADING_CREATE_PARTY_BOOKING_RESERVATION',\r\n CLEAR_PARTY_BOOKING_RESERVATION: 'CLEAR_PARTY_BOOKING_RESERVATION',\r\n CLEAR_PARTY_BOOKING_RESERVATION_ERROR: 'CLEAR_PARTY_BOOKING_RESERVATION_ERROR',\r\n SET_GUEST_OF_HONOR: 'SET_GUEST_OF_HONOR',\r\n CLEAR_PARTY_DATE: 'CLEAR_PARTY_DATE'\r\n};\r\n\r\nexport default birthdayPartyActionTypes;\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\nexport const RESERVATION_DETAIL_IMAGES = {\r\n PRINT: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'Redeem-Print.svg'),\r\n TWENTY_ONE_OLDER: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'Redeem-21years.svg'),\r\n PACKAGE_DINNER: 'dining_passes/package-dinner-380x180.jpg',\r\n MAGIQUEST: 'attraction_passes/magiquest-380x180.jpg',\r\n CABANAS: 'cabanas/cabanas-380x180.jpg',\r\n GREAT_CLOCK_TOWER_SHOW: 'great-clock-tower-show-380x180.jpg',\r\n WILEY_RESERVATION: 'wiley-reservation.png',\r\n WAVE_BG: 'wave-bg.svg',\r\n GROUP_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'add-guests-group-icon.svg'),\r\n CALENDAR_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'add-guests-calendar-icon.svg'),\r\n CHECK_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'add-guests-check-icon.svg'),\r\n LOCATION_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'add-guests-location-icon.svg'),\r\n BEST_VALUE_RIBBON_3: 'Best_Value_Ribbon_3.svg',\r\n BEST_VALUE_RIBBON_4: 'Best_Value_Ribbon_4.svg',\r\n BEST_VALUE_RIBBON_5: 'Best_Value_Ribbon_5.svg',\r\n ATTRACTION_ADDONS: 'AttractionPictograms.svg',\r\n BIRTHDAY_ADDONS: 'BirthdayPictograms.svg',\r\n DINING_ADDONS: 'DiningPictograms.svg',\r\n CABANA_ADDONS: 'CabanaPictograms.svg',\r\n APP_ILLUSTRATION_ATTRACTIONS: 'app-illustrations-attractions.webp',\r\n CMP_NEW_MOBILE_APP: 'cmp-new-mobile-app.png',\r\n APP_STORE_CHROME_PLAY_BADGE: 'App_Store_Google-play-badge.png',\r\n APP_STORE_APPLE_DOWNLOAD_BADGE: 'App_Store_Apple_Download_Badge.png',\r\n ADD_GUESTS_GUESTS: 'guests.png',\r\n ADD_GUESTS_SUITE: 'suite.png',\r\n INFO_ICON: 'warningIcon.svg',\r\n CARD_LODGE_INFORMATION: 'paw-location-icon.png',\r\n CARD_STAY_DATES: 'stay_dates_calendar_icon.png',\r\n CARD_GUESTS: 'card-guests-icon.png',\r\n GREEN_CHECK: 'check-guest-form-icon.png',\r\n CARD_PASSES: 'passes-card-icon.png',\r\n CARD_PROMOS_AND_DISCOUNTS: 'pass-type-icon.png',\r\n PLUS_CIRCLE: 'PlusCircle.svg',\r\n CMP_CALLOUT_PARKING_DESKTOP: 'cmp-callout-parking-desktop.png',\r\n BUNDLE_TILE_DINING: 'Dining.svg',\r\n BUNDLE_TILE_ATTRACTIONS: 'WolfPackage.svg',\r\n BUNDLE_TILE_MORE: 'Sippers.svg',\r\n CHECK_TRANSPARENT: 'check-transparent.svg',\r\n ADVENTURE_BUCK_COIN: 'v-adventure-buck-coin.svg',\r\n ERROR_MESSAGE_ICON: 'ErrorImage.svg'\r\n};\r\n","import { FLOW_NAVIGATION_ACTIONS } from '../flows/DynamicFlow/utilities/constants';\r\n\r\nexport const EVENTS_DICTIONARY = {\r\n GWR_LOGIN: 'gwr.loginComplete',\r\n GWR_LOGOUT: 'gwr.logoutComplete',\r\n AEM_DEALS_T2_CARDS_UPDATE: 'aem.emitDealsT2CardsUpdate',\r\n FLOW_NEXT_STEP_TEXT: 'flow.NextStepText',\r\n ...FLOW_NAVIGATION_ACTIONS\r\n};\r\n\r\n/**\r\n * This functions emits an event on the window that will be listened\r\n * @param {String} eventName name that will be expected on the other side\r\n *\r\n * More custom options can be added later\r\n */\r\nexport const emitEventsByName = eventName => {\r\n const event = new Event(eventName);\r\n window.dispatchEvent(event);\r\n};\r\n\r\n/**\r\n * This functions emits an event on the window that will be listened\r\n * @param {String} eventName name that will be expected on the other side\r\n * @param {Object} detail object with the data that will be sent to the other side\r\n *\r\n * More custom options can be added later\r\n */\r\nexport const emitCustomEvent = (eventName, detail) => {\r\n const event = new CustomEvent(eventName, {\r\n detail: { ...detail }\r\n });\r\n window.dispatchEvent(event);\r\n};\r\n\r\nexport const isInIframe = window.self !== window.top;\r\n","export const LOYALTY_TYPES = {\r\n available: 'available',\r\n availableMobile: 'availableMobile',\r\n earn: 'earn',\r\n applied: 'applied',\r\n availableWithButton: 'availableWithButton',\r\n withExpirationDate: 'withExpirationDate',\r\n profileDesktop: 'profileDesktop',\r\n profilePoints: 'profilePoints',\r\n availableMobileSearch: 'availableMobileSearch',\r\n profilePointsHistory: 'profilePointsHistory',\r\n joinVoyagersMessage: 'joinVoyagersMessage'\r\n};\r\n","import get from 'lodash-es/get';\r\nimport { GwDatesWrapper } from '../../../components/_internal_date_/gwDatesWrapper';\r\nimport { getLocation } from '../../../components/utilities/ResortLocations';\r\nimport { store } from '../../../store/configureStore';\r\nimport {\r\n DATE_FORMATS,\r\n EVENT_CATEGORIES,\r\n GTM_EVENT,\r\n LATE_CHECKOUT_PREFIXES,\r\n PACKAGES_CATEGORY,\r\n PACKAGE_CHARGE_TYPE,\r\n PACKAGE_TYPE,\r\n PRODUCT_SCOPES,\r\n RECOMMENDED_FOR_YOU\r\n} from '../../../utilities/constants';\r\nimport { pushEvent } from '../../../utilities/dataLayerUtils';\r\nimport { getNumberOfBillableGuests } from '../../../utilities/guestsUtils';\r\nimport { FLEX_TRIP_PACKAGE_CODE } from '../../../utilities/paymentUtils';\r\nimport { extraGuestPurchaseObj } from '../analytics/analyticsObjectBuilders';\r\nimport {\r\n buildPackagesPurchaseEnhancedECommerceObject,\r\n buildPurchaseEnhancedECommerceObject\r\n} from './analyticsObjectBuilders';\r\n\r\n/**\r\n * Get packages grouped for the reservation\r\n * @param {*} param0\r\n */\r\nexport const getGroupedAddedPackages = ({ addedPackagesCodes, reservation }) => {\r\n return addedPackagesCodes.reduce((groupedPackages, packageCode) => {\r\n const foundPackages = reservation.packages.reduce((foundPackages, reservationPackage) => {\r\n if (reservationPackage.packageGroup === packageCode || reservationPackage.packageCode === packageCode) {\r\n foundPackages.push(reservationPackage);\r\n }\r\n\r\n return foundPackages;\r\n }, []);\r\n\r\n groupedPackages[packageCode] = foundPackages;\r\n return groupedPackages;\r\n }, {});\r\n};\r\n\r\n/**\r\n * Calculates total revenue and taxes for the requested packages\r\n * @param {Array} addedPackagesCodes\r\n * @param {Array} groupedAddedPackages\r\n * @returns [int totalRevenue, int totalTaxes]\r\n */\r\nexport const getTotalPackagesRevenueAndTaxes = ({ addedPackagesCodes, groupedAddedPackages }) => {\r\n const totalRevenue = addedPackagesCodes.reduce((acc, packageCode) => {\r\n const packageGroupRevenue = groupedAddedPackages[packageCode].reduce((packageGroupRevenue, singlePackage) => {\r\n return packageGroupRevenue + singlePackage.packageAmount;\r\n }, 0);\r\n\r\n return acc + packageGroupRevenue;\r\n }, 0);\r\n\r\n const totalTaxes = addedPackagesCodes.reduce((acc, packageCode) => {\r\n const packageGroupTaxes = groupedAddedPackages[packageCode].reduce((taxesTotal, singlePackage) => {\r\n return taxesTotal + singlePackage.tax;\r\n }, 0);\r\n\r\n return acc + packageGroupTaxes;\r\n }, 0);\r\n\r\n return [totalRevenue, totalTaxes];\r\n};\r\n\r\nexport const getAddedPackagesCodes = packages => packages.map(addedPackage => addedPackage.packageCode);\r\n\r\nexport const getPaymentDescription = reservation => {\r\n const { paymentType, comments } = reservation;\r\n if (paymentType === 'DS' && comments.includes('This is a PayPal reservation')) {\r\n return 'PayPal';\r\n }\r\n\r\n if (paymentType === 'AF') return 'Affirm';\r\n\r\n if (paymentType === 'GP') return 'Google Pay';\r\n\r\n if (paymentType === 'AP') return 'Apple Pay';\r\n\r\n return 'Credit Card';\r\n};\r\n\r\nexport const getAnalyticsPayload = reservation => {\r\n const products = [];\r\n const packages = reservation.packages;\r\n\r\n products.push({\r\n productId: reservation.selection.roomCode,\r\n quantity: reservation.selection.numberOfNights\r\n });\r\n\r\n if (packages) {\r\n packages.forEach(pack => {\r\n products.push({\r\n productId: pack.packageCode,\r\n quantity: pack.quantity\r\n });\r\n });\r\n }\r\n\r\n return {\r\n paymentMethod: getPaymentDescription(reservation),\r\n orderId: reservation.id,\r\n products\r\n };\r\n};\r\n\r\n/**\r\n * Function to get package type or the package tab where it belongs\r\n * @param {Object} newAddedPackage Package Object recently added\r\n * @param {Array} packagesTable Array of objects got from availabilty call, represents packageTableJson\r\n * @returns String Package type one of: Attractions, Birthday, Family, LCO, Flextrip, Dining\r\n */\r\nexport const getPackageCategory = (newAddedPackage, packagesTable) => {\r\n let packageType = '';\r\n\r\n // Get if is LCO\r\n if (newAddedPackage.packageCode.includes(LATE_CHECKOUT_PREFIXES.code)) {\r\n packageType = LATE_CHECKOUT_PREFIXES.itemCode;\r\n } else if (newAddedPackage.packageCode.trim() === FLEX_TRIP_PACKAGE_CODE) {\r\n packageType = PACKAGE_TYPE.flexTrip;\r\n } else {\r\n // if is not then we look at packages table for package type\r\n const planPackage = packagesTable.filter(pkgTable =>\r\n pkgTable.packageCodes?.map(pkgCode => pkgCode.trim()).includes(newAddedPackage.packageCode)\r\n );\r\n const isValidPackage = planPackage && planPackage.length > 0;\r\n const isDining =\r\n isValidPackage &&\r\n planPackage[0].packageTableName.trim().toLowerCase() === PACKAGE_TYPE.dining.trim().toLowerCase();\r\n // Check when this is a dining package, we need to consume this from another property\r\n if (isDining) {\r\n packageType = PACKAGE_TYPE.dining;\r\n } else {\r\n packageType = isValidPackage ? planPackage[0].packageTabName : '';\r\n }\r\n }\r\n\r\n return packageType;\r\n};\r\n\r\n/**\r\n * Get valid quanity for the package. When is dining and per person/day we should perfom some calcs\r\n * @param {Object} newAddedPackage Package object\r\n * @param {Array} packageCategory one of: attractions, family, birthday, dining, lco, flextrip\r\n * @param {Object} guests Guest Redux state\r\n * @param {number} numberOfNights Number of nights for the stay\r\n * @returns Number quantity of the package\r\n */\r\nexport const getPackageQuantity = (newAddedPackage, packageCategory, guests, numberOfNights) => {\r\n // if is dining and is by package per day -- number of nights * billable guests\r\n const isDiningPerDay =\r\n packageCategory.trim().toLowerCase() === PACKAGES_CATEGORY.dining.toLowerCase() &&\r\n newAddedPackage.chargeType.trim().toLowerCase() === PACKAGE_CHARGE_TYPE.personPerDay.toLowerCase();\r\n\r\n if (isDiningPerDay) {\r\n const billableGuests = getNumberOfBillableGuests(guests.adultsCount, guests.kidsAges);\r\n return billableGuests * numberOfNights;\r\n }\r\n //if is dining and is by package -- number of combo\r\n return newAddedPackage.quantity;\r\n};\r\n\r\n/**\r\n * Check if current package is recommended\r\n * @param {Object} newAddedPackage Event package object\r\n * @param {Array} packagesTable Array of objects incoming from detailed availability\r\n * @returns bool\r\n */\r\nexport const isRecommendedPackage = (newAddedPackage, packagesTable) => {\r\n const result = packagesTable.some(pkgTable =>\r\n pkgTable.packageList?.some(\r\n pkgItem => pkgItem.packageCode === newAddedPackage.packageCode && pkgItem.flags?.includes(RECOMMENDED_FOR_YOU)\r\n )\r\n );\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Listener triggered on add extra guest\r\n * @param {Object} eventType The event type\r\n * @param {number} amount The amount charged on this transaction\r\n * @param {Object} additionalGuests The object that contains adults and children numbers\r\n */\r\nexport const sendAddExtraGuestInfo = (eventType, amount, additionalGuests, suiteContent) => {\r\n const { entities, suite } = store.getState();\r\n const { maxOccupancy, suiteCategory } = suiteContent;\r\n\r\n const reservation = entities?.reservationDetails.data;\r\n\r\n const addExtraGuestObject = {\r\n event: eventType,\r\n resortLocation: reservation?.property,\r\n purchaseLocation: 'modify reservation',\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n purchase: {\r\n actionField: {\r\n id: reservation?.id,\r\n list: 'suites',\r\n position: 1,\r\n SIP: suite.dayType\r\n },\r\n products: [extraGuestPurchaseObj(reservation, maxOccupancy, suiteCategory, amount, additionalGuests)]\r\n }\r\n }\r\n };\r\n\r\n pushEvent(addExtraGuestObject);\r\n};\r\n\r\n/**\r\n * Send post purchase package to analytics, post purchase happens when user adds or buys something in CMP\r\n * @param {array} packages Array of objects containing the new packages to be added\r\n * @param {object} reservation Reservation object with booking information\r\n */\r\nexport const sendPostPurchasePkg = (\r\n packages,\r\n reservation,\r\n packagesContent,\r\n purchaseLocation,\r\n dayType,\r\n maxOccupancy\r\n) => {\r\n const addedPackagesCodes = getAddedPackagesCodes(packages);\r\n const groupedAddedPackages = getGroupedAddedPackages({\r\n addedPackagesCodes,\r\n reservation\r\n });\r\n\r\n const [addedPackagesRevenue, addedPackagesTaxes] = getTotalPackagesRevenueAndTaxes({\r\n addedPackagesCodes,\r\n groupedAddedPackages\r\n });\r\n\r\n // TODO - Eventually we are going to remove this in favor of the enhanced E-Commerce experience.\r\n const products = addedPackagesCodes.reduce((acc, packageCode) => {\r\n const packagesByCode = packages.reduce((keysAcc, currentPackage) => {\r\n keysAcc[currentPackage.packageCode] = currentPackage;\r\n return keysAcc;\r\n }, {});\r\n const pkgType = getPkgType(packagesContent, packageCode);\r\n acc.push({\r\n name: packagesByCode[packageCode].title,\r\n id: packageCode,\r\n variant: pkgType,\r\n brand: 'great wolf',\r\n price: groupedAddedPackages[packageCode].reduce((revenueAcc, packageItem) => {\r\n return revenueAcc + packageItem.packageAmount;\r\n }, 0),\r\n quantity: packagesByCode[packageCode].quantity,\r\n category: packagesByCode[packageCode].packageType,\r\n coupon: reservation.offerCode\r\n });\r\n const uniquePackages = [...new Map(acc.map(m => [m.id, m])).values()];\r\n return uniquePackages;\r\n }, []);\r\n\r\n const postPurchasePackageObj = {\r\n event: EVENT_CATEGORIES.GTM.postPurchasePackage,\r\n ecommerce: {\r\n purchase: {\r\n actionField: {\r\n id: reservation.id,\r\n coupon: reservation.rateCode,\r\n revenue: addedPackagesRevenue.toFixed(2),\r\n SIP: dayType\r\n },\r\n products: products\r\n }\r\n }\r\n };\r\n\r\n pushEvent(postPurchasePackageObj);\r\n\r\n const transactionPackages = packages.map(pkg => {\r\n return {\r\n ...pkg,\r\n quantity: pkg.quantityPerson || pkg.quantity\r\n };\r\n });\r\n\r\n const uniquePackages = [...new Map(transactionPackages.map(m => [m.id, m])).values()];\r\n\r\n const packageProducts = buildPackagesPurchaseEnhancedECommerceObject(\r\n {\r\n addedPackagesCodes,\r\n packages: uniquePackages,\r\n groupedAddedPackages,\r\n reservation,\r\n packagesContent,\r\n maxOccupancy\r\n },\r\n purchaseLocation || PRODUCT_SCOPES.postPurchase\r\n );\r\n\r\n const postPurchaseEnhancedECommerce = buildPurchaseEnhancedECommerceObject(\r\n {\r\n reservation,\r\n products: packageProducts,\r\n revenue: (addedPackagesRevenue + addedPackagesTaxes).toFixed(2),\r\n tax: addedPackagesTaxes.toFixed(2),\r\n shipping: 0\r\n },\r\n EVENT_CATEGORIES.GTM.transaction,\r\n purchaseLocation || PRODUCT_SCOPES.postPurchase\r\n );\r\n\r\n pushEvent(postPurchaseEnhancedECommerce);\r\n};\r\n\r\n/**\r\n * Send cabanas post purchase to analytics, post purchase happens when user adds or buys something in CMP\r\n * @param {object} cabanas Object containing cabanas information to be added from the user\r\n * @param {object} reservationData Object containing reservation information to be added from the user\r\n */\r\nexport const sendCabanasAnalytics = (cabanas, reservationData, dayType) => {\r\n const { numAdults, numberOfNights, numChildren, site: propertyCode, offerCode } = reservationData.selection;\r\n\r\n cabanas.reservations.forEach(cabana => {\r\n const { id, total, roomDescription, arrival, rateDescription, roomType, rateInfo } = cabana;\r\n\r\n // Now send enhanced e-commers for transaction\r\n const cabanaDate = GwDatesWrapper.format(arrival, DATE_FORMATS.default);\r\n const locationName = getLocation(propertyCode).url; //product scope dimension for resort;\r\n const taxes = get(rateInfo, 'taxes', 0);\r\n const totalRevenue = parseFloat(total) + parseFloat(taxes);\r\n const { suite, guests } = store.getState();\r\n\r\n const cabanaPurchaseObj = {\r\n event: EVENT_CATEGORIES.GTM.transaction,\r\n resortLocation: locationName,\r\n purchaseLocation: EVENT_CATEGORIES.GTM.postPurchase,\r\n ecommerce: {\r\n currencyCode: 'USD',\r\n purchase: {\r\n actionField: {\r\n id: reservationData.id,\r\n affiliation: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n revenue: totalRevenue.toFixed(2),\r\n shipping: 0,\r\n tax: taxes.toFixed(2),\r\n coupon: offerCode,\r\n SIP: dayType\r\n },\r\n products: [\r\n {\r\n name: roomDescription,\r\n id: `${roomType} - ${id}`,\r\n price: total,\r\n brand: GTM_EVENT.LABEL.greatWolfLowerCase,\r\n category: EVENT_CATEGORIES.GTM.packages,\r\n variant: rateDescription,\r\n quantity: 1,\r\n coupon: offerCode,\r\n dimension29: locationName,\r\n dimension30: EVENT_CATEGORIES.GTM.packages,\r\n dimension31: numberOfNights,\r\n dimension32: numAdults,\r\n dimension33: numChildren,\r\n dimension34: EVENT_CATEGORIES.GTM.postPurchase,\r\n dimension35: cabanaDate,\r\n dimension36: cabanaDate,\r\n dimension61: Number(suite.selectedSuite.maxOccupancy), // product scope dimension for Maximum Suite Occupancy\r\n dimension62: guests.kidsAges || [] // product scope dimension for Kids Ages\r\n }\r\n ]\r\n }\r\n }\r\n };\r\n pushEvent(cabanaPurchaseObj);\r\n });\r\n};\r\n\r\n/**\r\n *\r\n * @param {Array} pkgs app pkgs\r\n * @param {String} packageCode pkg code to filter\r\n * @returns pkgType based on pkgCode\r\n */\r\nexport const getPkgType = (pkgs, packageCode) => {\r\n let pkgType = null;\r\n const trimPkgCode = packageCode.trim();\r\n // Look for LCO and Flextrip packages\r\n if (trimPkgCode.includes(LATE_CHECKOUT_PREFIXES.code)) {\r\n return LATE_CHECKOUT_PREFIXES.itemCode;\r\n } else if (trimPkgCode === FLEX_TRIP_PACKAGE_CODE) {\r\n return PACKAGE_TYPE.flexTrip;\r\n }\r\n\r\n const filteredPackage = pkgs.find(pkg => pkg.packageCode === trimPkgCode);\r\n\r\n if (!filteredPackage) return pkgType;\r\n\r\n pkgType = filteredPackage.packageType;\r\n\r\n // The PkgType used on the CMP is an array\r\n const isPkgTypeAnArray = Array.isArray(pkgType);\r\n const packageType = isPkgTypeAnArray ? pkgType[0] : pkgType;\r\n\r\n return packageType;\r\n};\r\n","import { isLocationAvailableWithAffirm } from '../../../api/Utils/affirmUtils';\r\nimport { isPayPalEnabled } from '../../../api/Utils/paypalUtils';\r\n\r\nexport const paymentMethodsTypes = {\r\n CREDIT_CARD: 'credit-card',\r\n CREDIT_CARD_ENABLED: 'creditEnabled',\r\n AFFIRM: 'affirm',\r\n AFFIRM_ENABLED: 'affirmEnabled',\r\n PAYPAL: 'paypal',\r\n PAYPAL_ENABLED: 'payPalEnabled',\r\n APPLE_PAY: 'applePayEnabled',\r\n GOOGLE_PAY: 'googlePayEnabled'\r\n};\r\n\r\nexport const getShouldDisplayGooglePay = (paymentMethodsAllowed, isSuiteBookingFlow, gpayApplePayIsActive) =>\r\n paymentMethodsAllowed &&\r\n paymentMethodsAllowed[paymentMethodsTypes.GOOGLE_PAY] &&\r\n isSuiteBookingFlow &&\r\n gpayApplePayIsActive;\r\n\r\nexport const getShouldDisplayCreditCard = paymentMethodsAllowed =>\r\n paymentMethodsAllowed && paymentMethodsAllowed[paymentMethodsTypes.CREDIT_CARD_ENABLED];\r\n\r\nexport const getShouldDisplayAffirm = (paymentMethodsAllowed, isSuiteBookingFlow, resortLocation) =>\r\n Boolean(\r\n paymentMethodsAllowed &&\r\n paymentMethodsAllowed[paymentMethodsTypes.AFFIRM_ENABLED] &&\r\n isLocationAvailableWithAffirm(resortLocation) &&\r\n isSuiteBookingFlow\r\n );\r\n\r\nexport const getShouldDisplayPaypal = (paymentMethodsAllowed, resortLocation) =>\r\n Boolean(\r\n paymentMethodsAllowed &&\r\n paymentMethodsAllowed[paymentMethodsTypes.PAYPAL_ENABLED] &&\r\n isPayPalEnabled(process.env.REACT_APP_PAYPAL_ENABLED_AT, resortLocation)\r\n );\r\n\r\nexport const getShouldDisplayApplePay = (paymentMethodsAllowed, isSuiteBookingFlow, gpayApplePayIsActive) =>\r\n Boolean(\r\n paymentMethodsAllowed &&\r\n paymentMethodsAllowed[paymentMethodsTypes.APPLE_PAY] &&\r\n isSuiteBookingFlow &&\r\n window.ApplePaySession !== undefined &&\r\n gpayApplePayIsActive\r\n );\r\n\r\nexport const getHasAvailabilityKey = selectedSuite =>\r\n Boolean(\r\n selectedSuite?.availabilityKey && selectedSuite?.availabilityKey !== '' && selectedSuite?.availabilityKey !== null\r\n );\r\n\r\nexport const getHasPointsOffers = (pointsBalance, activeOffers) =>\r\n (pointsBalance && pointsBalance !== 0) || activeOffers?.length !== 0 ? true : false;\r\n\r\nexport const getTotalToCharge = (dueTodayAmount, summaryTotal, isDaypassBookingFlow) => {\r\n const value = isDaypassBookingFlow ? summaryTotal : dueTodayAmount;\r\n\r\n return value && value > 0 ? parseFloat(value).toFixed(2) : '0.00';\r\n};\r\n\r\nexport const handleTotalWithPackagesForDayPass = ({ selectedPackages, summaryTotal }) => {\r\n if (selectedPackages.length < 1) {\r\n return summaryTotal.toFixed(2);\r\n }\r\n let newTotal = summaryTotal;\r\n selectedPackages &&\r\n selectedPackages.forEach(item => {\r\n newTotal += item.amount;\r\n });\r\n return newTotal.toFixed(2);\r\n};\r\n\r\nexport const getValidationErrors = errorObj => {\r\n return [\r\n ...Object.keys(errorObj.validationErrors).reduce((accumulator, validationError) => {\r\n const messages = errorObj.validationErrors[validationError];\r\n return [...accumulator, ...messages];\r\n }, []),\r\n ...(errorObj.details ? errorObj.detail : []),\r\n ...((errorObj &&\r\n errorObj.err &&\r\n errorObj.err.response &&\r\n errorObj.err.response.data &&\r\n errorObj.err.response.data.detail && [errorObj.err.response.data.detail]) ||\r\n [])\r\n ];\r\n};\r\n\r\nexport const optionsCreditCardFirst = [\r\n paymentMethodsTypes.CREDIT_CARD,\r\n paymentMethodsTypes.APPLE_PAY,\r\n paymentMethodsTypes.GOOGLE_PAY,\r\n paymentMethodsTypes.AFFIRM,\r\n paymentMethodsTypes.PAYPAL\r\n];\r\n\r\nexport const optionsApplePayFirst = [\r\n paymentMethodsTypes.APPLE_PAY,\r\n paymentMethodsTypes.GOOGLE_PAY,\r\n paymentMethodsTypes.CREDIT_CARD,\r\n paymentMethodsTypes.AFFIRM,\r\n paymentMethodsTypes.PAYPAL\r\n];\r\n","import { colors } from '../components/ui-kit/themes/theme';\r\nexport const getThemeColor = theme => {\r\n switch (theme) {\r\n case 'Red':\r\n return colors.digitalBrightRed[100];\r\n case 'Blue':\r\n return colors.kiddiePoolBlue[100];\r\n case 'Gold':\r\n return colors.deepLakeBlue[100];\r\n default:\r\n return colors.deepLakeBlue[20];\r\n }\r\n};\r\n\r\nexport const parsePassHTMLTextByTag = (text, tag) => {\r\n return text\r\n .split(`<${tag}>`)\r\n .filter(item => item.includes(`</${tag}>`))\r\n .map(item => item.split(`</${tag}>`)[0]);\r\n};\r\n\r\nexport const isBestValue = bestValueStr => (bestValueStr === 'true' ? true : false);\r\n\r\nexport const isValidPrice = value => {\r\n return typeof value === 'number' && !Number.isNaN(value);\r\n};\r\n\r\nexport const getFormattedPrice = value => {\r\n if (isValidPrice(value)) {\r\n return value.toFixed(2);\r\n }\r\n\r\n return '0.00';\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport { fontSize, height } from 'styled-system';\r\nimport theme from '../ui-kit/themes/theme';\r\n\r\nimport { Flex, Text } from '../ui-kit';\r\nimport ArrowRightIcon from '../ui-kit/icons/ArrowRight';\r\n\r\nconst dateSize = props => {\r\n const cases = {\r\n small: `${props.theme.fontSizes[0]}px`,\r\n medium: `${props.theme.fontSizes[2]}px`,\r\n large: `${props.theme.fontSizes[5]}px`\r\n };\r\n\r\n return `font-size: ${cases[props.size]};`;\r\n};\r\n\r\nconst iconSize = size => {\r\n const cases = {\r\n small: theme.fontSizes[0],\r\n medium: theme.fontSizes[2],\r\n large: theme.fontSizes[5]\r\n };\r\n\r\n return cases[size];\r\n};\r\n\r\nexport const CheckInLabel = styled(Text)`\r\n font-size: 12px;\r\n ${fontSize}\r\n ${height}\r\n font-weight: medium;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n margin-bottom: ${theme.space[3]}px;\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const Container = styled(Flex)`\r\n align-items: center;\r\n justify-content: center;\r\n flex-wrap: wrap;\r\n color: deepLakeBlue;\r\n align-items: stretch;\r\n width: 100%;\r\n margin-top: ${theme.space[7]}px;\r\n`;\r\n\r\nexport const DateText = styled(Text)`\r\n font-weight: bold;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n font-size: 20px;\r\n ${dateSize};\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n`;\r\n\r\nexport const IconContainer = styled(Flex)`\r\n display: flex;\r\n color: ${theme.colors.preciousStoneBlue[100]};\r\n flex: 1;\r\n align-items: flex-end;\r\n justify-content: center;\r\n`;\r\n\r\nexport const Icon = styled(ArrowRightIcon)`\r\n ${iconSize}\r\n`;\r\n","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\n\r\nimport { Box } from '../ui-kit/index';\r\nimport { DateText, CheckInLabel } from './styles';\r\n\r\nexport const CheckInOutDate = ({ children }) => {\r\n return <Box>{children}</Box>;\r\n};\r\n\r\nCheckInOutDate.Label = ({ children, ...restProps }) => {\r\n return <CheckInLabel {...restProps}>{children}</CheckInLabel>;\r\n};\r\n\r\nCheckInOutDate.Date = ({ size, children, ...restProps }) => {\r\n return (\r\n <DateText size={size} {...restProps}>\r\n {children}\r\n </DateText>\r\n );\r\n};\r\n\r\nCheckInOutDate.Date.propTypes = {\r\n size: PropTypes.string.isRequired\r\n};\r\n","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\n\r\nimport { Container, IconContainer, Icon } from './styles';\r\nimport { CheckInOutDate } from './CheckInOutDate';\r\n\r\nconst CheckInOutDates = ({ checkIn, checkOut, size }) => {\r\n return (\r\n <Container>\r\n <CheckInOutDate date={checkIn} size={size}>\r\n <CheckInOutDate.Label>Check-In</CheckInOutDate.Label>\r\n <CheckInOutDate.Date size={size}>{checkIn}</CheckInOutDate.Date>\r\n </CheckInOutDate>\r\n <IconContainer>\r\n <Icon />\r\n </IconContainer>\r\n <CheckInOutDate date={checkIn} size={size}>\r\n <CheckInOutDate.Label>Check-Out</CheckInOutDate.Label>\r\n <CheckInOutDate.Date size={size}>{checkOut}</CheckInOutDate.Date>\r\n </CheckInOutDate>\r\n </Container>\r\n );\r\n};\r\n\r\nCheckInOutDates.propTypes = {\r\n size: PropTypes.string,\r\n checkIn: PropTypes.string.isRequired,\r\n checkOut: PropTypes.string.isRequired\r\n};\r\n\r\nCheckInOutDates.defaultProps = {\r\n size: 'small'\r\n};\r\n\r\nexport { CheckInOutDates };\r\n","// Cart action types\r\nconst cartActionTypes = {\r\n SET_CART_RESORT_LOCATION: 'SET_CART_RESORT_LOCATION',\r\n RESET_CART_RESORT_LOCATION: 'RESET_CART_RESORT_LOCATION',\r\n SET_CART_SUITE: 'SET_CART_SUITE',\r\n SET_CART_PACKAGES: 'SET_CART_PACKAGES',\r\n SET_CART_LAST_VISITED_STEP: 'SET_CART_LAST_VISITED_STEP',\r\n SET_EXPIRED_CART: 'SET_EXPIRED_CART',\r\n RESET_EXPIRED_CART: 'RESET_EXPIRED_CART'\r\n};\r\n\r\nexport default cartActionTypes;\r\n","// Dates Selectors\r\n\r\nimport { GwDatesWrapper } from '../../../components/_internal_date_/gwDatesWrapper';\r\n\r\n/**\r\n * Get number of nights based on check in and check out date selected.\r\n * @param {Object} reservation dates\r\n * @return {number} total number of nights\r\n */\r\nexport const getTotalNumberOfNights = state => {\r\n const { checkinDateSelection, checkoutDateSelection } = state;\r\n if (!checkinDateSelection || !checkoutDateSelection) return 0;\r\n return GwDatesWrapper.diff(checkoutDateSelection, checkinDateSelection);\r\n};\r\n\r\n/**\r\n * Get selected check in date.\r\n * @param {Object} state\r\n * @returns {string} String date.\r\n */\r\nexport const getCheckIn = state => state.checkinDateSelection;\r\n\r\n/**\r\n * Get selected check out date.\r\n * @param {Object} state\r\n * @returns {string} String date.\r\n */\r\nexport const getCheckOut = state => state.checkoutDateSelection;\r\n","export const paymentFieldsLengths = {\r\n PHONE_MIN: 10,\r\n PHONE_MAX: 10,\r\n CVV_MIN: 3,\r\n CVV_MAX: 4,\r\n CC_MIN: 13,\r\n CC_MAX: 19\r\n};\r\n\r\nexport const errors = {\r\n FIRST_NAME_REQUIRED: 'Please enter your First Name',\r\n LAST_NAME_REQUIRED: 'Please enter your Last Name',\r\n PHONE_REQUIRED: 'Please enter your Phone',\r\n EMAIL_REQUIRED: 'Please enter your Email Address',\r\n ADDRESS_REQUIRED: 'Please enter your Address',\r\n CITY_REQUIRED: 'Please enter your City',\r\n STATE_REQUIRED: 'Please select your State',\r\n PROVINCE_REQUIRED: 'Please select your Province',\r\n POSTAL_REQUIRED: 'Please enter your Postal Code',\r\n POSTAL_ONLY_5: 'Postal Code must be exactly 5 characters',\r\n POSTAL_INVALID: 'Postal Code is invalid',\r\n NAME_ON_CARD_REQUIRED: 'Please enter your Name on Card',\r\n CARD_NUMBER_REQUIRED: 'Please enter your Card Number',\r\n CVV_REQUIRED: 'Required',\r\n EMAIL: 'Email address should be in the format xx@xxx.xx',\r\n PHONE: 'Phone should be in the format (xxx) xxx-xxxx',\r\n CVV_ONLY_NUMBERS: 'Use only #s',\r\n PHONE_LENGTH: `Invalid size, must be of ${paymentFieldsLengths.PHONE_MAX}`,\r\n CVV_LENGTH: `${paymentFieldsLengths.CVV_MIN}\r\n to ${paymentFieldsLengths.CVV_MAX} digits`,\r\n PAYMENT: 'Invalid Payment Option',\r\n OPTION: 'Invalid option',\r\n REQUIRED_MONTH: 'Select Month',\r\n REQUIRED_YEAR: 'Select Year',\r\n REQUIRED_COUNTRY: 'Please select your Country',\r\n VALID_CREDIT_CARD_NUMBER: 'Card Number must be a valid credit card',\r\n VALID_CREDIT_CARD_TYPE: 'Please use a valid card type',\r\n CURRENT_PASSWORD_REQUIRED: 'Current Password is required',\r\n NEW_PASSWORD_CAN_NOT_MATCH_CURRENT: 'New Password cannot match Current Password',\r\n NEW_COMFIRM_PASSWORD_SHOULD_MATCH: 'New Password and Confirm Password do not match.',\r\n CONFIRMATION_PASSWORD_REQUIRED: 'Confirmation Password is required',\r\n NEW_PASSWORD_REQUIRED: 'New Password is required',\r\n NOT_VALID_PASSWORD:\r\n 'A valid Password must contain: 1 number, 1 upper case letter, 1 lower case letter and be at least 8 characters long',\r\n LOYALTY_PROGRAM_PASSWORD_REQUIRED: 'You need to create a password to continue',\r\n AT_LEAST_ONE_ALPHABET_REQUIRED: 'This field cannot contain only blank spaces'\r\n};\r\n","/**\r\n * THIS LOGIC IS DEPRECATED\r\n */\r\n\r\n// This is an Auxiliary file for the files\r\n// where we cannot get the information from Redux\r\n// FILES:\r\n// src/infrastructure/middleware/analytics/ActionListeners/EventSuccessListeners.js\r\n// src/infrastructure/middleware/analytics/analyticsObjectBuilders.js\r\n// src/infrastructure/middleware/analytics/analyticsUtils.js\r\n// src/store/componentStores/account.reducer.js\r\n// src/store/componentStores/birthdayParty.reducer.js\r\n// src/store/componentStores/deal.reducer.js\r\n// src/utilities/reservationsUtils.js\r\n// src/utilities/analytics.js\r\n\r\nexport const getLocationDisplayName = shorthandOrCode => {\r\n const location = ResortLocationsAux;\r\n if (location[shorthandOrCode]) {\r\n return location[shorthandOrCode].display;\r\n } else {\r\n return shorthandOrCode;\r\n }\r\n};\r\n\r\nexport const getLocation = locationCode => {\r\n const locations = ResortLocationsAux;\r\n return locations[locationCode] || {};\r\n};\r\n\r\nexport const ResortLocationsAux = {\r\n MANTCA: {\r\n address: null,\r\n booking_phone: null,\r\n display: 'San Francisco / Manteca, CA',\r\n shortDisplayName: 'San Francisco, CA',\r\n mobile_booking_phone: null,\r\n phone: null,\r\n operaCode: 'MANTCA',\r\n url: 'northern-california',\r\n region: 'West',\r\n birthdayEmail: ''\r\n },\r\n SOUTCA: {\r\n address: '12681 Harbor Blvd., Garden Grove, CA 92840',\r\n booking_phone: '714.591.4482',\r\n display: 'Anaheim, CA',\r\n shortDisplayName: 'Garden Grove, CA',\r\n mobile_booking_phone: '714.591.4483',\r\n phone: '888.960.9653',\r\n operaCode: 'SOUTCA',\r\n url: 'southern-california',\r\n region: 'West',\r\n birthdayEmail: 'Birthday-SouthernCalifornia@greatwolf.com'\r\n },\r\n SCOTAZ: {\r\n address: '7333 N. Pima Road Scottsdale, AZ 85258',\r\n booking_phone: null,\r\n display: 'Scottsdale / Salt River, AZ',\r\n shortDisplayName: 'Scottsdale, AZ',\r\n mobile_booking_phone: null,\r\n phone: null,\r\n operaCode: 'SCOTAZ',\r\n url: 'arizona',\r\n region: 'South',\r\n birthdayEmail: 'Birthday-Scottsdale@greatwolf.com'\r\n },\r\n ATLAGA: {\r\n address: '2301 Whitesville Road, LaGrange, GA 30240',\r\n booking_phone: '706.407.0439',\r\n display: 'Atlanta / LaGrange, GA',\r\n shortDisplayName: 'LaGrange, GA',\r\n mobile_booking_phone: '706.407.0454',\r\n phone: '844.473.9653',\r\n operaCode: 'ATLAGA',\r\n url: 'georgia',\r\n region: 'South',\r\n birthdayEmail: 'Birthday-LaGrange@greatwolf.com'\r\n },\r\n BLOOMN: {\r\n address: '1700 American Boulevard East, Bloomington, MN 55425',\r\n booking_phone: '952.562.0463',\r\n display: 'Minneapolis / Bloomington, MN',\r\n shortDisplayName: 'Bloomington, MN',\r\n mobile_booking_phone: '952.562.0462',\r\n phone: '952.851.9653 ',\r\n operaCode: 'BLOOMN',\r\n url: 'minnesota',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-Bloomington@greatwolf.com'\r\n },\r\n NEWEMA: {\r\n address: '150 Great Wolf Drive, Fitchburg, MA 01420',\r\n booking_phone: '978.627.4201',\r\n display: 'Boston / Fitchburg, MA',\r\n shortDisplayName: 'Fitchburg, MA',\r\n mobile_booking_phone: '978.627.4425',\r\n phone: '866.678.9653',\r\n operaCode: 'NEWEMA',\r\n url: 'new-england',\r\n region: 'Northeast',\r\n birthdayEmail: 'Birthday-NewEngland@greatwolf.com'\r\n },\r\n CONCNC: {\r\n address: '10175 Weddington Road, Concord, NC 28027',\r\n booking_phone: '704.631.5522',\r\n display: 'Charlotte / Concord, NC',\r\n shortDisplayName: 'Concord, NC',\r\n mobile_booking_phone: '704.631.5523',\r\n phone: '866.925.9653',\r\n operaCode: 'CONCNC',\r\n url: 'concord',\r\n region: 'South',\r\n birthdayEmail: 'Birthday-Concord@greatwolf.com'\r\n },\r\n GURNIL: {\r\n address: '1700 Nations Drive, Gurnee, IL 60031',\r\n booking_phone: '847.596.3949',\r\n display: 'Chicago / Gurnee, IL',\r\n shortDisplayName: 'Gurnee, IL',\r\n mobile_booking_phone: '847.596.3948',\r\n phone: '844.482.9653',\r\n operaCode: 'GURNIL',\r\n url: 'illinois',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-Gurnee@greatwolf.com'\r\n },\r\n MASOOH: {\r\n address: '2501 Great Wolf Drive, Mason, OH 45040',\r\n booking_phone: '513.234.4143',\r\n display: 'Cincinnati / Mason, OH',\r\n shortDisplayName: 'Mason, OH',\r\n mobile_booking_phone: '513.234.4155',\r\n phone: '800.913.9653',\r\n operaCode: 'MASOOH',\r\n url: 'mason',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-Mason@greatwolf.com'\r\n },\r\n COLOCO: {\r\n address: '9494 Federal Drive, Colorado Springs, CO 80921',\r\n booking_phone: '719.387.0280',\r\n display: 'Colorado Springs, CO',\r\n shortDisplayName: 'Colorado Springs, CO',\r\n mobile_booking_phone: '719.387.0284',\r\n phone: '844-553-9653',\r\n operaCode: 'COLOCO',\r\n url: 'colorado-springs',\r\n region: 'West',\r\n birthdayEmail: 'Birthday-ColoradoSprings@greatwolf.com'\r\n },\r\n GRANWA: {\r\n address: '20500 Old Highway 99 SW, Centralia, WA 98531',\r\n booking_phone: '360.347.1146',\r\n display: 'Grand Mound, WA',\r\n shortDisplayName: 'Grand Mound, WA',\r\n mobile_booking_phone: '360.347.1336',\r\n phone: '800.640.9653',\r\n operaCode: 'GRANWA',\r\n url: 'grand-mound',\r\n region: 'West',\r\n birthdayEmail: 'Birthday-GrandMound@greatwolf.com'\r\n },\r\n GRAPTX: {\r\n address: '100 Great Wolf Drive, Grapevine, TX 76051',\r\n booking_phone: '817.203.8565',\r\n display: 'Grapevine, TX',\r\n shortDisplayName: 'Grapevine, TX',\r\n mobile_booking_phone: '817.778.8151',\r\n phone: '800.693.9653',\r\n operaCode: 'GRAPTX',\r\n url: 'grapevine',\r\n region: 'South',\r\n birthdayEmail: 'Birthday-Grapevine@greatwolf.com'\r\n },\r\n KANSKS: {\r\n address: '10401 Cabela Drive, Kansas City, KS 66111',\r\n booking_phone: '913.871.4402',\r\n display: 'Kansas City, KS',\r\n shortDisplayName: 'Kansas City, KS',\r\n mobile_booking_phone: '913.871.4432',\r\n phone: '800.608.9653',\r\n operaCode: 'KANSKS',\r\n url: 'kansas-city',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-KansasCity@greatwolf.com'\r\n },\r\n NIAGON: {\r\n address: '3950 Victoria Avenue, Niagara Falls, ON L2E 7M8',\r\n booking_phone: '866.956.9653',\r\n display: 'Niagara Falls, Ontario',\r\n shortDisplayName: 'Niagara Falls, ON',\r\n mobile_booking_phone: '888.978.9653',\r\n phone: '800.605.9653',\r\n operaCode: 'NIAGON',\r\n url: 'niagara',\r\n region: 'Canada',\r\n birthdayEmail: ''\r\n },\r\n POCOPA: {\r\n address: '1 Great Wolf Drive, Scotrun, PA 18355',\r\n booking_phone: '570.664.5013',\r\n display: 'Pocono Mountains, PA',\r\n shortDisplayName: 'the Poconos',\r\n mobile_booking_phone: '570.664.5014',\r\n phone: '800.768.9653',\r\n operaCode: 'POCOPA',\r\n url: 'poconos',\r\n region: 'Northeast',\r\n birthdayEmail: 'Birthday-Poconos@greatwolf.com'\r\n },\r\n SANDOH: {\r\n address: '4600 Milan Road (US 250), Sandusky, OH 44870',\r\n booking_phone: '419.239.2319',\r\n display: 'Sandusky, OH',\r\n shortDisplayName: 'Sandusky, OH',\r\n mobile_booking_phone: '419.239.2596',\r\n phone: '800.641.9653',\r\n operaCode: 'SANDOH',\r\n url: 'sandusky',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-Sandusky@greatwolf.com'\r\n },\r\n TRAVMI: {\r\n address: '3575 N. US 31 S., Traverse City, MI 49684',\r\n booking_phone: '231.486.2570',\r\n display: 'Traverse City, MI',\r\n shortDisplayName: 'Traverse City, MI',\r\n mobile_booking_phone: '231.486.2571',\r\n phone: '866.478.9653',\r\n operaCode: 'TRAVMI',\r\n url: 'traverse-city',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-TraverseCity@greatwolf.com'\r\n },\r\n WILLVA: {\r\n address: '549 East Rochambeau Drive, Williamsburg, VA 23188-2148',\r\n booking_phone: '757.603.4569',\r\n display: 'Williamsburg, VA',\r\n shortDisplayName: 'Williamsburg, VA',\r\n mobile_booking_phone: '757.603.4570',\r\n phone: '800.551.9653',\r\n operaCode: 'WILLVA',\r\n url: 'williamsburg',\r\n region: 'South',\r\n birthdayEmail: 'Birthday-Williamsburg@greatwolf.com'\r\n },\r\n DELLWI: {\r\n address: '1400 Great Wolf Drive, Baraboo, WI 53913',\r\n booking_phone: '608.844.8116',\r\n display: 'Wisconsin Dells, WI',\r\n shortDisplayName: 'Wisconsin Dells, WI',\r\n mobile_booking_phone: '608.844.8415',\r\n phone: '800.559.9653',\r\n operaCode: 'DELLWI',\r\n url: 'wisconsin-dells',\r\n region: 'Midwest',\r\n birthdayEmail: 'Birthday-WisconsinDells@greatwolf.com'\r\n },\r\n NAPLFL: {\r\n address: '3890 City Gate Blvd N',\r\n booking_phone: '',\r\n display: 'Naples, FL',\r\n shortDisplayName: 'Naples, FL',\r\n mobile_booking_phone: '877.478.9653',\r\n phone: '570.688.9899',\r\n operaCode: 'NAPLFL',\r\n url: 'naples',\r\n region: 'Southeast',\r\n birthdayEmail: ''\r\n },\r\n WEBSTX: {\r\n address: '1000 Great Wolf Way',\r\n booking_phone: '',\r\n display: 'Houston/Webster, TX',\r\n shortDisplayName: 'Houston/Webster, TX',\r\n mobile_booking_phone: '',\r\n phone: '',\r\n operaCode: 'WEBSTX',\r\n url: 'webster',\r\n region: 'South',\r\n birthdayEmail: ''\r\n },\r\n PERRMD: {\r\n address: '1240 Chesapeake Overlook Parkway',\r\n booking_phone: '877.478.9653',\r\n display: 'Baltimore / Perryville, MD',\r\n shortDisplayName: 'Baltimore / Perryville, MD',\r\n mobile_booking_phone: '877.478.9653',\r\n phone: '570.688.9899',\r\n operaCode: 'PERRMD',\r\n url: 'maryland',\r\n region: 'Northeast',\r\n birthdayEmail: ''\r\n }\r\n};\r\n\r\nexport default ResortLocationsAux;\r\n","export function getCookie(cname) {\r\n let name = cname + '=';\r\n let decodedCookie = decodeURIComponent(document.cookie);\r\n let ca = decodedCookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nexport function checkCookie(cname) {\r\n let cookieExist = getCookie(cname);\r\n if (cookieExist === '') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nexport function setCookie(cname, cvalue, exdays) {\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n let expires = 'expires=' + d.toUTCString();\r\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/;domain=greatwolf.com';\r\n}\r\n\r\nexport function deleteCookie(cname) {\r\n document.cookie = cname + '= ; expires = Thu, 01 Jan 1970 00:00:00 GMT';\r\n}\r\n","// Add a Package action types\r\n\r\nconst addAPackageActionTypes = {\r\n ADD_ADD_A_PACKAGE: 'ADD_ADD_A_PACKAGE',\r\n REMOVE_ADD_A_PACKAGE: 'REMOVE_ADD_A_PACKAGE',\r\n SET_ADD_A_PACKAGE_FLASH_MESSAGE: 'SET_ADD_A_PACKAGE_FLASH_MESSAGE',\r\n CLEAR_ADD_A_PACKAGE_FLASH_MESSAGE: 'CLEAR_ADD_A_PACKAGE_FLASH_MESSAGE',\r\n CLEAR_ADD_A_PACKAGE_ALL_ADDED_PACKAGES: 'CLEAR_ADD_A_PACKAGE_ALL_ADDED_PACKAGES',\r\n SET_ADD_A_PACKAGE_A_CABANA: 'SET_ADD_A_PACKAGE_A_CABANA',\r\n REMOVE_ADD_A_PACKAGE_CABANA: 'REMOVE_ADD_A_PACKAGE_CABANA',\r\n REMOVE_ADD_A_PACKAGE_OTHER_CABANAS: 'REMOVE_ADD_A_PACKAGE_OTHER_CABANAS',\r\n CLEAR_ADD_A_PACKAGE_PACKAGES_BY_CODES: 'CLEAR_PACKAGES_BY_CODES__FIX_DUPLICATE'\r\n};\r\n\r\nexport default addAPackageActionTypes;\r\n","// Lodge Locations action types\r\n\r\nconst lodgeLocationsActionTypes = {\r\n GET_LODGE_LOCATIONS_SUCCESS: 'GET_LODGE_LOCATIONS_SUCCESS',\r\n GET_LODGE_LOCATIONS_LOADING: 'GET_LODGE_LOCATIONS_LOADING',\r\n GET_LODGE_LOCATIONS_ERROR: 'GET_LODGE_LOCATIONS_ERROR',\r\n CLEAR_LODGE_LOCATIONS_LOADING_CONFIG: 'CLEAR_LODGE_LOCATIONS_LOADING_CONFIG'\r\n};\r\n\r\nexport default lodgeLocationsActionTypes;\r\n","//Account Selectors\r\n\r\nimport get from 'lodash-es/get';\r\n\r\nexport const getUserIsLoggedIn = state => {\r\n return state.userIsLoggedIn ?? false;\r\n};\r\n\r\nexport const getUserFirstName = state => {\r\n return get(state, 'currentLoggedInUser.firstName');\r\n};\r\n\r\nexport const getUserLastName = state => {\r\n return get(state, 'currentLoggedInUser.lastName');\r\n};\r\n\r\nexport const getUserId = state => {\r\n return get(state, 'currentLoggedInUser.id');\r\n};\r\n\r\nexport const getChangePwdIsLoading = state => {\r\n return state.changePwdReqIsLoading;\r\n};\r\n\r\nexport const getPwChangeSuccess = state => {\r\n return state.changePwdReqHasSucceded;\r\n};\r\n\r\nexport const getPwChangeFailed = state => {\r\n return state.changePwdReqHasFailed;\r\n};\r\n\r\nexport const getPwErrorMessage = state => {\r\n return state.changePwdReqErrorMessage;\r\n};\r\n\r\nexport const getUserLoyaltyOptIn = state => {\r\n return get(state, 'currentLoggedInUser.loyaltyOptIn');\r\n};\r\n\r\nexport const getUserLoyaltyPointsBalance = state => {\r\n return get(state, 'currentLoggedInUser.pointsBalance');\r\n};\r\n\r\nexport const getUserOffers = state => {\r\n return get(state, 'currentLoggedInUser.offerList');\r\n};\r\n\r\nexport const getUserReferralCode = state => {\r\n return get(state, 'currentLoggedInUser.loyaltyReferralCode');\r\n};\r\n\r\nexport const getLoyaltyMemberId = state => {\r\n return get(state, 'currentLoggedInUser.loyaltyMemberId');\r\n};\r\n\r\nexport const getReferralNotEligible = state => {\r\n return get(state, 'currentLoggedInUser.referralNotEligible');\r\n};\r\n\r\nexport const shouldUseV22CreateUserAPI = state => {\r\n const isLoyaltyEnabled = state.lodgeConfig.isLoyaltyEnabled;\r\n const isOnLLP = state.router.location.pathname === '/voyagers-club';\r\n const isPrimerState = state.lodgeConfig.isInPrimerState;\r\n\r\n if (isLoyaltyEnabled === false) return false; // use V2.1 Api if loyalty is not active\r\n\r\n if (isLoyaltyEnabled === true && isOnLLP === false && isPrimerState === true) return false; // use V2.1 Api if user is on Booking Engine and lodge is on Primer State\r\n\r\n return true; // use V2.2 Api\r\n};\r\n\r\nexport const getExpirationPoints = state => {\r\n const nextExpirationDate = get(state, 'currentLoggedInUser.nextExpirationDate');\r\n const expiringMetricValue = get(state, 'currentLoggedInUser.expiringMetricValue');\r\n const expirationObject = { nextExpirationDate, expiringMetricValue };\r\n return expirationObject;\r\n};\r\n","// Plans Selectors\r\n\r\nimport get from 'lodash-es/get';\r\nimport { PERSONALIZATION_RULES } from '../../../utilities/constants';\r\n\r\nexport const getCalendarRangeRestrictionList = state => {\r\n return state.selectedSuiteRangeRestrictions;\r\n};\r\n\r\nexport const getOfferCodeError = state => {\r\n return state.offerCodeError;\r\n};\r\n\r\nexport const getIsBookingWidgetFocused = state => {\r\n return state.isBookingWidgetFocused;\r\n};\r\n\r\n/**\r\n * Returns the filters applied labels.\r\n * @param {Object} state Plan store.\r\n * @returns {Object} Filters applied.\r\n */\r\nexport const getFiltersAppliedLabels = state => {\r\n return state.filtersApplied;\r\n};\r\n\r\n/**\r\n * Returns the old filters applied labels.\r\n * @param {Object} state Plan store.\r\n * @returns {Object} Old filters applied.\r\n */\r\nexport const getOldFiltersAppliedLabels = state => {\r\n return state.oldFiltersApplied;\r\n};\r\n\r\n/**\r\n * Returns the sorting criteria.\r\n * @param {Object} state Plan store.\r\n * @returns {string} Actual sorting criteria.\r\n */\r\nexport const getSortOrder = state => {\r\n return state.sorting;\r\n};\r\n\r\nexport const getAvailabilityList = state => {\r\n return state.availabilityList;\r\n};\r\n\r\nexport const getIsIdMeValidationRequired = state => {\r\n return state.isIdMeValidationRequired;\r\n};\r\n\r\nexport const getIsIdMeValidationRequiredWithError = state => {\r\n return state.isIdMeValidationRequiredWithError;\r\n};\r\n\r\n/**\r\n * Returns the Interactions personalization data from the availability reponse\r\n * @param {Object} state\r\n */\r\nexport const getInteractionsData = state => {\r\n const interactions =\r\n state.personalizationResponses &&\r\n state.personalizationResponses.filter(pr => pr.rule === PERSONALIZATION_RULES.interactions);\r\n\r\n return interactions && interactions.length > 0 && interactions[0].data;\r\n};\r\n\r\nexport const getRecentSearchesList = state => {\r\n return get(state, 'recentSearchesList', []);\r\n};\r\n\r\nexport const getRecentSearchesLoading = state => {\r\n const getRecentSearchesLoading = get(state, 'searchesGetReqIsLoading', false);\r\n const delRecentSearchesLoading = get(state, 'searchesDelReqIsLoading', false);\r\n return getRecentSearchesLoading || delRecentSearchesLoading;\r\n};\r\n\r\nexport const getDealsSummary = state => {\r\n return state.dealsSummary;\r\n};\r\n\r\nexport const getIsAPScall = state => {\r\n return state.isAPScall;\r\n};\r\n\r\nexport const getIsPaymentLeaveModal = state => {\r\n return state.leavePayment;\r\n};\r\n\r\nexport const getLowestRateCalendarList = state => {\r\n return state.lowestRateCalendarList;\r\n};\r\n\r\nexport const getLowestRatesByStayList = state => {\r\n return state.lowestRatesByStayList;\r\n};\r\n\r\nexport const getLowestRatesByStayListTotal = state => {\r\n return state.lowestRatesByStayListTotal;\r\n};\r\n\r\nexport const getLastLowestRatesByStayDateSelection = state => {\r\n return state.lastCalendarRatesDateSelection;\r\n};\r\n\r\nexport const getIsCaliforniaResident = state => {\r\n return state?.isCaliforniaResident;\r\n};\r\n\r\nexport const getIsTwoRateTypesSuites = state => {\r\n return state?.isTwoRateTypesSuites;\r\n};\r\n\r\nexport const getIsCartOpenClose = state => {\r\n return state.isCartOpenClose;\r\n};\r\n\r\nexport const getCartReturnedPageLinkClicked = state => {\r\n return state.cartReturnedPageLinkClicked;\r\n};\r\n\r\nexport const getAvRangeBySuiteIsLoading = state => state?.getAvRangeBySuiteIsLoading;\r\n\r\nexport const getItemQuantityState = state => state.itemQuantity;\r\n","import get from 'lodash-es/get';\r\nimport uuidv4 from 'uuid/v4';\r\nimport { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport generateArray from '../components/utilities/generate-array';\r\nimport { optimizelyHideActivityTabs, optimizelyHideFamilyTab } from './ABTesting';\r\nimport {\r\n DATE_FORMATS,\r\n HOWL_N_LEARN_CODE,\r\n LATE_CHECKOUT_PREFIXES,\r\n PACKAGE_CHARGE_TYPE,\r\n PACKAGE_TYPE\r\n} from './constants';\r\n\r\nconst getDateFromISODateString = ISODateString => {\r\n return GwDatesWrapper.format(ISODateString, DATE_FORMATS.default);\r\n};\r\n\r\nconst getDatesFromDateRange = (beginDate, endDate) => {\r\n const dates = [];\r\n\r\n if (GwDatesWrapper.isSame(beginDate, endDate)) {\r\n dates.push(beginDate);\r\n } else {\r\n for (\r\n let nextDate = beginDate;\r\n GwDatesWrapper.isBefore(nextDate, endDate);\r\n nextDate = GwDatesWrapper.add(nextDate, 1)\r\n ) {\r\n dates.push(nextDate);\r\n }\r\n }\r\n\r\n return dates;\r\n};\r\n\r\nconst isInsideRangeInclusive = (checkDate, packageStartDate, packageEndDate) => {\r\n return (\r\n GwDatesWrapper.isSameOrAfter(checkDate, packageStartDate) &&\r\n GwDatesWrapper.isSameOrBefore(checkDate, packageEndDate)\r\n );\r\n};\r\n\r\n/**\r\n * This function aims to return the filtered reservation dates list\r\n * @param {Array} reservationDates - Current date\r\n * @param {Object} datesObj - Start of the date range\r\n * @param {Boolean} shouldAddFiltered - Should add/remove filtered items\r\n * @return {Array}\r\n */\r\nconst getReservationDates = (reservationDates, datesObj, shouldAddFiltered = false) => {\r\n if (!reservationDates || !datesObj) return reservationDates;\r\n\r\n const packageStartDate = getDateFromISODateString(datesObj.packageStartDate);\r\n const packageEndDate = getDateFromISODateString(datesObj.packageEndDate);\r\n\r\n const reservationDatesAvailable = reservationDates.filter(resDate => {\r\n const isInsideRange = isInsideRangeInclusive(resDate, packageStartDate, packageEndDate);\r\n\r\n return shouldAddFiltered ? isInsideRange : !isInsideRange;\r\n });\r\n\r\n return reservationDatesAvailable;\r\n};\r\n\r\nexport const getPackageContent = (packageContent, checkinDate, checkoutDate, isLateCheckoutOffered) => {\r\n return getPackageContentAvailability(\r\n packageContent,\r\n packageContent.packageCode,\r\n checkinDate,\r\n checkoutDate,\r\n isLateCheckoutOffered\r\n );\r\n};\r\n/**\r\n * Returns the available dates configured by the content in the packageTablesJSON file,\r\n * given a date range and a package code. If no dates are available, the return is undefined.\r\n * @param {String} packageCode - Package code\r\n * @param {Date} checkinDate - Initial date\r\n * @param {Date} checkoutDate - End date\r\n * @return {Array of Date}\r\n */\r\nexport const getPackageContentAvailability = (\r\n packageContentData,\r\n packageCode,\r\n checkinDate,\r\n checkoutDate,\r\n isLateCheckoutOffered\r\n) => {\r\n if (!checkinDate || !checkoutDate) return;\r\n const reservationDates = getDatesFromDateRange(checkinDate, checkoutDate);\r\n\r\n if (!packageContentData) return reservationDates;\r\n\r\n const {\r\n availableDates: contentAvailableDatesArray,\r\n unavailableDates: contentUnavailableDatesArray\r\n } = packageContentData;\r\n\r\n const hasAvailableInfo = contentAvailableDatesArray && contentAvailableDatesArray.length > 0;\r\n const hasUnavailableInfo = contentUnavailableDatesArray && contentUnavailableDatesArray.length > 0;\r\n\r\n if (hasAvailableInfo || hasUnavailableInfo) {\r\n let availableDates = calculateAvailableDates(\r\n packageContentData,\r\n hasAvailableInfo,\r\n contentAvailableDatesArray,\r\n reservationDates,\r\n checkinDate,\r\n hasUnavailableInfo,\r\n contentUnavailableDatesArray\r\n );\r\n return availableDates.length > 0 ? availableDates : undefined;\r\n }\r\n\r\n if (packageCode === HOWL_N_LEARN_CODE && !isLateCheckoutOffered) {\r\n return;\r\n }\r\n\r\n return reservationDates;\r\n};\r\n\r\nexport const setUpSellTitleObj = (allPackages, packageTables, state) => {\r\n const isNewObjectReturn = state.entities?.manageReservationDetails?.data?.addOns;\r\n const hasUltimateFunPkgs =\r\n (isNewObjectReturn && isNewObjectReturn.some(pkg => pkg.type === PACKAGE_TYPE.bundle)) ||\r\n state.entities?.reservationDetails?.data?.packages?.some(pkg => pkg.packageType === PACKAGE_TYPE.bundle);\r\n const packagesList = hasUltimateFunPkgs\r\n ? packageTables.filter(pkgs => String(pkgs.packageTableName).toLocaleLowerCase() !== PACKAGE_TYPE.bundle)\r\n : packageTables;\r\n\r\n return packagesList\r\n .filter(pkgTable => pkgTable.buttonLabel && pkgTable.title && pkgTable.description)\r\n .map(pkgTable => {\r\n const { buttonLabel, title, description, images, packageCodes = [] } = pkgTable;\r\n\r\n const foundPackage = allPackages.find(pkg => {\r\n if (\r\n pkg.packageType?.length > 0 &&\r\n (pkg.packageType?.includes(PACKAGE_TYPE.cabanasAndFlexTrip) || pkg.amount !== 0)\r\n ) {\r\n return packageCodes[0]?.trim()?.includes(pkg.packageCode || null);\r\n }\r\n return false;\r\n });\r\n const packageType = foundPackage?.packageType[0];\r\n\r\n return {\r\n id: uuidv4(),\r\n buttonLabel,\r\n title,\r\n description,\r\n images,\r\n packageType\r\n };\r\n });\r\n};\r\n\r\n/**\r\n * Check if reservation contains only one package and it is late checkout package only\r\n * @param {Array} reservationPackages selected reservation packages\r\n */\r\nexport const checkIsLateCheckoutPackageOnly = packagesList => {\r\n let isLCOPackageOnly = false;\r\n if (packagesList && packagesList.length === 1) {\r\n isLCOPackageOnly = packagesList.some(pkg => pkg.packageCode.includes(LATE_CHECKOUT_PREFIXES.code));\r\n }\r\n return isLCOPackageOnly;\r\n};\r\n\r\n/**\r\n * Returns the already added packages, it looks for packages recently added in CMP and the packages already added in the Reservation\r\n * @param {string} packageCode Package code to look for\r\n * @param {List.<Object>} additionalPackages List of additional Pacakges\r\n * @param {List.<Object>} suitablePackagesList List of candidate packages to add\r\n * @param {List.<Object>} reservationPackages Packages already added in the reservation\r\n * @returns if the package is already added returns an Object with the quantity added.\r\n * Otherwise the package is not already added it returns null.\r\n */\r\nexport const getAddedPackage = (packageCode, additionalPackages, suitablePackagesList, reservationPackages) => {\r\n let addedPackage = null;\r\n\r\n addedPackage = additionalPackages.find(additionalPackage => {\r\n let additionalPackageCode = '';\r\n\r\n if (additionalPackage.id.includes('~')) {\r\n additionalPackageCode = additionalPackage.id.split('~')[0];\r\n } else {\r\n additionalPackageCode = additionalPackage.id;\r\n }\r\n\r\n return additionalPackageCode === packageCode || additionalPackageCode === suitablePackagesList.itemCode;\r\n });\r\n\r\n // if there is no packages added\r\n if (!addedPackage) {\r\n const resvPackage = reservationPackages.find(\r\n resvPackage =>\r\n resvPackage.packageCode === packageCode ||\r\n (resvPackage.packageGroup && resvPackage.packageGroup === packageCode)\r\n );\r\n\r\n if (resvPackage) {\r\n addedPackage = {\r\n quantityAdded: resvPackage.quantity\r\n };\r\n }\r\n }\r\n\r\n return addedPackage;\r\n};\r\n\r\n/**\r\n * Filter packages on Add a packages to show to the user, we should to hide\r\n * those packages in function of advance booking days\r\n * @param {string} resvArrival Reservation arrival date\r\n * @param {Array} tierToShow List of packages to show to the user\r\n */\r\nexport const filterPkgsByAdvanceBookingDays = (resvArrival, tierToShow) => {\r\n try {\r\n let dayDiff = GwDatesWrapper.diff(resvArrival, GwDatesWrapper.today());\r\n\r\n // Defensive to get values greater that 0\r\n dayDiff = Math.max(dayDiff, 0);\r\n const filteredPkgs = tierToShow.filter(\r\n pkg => pkg && pkg.advanceBookingDays && parseInt(pkg.advanceBookingDays) <= dayDiff\r\n );\r\n\r\n return filteredPkgs;\r\n } catch (error) {\r\n return tierToShow;\r\n }\r\n};\r\n\r\nconst calculateAvailableDates = (\r\n packageContentData,\r\n hasAvailableInfo,\r\n contentAvailableDatesArray,\r\n reservationDates,\r\n checkinDate,\r\n hasUnavailableInfo,\r\n contentUnavailableDatesArray\r\n) => {\r\n let availableDates = [];\r\n if (\r\n packageContentData.packageType[0] &&\r\n packageContentData.packageType[0] === PACKAGE_TYPE.dining &&\r\n hasAvailableInfo\r\n ) {\r\n availableDates = calculateAvailableDatesForDiningPackages(\r\n contentAvailableDatesArray,\r\n reservationDates,\r\n checkinDate,\r\n availableDates\r\n );\r\n } else if (packageContentData.packageType[0] && packageContentData.packageType[0] !== PACKAGE_TYPE.dining) {\r\n availableDates = calculateAvailableDatesForPackages(\r\n hasAvailableInfo,\r\n contentAvailableDatesArray,\r\n reservationDates,\r\n hasUnavailableInfo,\r\n contentUnavailableDatesArray\r\n );\r\n }\r\n return availableDates;\r\n};\r\n\r\nconst calculateAvailableDatesForDiningPackages = (contentAvailableDatesArray, reservationDates, checkinDate) => {\r\n let availableDates = [];\r\n\r\n contentAvailableDatesArray.forEach(availableDatesObj => {\r\n if (calculateCheckinDateInsidePackageDateRange(reservationDates, availableDatesObj, checkinDate)) {\r\n availableDates = reservationDates;\r\n }\r\n });\r\n return availableDates;\r\n};\r\n\r\nconst calculateAvailableDatesForPackages = (\r\n hasAvailableInfo,\r\n contentAvailableDatesArray,\r\n reservationDates,\r\n hasUnavailableInfo,\r\n contentUnavailableDatesArray\r\n) => {\r\n let availableDates = [];\r\n\r\n if (hasAvailableInfo) {\r\n contentAvailableDatesArray.forEach(availableDatesObj => {\r\n const reservationDatesAvailable = getReservationDates(reservationDates, availableDatesObj, true);\r\n\r\n if (reservationDatesAvailable) {\r\n availableDates = [...availableDates, ...reservationDatesAvailable];\r\n }\r\n });\r\n }\r\n\r\n if (hasUnavailableInfo) {\r\n contentUnavailableDatesArray.forEach(availableDatesObj => {\r\n const datesWithoutUnavailable = getReservationDates(reservationDates, availableDatesObj, false);\r\n\r\n if (datesWithoutUnavailable) {\r\n availableDates = [...availableDates, ...datesWithoutUnavailable];\r\n }\r\n });\r\n }\r\n return availableDates;\r\n};\r\n\r\nconst calculateCheckinDateInsidePackageDateRange = (reservationDates, availableDatesObj, checkinDate) => {\r\n if (!reservationDates || !availableDatesObj) return reservationDates;\r\n\r\n const packageStartDate = getDateFromISODateString(availableDatesObj.packageStartDate);\r\n const packageEndDate = getDateFromISODateString(availableDatesObj.packageEndDate);\r\n\r\n return isInsideRangeInclusive(checkinDate, packageStartDate, packageEndDate);\r\n};\r\n\r\n/**\r\n * Gets a set of information needed to fill options logic for packages dropdowns\r\n * @param {Object} packageItem Package Item incoming from storage\r\n * @param {Boolean} isNiagaraProperty Whether user is in niagara property\r\n * @returns {Object} A set of information needed to fill dropdowns logic\r\n */\r\nexport const getDropdownDataForPackage = (packageItem, checkinDateSelection, checkoutDateSelection) => {\r\n const chargeType = getPackageChargeType(packageItem);\r\n\r\n let maxPackageLimit = 1;\r\n if (chargeType === PACKAGE_CHARGE_TYPE.byPackage) {\r\n maxPackageLimit = get(packageItem, 'maxPackageLimit', 9);\r\n } else {\r\n const availableDays = getPackageContent(packageItem, checkinDateSelection, checkoutDateSelection);\r\n maxPackageLimit = Math.max(availableDays?.length, 1);\r\n }\r\n\r\n const options = getPackageDropdownOptions(maxPackageLimit);\r\n\r\n return {\r\n quantity: packageItem.quantity,\r\n chargeType,\r\n maxPackageLimit,\r\n options\r\n };\r\n};\r\n\r\n/**\r\n * Check if we should show package quantity selection\r\n * @param {String} packageCode Package Code\r\n * @returns {Boolean}\r\n */\r\nexport const shouldShowQuantitySelect = packageItem => {\r\n const isDiningPackage = packageItem.packageType?.includes(PACKAGE_TYPE.dining);\r\n const chargeType = getPackageChargeType(packageItem);\r\n\r\n // We should show the select/dropdown only when the package is not dining and is not late checkout package\r\n // if the package is dining and charge by package, then we should enable dropdown selection\r\n return (\r\n (!isDiningPackage || (isDiningPackage && chargeType === PACKAGE_CHARGE_TYPE.byPackage)) &&\r\n !packageItem?.packageCode?.includes(LATE_CHECKOUT_PREFIXES.code)\r\n );\r\n};\r\n\r\nexport const getPackageChargeType = packageData => {\r\n const chargeType = get(packageData, 'chargeType', PACKAGE_CHARGE_TYPE.byPackage);\r\n\r\n return chargeType;\r\n};\r\n\r\nexport const getPackageDropdownOptions = selectLimit => {\r\n const options = parseInt(selectLimit);\r\n\r\n return generateArray(options).map((_, index) => {\r\n const value = index + 1;\r\n return (\r\n <option key={index} value={value}>\r\n {value}\r\n </option>\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Gets the number of available nights for certain package\r\n * @param {Object} packageItem Package object\r\n * @param {String} arrival Reservation arrival date in string\r\n * @param {String} departure Reservation departure date in string\r\n * @returns Number. Number of available nights for that package\r\n */\r\nexport const getPackagesAvailableNights = (packageItem, arrival, departure) => {\r\n const availableDays = getPackageContentAvailability(packageItem, packageItem.packageCode, arrival, departure);\r\n\r\n return availableDays ? availableDays.length : 0;\r\n};\r\n\r\n/**\r\n * Check if the current package should be shown for the user, checks for availability number of nights\r\n * If the package has any amount and if the package is not null or empty\r\n * @param {Object} packageItem Package to find\r\n * @param {String} arrival Reservation's arrival date\r\n * @param {String} departure Reservation's departure date\r\n * @returns {Object}. shouldBeShown: Whether the package should be shown; numberOfAvailableNights: number of available nights\r\n */\r\nexport const validPackage = (packageItem, arrival, departure) => {\r\n const numberOfAvailableNights = getPackagesAvailableNights(packageItem, arrival, departure);\r\n\r\n let isAvailable = false;\r\n if (packageItem && packageItem.isCabana) {\r\n isAvailable = areCabanasAvailable(packageItem.cabanasDetails || []);\r\n } else {\r\n isAvailable = packageItem && packageItem.amount > 0;\r\n }\r\n\r\n return {\r\n numberOfAvailableNights,\r\n shouldBeShown: isAvailable && numberOfAvailableNights > 0\r\n };\r\n};\r\n\r\nexport const getPackageSelectedQuantity = (chargeType, adults, children, nights, packageQty) => {\r\n return chargeType === PACKAGE_CHARGE_TYPE.personPerDay ? (adults + children?.length) * nights : packageQty;\r\n};\r\n\r\nexport function packageObjectFinder(pkgCode, packageAvailabilityList) {\r\n return packageAvailabilityList.find(pkg => pkg.packageCode === pkgCode);\r\n}\r\n\r\nexport function areCabanasAvailable(cabanasList) {\r\n return (\r\n cabanasList.length > 0 &&\r\n cabanasList?.some(\r\n cabana =>\r\n !cabana.errorCode ||\r\n cabana.errorCode ===\r\n '' /*\r\n V2 related\r\n &&\r\n cabana.itemAvailable > 0 &&\r\n get(cabana, 'amount', get(cabana, 'roomBaseRate', 0)) > 0*/\r\n )\r\n );\r\n}\r\n\r\nexport const filterActivitiesPackages = pkg => {\r\n if (optimizelyHideActivityTabs) {\r\n return pkg.packageTableName === 'Activities' && pkg.packageTabName === 'Attractions';\r\n } else if (optimizelyHideFamilyTab) {\r\n return (\r\n pkg.packageTableName === 'Activities' &&\r\n (pkg.packageTabName === 'Attractions' || pkg.packageTabName === 'Birthdays')\r\n );\r\n }\r\n\r\n return pkg.packageTableName === 'Activities';\r\n};\r\n\r\nexport function addNewTag(packageCode, currentPackageCode) {\r\n if (!packageCode || !currentPackageCode) {\r\n return false;\r\n }\r\n\r\n return Array.isArray(packageCode)\r\n ? packageCode.map(p => p.trim()).includes(currentPackageCode.trim())\r\n : packageCode.trim() === currentPackageCode.trim();\r\n}\r\n","import React from 'react'\n\nconst ArrowDownThinIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 24 14'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M 23 0.580643089 L 12 12 L 1 0.580643089 L 3.64848169e-29 1.52588617 L 12 14 L 24 1.52588617 z' />\n </svg>\n)\n\nArrowDownThinIcon.displayName = 'ArrowDownThinIcon'\n\nArrowDownThinIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default ArrowDownThinIcon","import { GTM_EVENT } from '../../../../utilities/constants';\r\n\r\nexport function getCurrentLocation(path) {\r\n // Regular Expresion to check if the path contains /plan but only last slash is optional and can not be followed by confirmation\r\n const planPathRegex = /\\/?plan(?!\\/confirmation)/;\r\n // Test path value against planPathRegex\r\n const isPlanPath = planPathRegex.test(path);\r\n // If isPlanPath is true return standard_purchase\r\n if (isPlanPath) return GTM_EVENT.PURCHASE_LOCATION.standard_purchase;\r\n\r\n // Regular Expresion to check if the path contains ANYNUMBER/check-in while the slashes are optional\r\n const preCheckinPathRegex = /\\/?\\d+\\/check-in/;\r\n // Test path value against preCheckinPathRegex\r\n const isPreCheckinPath = preCheckinPathRegex.test(path);\r\n // If isPreCheckinPath is true return pre_checkin\r\n if (isPreCheckinPath) return GTM_EVENT.PURCHASE_LOCATION.pre_checkin;\r\n\r\n // Regular Expresion to check if the path contains /my-reservations/ANYNUMBER or plan/confirmation\r\n const myReservationsPathRegex = /\\/?my-reservations\\/\\d+|\\/?plan\\/confirmation/;\r\n // Test path value against myReservationsPathRegex\r\n const isMyReservationsPath = myReservationsPathRegex.test(path);\r\n // If isMyReservationsPath is true return my_reservations\r\n if (isMyReservationsPath) return GTM_EVENT.PURCHASE_LOCATION.post_package_purchase;\r\n\r\n // Regular Expresion to check if the path contains /plan but only last slash is optional and can not be followed by confirmation\r\n const birthdayPathRegex = /\\/?birthday-parties\\/?/;\r\n // Test path value against birthdayPathRegex\r\n const isBirthdayPath = birthdayPathRegex.test(path);\r\n // If isPlanPath is true return standard_purchase\r\n if (isBirthdayPath) return GTM_EVENT.PURCHASE_LOCATION.standard_purchase;\r\n\r\n return null;\r\n}\r\n","// Lodge Config Actions\r\n\r\nimport LodgeApiClient from '../../../api/clients/LodgeApiClient';\r\nimport { LODGE_CONFIG_TYPES } from '../../../utilities/constants';\r\nimport { updateCurrentLodge } from '../CurrentLodge/currentLodge.actions';\r\nimport { getResortLocation } from '../CurrentLodge/currentLodge.selectors';\r\nimport { cleanIsCaliforniaResident } from '../Plans/plans.actions';\r\nimport lodgeConfigActionTypes from './lodgeConfig.types';\r\n\r\nconst verifyIfIsEnabled = option => {\r\n const optionValue = typeof option === 'boolean' ? option : false;\r\n return optionValue;\r\n};\r\n\r\nconst verifyPointsMultiplier = option => {\r\n const optionValue = typeof option === 'number' ? option / 100 : 0.1;\r\n return optionValue;\r\n};\r\n\r\nconst transformStringToArray = option => {\r\n return JSON.parse(option);\r\n};\r\nexport const getBeIdMeParameters = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(\r\n resortLocation,\r\n LODGE_CONFIG_TYPES.IDME_WIDGET\r\n );\r\n dispatch({\r\n type: lodgeConfigActionTypes.ID_ME_DATA_PARAMETERS,\r\n idMeParameters: configurationData.data\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_USER_SETTINGS, configFetchError: error });\r\n }\r\n};\r\nexport const getLoyaltyConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n const lastResortLocation =\r\n localStorage.getItem('state') && getResortLocation(JSON.parse(localStorage.getItem('state')).currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.LOYALTY);\r\n\r\n resortLocation !== lastResortLocation && dispatch(cleanIsCaliforniaResident());\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING,\r\n isLoyaltyEnabled: verifyIfIsEnabled(configurationData.data.isLoyaltyEnabled),\r\n isInPrimerState: verifyIfIsEnabled(configurationData.data.isInPrimerState),\r\n isOffersEnabled: verifyIfIsEnabled(configurationData.data.isOffersEnabled),\r\n loyaltyPointsMultiplier: verifyPointsMultiplier(configurationData.data.loyaltyPointsMultiplier),\r\n isLoyaltyReferralEnabled: verifyIfIsEnabled(configurationData.data.isLoyaltyReferralEnabled),\r\n isLoyaltyPointsExpirationOnProfileEnabled: verifyIfIsEnabled(\r\n configurationData.data.isLoyaltyPointsExpirationOnProfileEnabled\r\n ),\r\n loyaltyPointsToEarn: configurationData.data.loyaltyPointsToEarn,\r\n loyaltyEarnThresholdNights: configurationData.data.loyaltyEarnThresholdNights ?? 2,\r\n //TODO: This flag will be here until we find a proper lodge config API to hold this case\r\n isHoldCancelReservationEnabled: verifyIfIsEnabled(configurationData.data.isHoldCancelReservationEnabled)\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG, configFetchIsLoading: false });\r\n};\r\nexport const getPlanConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_PLAN });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PLAN, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.PLAN);\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PLAN,\r\n config: {\r\n additionalPersonAmount: configurationData.data.additionalPersonAmount,\r\n affirmPubKey: configurationData.data.affirmPubKey,\r\n filters: configurationData.data.filters,\r\n isFetchRestrictionsEnabled: configurationData.data.isFetchRestrictionsEnabled,\r\n isHighestRatesEnabled: configurationData.data.isHighestRatesEnabled,\r\n isRateCalEnabled: configurationData.data.isRateCalEnabled,\r\n updateSearchFullPageRefresh: configurationData.data.updateSearchFullPageRefresh,\r\n includeResortFeeInSuitePrice: configurationData.data.includeResortFeeInSuitePrice,\r\n pricePerWaterPass: configurationData.data.pricePerWaterPass,\r\n isRoomUnbundledRateWPAvailable: configurationData.data.isRoomUnbundledRateWPAvailable,\r\n suitePriceIncludedTaxesAndFees: configurationData.data.suitePriceIncludedTaxesAndFees ?? [],\r\n showDiningPageInUFFFlow: configurationData.data.showDiningPageInUFFFlow\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_PLAN, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PLAN, configFetchIsLoading: false });\r\n};\r\nexport const getUserSettingsByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_USER_SETTINGS });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_USER_SETTINGS, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(\r\n resortLocation,\r\n LODGE_CONFIG_TYPES.USER_SETTINGS\r\n );\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_USER_SETTINGS,\r\n newPatchEndpoint: configurationData.data['new-patch-endpoint']\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_USER_SETTINGS, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_USER_SETTINGS, configFetchIsLoading: false });\r\n};\r\nexport const getCreditPackageConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CREDIT_PACKAGE, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(\r\n resortLocation,\r\n LODGE_CONFIG_TYPES.CREDIT_PACKAGES\r\n );\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CREDIT_PACKAGE,\r\n isDiningPackagesEnhancedUIEnabled: verifyIfIsEnabled(configurationData.data.isDiningPackagesEnhancedUIEnabled)\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CREDIT_PACKAGE, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CREDIT_PACKAGE, configFetchIsLoading: false });\r\n};\r\nexport const getCmpConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CMP });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CMP, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.CMP);\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CMP,\r\n isDynamicTileEnabled: verifyIfIsEnabled(configurationData.data.isDynamicTileEnabled),\r\n hideOnlineCheckinText: verifyIfIsEnabled(configurationData.data.hideOnlineCheckinText),\r\n parkingFeeCallout: verifyIfIsEnabled(configurationData.data?.parkingFeeCallout),\r\n parkingFeeCalloutTitle: configurationData.data?.parkingFeeCalloutTitle ?? '',\r\n parkingFeeCalloutDescription: configurationData.data?.parkingFeeCalloutDescription ?? '',\r\n uffTileEnabled: verifyIfIsEnabled(configurationData.data.uffTileEnabled),\r\n isCancelReservationEnabled: verifyIfIsEnabled(configurationData.data.isCancelReservationEnabled),\r\n showPackagesInAddGuestsModal: verifyIfIsEnabled(configurationData.data.showPackagesInAddGuestsModal),\r\n isManageYourReservationEnabled: verifyIfIsEnabled(configurationData.data.isManageYourReservationEnabled),\r\n isAddGuestsEnabled: verifyIfIsEnabled(configurationData.data.isAddGuestsEnabled)\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CMP, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CMP, configFetchIsLoading: false });\r\n};\r\n/* ABCD TEST FOR PARKING FEE */\r\nexport const getPaymentConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_PAYMENT });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PAYMENT, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.PAYMENT);\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PAYMENT,\r\n perNightParkingFee1: configurationData.data.perNightParkingFee1,\r\n perNightParkingFee2: configurationData.data.perNightParkingFee2,\r\n perNightParkingFee3: configurationData.data.perNightParkingFee3,\r\n parkingFeeStartDate: configurationData.data.parkingFeeStartDate,\r\n parkingFeeEndDate: configurationData.data.parkingFeeEndDate,\r\n clientCardTokenization: configurationData.data.clientCardTokenization,\r\n creditCardAuthUrl: configurationData.data.creditCardAuthUrl,\r\n creditEnabled: configurationData.data.creditEnabled,\r\n affirmEnabled: configurationData.data.affirmEnabled,\r\n applePayEnabled: configurationData.data.applePayEnabled,\r\n googlePayEnabled: configurationData.data.googlePayEnabled,\r\n payPalEnabled: configurationData.data.payPalEnabled,\r\n isIFrameEnabled: configurationData.data.isIFrameEnabled,\r\n amexEnabled: verifyIfIsEnabled(configurationData.data?.isAmexEnabled),\r\n bookingSummaryParkingFee: configurationData.data?.bookingSummaryParkingFee,\r\n taxAndFeeLabels: configurationData.data?.taxAndFeeLabels\r\n });\r\n } catch (error) {\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_PAYMENT, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PAYMENT, configFetchIsLoading: false });\r\n};\r\n/* ABCD TEST FOR PARKING FEE */\r\nexport const getLeadGenConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_LEADGEN });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_LEADGEN, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.LEAD_GEN);\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_LEADGEN,\r\n shouldLeadGenPop: configurationData.data.shouldLeadGenPop\r\n });\r\n } catch (error) {\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_LEADGEN, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_LEADGEN, configFetchIsLoading: false });\r\n};\r\nexport const resetLodgeConfig = () => async (dispatch, getState) => {\r\n const {\r\n lodgeLocations: { locationList }\r\n } = getState();\r\n\r\n dispatch(updateCurrentLodge(locationList));\r\n dispatch({ type: lodgeConfigActionTypes.RESET_LODGE_CONFIG });\r\n};\r\nexport const getCartConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_CART });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CART, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(resortLocation, LODGE_CONFIG_TYPES.CART);\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_CART,\r\n config: {\r\n isCartActive: configurationData.data.isCartActive\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_CART, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_CART, configFetchIsLoading: false });\r\n};\r\nexport const getBookingWidgetConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_BOOKING_WIDGET });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_BOOKING_WIDGET, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(\r\n resortLocation,\r\n LODGE_CONFIG_TYPES.BOOKING_WIDGET\r\n );\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_BOOKING_WIDGET,\r\n beginReservationsDate: configurationData.data.beginReservationsDate,\r\n maxOccupancy: configurationData.data.maxOccupancy,\r\n showCaliforniaResortFeeVariation: verifyIfIsEnabled(configurationData.data.showCaliforniaResortFeeVariation),\r\n newPricingRulesLodgeList: configurationData.data.newPricingRulesLodgeList,\r\n isLocationQuestionnaireEnabled: verifyIfIsEnabled(configurationData.data.isLocationQuestionnaireEnabled),\r\n isGeolocationEnabled: verifyIfIsEnabled(configurationData.data.isGeolocationEnabled),\r\n stickyBottomBookingWidget: verifyIfIsEnabled(configurationData.data.stickyBottomBookingWidget),\r\n ageThreshold: configurationData.data.ageThreshold,\r\n isLowestRatesRestrictionsEnabled: verifyIfIsEnabled(configurationData.data.isLowestRatesRestrictionsEnabled)\r\n });\r\n } catch (error) {\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_BOOKING_WIDGET, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_BOOKING_WIDGET, configFetchIsLoading: false });\r\n};\r\n\r\nexport const getPartyBookingWidgetConfigByResort = () => async (dispatch, getState) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n\r\n dispatch({ type: lodgeConfigActionTypes.CLEAR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET });\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET, configFetchIsLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const configurationData = await configurationClient.getConfiguration(\r\n resortLocation,\r\n LODGE_CONFIG_TYPES.BDAY_BOOKING_WIDGET\r\n );\r\n\r\n dispatch({\r\n type: lodgeConfigActionTypes.SUCCESS_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET,\r\n isBdayBookingWidgetActive: configurationData.data.isBdayBookingWidgetActive,\r\n birthdayPartyInclusionList: transformStringToArray(configurationData.data.birthdayPartyInclusionList) ?? [],\r\n beginPartyReservationsDate: configurationData.data.beginReservationsDate,\r\n partyKidsPerAdultRatio: configurationData.data.kidsPerAdultRatio,\r\n partyMaxGuestCount: configurationData.data.maxGuestCount,\r\n minimumBookingDaysRestriction: configurationData.data.minimumBookingDaysRestriction,\r\n maximumBookingDaysRestriction: configurationData.data.maximumBookingDaysRestriction\r\n });\r\n } catch (error) {\r\n dispatch({ type: lodgeConfigActionTypes.ERROR_LODGE_CONFIG_LOADING_PARTY_BOOKING_WIDGET, configFetchError: error });\r\n }\r\n dispatch({ type: lodgeConfigActionTypes.LOADING_LODGE_CONFIG_PARTY_BOOKING_WIDGET, configFetchIsLoading: false });\r\n};\r\n","import cloneDeepWith from 'lodash-es/cloneDeepWith.js';\r\nimport forOwn from 'lodash-es/forOwn.js';\r\n\r\n/**\r\n * Masking value used for Personally Identifiable Information (PII) properties.\r\n * @constant\r\n * @type {string}\r\n */\r\nconst PII_MASK_VALUE = '**MASKED**';\r\n\r\n/**\r\n * List of property names considered as Personally Identifiable Information (PII).\r\n *\r\n * @constant\r\n * @type {string[]}\r\n *\r\n */\r\nconst PII_PROPERTIES = [\r\n // Define property names commonly associated with PII data here.\r\n 'email',\r\n 'firstName',\r\n 'lastName',\r\n 'holder',\r\n 'phoneNumber',\r\n 'street1',\r\n 'street2',\r\n 'city',\r\n 'state',\r\n 'country',\r\n 'postalCode',\r\n 'token'\r\n];\r\n\r\n/**\r\n * List of property names commonly associated with Personally Identifiable Information (PII) URLs.\r\n *\r\n * This array stores property names that are typically used to represent URLs containing PII.\r\n *\r\n * @constant\r\n * @type {string[]}\r\n *\r\n */\r\nconst PII_URLS_PROPERTIES = [\r\n // Define property names commonly associated with PII URLs here.\r\n 'refUri',\r\n 'uri',\r\n 'url'\r\n];\r\n\r\n/**\r\n * Object containing special Personally Identifiable Information (PII) properties and associated functions.\r\n *\r\n * This object stores special PII properties and their corresponding functions for masking.\r\n * You can use this object to define custom behavior for specific PII properties.\r\n *\r\n * @type {Object.<string, function>}\r\n */\r\nconst PII_SPECIAL_PROPERTIES = {\r\n // Define special PII properties and their associated functions here.\r\n errorSrc: extracAndReplaceUrlInErrorSrc\r\n};\r\n\r\n/**\r\n * Mask Personally Identifiable Information (PII) properties in an object.\r\n *\r\n * This function recursively traverses the input object and replaces the values\r\n * of specified PII properties with a masking value or applies custom masking functions.\r\n *\r\n * @param {Object} obj - The input object containing PII properties to be masked.\r\n * @returns {Object} - A new object with PII properties masked.\r\n *\r\n * @see {@link PII_PROPERTIES} - List of properties considered as PII properties.\r\n * @see {@link PII_URLS_PROPERTIES} - List of properties that contain PII URLs.\r\n * @see {@link PII_SPECIAL_PROPERTIES} - Object with custom PII properties and corresponding masking functions.\r\n * @see {@link PII_MASK_VALUE} - Masking value used for PII properties.\r\n *\r\n * @example\r\n * const inputObject = {\r\n * email: 'user@example.com',\r\n * firstName: 'User',\r\n * address: {\r\n * city: 'New York',\r\n * postalCode: '12345'\r\n * }\r\n * };\r\n *\r\n * const maskedObject = maskPIIProperties(inputObject);\r\n * // Result:\r\n * // {\r\n * // email: '**MASKED**',\r\n * // firstName: '**MASKED**',\r\n * // address: {\r\n * // city: '**MASKED**',\r\n * // postalCode: '**MASKED**'\r\n * // }\r\n * // }\r\n */\r\nexport function maskPIIProperties(obj) {\r\n /**\r\n * Recursively traverse the object and masking PII properties.\r\n *\r\n * @param {*} value - The current property value.\r\n * @param {string} key - The current property key.\r\n * @returns {*} - The modified property value.\r\n */\r\n return cloneDeepWith(obj, (value, key) => {\r\n if (!key) return;\r\n\r\n if (isStringifiedObject(value)) {\r\n const parsedValue = JSON.parse(value);\r\n maskPIIPropertiesRecursively(parsedValue);\r\n return JSON.stringify(parsedValue);\r\n }\r\n\r\n if (isObject(value)) {\r\n maskPIIPropertiesRecursively(value);\r\n return value;\r\n }\r\n\r\n return getMaskedPropertyValue(key, value);\r\n });\r\n}\r\n\r\n/**\r\n * Checks if a value represents a valid stringified JSON object.\r\n *\r\n * @param {*} value - The value to check.\r\n * @returns {boolean} - `true` if the value is a valid stringified JSON object, `false` otherwise.\r\n */\r\nfunction isStringifiedObject(value) {\r\n try {\r\n if (typeof value !== 'string') return false;\r\n\r\n const parsed = JSON.parse(value);\r\n return isObject(parsed);\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Checks if a value is a non-null object (excluding arrays).\r\n *\r\n * @param {*} value - The value to check.\r\n * @returns {boolean} - `true` if the value is a non-null object (excluding arrays), `false` otherwise.\r\n */\r\nfunction isObject(value) {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\n/**\r\n * Mask Personally Identifiable Information (PII) properties recursively in an object.\r\n *\r\n * @param {Object} obj - The input object containing PII properties to be masked.\r\n * @returns {void} - The function modifies the input object in place.\r\n */\r\nfunction maskPIIPropertiesRecursively(obj) {\r\n forOwn(obj, (value, key) => {\r\n if (isStringifiedObject(value)) {\r\n const parsedValue = JSON.parse(value);\r\n obj[key] = JSON.stringify(maskPIIProperties(parsedValue));\r\n } else if (isObject(value)) {\r\n obj[key] = maskPIIProperties(value);\r\n } else {\r\n obj[key] = getMaskedPropertyValue(key, value);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Get the property value, masking it if it matches predefined Personally Identifiable Information (PII) properties or URLs.\r\n *\r\n * This function checks if a given property key matches predefined lists of PII properties, PII URLs, or custom PII properties.\r\n * If a match is found, it returns a masking value or applies a custom masking function; otherwise, it returns the original value.\r\n *\r\n * @param {string} key - The property key to check.\r\n * @param {*} value - The current property value.\r\n * @returns {*} - The original property value or a masking value if it matches PII properties or URLs.\r\n *\r\n * @see {@link PII_PROPERTIES} - List of properties considered as PII properties.\r\n * @see {@link PII_URLS_PROPERTIES} - List of properties that contain PII URLs.\r\n * @see {@link PII_SPECIAL_PROPERTIES} - Object with custom PII properties and corresponding masking functions.\r\n * @see {@link PII_MASK_VALUE} - Default masking value used for PII properties.\r\n *\r\n */\r\nfunction getMaskedPropertyValue(key, value) {\r\n if (PII_PROPERTIES.includes(key)) {\r\n return PII_MASK_VALUE;\r\n } else if (PII_URLS_PROPERTIES.includes(key)) {\r\n return maskPIIPropertyInUrl(value);\r\n } else if (PII_SPECIAL_PROPERTIES.hasOwnProperty(key)) {\r\n const customMaskFunction = PII_SPECIAL_PROPERTIES[key];\r\n return customMaskFunction(value);\r\n }\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Extract and replace the URL in an error source string while masking Personally Identifiable Information (PII).\r\n *\r\n * @param {string} errorSrc - The error source string containing a URL.\r\n * @returns {string} - The error source string with the URL replaced by a masked URL or the original string if extraction fails.\r\n *\r\n */\r\nfunction extracAndReplaceUrlInErrorSrc(errorSrc) {\r\n const originalUrl = extractUrlFromErrorSrc(errorSrc);\r\n if (!originalUrl) {\r\n return errorSrc;\r\n }\r\n\r\n const maskedUrl = maskPIIPropertyInUrl(originalUrl);\r\n return errorSrc.replace(originalUrl, maskedUrl);\r\n}\r\n\r\n/**\r\n * Extract the URL from an error source string in the format \"window.onerror@URL:line:column\".\r\n *\r\n * @param {string} errorSrc - The error source string containing a URL.\r\n * @returns {string|null} - The extracted URL's href or `null` if extraction fails.\r\n */\r\nfunction extractUrlFromErrorSrc(errorSrc) {\r\n try {\r\n const windowOnError = 'window.onerror@';\r\n const indexOfWindowOnError = errorSrc.indexOf(windowOnError);\r\n\r\n let errorSrcModified = errorSrc;\r\n\r\n if (indexOfWindowOnError === 0) {\r\n errorSrcModified = errorSrcModified.substring(windowOnError.length);\r\n }\r\n\r\n const windowOnErrorLineAndColumnNumbersRegex = /:[0-9]+:[0-9]+/;\r\n errorSrcModified = errorSrcModified.replace(windowOnErrorLineAndColumnNumbersRegex, '');\r\n\r\n return new URL(errorSrcModified).href;\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Mask Personally Identifiable Information (PII) properties in a URL.\r\n *\r\n * @param {string} value - The URL string to process.\r\n * @returns {string} - The modified URL with PII properties masked or the original value if the value is not a valid URL.\r\n *\r\n * @see {@link PII_PROPERTIES} - List of properties considered as PII properties.\r\n * @see {@link PII_MASK_VALUE} - Masking value used for PII properties.\r\n */\r\nfunction maskPIIPropertyInUrl(value) {\r\n try {\r\n const url = new URL(value);\r\n PII_PROPERTIES.forEach(property => {\r\n if (url.searchParams.has(property)) {\r\n url.searchParams.set(property, PII_MASK_VALUE);\r\n }\r\n });\r\n return url.href;\r\n } catch (error) {\r\n return value;\r\n }\r\n}\r\n","import { ReactPlugin, withAITracking } from '@microsoft/applicationinsights-react-js';\r\nimport { ApplicationInsights, DistributedTracingModes, SeverityLevel } from '@microsoft/applicationinsights-web';\r\nimport get from 'lodash-es/get';\r\nimport { store } from '../store/configureStore';\r\nimport { maskPIIProperties } from './personallyIdentifiableInformation/piiUtils';\r\n\r\nconst reactPlugin = new ReactPlugin();\r\n\r\nconst ai = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: process.env.REACT_APP_APPINSIGHTS_INSTRUMENTATION_KEY,\r\n enableAutoRouteTracking: true,\r\n extensions: [reactPlugin],\r\n distributedTracingMode: DistributedTracingModes.W3C,\r\n enableCorsCorrelation: true,\r\n correlationHeaderDomains: ['*.greatwolf.com'],\r\n disableAjaxTracking: true,\r\n disableFetchTracking: true\r\n }\r\n});\r\n\r\nai.addTelemetryInitializer(function(envelope) {\r\n envelope = maskPIIProperties(envelope);\r\n});\r\n\r\nai.loadAppInsights();\r\n\r\nconst appInsights = ai.appInsights;\r\n\r\nexport const trackInteractionFailureEvent = (errorMessage, eventName) => {\r\n trackError(eventName, errorMessage);\r\n};\r\n\r\n/**\r\n * @param {String} eventName\r\n * @param {String} errorMessage\r\n * @param {Object} errorObject\r\n */\r\nexport const trackReservationFailureEvent = (eventName, errorMessage, errorObject) => {\r\n // We stringify so we force the Error object to materialize all of it's properties\r\n // Then we need to parse it to a JSON object so maskPIIProperties knows how to traverse and mask it's PII properties\r\n const stringfiedErrorObject = JSON.stringify(errorObject);\r\n errorObject = maskPIIProperties(JSON.parse(stringfiedErrorObject));\r\n trackError(eventName, `${errorMessage} Error: ${JSON.stringify(errorObject)}`);\r\n};\r\n\r\n/**\r\n * Track error on availability, highest rates and detailed availability\r\n * @param {Object} state Redux state object\r\n * @param {String} errorTitle Error title shown on availability error\r\n */\r\nexport const availabilityTrackError = (state, errorType, errorTitle, isDetailedAvailabilty = false) => {\r\n const errorMessage = !isDetailedAvailabilty\r\n ? get(state, 'availabilityErrorMessage', '')\r\n : get(state, 'onSuiteSelectionError', '');\r\n trackPlanPageFailureEvent(errorType, errorTitle, errorMessage, isDetailedAvailabilty);\r\n};\r\n\r\nexport const trackPlanPageFailureEvent = (errorType, errorTitle, errorMessage, isDetailedAvailabilty) => {\r\n // fail silently\r\n try {\r\n const storage = store.getState();\r\n\r\n // Gather information from user's selection\r\n let userSelection = {\r\n arrival: get(storage, 'dates.checkinDateSelection', ''),\r\n departure: get(storage, 'dates.checkoutDateSelection', ''),\r\n adultCount: get(storage, 'guests.adultsCount', ''),\r\n kidsAges: get(storage, 'guests.kidsAges', ''),\r\n offerCode: get(storage, 'offer.code', ''),\r\n property: get(storage, 'currentLodge.resortLocation', '')\r\n };\r\n\r\n if (isDetailedAvailabilty) {\r\n userSelection.suiteCode = get(storage, 'suite.selectedSuite.suiteCode', '');\r\n }\r\n\r\n const userChoice = JSON.stringify(userSelection);\r\n const errorLogInfo = `Error on plan page, ${errorTitle}. ${errorMessage};`;\r\n\r\n appInsights.trackException({\r\n exception: new Error(errorLogInfo),\r\n severityLevel: SeverityLevel.Error,\r\n properties: {\r\n component: 'BookingEngine',\r\n method: errorType,\r\n message: userChoice\r\n }\r\n });\r\n } catch (error) {}\r\n};\r\n\r\nexport const trackError = (eventName, errorMessage) => {\r\n try {\r\n appInsights.trackEvent({\r\n name: eventName,\r\n properties: { error: errorMessage }\r\n });\r\n } catch (error) {}\r\n};\r\n\r\nexport const trackVariationJEventError = (eventName, trackInformation) => {\r\n try {\r\n appInsights.trackEvent({\r\n name: eventName,\r\n properties: {\r\n lodge: trackInformation.lodge,\r\n dates: trackInformation.dates,\r\n promoCode: trackInformation.promoCode,\r\n partySize: trackInformation.partySize,\r\n californiaResidentFlag: trackInformation.californiaResidentFlag,\r\n rateCodes: trackInformation.rateCodes,\r\n suiteStyle: trackInformation.suiteStyle\r\n }\r\n });\r\n } catch (error) {}\r\n};\r\n\r\nexport const trackVariationHEventError = (eventName, trackInformation) => {\r\n try {\r\n appInsights.trackEvent({\r\n name: eventName,\r\n properties: {\r\n lodge: trackInformation.lodge,\r\n dates: trackInformation.dates,\r\n promoCode: trackInformation.promoCode,\r\n partySize: trackInformation.partySize,\r\n suiteStyle: trackInformation.suiteStyle,\r\n savings: trackInformation.savings\r\n }\r\n });\r\n } catch (error) {}\r\n};\r\n\r\nexport const EVENT_CATEGORIES = {\r\n bookingEngineBookReservationError: 'OnBookReservationError',\r\n OnVersionJEventError: 'OnVersionJEventError',\r\n OnVersionHEventError: 'OnVersionHEventError'\r\n};\r\n\r\nconst withAppInsights = Component => withAITracking(reactPlugin, Component);\r\n\r\nexport default withAppInsights;\r\n","import { getErrorMessageByErrorType } from './utils/ResponseErrorUtils';\r\n\r\nexport default class ApiResponseError extends Error {\r\n constructor(errorType, err = {}, details = {}) {\r\n let { msg, code, validationErrors } = getErrorMessageByErrorType(\r\n errorType,\r\n err,\r\n details\r\n );\r\n\r\n super(msg);\r\n\r\n // Cannot initialize 'this' before super call\r\n this.errorType = errorType;\r\n this.err = err;\r\n this.details = details;\r\n this.code = code;\r\n this.validationErrors = validationErrors;\r\n }\r\n}\r\n","import React from 'react'\n\nconst CloseIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 24 24'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M19,6.4L17.6,5L12,10.6L6.4,5L5,6.4l5.6,5.6L5,17.6L6.4,19l5.6-5.6l5.6,5.6l1.4-1.4L13.4,12L19,6.4z' />\n </svg>\n)\n\nCloseIcon.displayName = 'CloseIcon'\n\nCloseIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CloseIcon","import { store } from '../../store/configureStore';\r\nconst codesWithAffirm = ['US', 'PR', 'UM', 'GU', 'VI', 'AS', 'MP'];\r\n\r\nexport const isLocationAvailableWithAffirm = resortLocation => {\r\n return resortLocation !== 'NIAGON';\r\n};\r\n\r\nexport const isAffirmAvailable = country => {\r\n return codesWithAffirm.includes(country);\r\n};\r\n\r\nexport const getAffirmPubKey = () => {\r\n const { lodgeConfig } = store?.getState() || '';\r\n const key = lodgeConfig?.affirmPubKey;\r\n\r\n if (!key) {\r\n return '';\r\n }\r\n\r\n return key;\r\n};\r\n","import React from 'react'\n\nconst AlertSuccessIconIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 24 24'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M 12.375 3 A 9.375 9.375 0 0 0 12.375 21.75 A 9.375 9.375 0 0 0 12.375 3 M17.6921573,8.74215729 C17.848367,8.58594757 18.101633,8.58594757 18.2578427,8.74215729 C18.3966958,8.88101037 18.4121239,9.09654989 18.3041271,9.2524444 L18.2578427,9.30784271 L11.0608775,16.5048079 C10.9220244,16.643661 10.7064849,16.6590891 10.5505904,16.5510923 L10.4951921,16.5048079 L6.49215729,12.5017731 C6.33594757,12.3455634 6.33594757,12.0922974 6.49215729,11.9360877 C6.63101037,11.7972346 6.84654989,11.7818065 7.0024444,11.8898033 L7.05784271,11.9360877 L10.7782,15.6562 L17.6921573,8.74215729 Z' />\n </svg>\n)\n\nAlertSuccessIconIcon.displayName = 'AlertSuccessIconIcon'\n\nAlertSuccessIconIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default AlertSuccessIconIcon","import { EVENT_ACTIONS, logSuiteCheckoutError, logSuitePlanSearchError } from '../../../utilities/analytics';\r\n\r\nexport const gaTrackingCheckoutErrorCode = errorCode => {\r\n const cleanErrorCode = errorCode.toUpperCase().replace(/\\s/g, '');\r\n if (cleanErrorCode.includes('RATE_CODE_NOT_AVAILABLE')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutRateCodeUnavailableError);\r\n return;\r\n } else if (cleanErrorCode.includes('RATE_UNAVAILABLE')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutRateUnavailableError);\r\n return;\r\n } else if (cleanErrorCode.includes('RATES_MISMATCH')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutRateMismatchError);\r\n return;\r\n } else if (cleanErrorCode.includes('ROOM_UNAVAILABLE')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutRoomUnavailableError);\r\n return;\r\n } else if (cleanErrorCode.includes('ROOM_RESTRICTED')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutRoomRestrictedError);\r\n return;\r\n } else if (cleanErrorCode.includes('PROPERTY_RESTRICTED')) {\r\n logSuiteCheckoutError(EVENT_ACTIONS.suiteCheckoutPropertyRestrictedError);\r\n return;\r\n }\r\n};\r\n\r\nexport const gaTrackingPlanSearchErrorCode = errorCode => {\r\n const cleanErrorCode = errorCode.toUpperCase().replace(/\\s/g, '');\r\n if (cleanErrorCode.includes('INACTIVE_OFFER_CODE')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchInactiveOfferCodeError);\r\n return;\r\n } else if (cleanErrorCode.includes('INVALID_OFFER_CODE')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchInvalidOfferCodeError);\r\n return;\r\n } else if (cleanErrorCode.includes('MAXIMUM_ADVANCED_BOOKING')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchMaximumAdvanceBookingError);\r\n return;\r\n } else if (cleanErrorCode.includes('MINIMUM_ADVANCED_BOOKING')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchMinimumAdvanceBookingError);\r\n return;\r\n } else if (cleanErrorCode.includes('MIN_STAY')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchMinStayError);\r\n return;\r\n } else if (cleanErrorCode.includes('MAX_STAY')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchMaxStayError);\r\n return;\r\n } else if (cleanErrorCode.includes('INACTIVE_PROMO')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchInactivePromoError);\r\n return;\r\n } else if (cleanErrorCode.includes('ROOM_UNAVAILABLE')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchRoomUnavailableError);\r\n return;\r\n } else if (cleanErrorCode.includes('ROOM_RESTRICTED')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchRoomRestrictedError);\r\n return;\r\n } else if (cleanErrorCode.includes('RATE_CODE_NOT_AVAILABLE')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchRateCodeNotAvailableError);\r\n return;\r\n } else if (cleanErrorCode.includes('RATES_MISMATCH')) {\r\n logSuitePlanSearchError(EVENT_ACTIONS.suitePlanSearchRatesMismatchError);\r\n return;\r\n }\r\n};\r\n","import { getRaFSignUpEventObject } from '../../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport { pushEvent } from '../../utilities/dataLayerUtils';\r\n\r\nexport const successfulAuthCallback = (response, postLoginCallback) => {\r\n const currentUserData = JSON.parse(localStorage.getItem('user')) || {};\r\n let user = null;\r\n\r\n // CHECK IF THERE IS A USER IN LOCAL STORAGE\r\n if (Object.keys(currentUserData).length === 0) {\r\n // TAKE THE RESPONSE AS IS, IF THERE IS NO USER IN LOCAL STORAGE\r\n user = { ...response.data };\r\n // VERIFY IF THE RESPONSE HAS THE LOYALTY OPT IN FIELD AND SET DEFAULT TO FALSE\r\n user.loyaltyOptIn = response.data.loyaltyOptIn ?? false;\r\n // VERIFY IF THE POINTS BALANCE IS EXIST AND SET DEFAULT TO 0\r\n user.pointsBalance = response.data.pointsBalance ?? 0;\r\n } else {\r\n // SET THE USER WITH THE CURRENT USER DATA ON LOCAL STORAGE MEANING WE ARE UPDATING AFTER LOGIN\r\n user = { ...currentUserData };\r\n // CREATE ARRAY WITH ALL THE KEYS OF THE RENEW TOKEN\r\n const responseDataKeys = Object.keys(response.data);\r\n // LOOP THROUGH THE KEYS OF THE RENEW TOKEN\r\n responseDataKeys.forEach(key => {\r\n // IF THE KEY IS IN THE CURRENT USER DATA THEN UPDATE AND IF NOT ADD IT\r\n user[key] = response.data[key];\r\n });\r\n // VERIFY IF THE RESPONSE HAS THE LOYALTY OPT IN FIELD AND SET DEFAULT TO CURRENT USER DATA\r\n user.loyaltyOptIn = response.data.loyaltyOptIn ?? currentUserData.loyaltyOptIn;\r\n // VERIFY IF THE POINTS BALANCE EXIST AND SET DEFAULT TO CURRENT USER DATA\r\n user.pointsBalance = response.data.pointsBalance ?? currentUserData.pointsBalance;\r\n }\r\n\r\n //Verify if exists, if not create a default value\r\n //==================================================================\r\n if (!user.isSocialAccountLogin) user.isSocialAccountLogin = false;\r\n if (!user.id) user.id = null;\r\n if (!user.isConnectedToFacebook) user.isConnectedToFacebook = false;\r\n if (!user.isConnectedToGoogle) user.isConnectedToGoogle = false;\r\n if (!user.isConnectedToApple) user.isConnectedToApple = false;\r\n if (!user.hasFutureReservation) user.hasFutureReservation = null;\r\n if (!user.newUserCreated) user.newUserCreated = true;\r\n\r\n localStorage.setItem('user', JSON.stringify(user));\r\n if (postLoginCallback && typeof postLoginCallback === typeof Function) {\r\n postLoginCallback();\r\n }\r\n\r\n // Refer a Friend 25/50 test - GA Event\r\n if (!response.data.referralNotEligible) {\r\n const rafEventData = getRaFSignUpEventObject();\r\n pushEvent(rafEventData);\r\n }\r\n return user;\r\n};\r\n","import { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport { DATE_FORMATS } from './constants';\r\n\r\n/**\r\n *\r\n * @param {Date} date to be converted\r\n * @returns Date in the format MM/YY\r\n */\r\nexport const getDateMonthDayFormat = date => {\r\n return date && GwDatesWrapper.format(date, DATE_FORMATS.monthDayFormat);\r\n};\r\n\r\n/**\r\n * @param {Date | string} date to be converted\r\n * @returns Date in the format Month. DD, YYYY\r\n */\r\nexport const getMonthLetterDayYearFormat = date => {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n if (typeof date === 'string') {\r\n return GwDatesWrapper.format(date, DATE_FORMATS.monthLetterDayYear);\r\n }\r\n\r\n return GwDatesWrapper.format(date, DATE_FORMATS.monthLetterDayYear);\r\n};\r\n\r\nexport const isDateValid = dateStr => {\r\n return !isNaN(new Date(dateStr));\r\n};\r\n","// Offer selectors\r\n\r\nimport { formatOffer } from '../../../components/LoyaltySummary/utilities/functions';\r\nimport { getDefaultOfferCode } from './offer.reducer';\r\n\r\nexport const getOfferCode = state => getDefaultOfferCode(state.code);\r\n\r\nexport const getOfferCodeDescription = state => state.description;\r\n\r\nexport const getOfferCodeErrorMessage = state => state.errorMessage;\r\n\r\nexport const getOfferCodeStatus = state => state.validOffer;\r\n\r\nexport const getActiveOffers = state => state.activeOffers;\r\n\r\nexport const getEmailActiveOffers = state => state.emailOffers;\r\n\r\nexport const getTotalActiveOffers = state => {\r\n const activeOffers = state.offer.activeOffers;\r\n if (activeOffers.length > 0) {\r\n const userOffers = state.account?.currentLoggedInUser?.offerList;\r\n const offerstotal = activeOffers?.reduce((accumulator, currentValue) => {\r\n const offer = userOffers?.find(offer => offer.id === currentValue);\r\n return accumulator + offer?.dollarValue;\r\n }, 0);\r\n return offerstotal;\r\n }\r\n return 0;\r\n};\r\n\r\nexport const getAvailableOffersBySearch = state => {\r\n const availableOffers = [];\r\n const userOffers = state.account.currentLoggedInUser.offerList || [];\r\n const { checkinDateSelection, checkoutDateSelection } = state.dates;\r\n userOffers.forEach(offer => {\r\n const formatedOffer = formatOffer(offer, false, checkinDateSelection, checkoutDateSelection);\r\n if (formatedOffer.searchIsWithinOfferDates === true) {\r\n availableOffers.push(formatedOffer);\r\n }\r\n });\r\n return availableOffers;\r\n};\r\n","// Packages Actions\r\n\r\nimport AvailabilityApiclient from '../../../api/clients/AvailabilityApiClient';\r\nimport ReservationsApiClient from '../../../api/clients/ReservationsApiClient';\r\nimport { DINING_CREDIT_PACKAGE_TITLE } from '../../../components/DiningCredit/utilities/copy';\r\nimport { editCopyByReplaceMultipleStrings } from '../../../components/utilities/copyFunctions';\r\nimport { isArrayEmpty } from '../../../utilities/arraysUtils';\r\nimport {\r\n HOWL_N_LEARN_CODE,\r\n LATE_CHECKOUT_PREFIXES,\r\n PACKAGE_CHARGE_TYPE,\r\n PACKAGE_TYPE\r\n} from '../../../utilities/constants';\r\nimport { getKidsUnderAge } from '../../../utilities/guestsUtils';\r\nimport { getResortLocation } from '../CurrentLodge/currentLodge.selectors';\r\nimport packagesActionTypes from './packages.types';\r\n\r\nconst getAdjustmentPackage = selectedPackage => {\r\n if (selectedPackage.adjustmentCode && selectedPackage.adjustmentCode.length > 0) {\r\n return {\r\n packageCode: selectedPackage.adjustmentCode[0],\r\n quantity: selectedPackage.quantity,\r\n isAdjustment: true,\r\n parentPackageCode: selectedPackage.packageCode,\r\n packageType: selectedPackage.packageType\r\n };\r\n }\r\n return null;\r\n};\r\n\r\nfunction upsertToPackagesArray(packagesArray, obj) {\r\n let result = [...packagesArray];\r\n const index = result.findIndex(e => matchByPackageCode(e, obj));\r\n if (index === -1) {\r\n result.push(obj);\r\n } else {\r\n result[index] = obj;\r\n }\r\n return result;\r\n}\r\n\r\nfunction removeFromPackagesArray(packagesArray, obj) {\r\n return packagesArray.filter(function(e) {\r\n if (obj.isExtra) return !e.isExtra ?? e.packageCode !== obj.packageCode;\r\n else return e.packageCode !== obj.packageCode;\r\n });\r\n}\r\n\r\nconst matchByPackageCode = (e, params) => {\r\n if (params.isExtra) {\r\n return params.isExtra === e.isExtra && e.packageCode === params.packageCode;\r\n } else {\r\n return e.packageCode === params.packageCode;\r\n }\r\n};\r\n\r\nexport const getPackageAvailability = params => dispatch => {\r\n dispatch({ type: packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_LOADING, isLoading: true });\r\n\r\n let apiClient = new AvailabilityApiclient('v2.2');\r\n const request = apiClient.getAvailabilityPackage(params);\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_SUCCESS,\r\n packageAvailabilityList: response.data.packages,\r\n isLoading: false\r\n });\r\n\r\n dispatch({\r\n type: packagesActionTypes.SET_PACKAGES_PLAN_INFO_SUCCESS,\r\n planPackages: response.data.packageTable,\r\n isLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: packagesActionTypes.GET_PACKAGES_AVAILABILITY_INFO_ERROR,\r\n packageAvailabilityList: [],\r\n isLoading: false,\r\n requestFailed: true,\r\n errorMessage: `Oops, ${err.message}`\r\n });\r\n }\r\n );\r\n};\r\n/**\r\n * when non billable kid is added, check if selected package contains adjustment code, if available add the adjustment package to selected package list.\r\n */\r\n\r\nexport const upsertPackage = params => (dispatch, getState) => {\r\n const state = getState();\r\n const resortLocation = getResortLocation(state.currentLodge);\r\n let currentPackages = state.packages.selectedPackages;\r\n const kidsAgesList = state.guests.kidsAges;\r\n const nonBillableChildren = getKidsUnderAge(kidsAgesList, 4);\r\n\r\n let selectedPackages = upsertToPackagesArray(currentPackages, params);\r\n if (nonBillableChildren > 0) {\r\n const adjustmentPackage = getAdjustmentPackage(params);\r\n if (adjustmentPackage) {\r\n selectedPackages = upsertToPackagesArray(selectedPackages, adjustmentPackage);\r\n }\r\n }\r\n const learnPackage = selectedPackages.find(pckg => pckg.packageCode === HOWL_N_LEARN_CODE);\r\n if (learnPackage) {\r\n const lcoPackage = selectedPackages.find(selectedPackages =>\r\n selectedPackages.packageCode.includes(LATE_CHECKOUT_PREFIXES.code)\r\n );\r\n if (lcoPackage) {\r\n selectedPackages = removeFromPackagesArray(selectedPackages, lcoPackage);\r\n }\r\n }\r\n dispatch({\r\n type: packagesActionTypes.UPSERT_PACKAGES,\r\n selectedPackages: selectedPackages,\r\n selectedPkgsLocationCode: resortLocation\r\n });\r\n};\r\nexport const lateCheckoutOffered = value => dispatch => {\r\n dispatch({\r\n type: packagesActionTypes.OFFERED_PACKAGES_LCO,\r\n isLateCheckoutOffered: value\r\n });\r\n};\r\nexport const lateCheckoutDecline = value => dispatch => {\r\n dispatch({\r\n type: packagesActionTypes.DECLINE_PACKAGES_LCO,\r\n isLateCheckoutDenied: value\r\n });\r\n};\r\nexport const deletePackage = params => (dispatch, getState) => {\r\n let currentPackages = [...getState().packages.selectedPackages];\r\n const adjustmentPackages = currentPackages.filter(w => w.parentPackageCode === params.packageCode);\r\n if (adjustmentPackages.length > 0) {\r\n currentPackages = removeFromPackagesArray(currentPackages, adjustmentPackages[0]);\r\n }\r\n const remainingPackages = removeFromPackagesArray(currentPackages, params);\r\n dispatch({\r\n type: packagesActionTypes.DELETE_PACKAGES,\r\n selectedPackages: remainingPackages\r\n });\r\n};\r\nexport const clearSelectedPackages = () => dispatch => {\r\n dispatch({\r\n type: packagesActionTypes.CLEAR_PACKAGES_SELECTED,\r\n selectedPackages: [],\r\n selectedPkgsLocationCode: ''\r\n });\r\n};\r\nexport const clearPackagesByCodes = packagesCodes => (dispatch, getState) => {\r\n const currentPackages = getState().packages.selectedPackages;\r\n const selectedPackages = currentPackages.filter(\r\n selectedPackage => !packagesCodes.includes(selectedPackage.packageCode)\r\n );\r\n dispatch({\r\n type: packagesActionTypes.CLEAR_PACKAGES_BY_CODES,\r\n selectedPackages: selectedPackages\r\n });\r\n};\r\nexport const clearPlanPackages = () => dispatch => {\r\n dispatch({\r\n type: packagesActionTypes.CLEAR_PACKAGES_PLAN,\r\n planPackages: [],\r\n selectedPackages: [],\r\n selectedPkgsLocationCode: ''\r\n });\r\n};\r\nexport const getCabanas = ({ resId }) => async dispatch => {\r\n dispatch({ type: packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_LOADING, isLoading: true });\r\n // V3\r\n const apiClient = new ReservationsApiClient('v3');\r\n const request = apiClient.fetchCabanasV3(resId);\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_SUCCESS,\r\n cabanasAvailabilityList: response.data,\r\n isLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: packagesActionTypes.GET_PACKAGES_CABANAS_AVAILABILITY_ERROR,\r\n cabanasAvailabilityList: [],\r\n isLoading: false,\r\n requestFailed: true,\r\n errorMessage: `Oops, ${err.message}`\r\n });\r\n }\r\n );\r\n};\r\nexport const packagesImpressions = eventProps => dispatch => {\r\n dispatch({\r\n type: packagesActionTypes.GTM_PACKAGES_IMPRESSIONS,\r\n eventProps\r\n });\r\n};\r\nexport const updateCurrentPackagesOnSuiteChange = () => (dispatch, getState) => {\r\n const state = getState();\r\n\r\n // DINING CREDIT ACTIVE\r\n const diningCreditActive = state.lodgeConfig.isCreditPackageActive;\r\n\r\n // GET PACKAGES AND DATA FROM STATE\r\n let currentPackages = [...state.packages.selectedPackages];\r\n\r\n // BREAK IF THERE ARE NO SELECTED PACKAGES\r\n if (isArrayEmpty(currentPackages)) {\r\n return;\r\n }\r\n const availablePackages = [...state.packages.planPackages];\r\n const kidsAgesList = [...state.guests.kidsAges];\r\n const nonBillableChildren = getKidsUnderAge(kidsAgesList, 4);\r\n\r\n // REMOVE ALL LCO PACKAGES\r\n const lcoPackage = currentPackages.find(selectedPackages =>\r\n selectedPackages.packageCode.includes(LATE_CHECKOUT_PREFIXES.code)\r\n );\r\n if (lcoPackage) {\r\n currentPackages = removeFromPackagesArray(currentPackages, lcoPackage);\r\n }\r\n\r\n // REMOVE BUNDLE PACKAGES\r\n const bundlePackage = currentPackages.find(selectedPackages =>\r\n selectedPackages.packageType.includes(PACKAGE_TYPE.bundle)\r\n );\r\n if (bundlePackage) {\r\n currentPackages = removeFromPackagesArray(currentPackages, bundlePackage);\r\n }\r\n\r\n // REMOVE ALL ADJUSTMENT PACKAGES\r\n const adjPackages = currentPackages.filter(selectedPackages => selectedPackages.packageCode.includes('ADJ'));\r\n if (adjPackages) {\r\n adjPackages.forEach(adjPackage => {\r\n currentPackages = removeFromPackagesArray(currentPackages, adjPackage);\r\n });\r\n }\r\n\r\n // UPDATE PACKAGES WITH NEW DATA\r\n let selectedPackages = [];\r\n currentPackages.forEach(currentPackage => {\r\n // GET PKG QTY AND CODE\r\n const currentPkgQty = currentPackage.quantity;\r\n const currentPkgCode = currentPackage.packageCode;\r\n\r\n // TEMP DATA\r\n let availablePkgTempData = null;\r\n\r\n // FIND CURENT PKG ON AVAILABLE PKGS\r\n availablePackages.forEach(availablePackage => {\r\n if (!isArrayEmpty(availablePackage.packageList)) {\r\n const pkgData = availablePackage.packageList.find(pkg => pkg.packageCode === currentPkgCode);\r\n if (pkgData) {\r\n availablePkgTempData = pkgData;\r\n }\r\n }\r\n });\r\n\r\n // PACKAGE FOUND\r\n if (availablePkgTempData) {\r\n // FORMAT TEMP DATA\r\n let packageTitle =\r\n availablePkgTempData.packageTitle || availablePkgTempData.shortDescription || availablePkgTempData.title;\r\n\r\n // FORMAT PACKAGE NAME IF DINING CREDIT\r\n if (\r\n diningCreditActive &&\r\n availablePkgTempData.chargeType === PACKAGE_CHARGE_TYPE.byPackage &&\r\n availablePkgTempData.packageType.includes(PACKAGE_TYPE.dining)\r\n ) {\r\n const copyObject = {\r\n '<ALLOWANCE>': availablePkgTempData.allowance,\r\n '<AMOUNT>': availablePkgTempData.amount\r\n };\r\n packageTitle = editCopyByReplaceMultipleStrings(DINING_CREDIT_PACKAGE_TITLE, copyObject);\r\n }\r\n\r\n const packageData = {\r\n packageName: packageTitle,\r\n quantity: currentPkgQty,\r\n ...availablePkgTempData\r\n };\r\n\r\n selectedPackages.push(packageData);\r\n if (nonBillableChildren > 0) {\r\n const adjustmentPackage = getAdjustmentPackage(packageData);\r\n if (adjustmentPackage) {\r\n selectedPackages.push(adjustmentPackage);\r\n }\r\n }\r\n }\r\n });\r\n\r\n dispatch({\r\n type: packagesActionTypes.UPSERT_PACKAGES,\r\n selectedPackages: selectedPackages,\r\n selectedPkgsLocationCode: getResortLocation(state.currentLodge)\r\n });\r\n};\r\n","import axios from 'axios';\r\nimport ApiResponseError from '../../infrastructure/Exceptions/ApiResponseError';\r\nimport { ErrorTypes } from '../../infrastructure/Exceptions/utils/ResponseErrorUtils';\r\nimport {\r\n getRaFSignUpEventObject,\r\n getSignInAttemptEventObjectVoyagers,\r\n getSignInEventObject,\r\n getSignInFailureEventObjectVoyagers,\r\n getSignInSuccessEventObjectVoyagers,\r\n getSignUpAttemptEventObjectVoyagers,\r\n getSignUpEventObject,\r\n getSignUpFailureEventObjectVoyagers,\r\n getSignUpSuccessEventObjectVoyagers\r\n} from '../../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport { GTM_EVENT } from '../../utilities/constants';\r\nimport { emitEventsByName, EVENTS_DICTIONARY } from '../../utilities/customEventsHelpers';\r\nimport { pushEvent } from '../../utilities/dataLayerUtils';\r\nimport { getSpecificItem, SessionStorageKeys } from '../../utilities/storageUtils';\r\nimport { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\n\r\nimport { successfulAuthCallback } from '../Utils/authUtils';\r\n\r\nclass AuthClient {\r\n constructor() {\r\n this.url = getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2');\r\n this.url_v_2_1 = getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.1');\r\n this.url_v_2_2 = getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.2');\r\n this.url_v_2_3 = getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.3');\r\n this.currentRenew = null;\r\n }\r\n\r\n /**\r\n * @function\r\n * Gets the currently logged in user if the user is logged in\r\n */\r\n getUser() {\r\n const user = localStorage.getItem('user');\r\n if (!user) return null;\r\n else return JSON.parse(user);\r\n }\r\n\r\n /**\r\n * @function\r\n * Attempts a login request with the given credentials\r\n * @param {string} username\r\n * Email\r\n * @param {string} password\r\n * Password\r\n */\r\n async login(username, password, url, calledFromVoyagers) {\r\n const actionUrl = `auth/login`;\r\n const urlRequest = `${this.url_v_2_2}/${actionUrl}`;\r\n if (calledFromVoyagers) pushEvent(getSignInAttemptEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n else pushEvent(getSignInEventObject(GTM_EVENT.ACTION.signInAttempt, GTM_EVENT.LABEL.greatWolf));\r\n\r\n return await axios\r\n .post(\r\n urlRequest,\r\n {\r\n username: username,\r\n password: password,\r\n url: url\r\n },\r\n {\r\n // This header must be like this, to be able to perfom a string POST\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }\r\n )\r\n .then(response => {\r\n if (calledFromVoyagers) pushEvent(getSignInSuccessEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n else pushEvent(getSignInEventObject(GTM_EVENT.ACTION.signInSuccess, GTM_EVENT.LABEL.greatWolf));\r\n successfulAuthCallback(response);\r\n return response.data;\r\n })\r\n .catch(err => {\r\n if (calledFromVoyagers) pushEvent(getSignInFailureEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n else pushEvent(getSignInEventObject(GTM_EVENT.ACTION.signInFailure, GTM_EVENT.LABEL.greatWolf));\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n });\r\n }\r\n\r\n /**\r\n * @function\r\n * Authenticates user using the reservation Id and the lastname\r\n * @param {string} resId\r\n * Reservation ID\r\n * @param {string} lastname\r\n * Lastname\r\n */\r\n async authByResrvIdAndLastName(resId, lastname) {\r\n const actionUrl = `auth/reservation/last-name`;\r\n const urlRequest = `${this.url_v_2_1}/${actionUrl}`;\r\n\r\n return await axios\r\n .post(\r\n urlRequest,\r\n {},\r\n {\r\n // This header must be like this, to be able to perfom a string POST\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true,\r\n params: {\r\n ReservationId: resId,\r\n LastName: lastname\r\n }\r\n }\r\n )\r\n .then(response => {\r\n successfulAuthCallback(response);\r\n })\r\n .catch(err => {\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n });\r\n }\r\n\r\n /**\r\n * @function\r\n * Refreshes the access token\r\n */\r\n async renewToken() {\r\n const actionUrl = `auth/renew-token`;\r\n const urlRequest = `${this.url_v_2_3}/${actionUrl}`;\r\n const user = this.getUser();\r\n if (!user) return;\r\n\r\n if (!this.currentRenew) {\r\n this.currentRenew = axios.post(\r\n urlRequest,\r\n {\r\n userId: user.id,\r\n refreshToken: user.refreshToken\r\n },\r\n {\r\n // This header must be like this, to be able to perfom a string POST\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }\r\n );\r\n\r\n this.currentRenew.then(\r\n response => {\r\n this.currentRenew = null;\r\n successfulAuthCallback(response);\r\n },\r\n err => {\r\n this.currentRenew = null;\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n );\r\n }\r\n\r\n return this.currentRenew;\r\n }\r\n\r\n /**\r\n * @function\r\n * Logs the user out the website\r\n */\r\n async logout() {\r\n localStorage.removeItem('user');\r\n\r\n const actionUrl = `auth/log-out`;\r\n const urlRequest = `${this.url_v_2_1}/${actionUrl}`;\r\n\r\n return await axios\r\n .post(\r\n urlRequest,\r\n {},\r\n {\r\n // This header must be like this, to be able to perfom a string POST\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }\r\n )\r\n .catch(err => {\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n });\r\n }\r\n\r\n /**\r\n * @function\r\n * Authenticates with the GW backend to retrieve an internal access token and user data\r\n * @param {string} provider\r\n * The external auth provider (Facebook or Google)\r\n * @param {string} accessToken\r\n * The external auth provider's access token for the user\r\n * @param {string} id\r\n */\r\n async thirdPartyLogin(\r\n provider,\r\n accessToken,\r\n id,\r\n postLoginCallback = null,\r\n appleUser = null,\r\n isAPI_2_2_Active = false,\r\n isSignIn = false,\r\n locationCode = ''\r\n ) {\r\n const actionUrl = `auth/provider-signin`;\r\n let urlRequest = `${this.url_v_2_1}/${actionUrl}`;\r\n\r\n if (isAPI_2_2_Active) {\r\n urlRequest = `${this.url_v_2_2}/${actionUrl}`;\r\n }\r\n\r\n let requestObject = {\r\n provider,\r\n token: accessToken,\r\n key: id,\r\n appleUser,\r\n isSignIn,\r\n property: locationCode\r\n };\r\n if (sessionStorage.getItem(SessionStorageKeys.REFER_A_FRIEND)) {\r\n requestObject.LoyaltyReferralCode = getSpecificItem('ReferralCode', SessionStorageKeys.REFER_A_FRIEND);\r\n }\r\n\r\n try {\r\n const response = await axios.post(urlRequest, requestObject, {\r\n // This header must be like this, to be able to perfom a string POST\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n });\r\n successfulAuthCallback(response, postLoginCallback);\r\n emitEventsByName(EVENTS_DICTIONARY.GWR_LOGIN);\r\n return response.data;\r\n } catch (err) {\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n }\r\n\r\n /**\r\n * @function\r\n * Creates a new user account and logs him/her in\r\n * @param {object} newUser\r\n * The new user to create\r\n */\r\n async createAccount(newUser, isAPI_2_2_Active = false, isLeadGenSignUp = false, calledFromVoyagers) {\r\n let urlRequest = `${getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.1')}/User`;\r\n if (isAPI_2_2_Active) {\r\n urlRequest = `${getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.2')}/User`;\r\n }\r\n\r\n const contactByPhone = true; // This is true by default on new users\r\n if (calledFromVoyagers) pushEvent(getSignUpAttemptEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n else pushEvent(getSignUpEventObject(GTM_EVENT.ACTION.signUpAttempt, GTM_EVENT.LABEL.greatWolf, isLeadGenSignUp));\r\n\r\n // Refer a Friend 25/50 test - GA Event\r\n const rafEventData = getRaFSignUpEventObject();\r\n pushEvent(rafEventData);\r\n\r\n return await axios\r\n .post(\r\n urlRequest,\r\n {\r\n email: newUser.email,\r\n firstName: newUser.firstName,\r\n lastName: newUser.lastName,\r\n zip: newUser.zip,\r\n password: newUser.password,\r\n property: newUser.property,\r\n caslOptIn: newUser.caslOptIn || '',\r\n marketingEmailOptIn: newUser.marketingEmailOptions || '',\r\n canContactByPhone: contactByPhone,\r\n canContactByEmail: !!newUser.canContactByEmail,\r\n canContactByMail: !!newUser.canContactByMail,\r\n canContactBySms: !!newUser.contactBySms,\r\n loyaltyReferralCode: newUser.ReferralCode || '',\r\n refereeId: newUser.MemberId || ''\r\n },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }\r\n )\r\n .then(\r\n response => {\r\n if (calledFromVoyagers) pushEvent(getSignUpSuccessEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n else\r\n pushEvent(getSignUpEventObject(GTM_EVENT.ACTION.signUpSuccess, GTM_EVENT.LABEL.greatWolf, isLeadGenSignUp));\r\n successfulAuthCallback(response);\r\n emitEventsByName(EVENTS_DICTIONARY.GWR_LOGIN);\r\n return response.data;\r\n },\r\n err => {\r\n if (calledFromVoyagers) pushEvent(getSignUpFailureEventObjectVoyagers(GTM_EVENT.LABEL.greatWolf));\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * @function\r\n * Creates a new LeadGen user account and logs him/her in\r\n * @param {object} leadGenUser\r\n * The new user to create\r\n */\r\n\r\n async createLeadGenAccount(leadGenUser, isAPI_2_2_Active = false) {\r\n let urlRequest = `${getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.1')}/User`;\r\n if (isAPI_2_2_Active) {\r\n urlRequest = `${getApiUrl(API_URLS.REACT_APP_USER_SERVICE_ENDPOINT, 'v2.2')}/User`;\r\n }\r\n const actionUrl = '/profile';\r\n\r\n const eventData = getSignUpEventObject(GTM_EVENT.ACTION.signUpAttempt, GTM_EVENT.LABEL.greatWolf);\r\n pushEvent(eventData);\r\n\r\n // Refer a Friend 25/50 test - GA Event\r\n const rafEventData = getRaFSignUpEventObject();\r\n pushEvent(rafEventData);\r\n\r\n return await axios\r\n .post(\r\n `${urlRequest}${actionUrl}`,\r\n {\r\n profileKey: leadGenUser.profileKey,\r\n password: leadGenUser.password,\r\n property: leadGenUser.property,\r\n profileId: leadGenUser.profileId,\r\n marketingEmailOptIn: leadGenUser.marketingEmailOptions || '',\r\n loyaltyReferralCode: leadGenUser.ReferralCode || '',\r\n refereeId: leadGenUser.MemberId || ''\r\n },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }\r\n )\r\n .then(\r\n response => {\r\n const eventData = getSignUpEventObject(GTM_EVENT.ACTION.signUpSuccess, GTM_EVENT.LABEL.greatWolf);\r\n pushEvent(eventData);\r\n successfulAuthCallback(response);\r\n emitEventsByName(EVENTS_DICTIONARY.GWR_LOGIN);\r\n return response.data;\r\n },\r\n err => {\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * A user can create a reservation without setting a password, so he ends up\r\n * with an account he cannot access. The allows him to set a password without\r\n * needing to run through the email validation step. We accept that profileId\r\n * plus email is enough to authorize the user.\r\n *\r\n * @param {{ email: string, profileId: string, password: string}} user New\r\n * user payload.\r\n * @memberof AuthClient\r\n */\r\n async webUserEnsure(user) {\r\n const actionUrl = `auth/ensure-web-user`;\r\n const urlRequest = `${this.url_v_2_1}/${actionUrl}`;\r\n\r\n return await axios\r\n .post(urlRequest, user, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n })\r\n .then(\r\n response => {\r\n successfulAuthCallback(response);\r\n },\r\n err => {\r\n throw new ApiResponseError(ErrorTypes.ResponseError, err);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * @function\r\n * Check if the current user is logged in\r\n * @returns {boolean}\r\n */\r\n isLoggedIn() {\r\n var user = this.getUser();\r\n\r\n return user !== undefined && user !== null && user.id !== null;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get user ID if logged in\r\n * @returns {boolean}\r\n */\r\n getUserId() {\r\n var user = this.getUser();\r\n\r\n if (user !== undefined && user !== null && user.id !== null) {\r\n return user.id;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * @function\r\n * Check if there is an auth token present\r\n * Note: JS is forced to use presence of 'user.accessTokenExpiry' field as a telltale sign that an auth token is\r\n * present, since actual token is stored in a secured cookie and we can't access it via JS)\r\n * @returns {boolean}\r\n */\r\n isTokenPresent() {\r\n var user = this.getUser();\r\n\r\n return user !== undefined && user !== null && user.accessTokenExpiry !== null;\r\n }\r\n}\r\n\r\nexport default AuthClient;\r\n","import styled from 'styled-components';\r\nimport Box from './Box';\r\nimport { top, left, right, bottom, zIndex, overflow } from 'styled-system';\r\n\r\nconst Relative = styled(Box)`\r\n position: relative;\r\n ${top} ${bottom} ${left} ${right} ${zIndex} ${overflow}`;\r\n\r\nRelative.propTypes = {\r\n ...top.propTypes,\r\n ...bottom.propTypes,\r\n ...left.propTypes,\r\n ...right.propTypes,\r\n ...right.zIndex\r\n};\r\n\r\nRelative.displayName = 'Relative';\r\n\r\nexport default Relative;\r\n","import { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport { gaTrackingPlanSearchErrorCode } from '../store/componentStores/utilities/util';\r\nimport { CURRENCY_CODE, SORTING_CRITERIA } from './constants';\r\n\r\nexport const sortSuites = (suites, criteria) => {\r\n if (criteria === SORTING_CRITERIA.recommendedForYou) {\r\n return suites.sort((el1, el2) => {\r\n return el1.sortOrder - el2.sortOrder;\r\n });\r\n } else {\r\n // group multiple suites of same brand\r\n // using a dictionary keyed by 'suiteBrand' where each element contains:\r\n // - 'rate' -> rate for brand\r\n // - 'suites' -> all suites for brand\r\n let ratesByBrand = {};\r\n let brandList = [];\r\n suites.forEach(suite => {\r\n const brand = suite.suiteBrand || 'missingBrand';\r\n if (ratesByBrand[brand]) {\r\n // capture lowest rate for each brand\r\n if (ratesByBrand[brand].rate > suite.avgNightlyRate) {\r\n ratesByBrand[brand].rate = suite.avgNightlyRate;\r\n }\r\n // collect all suites for the brand\r\n ratesByBrand[brand].suites.push(suite);\r\n } else {\r\n ratesByBrand[brand] = {\r\n rate: suite.avgNightlyRate,\r\n suites: [suite]\r\n };\r\n // collect all brands in a list\r\n brandList.push(ratesByBrand[brand]);\r\n }\r\n });\r\n // sort brands based on rate\r\n brandList.sort((el1, el2) => {\r\n return criteria === SORTING_CRITERIA.descending ? el2.rate - el1.rate : el1.rate - el2.rate;\r\n });\r\n\r\n // re-assemble list of suites based on sorted list of brands\r\n const sortedArray = brandList.reduce(\r\n (previousValue, currentValue) => previousValue.concat(currentValue.suites),\r\n []\r\n );\r\n return sortedArray;\r\n }\r\n};\r\n\r\n/**\r\n * Merge Suites reducer with availability and highest rate per suite data\r\n * @param {*} availabilityHighestRatesList\r\n * @param {*} availabilityList\r\n * @param {string} offerType\r\n */\r\nexport const mergedSuitesData = (availabilityHighestRatesList, availabilityList, offerType) => {\r\n const { roomRates } = availabilityHighestRatesList;\r\n\r\n if (!availabilityList) return [];\r\n\r\n const suitesWithAvailability = availabilityList.reduce((accumulator, suite) => {\r\n const updatedSuite = {\r\n ...suite,\r\n offerType: offerType,\r\n highestRate:\r\n roomRates && Object.keys(roomRates).length > 0\r\n ? roomRates[suite.suiteCode]?.DEFAULT ?? roomRates[suite.suiteCode]\r\n : null,\r\n suiteCategory: suite.suiteCategory.toLowerCase()\r\n };\r\n\r\n return [...accumulator, updatedSuite];\r\n }, []);\r\n\r\n return suitesWithAvailability;\r\n};\r\n\r\nexport const getOfferCodeErrorDetails = ({ offerCode, offerCodeError, checkIn, checkOut }) => {\r\n const offerCodeErrorNumbers = offerCodeError && offerCodeError.match(/\\d+/g);\r\n const stayNumberOfNights = checkOut && checkIn && GwDatesWrapper.diff(checkOut, checkIn, 'days');\r\n const daysNumberVariable = offerCodeErrorNumbers && parseInt(offerCodeErrorNumbers[0]);\r\n const variableDaysLabel = daysNumberVariable\r\n ? `${daysNumberVariable} ${daysNumberVariable > 1 ? 'days' : 'day'}`\r\n : null;\r\n const errorTypes = {\r\n RATE_UNAVAILABLE: {\r\n shouldDisplayModal: false,\r\n message: 'Sorry that rate or suite is no longer available. Please try another one of our suite options!',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: false,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n ROOM_RESTRICTED: {\r\n shouldDisplayModal: false,\r\n message: 'Sorry that rate or suite is no longer available. Please try another one of our suite options!',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: false,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n PROPERTY_RESTRICTED: {\r\n shouldDisplayModal: false,\r\n message: 'Sorry that rate or suite is no longer available. Please try another one of our suite options!',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: false,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n ROOM_UNAVAILABLE: {\r\n shouldDisplayModal: false,\r\n message: 'Sorry that suite is no longer available. Please try another one of our suite options!',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: false,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n SIGN_IN_REQUIRED: {\r\n shouldDisplayModal: true,\r\n message: 'Unfortunately you need to be signed into your account to use that promo code.',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: false,\r\n shouldDisplaySignIn: true,\r\n shouldDisplaySignUp: true\r\n },\r\n INVALID_OFFER_CODE: {\r\n shouldDisplayModal: false,\r\n message: 'Unfortunately that is not a valid offer code. Please re-enter or view our other offers.',\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n INACTIVE_PROMO: {\r\n shouldDisplayModal: false,\r\n message: 'Unfortunately that offer has expired. Please view our other offers.',\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n CLOSED: {\r\n shouldDisplayModal: false,\r\n message: 'Unfortunately that offer has expired. Please view our other offers.',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n INACTIVE_OFFER_CODE: {\r\n shouldDisplayModal: false,\r\n message:\r\n 'Unfortunately those dates are outside the range of this offer or this offer has expired. Please check the offer details or select a different offer code.',\r\n shouldDisplaySearchAgain: false,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n [`MAXIMUM_ADVANCE_BOOKING_${daysNumberVariable}`]: {\r\n shouldDisplayModal: false,\r\n message: `Offer code <b>${offerCode}</b> requires booking within <b>${variableDaysLabel}</b> of your arrival to receive this great deal. Please select dates within <b>${variableDaysLabel}</b> from today.`,\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n [`MINIMUM_ADVANCE_BOOKING_${daysNumberVariable}`]: {\r\n shouldDisplayModal: false,\r\n message: `Offer code <b>${offerCode}</b> requires booking at least <b>${variableDaysLabel}</b> prior to your arrival to receive this great deal. Please select dates at least <b>${variableDaysLabel}</b> from today.`,\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n [`MIN_STAY_${daysNumberVariable}`]: {\r\n shouldDisplayModal: true,\r\n message: `Offer code <b>${offerCode}</b> is a <b>${daysNumberVariable} night</b> promotion please add <b>${daysNumberVariable -\r\n stayNumberOfNights} night(s)</b> to your stay. Or view our deals page for other promotions.`,\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n },\r\n [`MAX_STAY_${daysNumberVariable}`]: {\r\n shouldDisplayModal: false,\r\n message: `Offer code <b>${offerCode}</b> is a <b>${daysNumberVariable} night</b> promotion please remove <b>${stayNumberOfNights -\r\n daysNumberVariable} night(s)</b> from your stay. Or view our deals page for other promotions.`,\r\n shouldDisplaySearchAgain: true,\r\n shouldDisplaySpecialOffers: true,\r\n shouldDisplaySignIn: false,\r\n shouldDisplaySignUp: false\r\n }\r\n };\r\n\r\n // If it's contain some restrictions with number,\r\n // validating if this number is valid or not.\r\n if (\r\n offerCodeErrorNumbers &&\r\n (!daysNumberVariable || !stayNumberOfNights || daysNumberVariable - stayNumberOfNights === 0)\r\n ) {\r\n return undefined;\r\n }\r\n\r\n offerCodeError && gaTrackingPlanSearchErrorCode(JSON.stringify(offerCodeError));\r\n\r\n return offerCodeError\r\n ? {\r\n ...errorTypes[offerCodeError],\r\n offerCode: offerCode,\r\n offerCodeError: offerCodeError\r\n }\r\n : undefined;\r\n};\r\n\r\nexport const getCurrencyCodeText = currencyCode => {\r\n return (currencyCode && CURRENCY_CODE[currencyCode] && `(${CURRENCY_CODE[currencyCode]})`) || null;\r\n};\r\n\r\nexport const shouldHideBookingWidget = () => {\r\n return window.hideBookingWidget;\r\n};\r\n\r\nexport const isCaliforniaVerification = resortLocation => {\r\n return {\r\n isCaliforniaResorts: resortLocation === 'MANTCA' || resortLocation === 'SOUTCA'\r\n };\r\n};\r\n\r\nexport const isMinnesotaVerification = resortLocation => {\r\n return {\r\n isMinnesotaResorts: resortLocation === 'BLOOMN'\r\n };\r\n};\r\n","import get from 'lodash-es/get';\r\nimport isEmpty from 'lodash-es/isEmpty';\r\nimport { GwDatesWrapper } from '../components/_internal_date_/gwDatesWrapper';\r\nimport { INELIGIBILITY_REASONS } from '../components/ReservationDetails/constants';\r\nimport theme from '../components/ui-kit/themes/theme';\r\nimport { getLocationDisplayName } from '../components/utilities/ResortLocations';\r\nimport { EReservationStatus } from '../utilities/availabilityUtils';\r\nimport {\r\n CABANAS_CODES_TYPES,\r\n CHECK_IN_STATUS,\r\n DATE_FORMATS,\r\n DAY_PASSES_TYPE,\r\n RESERVATION_STATUS,\r\n SITE_NIAGON\r\n} from './constants';\r\n\r\nexport const ReservationsHeaderMessages = {\r\n UPCOMING: 'Upcoming Reservations',\r\n PAST: 'Past Reservations',\r\n CANCELED: 'Canceled Reservations',\r\n MY_UPCOMING: 'My Upcoming Reservations',\r\n MY_PAST: 'My Past Reservations',\r\n MY_CANCELED: 'My Canceled Reservations'\r\n};\r\n\r\nexport const ReservationsUserMessages = {\r\n UPCOMING: \"There aren't any upcoming reservations.\",\r\n PAST: \"There aren't any past reservations.\",\r\n CANCELED: \"There aren't any canceled reservations.\",\r\n MY_UPCOMING:\r\n 'We cannot find any upcoming reservations. Please note that new reservations may take up to 30 minutes to appear here.',\r\n MY_PAST: 'We cannot find any past reservations. If you think this is an error, please try again later or',\r\n MY_CANCELED: 'We cannot find any canceled reservations. If you think this is an error, please try again later or'\r\n};\r\n\r\nexport const isValidReservation = (departureDate, reservationStatus) => {\r\n if (!departureDate || !reservationStatus) return false;\r\n const isAfter = GwDatesWrapper.isSameOrAfter(departureDate, GwDatesWrapper.today(), 'day');\r\n const isActive = reservationStatus !== RESERVATION_STATUS.canceled;\r\n if (isAfter && isActive) return true;\r\n else return false;\r\n};\r\n\r\nexport const getReservationCurrency = site => {\r\n if (site === SITE_NIAGON) {\r\n return 'CAD';\r\n }\r\n\r\n return 'USD';\r\n};\r\n\r\nexport const getOverviewReservationDetails = reservation => {\r\n const isCabana = Object.values(CABANAS_CODES_TYPES).includes(reservation?.product?.code);\r\n const isDayPass = Object.values(DAY_PASSES_TYPE).includes(reservation?.product?.code);\r\n const isReservation = !isCabana && !isDayPass;\r\n\r\n let roomName = 'Day Pass';\r\n\r\n if (isCabana) {\r\n roomName = get(reservation, 'roomDescription', 'N/A');\r\n } else if (isReservation) {\r\n roomName = 'N/A';\r\n }\r\n\r\n const numAdults = reservation?.guests?.adults ?? 0;\r\n const numChildren = reservation?.guests?.children?.length ?? 0;\r\n const totalGuests = numAdults + numChildren;\r\n\r\n return { roomName, numAdults, numChildren, totalGuests };\r\n};\r\n\r\nexport const getOverviewReservationDates = reservation => {\r\n const arrival = GwDatesWrapper.format(reservation?.arrival, DATE_FORMATS.monthLetterDayYear);\r\n\r\n const departure = GwDatesWrapper.format(reservation?.departure, DATE_FORMATS.monthLetterDayYear);\r\n\r\n return `${arrival} - ${departure}`;\r\n};\r\n\r\nexport const getOverviewReservationHeader = reservation => {\r\n const reservationId = reservation?.id ?? null;\r\n const reservationDatesLabel = getOverviewReservationDates(reservation);\r\n const propertyName = getLocationDisplayName(reservation?.lodge?.name);\r\n\r\n return { reservationId, reservationDatesLabel, propertyName };\r\n};\r\n\r\nexport const getStackedVariantByStatus = reservationStatus => {\r\n switch (reservationStatus) {\r\n case EReservationStatus.PAST:\r\n return theme.stackedAccordions.secondary;\r\n\r\n case EReservationStatus.CANCELED:\r\n return theme.stackedAccordions.danger;\r\n\r\n default:\r\n return theme.stackedAccordions.primary;\r\n }\r\n};\r\n\r\nexport const getCheckInStatus = checkIn => {\r\n if (!Boolean(checkIn)) {\r\n return CHECK_IN_STATUS.UNAVAILABLE;\r\n }\r\n\r\n if (checkIn.ineligibilityReason === INELIGIBILITY_REASONS.TOO_EARLY) {\r\n return CHECK_IN_STATUS.UNAVAILABLE;\r\n }\r\n\r\n if (checkIn.isEligible && checkIn.url) {\r\n return CHECK_IN_STATUS.AVAILABLE;\r\n }\r\n\r\n if (checkIn.ineligibilityReason === INELIGIBILITY_REASONS.PRE_CHECKED_IN) {\r\n return CHECK_IN_STATUS.SUCCESSFUL;\r\n }\r\n\r\n return CHECK_IN_STATUS.INVALID;\r\n};\r\n\r\n/**\r\n * Sorts a list of reservations by checkin date and reservation id\r\n * @param {array} reservations List of reservations\r\n * @returns array - sorted list of reservations\r\n */\r\nexport const sortReservationsListByCheckin = reservations => {\r\n if (isEmpty(reservations)) {\r\n return [];\r\n }\r\n\r\n let sortedReservations = reservations.sort((firstElement, secondElement) => {\r\n if (firstElement.arrival === secondElement.arrival) {\r\n return firstElement.id - secondElement.id;\r\n }\r\n\r\n return GwDatesWrapper.subtractDateByAnother(firstElement.arrival, secondElement.arrival);\r\n });\r\n\r\n return sortedReservations;\r\n};\r\n","import React from 'react'\n\nconst QuestionIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 16 17'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M8 0.160156C5.87827 0.160156 3.84344 1.00301 2.34315 2.5033C0.842855 4.00359 1.32608e-08 6.03842 0 8.16016C5.30433e-08 10.2819 0.842855 12.3167 2.34315 13.817C3.84344 15.3173 5.87827 16.1602 8 16.1602C10.1217 16.1602 12.1566 15.3173 13.6569 13.817C15.1571 12.3167 16 10.2819 16 8.16016C16 6.03842 15.1571 4.00359 13.6569 2.5033C12.1566 1.00301 10.1217 0.160156 8 0.160156V0.160156ZM8.51172 2.96094C9.51065 2.96094 10.3023 3.18222 10.8887 3.62305C11.4751 4.06387 11.7676 4.63977 11.7676 5.35156C11.7676 5.76003 11.7073 6.12205 11.5859 6.4375C11.4687 6.74891 11.3004 7.01948 11.082 7.25C10.8636 7.48052 10.6023 7.68715 10.2949 7.86914C9.9916 8.05113 9.64788 8.21755 9.26367 8.36719V9.75H7.12695V7.70508C7.4141 7.62824 7.67377 7.54964 7.9043 7.46875C8.13886 7.38786 8.38388 7.25621 8.63867 7.07422C8.87728 6.91245 9.06185 6.72411 9.19531 6.50977C9.33282 6.29542 9.40234 6.05222 9.40234 5.78125C9.40234 5.37682 9.27069 5.08978 9.00781 4.91992C8.74898 4.74602 8.38334 4.66016 7.91016 4.66016C7.61897 4.66016 7.2899 4.72228 6.92188 4.84766C6.55789 4.97303 6.22324 5.13582 5.91992 5.33398H5.67773V3.48242C5.93657 3.37323 6.33516 3.25986 6.87305 3.14258C7.41093 3.02125 7.95765 2.96094 8.51172 2.96094ZM6.98242 10.5742H9.43359V12.1758H6.98242V10.5742Z' />\n </svg>\n)\n\nQuestionIcon.displayName = 'QuestionIcon'\n\nQuestionIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default QuestionIcon","import { v4 as uuidv4 } from 'uuid';\r\nimport {\r\n COSTSUMMARY_TOOLTIP,\r\n PARKING_FEE,\r\n PRIVATE_LODGING_FEE,\r\n RESORT_FEE,\r\n SUSTAINABILITY_FEE,\r\n TAXES\r\n} from './constants';\r\n\r\nconst getTaxesObject = (name, amount, tooltip) => {\r\n return {\r\n id: uuidv4(),\r\n name: name,\r\n amount: amount,\r\n tooltip: tooltip\r\n };\r\n};\r\n\r\nconst FEE_WITH_TOOLTIP = {\r\n [SUSTAINABILITY_FEE]: COSTSUMMARY_TOOLTIP.sustainabilityFee,\r\n [RESORT_FEE]: COSTSUMMARY_TOOLTIP.resortFee\r\n};\r\n\r\n/**\r\n *\r\n * @param {number} sustainabilityFee Sustainability Fee\r\n * @param {number} taxesTotal Taxes Amount\r\n * @param {number} resortFee Resourt Amound\r\n * @param {number} parkingFee Parking Fee\r\n * @returns Array with the expected additional charges along with the tooltips\r\n */\r\nexport const getTaxesAndFees = (sustainabilityFee, taxesTotal, resortFee, parkingFee, privateLodgingFee) => {\r\n const taxesAndFees = [];\r\n\r\n if (sustainabilityFee > 0) {\r\n taxesAndFees.push(getTaxesObject(SUSTAINABILITY_FEE, sustainabilityFee, COSTSUMMARY_TOOLTIP.sustainabilityFee));\r\n }\r\n\r\n if (taxesTotal > 0) {\r\n taxesAndFees.push(getTaxesObject(TAXES, taxesTotal));\r\n }\r\n\r\n if (resortFee > 0) {\r\n taxesAndFees.push(getTaxesObject(RESORT_FEE, resortFee, COSTSUMMARY_TOOLTIP.resortFee));\r\n }\r\n\r\n if (parkingFee > 0) {\r\n taxesAndFees.push(getTaxesObject(PARKING_FEE, parkingFee));\r\n }\r\n\r\n if (privateLodgingFee > 0) {\r\n taxesAndFees.push(getTaxesObject(PRIVATE_LODGING_FEE, privateLodgingFee));\r\n }\r\n\r\n return taxesAndFees;\r\n};\r\n\r\nexport const getTaxesAndFeesDynamic = (taxAndFeeLabelsDictionary, taxesAndFeesDetail, packagesTaxes = 0) => {\r\n const newTaxesAndFeesObject = Object.keys(taxAndFeeLabelsDictionary).map(key => {\r\n let amount = 0;\r\n if (taxAndFeeLabelsDictionary[key] === TAXES) {\r\n amount = taxesAndFeesDetail[key] + packagesTaxes;\r\n } else {\r\n amount = taxesAndFeesDetail[key] ?? 0;\r\n }\r\n return getTaxesObject(\r\n taxAndFeeLabelsDictionary[key],\r\n amount,\r\n FEE_WITH_TOOLTIP[taxAndFeeLabelsDictionary[key]] ?? false\r\n );\r\n });\r\n return newTaxesAndFeesObject.filter(fee => fee.amount !== 0);\r\n};\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\nconst kidsQueryString = availabilityRequest => {\r\n if (!availabilityRequest?.kidsAges) return '';\r\n let kidsQs = '';\r\n if (typeof availabilityRequest.kidsAges === 'object') {\r\n availabilityRequest.kidsAges.forEach(kidAge => {\r\n if (kidAge !== '-') {\r\n kidsQs += '&kidsAges=' + kidAge;\r\n }\r\n });\r\n } else {\r\n availabilityRequest.kidsAges.split(',').forEach(kidAge => {\r\n if (kidAge !== '-') {\r\n kidsQs += '&kidsAges=' + kidAge;\r\n }\r\n });\r\n }\r\n return kidsQs;\r\n};\r\n\r\n/**\r\n * Concrete implementation for the RoomBooking endpoints\r\n *\r\n * @class RoomBookingApiclient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class RoomBookingApiClient extends GWRApiClient {\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v1`;\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_ROOM_BOOKING_ENDPOINT, apiVersion);\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function returns the highest suite rates by location for a given date range\r\n *\r\n * @function\r\n * @param {arrival: date, departure: date, numberOfAdults: string, kidsAges: Array[]} availabilityHighestRatesRequest\r\n * Example: {arrival: '2019-06-01', departure: '2019-06-03', numberOfAdults: 1, kidsAges: [8,6]\r\n * @param {string} location\r\n */\r\n\r\n async fetchAvailabilityHighestRates(availabilityHighestRatesRequest, location) {\r\n if (!location) console.error('No location passed in, location is needed to make /highest-rates call');\r\n\r\n const urlRequest = `${this.url}/${location}/highest-rates`;\r\n\r\n let request = await super.getApiCall(urlRequest, availabilityHighestRatesRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Sends a GET request to get response from BE if the user can use or not the Gpay and Apple Pay payments types\r\n * @param {suiteCode: string, property: string, arrival: date, departure: date, rateCode: string, Adults: int, children: Array[int]} paymentAvailableRequest\r\n * Example: { property: 'WILLVA', hasAvailabilityKey: true, HasPackages: true, HasPointsOffers:false}\r\n * @return available => this property will be returned and it's a boolean property\r\n */\r\n async getIsGpayApplePayAvailable(paymentAvailableRequest) {\r\n const urlRequest = `${this.url}/${paymentAvailableRequest.property}/digital-wallet/available`;\r\n delete paymentAvailableRequest.property;\r\n\r\n let request = await super.getApiCall(urlRequest, paymentAvailableRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * function returns the lowest rates for calendar\r\n *\r\n * @function\r\n * @param {Year: int, Month: int, Adults: int, KidsAges: Array[int], OfferCode: string}\r\n * @param {string} location\r\n * Example: getLowestRates({lodgeCode: GURNIL, Year: 2024, Month: 5, Adults: 1, KidsAges: [14,5,15,2], OfferCode: AMTCERT}, 'GURNIL')\r\n */\r\n async getLowestRates(lowestRatesRequest, location) {\r\n const queryString =\r\n `${this.url}/${location}/lowest-rates` +\r\n `?year=${lowestRatesRequest.year}` +\r\n `&month=${lowestRatesRequest.month}` +\r\n `&numberOfMonths=${lowestRatesRequest.numberOfMonths}` +\r\n `&adults=${lowestRatesRequest.adults}` +\r\n `&offerCode=${lowestRatesRequest.offerCode}` +\r\n `${kidsQueryString(lowestRatesRequest)}`;\r\n\r\n let request = await super.getApiCall(queryString);\r\n return request;\r\n }\r\n\r\n /**\r\n * function to get all the range of days of availability data by suite\r\n *\r\n * @function\r\n * @param {string} suiteCode\r\n * The suite which we are requesting\r\n * Example: 'WPFB'\r\n * @param {numberOfAdults: int, location: string, arrival: date, departure: date, offerCode: string, numNights: int, kidsAges: string} availabilityRangeBySuiteRequest\r\n * Example: {numberOfAdults: 2, location: 'DELLWI', arrival: '2019-06-01', departure: '2019-06-03', offerCode: 'FLEXTEST', numNights: 2, kidsAges: '0,1,2,3'}\r\n */\r\n async getAvailabilityRangeBySuite(suiteCode, availabilityRequest) {\r\n const queryString =\r\n `?offerCode=${availabilityRequest.offerCode}` +\r\n `&numberOfNights=${availabilityRequest.numberOfNights || availabilityRequest.numNights}` +\r\n `&adults=${availabilityRequest.adults || availabilityRequest.numberOfAdults}` +\r\n `&arrival=${availabilityRequest.arrival}` +\r\n `&departure=${availabilityRequest.departure}` +\r\n `${kidsQueryString(availabilityRequest)}`;\r\n\r\n const urlRequest =\r\n `${this.url}/${availabilityRequest.lodgeCode || availabilityRequest.location}/suites/${suiteCode}/rate-calendar` +\r\n queryString;\r\n\r\n let request = await super.getApiCall(urlRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * function returns the lowest rates for calendar\r\n *\r\n * @function\r\n * @param {year: number, month: number, adults: number, numberOfMonths: number, kidsAges: Array[number], offerCode: string}\r\n * @param {string} suiteCode\r\n * @param {string} location\r\n */\r\n async getLowestRatesForSuite(lowestRatesRequest, suiteCode, location) {\r\n const queryString =\r\n `${this.url}/${location}/suites/${suiteCode}/lowest-rates` +\r\n `?lodgeCode=${lowestRatesRequest.lodgeCode}` +\r\n `&year=${lowestRatesRequest.year}` +\r\n `&month=${lowestRatesRequest.month}` +\r\n `&numberOfMonths=${lowestRatesRequest.numberOfMonths}` +\r\n `&adults=${lowestRatesRequest.adults}` +\r\n `&offerCode=${lowestRatesRequest.offerCode}` +\r\n `${kidsQueryString(lowestRatesRequest)}`;\r\n\r\n return await super.getApiCall(queryString);\r\n }\r\n\r\n /**\r\n * function returns the lowest rates by stay without suiteCode\r\n *\r\n * @function\r\n * @param {lodgeCode: string, arrival: date, departure: date, adults: number, kidsAges: Array[number], location: string} lowestRatesByStayRequest\r\n */\r\n async getLowestRatesForSuiteByStayNoSuiteCode(lowestRatesByStayRequest) {\r\n const queryString = `${this.url}/${lowestRatesByStayRequest.lodgeCode}/lowest-rates/by-stay?${kidsQueryString(\r\n lowestRatesByStayRequest\r\n )}`;\r\n delete lowestRatesByStayRequest.kidsAges;\r\n return await super.getApiCall(queryString, lowestRatesByStayRequest);\r\n }\r\n\r\n /**\r\n * function returns the lowest rates by stay\r\n *\r\n * @function\r\n * @param {lodgeCode: string, arrival: date, departure: date, adults: number, kidsAges: Array[number], offerCode: string} lowestRatesByStayRequest\r\n * @param {string} suiteCode\r\n * @param {string} location\r\n */\r\n async getLowestRatesForSuiteByStay(lowestRatesByStayRequest, suiteCode, location) {\r\n const queryString = `${this.url}/${location}/suites/${suiteCode}/lowest-rates/by-stay?${kidsQueryString(\r\n lowestRatesByStayRequest\r\n )}`;\r\n const { kidsAges, ...requestObject } = lowestRatesByStayRequest;\r\n\r\n return await super.getApiCall(queryString, requestObject);\r\n }\r\n\r\n /**\r\n * @function\r\n * Sends a POST request to get an access block code\r\n * @param property\r\n */\r\n async getShift4i4AccessBlockTioga(property, paymentType, totalToCharge, origin = null) {\r\n const urlRequest = `${this.url}/${property}/payment/token`;\r\n const payload = {\r\n orderDetails: {\r\n amount: totalToCharge, // Total paid\r\n paymentType: paymentType // payment type selected by the user\r\n },\r\n ...(typeof origin === 'number' && { origin })\r\n };\r\n return super.postApiCall(urlRequest, payload);\r\n }\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { Badge, Text } from '../../../ui-kit';\r\n\r\nimport AlertSuccessIconIcon from '../../../ui-kit/icons/AlertSuccessIcon';\r\nimport theme from '../../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceWithComponent } from '../../../utilities/copyFunctions';\r\nimport {\r\n Action,\r\n Amount,\r\n Bottom,\r\n Container,\r\n DataDescription,\r\n Description,\r\n Divider,\r\n Item,\r\n NewGuestsMessageContainer,\r\n NewGuestsTag,\r\n NewTagContainer,\r\n SubtotalAmount,\r\n Tooltip\r\n} from './styles';\r\nimport * as COPY from './utilities/copy';\r\n\r\nexport const SummaryContent = ({ children, ...restProps }) => {\r\n return <Container {...restProps}>{children}</Container>;\r\n};\r\n\r\nSummaryContent.Action = ({ onClick, children, ...restProps }) => {\r\n return (\r\n <Action onClick={onClick} {...restProps}>\r\n {children}\r\n </Action>\r\n );\r\n};\r\n\r\nSummaryContent.Action.propTypes = {\r\n onClick: PropTypes.func\r\n};\r\n\r\nSummaryContent.Amount = ({ children, ...restProps }) => {\r\n return <Amount {...restProps}>{children}</Amount>;\r\n};\r\n\r\nSummaryContent.Bottom = ({ children, ...restProps }) => {\r\n return <Bottom {...restProps}>{children}</Bottom>;\r\n};\r\n\r\nSummaryContent.Description = ({ children, ...restProps }) => {\r\n return <Description {...restProps}>{children}</Description>;\r\n};\r\n\r\nSummaryContent.Divider = ({ ...restProps }) => {\r\n return <Divider {...restProps} />;\r\n};\r\n\r\nSummaryContent.Item = ({ children, ...restProps }) => {\r\n return <Item {...restProps}>{children}</Item>;\r\n};\r\n\r\nSummaryContent.NewTag = () => {\r\n return (\r\n <NewTagContainer>\r\n <Badge caps={false} variant={Badge.VARIANTS.DEEP_ORANGE_100}>\r\n New\r\n </Badge>\r\n </NewTagContainer>\r\n );\r\n};\r\nSummaryContent.NewGuestsTag = ({ ...restProps }) => {\r\n const { splashText } = restProps;\r\n return (\r\n <NewGuestsTag {...restProps}>\r\n <Text as=\"span\">{splashText ? splashText : COPY.NEW}</Text>\r\n </NewGuestsTag>\r\n );\r\n};\r\nSummaryContent.NewGuestsMessage = ({ copy, newCopy }) => {\r\n return (\r\n <NewGuestsMessageContainer>\r\n <AlertSuccessIconIcon size=\"21px\" color={theme.colors.successGreen} />\r\n <DataDescription>\r\n {ReactHtmlParser(editCopyByReplaceWithComponent(copy, newCopy, '<NEW_GUESTS>'))}\r\n </DataDescription>\r\n </NewGuestsMessageContainer>\r\n );\r\n};\r\n\r\nSummaryContent.SubtotalAmount = ({ children, ...restProps }) => {\r\n return <SubtotalAmount {...restProps}>{children}</SubtotalAmount>;\r\n};\r\n\r\nSummaryContent.Tooltip = ({ ref, children, ...restProps }) => {\r\n return <Tooltip {...restProps}>{children}</Tooltip>;\r\n};\r\n","export const NEW = 'New';\r\n","// Global Modal action types\r\n\r\nconst globalModalActionTypes = {\r\n OPEN_GLOBAL_MODAL: 'OPEN_GLOBAL_MODAL',\r\n CLOSE_GLOBAL_MODAL: 'CLOSE_GLOBAL_MODAL',\r\n UPDATE_GLOBAL_MODAL_PARAMS: 'UPDATE_GLOBAL_MODAL_PARAMS'\r\n};\r\n\r\nexport default globalModalActionTypes;\r\n","import normalizeUrl from 'normalize-url';\r\nimport routes from '../routes';\r\nimport { logMyProfileNav } from './analytics';\r\nimport { SITE_NIAGON, TERMS_AND_CONDITIONS_SUFFIX } from './constants';\r\n\r\n/**\r\n * Returns items to be added in the My Account - mobile user menu dropdown.\r\n */\r\nexport const getMobileLoggedInUserDropdownItems = resortLocationUrlParam => [\r\n {\r\n name: 'My Profile',\r\n onClick: e => {\r\n logMyProfileNav();\r\n window.location.href = `${resortLocationUrlParam}${routes.profile.self}`;\r\n }\r\n },\r\n {\r\n name: 'Refer a Friend',\r\n url: `${resortLocationUrlParam}${routes.referAFriend.replace('/', '').replace(/\\/$/, '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Preferences',\r\n url: `${resortLocationUrlParam}${routes.profile.myPreferences.replace('/', '').replace(/\\/$/, '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Reservations',\r\n url: `${resortLocationUrlParam}${routes.reservations.myReservations.self.replace('/', '').replace(/\\/$/, '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Recent Searches',\r\n url: `${resortLocationUrlParam}${routes.myRecentSearches.replace('/', '')}` // remove the first slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'Sign Out',\r\n onClick: (_, { logoutCurrentUser, logLogout }) => {\r\n logoutCurrentUser();\r\n logLogout();\r\n }\r\n }\r\n];\r\n\r\n/**\r\n * Returns items to be added in the user menu dropdown\r\n */\r\nexport const getLoggedInUserDropdownItems = resortLocationUrlParam => [\r\n {\r\n name: 'My Profile',\r\n url: `${resortLocationUrlParam}${routes.profile.self.replace('/', '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'Refer a Friend',\r\n url: `${resortLocationUrlParam}${routes.referAFriend.replace('/', '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Preferences',\r\n url: `${resortLocationUrlParam}${routes.profile.myPreferences.replace('/', '').replace(/\\/$/, '')}` // remove the first and last slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Reservations',\r\n url: `${resortLocationUrlParam}${routes.reservations.myReservations.self.replace('/', '')}` // remove the first slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'My Recent Searches',\r\n url: `${resortLocationUrlParam}${routes.myRecentSearches.replace('/', '')}` // remove the first slash in the URL, since resortLocationUrlParam has already an ending slash '/'\r\n },\r\n {\r\n name: 'Sign Out',\r\n url: '#'\r\n }\r\n];\r\n\r\n/**\r\n * When the user hit Sign out in the middle of this routes, then the app is not redirected to the home page\r\n */\r\nexport const routesExcludedOnSignOut = [\r\n '/plan',\r\n '/plan/packages-activities',\r\n '/plan/packages-dining',\r\n '/plan/payment',\r\n '/plan/payment-success',\r\n '/daypass/payment-success',\r\n '/deals'\r\n];\r\n\r\n/**\r\n * When the user hit Sign out in the middle of this routes, then the app is redirected to the home page\r\n */\r\nexport const routesRedirectOnSignOut = [\r\n '/user/profile',\r\n '/user/refer-a-friend',\r\n '/plan/payment-success',\r\n '/plan/confirmation',\r\n '/daypass/payment-success',\r\n '/daypass/confirmation',\r\n '/reservations/my-reservations',\r\n '/my-recent-searches'\r\n];\r\n\r\nexport const isMatchParamsRelatedT3Page = (matchParams, t2Page) => {\r\n if (!t2Page) return false;\r\n if (!matchParams || Object.values(matchParams).length !== 1) return false;\r\n if (!matchParams[0].includes(t2Page)) return false;\r\n if (!matchParams[0].includes('/')) return false;\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Checks if the current site is niagara\r\n * @param {string} resortLocation. App resort location information\r\n */\r\nexport const checkIfIsNiagaraProperty = resortLocation => {\r\n return resortLocation === SITE_NIAGON;\r\n};\r\n\r\n/**\r\n * Orders and routes configs for Navigation Menu\r\n */\r\nexport const NAV_MENU_FLOWS = {\r\n primary: [\r\n {\r\n route: routes.profile.self,\r\n title: 'My Profile'\r\n },\r\n {\r\n route: routes.reservations.myReservations.self,\r\n title: 'My Reservations'\r\n },\r\n {\r\n route: routes.myRecentSearches,\r\n title: 'My Recent Searches'\r\n },\r\n {\r\n route: routes.profile.myPreferences,\r\n title: 'My Preferences'\r\n }\r\n ]\r\n};\r\n\r\n/**\r\n * Compare two pathnames by normalize them first\r\n * @param {string} firstUrl First pathname to compare\r\n * @param {string} secondUrl Second pathname to compare\r\n * @returns boolean\r\n */\r\nexport const compareUrlPathnames = (firstUrl, secondUrl) => {\r\n if (firstUrl === secondUrl) return true;\r\n\r\n // check if any of the urls is a root url (only '/')\r\n if (firstUrl === '/' || secondUrl === '/') return false;\r\n\r\n // remove start slash, only if there is an slash at the begining of the string\r\n // because starting ones throw an error\r\n return normalizeUrl(firstUrl.replace(/^\\//, '')) === normalizeUrl(secondUrl.replace(/^\\//, ''));\r\n};\r\n\r\n/**\r\n * Concatenates the terms link of a suite\r\n * @param {string} resortUrl found value\r\n * @returns string\r\n */\r\nexport const getTermsAndConditionUrl = resortUrl => {\r\n return `${resortUrl}${TERMS_AND_CONDITIONS_SUFFIX}`;\r\n};\r\n\r\n// Remove trailing slash from slugUrl if exists, ie /plan/ -> /plan\r\nexport const trimUrlPathname = urlPath => (urlPath.endsWith('/') ? urlPath.slice(0, -1) : urlPath);\r\n\r\n// Combine multiple portions of a path into a single URL\r\nexport const joinPaths = (basePath, childPath) =>\r\n `${basePath}${childPath.startsWith('/') ? '' : '/'}${trimUrlPathname(childPath)}`;\r\n","// Global Modal actions\r\n\r\nimport { isDevEnvironment } from '../../../utilities/env';\r\nimport { verifyIfModalIsOpened } from './globalModal.selectors';\r\nimport globalModalActionTypes from './globalModal.types';\r\n\r\nconst logConsoleMessage = (type, message, objects = []) => {\r\n if (isDevEnvironment) {\r\n console.log(`[${type}] ${message}`);\r\n if (objects && objects.length > 0) {\r\n objects.forEach(property => {\r\n console.log({ property });\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const openModal = ({ keyContentComponent, params }, shouldUseGWComponent = false, shouldForceOpen = false) => (\r\n dispatch,\r\n getState\r\n) => {\r\n const currentState = getState();\r\n const { globalModal } = currentState;\r\n\r\n logConsoleMessage('REQUEST', `Open modal with key: ${keyContentComponent} - [FORCE]: ${shouldForceOpen}`);\r\n\r\n if (!globalModal.isVisible || !globalModal.keyContentComponent || shouldForceOpen) {\r\n logConsoleMessage('SUCCESS', `Modal opened with success`);\r\n\r\n dispatch({\r\n type: globalModalActionTypes.OPEN_GLOBAL_MODAL,\r\n payload: {\r\n keyContentComponent,\r\n shouldUseGWComponent,\r\n params\r\n }\r\n });\r\n } else {\r\n logConsoleMessage('FAILURE', `It was not possible to open the modal`, [keyContentComponent, globalModal]);\r\n }\r\n};\r\nexport const closeModal = key => (dispatch, getState) => {\r\n const currentState = getState();\r\n const { globalModal } = currentState;\r\n\r\n logConsoleMessage('REQUEST', `Close modal with key: ${key}`);\r\n\r\n if (!key || key === globalModal.keyContentComponent) {\r\n logConsoleMessage('SUCCESS', `Modal closed with success`);\r\n\r\n dispatch({\r\n type: globalModalActionTypes.CLOSE_GLOBAL_MODAL\r\n });\r\n } else {\r\n logConsoleMessage('FAILURE', `It was not possible to close the modal.`, [key, globalModal]);\r\n }\r\n};\r\n\r\nconst updateParams = params => dispatch => {\r\n dispatch({\r\n type: globalModalActionTypes.UPDATE_GLOBAL_MODAL_PARAMS,\r\n payload: {\r\n params\r\n }\r\n });\r\n};\r\n\r\nexport const openOrUpdateModal = ({ keyContentComponent, params }, shouldUseGWComponent = false) => (\r\n dispatch,\r\n getState\r\n) => {\r\n const currentState = getState();\r\n const isOpened = verifyIfModalIsOpened(keyContentComponent, currentState);\r\n\r\n if (isOpened) {\r\n dispatch(updateParams(params));\r\n } else {\r\n dispatch(openModal({ keyContentComponent, params }, shouldUseGWComponent));\r\n }\r\n};\r\n\r\nexport const toggleModal = ({ keyContentComponent, params }, shouldUseGWComponent = false) => (dispatch, getState) => {\r\n const currentState = getState();\r\n const isOpened = verifyIfModalIsOpened(keyContentComponent, currentState);\r\n\r\n if (isOpened) {\r\n dispatch(closeModal(keyContentComponent));\r\n } else {\r\n dispatch(openModal({ keyContentComponent, params }, shouldUseGWComponent));\r\n }\r\n};\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Availability endpoints\r\n *\r\n * @class AvailabilityApiclient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class AvailabilityApiclient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * If there isn't any url provided, then we use the default from the environment variable\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v2`;\r\n\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_AVAILABILITY_SERVICE_ENDPOINT, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function to get all the availability data\r\n *\r\n * @function\r\n * @param {numberOfAdults: int, location: string, arrival: date, departure: date, offerCode: string, kidsAges= string} availabilityRequest\r\n * Example: {numberOfAdults: 2, location: 'DELLWI', arrival: '2019-06-01', departure: '2019-06-03', offerCode: 'FLEXTEST', kidsAges: '0,1,2,3,4'}\r\n */\r\n async fetchAvailability(availabilityRequest) {\r\n const requiredFields = ['numberOfAdults', 'location', 'arrival', 'departure'];\r\n\r\n const urlRequest = this.url;\r\n return this.isLoggedIn\r\n ? await super.getApiCallAuth(urlRequest, availabilityRequest, requiredFields)\r\n : await super.getApiCall(urlRequest, availabilityRequest, true, requiredFields);\r\n }\r\n\r\n /**\r\n * function to get all the availability content for a single suite\r\n *\r\n * @function\r\n * @param {numberOfAdults: int, location: string, arrival: date, departure: date, offerCode: string, kidsAges= string} suiteRequest\r\n * Example: {numberOfAdults: 2, location: 'DELLWI', arrival: '2019-06-01', departure: '2019-06-03', offerCode: 'FLEXTEST', kidsAges: '0,1,2,3,4'}\r\n */\r\n async getSuiteData(suiteRequest) {\r\n const { property, roomType } = suiteRequest;\r\n\r\n const urlRequest = `${this.url}/Suites/${property}?suiteCode=${roomType}`;\r\n\r\n delete suiteRequest.property;\r\n delete suiteRequest.roomType;\r\n\r\n return this.isLoggedIn\r\n ? await super.getApiCallAuth(urlRequest, suiteRequest)\r\n : await super.getApiCall(urlRequest, suiteRequest);\r\n }\r\n\r\n /**\r\n * function to get the suite charges\r\n *\r\n * @function\r\n * @param {suiteCode: string, property: string, arrival: date, departure: date, rateCode: string, Adults: int, children: Array[int]} suiteDataRequest\r\n * Example: { suiteCode: 'FSSX', property: 'WILLVA', arrival: '2030-06-01', departure: '2030-06-03', rateCode:'AMTCERT', Adults: 2, children: [1, 3, 5]}\r\n */\r\n async getAvailabilitySuiteCharges(suiteDataRequest) {\r\n const urlRequest = `${this.url}/${suiteDataRequest.suiteCode}/charges`;\r\n delete suiteDataRequest.suiteCode;\r\n\r\n let request = await super.getApiCall(urlRequest, suiteDataRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * function to get all the availability data by suite\r\n *\r\n * @function\r\n * @param {string} suite\r\n * The suite which we are requesting\r\n * Example: 'WPFB'\r\n * @param {numberOfAdults: int, location: string, arrival: date, departure: date, offerCode: string, rateCode: string, kidsAges: string} availabilityBySuiteRequest\r\n * Example: {numberOfAdults: 2, location: 'DELLWI', arrival: '2019-06-01', departure: '2019-06-03', offerCode: 'FLEXTEST', rateCode:'BBAR', kidsAges: '0,1,2,3'}\r\n */\r\n async getAvailabilityBySuite(suite, availabilityBySuiteRequest) {\r\n const urlRequest = `${this.url}/${suite}`;\r\n return this.isLoggedIn\r\n ? await super.getApiCallAuth(urlRequest, availabilityBySuiteRequest)\r\n : await super.getApiCall(urlRequest, availabilityBySuiteRequest);\r\n }\r\n\r\n /**\r\n * function to get all the range of days of availability data by suite\r\n *\r\n * @function\r\n * @param {numberOfAdults: int, location: string, arrival: date, departure: date, rateCode: string, packagesCodes: string, kidsAges: string} availabilityPackagesRequest\r\n * Example: {numberOfAdults: 2, location: 'DELLWI', arrival: '2019-06-01', departure: '2019-06-03', rateCode:'BBAR', packagesCodes: '1130BDAY, 1230BDAY', kidsAges: '0,1,2,3'}\r\n */\r\n async getAvailabilityPackage(availabilityPackagesRequest) {\r\n const urlRequest = `${this.url}/packages`;\r\n\r\n const request = await super.getApiCall(urlRequest, availabilityPackagesRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * function returns the number of available items per day with price and taxes\r\n *\r\n * @function\r\n * @param {StartDate: date, EndDate: date, ItemGroup: string, Location: string, NumberOfGuests:int} availabilityDayPassRequest\r\n * Example: {StartDate: 2019-10-01, EndDate: 109-10-02, ItemGroup: CA, Location: GRAPTX, NumberOfGuests : 1}\r\n */\r\n async getAvailabilityDayPasses(availabilityDayPassRequest) {\r\n const urlRequest = `${this.url}/daypass/availability`;\r\n\r\n let request = await super.getApiCall(urlRequest, availabilityDayPassRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * function returns the number of available items per day with price and taxes\r\n *\r\n * @function\r\n * @param {Arrival: date, Departure: date, RateCode: string, Property: string, Adults:int} availabilityDayPassRequest\r\n * Example: {StartDate: 2019-10-01, EndDate: 109-10-02, ItemGroup: CA, Location: GRAPTX, NumberOfGuests : 1}\r\n */\r\n async getAvailabilityRoomChargesDayPasses(availabilityDayPassRequest) {\r\n const urlRequest = `${this.url}/WPPASS/charges`;\r\n\r\n let request = await super.getApiCall(urlRequest, availabilityDayPassRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * function that wrapps the call to get a deal from a promo code. Is a call to daypass endpoint too\r\n *\r\n * @function\r\n * @param {StartDate: date, EndDate: date, ItemGroup: string, Location: string, NumberOfGuests:int} availabilityDayPassRequest\r\n * Example: {StartDate: 2019-10-01, EndDate: 109-10-02, ItemGroup: CA, Location: GRAPTX, NumberOfGuests : 1}\r\n */\r\n async getDealByPromoCode(property, promoCode) {\r\n const urlRequest = `${this.url}/Deals/${property}/${promoCode}`;\r\n let request = await super.getApiCall(urlRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * function that wrapps the call to get the suite bundle package\r\n *\r\n * @function\r\n * @param {Property: string, suiteCode: string}\r\n * Example: {Property: 'POCOPA', suiteCode: 'FSSB'}\r\n */\r\n async getSuiteBundlePackage(property, suiteCode) {\r\n const urlRequest = `${this.url}/${property}/${suiteCode}/upsell-packages`;\r\n let request = await super.getApiCall(urlRequest);\r\n return request;\r\n }\r\n}\r\n","import styled, { css } from 'styled-components';\r\n\r\nimport Box from '../../ui-kit/Box';\r\nimport theme from '../themes/theme';\r\n\r\nconst SAFE_AREA = 14;\r\nconst SCROLLBAR_PADDING = 4;\r\nconst SCROLLBAR_WIDTH = 8;\r\n\r\nconst withScrollbarStyles = ({ isScrolling, scrollColor, showTrack, trackColor, verticalPadding }) => {\r\n const alwaysShowTrack = css`\r\n margin-right: 0px;\r\n scrollbar-width: thin; /* Firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n scrollbar-color: ${scrollColor || theme.colors.snowMountainGrey[100]}\r\n ${trackColor || theme.colors.snowMountainGrey[100]}; /* Firefox */\r\n\r\n ::-webkit-scrollbar {\r\n width: ${SCROLLBAR_PADDING * 2 + SCROLLBAR_WIDTH}px;\r\n background-color: rgba(0, 0, 0, 0);\r\n }\r\n\r\n ::-webkit-scrollbar-track {\r\n margin: ${verticalPadding || '28px'};\r\n border: ${SCROLLBAR_PADDING + 1}px solid transparent;\r\n background-clip: padding-box;\r\n border-radius: 30px;\r\n background-color: ${trackColor || theme.colors.pureWhite[0]};\r\n }\r\n\r\n ::-webkit-scrollbar-thumb {\r\n background-color: ${scrollColor || theme.colors.snowMountainGrey[100]};\r\n border-radius: 30px;\r\n border: ${SCROLLBAR_PADDING + 1}px solid transparent;\r\n background-clip: padding-box;\r\n }\r\n\r\n ::-webkit-scrollbar-button {\r\n display: none;\r\n }\r\n `;\r\n\r\n const trackOnHover = css`\r\n scrollbar-width: thin; /* Firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n ::-webkit-scrollbar {\r\n width: 14px;\r\n }\r\n\r\n ::-webkit-scrollbar-track {\r\n box-shadow: inset 0 0 14px 14px transparent;\r\n border: solid 4px transparent;\r\n border-radius: 30px;\r\n }\r\n\r\n ::-webkit-scrollbar-thumb {\r\n box-shadow: inset 0 0 14px 14px ${scrollColor || theme.colors.snowMountainGrey[100]};\r\n border: solid 4px transparent;\r\n border-radius: 30px;\r\n }\r\n\r\n ::-webkit-scrollbar-button {\r\n display: none;\r\n }\r\n `;\r\n\r\n const defaultScrollbar = css`\r\n scrollbar-width: thin; /* Firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n\r\n ::-webkit-scrollbar-track {\r\n transition: all 0.2s;\r\n box-shadow: none !important;\r\n background-color: transparent;\r\n }\r\n\r\n ::-webkit-scrollbar {\r\n width: 3px !important;\r\n background-color: transparent;\r\n }\r\n\r\n ::-webkit-scrollbar-thumb {\r\n background-color: transparent;\r\n }\r\n `;\r\n\r\n const defaultStyling = isScrolling ? trackOnHover : defaultScrollbar;\r\n\r\n return showTrack ? alwaysShowTrack : defaultStyling;\r\n};\r\n\r\nexport const ScrollableContainer = styled(Box)`\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n max-height: ${({ maxHeight }) => (typeof maxHeight === 'string' ? maxHeight : `${maxHeight}px`)};\r\n padding-right: ${({ isInset }) => (isInset ? '0px' : `${SAFE_AREA}px`)};\r\n margin-right: ${({ isInset }) => (isInset ? '0px' : `-${SAFE_AREA}px`)};\r\n\r\n ${({ hideScrollWhileScrolling }) => {\r\n if (!hideScrollWhileScrolling) {\r\n return withScrollbarStyles;\r\n }\r\n }}\r\n`;\r\n","import debounce from 'lodash-es/debounce';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useState } from 'react';\r\n\r\nimport { ScrollableContainer } from './styles';\r\n\r\n/**\r\n * Use the `Scrollable` component to add a custom cross-browser\r\n * scrollbar that is visible just when the use is scrolling.\r\n */\r\nconst Scrollable = ({\r\n maxHeight,\r\n scrollColor,\r\n showTrack = false,\r\n trackColor,\r\n isInset = false,\r\n children,\r\n className = null,\r\n verticalPadding = '28px',\r\n hideScrollWhileScrolling = false\r\n}) => {\r\n const [isScrolling, setScrolling] = useState();\r\n\r\n const onStopScrolling = debounce(() => {\r\n if (isScrolling) {\r\n setScrolling(false);\r\n }\r\n }, 300);\r\n\r\n const onScroll = () => {\r\n if (!isScrolling) {\r\n setScrolling(true);\r\n }\r\n\r\n onStopScrolling();\r\n };\r\n\r\n return (\r\n <ScrollableContainer\r\n className={className}\r\n verticalPadding={verticalPadding}\r\n maxHeight={maxHeight}\r\n isScrolling={isScrolling}\r\n showTrack={showTrack}\r\n isInset={isInset}\r\n scrollColor={scrollColor}\r\n trackColor={trackColor}\r\n onScroll={onScroll}\r\n hideScrollWhileScrolling={hideScrollWhileScrolling}>\r\n {children}\r\n </ScrollableContainer>\r\n );\r\n};\r\n\r\nScrollable.propTypes = {\r\n showTrack: PropTypes.bool,\r\n isInset: PropTypes.bool,\r\n scrollColor: PropTypes.string,\r\n trackColor: PropTypes.string,\r\n maxHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n className: PropTypes.string,\r\n verticalPadding: PropTypes.string\r\n};\r\n\r\nexport default Scrollable;\r\n","// Guests selectors\r\n\r\n/**\r\n * Get the selected adults counts.\r\n * @param {Object} state\r\n * @returns {number} Number of adults.\r\n */\r\nexport const getAdultsCount = state => state.adultsCount;\r\n\r\n/**\r\n * Get the selected kids counts.\r\n * @param {Object} state\r\n * @returns {number} Number of adults.\r\n */\r\nexport const getKidsCount = state => state.kidsCount;\r\n\r\n/**\r\n * Get the kids ages.\r\n * @param {Object} state\r\n * @returns {Array} Array of number.\r\n */\r\nexport const getKidsAges = state => state.kidsAges;\r\n\r\n/**\r\n * Get the number of guests (adults + kids).\r\n * @param {Object} state\r\n * @returns {number} Number of guests.\r\n */\r\nexport const getNumberOfGuests = state => state.adultsCount + state.kidsCount;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport useLockBodyScroll from '../../hooks/ui_hooks/useLockBodyScroll';\r\nimport DrawerModal from './DrawerModal';\r\nimport StyledModal from './styles';\r\n\r\nexport const MODAL_VARIATIONS = {\r\n DEFAULT: 'DEFAULT',\r\n DRAWER: 'DRAWER'\r\n};\r\n\r\nconst COMPONENTS = {\r\n [MODAL_VARIATIONS.DEFAULT]: StyledModal,\r\n [MODAL_VARIATIONS.DRAWER]: DrawerModal\r\n};\r\n\r\nconst Modal = ({ children, variation, ...props }) => {\r\n const ModalComponent = COMPONENTS[variation];\r\n\r\n useLockBodyScroll(props.isOpen);\r\n\r\n return <ModalComponent {...props}>{children}</ModalComponent>;\r\n};\r\n\r\nModal.VARIATIONS = MODAL_VARIATIONS;\r\n\r\nModal.defaultProps = {\r\n children: null,\r\n isOpen: false,\r\n onCloseComplete: null,\r\n variation: MODAL_VARIATIONS.DEFAULT,\r\n\r\n /* Drawer Variation Props */\r\n backButton: false,\r\n onBackButtonClick: null,\r\n title: '',\r\n isBlocking: false,\r\n width: 480\r\n};\r\n\r\nModal.propTypes = {\r\n children: PropTypes.node,\r\n isOpen: PropTypes.bool,\r\n onCloseModal: PropTypes.func,\r\n variation: PropTypes.oneOf(Object.values(MODAL_VARIATIONS)),\r\n\r\n /* Drawer Variation Props */\r\n backButton: PropTypes.bool,\r\n onBackButtonClick: PropTypes.func,\r\n title: PropTypes.string,\r\n isBlocking: PropTypes.bool,\r\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n innerPadding: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n titleColor: PropTypes.string\r\n};\r\n\r\nexport default Modal;\r\n","// Add a Package Selectors\r\n/**\r\n * Get all added packages data.\r\n * @param {Object} state Added packages data.\r\n */\r\nexport const getAddedpackages = state => state.addedPackages;\r\n\r\n/**\r\n * Get flash message from add a package.\r\n * @param {Object} state Added packages data.\r\n */\r\nexport const getFlashMessage = state => state.flashMessage;\r\n","/**\r\n * @function\r\n * Bound two objects to have exactly the same properties.\r\n * Returns a new object with the intersection of properties of two objects.\r\n * @param {Object} o1\r\n * @param {Object} o2\r\n * @returns Object\r\n */\r\nexport function objectIntersection(o1, o2) {\r\n let clonedObject = { ...o1 };\r\n Object.keys(clonedObject).forEach(function(item, index) {\r\n if (!o2.hasOwnProperty(item)) {\r\n delete clonedObject[item];\r\n }\r\n });\r\n\r\n return clonedObject;\r\n}\r\n\r\n// Sort object or dictionary\r\nexport function sortObject(obj) {\r\n return Object.keys(obj)\r\n .sort()\r\n .reduce((x, k) => {\r\n x[k] = obj[k];\r\n return x;\r\n }, {});\r\n}\r\n\r\n/**\r\n * @function\r\n * Check if the object properties are null or empty\r\n * @param {Object} obj\r\n * Object which keys are going to be analyzed\r\n * @Return {Boolean} If none of the values are null or empty then the result will be true\r\n */\r\nexport const checkObjectProperties = obj => {\r\n if (!obj) return false;\r\n const isEmpty = Object.values(obj).some(prop => prop === null || prop === '');\r\n return !isEmpty;\r\n};\r\n\r\n/**\r\n * Find values tat are in list1 but not in list2 by object propery, or in set theory list1 - list2\r\n * @param {Array} list1 Array of objects, we are going to look the elements in this array not present in list2\r\n * @param {Array} list2 Array of objects, we are going to look the elements not present in this array\r\n * @param {string} byKey Property to look or filter at\r\n * @returns Array\r\n */\r\nexport const findElementsNotInList = (list1, list2, byKey) => {\r\n var result = list1.filter(function(obj) {\r\n return !list2.some(function(obj2) {\r\n return obj[byKey] === obj2[byKey];\r\n });\r\n });\r\n\r\n return result;\r\n};\r\n","/**\r\n * Removes mask from string based aon a provided Regular Expression.\r\n * @param {string} str string to be manipulated.\r\n * @param {Object} mask Regular expression of characters to be removed from\r\n * string.\r\n * @return {string} Unmasked string.\r\n */\r\nconst unmaskValue = (str, mask) => {\r\n return str.replace(mask, '').trim();\r\n};\r\n\r\nexport default unmaskValue;\r\n","// DayPasses action types\r\n\r\nconst dayPassesActionTypes = {\r\n SET_DAYPASSES: 'SET_DAYPASSES',\r\n IS_DAYPASSES_AVAILABLE: 'IS_DAYPASSES_AVAILABLE',\r\n UPDATE_DAYPASSES_LOADING: 'UPDATE_DAYPASSES_LOADING',\r\n UPDATE_DAYPASSES_METADATA: 'UPDATE_DAYPASSES_METADATA',\r\n SET_DAYPASSES_AVAILABLE_DATES: 'SET_DAYPASSES_AVAILABLE_DATES',\r\n UPDATE_DAYPASSES_FETCHING: 'UPDATE_DAYPASSES_FETCHING'\r\n};\r\n\r\nexport default dayPassesActionTypes;\r\n","// Event Calendar action types\r\n\r\nconst eventCalendarActionTypes = {\r\n GET_EVENT_CALENDAR_SUCCESS: 'GET_EVENT_CALENDAR_SUCCESS',\r\n GET_EVENT_CALENDAR_ERROR: 'GET_EVENT_CALENDAR_ERROR'\r\n};\r\n\r\nexport default eventCalendarActionTypes;\r\n","// Geolocation action types\r\nconst geolocationActionTypes = {\r\n GET_GEOLOCATION: 'GET_GEOLOCATION',\r\n GET_GEOLOCATION_ERROR: 'GET_GEOLOCATION_ERROR',\r\n GET_GEOLOCATION_CLEAR: 'GET_GEOLOCATION_CLEAR'\r\n};\r\n\r\nexport default geolocationActionTypes;\r\n","import { lazy } from 'react';\r\nimport withGlobalModal from './withGlobalModal';\r\n\r\nexport const MODAL_KEYS = {\r\n MYSTERY_OFFER_SPINNER: 'MYSTERY_OFFER_SPINNER',\r\n INFO_CARD_DETAILS_MODAL: 'INFO_CARD_DETAILS_MODAL',\r\n FIND_RESERVATION_BY_ID: 'FIND_RESERVATION_BY_ID',\r\n AUTH_MODAL: 'AUTH_MODAL',\r\n LEAD_GEN_MODAL: 'LEAD_GEN_MODAL',\r\n IE_MODAL: 'IE_MODAL',\r\n OFFER_CODE_ERROR_TOAST: 'OFFER_CODE_ERROR_TOAST',\r\n PACKAGE_MODAL: 'PACKAGE_MODAL',\r\n SMS_SIGN_UP_MODAL: 'SMS_SIGN_UP_MODAL',\r\n SPECIAL_REQUEST_MODAL: 'SPECIAL_REQUEST_MODAL',\r\n SUITE_PRICE_MISMATCH: 'SUITE_PRICE_MISMATCH',\r\n RECENT_SEARCHES: 'RECENT_SEARCHES',\r\n OFFERS_MODAL: 'OFFERS_MODAL',\r\n CONFETTI_MODAL: 'CONFETTI_MODAL',\r\n DINING_CREDIT_MODAL: 'DINING_CREDIT_MODAL',\r\n ATTRACTIONS_INFO_MODAL: 'ATTRACTIONS_INFO_MODAL',\r\n CMP_ADD_GUESTS_MODAL: 'CMP_ADD_GUESTS_MODAL',\r\n PARKING_BANNER_MODAL: 'PARKING_BANNER_MODAL',\r\n CART_MODIFY_MODAL: 'CART_MODIFY_MODAL',\r\n WATER_PARK_PASSES_VIDEO_MODAL: 'WATER_PARK_PASSES_VIDEO_MODAL',\r\n BIRTHDAY_CONFIRMATION_MODAL: 'BIRTHDAY_CONFIRMATION_MODAL'\r\n};\r\n\r\nexport const getModalContentByKey = key => {\r\n let ContentComponent;\r\n\r\n switch (key) {\r\n case MODAL_KEYS.MYSTERY_OFFER_SPINNER:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"MysteryOfferSpinnerContainer\" */ '../MysteryOfferSpinner/MysteryOfferSpinnerContainer'\r\n )\r\n );\r\n break;\r\n case MODAL_KEYS.INFO_CARD_DETAILS_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"PackageDetailsModal\" */ '../PackageDetailsModal'));\r\n break;\r\n case MODAL_KEYS.FIND_RESERVATION_BY_ID:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"FindYourReservationContainer\" */ '../FindYourReservationModal/FindYourReservationContainer'\r\n )\r\n );\r\n break;\r\n case MODAL_KEYS.AUTH_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"AuthModalContent\" */ '../Auth/AuthModalContent'));\r\n break;\r\n\r\n case MODAL_KEYS.LEAD_GEN_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"EmailCaptureContent\" */ '../EmailCapture/components/EmailCaptureContent')\r\n );\r\n break;\r\n case MODAL_KEYS.OFFER_CODE_ERROR_TOAST:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"CouponErrorHandler\" */ '../CouponErrorHandler'));\r\n break;\r\n case MODAL_KEYS.IE_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"IEModalContent\" */ '../IEModal/IEModalContent'));\r\n break;\r\n case MODAL_KEYS.PACKAGE_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"ReservationDetail\" */ '../../pages/ReservationDetail/AddPackageModal')\r\n );\r\n break;\r\n case MODAL_KEYS.SMS_SIGN_UP_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"SmsSignUpModal\" */ '../SmsSignUpModal'));\r\n break;\r\n case MODAL_KEYS.SPECIAL_REQUEST_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"SpecialRequestModal\" */ '../SpecialRequestModal'));\r\n break;\r\n case MODAL_KEYS.SUITE_PRICE_MISMATCH:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"SuitePriceConflictModal\" */ '../../pages/Plan/components/SuitePriceConflictModal')\r\n );\r\n break;\r\n case MODAL_KEYS.RECENT_SEARCHES:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"PreviousSearchModal\" */ '../../pages/RecentSearches/PreviousSearchModal')\r\n );\r\n break;\r\n case MODAL_KEYS.OFFERS_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"LoyaltySummaryMobileModal\" */ '../LoyaltySummary/components/LoyaltySummaryMobileModal'\r\n )\r\n );\r\n break;\r\n case MODAL_KEYS.CONFETTI_MODAL:\r\n ContentComponent = lazy(() => import(/* webpackChunkName: \"ConfettiModal\" */ '../ConfettiModal/ConfettiModal'));\r\n break;\r\n case MODAL_KEYS.DINING_CREDIT_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"DiningModal\" */ '../DiningCredit/components/DiningModal')\r\n );\r\n break;\r\n case MODAL_KEYS.ATTRACTIONS_INFO_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"DiningModal\" */ '../Packages/Attractions/components/AttractionsTableModal')\r\n );\r\n break;\r\n case MODAL_KEYS.CMP_ADD_GUESTS_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"CMPAddGuestsModal\" */ '../../pages/ReservationDetail/AddGuestsOnCMPModalContent')\r\n );\r\n break;\r\n case MODAL_KEYS.PARKING_BANNER_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"ParkingBannerModal\" */ '../../pages/ReservationDetail/ParkingBanner/ParkingBannerModal'\r\n )\r\n );\r\n break;\r\n case MODAL_KEYS.CART_MODIFY_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"CartItemModificationModal\" */ '../Summary/components/Suite/Plan/Content/CartItemModificationModal'\r\n )\r\n );\r\n break;\r\n case MODAL_KEYS.WATER_PARK_PASSES_VIDEO_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(/* webpackChunkName: \"WaterParkPassesModal\" */ '../../pages/Plan/components/WaterParkPassesModal')\r\n );\r\n break;\r\n case MODAL_KEYS.BIRTHDAY_CONFIRMATION_MODAL:\r\n ContentComponent = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"BirthdayConfirmationModal\" */ '../../pages/BirthdayReservationDetail/ConfirmationModal/BirthdayConfirmationModal'\r\n )\r\n );\r\n break;\r\n default:\r\n ContentComponent = () => null;\r\n break;\r\n }\r\n\r\n return withGlobalModal(ContentComponent, key);\r\n};\r\n","//REVIEW AND COMPLETE SECTION COPY\r\nexport const SECTION_TITLE = 'Review and Complete';\r\nexport const TAKE_A_MOMENT =\r\n 'Take a moment to ensure all the entered information is correct before clicking the <METHOD> button found at the bottom of this page.';\r\nexport const BOOKING_CONSENT = `By booking this reservation, I am providing an electronic signature confirming that I have read and that I agree to Great Wolf Lodge's <TERMS> and <POLICY> as well as confirming that I acknowledge and assume the inherent risk of exposure to COVID-19 that exists by visiting any public place where other people are present. By providing a mobile phone number, I expressly consent to receiving informational SMS texts and calls related to my booking and/or stay. I am also confirming that I am 21 years of age or older.`;\r\nexport const TERMS = 'Terms and Conditions';\r\nexport const POLICY = 'Privacy Policy';\r\nexport const TOTAL = 'Total';\r\nexport const DUE_TODAY = 'Due today';\r\nexport const DUE_CHECKIN = 'Due at Check-In';\r\nexport const REFER_OR_CONTACT = `Please refer to our <POLICY> or <CONTACT> for more details.`;\r\nexport const ARIA_MAILING = 'Allow to receive Great Wolf emails';\r\nexport const ARIA_SIGNATURE = 'Electronic signature compliance';\r\n\r\n//RENDER PAYMENT BUTTON COPY\r\nexport const AGREE_AND_BOOK = 'Agree & Book';\r\nexport const CC_CHARGED = 'Your credit card will be charged <TOTAL>';\r\n\r\n//ERROR ALERT COPY\r\nexport const ERROR = 'Something went wrong with your payment.';\r\nexport const ERROR_DESCRIPTION =\r\n 'Sorry but there was a problem using <PAYMENT_METHOD>. Please try again or use “edit” to select a different payment option.';\r\n\r\n//FLEX FARE COPY\r\nexport const FLEX_FARE = 'Protect my Vacation (Highly Recommended)';\r\nexport const CANCEL_RESERVATION = `<YES> I want the ability to cancel my reservation up until midnight 2 days prior to\r\nthe arrival date. I understand that if I don't select this, cancellation fees may apply. Flex trip is\r\nnon-refundable.`;\r\nexport const ARIA_HEADER = 'Add flexibility to your trip';\r\nexport const ARIA_CHECKBOX = 'Allow ability to cancel reservation';\r\n\r\nexport const ACCEPT_VISA = 'We accept Visa';\r\nexport const ACCEPT_MASTER = 'We accept MasterCard';\r\nexport const ACCEPT_AMERICAN = 'We accept American Express';\r\nexport const ACCEPT_DISCOVER = 'We accept Discover';\r\nexport const CREDIT_CARD_CONTINUE_BUTTON = 'Continue';\r\nexport const CREDIT_CARD_INFO = 'Credit Card Info';\r\nexport const FORM_NAME_ON_CARD = 'Name on card';\r\nexport const FORM_CARD_NUMBER = 'Card Number';\r\nexport const FORM_MONTH = 'Month';\r\nexport const FORM_YEAR = 'Year';\r\nexport const FORM_CVV = 'CVV';\r\nexport const FORM_CVV_ALT = '3 digit security code on back of credit card';\r\nexport const FORM_CARD_HOLDER = 'Card holder not present at check-in?';\r\nexport const FORM_DONT_WORRY = \"Don't Worry!\";\r\nexport const FORM_WARN_FORM_ONLINE =\r\n 'If the Card Holder will not be at check-in, complete the credit card authorization form online.';\r\nexport const FORM_COMPLETE_ONLINE_PROCESS = 'Complete Online process';\r\nexport const FORM_BACK_PAYMENT = 'Back to payment';\r\n\r\n//PAYMENT FROM HELPER COPY\r\nexport const QUALIFYING_ID = 'Qualifying ID: <ID>';\r\nexport const WISH_HAPPY_BIRTH_DAY = 'Please wish a happy birthday to <BIRTH_DAY>';\r\nexport const GREAT_WOLF_LODGE = 'Great Wolf Lodge';\r\nexport const US = 'US';\r\nexport const SELECT_PAYMENT_METHOD = 'Select A Payment Method';\r\nexport const REQUIRED_FIELDS = 'All fields are required unless marked otherwise';\r\n\r\n// AFFIRM TEXTS\r\nexport const AFFIRM_NO_LATE_FEES = `No late fees, hidden insterest, or surprises. Ever. Get a real-time decision without affecting your credit score.`;\r\nexport const AFFIRM_AFTER_CHECKING = `After clicking `;\r\nexport const AFFIRM_CONTINUE = `\"Continue\"`;\r\nexport const AFFIRM_MESSAGE = `, you will be redirected to Affirm to securely complete your purchase. Just fill out a few pieces of basic information, and get a real-time decision without affecting your credit score.`;\r\nexport const AFFIRM_ADITIONAL = `* Affirm Monthly Payments cannot be combined with gift cards or eGift certificates.`;\r\nexport const AFFIRM_CONTINUE_BUTON = `Continue with <ICON>`;\r\nexport const AFFIRM_EDIT_BUTON = `Save changes with <ICON>`;\r\nexport const SAVE_CHANGES_BUTTON = `Save changes`;\r\nexport const AFFIRM_CHECKOUT_BUTTON = `Check out with <ICON>`;\r\n\r\n// BILLING INFORMATION\r\nexport const BILLING_INFORMATION = `Billing Info`;\r\nexport const USE_SAME_BILLING_ADDRESS = `Use the same address I used for my booking`;\r\nexport const ADDRESS_LINE_2 = `+ Add Address Line 2 (optional)`;\r\n\r\n// INDEX\r\nexport const CONTACT_INFO = 'Contact Info';\r\nexport const PAYMENT_BILLING = 'Payment & Billing';\r\nexport const MONTHLY_PAYMENTS = 'Monthly payments';\r\nexport const PAYMENTS_OPTIONS = 'Payment Options';\r\nexport const AFFIRM_PAYMENTS_OPTIONS = 'Affirm Monthly Payments not available to non-US residents.';\r\nexport const REVIEW_COMPLETE = 'Review & Complete';\r\nexport const EMAIL_TAKEN = 'Email is already taken.';\r\n\r\n//PaypalSuccessAlert\r\nexport const CONTINUE = \"'continue'\";\r\n\r\n//index.js\r\nexport const FREE_CANCELLATION_TITLE = 'Free Cancellation for 24 hours!';\r\nexport const FREE_CANCELLATION_TEXT =\r\n 'Any cancellation or change to your reservation within 24 hours is free for this booking!';\r\nexport const BEST_RATE_GUARANTEE_TITLE = 'Best rate Guarantee';\r\nexport const BEST_RATE_GUARANTEE_TEXT =\r\n 'Found a better price on another site? We’ll match it up to 24 hours after you have booked!';\r\n\r\n//GooglePay.js\r\nexport const BUTTON_WARNING = 'Continue on the popup window';\r\n\r\n//AvailabilityAlert.js\r\nexport const GREAT_DEALS = \"<strong>Don't miss out on this great deal!</strong> Act fast, this price might change!\";\r\n\r\nexport const CHECKOUT_AS_GUEST = 'Checkout as Guest';\r\n//BIRTHDAY\r\nexport const PARTY_DETAILS = '<ADULTS> adults, <KIDS> kids, <INFANTS> infants, <SPECTATORS> spectators';\r\n\r\nexport const PAYMENT_HEADER_DISCLAIMER = 'All fields are required unless marked otherwise';\r\n\r\nexport const SIGN_IN = 'Sign in';\r\n\r\nexport const SIGN_OUT = 'Sign out';\r\n","import { ASSETS_LOCATIONS, PACKAGE_TYPE, getAssetsUrl } from '../../utilities/constants';\r\nimport { RESERVATION_DETAIL_IMAGES } from './assets/images';\r\n\r\nexport const ORDER_STATUS = {\r\n canceled: 'CANCELED',\r\n reserved: 'RESERVED'\r\n};\r\nexport const INFO_SECTION_ID = 'info-section';\r\nexport const ADDITIONAL_PACKAGE_SECTION = 'additional-package-section';\r\n\r\n// This is gonna be hard coded while we give priority to other AEM stuff, after that, we should manage this from AEM.\r\nconst DINNING_TILE = {\r\n image: `${getAssetsUrl(ASSETS_LOCATIONS.CONTENT, RESERVATION_DETAIL_IMAGES.PACKAGE_DINNER)}`,\r\n headline: `Wake up to breakfast savings`,\r\n description: `Begin your days with dining deals, which may include a breakfast voucher and credits for lunch and dinner. Only available pre-arrival.`,\r\n buttonLabel: 'Add a Deal',\r\n packageType: PACKAGE_TYPE.dining\r\n};\r\nconst ACTIVITIES_TILE = {\r\n image: `${getAssetsUrl(ASSETS_LOCATIONS.CONTENT, RESERVATION_DETAIL_IMAGES.MAGIQUEST)}`,\r\n headline: `Play favorites with a pass`,\r\n description: `Combine a bunch of experiences, including MagiQuest & Build-a-Bear, into a single activity pass for the best value & more fun.`,\r\n buttonLabel: 'Add a Pass',\r\n packageType: PACKAGE_TYPE.pass\r\n};\r\nconst CABANAS_TILE = {\r\n image: `${getAssetsUrl(ASSETS_LOCATIONS.CONTENT, RESERVATION_DETAIL_IMAGES.CABANAS)}`,\r\n headline: `Relax with a private cabana`,\r\n description: `Reserve a cabana for your pack. Enjoy private water park seating, refreshing drinks, complimentary towels, and more!`,\r\n buttonLabel: 'Reserve a Cabana',\r\n packageType: PACKAGE_TYPE.cabanasAndFlexTrip\r\n};\r\nconst EVENT_CALENDAR_TILE = {\r\n image: `${getAssetsUrl(ASSETS_LOCATIONS.CONTENT, RESERVATION_DETAIL_IMAGES.GREAT_CLOCK_TOWER_SHOW)}`,\r\n headline: `Keep playing with our events`,\r\n description: `Explore the lodge and discover new fun with your pack in between water park splashes!`,\r\n buttonLabel: 'Download Our App',\r\n highlight: true,\r\n packageType: 'Default'\r\n};\r\n\r\nexport const TIERS_CONTENT_MY_RESERVATIONS = {\r\n A: DINNING_TILE,\r\n B: ACTIVITIES_TILE,\r\n C: CABANAS_TILE,\r\n default: EVENT_CALENDAR_TILE\r\n};\r\n\r\nexport const TIERS_CONTENT_DAYPASS = {\r\n A: CABANAS_TILE,\r\n B: DINNING_TILE,\r\n default: EVENT_CALENDAR_TILE\r\n};\r\n\r\nexport const TIERS_CONTENT_DAYPASS_CONFIRMATION = {\r\n A: CABANAS_TILE,\r\n default: EVENT_CALENDAR_TILE\r\n};\r\n\r\nexport const IMAGES = {\r\n wileyReservation: getAssetsUrl(ASSETS_LOCATIONS.ROOT, RESERVATION_DETAIL_IMAGES.WILEY_RESERVATION),\r\n waveSVG: getAssetsUrl(ASSETS_LOCATIONS.SVG, RESERVATION_DETAIL_IMAGES.WAVE_BG),\r\n bestValueRibbon3: getAssetsUrl(ASSETS_LOCATIONS.ROOT, RESERVATION_DETAIL_IMAGES.BEST_VALUE_RIBBON_3),\r\n bestValueRibbon4: getAssetsUrl(ASSETS_LOCATIONS.ROOT, RESERVATION_DETAIL_IMAGES.BEST_VALUE_RIBBON_4),\r\n bestValueRibbon5: getAssetsUrl(ASSETS_LOCATIONS.ROOT, RESERVATION_DETAIL_IMAGES.BEST_VALUE_RIBBON_5)\r\n};\r\n\r\nexport const ADDONS_PACKAGE_NAME = {\r\n Passes: 'Passes',\r\n Birthday: 'Birthday Packages',\r\n Dining: 'Dining Deals'\r\n};\r\n\r\nexport const ADDONS_PACKAGE_IMAGE = {\r\n Passes: getAssetsUrl(ASSETS_LOCATIONS.SVG, RESERVATION_DETAIL_IMAGES.ATTRACTION_ADDONS),\r\n Birthday: getAssetsUrl(ASSETS_LOCATIONS.SVG, RESERVATION_DETAIL_IMAGES.BIRTHDAY_ADDONS),\r\n Dining: getAssetsUrl(ASSETS_LOCATIONS.SVG, RESERVATION_DETAIL_IMAGES.DINING_ADDONS),\r\n Cabana: getAssetsUrl(ASSETS_LOCATIONS.SVG, RESERVATION_DETAIL_IMAGES.CABANA_ADDONS)\r\n};\r\n\r\nexport const ADDONS_CARD_TITLE = {\r\n Passes: 'Attraction Passes',\r\n Birthday: 'Birthday Package',\r\n Dining: 'Dining Deals'\r\n};\r\n\r\nexport const ADDONS_CARD_MODAL_TITLE = {\r\n Passes: 'Your Attraction Passes',\r\n Birthday: 'Your Birthday Packages',\r\n Dining: 'Your Dining Packages'\r\n};\r\n\r\nexport const ADDONS_CTA_TEXT = {\r\n Passes: 'Add More Passes',\r\n Birthday: 'Add a Package',\r\n Dining: 'Add a Deal',\r\n Bundle: 'See Details'\r\n};\r\n\r\n// Standard success and error messages\r\nexport const NOTIFICATION_MESSAGES = {\r\n addLCOSuccess: 'You added <b>late Check-Out</b> to your reservation!',\r\n addLCOFailed: 'Failed to add <b>late Check-Out</b> to your reservation'\r\n};\r\n\r\n// Type of response, success or error\r\nexport const NOTIFICATION_TYPE = {\r\n success: 'success',\r\n failed: 'error'\r\n};\r\n\r\nexport const PRICE_LABEL = 'Price excludes tax';\r\n","// Suite Actions\r\n\r\nimport { push } from 'connected-react-router';\r\nimport AvailabilityApiClient from '../../../api/clients/AvailabilityApiClient';\r\nimport routes from '../../../routes';\r\nimport { getTheFirstElementOfArray } from '../../../utilities/arraysUtils';\r\nimport { OFFER_CODE_TYPE } from '../../../utilities/constants';\r\nimport plansActionTypes from '../Plans/plans.types';\r\nimport { gaTrackingPlanSearchErrorCode } from '../utilities/util';\r\nimport suiteActionTypes from './suite.types';\r\n\r\nconst MISMATCH = 'RATES_MISMATCH';\r\n\r\nexport const pushImpressionsAnalyticsData = eventProps => dispatch => {\r\n dispatch({\r\n type: suiteActionTypes.GTM_SUITE_IMPRESSIONS,\r\n eventProps\r\n });\r\n};\r\nexport const pushToPackagesPage = () => dispatch => {\r\n dispatch(push(routes.plan.activities));\r\n};\r\nexport const pushToDiningPackagesPage = () => dispatch => {\r\n dispatch(push(routes.plan.dining));\r\n};\r\nexport const pushToPayment = () => dispatch => {\r\n dispatch(push(routes.plan.payment));\r\n};\r\nexport const selectSuite = (suite, eventProps) => dispatch => {\r\n dispatch({ type: suiteActionTypes.SELECT_SUITE, selectedSuite: suite, eventProps });\r\n};\r\nexport const getDetailedAvailability = (requestObject, failureCallback = () => {}) => async (dispatch, getState) => {\r\n const skipCompareValidation = requestObject.skipCompareValidation ? requestObject.skipCompareValidation : false;\r\n delete requestObject.skipCompareValidation;\r\n\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_RESET\r\n });\r\n\r\n try {\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_INFO,\r\n getAvailabilityLoading: true\r\n });\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_PLAN_PACKAGES_INFO_TYPE,\r\n getPlanPackageInfoLoading: true\r\n });\r\n\r\n const selectedSuite = getState().suite.selectedSuite;\r\n const suiteCode = selectedSuite.suiteCode;\r\n requestObject.suiteCode = suiteCode;\r\n const selectedRate = selectedSuite.nightlyRate;\r\n const offerType = getState().plans.offerType || '';\r\n\r\n const apiClient = new AvailabilityApiClient('v2.3');\r\n const response = await apiClient.getAvailabilityBySuite(suiteCode, requestObject);\r\n\r\n if (!response.data) {\r\n const errorCode = await response.json();\r\n\r\n if (errorCode) {\r\n gaTrackingPlanSearchErrorCode(JSON.stringify(errorCode));\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: []\r\n });\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_PACKAGE_AVAILABILITY_INFO_ERROR,\r\n packageAvailabilityList: []\r\n });\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_AVAILABILITY_DETAILS_ERROR,\r\n error: {\r\n errorCode: errorCode,\r\n offerCode: requestObject.OfferCode\r\n }\r\n });\r\n failureCallback();\r\n return;\r\n }\r\n }\r\n\r\n if (response.data.suiteRates && response.data.suiteRates.length > 0) {\r\n response.data.suiteRates = response.data.suiteRates.map(rate => {\r\n rate['roomAdjustmentTax'] = rate['roomAdjustmentTax'] || 12.5;\r\n return rate;\r\n });\r\n }\r\n\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_SUCCESS,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: [...response.data.suiteRates],\r\n suiteLcoPackage: response.data.lco,\r\n flexTripAllowed: response.data.isFlexTripAllowed ?? false,\r\n flexPackage: response.data.flexTripPackage,\r\n dayType: response.data.dayType,\r\n personalizationPackageRules: response.data.pr,\r\n personalizationResponses: response.data.rr,\r\n responseHasPackages: response.data.packageTable && response.data.packageTable.length > 0 ? true : false,\r\n suiteDetailsFetchSuccess: true,\r\n availabilityKey: response.data?.availabilityKey,\r\n taxesAndFeesDetailAvailability: response.data?.taxesAndFees,\r\n rateCode: getTheFirstElementOfArray(response.data?.suiteRates ?? [])?.rateCode\r\n });\r\n\r\n dispatch({ type: suiteActionTypes.SET_SUITE_PERSONALIZATION_PACKAGES });\r\n\r\n dispatch({\r\n type: suiteActionTypes.SET_SUITE_PLAN_PACKAGES_INFO_SUCCESS,\r\n planPackages: response.data.packageTable,\r\n getPlanPackageInfoLoading: false\r\n });\r\n\r\n const isNotSameOffer = offerType !== OFFER_CODE_TYPE.group;\r\n const isRateNotSame = selectedRate\r\n ? selectedRate.toFixed(2) !== response.data.suiteRates[0].totalNightlyRate.toFixed(2)\r\n : false;\r\n\r\n if (!skipCompareValidation && isNotSameOffer && isRateNotSame && !requestObject.isDateChanged) {\r\n gaTrackingPlanSearchErrorCode(MISMATCH);\r\n\r\n // WILL BE COMMENTED BY US 44687 FOR TESTING MISMATCH\r\n // dispatch({\r\n // type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_INFO,\r\n // suiteRateMismatched: true\r\n // });\r\n }\r\n } catch (err) {\r\n gaTrackingPlanSearchErrorCode(JSON.stringify(err));\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR,\r\n getAvailabilityLoading: false,\r\n suiteStoreErrorMessage: `Oops! ${\r\n err.validationErrors && err.validationErrors.errorCode ? err.validationErrors.errorCode : err.message\r\n }`,\r\n suiteDetailedAvailability: [],\r\n getPlanPackageInfoLoading: false\r\n });\r\n dispatch({\r\n type: suiteActionTypes.CLEAR_SUITE_SELECTED\r\n });\r\n failureCallback();\r\n throw err;\r\n }\r\n};\r\nexport const clearSelectedSuite = () => {\r\n return {\r\n type: suiteActionTypes.CLEAR_SUITE_SELECTED,\r\n selectedSuite: null,\r\n suiteRateMismatched: false,\r\n suiteDetailedAvailability: []\r\n };\r\n};\r\n\r\n/**\r\n * Post API call to get upgraded suite details\r\n */\r\n\r\nexport const updateSuiteRates = newSuiteRates => dispatch => {\r\n dispatch({\r\n type: suiteActionTypes.SET_SUITE_NEW_RATES,\r\n suiteDetailedAvailability: newSuiteRates\r\n });\r\n};\r\nexport const resetAvailabilityCall = () => dispatch => {\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_RESET\r\n });\r\n};\r\nexport const updateRateCodes = (requestObject, newSelectedSuite) => async (dispatch, getState) => {\r\n delete requestObject.skipCompareValidation;\r\n\r\n try {\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_INFO,\r\n getAvailabilityLoading: true\r\n });\r\n\r\n const suiteCode = newSelectedSuite.suiteCode;\r\n requestObject.suiteCode = suiteCode;\r\n const apiClient = new AvailabilityApiClient('v2.3');\r\n const response = await apiClient.getAvailabilityBySuite(suiteCode, requestObject);\r\n\r\n if (!response.data) {\r\n const errorCode = await response.json();\r\n\r\n if (errorCode) {\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: []\r\n });\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_AVAILABILITY_DETAILS_ERROR,\r\n error: {\r\n errorCode: errorCode,\r\n offerCode: requestObject.OfferCode\r\n }\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (response.data.suiteRates && response.data.suiteRates.length > 0) {\r\n response.data.suiteRates = response.data.suiteRates.map(rate => {\r\n rate['roomAdjustmentTax'] = rate['roomAdjustmentTax'] || 12.5;\r\n return rate;\r\n });\r\n }\r\n\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_SUCCESS,\r\n getAvailabilityLoading: false,\r\n suiteDetailedAvailability: [...response.data.suiteRates],\r\n suiteLcoPackage: response.data.lco,\r\n flexTripAllowed: response.data.isFlexTripAllowed ?? false,\r\n flexPackage: response.data.flexTripPackage,\r\n dayType: response.data.dayType,\r\n personalizationPackageRules: response.data.pr,\r\n personalizationResponses: response.data.rr,\r\n responseHasPackages: response.data.packageTable && response.data.packageTable.length > 0 ? true : false,\r\n suiteDetailsFetchSuccess: true,\r\n availabilityKey: response.data?.availabilityKey,\r\n taxesAndFeesDetailAvailability: response.data?.taxesAndFees,\r\n rateCode: getTheFirstElementOfArray(response.data?.suiteRates ?? [])?.rateCode\r\n });\r\n\r\n dispatch({ type: suiteActionTypes.SET_SUITE_PERSONALIZATION_PACKAGES });\r\n\r\n dispatch({\r\n type: suiteActionTypes.SET_SUITE_PLAN_PACKAGES_INFO_SUCCESS,\r\n planPackages: response.data.packageTable,\r\n getPlanPackageInfoLoading: false\r\n });\r\n dispatch({ type: suiteActionTypes.SELECT_SUITE, selectedSuite: newSelectedSuite });\r\n } catch (err) {\r\n gaTrackingPlanSearchErrorCode(JSON.stringify(err));\r\n dispatch({\r\n type: suiteActionTypes.GET_SUITE_DETAILED_AVAILABILITY_ERROR,\r\n getAvailabilityLoading: false,\r\n suiteStoreErrorMessage: `Oops! ${\r\n err.validationErrors && err.validationErrors.errorCode ? err.validationErrors.errorCode : err.message\r\n }`,\r\n suiteDetailedAvailability: [],\r\n getPlanPackageInfoLoading: false\r\n });\r\n dispatch({\r\n type: suiteActionTypes.CLEAR_SUITE_SELECTED\r\n });\r\n\r\n throw err;\r\n }\r\n};\r\n","import { number as validCreditCardNumber } from 'card-validator';\r\nimport { PHONE_MASK_REGEX } from '../../../utilities/constants';\r\nimport { errors } from '../../PaymentForm/ValidationMessages';\r\nimport unmaskValue from '../unmaskValue';\r\n\r\nexport const phoneRegExp = /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/;\r\nexport const onlyNumberRegExp = /^[0-9]+$/;\r\nexport const notOnlyWhiteSpacesRegExp = /^(?!\\s*$).+/;\r\n\r\n/**\r\n * Method to validate the specified length of the string\r\n * @param {string} input\r\n * @param {number} length\r\n * @returns {boolean}\r\n */\r\nexport const validateDigitsLength = (input, length) => {\r\n if (!input) return true;\r\n const digitValidation = new RegExp(`^[0-9]{${length}}$`);\r\n const unmaskedValue = unmaskValue(input, PHONE_MASK_REGEX);\r\n return digitValidation.test(unmaskedValue);\r\n};\r\n\r\n/**\r\n * Method to validate the length of the creadit card number. Is used in reservations lookups\r\n * Where the last numbers of the credit card are needed\r\n * @param {string} creditCardNumber\r\n * @param {number} length\r\n */\r\nexport const validateCreditCardLength = (creditCardNumber, length = 4) => {\r\n return validateDigitsLength(creditCardNumber, length);\r\n};\r\n\r\n/**\r\n * Validate if the input are only digits\r\n * @param {string} input\r\n */\r\nexport const onlyDigitsValidation = input => {\r\n if (!input) return true;\r\n const digitValidation = new RegExp(onlyNumberRegExp);\r\n const unmaskedValue = unmaskValue(input, PHONE_MASK_REGEX);\r\n return digitValidation.test(unmaskedValue);\r\n};\r\n\r\n/**\r\n * Validates if a string length is between a range. The length must be bigger than min param and less than max param\r\n * @param {string} input\r\n * @param {number} min\r\n * @param {number} max\r\n */\r\nexport const strLenIsBetweenRange = (input, min, max) => {\r\n if (!input) return true;\r\n const inputLength = input.length;\r\n return inputLength > min && inputLength < max;\r\n};\r\n\r\n/**\r\n * Validate a credit card number using card-validator package.\r\n * If the value is empty we return true so this validation can be passed to the\r\n * is required method, otherwise this method would be the only one running.\r\n * @param {string} ccNumber Credit card number\r\n * @return {boolean} True if the credit card number is valid, also true if is\r\n * empty so this could fallback to other Yup methods like .isRequired()\r\n */\r\nexport const validateCreditCardNumber = function(ccNumber, amexEnabled) {\r\n if (!ccNumber) return true;\r\n\r\n const ccValidTypes = ['visa', 'mastercard', 'american-express', 'discover'];\r\n\r\n const { isValid, card } = validCreditCardNumber(ccNumber);\r\n\r\n if (!isValid || !ccValidTypes.includes(card.type)) {\r\n return this.createError({\r\n message: errors.VALID_CREDIT_CARD_NUMBER\r\n });\r\n }\r\n\r\n if (!amexEnabled && card.type === 'american-express') {\r\n return this.createError({ message: errors.VALID_CREDIT_CARD_TYPE });\r\n }\r\n\r\n return true;\r\n};\r\n","import React from 'react';\r\nimport Box from '../../ui-kit/Box';\r\nimport Flex from '../../ui-kit/Flex';\r\n\r\nconst SummaryItem = ({ leftColumn, centerColumn, rightColumn, bold, highlight, labelTitle, mb, ...props }) => (\r\n <Flex\r\n role=\"complementary\"\r\n aria-label={`Summary Item ${labelTitle ? labelTitle : ''}`}\r\n mb={mb ?? 3}\r\n flexFirection=\"row\"\r\n justifyContent=\"flex-end\"\r\n {...props}>\r\n <Box width={[2 / 3, 2 / 3, 3 / 4, 1 / 2, 1 / 2, 2 / 3]}>{leftColumn}</Box>\r\n <Box width={[1 / 3, 1 / 3, 1 / 4, 1 / 2, 1 / 2, 1 / 3]}>\r\n <Flex flexDirection=\"row\" justifyContent=\"flex-end\">\r\n <Box mr={2}>{centerColumn}</Box>\r\n <Box>{rightColumn}</Box>\r\n </Flex>\r\n </Box>\r\n </Flex>\r\n);\r\n\r\nexport default SummaryItem;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useRef, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\nimport Relative from './Relative';\r\nimport Text from './Text';\r\nimport theme from './themes/theme';\r\n\r\nconst ALIGNMENT = {\r\n right: 'right',\r\n left: 'left',\r\n center: 'center'\r\n};\r\n\r\n/**\r\n * Tooltip component used to display complementary information\r\n * when the user hovers the trigger component\r\n * @param {Object} props Props object.\r\n * @param {string} props.ariaKey Unique string ID in order to attend ADA Compliance\r\n * @param {number} props.tooltipWidth Tooltip width\r\n * @param {string} props.borderColor Tooltip border and detail color\r\n * @param {string} props.title Tooltip text content\r\n * @param {string} props.textAlign Tooltip text content alignment\r\n * @param {string} props.textColor Tooltip text content color\r\n * @param {object} props.triggerComponent Component that will be rendered to open the tooltip\r\n * @param {function} props.tooltipContent Tooltip component that will override the default one\r\n * @param {string} props.alignment Tooltip alignment, either: center, left or\r\n * right.\r\n */\r\nconst Tooltip = ({\r\n mobileAlignment = false,\r\n alignment,\r\n verticalAlignment,\r\n tooltipWidth,\r\n borderRadius,\r\n tooltipContent,\r\n triggerComponent,\r\n ariaKey,\r\n borderColor,\r\n textAlign,\r\n textColor,\r\n title,\r\n fontSize\r\n}) => {\r\n const triggerRef = useRef(null);\r\n const tooltipRef = useRef(null);\r\n const tooltipContainerRef = useRef(null);\r\n\r\n const [tooltipVisibility, setTooltipVisibility] = useState(false);\r\n const hasCurrentTriggerRef = triggerRef && triggerRef.current;\r\n const hasCurrentTooltipRef = tooltipRef && tooltipRef.current;\r\n const containerOffset = tooltipContainerRef?.current?.getBoundingClientRect();\r\n\r\n const getHorizontalOffset = () => {\r\n if (mobileAlignment && tooltipContainerRef.current) {\r\n return -containerOffset.left + triggerRef.current.offsetWidth * 2;\r\n }\r\n if (alignment === ALIGNMENT.left || !hasCurrentTriggerRef || !hasCurrentTooltipRef) {\r\n return -(tooltipWidth - 30);\r\n }\r\n\r\n if (alignment === ALIGNMENT.right) {\r\n return 0;\r\n }\r\n\r\n return -((tooltipWidth - triggerRef.current.offsetWidth) / 2);\r\n };\r\n\r\n const topOffset = hasCurrentTriggerRef ? triggerRef.current.offsetHeight + theme.space[2] : 0;\r\n\r\n const leftOffset = getHorizontalOffset();\r\n\r\n const TooltipContent = tooltipContent;\r\n const TriggerComponent = triggerComponent;\r\n\r\n return (\r\n <Relative\r\n ref={tooltipContainerRef}\r\n role=\"complementary\"\r\n aria-label={`${ariaKey}`}\r\n onMouseOver={() => {\r\n setTooltipVisibility(true);\r\n }}\r\n onMouseLeave={() => {\r\n setTooltipVisibility(false);\r\n }}>\r\n <TriggerComponent triggerRef={triggerRef} />\r\n\r\n <TooltipContainer\r\n ref={tooltipRef}\r\n tooltipVisibility={tooltipVisibility}\r\n tooltipWidth={tooltipWidth}\r\n borderRadius={borderRadius}\r\n top={topOffset}\r\n verticalAlignment={verticalAlignment}\r\n left={leftOffset}\r\n borderColor={borderColor}\r\n textAlign={textAlign}\r\n alignment={alignment}\r\n mobileAlignment={mobileAlignment}\r\n containerLeft={containerOffset?.left}\r\n triggerWidth={triggerRef?.current?.offsetWidth}>\r\n <TooltipContent color={textColor}>{fontSize ? <Text fontSize={fontSize}>{title}</Text> : title}</TooltipContent>\r\n </TooltipContainer>\r\n </Relative>\r\n );\r\n};\r\n\r\nconst DefaultTriggerComponent = styled.div`\r\n padding-left: ${`${theme.space[1]}px`};\r\n padding-right: ${`${theme.space[1]}px`};\r\n background-color: ${theme.colors.snowMountainGrey[100]};\r\n border: 1px solid ${theme.colors.deepForestGreenBorder};\r\n color: ${theme.colors.preciousStoneBlue[100]};\r\n font-weight: bold;\r\n font-size: ${`${theme.fontSizes[0]}px`};\r\n\r\n cursor: pointer;\r\n`;\r\n\r\nconst TooltipContainer = styled.div`\r\n width: ${props => `${props.tooltipWidth}px`};\r\n display: ${props => (props.tooltipVisibility ? 'unset' : 'none')};\r\n position: absolute;\r\n left: ${props => `${props.left}px`};\r\n ${props => (props.verticalAlignment === 'bottom' ? `bottom: ${props.top}` : `top: ${props.top}`)}px;\r\n z-index: ${theme.zIndex.floatingButton};\r\n border: ${props => `1px solid ${props.borderColor}`};\r\n padding: ${`${theme.space[3]}px`};\r\n background-color: ${theme.colors.pureWhite[0]};\r\n text-align: ${props => props.textAlign};\r\n border-radius: ${props => props.borderRadius};\r\n\r\n &::after {\r\n content: ' ';\r\n position: absolute;\r\n bottom: calc(100% + 1px);\r\n\r\n border-width: 5px;\r\n border-style: solid;\r\n border-color: ${props =>\r\n props.verticalAlignment === 'bottom'\r\n ? 'transparent'\r\n : `transparent transparent ${props.borderColor} transparent`};\r\n ${props => {\r\n if (props.mobileAlignment) {\r\n return css`\r\n left: ${props.containerLeft - props.triggerWidth * 1.6}px;\r\n `;\r\n }\r\n\r\n if (props.alignment === ALIGNMENT.left) {\r\n return css`\r\n right: 17px;\r\n `;\r\n }\r\n\r\n if (props.alignment === ALIGNMENT.right) {\r\n return css`\r\n left: 5px;\r\n `;\r\n }\r\n\r\n if (props.alignment === ALIGNMENT.center) {\r\n return css`\r\n left: 50%;\r\n margin-left: -5px;\r\n `;\r\n }\r\n }}\r\n }\r\n`;\r\n\r\nTooltip.defaultProps = {\r\n ariaKey: 'Tooltip',\r\n tooltipWidth: 290,\r\n borderColor: theme.colors.deepForestGreenBorder,\r\n title: 'Tooltip Content',\r\n textAlign: 'left',\r\n textColor: theme.colors.nightSkyBlack[60],\r\n triggerComponent: props => <DefaultTriggerComponent ref={props.triggerRef}>?</DefaultTriggerComponent>,\r\n tooltipContent: props => (\r\n <Text color={props.textColor} fontSize={1} fontWeight={theme.fontWeights.normal}>\r\n {props.children}\r\n </Text>\r\n ),\r\n alignment: ALIGNMENT.center\r\n};\r\n\r\nTooltip.propTypes = {\r\n ariaKey: PropTypes.string,\r\n tooltipWidth: PropTypes.number,\r\n borderColor: PropTypes.string,\r\n title: PropTypes.string,\r\n textAlign: PropTypes.string,\r\n textColor: PropTypes.string,\r\n triggerComponent: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\r\n tooltipContent: PropTypes.func,\r\n alignment: PropTypes.oneOf(Object.values(ALIGNMENT))\r\n};\r\nexport default Tooltip;\r\n","import React from 'react'\n\nconst ArrowRightIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 25 15'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M24.078 7.198C24.058 7.046 23.994 6.795 23.897 6.676L18.915 0.410997C18.619 0.0389968 18.087 0.00699687 17.747 0.280997C17.407 0.553997 17.346 1.114 17.617 1.456L21.523 6.363H0.83C0.372 6.363 0 6.737 0 7.198C0 7.66 0.372 8.034 0.83 8.034H21.523L17.618 12.941C17.346 13.283 17.422 13.825 17.748 14.116C18.087 14.42 18.643 14.327 18.915 13.986L23.897 7.72C24.037 7.547 24.067 7.419 24.078 7.198V7.198Z' />\n </svg>\n)\n\nArrowRightIcon.displayName = 'ArrowRightIcon'\n\nArrowRightIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default ArrowRightIcon","// Dates action types\r\n\r\nconst datesActionTypes = {\r\n UPDATE_DATES: 'UPDATE_DATES',\r\n CLEAR_DATES: 'CLEAR_DATES',\r\n UPDATE_DATES_SIP: 'UPDATE_DATES_SIP',\r\n FETCHING_DATES_SIP: 'FETCHING_DATES_SIP',\r\n UPDATE_DATES_SIP_ERROR: 'UPDATE_DATES_SIP_ERROR'\r\n};\r\n\r\nexport default datesActionTypes;\r\n","import React from 'react'\n\nconst CarouselChevronRigthThinIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 551.13 551.13'\n width={size}\n height={size}\n fill={color}\n >\n <path d='m361.679 275.565-223.896 223.897v51.668l275.565-275.565-275.565-275.565v51.668z' />\n </svg>\n)\n\nCarouselChevronRigthThinIcon.displayName = 'CarouselChevronRigthThinIcon'\n\nCarouselChevronRigthThinIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CarouselChevronRigthThinIcon","import ManageBookingApiClient from '../../../api/clients/ManageBookingApiClient';\r\nimport { getErrorMessage } from '../../../utilities/messageUtils';\r\nimport manageReservationTypes from './managereservation.types';\r\n\r\nexport const getManageReservationDetails = reservationId => async dispatch => {\r\n dispatch({ type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_REQUEST });\r\n\r\n try {\r\n const manageBookingApiClient = new ManageBookingApiClient();\r\n const manageBookingResponse = await manageBookingApiClient.manageBooking(reservationId);\r\n dispatch({\r\n type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_SUCCESS,\r\n response: manageBookingResponse?.data\r\n });\r\n } catch (err) {\r\n dispatch({\r\n type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_FAILURE,\r\n message: getErrorMessage(err.message)\r\n });\r\n }\r\n};\r\n\r\nexport const getReservationsByIdAndLastName = (reservationId, lastName) => async dispatch => {\r\n dispatch({ type: manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME });\r\n\r\n try {\r\n const manageBookingApiClient = new ManageBookingApiClient();\r\n const manageBookingResponse = await manageBookingApiClient.loginReservationByIdAndLastName(reservationId, lastName);\r\n dispatch({\r\n type: manageReservationTypes.CLEAR_MANAGERESERVATIONDETAILS\r\n });\r\n dispatch({\r\n type: manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS,\r\n response: manageBookingResponse?.data\r\n });\r\n } catch (err) {\r\n dispatch({\r\n type: manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME_FAILURE,\r\n message: getErrorMessage(err.message)\r\n });\r\n }\r\n};\r\n\r\nexport const getReservationDetailsByReservationIdAndReservationKey = (\r\n reservationId,\r\n reservationkey\r\n) => async dispatch => {\r\n try {\r\n dispatch({ type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_REQUEST });\r\n\r\n const manageBookingAPI = new ManageBookingApiClient();\r\n const response = await manageBookingAPI.loginReservationsByIdAndReservationKey(reservationId, reservationkey);\r\n\r\n if (!response.data) {\r\n throw new Error();\r\n }\r\n\r\n dispatch({\r\n type: manageReservationTypes.GET_RESERVATION_BY_ID_AND_LAST_NAME_SUCCESS,\r\n response: response?.data\r\n });\r\n\r\n let updateBookingInfo;\r\n if (response) {\r\n updateBookingInfo = await manageBookingAPI.manageBooking(reservationId);\r\n }\r\n\r\n dispatch({\r\n type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_SUCCESS,\r\n response: updateBookingInfo.data\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: manageReservationTypes.GET_MANAGERESERVATIONDETAILS_FAILURE,\r\n message: getErrorMessage(error.message)\r\n });\r\n }\r\n};\r\n\r\nexport const clearManageReservationDetails = () => ({\r\n type: manageReservationTypes.CLEAR_MANAGERESERVATIONDETAILS\r\n});\r\n","const RESORT_LOCATION_URL_PARAM_POSITION = 1;\r\n\r\n/**\r\n * This function gets the resort location from the URL.\r\n * @returns {string} The resort location URL.\r\n */\r\nexport const getResortLocationUrl = () => {\r\n const urlParts = window.location.pathname.split('/');\r\n const resortLocation = urlParts[RESORT_LOCATION_URL_PARAM_POSITION];\r\n\r\n return `/${resortLocation}/`;\r\n};\r\n","import styled from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\n\r\nimport CarouselChevronRightThinIcon from '../icons/CarouselChevronRigthThin';\r\nimport { Flex, Text } from '../index';\r\nimport { mediaQueries } from '../themes/theme';\r\n\r\nexport const Container = styled(Flex)`\r\n ${({ borderColor }) => `border: 1px solid ${borderColor || 'transparent'};`}\r\n border-radius: ${themeGet('radii.5')}px;\r\n padding: ${themeGet('space.3')}px ${themeGet('space.3')}px;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n\r\n ${mediaQueries.lg} {\r\n padding: ${themeGet('space.2')}px ${themeGet('space.4')}px;\r\n }\r\n`;\r\n\r\nexport const Image = styled.img`\r\n margin-right: ${themeGet('space.2')}px;\r\n height: 80px;\r\n width: 80px;\r\n align-self: center;\r\n`;\r\n\r\nexport const Title = styled(Text)`\r\n font-size: ${themeGet('fontSizes.7')}px;\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n\r\n ${mediaQueries.lg} {\r\n font-size: ${themeGet('fontSizes.4')}px;\r\n }\r\n`;\r\n\r\nexport const Description = styled(Text)`\r\n font-size: ${themeGet('fontSizes.0')}px;\r\n font-weight: ${themeGet('fontWeights.medium')};\r\n margin-top: 12px;\r\n ${mediaQueries.lg} {\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n }\r\n`;\r\n\r\nexport const RightArrow = styled(CarouselChevronRightThinIcon)`\r\n align-self: flex-start;\r\n`;\r\n","import { LocalStorageKeys } from '../../../utilities/storageUtils';\r\n\r\nexport const loadState = (preloadedStates = {}) => {\r\n try {\r\n const serializedState = localStorage.getItem(LocalStorageKeys.REDUX_LOCAL_STORAGE);\r\n if (serializedState === undefined || serializedState === null) {\r\n return undefined;\r\n }\r\n\r\n let jsonSerializedState = JSON.parse(serializedState);\r\n\r\n for (let key in preloadedStates) {\r\n let [stateName, stateProperty, stateSubProperty] = key.split('.');\r\n if (jsonSerializedState[stateName]) {\r\n if (stateSubProperty && jsonSerializedState[stateName][stateProperty]) {\r\n jsonSerializedState[stateName][stateProperty][stateSubProperty] = preloadedStates[key];\r\n } else {\r\n jsonSerializedState[stateName][stateProperty] = preloadedStates[key];\r\n }\r\n }\r\n }\r\n\r\n return jsonSerializedState;\r\n } catch (err) {\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const saveState = (state, itemsToRemove) => {\r\n try {\r\n const stateToSave = makeCopy(state, Object.keys(itemsToRemove));\r\n const serializedState = JSON.stringify(stateToSave);\r\n localStorage.setItem(LocalStorageKeys.REDUX_LOCAL_STORAGE, serializedState);\r\n } catch {\r\n // ignore write errors\r\n return null;\r\n }\r\n};\r\n\r\nexport const deleteState = () => {\r\n try {\r\n localStorage.removeItem(LocalStorageKeys.REDUX_LOCAL_STORAGE);\r\n } catch (err) {\r\n return null;\r\n }\r\n};\r\n\r\nconst objConstrcutor = {}.constructor;\r\nconst dehydrateCopy = true;\r\n\r\nconst makeCopy = (src, exceptionKeys, srcKey = '') => {\r\n srcKey = srcKey || '';\r\n exceptionKeys = exceptionKeys || [];\r\n if (src != null && src !== undefined && (srcKey.length === 0 || !exceptionKeys.includes(srcKey))) {\r\n const isObject = src.constructor === objConstrcutor;\r\n\r\n if (isObject) {\r\n let copyObj = {};\r\n Object.keys(src).forEach(key => {\r\n const compositeKey = srcKey.length > 0 ? srcKey + '.' + key : key;\r\n\r\n const copiedVal = makeCopy(src[key], exceptionKeys, compositeKey);\r\n if (!dehydrateCopy || (copiedVal != null && copiedVal !== undefined)) {\r\n copyObj[key] = copiedVal;\r\n }\r\n });\r\n return !dehydrateCopy || Object.keys(copyObj).length > 0 ? copyObj : null;\r\n } else if (Array.isArray(src)) {\r\n const compositeKey = srcKey.length > 0 ? srcKey + '.[]' : '[]';\r\n\r\n const copiedVal = src\r\n .map(item => makeCopy(item, exceptionKeys, compositeKey))\r\n .filter(item => !dehydrateCopy || (item != null && item !== undefined));\r\n return !dehydrateCopy || copiedVal.length > 0 ? copiedVal : null;\r\n } else {\r\n return JSON.parse(JSON.stringify(src));\r\n }\r\n }\r\n};\r\n","// PreCheckIn action types\r\n\r\nconst preCheckInActionTypes = {\r\n UPDATE_PRE_CHECK_IN_STEP: 'UPDATE_PRE_CHECK_IN_STEP',\r\n UPDATE_PRE_CHECK_IN_ADDED_PACKAGES_FAILED: 'UPDATE_PRE_CHECK_IN_ADDED_PACKAGES_FAILED',\r\n RESET_PRE_CHECK_IN_ADDED_PACKAGES_FAILED: 'RESET_PRE_CHECK_IN_ADDED_PACKAGES_FAILED',\r\n UPDATE_PRE_CHECK_IN_NEW_PACKAGES: 'UPDATE_PRE_CHECK_IN_NEW_PACKAGES',\r\n UPDATE_PRE_CHECK_IN_VIRDEE_REDIRECTION_FAILED: 'UPDATE_PRE_CHECK_IN_VIRDEE_REDIRECTION_FAILED'\r\n};\r\n\r\nexport default preCheckInActionTypes;\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Item endpoints\r\n *\r\n * @class ItemApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class ItemApiClient extends GWRApiClient {\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v2`;\r\n\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_ITEM_SERVICE_ENDPOINT, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function returns the number of available items per day with price and taxes\r\n *\r\n * @function\r\n * @param {Arrival: date, Departure: date, Property: string, ItemCodes: string}\r\n * Example: {Arrival: 2019-10-01, Departure: 2019-10-02, Property: GURNIL, ItemCodes: LCO/CA,}\r\n */\r\n async fetchItemQuantity(itemQuantityRequest) {\r\n const urlRequest = `${this.url}/quantity`;\r\n\r\n let request = await super.getApiCall(urlRequest, itemQuantityRequest);\r\n\r\n return request;\r\n }\r\n}\r\n","const codes = ['BBAR', 'BARC'];\r\n\r\nexport const isBBAR = code => {\r\n return codes.includes(code);\r\n};\r\n","import GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for document storage endpoints\r\n *\r\n * @class DocumentStoreApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class DocumentStoreApiClient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * set a common url to call (urlRequest)\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(url, token = '') {\r\n super(url, token);\r\n this.urlRequest = url;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get the item for the current user logged in\r\n */\r\n async getAll() {\r\n let request = await super.getApiCallAuth(this.urlRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Insert/Update item data for the current user logged in\r\n * @param {string} data\r\n */\r\n async upsert(data) {\r\n let request = await super.postApiCallAuth(this.urlRequest, data);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Send a Delete request for the item of the current user logged in\r\n */\r\n async deleteAll() {\r\n let request = await super.deleteApiCallAuth(this.urlRequest);\r\n\r\n return request;\r\n }\r\n}\r\n","import uuidv4 from 'uuid/v4';\r\nimport DocumentStoreApiClient from '../api/clients/DocumentStoreApiClient';\r\n\r\nexport default class DocumentStoreRepository {\r\n constructor(url, storageKey, token = '') {\r\n this.storageKey = storageKey;\r\n this.apiClient = new DocumentStoreApiClient(url, token);\r\n }\r\n\r\n async set(data) {\r\n let stringData = JSON.stringify(data);\r\n localStorage.setItem(this.storageKey, stringData);\r\n }\r\n\r\n async setAuth(data) {\r\n let stringData = JSON.stringify(data);\r\n const requestObject = { data: stringData };\r\n return this.apiClient.upsert(requestObject);\r\n }\r\n\r\n async getAll() {\r\n let documentData = [];\r\n\r\n documentData = JSON.parse(localStorage.getItem(this.storageKey));\r\n documentData = documentData ? documentData : [];\r\n\r\n return documentData;\r\n }\r\n\r\n async getAllAuth() {\r\n let documentData = [];\r\n\r\n await this.apiClient.getAll().then(\r\n response => {\r\n try {\r\n documentData = JSON.parse(response.data);\r\n // The response may comes as a string over string\r\n if (typeof documentData === 'string') {\r\n documentData = JSON.parse(documentData);\r\n }\r\n } catch {\r\n documentData = [];\r\n }\r\n },\r\n err => {\r\n return err;\r\n }\r\n );\r\n\r\n return documentData;\r\n }\r\n\r\n async getById(dataList, dataId) {\r\n return dataList.find(x => x.key === dataId);\r\n }\r\n\r\n async add(dataList, data) {\r\n let dataGuuid = uuidv4();\r\n dataGuuid = dataGuuid.replace(/-/g, '');\r\n\r\n try {\r\n let dataToAdd = {\r\n ...data,\r\n key: dataGuuid,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n };\r\n\r\n // add element at the top of the array\r\n dataList.unshift(dataToAdd);\r\n\r\n await this.set(dataList);\r\n\r\n return dataList;\r\n } catch (error) {\r\n throw new Error('Error adding the item');\r\n }\r\n }\r\n\r\n async addAuth(dataList, data) {\r\n let dataGuuid = uuidv4();\r\n\r\n try {\r\n let dataToAdd = {\r\n ...data,\r\n key: dataGuuid,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n };\r\n\r\n // add element at the top of the array\r\n dataList.unshift(dataToAdd);\r\n\r\n await this.setAuth(dataList);\r\n\r\n return dataList;\r\n } catch (error) {\r\n throw new Error('Error adding the item');\r\n }\r\n }\r\n\r\n async update(dataList, data) {\r\n try {\r\n let foundIndex = dataList.findIndex(x => x.key === data.key);\r\n dataList[foundIndex] = data;\r\n\r\n await this.set(dataList);\r\n\r\n return dataList;\r\n } catch (error) {\r\n throw new Error('Error on update the item');\r\n }\r\n }\r\n\r\n async updateAuth(dataList, data) {\r\n try {\r\n let foundIndex = dataList.findIndex(x => x.key === data.key);\r\n dataList[foundIndex] = data;\r\n\r\n await this.setAuth(dataList);\r\n\r\n return dataList;\r\n } catch (error) {\r\n throw new Error('Error on update the item');\r\n }\r\n }\r\n\r\n async deleteById(dataList, dataId) {\r\n let filteredData = dataList.filter(x => x.key !== dataId);\r\n\r\n await this.set(filteredData);\r\n\r\n return filteredData;\r\n }\r\n\r\n async deleteByIdAuth(dataList, dataId) {\r\n let filteredData = dataList.filter(x => x.key !== dataId);\r\n\r\n await this.setAuth(filteredData);\r\n\r\n return filteredData;\r\n }\r\n\r\n async deleteAll() {\r\n localStorage.removeItem(this.storageKey);\r\n return [];\r\n }\r\n\r\n async deleteAllAuth() {\r\n return this.apiClient.deleteAll().then(\r\n response => {\r\n return [];\r\n },\r\n err => {\r\n return err;\r\n }\r\n );\r\n }\r\n}\r\n","import uuidv4 from 'uuid/v4';\r\nimport { API_URLS, getApiUrl } from '../api/Utils/apiURLConfiguration';\r\nimport { LocalStorageKeys } from '../utilities/storageUtils';\r\nimport DocumentStoreRepository from './DocumentStoreRepository';\r\n\r\nconst listLength = 10;\r\n\r\nexport default class RecentSearchesRepository extends DocumentStoreRepository {\r\n constructor() {\r\n let urlAux = getApiUrl(API_URLS.REACT_APP_RECENT_SEARCHES_SERVICE_ENDPOINT, 'v1');\r\n let completeUrl = `${urlAux}/profiles/webusers/recent-searches`;\r\n\r\n super(completeUrl, LocalStorageKeys.RecentSearches);\r\n }\r\n\r\n async setRecentSearch(recentSearchData) {\r\n if (this.apiClient.isLoggedIn) {\r\n return super.setAuth(recentSearchData);\r\n } else {\r\n super.set(recentSearchData);\r\n }\r\n }\r\n\r\n async getAllRecentSearches() {\r\n let recentSearchesData = [];\r\n if (this.apiClient.isLoggedIn) {\r\n recentSearchesData = super.getAllAuth();\r\n } else {\r\n recentSearchesData = super.getAll();\r\n }\r\n\r\n return recentSearchesData;\r\n }\r\n\r\n async addNewRecentSearch(recentSearchesList, recentSearchData) {\r\n let recentSearchGuuid = uuidv4();\r\n\r\n try {\r\n let recentSearchToAdd = {\r\n ...recentSearchData,\r\n key: recentSearchGuuid,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n };\r\n\r\n // If something fails then we don't mess up with the current recentSearchesList.\r\n // Get the first 9 elements\r\n let recentSearchesListClone = recentSearchesList.slice(0, listLength - 1);\r\n\r\n // add element at the top of the array\r\n recentSearchesListClone.unshift(recentSearchToAdd);\r\n\r\n await this.setRecentSearch(recentSearchesListClone);\r\n\r\n return recentSearchesListClone;\r\n } catch (error) {\r\n throw new Error('Error adding the recent search');\r\n }\r\n }\r\n\r\n async updateRecentSearch(recentSearchesList, recentSearchData) {\r\n try {\r\n let foundIndex = recentSearchesList.findIndex(x => x.key === recentSearchData.key);\r\n recentSearchesList[foundIndex] = recentSearchData;\r\n\r\n await this.setRecentSearch(recentSearchesList);\r\n\r\n return recentSearchesList;\r\n } catch (error) {\r\n throw new Error('Error on update the recent search');\r\n }\r\n }\r\n\r\n async deleteRecentSearchById(recentSearchesList, recentSearchId) {\r\n let filteredRecentSearches = recentSearchesList.filter(x => x.key !== recentSearchId);\r\n\r\n await this.setRecentSearch(filteredRecentSearches);\r\n\r\n return filteredRecentSearches;\r\n }\r\n\r\n async deleteRecentSearchesAll() {\r\n if (this.apiClient.isLoggedIn) {\r\n return super.deleteAllAuth();\r\n } else {\r\n super.deleteAll();\r\n return [];\r\n }\r\n }\r\n}\r\n","// Plans Actions\r\n\r\nimport get from 'lodash-es/get';\r\nimport AvailabilityApiClient from '../../../api/clients/AvailabilityApiClient';\r\nimport ItemApiClient from '../../../api/clients/ItemApiClient';\r\nimport RoomBookingApiClient from '../../../api/clients/RoomBookingApiClient';\r\nimport { isBBAR } from '../../../api/Utils/BestAvailableRate';\r\nimport { GwDatesWrapper } from '../../../components/_internal_date_/gwDatesWrapper';\r\nimport { rateCalendarGA } from '../../../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport RecentSearchesRepository from '../../../repositories/RecentSearchesRepository';\r\nimport { getTestValueAB, TESTS_DICTIONARY } from '../../../utilities/ABTesting';\r\nimport {\r\n EVENT_CATEGORIES,\r\n trackVariationHEventError,\r\n trackVariationJEventError\r\n} from '../../../utilities/applicationInsights';\r\nimport { getTheFirstElementOfArray } from '../../../utilities/arraysUtils';\r\nimport { getNormalizedCode } from '../../../utilities/availabilityUtils';\r\nimport { DATE_FORMATS, GTM_EVENT, SUITE_TYPES } from '../../../utilities/constants';\r\nimport { pushEvent } from '../../../utilities/dataLayerUtils';\r\nimport { isDateValid } from '../../../utilities/dates';\r\nimport { getNumberOfBillableGuests } from '../../../utilities/guestsUtils';\r\nimport { getResortLocation } from '../CurrentLodge/currentLodge.selectors';\r\nimport { gaTrackingPlanSearchErrorCode } from '../utilities/util';\r\nimport plansActionTypes from './plans.types';\r\n\r\nconst transformRestrictions = data => {\r\n const dates = Object.keys(data);\r\n return { restrictions: dates.reduce((items, current) => ({ ...items, [current]: data[current].restrictions }), {}) };\r\n};\r\n\r\nexport const getLowestRatesByStayNoSuiteCode = requestObject => async dispatch => {\r\n //If is less than 1 or more than 30 days the API will not run\r\n //======================================================================================\r\n if (\r\n GwDatesWrapper.diff(requestObject.departure, requestObject.arrival, 'days') < 1 ||\r\n GwDatesWrapper.diff(requestObject.departure, requestObject.arrival, 'days') > 30\r\n )\r\n return;\r\n\r\n const apiClient = new RoomBookingApiClient('v1.0');\r\n\r\n try {\r\n const lowestRatesByStayResponse = await apiClient.getLowestRatesForSuiteByStayNoSuiteCode(requestObject);\r\n const { daily, total } = lowestRatesByStayResponse?.data;\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_CALENDAR_RATES_BY_STAY,\r\n lowestRatesByStayList: daily,\r\n lowestRatesByStayListTotal: total\r\n });\r\n dispatch({\r\n type: plansActionTypes.LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION,\r\n lastCalendarRatesDateSelection: {\r\n start: requestObject.arrival,\r\n end: requestObject.departure\r\n }\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n};\r\n\r\nexport const cleanLowestRatesByStayNoSuiteCode = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.CLEAN_PLANS_CALENDAR_RATES_BY_STAY\r\n });\r\n};\r\n\r\nconst getLowestRatesByStay = async (lowestRatesData, requestObject, suiteCode) => {\r\n const apiClient = new RoomBookingApiClient('v1.0');\r\n const shouldFetchRatesByStay =\r\n requestObject.arrival && requestObject.departure && lowestRatesData[requestObject.arrival];\r\n if (!shouldFetchRatesByStay) return {};\r\n\r\n try {\r\n const lowestRatesByStayResponse = await apiClient.getLowestRatesForSuiteByStay(\r\n requestObject,\r\n suiteCode,\r\n requestObject.lodgeCode\r\n );\r\n return lowestRatesByStayResponse?.data;\r\n } catch (err) {\r\n return {};\r\n }\r\n};\r\n\r\nconst getCalendarRates = async (requestObject, suiteCode, dispatch) => {\r\n const apiClient = new RoomBookingApiClient('v1.0');\r\n\r\n const { year, month, numberOfMonths, ...lowestRatesByStayRequestObject } = requestObject;\r\n\r\n const lowestRatesResponse = await apiClient.getLowestRatesForSuite(requestObject, suiteCode, requestObject.lodgeCode);\r\n const { daily } = await getLowestRatesByStay(lowestRatesResponse?.data, lowestRatesByStayRequestObject, suiteCode);\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_CALENDAR_RATES_BY_STAY,\r\n lowestRatesByStayList: daily\r\n });\r\n return { ...(lowestRatesResponse?.data ?? {}), ...daily };\r\n};\r\n\r\nexport const setIsErrorModalAlreadyClosed = value => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_IS_ERROR_MODAL_ALREADY_CLOSED,\r\n value: value\r\n });\r\n};\r\nexport const setIsCartOpenClose = value => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_IS_CART_OPEN_CLOSE,\r\n value\r\n });\r\n};\r\nexport const setIsCartOpenCloseClean = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_IS_CART_OPEN_CLOSE_CLEAN\r\n });\r\n};\r\nexport const setCartReturnedPageLinkClicked = pageToReturn => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED,\r\n pageToReturn: pageToReturn\r\n });\r\n};\r\nexport const setCartReturnedPageLinkClickedClean = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_CART_RETURNED_PAGE_LINK_CLICKED_CLEAN\r\n });\r\n};\r\n// Perform the request search by Phone and Cc to API endpoint\r\nexport const getAvailability = (requestObject, shouldIgnoreOfferCodeError = false) => (dispatch, getState) => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_INFO_LOADING,\r\n shouldIgnoreOfferCodeError: shouldIgnoreOfferCodeError,\r\n availabilityReqIsLoading: true,\r\n offerCodeError: undefined,\r\n availabilityList: []\r\n });\r\n\r\n // This way is the one we are going to use for get the Authorization from the AuthClient\r\n // Call General Availability endpoint to retrieve info on available suites\r\n let apiClient = new AvailabilityApiClient('v2.3');\r\n\r\n const request = apiClient.fetchAvailability(requestObject);\r\n\r\n return request.then(\r\n response => {\r\n const existsValidSuite = response && response.data && response.data.suites && response.data.suites.length > 0;\r\n const errorCode = get(response, 'data.errorCode', undefined);\r\n const promoDescription = get(response, 'data.planDescription', '');\r\n const rateCode = existsValidSuite && response.data.suites[0].rateCode;\r\n const isQualifyIdRequired = get(response, 'data.isQualifyIdRequired', false);\r\n const isIdMeValidationRequired = get(response, 'data.isIdMeValidationRequired', false);\r\n const hasErrorCode = errorCode && requestObject.offerCode && isBBAR(rateCode);\r\n const personalizationRules = response.data.pr;\r\n const personalizationResponses = get(response, 'data.rr', []);\r\n const offerType = get(response, 'data.offerType', '');\r\n const lcoPackages = get(response, 'data.lco', []);\r\n const upsellPackagesContent = get(response, 'data.upsellPackagesContent', []);\r\n const availabilityList = existsValidSuite ? response.data.suites : [{}];\r\n const isTwoRateTypesSuites =\r\n existsValidSuite && response?.data?.suites?.some(suite => suite.rateOptions?.length > 1);\r\n\r\n //This code below until the end tag is for create a tracking for version J and H issues\r\n //======================================================================================\r\n const optimizelyDisplayResortFeeWithTotalInSuiteCardJ = getTestValueAB(\r\n TESTS_DICTIONARY.optimizelyDisplayResortFeeWithTotalInSuiteCardJ,\r\n false\r\n );\r\n const optimizelyDisplayResortFeeWithTotalInSuiteCardH = getTestValueAB(\r\n TESTS_DICTIONARY.optimizelyDisplayResortFeeWithTotalInSuiteCardH,\r\n false\r\n );\r\n const { isCaliforniaResident, latestVersionJEventErrorObj, latestVersionHEventErrorObj } = getState().plans;\r\n const { resortLocation } = getState().currentLodge;\r\n const { pricePerWaterPass } = getState().lodgeConfig;\r\n const { locationList } = getState().lodgeLocations;\r\n const { checkinDateSelection, checkoutDateSelection } = getState().dates;\r\n const { adultsCount, kidsCount, kidsAges } = getState().guests;\r\n const { code } = getState().offer;\r\n const lodgeLocationName = locationList[resortLocation]?.url;\r\n //Start version H tracking code\r\n //=============================\r\n if (optimizelyDisplayResortFeeWithTotalInSuiteCardH) {\r\n const numberOfBillableGuests = getNumberOfBillableGuests(adultsCount, kidsAges);\r\n const numberOfNights = GwDatesWrapper.diff(checkoutDateSelection, checkinDateSelection, 'days');\r\n //Savings percentage calculation START\r\n //=========================================\r\n let savingsLessThanFiveUpperToFithty = [];\r\n availabilityList?.forEach(suite => {\r\n const validGuests = numberOfBillableGuests <= 4 ? 4 : numberOfBillableGuests;\r\n const suiteOnlyRate = suite?.rateOptions?.find(rate => rate.rateType === 'ROOM_ONLY')?.averageNightlyBaseRate;\r\n const suiteWithWaterParkRate = suite?.rateOptions?.find(rate => rate.rateType === 'WITH_WP')\r\n ?.averageNightlyBaseRate;\r\n const DPP_total = pricePerWaterPass * validGuests * (numberOfNights + 1);\r\n const DPP_new = (suiteWithWaterParkRate - suiteOnlyRate) * numberOfNights;\r\n const savings = DPP_total - DPP_new;\r\n const percentage = ((savings / DPP_total) * 100).toFixed();\r\n if (percentage < 5 || percentage > 50) {\r\n savingsLessThanFiveUpperToFithty.push({\r\n suiteName: suite.title,\r\n percentage: percentage + '%'\r\n });\r\n }\r\n });\r\n //Savings percentage calculation END\r\n //===================================\r\n if (savingsLessThanFiveUpperToFithty.length > 0) {\r\n const variationHObj = {\r\n lodge: lodgeLocationName,\r\n dates:\r\n 'Arrival:' +\r\n GwDatesWrapper.format(checkinDateSelection, DATE_FORMATS.default) +\r\n ' Departure:' +\r\n GwDatesWrapper.format(checkoutDateSelection, DATE_FORMATS.default),\r\n promoCode: code,\r\n partySize: adultsCount + kidsCount,\r\n suiteStyle: 'version H',\r\n savings: savingsLessThanFiveUpperToFithty\r\n };\r\n if (JSON.stringify(latestVersionHEventErrorObj) !== JSON.stringify(variationHObj)) {\r\n trackVariationHEventError(EVENT_CATEGORIES.OnVersionHEventError, variationHObj);\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_LATEST_H_VERSION_EVENT_ERROR,\r\n variationHObj\r\n });\r\n }\r\n }\r\n }\r\n //End version H tracking code\r\n //=============================\r\n //Start version J tracking code\r\n //===============================\r\n if (optimizelyDisplayResortFeeWithTotalInSuiteCardJ) {\r\n const isJVersionAndIsTwoRatesTypesPresent =\r\n optimizelyDisplayResortFeeWithTotalInSuiteCardJ && isTwoRateTypesSuites;\r\n const isJVersionAndIsCaliforniaResident =\r\n optimizelyDisplayResortFeeWithTotalInSuiteCardJ && isCaliforniaResident;\r\n const isJVersionAndIsTwoRatesTypesPresentAndNonTwoRatesPresent =\r\n isJVersionAndIsTwoRatesTypesPresent &&\r\n availabilityList?.some(\r\n suite => suite.availabilityKey && (suite.rateOptions === null || suite.rateOptions?.length <= 1)\r\n );\r\n if (\r\n availabilityList?.length > 0 &&\r\n (!isJVersionAndIsTwoRatesTypesPresent ||\r\n isJVersionAndIsCaliforniaResident ||\r\n isJVersionAndIsTwoRatesTypesPresentAndNonTwoRatesPresent)\r\n ) {\r\n const variationJObj = {\r\n lodge: lodgeLocationName,\r\n dates:\r\n 'Arrival:' +\r\n GwDatesWrapper.format(checkinDateSelection, DATE_FORMATS.default) +\r\n ' Departure:' +\r\n GwDatesWrapper.format(checkoutDateSelection, DATE_FORMATS.default),\r\n promoCode: code,\r\n partySize: adultsCount + kidsCount,\r\n californiaResidentFlag: isCaliforniaResident,\r\n rateCodes: availabilityList\r\n ?.filter(\r\n suite =>\r\n suite.availabilityKey !== null &&\r\n (isCaliforniaResident\r\n ? suite.rateOptions?.length <= 1 || suite.rateOptions === null || suite.rateOptions.length > 1\r\n : suite.rateOptions?.length <= 1 || suite.rateOptions === null)\r\n )\r\n .map(suite => {\r\n return {\r\n name: suite.title,\r\n rateCode: suite.rateCode\r\n };\r\n }),\r\n suiteStyle: isCaliforniaResident\r\n ? 'version G'\r\n : isJVersionAndIsTwoRatesTypesPresentAndNonTwoRatesPresent\r\n ? 'version J and default'\r\n : 'default'\r\n };\r\n if (JSON.stringify(latestVersionJEventErrorObj) !== JSON.stringify(variationJObj)) {\r\n trackVariationJEventError(EVENT_CATEGORIES.OnVersionJEventError, variationJObj);\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_LATEST_J_VERSION_EVENT_ERROR,\r\n variationJObj\r\n });\r\n }\r\n }\r\n }\r\n //End version J tracking code\r\n //=============================\r\n\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_INFO_SUCCESS,\r\n availabilityList: availabilityList,\r\n isAPScall: existsValidSuite ? response.data.suites.some(st => st.availabilityKey) : false,\r\n isTwoRateTypesSuites: isTwoRateTypesSuites,\r\n availabilityReqIsLoading: false,\r\n requiresQualifyingID: isQualifyIdRequired,\r\n isIdMeValidationRequired: isIdMeValidationRequired,\r\n isIdMeValidationRequiredWithError: false,\r\n isErrorModalAlreadyClosed: false,\r\n promoDescription: promoDescription,\r\n personalizationRules: personalizationRules,\r\n personalizationResponses: personalizationResponses,\r\n offerCodeError: hasErrorCode\r\n ? {\r\n errorCode: errorCode,\r\n offerCode: getNormalizedCode(requestObject.offerCode)\r\n }\r\n : undefined,\r\n offerType: offerType,\r\n lcoPackages: lcoPackages,\r\n upsellPackagesContent: upsellPackagesContent\r\n });\r\n if (hasErrorCode)\r\n gaTrackingPlanSearchErrorCode(\r\n JSON.stringify({\r\n errorCode: errorCode,\r\n offerCode: getNormalizedCode(requestObject.offerCode)\r\n })\r\n );\r\n },\r\n err => {\r\n const errorCode = err.err?.response?.data?.Error?.ErrorCode;\r\n //ID.me treatment\r\n //=========================================================\r\n if (errorCode === 'IDME001') {\r\n //Verify if it's ID.me case\r\n //=================================\r\n const getElement = setInterval(() => {\r\n const idMeElement = document.getElementById('idme-wallet-button');\r\n if (idMeElement !== undefined) {\r\n if (window.BindIDme) {\r\n window.BindIDme();\r\n }\r\n clearInterval(getElement);\r\n }\r\n }, 1500);\r\n }\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_INFO_ERROR,\r\n shouldIgnoreOfferCodeError: shouldIgnoreOfferCodeError,\r\n availabilityList: [],\r\n promoDescription: '',\r\n requiresQualifyingID: false,\r\n isIdMeValidationRequired: errorCode === 'IDME001' ? true : false,\r\n isIdMeValidationRequiredWithError: true,\r\n availabilityReqIsLoading: false,\r\n availabilityRequestFailed: true,\r\n availabilityErrorMessage: `Oops, ${typeof err === 'string' ? err : err.message}`,\r\n offerCodeError: undefined\r\n });\r\n gaTrackingPlanSearchErrorCode(JSON.stringify(err));\r\n }\r\n );\r\n};\r\nexport const getAvailabilityHighestRates = requestObject => (dispatch, getState) => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES,\r\n availabilityHighestRatesReqIsLoading: true\r\n });\r\n\r\n const apiClient = new RoomBookingApiClient();\r\n\r\n apiClient\r\n .fetchAvailabilityHighestRates(requestObject, getResortLocation(getState().currentLodge))\r\n .then(response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_SUCCESS,\r\n availabilityHighestRatesList: response.data\r\n });\r\n })\r\n .catch(err => {\r\n const hasDatesExceededError = err?.err?.response?.data?.errors?.['DateRangeExceeded'];\r\n\r\n if (hasDatesExceededError) {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_DATES_EXCEEDED_ERROR,\r\n availabilityHighestRatesList: []\r\n });\r\n return;\r\n }\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_HIGHEST_RATES_ERROR,\r\n availabilityHighestRatesList: []\r\n });\r\n });\r\n};\r\nexport const getRecentSearches = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_LOADING,\r\n searchesGetReqIsLoading: true\r\n });\r\n\r\n const recentSearchesRepository = new RecentSearchesRepository();\r\n const request = recentSearchesRepository.getAllRecentSearches();\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS,\r\n recentSearchesList: response\r\n });\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_LOADING,\r\n searchesGetReqIsLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_ERROR,\r\n recentSearchesList: [],\r\n searchesReqFailed: true,\r\n searchesErrorMessage: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_LOADING,\r\n searchesGetReqIsLoading: false\r\n });\r\n }\r\n );\r\n};\r\nexport const addRecentSearch = (recentSearchesList, availabilityData) => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesSetReqIsLoading: true\r\n });\r\n\r\n let recentSearchData = {\r\n checkin: availabilityData.arrival,\r\n checkout: availabilityData.departure,\r\n num_adults: availabilityData.numberOfAdults,\r\n num_children: availabilityData.numOfBillableChildren,\r\n num_children2: availabilityData.numOfUnbillableChildren,\r\n property: availabilityData.location,\r\n suite: availabilityData.suite ? availabilityData.suite : '',\r\n offer_code: getNormalizedCode(availabilityData.offerCode),\r\n kids_ages: availabilityData.kidsAges\r\n };\r\n\r\n const recentSearchesRepository = new RecentSearchesRepository();\r\n const request = recentSearchesRepository.addNewRecentSearch(recentSearchesList, recentSearchData);\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS,\r\n recentSearchesList: response\r\n });\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesSetReqIsLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_ERROR,\r\n searchesReqFailed: true,\r\n searchesErrorMessage: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesSetReqIsLoading: false\r\n });\r\n }\r\n );\r\n};\r\nexport const deleteRecentSearch = (recentSearchesList, recentSearchId) => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: true\r\n });\r\n\r\n const recentSearchesRepository = new RecentSearchesRepository();\r\n const request = recentSearchesRepository.deleteRecentSearchById(recentSearchesList, recentSearchId);\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS,\r\n recentSearchesList: response\r\n });\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_ERROR,\r\n recentSearchesList: [],\r\n searchesReqFailed: true,\r\n searchesErrorMessage: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: false\r\n });\r\n }\r\n );\r\n};\r\nexport const deleteAllRecentSearches = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: true\r\n });\r\n\r\n const recentSearchesRepository = new RecentSearchesRepository();\r\n const request = recentSearchesRepository.deleteRecentSearchesAll();\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_SUCCESS,\r\n recentSearchesList: response\r\n });\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_RECENT_SEARCHES_INFO_ERROR,\r\n recentSearchesList: [],\r\n searchesReqFailed: true,\r\n searchesErrorMessage: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.DEL_PLANS_REQUEST_RECENT_SEARCHES_INFO_SUCCESS,\r\n searchesDelReqIsLoading: false\r\n });\r\n }\r\n );\r\n};\r\nexport const openRatesCalendar = (suiteCode, requestObject, getFetchRestrictionsEnabled) => async dispatch => {\r\n const eventData = rateCalendarGA(GTM_EVENT.ACTION.openRateCalendar, GTM_EVENT.LABEL.greatWolf);\r\n\r\n pushEvent(eventData);\r\n // Reset the range by suite variables\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_RESET\r\n });\r\n dispatch({\r\n type: plansActionTypes.SELECT_PLANS_SUITE_FOR_RANGE_TYPE,\r\n selectedSuiteForRange: suiteCode\r\n });\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING,\r\n getAvRangeBySuiteIsLoading: true\r\n });\r\n\r\n try {\r\n const calendarRates = await getCalendarRates(requestObject, suiteCode, dispatch);\r\n dispatch(getCalendarRangeRestrictions(requestObject, calendarRates, getFetchRestrictionsEnabled));\r\n } catch (err) {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR,\r\n getAvRangeBySuiteFailed: true,\r\n getAvRangeBySuiteErrorMsg: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING,\r\n getAvRangeBySuiteIsLoading: false\r\n });\r\n }\r\n};\r\nexport const getDataForSelectionInRateCalendar = (suiteCode, requestObject) => async (dispatch, getState) => {\r\n const state = getState()?.plans?.selectedSuiteRange;\r\n const selectedCalendarRates = await getLowestRatesByStay(state, requestObject, suiteCode);\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_RATES_CALENDAR,\r\n selectedSuiteRange: { ...state, ...selectedCalendarRates }\r\n });\r\n};\r\nexport const closeRatesCalendar = () => {\r\n const eventData = rateCalendarGA(GTM_EVENT.ACTION.closeRateCalendar, GTM_EVENT.LABEL.greatWolf);\r\n pushEvent(eventData);\r\n return {\r\n type: plansActionTypes.CLOSE_PLANS_RATES_CALENDAR\r\n };\r\n};\r\nexport const getCalendarRangeRestrictions = (requestObject, calendarRates, restrictionsEnabled) => (\r\n dispatch,\r\n getState\r\n) => {\r\n const resortLocation = getResortLocation(getState().currentLodge);\r\n if (restrictionsEnabled && !restrictionsEnabled) {\r\n if (calendarRates) {\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_RATES_CALENDAR,\r\n selectedSuiteRange: calendarRates\r\n });\r\n }\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING,\r\n getAvRangeBySuiteIsLoading: false\r\n });\r\n return;\r\n }\r\n\r\n if (!requestObject.propertyCode) {\r\n requestObject = {\r\n ...requestObject,\r\n propertyCode: resortLocation\r\n };\r\n }\r\n\r\n let newRequest = {\r\n lodgeCode: requestObject?.lodgeCode || requestObject.location,\r\n year: requestObject.year || requestObject.arrival?.split('-')[0],\r\n month: requestObject.month || requestObject.arrival?.split('-')[1],\r\n adults: requestObject.adults || requestObject.numberOfAdults,\r\n kidsAges: requestObject?.kidsAges,\r\n offerCode: requestObject.rateCode || requestObject.offerCode || '',\r\n numberOfMonths: requestObject.numberOfMonths ? requestObject.numberOfMonths : calendarRates ? 2 : 1\r\n };\r\n\r\n if (requestObject.type) newRequest.type = requestObject.type;\r\n\r\n let apiClient = new RoomBookingApiClient();\r\n const request = apiClient.getLowestRates(newRequest, requestObject.propertyCode);\r\n\r\n return request.then(\r\n async response => {\r\n const dealsSummary = response.data.dealsSummary && getTheFirstElementOfArray(response.data.dealsSummary);\r\n const restrictions = transformRestrictions(response.data)?.restrictions;\r\n //If you have a promocode call API to get the average price\r\n //===========================================================\r\n if (\r\n (requestObject.rateCode || requestObject.offerCode) &&\r\n +GwDatesWrapper.format(requestObject.arrival, 'MM') === +requestObject.month &&\r\n requestObject.arrival &&\r\n isDateValid(requestObject.arrival) &&\r\n requestObject.departure &&\r\n isDateValid(requestObject.departure) &&\r\n GwDatesWrapper.diff(requestObject.departure, requestObject.arrival, 'days') > 1 &&\r\n GwDatesWrapper.diff(requestObject.departure, requestObject.arrival, 'days') < 30\r\n ) {\r\n let lowestRatesByStayRequest = {\r\n kidsAges: requestObject?.kidsAges,\r\n adults: requestObject.adults || requestObject.numberOfAdults,\r\n arrival: requestObject.arrival,\r\n departure: requestObject.departure,\r\n lodgeCode: requestObject?.lodgeCode || requestObject.location,\r\n offerCode: requestObject.rateCode || requestObject.offerCode || ''\r\n };\r\n try {\r\n const lowestRatesByStayResponse = await apiClient.getLowestRatesForSuiteByStayNoSuiteCode(\r\n lowestRatesByStayRequest\r\n );\r\n const { daily, total } = lowestRatesByStayResponse?.data;\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_CALENDAR_RATES_BY_STAY,\r\n lowestRatesByStayList: daily,\r\n lowestRatesByStayListTotal: total\r\n });\r\n dispatch({\r\n type: plansActionTypes.LAST_PLANS_CALENDAR_RATES_BY_STAY_SELECTION,\r\n lastCalendarRatesDateSelection: {\r\n start: requestObject.arrival,\r\n end: requestObject.departure\r\n }\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n }\r\n if (calendarRates) {\r\n dispatch({\r\n type: plansActionTypes.OPEN_PLANS_RATES_CALENDAR,\r\n selectedSuiteRange: calendarRates,\r\n dealsSummary: dealsSummary\r\n });\r\n }\r\n\r\n if (newRequest.offerCode !== '') {\r\n dispatch({\r\n type:\r\n requestObject.type === 1\r\n ? plansActionTypes.GET_PLANS_LOWEST_RATES_CALENDAR_MOBILE\r\n : plansActionTypes.GET_PLANS_LOWEST_RATES_CALENDAR,\r\n lowestRateCalendarList: response.data\r\n });\r\n }\r\n\r\n dispatch({\r\n type:\r\n requestObject?.type === 1\r\n ? plansActionTypes.OPEN_PLANS_RATES_CALENDAR_RESTRICTION_INCREMENT\r\n : plansActionTypes.OPEN_PLANS_RATES_CALENDAR_RESTRICTION,\r\n selectedSuiteRangeRestrictions: restrictions,\r\n dealsSummary: dealsSummary\r\n });\r\n\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING,\r\n getAvRangeBySuiteIsLoading: false\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_ERROR,\r\n getAvRangeBySuiteFailed: true,\r\n getAvRangeBySuiteErrorMsg: `Oops, ${err.message}`\r\n });\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_AVAILABILITY_RANGE_BY_SUITE_LOADING,\r\n getAvRangeBySuiteIsLoading: false\r\n });\r\n }\r\n );\r\n};\r\nexport const cleanCalendarRestrictionsAndLowestRates = () => {\r\n return {\r\n type: plansActionTypes.CLEAN_PLANS_CALENDAR_RESTRICTIONS_AND_LOWEST_RATES\r\n };\r\n};\r\nexport const openPaymentLeaveModal = () => {\r\n return {\r\n type: plansActionTypes.OPEN_PLANS_PAYMENT_LEAVE_MODAL\r\n };\r\n};\r\nexport const closePaymentLeaveModal = () => {\r\n return {\r\n type: plansActionTypes.CLOSE_PLANS_PAYMENT_LEAVE_MODAL\r\n };\r\n};\r\nexport const setAppliedFilters = params => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_APPLIED_FILTERS,\r\n filtersApplied: params\r\n });\r\n};\r\nexport const setSelectedSuiteForCalendar = params => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_SELECTED_SUITE_NAME_FOR_CALENDAR,\r\n selectedSuiteForCalendar: params\r\n });\r\n};\r\nexport const getItemQuantity = requestObject => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_ITEM_QUANTITY_TYPE,\r\n itemQuantityReqIsLoading: true\r\n });\r\n\r\n const apiClient = new ItemApiClient();\r\n const request = apiClient.fetchItemQuantity(requestObject);\r\n\r\n return request.then(\r\n response => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_ITEM_QUANTITY_SUCCESS,\r\n itemQuantity: response.data\r\n });\r\n },\r\n err => {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_ITEM_QUANTITY_ERROR,\r\n itemQuantity: []\r\n });\r\n }\r\n );\r\n};\r\n\r\n/**\r\n * @function\r\n * Sets and toggle when a campaign is being performed on the application\r\n * @param {bool} isEmailCampaign Whenever if the current url refers to a\r\n * campaign\r\n * @param {Object} campaignObject The campaign information\r\n * @param {date} startDate Start date of the campaign\r\n * @param {date} endDate End date of the campaign\r\n */\r\nexport const toggleEmailCampaigns = (\r\n isEmailCampaign,\r\n campaignObject = {},\r\n startDate = '',\r\n endDate = ''\r\n) => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.TOGGLE_PLANS_EMAIL_CAMPAIGNS,\r\n emailCampaign: {\r\n isEmailCampaign: isEmailCampaign,\r\n planCalendarShouldBeBlocked: isEmailCampaign,\r\n startDate: startDate,\r\n endDate: endDate,\r\n campaignObject: campaignObject\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * @function\r\n * Clear/reset all the availability data to the initial state *\r\n */\r\nexport const clearAllAvaliabilityData = () => ({ type: plansActionTypes.CLEAR_PLANS_ALL_AVAILABILITY_DATA });\r\nexport const setQualifyingID = (code, x) => {\r\n return {\r\n type: plansActionTypes.SET_PLANS_QUALIFYING_ID,\r\n code: code\r\n };\r\n};\r\nexport const getQualifyingID = (shouldTriggerValidation = false) => (dispatch, getState) => {\r\n const state = getState();\r\n const { requiresQualifyingID, qualifyingID } = state.plans;\r\n if (!requiresQualifyingID) return;\r\n\r\n if (!qualifyingID && shouldTriggerValidation) {\r\n dispatch({\r\n type: plansActionTypes.GET_PLANS_QUALIFYING_ID_HAS_ERROR,\r\n hasError: true\r\n });\r\n }\r\n return qualifyingID && qualifyingID.toUpperCase();\r\n};\r\n\r\n/**\r\n * @function\r\n * Sets the suite type when an email campaign comes\r\n * @param {Object} campaignObject The campaign information\r\n */\r\nexport const setEmailCampaingSuiteType = (suiteType = null) => (dispatch, getState) => {\r\n let normalizedSuiteType;\r\n\r\n if (suiteType && suiteType !== SUITE_TYPES.unknown) {\r\n switch (suiteType.toLowerCase()) {\r\n case SUITE_TYPES.standard:\r\n normalizedSuiteType = SUITE_TYPES.standard;\r\n break;\r\n case SUITE_TYPES.themed:\r\n normalizedSuiteType = SUITE_TYPES.themed;\r\n break;\r\n case SUITE_TYPES.premium:\r\n normalizedSuiteType = SUITE_TYPES.premium;\r\n break;\r\n default:\r\n normalizedSuiteType = SUITE_TYPES.unknown;\r\n }\r\n }\r\n\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_TAB_INDEX_BY_EMAIL_CAMPAIGN,\r\n emailCampaignSuiteType: normalizedSuiteType\r\n });\r\n};\r\n\r\nexport const setIsBookingWidgetFocused = (value = false) => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_IS_BOOKING_WIDGET_FOCUSED,\r\n value: value\r\n });\r\n};\r\n\r\nexport const setSortingOrder = sortingType => ({\r\n type: plansActionTypes.SET_PLANS_SORTING_ORDER,\r\n sortingType\r\n});\r\nexport const setSortSuite = suiteCode => ({\r\n type: plansActionTypes.SET_PLANS_SUITE_CODE_FILTER,\r\n suiteCode\r\n});\r\nexport const setIsCaliforniaResident = isCaliforniaResident => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.SET_PLANS_IS_CALIFORNIA_RESIDENT,\r\n isCaliforniaResident\r\n });\r\n};\r\nexport const cleanIsCaliforniaResident = () => dispatch => {\r\n dispatch({\r\n type: plansActionTypes.CLEAN_PLANS_IS_CALIFORNIA_RESIDENT\r\n });\r\n};\r\n","import styled from 'styled-components';\r\nimport { border, space, themeGet } from 'styled-system';\r\nimport { Flex } from '../../ui-kit';\r\nimport ArrowDownThinIcon from '../../ui-kit/icons/ArrowDownThin';\r\nimport Text from '../../ui-kit/Text';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\nexport const AccordionIcon = styled(ArrowDownThinIcon)`\r\n ${space}\r\n height: 16px;\r\n`;\r\n\r\nexport const SummaryAccordionIcon = styled(ArrowDownThinIcon)`\r\n ${space}\r\n height: 16px;\r\n`;\r\n\r\nexport const BoldText = styled(Text)`\r\n font-size: ${props => (props.large ? themeGet('fontSizes.7')(props) : themeGet('fontSizes.1')(props))}px;\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n font-family: ${themeGet('fonts.secondary')};\r\n line-height: 22px;\r\n`;\r\n\r\nBoldText.defaultProps = {\r\n theme: theme\r\n};\r\n\r\nexport const SummaryBottom = styled(Flex)`\r\n ${border}\r\n background: ${props => (props.background ? props.background : themeGet('colors.deepForestGreen.100'))}${props =>\r\n props.background ? '' : '06'};\r\n`;\r\n\r\nexport const GreenText = styled(BoldText)`\r\n color: ${themeGet('colors.deepForestGreen.100')};\r\n`;\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\n\r\nexport const PAYMENT_FORM_IMAGES = {\r\n VISA_CURVED: 'visa-curved-32px.png',\r\n MASTERCARD_CURVED: 'mastercard-curved-32px.png',\r\n AMERICAN_EXPRESS_CURVED: 'american-express-curved-32px.png',\r\n DISCOVER_CURVED: 'discover-curved-32px.png',\r\n CARD_BACK_SECURITY_CVV: 'card-back-security-cvv.png',\r\n UI_ICON_CREDITCARD: 'ui-icon-creditcard.png',\r\n AFFIRM_LOGO: 'affirmLogo.png',\r\n APPLE_PAY_LOGO: 'applepaylogo.png',\r\n GOOGLE_PAY_LOGO: 'googlepaylogo.png',\r\n PAYMENT_FORM_CARAT: 'payment-form-carat.svg',\r\n AFFIRM_LOGO_WHITE: 'https://cdn-assets.affirm.com/images/white_logo-solid_bg.svg',\r\n VISA: 'visa.svg',\r\n MASTER_CARD: 'mastercard.svg',\r\n AMERICAN_EXPRESS: 'amex.svg',\r\n DISCOVER: 'discover.svg',\r\n MONEY_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'money.svg'),\r\n GOOGLE_PAY: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, 'png/googlePay.png'),\r\n APPLE_PAY: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, 'png/applePay.png'),\r\n PAYPAL: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, 'png/paypal.png'),\r\n CREDIT_CARD: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, 'png/creditCard.png'),\r\n AFFIRM: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, 'png/affirm.png')\r\n};\r\n","export const FLEX_TRIP_PACKAGE_CODE = 'FLXTRPCXL';\r\nexport const HOWL_N_LEARN_CODE = 'HOWLEARN';\r\n\r\nexport const PHONE_TEXT_AGREEMENT_NIAGARA = `Yes! I provide my signature authorizing Great Wolf to call\r\n and text me at the mobile number I provided using automated\r\n dialing technology to let me know about products, services,\r\n promotions, and/or events that may interest me. This consent\r\n is not required as a condition of purchasing any goods or\r\n services, and each message will include an option to opt-out\r\n of receiving future messages.`;\r\nexport const PHONE_TEXT_AGREEMENT = `Yes! By submitting this form, I authorize Great Wolf to call and text me at the mobile number I provided using automated dialing technology to let me know about products, services, promotions, and/or events that may interest me. This consent is not required as a condition of purchasing any goods or services, and each message will include an option to opt-out of receiving future messages.`;\r\n","const duettoKeys = {\r\n CATEGORY: 't',\r\n START_DATE: 'sd',\r\n END_DATE: 'ed',\r\n HOTEL_ID: 'h',\r\n QUOTES: 'qq',\r\n RATE: 'r',\r\n ROOM_TYPE: 'rt',\r\n RATE_CODE: 'rc',\r\n CONFIRMATION_ID: 'b',\r\n NUM_ADULTS: 'na',\r\n NUM_CHILDREN: 'nc'\r\n};\r\n\r\nconst eventTypes = {\r\n SEARCH: 's',\r\n BOOKING: 'b',\r\n QUOTE: 'q',\r\n DENIAL: 'd'\r\n};\r\n\r\nconst initialize = appId => {\r\n if (!appId) {\r\n throw new Error('an app ID is required to start tracking.');\r\n }\r\n\r\n window.duetto = {\r\n appId: appId,\r\n tld: getHost(window),\r\n queue: []\r\n };\r\n\r\n callDuetto();\r\n};\r\n\r\nconst callDuetto = () => {\r\n (function() {\r\n var s = document.createElement('script');\r\n s.type = 'text/javascript';\r\n s.async = true;\r\n s.src =\r\n ('https:' === document.location.protocol ? 'https://' : 'http://') +\r\n 'capture.duettoresearch.com/assets/js/duetto/duetto.js';\r\n var n = document.getElementsByTagName('script')[0];\r\n n.parentNode.insertBefore(s, n);\r\n })();\r\n};\r\n\r\nconst getHost = globalObj => {\r\n if (!globalObj) return;\r\n\r\n return globalObj.location.host;\r\n};\r\n\r\nconst trackAvailabilitySearch = ({ resortLocation, startDate, endDate }) => {\r\n if (!window.duetto) return;\r\n const payload = {\r\n [duettoKeys.CATEGORY]: eventTypes.SEARCH,\r\n [duettoKeys.HOTEL_ID]: resortLocation,\r\n [duettoKeys.START_DATE]: startDate,\r\n [duettoKeys.END_DATE]: endDate\r\n };\r\n\r\n window.duetto.queue.push(payload);\r\n};\r\n\r\nconst trackAvailabilityDenial = ({ resortLocation, startDate, endDate }) => {\r\n if (!window.duetto) return;\r\n const payload = {\r\n [duettoKeys.CATEGORY]: eventTypes.DENIAL,\r\n [duettoKeys.HOTEL_ID]: resortLocation,\r\n [duettoKeys.START_DATE]: startDate,\r\n [duettoKeys.END_DATE]: endDate\r\n };\r\n\r\n window.duetto.queue.push(payload);\r\n};\r\n\r\nconst trackQuote = ({ resortLocation, suites, startDate, endDate }) => {\r\n if (!window.duetto) return;\r\n const payload = {\r\n [duettoKeys.CATEGORY]: eventTypes.QUOTE,\r\n [duettoKeys.HOTEL_ID]: resortLocation,\r\n [duettoKeys.QUOTES]: suites.map(suite => ({\r\n [duettoKeys.RATE]: suite.rate,\r\n [duettoKeys.ROOM_TYPE]: suite.roomType,\r\n [duettoKeys.RATE_CODE]: suite.rateCode\r\n })),\r\n [duettoKeys.START_DATE]: startDate,\r\n [duettoKeys.END_DATE]: endDate\r\n };\r\n\r\n window.duetto.queue.push(payload);\r\n};\r\n\r\nconst trackBooking = ({\r\n resortLocation,\r\n confirmationId,\r\n roomType,\r\n rateCode,\r\n rate,\r\n numAdults,\r\n numChildren,\r\n startDate,\r\n endDate\r\n}) => {\r\n if (!window.duetto) return;\r\n const payload = {\r\n [duettoKeys.CATEGORY]: eventTypes.BOOKING,\r\n [duettoKeys.HOTEL_ID]: resortLocation,\r\n [duettoKeys.CONFIRMATION_ID]: confirmationId,\r\n [duettoKeys.ROOM_TYPE]: roomType,\r\n [duettoKeys.RATE_CODE]: rateCode,\r\n [duettoKeys.RATE]: rate,\r\n [duettoKeys.NUM_ADULTS]: numAdults,\r\n [duettoKeys.NUM_CHILDREN]: numChildren,\r\n [duettoKeys.START_DATE]: startDate,\r\n [duettoKeys.END_DATE]: endDate\r\n };\r\n\r\n window.duetto.queue.push(payload);\r\n};\r\n\r\nconst duetto = {\r\n initialize,\r\n trackAvailabilitySearch,\r\n trackAvailabilityDenial,\r\n trackQuote,\r\n trackBooking\r\n};\r\n\r\nexport default duetto;\r\n","// Deal action types\r\n\r\nconst dealActionTypes = {\r\n GET_DEAL_SUCCESS: 'GET_DEAL_SUCCESS',\r\n GET_DEAL_LOADING: 'GET_DEAL_LOADING',\r\n GET_DEAL_ERROR: 'GET_DEAL_ERROR',\r\n CLEAR_DEAL: 'CLEAR_DEAL'\r\n};\r\n\r\nexport default dealActionTypes;\r\n","// Profile action types\r\n\r\nconst profileActionTypes = {\r\n IS_PROFILE_LOADING: 'IS_PROFILE_LOADING',\r\n GET_PROFILE_USER: 'GET_PROFILE_USER',\r\n GET_PROFILE_USER_SUCCESS: 'GET_PROFILE_USER_SUCCESS',\r\n GET_PROFILE_USER_ERROR: 'GET_PROFILE_USER_ERROR'\r\n};\r\n\r\nexport default profileActionTypes;\r\n","// Global Modal selectors\r\n\r\nexport const verifyIfModalIsOpened = (key, state) => {\r\n return state.globalModal.keyContentComponent === key;\r\n};\r\n","export const ALERT_ICONS = {\r\n info: 'alert-icon-info.svg',\r\n success: 'alert-icon-success.svg',\r\n warning: 'alert-icon-error.svg',\r\n offer: 'alert-icon-warning.svg'\r\n};\r\n","import styled from 'styled-components';\r\nimport { themeGet, variant } from 'styled-system';\r\nimport { Box, Button, Flex, Text } from '../ui-kit';\r\nimport CloseIcon from '../ui-kit/icons/Close';\r\nimport theme from '../ui-kit/themes/theme';\r\n\r\nexport const CloseButton = styled(Button)`\r\n color: unset;\r\n padding: 0;\r\n margin: 0;\r\n border: none;\r\n border-radius: 0;\r\n align-self: flex-start;\r\n min-height: 16px;\r\n min-width: 16px;\r\n\r\n :focus {\r\n border: none;\r\n }\r\n :active {\r\n border: none;\r\n }\r\n`;\r\n\r\nexport const ActionButton = styled(Button)`\r\n margin-top: ${themeGet('space.3')}px;\r\n padding: 0px;\r\n font-size: ${themeGet('fontSizes.9')}px;\r\n border: 2px solid ${themeGet('colors.preciousStoneBlue.100')};\r\n background-color: transparent;\r\n color: ${themeGet('colors.preciousStoneBlue.100')};\r\n width: fit-content;\r\n padding: 6px ${themeGet('space.2')}px;\r\n letter-spacing: normal;\r\n line-height: 1;\r\n transition: filter 0.2s;\r\n\r\n :hover {\r\n border: 2px solid ${themeGet('colors.preciousStoneBlue.100')};\r\n filter: opacity(0.7);\r\n }\r\n`;\r\n\r\nexport const AlertIcon = styled(Box)`\r\n display: flex;\r\n height: 20px;\r\n margin-right: 10px;\r\n align-items: center;\r\n svg {\r\n color: ${props => (props.variant === 'success' ? themeGet('colors.successGreen') : '')};\r\n }\r\n`;\r\n\r\nexport const AlertContent = styled(Flex)`\r\n flex-direction: column;\r\n width: 100%;\r\n margin-top: 3px;\r\n`;\r\n\r\nexport const AlertDescription = styled(Text)`\r\n font-weight: ${theme.fontWeights.medium};\r\n font-size: ${theme.fontSizes[0]}px;\r\n line-height: 18px;\r\n color: ${themeGet('colors.nightSkyBlack.80')};\r\n`;\r\n\r\nexport const AlertCloseIcon = styled(CloseIcon)`\r\n cursor: pointer;\r\n`;\r\n\r\nexport const AlertTitle = styled(Text)`\r\n line-height: 16px;\r\n font-size: ${themeGet('fontSizes.9')}px;\r\n margin-bottom: 5px;\r\n font-weight: bold;\r\n`;\r\n\r\nconst alertStyle = variant({\r\n key: 'alerts'\r\n});\r\n\r\nexport const AlertWrapper = styled(Flex)`\r\n ${alertStyle}\r\n display: flex;\r\n border-radius: 10px;\r\n position: relative;\r\n padding: 12px 16px;\r\n background-color: ${props => (props.variant === 'success' ? themeGet('colors.deepForestGreen.10') : '')};\r\n background-color: ${props =>\r\n props.variant === 'warning' && props.abTest ? themeGet('colors.woodpeckerRed.20') : ''};\r\n width: ${props => props.width || (props.abTest && !props.isHorizontal && '100%')};\r\n font-size: ${props => props.fontSize}px;\r\n`;\r\n\r\nexport const Icon = styled.img`\r\n width: 16px;\r\n height: 16px;\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { ASSETS_LOCATIONS, getAssetsUrl } from '../../utilities/constants';\r\nimport { ALERT_ICONS } from './assets/images';\r\nimport {\r\n ActionButton,\r\n AlertCloseIcon,\r\n AlertContent,\r\n AlertDescription,\r\n AlertIcon,\r\n AlertTitle,\r\n AlertWrapper,\r\n CloseButton,\r\n Icon\r\n} from './styles';\r\n\r\nexport const ALERT_TYPES = {\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n offer: 'offer'\r\n};\r\n\r\nconst propTypes = {\r\n /** Title of the alert. If not used the content is rendered directly. */\r\n title: PropTypes.string,\r\n /** Variant of the alert */\r\n variant: PropTypes.oneOf(Object.values(ALERT_TYPES)),\r\n /** Defines if the icon for the alert is visible or not. */\r\n icon: PropTypes.bool,\r\n /** Determines if the alert is closed */\r\n isClosed: PropTypes.bool,\r\n /** Adds dismissible option to close the alert */\r\n onClose: PropTypes.func,\r\n /** Text of the action for the button */\r\n actionText: PropTypes.string,\r\n /** Callback function triggered when clicked on CTA. */\r\n onActionClick: PropTypes.func,\r\n /** Custom close component */\r\n customCloseComponent: PropTypes.element\r\n};\r\n\r\nconst defaultProps = {\r\n variant: ALERT_TYPES.info,\r\n message: null,\r\n icon: false,\r\n isClosed: false,\r\n actionText: null,\r\n onClose: null,\r\n onActionClick: null,\r\n customCloseComponent: null\r\n};\r\n\r\nconst SelectedIcon = ({ variant }) => {\r\n return (\r\n <Icon\r\n src={getAssetsUrl(ASSETS_LOCATIONS.SVG, ALERT_ICONS[variant])}\r\n size=\"16px\"\r\n data-testid={`Alert:${variant}icon`}\r\n />\r\n );\r\n};\r\n\r\nconst Alert = ({\r\n children,\r\n title,\r\n variant,\r\n icon,\r\n isClosed,\r\n onClose,\r\n actionText,\r\n onActionClick,\r\n abTest,\r\n isHorizontal,\r\n customCloseComponent,\r\n width\r\n}) => {\r\n if (isClosed) {\r\n return null;\r\n }\r\n\r\n return (\r\n <AlertWrapper width={width} abTest={abTest} isHorizontal={isHorizontal} variant={variant} fontSize={10}>\r\n {icon && (\r\n <AlertIcon variant={variant} className=\"icon\">\r\n <SelectedIcon variant={variant} />\r\n </AlertIcon>\r\n )}\r\n <AlertContent>\r\n {title && <AlertTitle>{title}</AlertTitle>}\r\n <AlertDescription abTest={abTest}>{children}</AlertDescription>\r\n {actionText && onActionClick && typeof onActionClick === 'function' && (\r\n <ActionButton onClick={onActionClick}>{actionText}</ActionButton>\r\n )}\r\n </AlertContent>\r\n {customCloseComponent}\r\n {!customCloseComponent && onClose && typeof onClose === 'function' && (\r\n <CloseButton variant=\"ghost\">\r\n <AlertCloseIcon size={16} onClick={onClose} data-testid=\"Alert:closeicon\" />\r\n </CloseButton>\r\n )}\r\n </AlertWrapper>\r\n );\r\n};\r\n\r\nAlert.VARIANTS = ALERT_TYPES;\r\nAlert.propTypes = propTypes;\r\nAlert.defaultProps = defaultProps;\r\n\r\nexport default Alert;\r\n","import styled from 'styled-components';\r\nimport { alignSelf, background, bottom, left, right, top, zIndex } from 'styled-system';\r\nimport Box from './Box';\r\n\r\nconst Absolute = styled(Box)`\r\n position: absolute;\r\n ${top} ${bottom} ${left} ${right} ${zIndex} ${alignSelf} ${background}\r\n`;\r\n\r\nAbsolute.propTypes = {\r\n ...top.propTypes,\r\n ...right.propTypes,\r\n ...bottom.propTypes,\r\n ...left.propTypes,\r\n ...zIndex.propTypes,\r\n ...alignSelf.propTypes,\r\n ...background.propTypes\r\n};\r\n\r\nAbsolute.displayName = 'Absolute';\r\n\r\nexport default Absolute;\r\n","export const DEFAULT_ERROR_MESSAGE = 'Something went wrong. Try again in a few minutes.';\r\n\r\n/**\r\n * Gives the formatted error message.\r\n * @param {String} message - Actual error message\r\n * @return {String} Formatted error message.\r\n */\r\nexport const getErrorMessage = (message = null, usePrefix = true) => {\r\n if (!usePrefix) {\r\n return message || DEFAULT_ERROR_MESSAGE;\r\n }\r\n\r\n return `Oops, ${message ? message : DEFAULT_ERROR_MESSAGE}`;\r\n};\r\n\r\nexport const getPassMessage = (passQty, passTitle) => {\r\n return `You added <b>${passQty} ${passTitle}</b> to your reservation!`;\r\n};\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { closeModal, openModal } from '../../store/componentStores/GlobalModal/globalModal.actions';\r\nimport { verifyIfModalIsOpened } from '../../store/componentStores/GlobalModal/globalModal.selectors';\r\n\r\nconst withGlobalModal = (Component, key) => {\r\n const WrappedComponent = props => {\r\n return <Component {...props} />;\r\n };\r\n\r\n const mapStateToProps = state => ({\r\n globalModal: state.globalModal,\r\n isModalOpened: key ? verifyIfModalIsOpened(key, state) : undefined\r\n });\r\n\r\n const mapDispatchToProps = {\r\n openModal,\r\n closeModal\r\n };\r\n\r\n return connect(mapStateToProps, mapDispatchToProps)(WrappedComponent);\r\n};\r\n\r\nexport default withGlobalModal;\r\n","import React from 'react';\r\n\r\nconst LoadingspinnerIcon = ({ size, color, ...props }) => (\r\n <svg {...props} viewBox=\"0 0 80 80\" width={size} height={size}>\r\n <path\r\n fill={color}\r\n d=\"M40,72C22.4,72,8,57.6,8,40C8,22.4,\r\n 22.4,8,40,8c17.6,0,32,14.4,32,32c0,1.1-0.9,2-2,2\r\n s-2-0.9-2-2c0-15.4-12.6-28-28-28S12,24.6,12,40s12.6,\r\n 28,28,28c1.1,0,2,0.9,2,2S41.1,72,40,72z\">\r\n <animateTransform\r\n attributeType=\"xml\"\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n from=\"0 40 40\"\r\n to=\"360 40 40\"\r\n dur=\"0.6s\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </path>\r\n </svg>\r\n);\r\n\r\nLoadingspinnerIcon.displayName = 'LoadingspinnerIcon';\r\n\r\nLoadingspinnerIcon.defaultProps = {\r\n size: 24,\r\n color: 'currentcolor'\r\n};\r\n\r\nexport default LoadingspinnerIcon;\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport { successfulAuthCallback } from '../Utils/authUtils';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Manage Booking endpoints\r\n *\r\n * @class ManageBookingApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class ManageBookingApiClient extends GWRApiClient {\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v1`;\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_MANAGE_BOOKING_ENDPOINT, apiVersion);\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function returns the preview cancellation information\r\n *\r\n * @function\r\n * @param { reservationId: string}\r\n */\r\n async previewCancel(reservationId) {\r\n const urlRequest = `${this.url}/reservation/${reservationId}/cancellation/preview`;\r\n return await super.getApiCall(urlRequest);\r\n }\r\n\r\n /**\r\n * function returns the add guest modal information\r\n *\r\n * @function\r\n * @param { reservationId: string, requestObj: {kidsAges: [number]}}\r\n */\r\n async getAddGuestsModalInformation(reservationId, requestObj) {\r\n const adultsString = requestObj?.adults ? 'numberOfAdults=' + requestObj.adults : '';\r\n let kidsAgesString = '';\r\n requestObj?.kidsAges &&\r\n requestObj.kidsAges.forEach(kid => {\r\n kidsAgesString += '&kidsAges=' + kid;\r\n });\r\n if (adultsString === '' && kidsAgesString !== '') kidsAgesString = kidsAgesString.substring(1);\r\n const hasQueryData = adultsString !== '' || kidsAgesString !== '' ? '?' : '';\r\n const urlRequest =\r\n `${this.url}/reservation/${reservationId}/guests/add/preview` + hasQueryData + adultsString + kidsAgesString;\r\n return await super.getApiCall(urlRequest);\r\n }\r\n\r\n /**\r\n * @function\r\n * Get all reservations for the current logged in user\r\n */\r\n async getAllReservationsForCurrentUser() {\r\n let request = await super.getApiCallAuth(`${this.url}/reservations`);\r\n\r\n return request;\r\n }\r\n\r\n /*\r\n * function returns the information for the reservation\r\n *\r\n * @function\r\n * @param { reservationId: string }\r\n */\r\n async manageBooking(reservationId) {\r\n return await super.getApiCall(`${this.url}/reservations/${reservationId}`);\r\n }\r\n\r\n /*\r\n * function returns the add guest modal information after saving the new guests\r\n *\r\n * @function\r\n * @param { reservationId: string, requestObj: {numberOfAdults: number, kidsAges: [number]}}\r\n */\r\n async updateAddGuestsModal(reservationId, requestObj) {\r\n if (requestObj.numberOfAdults === 0) delete requestObj.numberOfAdults;\r\n const urlRequest = `${this.url}/reservation/${reservationId}/guests/add`;\r\n return await super.postApiCall(urlRequest, requestObj);\r\n }\r\n\r\n /**\r\n * Function to cancel a reservation given a reservationId\r\n *\r\n * @param {string} reservationId\r\n * @param { reason: string, comment: string } requestObj\r\n * @returns\r\n */\r\n async cancelReservation(reservationId, requestObj) {\r\n const urlRequest = `${this.url}/reservation/${reservationId}/cancellation`;\r\n return await super.postApiCall(urlRequest, requestObj);\r\n }\r\n\r\n /*\r\n * function to return the hold preview information\r\n *\r\n * @function\r\n * @param { reservationId: string }\r\n */\r\n async getHoldPreview(reservationId) {\r\n const urlRequest = `${this.url}/reservation/${reservationId}/hold/preview`;\r\n return await super.getApiCall(urlRequest);\r\n }\r\n\r\n /**\r\n * @function\r\n * Get reservations by Reservation Id and Reservation Key\r\n * @param {number} reservationId\r\n * @param {string} reservationKey\r\n */\r\n async loginReservationsByIdAndReservationKey(reservationId, reservationKey) {\r\n const urlRequest = `${this.url}/login-reservation?ReservationId=${reservationId}&ReservationKey=${reservationKey}`;\r\n const request = await super.postApiCall(urlRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get reservations by Reservation Id and Reservation Key, Tioga's version\r\n * @param {number} reservationId\r\n * @param {string} reservationKey\r\n */\r\n async loginReservationByIdAndLastName(reservationId, lastName) {\r\n const urlRequest = `${this.url}/login-reservation?ReservationId=${reservationId}&LastName=${lastName}`;\r\n let request = await super.postApiCall(urlRequest);\r\n successfulAuthCallback(request);\r\n return request;\r\n }\r\n}\r\n","import styled, { css } from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\n\r\nimport { Box, Button, Flex, Text, TextLink } from '../../ui-kit';\r\nimport { FlexCard } from '../../ui-kit/Card';\r\nimport ArrowDownThinIcon from '../../ui-kit/icons/ArrowDownThin';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\nexport const Icon = styled.img`\r\n width: ${({ size }) => size || '24px'} !important;\r\n height: ${({ size }) => size || '24px'} !important;\r\n align-self: ${({ alignSelf }) => alignSelf || 'center'};\r\n`;\r\n\r\nexport const LoyaltyGenericContainer = styled(FlexCard)`\r\n width: ${({ isNewWidgetStyleActive }) => (isNewWidgetStyleActive ? '100%' : 'auto')};\r\n\r\n @media screen and (max-width: 320px) {\r\n padding: 0;\r\n }\r\n`;\r\n\r\nexport const LoyaltyWithExpirationDateContainer = styled(FlexCard)`\r\n color: ${({ bgColor }) => (bgColor ? theme.colors.deepLakeBlue[100] : theme.colors.pureWhite[0])};\r\n width: auto;\r\n\r\n @media screen and (max-width: 320px) {\r\n padding: 0;\r\n }\r\n`;\r\n\r\nexport const LoyaltyAvailableContainer = styled(FlexCard)`\r\n background-color: ${({ isNewWidgetStyleActive }) =>\r\n !isNewWidgetStyleActive ? theme.colors.deepLakeBlue[100] : theme.colors.pureWhite[0]};\r\n color: ${({ isNewWidgetStyleActive }) =>\r\n !isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]};\r\n padding: ${({ isNewWidgetStyleActive, isMobile }) =>\r\n isNewWidgetStyleActive ? (isMobile ? '0px' : 'initial') : '12px'};\r\n ${({ isNewWidgetStyleActive }) => isNewWidgetStyleActive && `padding-top: 0px;`}\r\n ${({ isNewWidgetStyleActive }) => isNewWidgetStyleActive && `line-height: 16px`};\r\n padding-bottom: ${({ isMobile }) => (isMobile ? `15px` : `${theme.space[2]}px`)};\r\n border-radius: 8px;\r\n width: ${({ isMobile }) => (isMobile ? `100%` : 'fit-content')};\r\n margin: ${({ isMobile }) => (isMobile ? `initial` : 'auto')};\r\n margin-top: ${({ isNewWidgetStyleActive, isMobile }) => (isNewWidgetStyleActive ? 0 : isMobile ? `12px` : 'inherit')};\r\n align-items: center;\r\n`;\r\n\r\nexport const LoyaltyAppliedContainer = styled(FlexCard)`\r\n background-color: ${theme.colors.loyaltyBackground};\r\n padding: 12px;\r\n border-radius: 8px;\r\n width: 100%;\r\n margin-top: ${theme.space[3]}px;\r\n color: ${theme.colors.pureWhite[0]};\r\n ${({ isUserAuthenticated }) => {\r\n if (!isUserAuthenticated)\r\n return css`\r\n cursor: pointer;\r\n &:hover {\r\n background-color: ${theme.colors.loyaltyHoverBackground};\r\n }\r\n `;\r\n }}\r\n`;\r\n\r\nexport const ButtonAndTermContainer = styled(Flex)`\r\n flex-direction: column;\r\n justify-content: space-between;\r\n width: 100%;\r\n\r\n ${theme.mediaQueries.md} {\r\n flex-direction: row;\r\n & > div:last-child {\r\n order: -1;\r\n justify-content: start;\r\n }\r\n\r\n & > div:first-child {\r\n justify-content: flex-end;\r\n }\r\n }\r\n`;\r\n\r\nexport const TermText = styled(TextLink)`\r\n font-size: ${({ size }) => size || themeGet('fontSizes.0')};\r\n color: ${themeGet('colors.pureWhite.0')};\r\n text-decoration: underline !important;\r\n font-weight: ${({ weight }) => themeGet(`fontWeights.${weight}`) || themeGet('fontWeights.regular')};\r\n`;\r\n\r\nexport const BookNowButton = styled(Button)`\r\n @media screen and (max-width: 320px) {\r\n padding: ${theme.space[1]}px ${theme.space[3]}px;\r\n }\r\n`;\r\n\r\nexport const TextBoldWithNormal = styled(Text)`\r\n font-weight: bold;\r\n line-height: 1.25;\r\n & > span {\r\n font-weight: normal;\r\n }\r\n`;\r\n\r\n// New Styles\r\n\r\nexport const LoyaltyProfileContainer = styled(Flex)`\r\n min-height: 257px;\r\n width: 100%;\r\n border: 1px solid ${theme.colors.voyagersColors[100]};\r\n margin-bottom: ${theme.space[10]}px;\r\n border-radius: 16px;\r\n flex-direction: column;\r\n overflow: hidden;\r\n background: ${theme.colors.voyagersColors[100]};\r\n ${theme.mediaQueries.xl} {\r\n width: 587px;\r\n }\r\n`;\r\n\r\nexport const PointsExpirationContainer = styled(Flex)`\r\n width: 100%;\r\n min-height: 44px;\r\n height: 48px;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: row;\r\n background: ${theme.colors.springGreen[10]};\r\n border-radius: 4px;\r\n ${theme.mediaQueries.xl} {\r\n height: 44px;\r\n }\r\n`;\r\n\r\nexport const SpanDot = styled.span`\r\n width: ${({ width }) => {\r\n return width ? width : 8;\r\n }}px;\r\n height: ${({ height }) => {\r\n return height ? height : 8;\r\n }}px;\r\n border-radius: 50%;\r\n background: ${theme.colors.voyagersColors[100]};\r\n margin-right: ${({ mr }) => {\r\n return mr ? mr : 4;\r\n }}px;\r\n`;\r\n\r\nexport const PointsContainer = styled(Flex)`\r\n flex-grow: 1;\r\n padding: 32px;\r\n flex-direction: column;\r\n ${theme.mediaQueries.xl} {\r\n padding: 24px 24px 32px 24px;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: flex-end;\r\n }\r\n`;\r\nexport const PointConditionsAndTerms = styled(Flex)`\r\n background: ${theme.colors.springGreen[10]};\r\n margin-right: 4px;\r\n width: 100%;\r\n padding: 24px;\r\n flex-direction: column;\r\n ${theme.mediaQueries.xl} {\r\n padding: 16px 24px;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n & > div:last-child {\r\n width: 230px;\r\n }\r\n }\r\n`;\r\n\r\nexport const BookNowWhite = styled(Box)`\r\n text-align: center;\r\n & > a {\r\n background-color: ${theme.colors.pureWhite[0]};\r\n color: ${theme.colors.voyagersColors[100]};\r\n &:hover {\r\n background-color: ${theme.colors.pureWhite[0]};\r\n color: ${theme.colors.voyagersColors[100]};\r\n }\r\n }\r\n`;\r\n\r\n// History component\r\n\r\nexport const LoyaltyProfilePointsHistoryContainer = styled(Box)`\r\n & > div:nth-child(odd) {\r\n background: ${theme.colors.snowMountainGrey[20]};\r\n }\r\n & > div:not(:last-child) {\r\n margin-bottom: 15px;\r\n }\r\n`;\r\n\r\nexport const LoyaltyProfilePointsHistoryTableRow = styled(Flex)`\r\n padding: 7px 24px 9px;\r\n border-radius: 1px;\r\n justify-content: space-between;\r\n\r\n ${theme.mediaQueries.md} {\r\n border-radius: 4px;\r\n justify-content: initial;\r\n }\r\n`;\r\n\r\nexport const LoyaltyProfilePointsHistoryTableRowJoinColum = styled(Flex)`\r\n width: auto;\r\n flex-direction: column;\r\n row-gap: 8px;\r\n ${theme.mediaQueries.md} {\r\n width: 269px;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n margin-right: 58px;\r\n row-gap: 0;\r\n }\r\n`;\r\n\r\nexport const StyledChevronDownIcon = styled(ArrowDownThinIcon)`\r\n pointer-events: none;\r\n stroke: ${themeGet('colors.preciousStoneBlue.100')};\r\n stroke-width: 1;\r\n width: 13px;\r\n transform: ${({ resetAvailable }) => (resetAvailable ? 'rotate(180deg)' : 'rotate(0deg)')};\r\n`;\r\n\r\nexport const SeeMoreContainer = styled(Flex)`\r\n max-width: 690px;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const LoyaltyProfilePointsHistoryDisclaimer = styled(Flex)`\r\n padding: 12px 16px;\r\n background: ${theme.colors.springGreen[10]};\r\n border-radius: 4px;\r\n margin-top: 24px;\r\n margin-bottom: 24px;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n ${theme.mediaQueries.md} {\r\n padding: 16px;\r\n margin-bottom: 56px;\r\n }\r\n`;\r\n\r\nexport const LoyaltyProfilePointsHistoryDate = styled(Text)`\r\n width: 95px;\r\n`;\r\n\r\nexport const LoyaltyJoinMessageContainer = styled(Flex)`\r\n margin-bottom: 8px;\r\n border: 2px solid ${theme.colors.voyagersColors[100]};\r\n padding: 12px 16px;\r\n border-radius: 8px;\r\n background: #cbe7cc;\r\n gap: 8px;\r\n color: ${theme.colors.deepForestGreen[100]};\r\n & > div:nth-child(2) {\r\n div {\r\n display: inline;\r\n }\r\n\r\n width: fit-content;\r\n }\r\n span {\r\n color: ${theme.colors.deepForestGreen[100]};\r\n :hover {\r\n color: ${theme.colors.deepForestGreen[100]};\r\n }\r\n }\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { showLoyalty } from '../../../store/reducers';\r\nimport { Box, Text } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { Icon, LoyaltyAppliedContainer } from '../assets/styles';\r\n\r\nconst LoyaltyApplied = ({ iconLink, adventureBucks, showLoyalty }) => {\r\n const LoyaltyContainer = (\r\n <LoyaltyAppliedContainer alignItems=\"center\" enablePadding>\r\n <Icon src={iconLink} alt=\"Loyalty\" />\r\n <Box ml={3}>\r\n <Text as=\"p\" my=\"0\" color={theme.colors.pureWhite[0]} fontWeight={theme.fontWeights.medium} fontSize={1}>\r\n {adventureBucks}{' '}\r\n <Text as=\"span\" fontWeight={theme.fontWeights.bold} color={theme.colors.pureWhite[0]}>\r\n Voyagers Points\r\n </Text>{' '}\r\n were applied!\r\n </Text>\r\n </Box>\r\n </LoyaltyAppliedContainer>\r\n );\r\n\r\n return <>{showLoyalty && LoyaltyContainer}</>;\r\n};\r\n\r\nLoyaltyApplied.propTypes = {\r\n iconLink: PropTypes.string,\r\n adventureBucks: PropTypes.number\r\n};\r\nLoyaltyApplied.defaultProps = {\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN,\r\n adventureBucks: 200\r\n};\r\n\r\nexport default connect(state => {\r\n return {\r\n showLoyalty: showLoyalty(state)\r\n };\r\n})(LoyaltyApplied);\r\n","export const CLOSE_ACCOUNT = 'If you need to close your Voyagers Club account, please call <<phone>>';\r\nexport const LOYALTY_USER_COPY = '<amount> Voyagers Points ';\r\nexport const USER_COPY = 'Adventure is waiting!';\r\nexport const AVAILABLE = 'available';\r\n\r\n//LoyaltyEarn.js\r\nexport const YOU_WILL_EARN = 'You will earn at least <POINTS> with this booking';\r\nexport const NUMBER_POINTS = '<TOTALPOINTS> Voyagers Points';\r\nexport const POINTS_EARNED_UPPON_COMPLETION = 'Points are added upon completion of stay';\r\nexport const ADD_MORE_NIGHTS = 'Add one more night to earn <POINTS> on this booking';\r\nexport const VOYAGERS_POINTS = 'Voyagers Points';\r\nexport const JOIN_VOYAGERS = 'Join Voyagers Club for free';\r\nexport const JOIN_COPY = 'and add one more night to start earning <JOIN>';\r\nexport const EARN_BY_JOIN = 'and earn <JOIN> with this booking';\r\nexport const START_EARNING = 'Start earning points with this booking';\r\n\r\nexport const YOU_HAVE_POINTS = 'You have <POINTS> Voyagers Points!';\r\nexport const EARN_POINTS = 'Earn points by booking <THRESHOLD_NIGHTS>+ nights';\r\nexport const SELECT_SUITE = 'Select a suite to apply your credit';\r\nexport const YOU_HAVE = 'You have <TEXT> <SECOND_TEXT>';\r\nexport const VOYAGERS_POINTS_EXCLAMATION = '<POINTS> Voyagers Points!';\r\nexport const VOYAGERS_POINTS_NO_EXCLAMATION = '<POINTS> Voyagers Points';\r\nexport const YOU_HAVE_POINTS_BONUS_LINK = 'You have <TEXT> and <SECOND_TEXT>';\r\nexport const YOU_HAVE_A_BONUS_DEAL = 'a Bonus Deal available!';\r\nexport const YOU_HAVE_BONUS_DEALS = 'Bonus Deals available!';\r\nexport const JOIN_VOYAGERS_CLUB_COPY = '<JOIN_UNDERLINE> and earn Voyagers Points with this booking';\r\n\r\n//Loyalty profile\r\nexport const AVAILABLE_VOYAGERS_POINTS = 'Available Voyagers Points';\r\nexport const USE_POINTS_NEXT_BOOKING = 'Use your Points on your next booking';\r\nexport const POINTS_ADDED_UPON_COMPLETION = 'Points are added upon completion of stay';\r\nexport const BOOK_NOW = 'Book Now';\r\nexport const SEE_TERMS_AND_CONDITIONS = 'See Terms & Conditions';\r\nexport const EXPIRATION_POINTS = '<POINTS> points will expire on <DATE>';\r\nexport const TEMP_EXPIRATION_NOTICE = 'Points expire 15 months after they are earned';\r\n\r\n// Loyalty history\r\nexport const VOYAGERS_POINTS_HISTORY = 'Voyagers Points History';\r\nexport const HISTORY_POINTS = '<POINTS> Points';\r\nexport const SEE_MORE = 'See More';\r\nexport const SEE_LESS = 'See Less';\r\nexport const VOYAGERS_EXPIRATION_HISTORY = 'Points expire 15 months after they are added to your account';\r\n\r\n// Loyalty Join\r\nexport const JOIN_VOYAGERS_MESSAGE = 'Get exclusive rates by <SIGN_IN> or <SIGN_UP>';\r\nexport const JOIN_VOYAGERS_MESSAGE_SIGNIN = 'signing in to your Voyagers Club account';\r\nexport const JOIN_VOYAGERS_MESSAGE_SIGNUP = 'joining now.';\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { getAvailableOffersBySearch } from '../../../store/componentStores/Offer/offer.selectors';\r\nimport { showLoyalty } from '../../../store/reducers';\r\nimport { Box, Text, TextLink } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport * as COPY_FUNCTIONS from '../../utilities/copyFunctions';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { Icon, LoyaltyAvailableContainer } from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst LoyaltyAvailable = ({\r\n isNewWidgetStyleActive,\r\n adventureBucks,\r\n iconLink,\r\n iconSize,\r\n showLoyalty,\r\n getAvailableOffersBySearch,\r\n loyaltyEarnThresholdNights = 2,\r\n numberOfNights = 0\r\n}) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.sm})`\r\n });\r\n\r\n const bonusDealLink = (\r\n <TextLink\r\n color={isNewWidgetStyleActive ? 'voyagersGreen' : 'springGreen.100'}\r\n onClick={() => {\r\n document.querySelector('[data-eventid=\"voyagers-club-offers\"]').click();\r\n }}>\r\n {getAvailableOffersBySearch.length === 1 ? COPY.YOU_HAVE_A_BONUS_DEAL : COPY.YOU_HAVE_BONUS_DEALS}\r\n </TextLink>\r\n );\r\n\r\n const boldText = (\r\n <Text as=\"b\">\r\n {COPY_FUNCTIONS.editCopyByReplaceString(\r\n getAvailableOffersBySearch.length > 0 ? COPY.VOYAGERS_POINTS_NO_EXCLAMATION : COPY.VOYAGERS_POINTS_EXCLAMATION,\r\n adventureBucks,\r\n '<POINTS>'\r\n )}\r\n </Text>\r\n );\r\n\r\n const noPointsCopy = {\r\n '<TEXT>': boldText,\r\n '<SECOND_TEXT>':\r\n getAvailableOffersBySearch.length > 0\r\n ? bonusDealLink\r\n : earnCopySelection(loyaltyEarnThresholdNights, numberOfNights)\r\n };\r\n\r\n const nwithPointsCopy = {\r\n '<TEXT>': boldText,\r\n '<SECOND_TEXT>': getAvailableOffersBySearch.length > 0 ? bonusDealLink : COPY.SELECT_SUITE\r\n };\r\n\r\n const textForMobileTest = {\r\n '<TEXT>': boldText,\r\n '<SECOND_TEXT>': bonusDealLink\r\n };\r\n\r\n const copyToUse = getAvailableOffersBySearch.length > 0 ? COPY.YOU_HAVE_POINTS_BONUS_LINK : COPY.YOU_HAVE;\r\n\r\n const LoyaltyContainer = (\r\n <LoyaltyAvailableContainer isNewWidgetStyleActive={isNewWidgetStyleActive} isMobile={isMobile}>\r\n <Icon\r\n alignSelf={isNewWidgetStyleActive && 'flex-start'}\r\n src={iconLink}\r\n alt=\"Loyalty\"\r\n size={isNewWidgetStyleActive ? (isMobile ? '32px' : '24px') : iconSize}\r\n />\r\n <Box ml={isNewWidgetStyleActive ? 2 : isMobile ? 3 : 2}>\r\n <Text\r\n as=\"p\"\r\n my=\"0\"\r\n fontSize={isMobile ? 1 : 0}\r\n fontWeight={theme.fontWeights.medium}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}>\r\n {isMobile ? (\r\n <>\r\n <Text\r\n fontWeight={theme.fontWeights.bold}\r\n fontSize={isNewWidgetStyleActive ? 0 : 1}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}\r\n lineHeight={!isNewWidgetStyleActive ? 20 : 16}>\r\n {getAvailableOffersBySearch.length > 0\r\n ? COPY_FUNCTIONS.editCopyByReplaceWithMultipleComponent(copyToUse, textForMobileTest)\r\n : COPY_FUNCTIONS.editCopyByReplaceString(COPY.YOU_HAVE_POINTS, adventureBucks, '<POINTS>')}\r\n </Text>\r\n {adventureBucks === 0 ? (\r\n <Text\r\n mt={isNewWidgetStyleActive ? 0 : 1}\r\n fontSize={isNewWidgetStyleActive ? 0 : 9}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}\r\n fontWeight={isNewWidgetStyleActive ? theme.fontWeights.medium : theme.fontWeights.regular}\r\n lineHeight={!isNewWidgetStyleActive ? 20 : 16}>\r\n {earnCopySelection(loyaltyEarnThresholdNights, numberOfNights)}\r\n </Text>\r\n ) : (\r\n <Text\r\n mt=\"1\"\r\n fontSize={isNewWidgetStyleActive ? 0 : 9}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}\r\n fontWeight={theme.fontWeights.regular}\r\n lineHeight={!isNewWidgetStyleActive ? 14 : 16}>\r\n {COPY.SELECT_SUITE}\r\n </Text>\r\n )}\r\n </>\r\n ) : (\r\n <>\r\n {adventureBucks === 0 ? (\r\n <Text\r\n fontSize={!isNewWidgetStyleActive ? 1 : 2}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}\r\n lineHeight={!isNewWidgetStyleActive ? 20 : 16}>\r\n {COPY_FUNCTIONS.editCopyByReplaceWithMultipleComponent(copyToUse, noPointsCopy)}\r\n </Text>\r\n ) : (\r\n <Text\r\n fontSize={!isNewWidgetStyleActive ? 1 : 2}\r\n color={!isNewWidgetStyleActive ? theme.colors.pureWhite[0] : theme.colors.deepLakeBlue[100]}\r\n lineHeight={!isNewWidgetStyleActive ? 20 : 16}>\r\n {COPY_FUNCTIONS.editCopyByReplaceWithMultipleComponent(copyToUse, nwithPointsCopy)}\r\n </Text>\r\n )}\r\n </>\r\n )}\r\n </Text>\r\n </Box>\r\n </LoyaltyAvailableContainer>\r\n );\r\n\r\n return <>{showLoyalty ? LoyaltyContainer : null}</>;\r\n};\r\nLoyaltyAvailable.propTypes = {\r\n adventureBucks: PropTypes.number,\r\n iconLink: PropTypes.string,\r\n iconSize: PropTypes.string\r\n};\r\nLoyaltyAvailable.defaultProps = {\r\n adventureBucks: '153',\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN\r\n};\r\n\r\nexport default connect(state => {\r\n return {\r\n showLoyalty: showLoyalty(state),\r\n getAvailableOffersBySearch: getAvailableOffersBySearch(state)\r\n };\r\n})(LoyaltyAvailable);\r\n\r\nfunction earnCopySelection(loyaltyEarnThresholdNights = 2, numberOfNights) {\r\n if (numberOfNights < loyaltyEarnThresholdNights) {\r\n return COPY_FUNCTIONS.editCopyByReplaceString(COPY.EARN_POINTS, loyaltyEarnThresholdNights, '<THRESHOLD_NIGHTS>');\r\n }\r\n return COPY.START_EARNING;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { getUserIsLoggedIn } from '../../../store/componentStores/Account/account.selectors';\r\nimport { showLoyalty } from '../../../store/reducers';\r\nimport { Box, Flex, Text } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceWithMultipleComponent } from '../../utilities/copyFunctions';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { Icon, LoyaltyGenericContainer, TextBoldWithNormal } from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst LoyaltyAvailableMobileSearch = ({ amount, iconLink, showLoyalty, isUserLoggedIn, isNewWidgetStyleActive }) => {\r\n const loggedUserCopy = {\r\n '<amount>': amount\r\n };\r\n\r\n return showLoyalty && isUserLoggedIn ? (\r\n <LoyaltyGenericContainer\r\n isNewWidgetStyleActive={isNewWidgetStyleActive}\r\n alignItems=\"center\"\r\n maxWidth=\"100%\"\r\n enableMobilePadding>\r\n <Icon src={iconLink} alt=\"Loyalty\" size={isNewWidgetStyleActive ? '32px' : '18px'} />\r\n <Box ml=\"12px\" maxWidth={isNewWidgetStyleActive ? '100%' : '127px'}>\r\n <Flex flexDirection=\"column\">\r\n <TextBoldWithNormal\r\n color={isNewWidgetStyleActive && theme.colors.deepLakeBlue[100]}\r\n lineHeight={isNewWidgetStyleActive && '16px!important'}\r\n fontSize={0}>\r\n {editCopyByReplaceWithMultipleComponent(COPY.LOYALTY_USER_COPY, loggedUserCopy)}\r\n </TextBoldWithNormal>\r\n <Text\r\n color={isNewWidgetStyleActive && theme.colors.deepLakeBlue[100]}\r\n lineHeight={isNewWidgetStyleActive && '16px!important'}\r\n fontSize={0}>\r\n {COPY.AVAILABLE}\r\n </Text>\r\n </Flex>\r\n </Box>\r\n </LoyaltyGenericContainer>\r\n ) : (\r\n <Text\r\n fontSize={`${isNewWidgetStyleActive ? theme.fontSizes[2] : theme.fontSizes[15]}px`}\r\n lineHeight={isNewWidgetStyleActive && '24px'}\r\n fontWeight={isNewWidgetStyleActive ? theme.fontWeights.medium : theme.fontWeights.bold}\r\n color={theme.colors.deepLakeBlue[100]}>\r\n {COPY.USER_COPY}\r\n </Text>\r\n );\r\n};\r\n\r\nLoyaltyAvailableMobileSearch.propTypes = {\r\n amount: PropTypes.number,\r\n iconLink: PropTypes.string\r\n};\r\nLoyaltyAvailableMobileSearch.defaultProps = {\r\n amount: '0',\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN\r\n};\r\n\r\nexport default connect(state => {\r\n return {\r\n showLoyalty: showLoyalty(state),\r\n isUserLoggedIn: getUserIsLoggedIn(state.account)\r\n };\r\n})(LoyaltyAvailableMobileSearch);\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { Box, Flex, Text } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { BookNowButton, Icon, LoyaltyWithExpirationDateContainer } from '../assets/styles';\r\n\r\nconst LoyaltyAvailableWithButton = ({ amount, iconLink }) => {\r\n return (\r\n <LoyaltyWithExpirationDateContainer\r\n alignItems=\"center\"\r\n bgColor={theme.colors.pureWhite}\r\n maxWidth=\"100%\"\r\n enableMobilePadding>\r\n <Icon src={iconLink} alt=\"Loyalty\" />\r\n <Box ml={2}>\r\n <Flex alignItems=\"center\">\r\n <Box maxWidth=\"110px\" minWidth=\"125px\">\r\n <Text as=\"b\" fontSize={0}>\r\n ${amount} Wolf Dollars\r\n </Text>\r\n </Box>\r\n <Box>\r\n <BookNowButton variant=\"book\">Book now</BookNowButton>\r\n </Box>\r\n </Flex>\r\n </Box>\r\n </LoyaltyWithExpirationDateContainer>\r\n );\r\n};\r\n\r\nLoyaltyAvailableWithButton.propTypes = {\r\n amount: PropTypes.number,\r\n iconLink: PropTypes.string\r\n};\r\nLoyaltyAvailableWithButton.defaultProps = {\r\n amount: '153',\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN\r\n};\r\n\r\nexport default LoyaltyAvailableWithButton;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport { Box, Flex, Text } from '../../ui-kit';\r\nimport CarouselChevronRightIcon from '../../ui-kit/icons/CarouselChevronRigthThin';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { Icon, LoyaltyAppliedContainer } from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\nimport { editCopyByReplaceString, editCopyByReplaceWithComponent } from './../../utilities/copyFunctions';\r\n\r\nconst calculatePointsToEarn = ({\r\n userOffers,\r\n activeOffers,\r\n pointsBalance,\r\n suitNightRate,\r\n currentSelectedPackages,\r\n pointsMultiplier\r\n}) => {\r\n let total = 0;\r\n\r\n // USE VOYAGERS POINTS\r\n let roomRateWithPoints = 0;\r\n if (!pointsBalance || pointsBalance === 0) {\r\n roomRateWithPoints = suitNightRate;\r\n } else {\r\n if (pointsBalance > suitNightRate) {\r\n roomRateWithPoints = 0;\r\n } else {\r\n roomRateWithPoints = suitNightRate - pointsBalance;\r\n }\r\n }\r\n\r\n // USE PACKAGES\r\n let packagesTotal = 0;\r\n\r\n if (currentSelectedPackages && currentSelectedPackages.length > 0) {\r\n currentSelectedPackages.forEach(currentPackage => {\r\n if (currentPackage.amount && currentPackage.quantity) {\r\n let calculateQuantityPrice = currentPackage.amount * currentPackage.quantity;\r\n packagesTotal = packagesTotal + calculateQuantityPrice;\r\n }\r\n });\r\n }\r\n\r\n // USE OFFERS\r\n let offersSavings = 0;\r\n if (userOffers && userOffers.length > 0) {\r\n offersSavings = userOffers.reduce((previousValue, currentValue) => {\r\n if (activeOffers.length > 0 && activeOffers.includes(currentValue.id)) {\r\n return previousValue + currentValue.dollarValue;\r\n } else {\r\n return previousValue;\r\n }\r\n }, 0);\r\n }\r\n\r\n // USE MULTIPLIER\r\n total = roomRateWithPoints + packagesTotal - offersSavings;\r\n let points = total * pointsMultiplier;\r\n return points.toFixed(0);\r\n};\r\n\r\nconst LoyaltyEarn = ({\r\n iconLink,\r\n numberOfNights,\r\n isUserAuthenticated,\r\n suitNightRate,\r\n pointsMultiplier,\r\n userOffers,\r\n activeOffers,\r\n currentSelectedPackages,\r\n pointsBalance,\r\n arrowVariation,\r\n loyaltyEarnThresholdNights = 2\r\n}) => {\r\n const points =\r\n suitNightRate && suitNightRate > 0\r\n ? calculatePointsToEarn({\r\n suitNightRate,\r\n pointsMultiplier,\r\n currentSelectedPackages,\r\n pointsBalance,\r\n userOffers,\r\n activeOffers\r\n })\r\n : 0;\r\n\r\n const openSignUp = useCallback(() => {\r\n if (!isUserAuthenticated && window.openSignUp) {\r\n window.openSignUp('sign-up-voyagers');\r\n }\r\n }, [isUserAuthenticated]);\r\n\r\n const pointsToEarn = () => {\r\n return <Text as=\"strong\">{editCopyByReplaceString(COPY.NUMBER_POINTS, points, '<TOTALPOINTS>')}</Text>;\r\n };\r\n\r\n const voyagersPointsCopy = () => {\r\n return <Text as=\"strong\">{COPY.VOYAGERS_POINTS}</Text>;\r\n };\r\n\r\n const joinVoyagerUnderline = () => {\r\n return (\r\n <Text as=\"span\" underline={true} fontWeight=\"bold\" capitalize>\r\n {COPY.JOIN_VOYAGERS}\r\n </Text>\r\n );\r\n };\r\n\r\n return (\r\n <LoyaltyAppliedContainer\r\n isUserAuthenticated={isUserAuthenticated}\r\n alignItems=\"center\"\r\n enablePadding\r\n onClick={openSignUp}>\r\n <Icon size=\"20px\" src={iconLink} alt=\"Loyalty\" alignSelf=\"flex-start\" />\r\n <Box ml={2}>\r\n {isUserAuthenticated && numberOfNights >= loyaltyEarnThresholdNights && (\r\n <Flex alignItems={arrowVariation ? 'center' : 'left'}>\r\n <Box width={arrowVariation ? '681px' : 'auto'}>\r\n <Text as=\"p\" lineHeight=\"20px\" fontSize={1} fontWeight=\"medium\" my=\"0\" color={theme.colors.pureWhite[0]}>\r\n {editCopyByReplaceWithComponent(COPY.YOU_WILL_EARN, pointsToEarn(), '<POINTS>')}\r\n </Text>\r\n <Text\r\n as=\"p\"\r\n fontSize={0}\r\n fontWeight=\"medium\"\r\n mt=\"2\"\r\n mb=\"0\"\r\n color={theme.colors.pureWhite[0]}\r\n lineHeight=\"20px\">\r\n {COPY.POINTS_EARNED_UPPON_COMPLETION}\r\n </Text>\r\n </Box>\r\n {arrowVariation ? (\r\n <Flex width=\"24px\" height=\"24px\" justifyContent=\"center\" alignItems=\"center\">\r\n <CarouselChevronRightIcon size={20}></CarouselChevronRightIcon>\r\n </Flex>\r\n ) : null}\r\n </Flex>\r\n )}\r\n {isUserAuthenticated && numberOfNights < loyaltyEarnThresholdNights && (\r\n <Flex alignItems={arrowVariation ? 'center' : 'left'}>\r\n <Box width={arrowVariation ? '681px' : 'auto'}>\r\n <Text lineHeight=\"20px\" as=\"p\" fontSize={1} fontWeight=\"medium\" my=\"0\" color={theme.colors.pureWhite[0]}>\r\n {editCopyByReplaceWithComponent(COPY.ADD_MORE_NIGHTS, voyagersPointsCopy(), '<POINTS>')}\r\n </Text>\r\n <Text\r\n as=\"p\"\r\n fontSize={0}\r\n fontWeight=\"medium\"\r\n mt=\"2\"\r\n mb=\"0\"\r\n color={theme.colors.pureWhite[0]}\r\n lineHeight=\"20px\">\r\n {COPY.POINTS_EARNED_UPPON_COMPLETION}\r\n </Text>\r\n </Box>\r\n {arrowVariation ? (\r\n <Flex width=\"24px\" height=\"24px\" justifyContent=\"center\" alignItems=\"center\">\r\n <CarouselChevronRightIcon size={20}></CarouselChevronRightIcon>\r\n </Flex>\r\n ) : null}\r\n </Flex>\r\n )}\r\n {!isUserAuthenticated && !arrowVariation && numberOfNights < loyaltyEarnThresholdNights && (\r\n <>\r\n <Text lineHeight=\"20px\" as=\"p\" fontSize={1} fontWeight=\"medium\" my=\"0\" color={theme.colors.pureWhite[0]}>\r\n <Text as=\"span\" underline={true} fontWeight=\"bold\">\r\n {COPY.JOIN_VOYAGERS}\r\n </Text>\r\n {editCopyByReplaceWithComponent(COPY.JOIN_COPY, voyagersPointsCopy(), '<JOIN>')}\r\n </Text>\r\n </>\r\n )}\r\n {!isUserAuthenticated && !arrowVariation && numberOfNights >= loyaltyEarnThresholdNights && (\r\n <>\r\n <Text lineHeight=\"20px\" as=\"p\" fontSize={1} fontWeight=\"medium\" my=\"0\" color={theme.colors.pureWhite[0]}>\r\n <Text as=\"span\" underline={true} fontWeight=\"bold\">\r\n {COPY.JOIN_VOYAGERS}\r\n </Text>{' '}\r\n {editCopyByReplaceWithComponent(COPY.EARN_BY_JOIN, voyagersPointsCopy(), '<JOIN>')}\r\n </Text>\r\n <Text\r\n as=\"p\"\r\n fontSize={0}\r\n fontWeight=\"medium\"\r\n mt=\"2\"\r\n mb=\"0\"\r\n color={theme.colors.pureWhite[0]}\r\n lineHeight=\"20px\">\r\n {COPY.POINTS_EARNED_UPPON_COMPLETION}\r\n </Text>\r\n </>\r\n )}\r\n {!isUserAuthenticated && arrowVariation ? (\r\n <Flex alignItems=\"center\">\r\n <Box width=\"681px\">\r\n <Text fontSize={1} fontWeight=\"bold\" color={theme.colors.pureWhite[0]} lineHeight={18}>\r\n {editCopyByReplaceWithComponent(\r\n COPY.JOIN_VOYAGERS_CLUB_COPY,\r\n joinVoyagerUnderline(),\r\n '<JOIN_UNDERLINE>'\r\n )}\r\n </Text>\r\n <Text fontSize={1} fontWeight=\"medium\" color={theme.colors.pureWhite[0]} lineHeight={20}>\r\n {COPY.POINTS_EARNED_UPPON_COMPLETION}\r\n </Text>\r\n </Box>\r\n <Flex width=\"24px\" height=\"24px\" justifyContent=\"center\" alignItems=\"center\">\r\n <CarouselChevronRightIcon size={20}></CarouselChevronRightIcon>\r\n </Flex>\r\n </Flex>\r\n ) : null}\r\n </Box>\r\n </LoyaltyAppliedContainer>\r\n );\r\n};\r\n\r\nLoyaltyEarn.propTypes = {\r\n iconLink: PropTypes.string,\r\n numberOfNights: PropTypes.number\r\n};\r\nLoyaltyEarn.defaultProps = {\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN_WHITE,\r\n numberOfNights: 1\r\n};\r\n\r\nexport default LoyaltyEarn;\r\n","import React from 'react';\r\nimport { ImageBox, Text, TextLink } from '../../ui-kit';\r\nimport { editCopyByReplaceWithMultipleComponent } from '../../utilities/copyFunctions';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { LoyaltyJoinMessageContainer } from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst LoyaltyJoinMessage = () => {\r\n const signIn = () => {\r\n if (window.openSignIn) {\r\n window.openSignIn(true);\r\n }\r\n };\r\n\r\n const signUp = () => {\r\n if (window.openSignUp) {\r\n window.openSignUp(true);\r\n }\r\n };\r\n const objectForReplace = {\r\n '<SIGN_IN>': (\r\n <TextLink as=\"div\" onClick={signIn}>\r\n {COPY.JOIN_VOYAGERS_MESSAGE_SIGNIN}\r\n </TextLink>\r\n ),\r\n '<SIGN_UP>': (\r\n <TextLink as=\"div\" onClick={signUp}>\r\n {COPY.JOIN_VOYAGERS_MESSAGE_SIGNUP}\r\n </TextLink>\r\n )\r\n };\r\n return (\r\n <LoyaltyJoinMessageContainer>\r\n <ImageBox src={LOYALTY_IMAGES.ADVENTURE_BUCK_COIN} alt=\"adventure buck\" width=\"16px\" height=\"16px\" />\r\n <Text fontSize={1} fontWeight=\"medium\">\r\n {editCopyByReplaceWithMultipleComponent(COPY.JOIN_VOYAGERS_MESSAGE, objectForReplace)}\r\n </Text>\r\n </LoyaltyJoinMessageContainer>\r\n );\r\n};\r\n\r\nexport default LoyaltyJoinMessage;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { getExpirationPoints } from '../../../store/componentStores/Account/account.selectors';\r\nimport {\r\n getCurrentResortPhone,\r\n getResortLocationUrlParam\r\n} from '../../../store/componentStores/CurrentLodge/currentLodge.selectors';\r\nimport { getIsLoyaltyPointsExpirationOnProfileEnabled } from '../../../store/componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport { showLoyalty } from '../../../store/reducers';\r\nimport { getTermsAndConditionUrl } from '../../../utilities/navigationUtils';\r\nimport { GwDatesWrapper } from '../../_internal_date_/gwDatesWrapper';\r\nimport { Box, Button, Flex, Text, TextLink } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceMultipleStrings, editCopyByReplaceString } from '../../utilities/copyFunctions';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport {\r\n BookNowWhite,\r\n Icon,\r\n LoyaltyProfileContainer,\r\n PointConditionsAndTerms,\r\n PointsContainer,\r\n PointsExpirationContainer,\r\n SpanDot\r\n} from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst LoyaltyProfilePoints = ({\r\n amount,\r\n iconLink,\r\n showLoyalty,\r\n currentResortPhone,\r\n resortLocationUrlParam,\r\n expirationPointsObject,\r\n isLoyaltyPointsExpirationOnProfileEnabled\r\n}) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.xl})`\r\n });\r\n\r\n const { nextExpirationDate, expiringMetricValue } = expirationPointsObject;\r\n\r\n const expirationObject = {\r\n '<POINTS>': expiringMetricValue ?? 0,\r\n '<DATE>': GwDatesWrapper.format(nextExpirationDate, 'MMM DD, YYYY')\r\n };\r\n\r\n return (\r\n <>\r\n {showLoyalty ? (\r\n <LoyaltyProfileContainer>\r\n {expirationPointsObject && expiringMetricValue !== 0 && isLoyaltyPointsExpirationOnProfileEnabled ? (\r\n <PointsExpirationContainer>\r\n <SpanDot />\r\n <Text\r\n fontSize={[0, 0, 0, 0, 1]}\r\n fontWeight=\"bold\"\r\n color={'voyagersColors.100'}\r\n lineHeight={[16, 16, 16, 16, 20]}>\r\n {editCopyByReplaceMultipleStrings(COPY.EXPIRATION_POINTS, expirationObject)}\r\n </Text>\r\n </PointsExpirationContainer>\r\n ) : null}\r\n\r\n <PointsContainer>\r\n <Box mb={[4, 4, 4, 4, 0]}>\r\n <Flex flexDirection=\"column\" width=\"100%\">\r\n <Box textAlign=\"center\" mb={[3]}>\r\n <Text\r\n color={theme.colors.pureWhite[0]}\r\n fontSize={[7]}\r\n fontWeight=\"bold\"\r\n lineHeight={[22, 22, 22, 22, 24]}>\r\n {COPY.AVAILABLE_VOYAGERS_POINTS}\r\n </Text>\r\n </Box>\r\n\r\n <Flex justifyContent={isMobile ? 'center' : 'start'}>\r\n <Icon size=\"32px\" src={iconLink} alt=\"Loyalty\" />\r\n <Text\r\n ml=\"12px\"\r\n color={theme.colors.pureWhite[0]}\r\n fontSize={[6, 6, 6, 6, 13]}\r\n fontWeight=\"bold\"\r\n lineHeight={[48]}>\r\n {amount}\r\n </Text>\r\n </Flex>\r\n </Flex>\r\n </Box>\r\n <Box>\r\n <BookNowWhite>\r\n <Button as=\"a\" href={`${resortLocationUrlParam}plan`}>\r\n {COPY.BOOK_NOW}\r\n </Button>\r\n </BookNowWhite>\r\n </Box>\r\n </PointsContainer>\r\n <PointConditionsAndTerms>\r\n <Box>\r\n <Flex alignItems=\"center\" flexDirection=\"row\" mb={['12px', '12px', '12px', '12px', '7px']}>\r\n <SpanDot width={5} height={5} mr={8} />\r\n <Text fontSize={[0]} fontWeight=\"medium\" lineHeight={[18]} color={'voyagersColors.100'}>\r\n {COPY.USE_POINTS_NEXT_BOOKING}\r\n </Text>\r\n </Flex>\r\n <Flex alignItems=\"center\" flexDirection=\"row\" mb={['12px', '12px', '12px', '12px', '7px']}>\r\n <SpanDot width={5} height={5} mr={8} />\r\n <Text fontSize={[0]} fontWeight=\"medium\" lineHeight={[18]} color={'voyagersColors.100'}>\r\n {COPY.POINTS_ADDED_UPON_COMPLETION}\r\n </Text>\r\n </Flex>\r\n <Flex alignItems=\"center\" flexDirection=\"row\" mb={['24px', '24px', '24px', '24px', '12px']}>\r\n <SpanDot width={5} height={5} mr={8} />\r\n <Text fontSize={[0]} fontWeight=\"medium\" lineHeight={[18]} color={'voyagersColors.100'}>\r\n {COPY.TEMP_EXPIRATION_NOTICE}\r\n </Text>\r\n </Flex>\r\n <Box textAlign={isMobile ? 'center' : 'left'} mb={['24px', '24px', '24px', '24px', '0px']}>\r\n <TextLink\r\n href={getTermsAndConditionUrl(resortLocationUrlParam)}\r\n target=\"_blank\"\r\n underline\r\n color={'voyagersColors.100'}\r\n fontSize={[1]}\r\n fontWeight=\"bold\"\r\n lineHeight={[18]}>\r\n {COPY.SEE_TERMS_AND_CONDITIONS}\r\n </TextLink>\r\n </Box>\r\n </Box>\r\n <Box textAlign={isMobile ? 'left' : 'right'}>\r\n <Text fontSize={[9]} fontWeight=\"medium\" lineHeight={[16]} color={'voyagersColors.100'}>\r\n {editCopyByReplaceString(COPY.CLOSE_ACCOUNT, currentResortPhone, '<<phone>>')}\r\n </Text>\r\n </Box>\r\n </PointConditionsAndTerms>\r\n </LoyaltyProfileContainer>\r\n ) : null}\r\n </>\r\n );\r\n};\r\n\r\nLoyaltyProfilePoints.propTypes = {\r\n amount: PropTypes.number,\r\n iconLink: PropTypes.string,\r\n showLoyalty: PropTypes.bool,\r\n locationPhone: PropTypes.string,\r\n expirationPointsObject: PropTypes.object\r\n};\r\nLoyaltyProfilePoints.defaultProps = {\r\n amount: '0',\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN_WHITE,\r\n showLoyalty: false,\r\n locationPhone: '',\r\n expirationPointsObject: {\r\n nextExpirationDate: '',\r\n expiringMetricValue: 0\r\n }\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n showLoyalty: showLoyalty(state),\r\n currentResortPhone: getCurrentResortPhone(state.currentLodge),\r\n resortLocationUrlParam: getResortLocationUrlParam(state.currentLodge),\r\n expirationPointsObject: getExpirationPoints(state.account),\r\n isLoyaltyPointsExpirationOnProfileEnabled: getIsLoyaltyPointsExpirationOnProfileEnabled(state.lodgeConfig)\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(LoyaltyProfilePoints);\r\n","import { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport UserAccountApiClientTioga from '../../api/clients/UserAccountApiClient';\r\n\r\nconst useHistoryPagination = (profileId, initialPage = 1) => {\r\n // Set Values for the page\r\n const [page, setPage] = useState(initialPage);\r\n const [pageLimit, setPageLimit] = useState(1);\r\n const [paginationContent, setPaginationContent] = useState([]);\r\n const [rowCount, setRowCount] = useState(5);\r\n const [displayArray, setDisplayArray] = useState([]);\r\n const [nextPageAvailable, setNextPageAvailable] = useState(false);\r\n const [resetAvailable, setResetAvailable] = useState(false);\r\n const rowCountLimit = useMemo(() => 50 * page, [page]);\r\n const [hasError, toggleError] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [total, setTotal] = useState(0);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n // Reset function\r\n const reset = useCallback(() => {\r\n toggleError(false);\r\n setErrorMessage('');\r\n }, []);\r\n\r\n // Update pagination on success for the useEffect\r\n const updatePaginationOnSuccessEffect = useCallback(historyData => {\r\n const { history } = historyData;\r\n // Set total array (quantity)\r\n setTotal(history.data.length || 0);\r\n // Set the initial history\r\n const initialHistory = addUUID(history.data);\r\n setPaginationContent(initialHistory);\r\n // Set the initial display array\r\n const initialDisplayArray = spliceArrayAndAddItToAnother(initialHistory, []);\r\n setDisplayArray(initialDisplayArray);\r\n // Set the next page available\r\n const isNextPagePossible = history.totalPages > 1;\r\n if (isNextPagePossible) {\r\n setNextPageAvailable(true);\r\n }\r\n // Set the page limit\r\n setPageLimit(history.totalPages);\r\n }, []);\r\n\r\n // Update pagination on success for check next page\r\n const updatePaginationOnSuccessNextPage = useCallback(\r\n historyData => {\r\n const { history } = historyData;\r\n // Get new data\r\n const nextPageData = addUUID(history.data);\r\n // Create new pagination content\r\n const newPaginationContent = [...paginationContent, ...nextPageData];\r\n // Set the new pagination content\r\n setPaginationContent(newPaginationContent);\r\n // Update the row count\r\n setRowCount(prevState => prevState + 5);\r\n // Add more rows to the display array\r\n const newDisplayArray = spliceArrayAndAddItToAnother(newPaginationContent, displayArray, rowCount, rowCount + 5);\r\n setDisplayArray(newDisplayArray);\r\n // Set new page\r\n setPage(prevState => prevState + 1);\r\n // Check if next page is possible\r\n const isNextPagePossible = page + 1 < pageLimit;\r\n if (isNextPagePossible) {\r\n setNextPageAvailable(true);\r\n } else {\r\n setNextPageAvailable(false);\r\n }\r\n },\r\n [displayArray, page, pageLimit, paginationContent, rowCount]\r\n );\r\n\r\n // Log error on failure\r\n const updatePaginationOnFailure = useCallback(error => {\r\n console.log('Error', error);\r\n }, []);\r\n\r\n /**\r\n * Fetch function\r\n * This function return dynaic tile value\r\n */\r\n const fetch = useCallback(\r\n async (id, page, { toggleLoading, onSuccess, onFailure }) => {\r\n reset();\r\n toggleLoading(true);\r\n\r\n const apiClient = new UserAccountApiClientTioga('v1');\r\n\r\n const payload = {\r\n queryParams: { page }\r\n };\r\n let result = null;\r\n\r\n try {\r\n result = await apiClient.fetchUserPointsHistory(payload);\r\n toggleLoading(false);\r\n onSuccess(result.data);\r\n } catch (error) {\r\n toggleLoading(false);\r\n toggleError(true);\r\n setErrorMessage(error);\r\n onFailure(error);\r\n }\r\n },\r\n [reset]\r\n );\r\n\r\n // Reset rows\r\n const resetRows = () => {\r\n // Reset row count\r\n setRowCount(5);\r\n // Reset display array\r\n const newDisplayArray = spliceArrayAndAddItToAnother(displayArray, []);\r\n setDisplayArray(newDisplayArray);\r\n // Reset reset available\r\n setResetAvailable(false);\r\n };\r\n\r\n // Rows to display\r\n const seeMoreRows = useCallback(() => {\r\n // If limit reached and more pages available fetch next page\r\n if (verifyIfSmallerByFive(rowCount, rowCountLimit) && nextPageAvailable) {\r\n // Get new data\r\n fetch(profileId, page + 1, {\r\n toggleLoading: setIsLoading,\r\n onSuccess: updatePaginationOnSuccessNextPage,\r\n onFailure: updatePaginationOnFailure\r\n });\r\n return;\r\n }\r\n\r\n // Update the row count\r\n const newRowCount = rowCount + 5;\r\n setRowCount(newRowCount);\r\n // Add more rows to the display array\r\n const newDisplayArray = spliceArrayAndAddItToAnother(paginationContent, displayArray, rowCount, rowCount + 5);\r\n setDisplayArray(newDisplayArray);\r\n // Check if new row count is higher than the pagination content\r\n if (newRowCount >= paginationContent.length && !nextPageAvailable) {\r\n setResetAvailable(true);\r\n }\r\n }, [\r\n displayArray,\r\n fetch,\r\n nextPageAvailable,\r\n page,\r\n paginationContent,\r\n profileId,\r\n rowCount,\r\n rowCountLimit,\r\n updatePaginationOnFailure,\r\n updatePaginationOnSuccessNextPage\r\n ]);\r\n\r\n // Set Initial Values\r\n // Best solution to avoid calling the API several times?\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n // Set the initial history\r\n if (profileId) {\r\n fetch(profileId, 1, {\r\n toggleLoading: setIsLoading,\r\n onSuccess: updatePaginationOnSuccessEffect,\r\n onFailure: updatePaginationOnFailure\r\n });\r\n }\r\n }, 1500);\r\n return () => clearTimeout(timer);\r\n }, [fetch, profileId, updatePaginationOnFailure, updatePaginationOnSuccessEffect]);\r\n\r\n return {\r\n displayArray,\r\n seeMoreRows,\r\n resetAvailable,\r\n resetRows,\r\n isLoading,\r\n hasError,\r\n errorMessage,\r\n total\r\n };\r\n};\r\n\r\nexport default useHistoryPagination;\r\n\r\n// Add UIUID to each object in the array\r\nfunction addUUID(array) {\r\n return array.map(obj => ({ ...obj, uuid: `${obj.type}-${obj.date}-${obj.points}` }));\r\n}\r\n\r\n// Order array by date from the most recent to the oldest\r\nfunction orderByDate(array) {\r\n return array.sort((a, b) => new Date(b.date) - new Date(a.date));\r\n}\r\n\r\n// Splice section of the array and add it to new array\r\nfunction spliceArrayAndAddItToAnother(rawArray, displayArray, start = 0, end = 5) {\r\n const rawCopy = [...rawArray];\r\n const displayCopy = [...displayArray];\r\n\r\n const canNotSpliceByFive = displayArray.length + 5 > rawArray.length;\r\n\r\n const rawCopySlice = canNotSpliceByFive ? rawCopy.slice(start, rawArray.length) : rawCopy.slice(start, end);\r\n rawCopySlice.forEach(item => {\r\n displayCopy.push(item);\r\n });\r\n\r\n return orderByDate(displayCopy);\r\n}\r\n\r\n// Check if value is smaller by 5 than other value\r\nfunction verifyIfSmallerByFive(currentCount, countLimit) {\r\n return currentCount === countLimit - 5;\r\n}\r\n","import React, { useRef } from 'react';\r\nimport useHistoryPagination from '../../../hooks/api_hooks/useHistoryPagination';\r\nimport useScrollToItem from '../../../hooks/ui_hooks/useScrollToItem';\r\nimport { GwDatesWrapper } from '../../_internal_date_/gwDatesWrapper';\r\nimport { Box, Text } from '../../ui-kit';\r\nimport { editCopyByReplaceString } from '../../utilities/copyFunctions';\r\nimport {\r\n LoyaltyProfilePointsHistoryContainer,\r\n LoyaltyProfilePointsHistoryDate,\r\n LoyaltyProfilePointsHistoryDisclaimer,\r\n LoyaltyProfilePointsHistoryTableRow,\r\n LoyaltyProfilePointsHistoryTableRowJoinColum,\r\n SeeMoreContainer,\r\n SpanDot,\r\n StyledChevronDownIcon\r\n} from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst HISTORY_TYPES = {\r\n referred_a_friend: 'Referred a friend',\r\n points_used_on_a_booking: 'Reservation',\r\n points_returned_from_a_cancellation: 'Canceled Booking',\r\n completed_stay: 'Stayed at lodge',\r\n sl_expire: 'Points expired'\r\n};\r\n\r\nconst LoyaltyProfilePointsHistory = ({ profileId }) => {\r\n const { displayArray, seeMoreRows, resetAvailable, resetRows, total } = useHistoryPagination(profileId);\r\n const { customScrollTo } = useScrollToItem();\r\n const seeMore = useRef(null);\r\n const historyTitle = useRef(null);\r\n\r\n const handleSeeMore = () => {\r\n resetAvailable ? resetRows() : seeMoreRows();\r\n customScrollTo({\r\n ref: resetAvailable ? historyTitle : seeMore,\r\n behavior: 'smooth',\r\n block: 'end',\r\n delay: 500,\r\n custom: {\r\n yOffset: -380\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <Box>\r\n {displayArray.length > 0 ? (\r\n <>\r\n <Text\r\n ref={historyTitle}\r\n color=\"deepLakeBlue.100\"\r\n fontWeight=\"bold\"\r\n lineHeight={[20, 20, 20, 20, 32]}\r\n fontSize={[3, 3, 3, 3, 4]}\r\n mb={[3, 3, 3, 37]}>\r\n {COPY.VOYAGERS_POINTS_HISTORY}\r\n </Text>\r\n <Box>\r\n <LoyaltyProfilePointsHistoryContainer mb={7}>\r\n {displayArray.map(item => (\r\n <LoyaltyProfilePointsHistoryTableRow key={item.uuid}>\r\n <LoyaltyProfilePointsHistoryTableRowJoinColum>\r\n <Text color=\"deepLakeBlue.100\" fontWeight=\"bold\" lineHeight={[18, 18, 18, 18, 20]} fontSize={[1]}>\r\n {HISTORY_TYPES[item.type]}\r\n </Text>\r\n <LoyaltyProfilePointsHistoryDate\r\n color=\"deepLakeBlue.100\"\r\n fontWeight=\"medium\"\r\n lineHeight={[20]}\r\n fontSize={[1]}>\r\n {GwDatesWrapper.format(item.date, 'MMM DD, YYYY')}\r\n </LoyaltyProfilePointsHistoryDate>\r\n </LoyaltyProfilePointsHistoryTableRowJoinColum>\r\n <Text\r\n color={verifyIfNegative(item.points) ? 'deepLakeBlue.100' : 'voyagersColors.100'}\r\n fontWeight=\"bold\"\r\n lineHeight={[18, 18, 18, 18, 20]}\r\n fontSize={[1]}>\r\n {editCopyByReplaceString(\r\n COPY.HISTORY_POINTS,\r\n verifyIfNegative(item.points) ? item.points : `+${item.points}`,\r\n '<POINTS>'\r\n )}\r\n </Text>\r\n </LoyaltyProfilePointsHistoryTableRow>\r\n ))}\r\n </LoyaltyProfilePointsHistoryContainer>\r\n {total && total > 5 ? (\r\n <SeeMoreContainer onClick={handleSeeMore}>\r\n <Text\r\n color=\"preciousStoneBlue.100\"\r\n fontWeight=\"bold\"\r\n lineHeight={[18, 18, 18, 18, 20]}\r\n fontSize={[1]}\r\n mr={8}\r\n ref={seeMore}>\r\n {resetAvailable ? COPY.SEE_LESS : COPY.SEE_MORE}\r\n </Text>\r\n <StyledChevronDownIcon resetAvailable={resetAvailable} />\r\n </SeeMoreContainer>\r\n ) : null}\r\n </Box>\r\n </>\r\n ) : null}\r\n\r\n <LoyaltyProfilePointsHistoryDisclaimer>\r\n <SpanDot width={8} height={8} mr={8} />\r\n <Text color=\"deepLakeBlue.100\" fontWeight=\"bold\" lineHeight={[16, 16, 16, 16, 20]} fontSize={[0, 0, 0, 0, 1]}>\r\n {COPY.VOYAGERS_EXPIRATION_HISTORY}\r\n </Text>\r\n </LoyaltyProfilePointsHistoryDisclaimer>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default LoyaltyProfilePointsHistory;\r\n\r\n// Check if number is negative or positive\r\nfunction verifyIfNegative(number) {\r\n return number < 0 ? true : false;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { Button, Flex, Text } from '../../ui-kit';\r\nimport { LOYALTY_IMAGES } from '../assets/images';\r\nimport { ButtonAndTermContainer, Icon, LoyaltyWithExpirationDateContainer, TermText } from '../assets/styles';\r\n\r\nconst LoyaltyWithExpirationDate = ({ amount, expirationDate, iconLink }) => {\r\n return (\r\n <LoyaltyWithExpirationDateContainer flexDirection=\"column\" enablePadding>\r\n <Flex maxWidth=\"100%\">\r\n <Flex mr={3}>\r\n <Icon src={iconLink} alt=\"Loyalty\" />\r\n </Flex>\r\n <Flex flexDirection=\"column\" justifyContent=\"center\" width=\"100%\" alignItems=\"center\">\r\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\r\n <Text as=\"b\">Available Wolf Dollars</Text>\r\n <Text as=\"b\">${amount}</Text>\r\n </Flex>\r\n <Flex mt={3} justifyContent=\"space-between\" width=\"100%\">\r\n <Text fontSize={0}>Expiration Date</Text>\r\n <Text fontSize={0}>{expirationDate}</Text>\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n <ButtonAndTermContainer>\r\n <Flex mt={3} width=\"100%\" justifyContent=\"center\">\r\n <Button variant=\"book\">Book now</Button>\r\n </Flex>\r\n <Flex mt={3} width=\"100%\" justifyContent=\"center\">\r\n <TermText>See Terms & Conditions</TermText>\r\n </Flex>\r\n </ButtonAndTermContainer>\r\n </LoyaltyWithExpirationDateContainer>\r\n );\r\n};\r\n\r\nLoyaltyWithExpirationDate.propTypes = {\r\n amount: PropTypes.number,\r\n expirationDate: PropTypes.string,\r\n iconLink: PropTypes.string\r\n};\r\nLoyaltyWithExpirationDate.defaultProps = {\r\n amount: '153',\r\n expirationDate: '08/21/2022',\r\n iconLink: LOYALTY_IMAGES.ADVENTURE_BUCK_COIN\r\n};\r\n\r\nexport default LoyaltyWithExpirationDate;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport LoyaltyApplied from './components/LoyaltyApplied';\r\nimport LoyaltyAvailable from './components/LoyaltyAvailable';\r\nimport LoyaltyAvailableMobileSearch from './components/LoyaltyAvailableMobileSearch';\r\nimport LoyaltyAvailableWithButton from './components/LoyaltyAvailableWithButton';\r\nimport LoyaltyEarn from './components/LoyaltyEarn';\r\nimport LoyaltyJoinMessage from './components/LoyaltyJoinMessage';\r\nimport LoyaltyProfilePoints from './components/LoyaltyProfilePoints';\r\nimport LoyaltyProfilePointsHistory from './components/LoyaltyProfilePointsHistory';\r\nimport LoyaltyWithExpirationDate from './components/LoyaltyWithExpirationDate';\r\nimport { LOYALTY_TYPES } from './utilities/constants';\r\n\r\nconst Loyalty = ({ isNewWidgetStyleActive, loyaltyType, ...props }) => {\r\n const LoyaltyOptions = {\r\n [LOYALTY_TYPES.available]: <LoyaltyAvailable isNewWidgetStyleActive={isNewWidgetStyleActive} {...props} />,\r\n [LOYALTY_TYPES.applied]: <LoyaltyApplied {...props} />,\r\n [LOYALTY_TYPES.availableWithButton]: <LoyaltyAvailableWithButton {...props} />,\r\n [LOYALTY_TYPES.withExpirationDate]: <LoyaltyWithExpirationDate {...props} />,\r\n [LOYALTY_TYPES.earn]: <LoyaltyEarn {...props} />,\r\n [LOYALTY_TYPES.profilePoints]: <LoyaltyProfilePoints {...props} />,\r\n [LOYALTY_TYPES.availableMobileSearch]: (\r\n <LoyaltyAvailableMobileSearch isNewWidgetStyleActive={isNewWidgetStyleActive} {...props} />\r\n ),\r\n [LOYALTY_TYPES.profilePointsHistory]: <LoyaltyProfilePointsHistory {...props} />,\r\n [LOYALTY_TYPES.joinVoyagersMessage]: <LoyaltyJoinMessage {...props} />\r\n };\r\n\r\n return LoyaltyOptions[loyaltyType];\r\n};\r\n\r\nLoyalty.propTypes = {\r\n amount: PropTypes.number,\r\n location: PropTypes.string,\r\n loyaltyType: PropTypes.string.isRequired,\r\n iconSize: PropTypes.string\r\n};\r\n\r\nLoyalty.defaultProps = {\r\n amount: '153',\r\n location: 'Great Wolf Lodge-Chicago / Gurnee, IL',\r\n loyaltyType: 'available',\r\n iconSize: '24px'\r\n};\r\n\r\nexport default Loyalty;\r\n","// Import types\r\nimport routes from '../../../routes';\r\nimport cartActionTypes from './cart.types';\r\n\r\n// Set cart location\r\nexport const setCartResortLocation = location => dispatch => {\r\n dispatch({\r\n type: cartActionTypes.SET_CART_RESORT_LOCATION,\r\n cartResortLocation: location\r\n });\r\n};\r\n\r\n// Reset cart location\r\nexport const resetCartResortLocation = () => dispatch => {\r\n dispatch({\r\n type: cartActionTypes.RESET_CART_RESORT_LOCATION\r\n });\r\n};\r\n\r\n// Set last visited step\r\nexport const setCartLastVisitedStep = step => dispatch => {\r\n dispatch({\r\n type: cartActionTypes.SET_CART_LAST_VISITED_STEP,\r\n cartLastVisitedStep: step\r\n });\r\n};\r\n\r\n// Push to last visited step\r\nexport const pushToLastVisitedStep = () => (dispatch, getState) => {\r\n const { cartLastVisitedStep } = getState().cart;\r\n const { resortLocationUrl } = getState().currentLodge;\r\n const { selectedPackages } = getState().packages;\r\n const hasDiningPackages = selectedPackages?.some(pkg => pkg.packageType?.includes('dining'));\r\n if (!cartLastVisitedStep || !resortLocationUrl) return;\r\n\r\n if (cartLastVisitedStep === routes.plan.dining.replace(/\\/$/, '') && hasDiningPackages) {\r\n return (window.location.href = resortLocationUrl.replace(/\\/$/, '') + routes.plan.payment.replace(/\\/$/, ''));\r\n }\r\n\r\n window.location.href = resortLocationUrl.replace(/\\/$/, '') + cartLastVisitedStep;\r\n};\r\n\r\n// Set expired cart\r\nexport const setExpiredCart = () => dispatch => {\r\n dispatch({\r\n type: cartActionTypes.SET_EXPIRED_CART,\r\n expiredCart: true\r\n });\r\n};\r\n\r\n// Reset expired cart\r\nexport const resetExpiredCart = () => dispatch => {\r\n dispatch({\r\n type: cartActionTypes.RESET_EXPIRED_CART,\r\n expiredCart: false\r\n });\r\n};\r\n","const countries = [\r\n { name: 'Afghanistan', code: 'AF' },\r\n { name: 'Åland Islands', code: 'AX' },\r\n { name: 'Albania', code: 'AL' },\r\n { name: 'Algeria', code: 'DZ' },\r\n { name: 'American Samoa', code: 'AS' },\r\n { name: 'AndorrA', code: 'AD' },\r\n { name: 'Angola', code: 'AO' },\r\n { name: 'Anguilla', code: 'AI' },\r\n { name: 'Antarctica', code: 'AQ' },\r\n { name: 'Antigua and Barbuda', code: 'AG' },\r\n { name: 'Argentina', code: 'AR' },\r\n { name: 'Armenia', code: 'AM' },\r\n { name: 'Aruba', code: 'AW' },\r\n { name: 'Australia', code: 'AU' },\r\n { name: 'Austria', code: 'AT' },\r\n { name: 'Azerbaijan', code: 'AZ' },\r\n { name: 'Bahamas', code: 'BS' },\r\n { name: 'Bahrain', code: 'BH' },\r\n { name: 'Bangladesh', code: 'BD' },\r\n { name: 'Barbados', code: 'BB' },\r\n { name: 'Belarus', code: 'BY' },\r\n { name: 'Belgium', code: 'BE' },\r\n { name: 'Belize', code: 'BZ' },\r\n { name: 'Benin', code: 'BJ' },\r\n { name: 'Bermuda', code: 'BM' },\r\n { name: 'Bhutan', code: 'BT' },\r\n { name: 'Bolivia', code: 'BO' },\r\n { name: 'Bosnia and Herzegovina', code: 'BA' },\r\n { name: 'Botswana', code: 'BW' },\r\n { name: 'Bouvet Island', code: 'BV' },\r\n { name: 'Brazil', code: 'BR' },\r\n { name: 'British Indian Ocean Territory', code: 'IO' },\r\n { name: 'Brunei Darussalam', code: 'BN' },\r\n { name: 'Bulgaria', code: 'BG' },\r\n { name: 'Burkina Faso', code: 'BF' },\r\n { name: 'Burundi', code: 'BI' },\r\n { name: 'Cambodia', code: 'KH' },\r\n { name: 'Cameroon', code: 'CM' },\r\n { name: 'Canada', code: 'CA' },\r\n { name: 'Cape Verde', code: 'CV' },\r\n { name: 'Cayman Islands', code: 'KY' },\r\n { name: 'Central African Republic', code: 'CF' },\r\n { name: 'Chad', code: 'TD' },\r\n { name: 'Chile', code: 'CL' },\r\n { name: 'China', code: 'CN' },\r\n { name: 'Christmas Island', code: 'CX' },\r\n { name: 'Cocos (Keeling) Islands', code: 'CC' },\r\n { name: 'Colombia', code: 'CO' },\r\n { name: 'Comoros', code: 'KM' },\r\n { name: 'Congo', code: 'CG' },\r\n { name: 'Congo, The Democratic Republic of the', code: 'CD' },\r\n { name: 'Cook Islands', code: 'CK' },\r\n { name: 'Costa Rica', code: 'CR' },\r\n { name: \"Cote D'Ivoire\", code: 'CI' },\r\n { name: 'Croatia', code: 'HR' },\r\n { name: 'Cuba', code: 'CU' },\r\n { name: 'Cyprus', code: 'CY' },\r\n { name: 'Czech Republic', code: 'CZ' },\r\n { name: 'Denmark', code: 'DK' },\r\n { name: 'Djibouti', code: 'DJ' },\r\n { name: 'Dominica', code: 'DM' },\r\n { name: 'Dominican Republic', code: 'DO' },\r\n { name: 'Ecuador', code: 'EC' },\r\n { name: 'Egypt', code: 'EG' },\r\n { name: 'El Salvador', code: 'SV' },\r\n { name: 'Equatorial Guinea', code: 'GQ' },\r\n { name: 'Eritrea', code: 'ER' },\r\n { name: 'Estonia', code: 'EE' },\r\n { name: 'Ethiopia', code: 'ET' },\r\n { name: 'Falkland Islands (Malvinas)', code: 'FK' },\r\n { name: 'Faroe Islands', code: 'FO' },\r\n { name: 'Fiji', code: 'FJ' },\r\n { name: 'Finland', code: 'FI' },\r\n { name: 'France', code: 'FR' },\r\n { name: 'French Guiana', code: 'GF' },\r\n { name: 'French Polynesia', code: 'PF' },\r\n { name: 'French Southern Territories', code: 'TF' },\r\n { name: 'Gabon', code: 'GA' },\r\n { name: 'Gambia', code: 'GM' },\r\n { name: 'Georgia', code: 'GE' },\r\n { name: 'Germany', code: 'DE' },\r\n { name: 'Ghana', code: 'GH' },\r\n { name: 'Gibraltar', code: 'GI' },\r\n { name: 'Greece', code: 'GR' },\r\n { name: 'Greenland', code: 'GL' },\r\n { name: 'Grenada', code: 'GD' },\r\n { name: 'Guadeloupe', code: 'GP' },\r\n { name: 'Guam', code: 'GU' },\r\n { name: 'Guatemala', code: 'GT' },\r\n { name: 'Guernsey', code: 'GG' },\r\n { name: 'Guinea', code: 'GN' },\r\n { name: 'Guinea-Bissau', code: 'GW' },\r\n { name: 'Guyana', code: 'GY' },\r\n { name: 'Haiti', code: 'HT' },\r\n { name: 'Heard Island and Mcdonald Islands', code: 'HM' },\r\n { name: 'Holy See (Vatican City State)', code: 'VA' },\r\n { name: 'Honduras', code: 'HN' },\r\n { name: 'Hong Kong', code: 'HK' },\r\n { name: 'Hungary', code: 'HU' },\r\n { name: 'Iceland', code: 'IS' },\r\n { name: 'India', code: 'IN' },\r\n { name: 'Indonesia', code: 'ID' },\r\n { name: 'Iran, Islamic Republic Of', code: 'IR' },\r\n { name: 'Iraq', code: 'IQ' },\r\n { name: 'Ireland', code: 'IE' },\r\n { name: 'Isle of Man', code: 'IM' },\r\n { name: 'Israel', code: 'IL' },\r\n { name: 'Italy', code: 'IT' },\r\n { name: 'Jamaica', code: 'JM' },\r\n { name: 'Japan', code: 'JP' },\r\n { name: 'Jersey', code: 'JE' },\r\n { name: 'Jordan', code: 'JO' },\r\n { name: 'Kazakhstan', code: 'KZ' },\r\n { name: 'Kenya', code: 'KE' },\r\n { name: 'Kiribati', code: 'KI' },\r\n { name: \"Korea, Democratic People'S Republic of\", code: 'KP' },\r\n { name: 'Korea, Republic of', code: 'KR' },\r\n { name: 'Kuwait', code: 'KW' },\r\n { name: 'Kyrgyzstan', code: 'KG' },\r\n { name: \"Lao People'S Democratic Republic\", code: 'LA' },\r\n { name: 'Latvia', code: 'LV' },\r\n { name: 'Lebanon', code: 'LB' },\r\n { name: 'Lesotho', code: 'LS' },\r\n { name: 'Liberia', code: 'LR' },\r\n { name: 'Libyan Arab Jamahiriya', code: 'LY' },\r\n { name: 'Liechtenstein', code: 'LI' },\r\n { name: 'Lithuania', code: 'LT' },\r\n { name: 'Luxembourg', code: 'LU' },\r\n { name: 'Macao', code: 'MO' },\r\n { name: 'Macedonia, The Former Yugoslav Republic of', code: 'MK' },\r\n { name: 'Madagascar', code: 'MG' },\r\n { name: 'Malawi', code: 'MW' },\r\n { name: 'Malaysia', code: 'MY' },\r\n { name: 'Maldives', code: 'MV' },\r\n { name: 'Mali', code: 'ML' },\r\n { name: 'Malta', code: 'MT' },\r\n { name: 'Marshall Islands', code: 'MH' },\r\n { name: 'Martinique', code: 'MQ' },\r\n { name: 'Mauritania', code: 'MR' },\r\n { name: 'Mauritius', code: 'MU' },\r\n { name: 'Mayotte', code: 'YT' },\r\n { name: 'Mexico', code: 'MX' },\r\n { name: 'Micronesia, Federated States of', code: 'FM' },\r\n { name: 'Moldova, Republic of', code: 'MD' },\r\n { name: 'Monaco', code: 'MC' },\r\n { name: 'Mongolia', code: 'MN' },\r\n { name: 'Montserrat', code: 'MS' },\r\n { name: 'Morocco', code: 'MA' },\r\n { name: 'Mozambique', code: 'MZ' },\r\n { name: 'Myanmar', code: 'MM' },\r\n { name: 'Namibia', code: 'NA' },\r\n { name: 'Nauru', code: 'NR' },\r\n { name: 'Nepal', code: 'NP' },\r\n { name: 'Netherlands', code: 'NL' },\r\n { name: 'Netherlands Antilles', code: 'AN' },\r\n { name: 'New Caledonia', code: 'NC' },\r\n { name: 'New Zealand', code: 'NZ' },\r\n { name: 'Nicaragua', code: 'NI' },\r\n { name: 'Niger', code: 'NE' },\r\n { name: 'Nigeria', code: 'NG' },\r\n { name: 'Niue', code: 'NU' },\r\n { name: 'Norfolk Island', code: 'NF' },\r\n { name: 'Northern Mariana Islands', code: 'MP' },\r\n { name: 'Norway', code: 'NO' },\r\n { name: 'Oman', code: 'OM' },\r\n { name: 'Pakistan', code: 'PK' },\r\n { name: 'Palau', code: 'PW' },\r\n { name: 'Palestinian Territory, Occupied', code: 'PS' },\r\n { name: 'Panama', code: 'PA' },\r\n { name: 'Papua New Guinea', code: 'PG' },\r\n { name: 'Paraguay', code: 'PY' },\r\n { name: 'Peru', code: 'PE' },\r\n { name: 'Philippines', code: 'PH' },\r\n { name: 'Pitcairn', code: 'PN' },\r\n { name: 'Poland', code: 'PL' },\r\n { name: 'Portugal', code: 'PT' },\r\n { name: 'Puerto Rico', code: 'PR' },\r\n { name: 'Qatar', code: 'QA' },\r\n { name: 'Reunion', code: 'RE' },\r\n { name: 'Romania', code: 'RO' },\r\n { name: 'Russian Federation', code: 'RU' },\r\n { name: 'RWANDA', code: 'RW' },\r\n { name: 'Saint Helena', code: 'SH' },\r\n { name: 'Saint Kitts and Nevis', code: 'KN' },\r\n { name: 'Saint Lucia', code: 'LC' },\r\n { name: 'Saint Pierre and Miquelon', code: 'PM' },\r\n { name: 'Saint Vincent and the Grenadines', code: 'VC' },\r\n { name: 'Samoa', code: 'WS' },\r\n { name: 'San Marino', code: 'SM' },\r\n { name: 'Sao Tome and Principe', code: 'ST' },\r\n { name: 'Saudi Arabia', code: 'SA' },\r\n { name: 'Senegal', code: 'SN' },\r\n { name: 'Serbia and Montenegro', code: 'CS' },\r\n { name: 'Seychelles', code: 'SC' },\r\n { name: 'Sierra Leone', code: 'SL' },\r\n { name: 'Singapore', code: 'SG' },\r\n { name: 'Slovakia', code: 'SK' },\r\n { name: 'Slovenia', code: 'SI' },\r\n { name: 'Solomon Islands', code: 'SB' },\r\n { name: 'Somalia', code: 'SO' },\r\n { name: 'South Africa', code: 'ZA' },\r\n { name: 'South Georgia and the South Sandwich Islands', code: 'GS' },\r\n { name: 'Spain', code: 'ES' },\r\n { name: 'Sri Lanka', code: 'LK' },\r\n { name: 'Sudan', code: 'SD' },\r\n { name: 'Suriname', code: 'SR' },\r\n { name: 'Svalbard and Jan Mayen', code: 'SJ' },\r\n { name: 'Swaziland', code: 'SZ' },\r\n { name: 'Sweden', code: 'SE' },\r\n { name: 'Switzerland', code: 'CH' },\r\n { name: 'Syrian Arab Republic', code: 'SY' },\r\n { name: 'Taiwan, Province of China', code: 'TW' },\r\n { name: 'Tajikistan', code: 'TJ' },\r\n { name: 'Tanzania, United Republic of', code: 'TZ' },\r\n { name: 'Thailand', code: 'TH' },\r\n { name: 'Timor-Leste', code: 'TL' },\r\n { name: 'Togo', code: 'TG' },\r\n { name: 'Tokelau', code: 'TK' },\r\n { name: 'Tonga', code: 'TO' },\r\n { name: 'Trinidad and Tobago', code: 'TT' },\r\n { name: 'Tunisia', code: 'TN' },\r\n { name: 'Turkey', code: 'TR' },\r\n { name: 'Turkmenistan', code: 'TM' },\r\n { name: 'Turks and Caicos Islands', code: 'TC' },\r\n { name: 'Tuvalu', code: 'TV' },\r\n { name: 'Uganda', code: 'UG' },\r\n { name: 'Ukraine', code: 'UA' },\r\n { name: 'United Arab Emirates', code: 'AE' },\r\n { name: 'United Kingdom', code: 'GB' },\r\n { name: 'United States', code: 'US' },\r\n { name: 'United States Minor Outlying Islands', code: 'UM' },\r\n { name: 'Uruguay', code: 'UY' },\r\n { name: 'Uzbekistan', code: 'UZ' },\r\n { name: 'Vanuatu', code: 'VU' },\r\n { name: 'Venezuela', code: 'VE' },\r\n { name: 'Viet Nam', code: 'VN' },\r\n { name: 'Virgin Islands, British', code: 'VG' },\r\n { name: 'Virgin Islands, U.S.', code: 'VI' },\r\n { name: 'Wallis and Futuna', code: 'WF' },\r\n { name: 'Western Sahara', code: 'EH' },\r\n { name: 'Yemen', code: 'YE' },\r\n { name: 'Zambia', code: 'ZM' },\r\n { name: 'Zimbabwe', code: 'ZW' }\r\n];\r\n\r\nexport default countries;\r\n","import styled, { css } from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\nimport { Box, Flex } from '../../ui-kit/index';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\nexport const PackageBox = styled(Box)`\r\n background: ${themeGet('colors.pureWhite.0')};\r\n`;\r\n\r\nexport const Wrapper = styled(Box)`\r\n ${props =>\r\n props.applyBorder\r\n ? css`\r\n border-radius: ${theme.radii[5]}px;\r\n box-shadow: ${theme.boxShadows[21]}\r\n border: ${theme.borders[4]}\r\n background-image: linear-gradient(\r\n to right,\r\n ${themeGet('colors.pureWhite.0')} -11%,\r\n ${themeGet('colors.snowMountainGrey.20')} 138%\r\n )`\r\n : css`\r\n border-radius: ${theme.radii[1]}px;\r\n border-bottom: ${theme.borders[4]};\r\n `}\r\n`;\r\n\r\nexport const PriceDivider = styled(Box)`\r\n opacity: 0.4;\r\n border-top: ${props => (props.dashed ? 'dashed' : 'solid')} 1px ${themeGet('colors.kiddiePoolBlue.50')};\r\n`;\r\n\r\nexport const SustainabilityTooltip = styled.span`\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n background: ${theme.colors.pureWhite[0]};\r\n font-size: ${`${theme.fontSizes[0]}px`};\r\n font-weight: ${theme.fontWeights.semibold};\r\n cursor: pointer;\r\n`;\r\n\r\nexport const SustainabilityContainer = styled(Flex)`\r\n min-height: 22px;\r\n`;\r\n\r\nexport const DayPassContainer = styled(Flex)`\r\n position: relative;\r\n border-bottom: 1px solid ${theme.colors.deepLakeBlue[20]};\r\n\r\n ${Flex} {\r\n &:not(:last-child) {\r\n border-right: 1px solid ${theme.colors.deepLakeBlue[20]};\r\n }\r\n }\r\n`;\r\n","// This component is deprecated, please use src/components/ui-kit/NewSelect\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nimport PropTypes from 'prop-types';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\nimport { fontWeights } from '../../ui-kit/themes/theme';\r\nimport Box from '../Box';\r\nimport Flex from '../Flex';\r\nimport Label from '../Label';\r\nimport Relative from '../Relative';\r\nimport Text from '../Text';\r\nimport ArrowDownThinIcon from '../icons/ArrowDownThin';\r\n\r\nconst borderColor = ({ invalid, valid }) => {\r\n if (valid) {\r\n return css`\r\n border-color: ${themeGet('colors.successGreen')};\r\n `;\r\n }\r\n if (invalid) {\r\n return css`\r\n border-color: ${themeGet('colors.digitalBrightRed.100')};\r\n `;\r\n }\r\n\r\n return css`\r\n border-color: ${themeGet('colors.preciousStoneBlue.20')};\r\n `;\r\n};\r\n\r\nconst StyledSelect = styled.select`\r\n margin: 0px;\r\n cursor: pointer;\r\n appearance: none;\r\n padding-top: ${({ placeholder, paddingTop }) => (paddingTop ? paddingTop : !!placeholder ? `22px` : `15px`)};\r\n padding-bottom: ${({ placeholder, paddingBottom }) =>\r\n paddingBottom ? paddingBottom : !!placeholder ? `10px` : `14px`};\r\n padding-left: 16px;\r\n padding-right: 30px;\r\n border-radius: ${({ borderRadius }) => (borderRadius ? borderRadius : '10px')};\r\n background-color: ${({ backgroundColor }) =>\r\n backgroundColor ? themeGet('colors.' + backgroundColor) : themeGet('colors.snowMountainGrey.20')};\r\n width: 100%;\r\n border-width: ${({ borderWidth }) => (borderWidth ? borderWidth : '1px')};\r\n border-style: solid;\r\n font-size: ${({ fontSize }) => (fontSize ? themeGet('fontSizes.' + fontSize) : themeGet('fontSizes.1'))}px;\r\n color: ${({ color }) => (color ? themeGet('colors.' + color) : themeGet('colors.deepLakeBlue.100'))};\r\n font-family: ${themeGet('fonts.secondary')};\r\n font-weight: ${({ fontWeight }) => (fontWeight ? fontWeight : themeGet('fontWeights.regular'))};\r\n line-height: 1.2;\r\n height: ${({ height }) => (height ? height : `50px`)};\r\n\r\n &:focus {\r\n outline: unset;\r\n border: none;\r\n box-shadow: 0 0 0 2px ${themeGet('colors.focusBlue')};\r\n }\r\n\r\n & + svg {\r\n ${({ isNewWidgetStyleActive }) =>\r\n isNewWidgetStyleActive &&\r\n css`\r\n fill: ${themeGet('colors.deepLakeBlue.100')};\r\n top: 35px;\r\n right: 13px;\r\n stroke-width: 2;\r\n path {\r\n stroke: black;\r\n stroke-width: 2;\r\n }\r\n `}\r\n }\r\n\r\n ${borderColor}\r\n`;\r\n\r\nconst StyledChevronDownIcon = styled(ArrowDownThinIcon)`\r\n pointer-events: none;\r\n display: flex;\r\n position: absolute;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n right: 10px;\r\n fill: ${themeGet('colors.preciousStoneBlue.100')};\r\n`;\r\n\r\nconst StyledPlaceHolder = styled(Label)`\r\n top: 25px;\r\n transform: ${({ active }) => (active ? `translateY(-15px) scale(.57)` : `translateY(-50%)`)};\r\n left: ${themeGet('space.3')}px;\r\n color: ${props => (props.active ? themeGet('colors.preciousStoneBlue.100') : themeGet('colors.deepLakeBlue.100'))};\r\n opacity: ${props => (props.active ? 1 : 0.6)};\r\n transition: all 0.1s ease-in-out 0s;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n`;\r\n\r\nconst propTypes = {\r\n /**\r\n Use the invalid state to indicate there was an error validating this field.\r\n */\r\n invalid: PropTypes.bool,\r\n /**\r\n Use the valid prop to indicate if the select was successfully validated\r\n filled; this will take precedence over the invalid prop.\r\n */\r\n valid: PropTypes.bool,\r\n /**\r\n * Shows an error message, it will only display if invalid is `true`.\r\n */\r\n errorMessage: PropTypes.string,\r\n /**\r\n * Floating label text.\r\n */\r\n placeholder: PropTypes.string,\r\n /**\r\n * Execute function when the component gets focus, this will be executed\r\n * after moving the floating label.\r\n */\r\n onFocus: PropTypes.func,\r\n /**\r\n * Execute function when the `Select` component losses focus, this will be\r\n * executed after moving the floating label.\r\n */\r\n onBlur: PropTypes.func,\r\n /**\r\n * Value to select if the `Select`component is used as a controlled input.\r\n */\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n /**\r\n * Value to be used when the `Select`component is not used as a controlled\r\n * input.\r\n */\r\n defaultValue: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n invalid: false,\r\n valid: false,\r\n onFocus: () => {},\r\n onBlur: () => {}\r\n};\r\n\r\n/**\r\n * Use the `Select` component to give the user multiple selections with and\r\n * enhanced design but, preserving native select UI.\r\n *\r\n * Aside from the props listed below, this component accepts all the normal\r\n * props from a select HTML tag, they will be streamed to the select tag.\r\n */\r\nconst Select = ({\r\n children,\r\n errorMessage,\r\n placeholder,\r\n onFocus,\r\n onBlur,\r\n value,\r\n id,\r\n defaultValue,\r\n invalid,\r\n ...props\r\n}) => {\r\n const [isFocusedOrFilled, setIsFocusedOrFilled] = useState((!!value && value !== 'placeholder') || defaultValue);\r\n\r\n useEffect(() => {\r\n setIsFocusedOrFilled((!!value && value !== 'placeholder') || defaultValue);\r\n }, [value]);\r\n\r\n const selectRef = useRef(null);\r\n\r\n const focusHandler = e => {\r\n if (!isFocusedOrFilled) {\r\n setIsFocusedOrFilled(true);\r\n }\r\n\r\n onFocus(e);\r\n };\r\n\r\n const blurHandler = e => {\r\n const {\r\n current: { value: selectValue }\r\n } = selectRef;\r\n setIsFocusedOrFilled(!!selectValue && selectValue !== 'placeholder');\r\n onBlur(e);\r\n };\r\n\r\n const getDefaultValue = () => {\r\n if (defaultValue) {\r\n return {\r\n defaultValue\r\n };\r\n }\r\n\r\n if (placeholder && !value) {\r\n return {\r\n defaultValue: 'placeholder'\r\n };\r\n }\r\n\r\n return {};\r\n };\r\n\r\n const getValue = () => {\r\n if (isFocusedOrFilled) {\r\n return { value };\r\n }\r\n\r\n return {};\r\n };\r\n\r\n return (\r\n <Box>\r\n <Relative>\r\n <StyledSelect\r\n className={''}\r\n {...props}\r\n {...getValue()}\r\n {...getDefaultValue()}\r\n ref={selectRef}\r\n id={id}\r\n placeholder={placeholder}\r\n onFocus={focusHandler}\r\n onBlur={blurHandler}\r\n invalid={invalid}>\r\n {placeholder && <option value=\"placeholder\" hidden></option>}\r\n {children}\r\n </StyledSelect>\r\n {placeholder && (\r\n <StyledPlaceHolder for={id} active={isFocusedOrFilled}>\r\n {placeholder}\r\n </StyledPlaceHolder>\r\n )}\r\n <StyledChevronDownIcon size={14}></StyledChevronDownIcon>\r\n </Relative>\r\n {errorMessage && invalid && (\r\n <Flex minHeight=\"13px\" alignItems=\"center\">\r\n <Text\r\n as={'label'}\r\n fontWeight={fontWeights.medium}\r\n mt=\"8px\"\r\n mb=\"8px\"\r\n fontSize={9}\r\n color=\"digitalBrightRed.100\">\r\n {errorMessage}\r\n </Text>\r\n </Flex>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nSelect.propTypes = propTypes;\r\nSelect.defaultProps = defaultProps;\r\n\r\nexport default Select;\r\n","import Select from './Select';\r\n\r\nexport default Select;\r\n","import React from 'react';\r\nimport Select from '../ui-kit/Select';\r\nimport {\r\n getDropdownDataForPackage,\r\n shouldShowQuantitySelect\r\n} from '../../utilities/packagesUtils';\r\n\r\nconst SelectPackageQuantity = ({\r\n quantitySelected,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n packageItem,\r\n handleUpdatePackageQuantity,\r\n numberOfGuests,\r\n isNiagaraProperty,\r\n ...props\r\n}) => {\r\n // Some package information comes in a different shape,\r\n // we need to map with the information and object properties we need to consume\r\n const pkgItem = { ...packageItem };\r\n pkgItem.packageCode = packageItem.packageCode || packageItem.id;\r\n pkgItem.quantity = packageItem.quantity || packageItem.quantityAdded;\r\n\r\n const isCabana = packageItem.isCabana || false;\r\n\r\n const shouldShowSelect = shouldShowQuantitySelect(pkgItem) && !isCabana;\r\n\r\n if (\r\n (pkgItem.showQuantitySelect === undefined ||\r\n pkgItem.showQuantitySelect === true) &&\r\n shouldShowSelect\r\n ) {\r\n const { quantity, options } = getDropdownDataForPackage(\r\n pkgItem,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n numberOfGuests,\r\n isNiagaraProperty\r\n );\r\n\r\n return (\r\n <Select\r\n value={quantitySelected || quantity}\r\n onChange={e => handleUpdatePackageQuantity(e, pkgItem)}\r\n {...props}>\r\n {options}\r\n </Select>\r\n );\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nexport default SelectPackageQuantity;\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\n\r\nexport const OFFERS_IMAGES = {\r\n OFFERS_GWL_VOYAGERS_CLUB: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'gwl-voyagers-club.svg'),\r\n OFFERS_V_GREEN_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'v-green.svg'),\r\n OFFERS_V_BLUE_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'v-blue.svg'),\r\n OFFERS_V_GRAY_ICON: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'v-gray.svg')\r\n};\r\n","// Canada provinces\r\nconst provinces = [\r\n {\r\n name: 'Alberta',\r\n abbreviation: 'AB'\r\n },\r\n {\r\n name: 'British Columbia',\r\n abbreviation: 'BC'\r\n },\r\n {\r\n name: 'Manitoba',\r\n abbreviation: 'MB'\r\n },\r\n {\r\n name: 'New Brunswick',\r\n abbreviation: 'NB'\r\n },\r\n {\r\n name: 'Newfoundland and Labrador',\r\n abbreviation: 'NL'\r\n },\r\n {\r\n name: 'Nova Scotia',\r\n abbreviation: 'NS'\r\n },\r\n {\r\n name: 'Northwest Territories',\r\n abbreviation: 'NT'\r\n },\r\n {\r\n name: 'Nunavut',\r\n abbreviation: 'NU'\r\n },\r\n {\r\n name: 'Ontario',\r\n abbreviation: 'ON'\r\n },\r\n {\r\n name: 'Prince Edward Island',\r\n abbreviation: 'PE'\r\n },\r\n {\r\n name: 'Québec',\r\n abbreviation: 'QC'\r\n },\r\n {\r\n name: 'Saskatchewan',\r\n abbreviation: 'SK'\r\n },\r\n {\r\n name: 'Yukon',\r\n abbreviation: 'YT'\r\n }\r\n];\r\n\r\nexport default provinces;\r\n","const states = [\r\n {\r\n name: 'Alabama',\r\n abbreviation: 'AL'\r\n },\r\n {\r\n name: 'Alaska',\r\n abbreviation: 'AK'\r\n },\r\n {\r\n name: 'American Samoa',\r\n abbreviation: 'AS'\r\n },\r\n {\r\n name: 'Arizona',\r\n abbreviation: 'AZ'\r\n },\r\n {\r\n name: 'Arkansas',\r\n abbreviation: 'AR'\r\n },\r\n {\r\n name: 'California',\r\n abbreviation: 'CA'\r\n },\r\n {\r\n name: 'Colorado',\r\n abbreviation: 'CO'\r\n },\r\n {\r\n name: 'Connecticut',\r\n abbreviation: 'CT'\r\n },\r\n {\r\n name: 'Delaware',\r\n abbreviation: 'DE'\r\n },\r\n {\r\n name: 'District Of Columbia',\r\n abbreviation: 'DC'\r\n },\r\n {\r\n name: 'Federated States Of Micronesia',\r\n abbreviation: 'FM'\r\n },\r\n {\r\n name: 'Florida',\r\n abbreviation: 'FL'\r\n },\r\n {\r\n name: 'Georgia',\r\n abbreviation: 'GA'\r\n },\r\n {\r\n name: 'Guam',\r\n abbreviation: 'GU'\r\n },\r\n {\r\n name: 'Hawaii',\r\n abbreviation: 'HI'\r\n },\r\n {\r\n name: 'Idaho',\r\n abbreviation: 'ID'\r\n },\r\n {\r\n name: 'Illinois',\r\n abbreviation: 'IL'\r\n },\r\n {\r\n name: 'Indiana',\r\n abbreviation: 'IN'\r\n },\r\n {\r\n name: 'Iowa',\r\n abbreviation: 'IA'\r\n },\r\n {\r\n name: 'Kansas',\r\n abbreviation: 'KS'\r\n },\r\n {\r\n name: 'Kentucky',\r\n abbreviation: 'KY'\r\n },\r\n {\r\n name: 'Louisiana',\r\n abbreviation: 'LA'\r\n },\r\n {\r\n name: 'Maine',\r\n abbreviation: 'ME'\r\n },\r\n {\r\n name: 'Marshall Islands',\r\n abbreviation: 'MH'\r\n },\r\n {\r\n name: 'Maryland',\r\n abbreviation: 'MD'\r\n },\r\n {\r\n name: 'Massachusetts',\r\n abbreviation: 'MA'\r\n },\r\n {\r\n name: 'Michigan',\r\n abbreviation: 'MI'\r\n },\r\n {\r\n name: 'Minnesota',\r\n abbreviation: 'MN'\r\n },\r\n {\r\n name: 'Mississippi',\r\n abbreviation: 'MS'\r\n },\r\n {\r\n name: 'Missouri',\r\n abbreviation: 'MO'\r\n },\r\n {\r\n name: 'Montana',\r\n abbreviation: 'MT'\r\n },\r\n {\r\n name: 'Nebraska',\r\n abbreviation: 'NE'\r\n },\r\n {\r\n name: 'Nevada',\r\n abbreviation: 'NV'\r\n },\r\n {\r\n name: 'New Hampshire',\r\n abbreviation: 'NH'\r\n },\r\n {\r\n name: 'New Jersey',\r\n abbreviation: 'NJ'\r\n },\r\n {\r\n name: 'New Mexico',\r\n abbreviation: 'NM'\r\n },\r\n {\r\n name: 'New York',\r\n abbreviation: 'NY'\r\n },\r\n {\r\n name: 'North Carolina',\r\n abbreviation: 'NC'\r\n },\r\n {\r\n name: 'North Dakota',\r\n abbreviation: 'ND'\r\n },\r\n {\r\n name: 'Northern Mariana Islands',\r\n abbreviation: 'MP'\r\n },\r\n {\r\n name: 'Ohio',\r\n abbreviation: 'OH'\r\n },\r\n {\r\n name: 'Oklahoma',\r\n abbreviation: 'OK'\r\n },\r\n {\r\n name: 'Oregon',\r\n abbreviation: 'OR'\r\n },\r\n {\r\n name: 'Palau',\r\n abbreviation: 'PW'\r\n },\r\n {\r\n name: 'Pennsylvania',\r\n abbreviation: 'PA'\r\n },\r\n {\r\n name: 'Puerto Rico',\r\n abbreviation: 'PR'\r\n },\r\n {\r\n name: 'Rhode Island',\r\n abbreviation: 'RI'\r\n },\r\n {\r\n name: 'South Carolina',\r\n abbreviation: 'SC'\r\n },\r\n {\r\n name: 'South Dakota',\r\n abbreviation: 'SD'\r\n },\r\n {\r\n name: 'Tennessee',\r\n abbreviation: 'TN'\r\n },\r\n {\r\n name: 'Texas',\r\n abbreviation: 'TX'\r\n },\r\n {\r\n name: 'Utah',\r\n abbreviation: 'UT'\r\n },\r\n {\r\n name: 'Vermont',\r\n abbreviation: 'VT'\r\n },\r\n {\r\n name: 'Virgin Islands',\r\n abbreviation: 'VI'\r\n },\r\n {\r\n name: 'Virginia',\r\n abbreviation: 'VA'\r\n },\r\n {\r\n name: 'Washington',\r\n abbreviation: 'WA'\r\n },\r\n {\r\n name: 'West Virginia',\r\n abbreviation: 'WV'\r\n },\r\n {\r\n name: 'Wisconsin',\r\n abbreviation: 'WI'\r\n },\r\n {\r\n name: 'Wyoming',\r\n abbreviation: 'WY'\r\n }\r\n];\r\n\r\nexport default states;\r\n","import Text from './Text';\r\nimport theme from './themes/theme';\r\n\r\nconst Heading = Text.withComponent('h3');\r\n\r\nHeading.defaultProps = {\r\n fontWeight: 'bold',\r\n fontSize: 4,\r\n theme: theme,\r\n fontFamily: theme.fontPrimary\r\n};\r\n\r\nHeading.displayName = 'Heading';\r\n\r\nHeading.H1 = Heading.withComponent('h1');\r\nHeading.H1.defaultProps = {\r\n fontSize: 6,\r\n fontWeight: 'bold',\r\n theme: theme,\r\n fontFamily: theme.fontPrimary\r\n};\r\n\r\nHeading.H2 = Heading.withComponent('h2');\r\nHeading.H2.defaultProps = {\r\n fontSize: 5,\r\n fontWeight: 'bold',\r\n theme: theme,\r\n fontFamily: theme.fontPrimary\r\n};\r\n\r\nHeading.H3 = Heading.withComponent('h3');\r\nHeading.H3.defaultProps = {\r\n fontSize: 8,\r\n fontWeight: 'bold',\r\n theme: theme,\r\n fontFamily: theme.fontMontBold\r\n};\r\n\r\nHeading.H4 = Heading.withComponent('h4');\r\nHeading.H4.defaultProps = {\r\n fontSize: 1,\r\n theme: theme,\r\n fontFamily: theme.fontMontBlack\r\n};\r\n\r\nHeading.H5 = Heading.withComponent('h5');\r\nHeading.H5.defaultProps = {\r\n fontSize: 7,\r\n fontWeight: 'bold',\r\n theme: theme,\r\n fontFamily: theme.fontOswaldBold\r\n};\r\n\r\nHeading.H6 = Heading.withComponent('h6');\r\nHeading.H6.defaultProps = {\r\n fontSize: 0,\r\n fontWeight: 'bold',\r\n theme: theme,\r\n fontFamily: theme.fontPrimary\r\n};\r\n\r\nexport default Heading;\r\n","// LeadGen action types\r\n\r\nconst leadGenActionTypes = {\r\n IS_LEADGEN_PROCESSING_TYPE: 'IS_LEADGEN_PROCESSING_TYPE',\r\n SET_LEADGEN_IS_ALREADY_SHOWN: 'SET_LEADGEN_IS_ALREADY_SHOWN',\r\n RESET_LEADGEN_STATUS: 'RESET_LEADGEN_STATUS'\r\n};\r\n\r\nexport default leadGenActionTypes;\r\n","import styled, { css } from 'styled-components';\r\nimport theme from '../ui-kit/themes/theme';\r\nimport ModalAdapter from './ModalAdapter';\r\n\r\nconst StyledModal = styled(ModalAdapter).attrs({\r\n overlayClassName: 'Overlay',\r\n modalClassName: 'Modal',\r\n closeTimeoutMS: 250\r\n})`\r\n .Overlay {\r\n position: fixed;\r\n top: ${props => (props.fullSizeContent && props.fullSizeContentTop ? `${props.fullSizeContentTop}px` : 0)};\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: ${props =>\r\n props.fullSizeContent && props.fullSizeBackgroundColor\r\n ? props.fullSizeBackgroundColor\r\n : `${theme.colors.deepLakeBlue[100]}80`};\r\n transition: opacity 0.25s ease-in-out;\r\n z-index: ${props => (props.zIndex ? props.zIndex : theme.zIndex.loader)};\r\n opacity: 0;\r\n }\r\n\r\n .ReactModal__Overlay--after-open {\r\n opacity: 1;\r\n }\r\n\r\n .ReactModal__Overlay--before-close {\r\n opacity: 0;\r\n }\r\n\r\n .Modal {\r\n ${props => props.width && `width : ${props.width};`}\r\n ${props => props.height && `height : ${props.height};`}\r\n ${props => props.maxWidth && `max-width : ${props.maxWidth};`}\r\n ${props => props.marginTop && `margin-top : ${props.marginTop};`}\r\n outline: none;\r\n max-height: 100%;\r\n\r\n ${({ fullSizeContent }) => {\r\n if (fullSizeContent) {\r\n return css`\r\n width: 100%;\r\n height: 100%;\r\n background: ${props =>\r\n props.fullSizeBackgroundColor ? props.fullSizeBackgroundColor : props.theme.colors.nightSkyBlack[100]};\r\n `;\r\n }\r\n\r\n return css`\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n position: absolute;\r\n background: ${props => props.theme.colors.pureWhite[0]};\r\n overflow: auto;\r\n -webkit-overflow-scrolling: touch;\r\n padding: ${props => (props.padding ? props.padding : 0)};\r\n box-shadow: ${props => props.theme.boxShadows[3]};\r\n border-radius: ${props => (props.borderRadius ? props.borderRadius : '8px')};\r\n `;\r\n }}\r\n }\r\n`;\r\n\r\nStyledModal.displayName = 'StyledModal';\r\n\r\nStyledModal.defaultProps = {\r\n theme: theme,\r\n padding: '30px'\r\n};\r\n\r\nexport default StyledModal;\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\n\r\nconst ModalAdapter = ({ className, modalClassName, ...props }) => {\r\n return (\r\n <Modal className={modalClassName} portalClassName={className} {...props} />\r\n );\r\n};\r\n\r\nexport default ModalAdapter;\r\n","export const isPayPalEnabled = (enabledAt, property) => {\r\n if (enabledAt) {\r\n var list = enabledAt.split(',');\r\n return list.includes(property);\r\n }\r\n};\r\n","// Booking Engine Alert action types\r\n\r\nconst bookingEngineAlertActionTypes = {\r\n SET_BOOK_ENGINE_ALERT_IS_SUCCESSFUL: 'SET_BOOK_ENGINE_ALERT_IS_SUCCESSFUL',\r\n SET_BOOK_ENGINE_ALERT_IS_LOADING: 'SET_BOOK_ENGINE_ALERT_IS_LOADING',\r\n SET_BOOK_ENGINE_ALERT_GOT_ERROR: 'SET_BOOK_ENGINE_ALERT_GOT_ERROR'\r\n};\r\n\r\nexport default bookingEngineAlertActionTypes;\r\n","// Current Lodge action types\r\n\r\nconst currentLodgeActionTypes = {\r\n UPDATE_CURRENT_LODGE: 'UPDATE_CURRENT_LODGE'\r\n};\r\n\r\nexport default currentLodgeActionTypes;\r\n","const flowActionTypes = {\r\n FETCH_FLOW_STEPS_REQUEST: 'FETCH_FLOW_STEPS_REQUEST',\r\n FETCH_FLOW_STEPS_SUCCESS: 'FETCH_FLOW_STEPS_SUCCESS',\r\n FETCH_FLOW_STEPS_FAILURE: 'FETCH_FLOW_STEPS_FAILURE'\r\n};\r\n\r\nexport default flowActionTypes;\r\n","// Guests action types\r\n\r\nconst guestsModalActionTypes = {\r\n SET_GUESTS_ADULTS_COUNT: 'SET_GUESTS_ADULTS_COUNT',\r\n SET_GUESTS_KIDS_COUNT: 'SET_GUESTS_KIDS_COUNT',\r\n SET_GUESTS_KIDS_AGES: 'SET_GUESTS_KIDS_AGES'\r\n};\r\n\r\nexport default guestsModalActionTypes;\r\n","// IEModal action types\r\n\r\nconst ieModalActionTypes = {\r\n SET_IEMODAL_IS_ALREADY_SHOWN: 'SET_IEMODAL_IS_ALREADY_SHOWN'\r\n};\r\n\r\nexport default ieModalActionTypes;\r\n","// Offer reducer\r\n\r\nimport AuthClient from '../../../api/auth/AuthClient';\r\n\r\nimport {\r\n OFFERS_ACTIONS,\r\n offerEventBuilder\r\n} from '../../../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport { pushEvent } from '../../../utilities/dataLayerUtils';\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport offerActionTypes from './offer.types';\r\n\r\nconst authClient = new AuthClient();\r\n\r\nexport const getDefaultOfferCode = (fallbackValue = '') => {\r\n const isUserLoggedIn = authClient.isLoggedIn();\r\n const promoCodeList = window.promoCodeList ? JSON.parse(window.promoCodeList) : [];\r\n const relatedOfferCode = promoCodeList.find(item => item.promoCode === window.dealPromoCode);\r\n const isGatedOffer = relatedOfferCode && JSON.parse(relatedOfferCode.isExclusive);\r\n\r\n if (isGatedOffer && !isUserLoggedIn) {\r\n return fallbackValue;\r\n }\r\n\r\n return window.dealPromoCode || fallbackValue;\r\n};\r\n\r\nconst INITIAL_STATE = {\r\n code: getDefaultOfferCode(),\r\n description: '',\r\n validOffer: false,\r\n errorMessage: '',\r\n activeOffers: [],\r\n emailOffers: []\r\n};\r\n\r\nconst offerReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n case offerActionTypes.ADD_OFFER_CODE:\r\n return { ...state, code: action.code };\r\n case offerActionTypes.SET_OFFER_CODE_DESCRIPTION:\r\n return {\r\n ...state,\r\n description: action.description,\r\n validOffer: action.description ? true : false,\r\n errorMessage: ''\r\n };\r\n case offerActionTypes.REMOVE_OFFER_CODE:\r\n return {\r\n ...state,\r\n code: ''\r\n };\r\n case offerActionTypes.CREATE_OFFER_ERROR:\r\n return {\r\n ...state,\r\n validOffer: false,\r\n errorMessage: action.errorMessage,\r\n description: ''\r\n };\r\n case offerActionTypes.ADD_OFFER_ACTIVE_TYPE: {\r\n const eventObject = offerEventBuilder(OFFERS_ACTIONS.ADD, {\r\n resortLocation: action.offerData.resortLocation,\r\n name: action.offerData.title,\r\n value: -action.offerData.dollarValue\r\n });\r\n pushEvent(eventObject);\r\n const activeOffers = [...state.activeOffers];\r\n if (!activeOffers.includes(action.offerData.id)) {\r\n activeOffers.push(action.offerData.id);\r\n return { ...state, activeOffers: activeOffers };\r\n }\r\n return state;\r\n }\r\n case offerActionTypes.ADD_OFFER_EMAIL_ACTIVE_TYPE: {\r\n const emailOffers = [...state.emailOffers];\r\n if (!emailOffers.includes(action.offerData.id)) {\r\n emailOffers.push(action.offerData.id);\r\n return { ...state, emailOffers: emailOffers };\r\n }\r\n return state;\r\n }\r\n case offerActionTypes.REMOVE_OFFER_ACTIVE_TYPE: {\r\n const eventObject = offerEventBuilder(OFFERS_ACTIONS.REMOVE, {\r\n resortLocation: action.offerData.resortLocation,\r\n name: action.offerData.title,\r\n value: -action.offerData.dollarValue\r\n });\r\n pushEvent(eventObject);\r\n const activeOffers = state.activeOffers.filter(offer => offer !== action.offerData.id);\r\n const activeEmailOffers = state.emailOffers.filter(offer => offer !== action.offerData.id);\r\n return { ...state, activeOffers: activeOffers, emailOffers: activeEmailOffers };\r\n }\r\n case offerActionTypes.REMOVE_OFFERS_ALL_ACTIVE_TYPE: {\r\n return { ...state, activeOffers: [], emailOffers: [] };\r\n }\r\n case offerActionTypes.VERIFY_ACTIVE_OFFERS: {\r\n const activeOffers = [...state.activeOffers];\r\n const currentUserOffers = action.offerData;\r\n const verifiedActiveOffer = activeOffers.filter(offerId =>\r\n currentUserOffers.some(offerObj => offerObj.id === offerId)\r\n );\r\n\r\n return { ...state, activeOffers: verifiedActiveOffer };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default offerReducer;\r\n","// Current Lodge Actions\r\n\r\nimport { getResortLocationUrl } from '../../../utilities/resortLocation';\r\nimport currentLodgeActionTypes from './currentLodge.types';\r\n\r\nexport const updateCurrentLodge = lodges => dispatch => {\r\n const resortLocationUrl = getResortLocationUrl();\r\n\r\n const locationFromUrl = resortLocationUrl.replace(/\\//g, '');\r\n\r\n const currentLocationData = Object.values(lodges).find(location => location.url === locationFromUrl);\r\n\r\n if (currentLocationData) {\r\n dispatch({\r\n type: currentLodgeActionTypes.UPDATE_CURRENT_LODGE,\r\n resortData: currentLocationData,\r\n resortLocationUrl: resortLocationUrl\r\n });\r\n }\r\n};\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\n\r\nexport const DINING_CREDIT = {\r\n 50: getAssetsUrl(ASSETS_LOCATIONS.SVG, '50.svg'),\r\n 100: getAssetsUrl(ASSETS_LOCATIONS.SVG, '100.svg'),\r\n 150: getAssetsUrl(ASSETS_LOCATIONS.SVG, '150.svg'),\r\n 300: getAssetsUrl(ASSETS_LOCATIONS.SVG, '300.svg'),\r\n star: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'star.svg'),\r\n rArrow: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'core-icons-arrows-caret-right.svg'),\r\n greyDiningImage: getAssetsUrl(ASSETS_LOCATIONS.WEBP, 'dining-illustrations@3x.webp'),\r\n yellowDiningImage: getAssetsUrl(ASSETS_LOCATIONS.WEBP, 'dining-illustrations-2@3x.webp'),\r\n big50: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'FlatIllustrations.svg'),\r\n big100: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'FlatIllustrations2.svg'),\r\n big150: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'FlatIllustrations3.svg'),\r\n big300: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'FlatIllustrations3.svg')\r\n};\r\n\r\nexport const DINING_CREDIT_COINS = [50, 100, 150, 300];\r\n\r\nexport const MODAL_CREDIT_CARDS_IMAGE = getAssetsUrl(ASSETS_LOCATIONS.SVG, 'icon-dining-type.svg');\r\n\r\nexport const MODAL_RESTAURANTS_CARDS_IMAGE = getAssetsUrl(ASSETS_LOCATIONS.SVG, 'icon-dining-restaurant.svg');\r\n\r\nexport const MODAL_CREDIT_CARDS_IMAGE_MOBILE = getAssetsUrl(ASSETS_LOCATIONS.SVG, 'icon-dining-type-mobile.svg');\r\n\r\nexport const MODAL_RESTAURANTS_CARDS_IMAGE_MOBILE = getAssetsUrl(\r\n ASSETS_LOCATIONS.SVG,\r\n 'icon-dining-restaurant-mobile.svg'\r\n);\r\n","import colors from '../ui-kit/themes/colors';\r\n\r\n// ineligibilityReason\r\nexport const INELIGIBILITY_REASONS = {\r\n TOO_EARLY: 'TOO_EARLY', // The reservation isnt due the next 24h.\r\n PRE_CHECKED_IN: 'PRE_CHECKED_IN', // User has already done online check-in.\r\n OTHER: 'OTHER' // Nor1 Api hasn't synced..\r\n};\r\n\r\nexport const CHECK_IN_MESSAGES = {\r\n available: {\r\n description: 'Mobile pre check-in is available now!',\r\n color: colors.nightSkyBlack[80]\r\n },\r\n unavailable: {\r\n description: 'Mobile pre check-in will be available 48 hours prior to your reservation.',\r\n color: colors.nightSkyBlack[80]\r\n },\r\n successful: {\r\n title: 'Mobile pre check-in successful!',\r\n description: 'Check your email to see more information',\r\n color: colors.deepForestGreen[100]\r\n },\r\n invalid: {\r\n title: 'Your reservation is not valid for mobile pre check-in',\r\n description: 'Please check-in at the lodge when you arrive',\r\n color: colors.errorOrange\r\n },\r\n mobile: {\r\n description: 'Mobile pre check-in will be available 48 hours before you arrive via email and SMS',\r\n color: colors.nightSkyBlack[80]\r\n }\r\n};\r\n\r\nexport const ICON_STYLES = {\r\n size: '21px',\r\n color: colors.preciousStoneBlue[100]\r\n};\r\n","import React from 'react';\r\nimport Text from './Text';\r\nimport styled from 'styled-components';\r\nimport theme from './themes/theme';\r\nimport ArrowDownThinIcon from './icons/ArrowDownThin';\r\nimport { Flex } from '.';\r\n// PlusMinus :before psuedoElement is purposely not found here\r\n// It is instead defined in App.js createGlobalStyle since it is the only way to hook into 'aria-...'\r\nconst StyledTitleText = styled(Text)`\r\n font-size: ${props => (props.fontSize && props.fontSize) || '12px'};\r\n line-height: 1.8;\r\n font-weight: bold;\r\n display: inline-block;\r\n font-family: ${theme.fontSecondary};\r\n cursor: pointer;\r\n color: ${props => props.color || theme.colors.digitalBrightRed[100]};\r\n`;\r\n\r\nconst StyledContent = styled(Text)`\r\n font-size: ${props => (props.fontSize && props.fontSize) || '12px'};\r\n font-family: ${theme.fontSecondary};\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-content: center;\r\n margin: ${theme.space[2]}px;\r\n`;\r\n\r\nexport const DescriptionIcon = styled(ArrowDownThinIcon)`\r\n transition-duration: 0.4s;\r\n transition-property: transform;\r\n transform: rotate(${props => props.rotate || '0deg'});\r\n height: 12px;\r\n width: 36px;\r\n align-self: center;\r\n padding-left: ${theme.space[1]}px;\r\n padding-right: ${theme.space[1]}px;\r\n`;\r\n\r\nexport const AccordionTitleTextRetro = props => {\r\n const { children, expanded, ...rest } = props;\r\n return (\r\n <Flex justifyContent=\"space-between\">\r\n <StyledTitleText ml={2} {...rest}>\r\n {children}\r\n </StyledTitleText>\r\n <Flex flexDirection=\"column-direction\" width=\"24px\">\r\n <DescriptionIcon rotate={expanded ? '-180deg' : '0deg'} />\r\n </Flex>\r\n </Flex>\r\n );\r\n};\r\n\r\nexport const AccordionContentRetro = props => {\r\n const { children, ...rest } = props;\r\n return <StyledContent {...rest}>{children}</StyledContent>;\r\n};\r\n\r\nAccordionTitleTextRetro.defaultProps = {\r\n color: theme.colors.digitalBrightRed[100]\r\n};\r\n","import StringMask from 'string-mask';\r\nimport { MASK, PHONE_MASK_REGEX } from '../utilities/constants';\r\nimport unmaskValue from '../components/utilities/unmaskValue';\r\n\r\nexport const maskPhone = str => {\r\n const unmaskedValue = unmaskValue(str, PHONE_MASK_REGEX);\r\n const formatted = StringMask.process(unmaskedValue, MASK);\r\n return formatted.result;\r\n};\r\n","/**\r\n * Method to create a delay of @param delay milliseconds.\r\n * @param {number} delay Amount of milliseconds to wait for.\r\n * @returns A promise that is self-resolved within the specified delay.\r\n */\r\nexport const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay));\r\n","export { default as Modal, MODAL_VARIATIONS } from './Modal';\r\nexport { default as ModalSpinner } from './ModalSpinner';\r\nexport { default as ModalAdapter } from './ModalAdapter';\r\nexport { default as styles } from './styles';\r\nexport * from './MediaGalleryModal';\r\n","import { Link as ReactRouterLink } from 'react-router-dom';\r\nimport styled, { css } from 'styled-components';\r\nimport { space, themeGet } from 'styled-system';\r\nimport { Absolute, Box, Button, Card, Flex, Relative, Text } from '../../components/ui-kit';\r\nimport { FlexCard } from '../../components/ui-kit/Card';\r\nimport CloseCircleIcon from '../../components/ui-kit/icons/CloseCircle';\r\nimport theme, { colors, fontWeights, mediaQueries } from '../../components/ui-kit/themes/theme';\r\nimport { IMAGES } from './constants';\r\n\r\nexport const WaveWrapper = styled(Relative)`\r\n margin-left: 0;\r\n padding-top: 80px;\r\n padding-bottom: 40px;\r\n left: auto;\r\n width: 100%;\r\n\r\n background-image: url(${IMAGES.waveSVG}),\r\n linear-gradient(\r\n to bottom,\r\n ${themeGet('colors.preciousStoneBlue.100')} -55%,\r\n ${themeGet('colors.deepLakeBlue.100')} 97%\r\n );\r\n background-repeat: repeat-x;\r\n background-position: -90px top;\r\n background-size: 430px, 100%;\r\n\r\n ${themeGet('mediaQueries.lg')} {\r\n background-position: -170px top;\r\n padding-top: 96px;\r\n }\r\n\r\n ${themeGet('mediaQueries.xl')} {\r\n background-size: 375px, 100%;\r\n background-position: -100px top;\r\n padding-top: 70px;\r\n padding-bottom: 45px;\r\n margin-top: 32px;\r\n }\r\n`;\r\n\r\nexport const MobileAppDevice = styled.img`\r\n width: 100%;\r\n`;\r\n\r\nexport const AppFeaturesWrapper = styled.ul`\r\n padding-left: 0;\r\n font-family: ${theme.fontSecondary};\r\n font-size: ${theme.fontSizes[1]}px;\r\n font-weight: ${fontWeights.medium};\r\n line-height: 2;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n list-style: none;\r\n\r\n li::before {\r\n content: '• ';\r\n color: ${theme.colors.digitalBrightRed[100]};\r\n font-weight: ${fontWeights.extraBold};\r\n font-size: ${theme.fontSizes[3]}px;\r\n }\r\n`;\r\n\r\nexport const AppStoreButtonWrapper = styled.a`\r\n display: block;\r\n\r\n img {\r\n display: block;\r\n max-height: 40px;\r\n }\r\n`;\r\n\r\nexport const StyledCloseCircleIcon = styled(CloseCircleIcon)`\r\n ${space}\r\n`;\r\n\r\nexport const Link = styled(ReactRouterLink)`\r\n text-decoration: none;\r\n color: ${colors.woodpeckerRed[100]};\r\n`;\r\n\r\nexport const CloseButton = styled.button`\r\n cursor: pointer;\r\n border: none;\r\n background: transparent;\r\n position: absolute;\r\n right: 5px;\r\n top: 6px;\r\n`;\r\n\r\nexport const PackageCard = styled(Flex).attrs({\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'start'\r\n})`\r\n padding-bottom: 20px;\r\n border-bottom: 1px solid ${themeGet('colors.snowMountainGrey.100')};\r\n padding-left: ${themeGet('space.3')}px;\r\n padding-right: ${themeGet('space.3')}px;\r\n width: 100%;\r\n\r\n :not(:last-child) {\r\n margin-bottom: 20px;\r\n }\r\n\r\n .slider-list {\r\n min-height: 145px;\r\n }\r\n\r\n ${theme.mediaQueries.xl} {\r\n width: 284px;\r\n margin-bottom: 20px;\r\n border: none;\r\n padding-left: 24px;\r\n padding-right: 24px;\r\n padding-bottom: 0;\r\n }\r\n\r\n ${theme.mediaQueries.xxl} {\r\n width: 284px;\r\n margin-bottom: 0;\r\n\r\n :not(:last-child) {\r\n margin-bottom: 0;\r\n }\r\n }\r\n`;\r\n\r\nPackageCard.displayName = 'PackageCard';\r\n\r\nexport const PackageCardItem = styled(Flex).attrs({\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between'\r\n})`\r\n margin-top: 10px;\r\n overflow: hidden;\r\n`;\r\n\r\nexport const InfoCardAddOnsWrapper = styled(Card)`\r\n display: block;\r\n position: relative;\r\n border-radius: 15px;\r\n border: none;\r\n background-color: rgba(255, 255, 255, 0.18);\r\n width: ${({ carouselWidth }) => {\r\n return carouselWidth ? `${carouselWidth}px` : 'clamp(164px, 100%, 277px)';\r\n }};\r\n &:before {\r\n content: '';\r\n background-image: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='15' ry='15' stroke='white' stroke-width='2' stroke-dasharray='5%2c 8' stroke-dashoffset='3' stroke-linecap='square'/%3e%3c/svg%3e\");\r\n background-size: cover;\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n opacity: 0.3;\r\n }\r\n > a {\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n\r\n cursor: pointer;\r\n transition: 0.2s background ease-in-out;\r\n :hover {\r\n background: ${themeGet('colors.deepLakeBlue.100')};\r\n ${Text} {\r\n transition: 0.2s color ease-in-out;\r\n color: ${themeGet('colors.pureWhite.0')};\r\n }\r\n\r\n svg {\r\n transition: 0.2s fill ease-in-out;\r\n fill: ${themeGet('colors.pureWhite.0')};\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const InfoCardBody = styled(Absolute)`\r\n top: 50%;\r\n width: 100%;\r\n transform: translateY(-50%);\r\n`;\r\n\r\nexport const TitleField = styled(Text)`\r\n font-weight: bold;\r\n text-align: center;\r\n font-size: ${theme.fontSizes[9]}px;\r\n line-height: ${theme.fontSizes[1]}px;\r\n padding-top: 0px;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n padding-bottom: 1px;\r\n\r\n ${mediaQueries.lg} {\r\n padding-top: 2px;\r\n font-size: ${theme.fontSizes[1]}px;\r\n line-height: ${theme.fontSizes[7]}px;\r\n }\r\n`;\r\n\r\nexport const SeeAllCTA = styled(Text)`\r\n cursor: pointer;\r\n text-decoration: underline;\r\n color: ${theme.colors.preciousStoneBlue[100]};\r\n font-size: ${theme.fontSizes[0]}px;\r\n line-height: ${theme.fontSizes[2]}px;\r\n\r\n ${mediaQueries.lg} {\r\n font-size: ${theme.fontSizes[1]}px;\r\n line-height: ${theme.fontSizes[7]}px;\r\n }\r\n`;\r\n\r\nexport const DescriptionText = styled(Text)`\r\n display: -webkit-box;\r\n -webkit-line-clamp: 4;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n p {\r\n margin: 8px 0;\r\n }\r\n`;\r\n\r\nexport const FlexCardPackage = styled(FlexCard)`\r\n overflow-y: auto;\r\n padding: ${themeGet('space.3')}px 0 0 0;\r\n\r\n ${mediaQueries.lg} {\r\n padding: ${themeGet('space.3')}px ${themeGet('space.2')}px;\r\n }\r\n ${mediaQueries.xl} {\r\n padding: ${themeGet('space.3')}px ${themeGet('space.3')}px;\r\n }\r\n`;\r\n\r\nexport const CloseModalButton = styled.button`\r\n background: none;\r\n cursor: pointer;\r\n color: ${colors.preciousStoneBlue[100]};\r\n position: absolute;\r\n right: 0;\r\n top: 22px;\r\n z-index: 10;\r\n padding: 10px 32px;\r\n border: none;\r\n :hover {\r\n border: none;\r\n color: ${colors.blue};\r\n }\r\n\r\n @media (max-width: 390px) {\r\n top: 14px;\r\n }\r\n`;\r\n\r\nexport const CloseModalButtonText = styled(Text)`\r\n height: 16px;\r\n width: 16px;\r\n font-size: 16px;\r\n`;\r\n\r\nexport const PackageInfo = styled(FlexCard)`\r\n overflow-y: auto;\r\n`;\r\n\r\nexport const PackageDetailsContainerModal = styled(Box)`\r\n overflow: auto;\r\n width: 100%;\r\n\r\n ul {\r\n width: auto;\r\n padding: 0;\r\n list-style-type: none;\r\n\r\n > li {\r\n font-family: Montserrat;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n font-weight: ${themeGet('fontWeights.medium')};\r\n line-height: 1.71;\r\n color: ${themeGet('colors.deepLakeBlue.100')};\r\n position: relative;\r\n padding-left: ${themeGet('space.3')}px;\r\n margin-bottom: ${themeGet('space.1')}px;\r\n\r\n &:before {\r\n content: '';\r\n position: absolute;\r\n display: inline;\r\n left: 0;\r\n top: 8px;\r\n border-radius: 50%;\r\n width: 6px;\r\n height: 6px;\r\n background-color: ${themeGet('colors.successGreen')};\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const PackageCardText = styled(Text)`\r\n width: 100%;\r\n`;\r\n\r\nexport const ChargeTypeText = styled(Text)`\r\n width: 100%;\r\n font-size: ${themeGet('fontSizes.0')}px;\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n color: ${themeGet('colors.deepLakeBlue.100')};\r\n margin-bottom: 12px;\r\n`;\r\n\r\nexport const PackageCardDescription = styled(Text)`\r\n width: 100%;\r\n padding-left: 0px;\r\n overflow: hidden;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n line-height: 1.71;\r\n`;\r\n\r\nexport const PackageCardDescriptionCollapsible = styled(Text)`\r\n width: 100%;\r\n padding-left: 8px;\r\n overflow: hidden;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n line-height: 1.71;\r\n`;\r\n\r\nexport const CabanaDetailsCardDescription = styled(Text)`\r\n margin: 0;\r\n min-height: 50px;\r\n max-height: 100px;\r\n width: 100%;\r\n line-height: 1.67;\r\n\r\n & > p {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nexport const PackageCardButtonContainer = styled(Flex)`\r\n border-top-style: outset;\r\n border-top-color: ${themeGet('colors.snowMountainGrey.100')};\r\n border-top-width: 1px;\r\n margin-top: auto;\r\n padding-top: 12px;\r\n flex-direction: column;\r\n`;\r\n\r\nexport const CabanaCardButtonContainer = styled(Box)`\r\n padding: ${themeGet('space.3')}px;\r\n padding-bottom: 0;\r\n border-top: 1px solid ${themeGet('colors.snowMountainGrey.100')};\r\n opacity: ${props => (props.isAvailable ? 'initial' : '0.7')};\r\n pointer-events: ${props => (props.isAvailable ? 'initial' : 'none')};\r\n`;\r\n\r\nexport const DetailsButtonContainer = styled(Box)`\r\n background-color: ${themeGet('colors.kiddiePoolBlue.10')};\r\n padding: ${themeGet('space.7')}px ${themeGet('space.4')}px;\r\n position: absolute;\r\n bottom: 0;\r\n ${props => {\r\n if (props.alignLeft) {\r\n return `\r\n width: 330px;\r\n left: 0;\r\n `;\r\n } else {\r\n return `\r\n width: 50%;\r\n right: 0;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const CabanaCard = styled(FlexCard)`\r\n border-radius: 0;\r\n box-shadow: ${themeGet('elevation.3')};\r\n margin-bottom: 32px;\r\n\r\n ${mediaQueries.lg} {\r\n max-width: 50%;\r\n border-radius: 15px;\r\n box-shadow: ${themeGet('elevation.3')};\r\n margin: ${themeGet('space.2')}px;\r\n flex: 27%;\r\n max-width: calc(33.3% - 16px);\r\n min-width: calc(33.3% - 16px);\r\n }\r\n`;\r\n\r\nexport const PackageContainer = styled(FlexCard)`\r\n position: relative;\r\n overflow: visible;\r\n min-height: 400px;\r\n`;\r\n\r\nexport const PackageContainerMobile = styled(FlexCard)`\r\n position: relative;\r\n overflow: visible;\r\n @media (max-width: 375px) {\r\n height: 150px;\r\n }\r\n`;\r\n\r\nexport const QuantityButton = styled(FlexCard)`\r\n background-color: ${themeGet('colors.preciousStoneBlue.100')};\r\n cursor: pointer;\r\n`;\r\n\r\nexport const PassDetailsNavigatorMobile = styled(FlexCard)`\r\n background: ${props => props.themeColor};\r\n border-radius: 0 10px 10px 0;\r\n`;\r\n\r\nexport const PassCardHeaderMobile = styled(Text)`\r\n line-height: 1.2;\r\n font-size: ${themeGet('fontSizes.3')}px;\r\n font-family: 'Montserrat', 'Helvetica Neue', Helvetica, Arial, sans-serif;\r\n font-weight: bold;\r\n @media (max-width: 375px) {\r\n font-size: ${themeGet('fontSizes.2')}px;\r\n }\r\n`;\r\n\r\nexport const PassDetailsImageContainer = styled(FlexCard)`\r\n background-color: ${themeGet('colors.snowMountainGrey.20')};\r\n`;\r\n\r\nexport const PackageDetailsContainerMobile = styled(Box)`\r\n ul {\r\n padding-left: 18px;\r\n }\r\n p {\r\n padding-left: 18px;\r\n }\r\n`;\r\n\r\nexport const CMPInfoBoxesWrapper = styled(Box)`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: ${theme.space[3]}px;\r\n row-gap: 30px;\r\n\r\n ${theme.mediaScreens.tablet`\r\n row-gap: 36px;\r\n `}\r\n ${theme.mediaScreens.desktop`\r\n gap: 30px;\r\n grid-template-columns: repeat(4, 1fr);\r\n `}\r\n`;\r\n\r\nexport const CMPInfoBox = styled(Box)`\r\n position: relative;\r\n`;\r\n\r\nexport const AddCabanaButton = styled(Button)`\r\n opacity: ${props => (props.isDateSelected ? 'initial' : '0.5')};\r\n pointer-events: ${props => (props.isDateSelected ? '' : 'none')};\r\n white-space: nowrap;\r\n padding: 10px 40px;\r\n ${mediaQueries.sm} {\r\n padding: 10px 40px;\r\n }\r\n ${mediaQueries.lg} {\r\n padding: 10px 10px;\r\n }\r\n ${mediaQueries.xl} {\r\n padding: 10px 30px;\r\n }\r\n`;\r\n\r\nexport const HeaderInfoContainer = styled(Flex)`\r\n justify-content: 'flex-start';\r\n width: 100%;\r\n\r\n ${mediaQueries.xl} {\r\n width: 688px;\r\n justify-content: flex-end;\r\n }\r\n\r\n ${mediaQueries.xxl} {\r\n }\r\n`;\r\n\r\nHeaderInfoContainer.displayName = 'HeaderInfoContainer';\r\n\r\nexport const StyledImage = styled.img`\r\n width: 64px;\r\n height: 64px;\r\n\r\n ${mediaQueries.lg} {\r\n width: 80px;\r\n height: 80px;\r\n }\r\n`;\r\n\r\nexport const PackageDetailsImage = styled.img`\r\n object-fit: cover;\r\n width: 100%;\r\n top: 0;\r\n height: auto;\r\n z-index: -1;\r\n ${mediaQueries.xl} {\r\n height: 100%;\r\n width: auto !important;\r\n position: absolute;\r\n }\r\n`;\r\n\r\nexport const MobileCardText = styled(Text.P)`\r\n @media (max-width: 375px) {\r\n font-size: ${themeGet('fontSizes.0')}px;\r\n margin: 4px 0;\r\n & > p {\r\n font-size: ${themeGet('fontSizes.0')}px;\r\n }\r\n }\r\n & > p {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nexport const CapitalizeTextModal = styled(Text)`\r\n text-transform: capitalize;\r\n line-height: 20px;\r\n`;\r\n\r\nexport const Headline = styled(Text)`\r\n display: flex;\r\n justify-content: flex-start;\r\n font-size: ${themeGet('fontSizes.3')}px;\r\n margin-bottom: 35px;\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n color: ${themeGet('colors.preciousStoneBlue.100')};\r\n line-height: 24px;\r\n ${mediaQueries.sm} {\r\n justify-content: center;\r\n font-size: ${themeGet('fontSizes.4')}px;\r\n margin-bottom: 60px;\r\n line-height: 32px;\r\n }\r\n`;\r\n\r\nexport const HowToRedeemText = styled(Text)`\r\n font-weight: 500;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n color: ${themeGet('colors.nightSkyBlack.100')};\r\n width: 50%;\r\n line-height: 20px;\r\n`;\r\n\r\nexport const IconImage = styled.img`\r\n width: 64px;\r\n\r\n ${mediaQueries.xl} {\r\n width: 80px;\r\n }\r\n`;\r\n\r\nexport const Divider = styled.div`\r\n width: 100%;\r\n border-top: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n margin: ${({ margin }) => (margin ? margin : '12px 0px')};\r\n`;\r\nexport const DividerVertical = styled.div`\r\n width: 4%;\r\n border-left: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n height: 64px;\r\n margin-left: 24px;\r\n`;\r\n\r\nexport const DataIcon = styled.img`\r\n width: ${({ isMobile }) => (isMobile ? 30 : 45)}px;\r\n height: ${({ isMobile, imgException }) => (imgException ? imgException : isMobile ? 30 : 45)}px;\r\n margin-right: 25px;\r\n`;\r\n\r\nexport const InfoIcon = styled.img`\r\n width: 16px;\r\n height: 16px;\r\n margin-right: ${props => (props.smallerMargin ? 8 : 16)}px;\r\n`;\r\n\r\nexport const ModalTitle = styled(Text)`\r\n font-size: ${({ isMobile }) => (isMobile ? theme.fontSizes[7] : theme.fontSizes[4])}px;\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n line-height: ${({ isMobile }) => (isMobile ? theme.fontSizes[8] : theme.fontSizes[5])}px;\r\n margin-bottom: 33px;\r\n`;\r\nexport const DataTitle = styled(Text)`\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${({ showPackagesInAddGuestsModal }) =>\r\n showPackagesInAddGuestsModal ? theme.colors.nightSkyBlack[80] : theme.colors.deepLakeBlue[100]};\r\n font-size: ${theme.fontSizes[1]}px;\r\n line-height: 18px;\r\n\r\n ${mediaQueries.sm} {\r\n font-size: ${theme.fontSizes[7]}px;\r\n line-height: 24px;\r\n }\r\n`;\r\nexport const DataDescription = styled(Text)`\r\n font-size: ${theme.fontSizes[0]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n line-height: 18px;\r\n`;\r\n\r\nexport const RoomInclusionsSection = styled(Flex)`\r\n background-color: ${theme.colors.kiddiePoolBlue[10]};\r\n flex-direction: column;\r\n padding: 16px 36px;\r\n margin: 24px -36px;\r\n`;\r\n\r\nexport const CounterLabel = styled(Text)`\r\n font-size: ${({ isMobile }) => (isMobile ? theme.fontSizes[3] : theme.fontSizes[7])}px;\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n line-height: 24px;\r\n`;\r\n\r\nexport const CounterLabelDescription = styled(Text)`\r\n font-size: ${({ isMobile }) => (isMobile ? theme.fontSizes[9] : theme.fontSizes[0])}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n line-height: ${({ isMobile }) => (isMobile ? theme.fontSizes[2] : theme.fontSizes[7])}px;\r\n`;\r\nexport const SelectDescription = styled(Text)`\r\n font-size: ${theme.fontSizes[1]}px;\r\n font-weight: ${theme.fontWeights.medium};\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n line-height: 20px;\r\n`;\r\n\r\nexport const InfoAlertWrapper = styled(Flex)`\r\n align-items: flex-start;\r\n background-color: ${theme.colors.sandstoneBuff[20]};\r\n border: 1px solid ${theme.colors.digitalYellowOrange[100]};\r\n border-radius: 10px;\r\n padding: 12px 16px;\r\n margin: 25px 0;\r\n`;\r\n\r\nexport const NewGuestsBadgeContainer = styled.div`\r\n width: 40px;\r\n position: absolute;\r\n text-align: center;\r\n z-index: 100;\r\n margin-top: -10px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n ${mediaQueries.sm} {\r\n width: 45px;\r\n position: absolute;\r\n text-align: center;\r\n z-index: 100;\r\n margin-top: -10px;\r\n }\r\n`;\r\n\r\nexport const AddGuestsCTAButton = styled(Button)`\r\n padding: 8px 40px;\r\n ${mediaQueries.sm} {\r\n width: ${({ customWidth }) => customWidth}px;\r\n }\r\n width: calc(100% - 40px);\r\n margin-left: auto;\r\n margin-right: auto;\r\n`;\r\n\r\nexport const Total = styled(Text)`\r\n font-size: ${({ showPackagesInAddGuestsModal }) =>\r\n showPackagesInAddGuestsModal ? theme.fontSizes[1] : theme.fontSizes[7]}px;\r\n line-height: 18px;\r\n ${mediaQueries.sm} {\r\n font-size: ${theme.fontSizes[7]}px;\r\n line-height: 24px;\r\n }\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${({ showPackagesInAddGuestsModal }) =>\r\n showPackagesInAddGuestsModal ? theme.colors.nightSkyBlack[80] : theme.colors.deepLakeBlue[100]};\r\n`;\r\n\r\nexport const InclusionsTitle = styled(Text)`\r\n font-size: ${({ isMobile }) => (isMobile ? theme.fontSizes[0] : theme.fontSizes[1])}px;\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n line-height: ${({ isMobile }) => (isMobile ? '16px' : '20px')};\r\n`;\r\n\r\n// Info Cards\r\nexport const Image = styled.img`\r\n width: 64px;\r\n height: 64px;\r\n margin-bottom: 8px;\r\n ${mediaQueries.sm} {\r\n width: 80px;\r\n height: 80px;\r\n margin-bottom: 12px;\r\n }\r\n`;\r\n\r\nexport const AddCardsButtonContainer = styled(Box)`\r\n width: clamp(148px, 100%, 245px);\r\n max-width: calc(100% - 16px);\r\n margin: 0 auto;\r\n ${mediaQueries.md} {\r\n max-width: calc(100% - 32px);\r\n }\r\n`;\r\n\r\nexport const PlusInfoImgs = styled.img`\r\n width: 24px;\r\n height: 24px;\r\n ${mediaQueries.md} {\r\n width: 32px;\r\n height: 32px;\r\n }\r\n\r\n @media (max-width: 1024px) and (min-width: 768px) {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n`;\r\n\r\nexport const LcoHeaderImageSection = styled(Box)`\r\n height: 210px;\r\n width: 100%;\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n }\r\n ${theme.mediaQueries.md} {\r\n height: 250px;\r\n }\r\n`;\r\n\r\nexport const LcoContentSection = styled(Box)`\r\n padding: 24px 24px 0px;\r\n`;\r\n\r\nexport const LcoButtonsSection = styled(Flex)`\r\n align-items: center;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n height: 82px;\r\n padding: 24px;\r\n\r\n ${theme.mediaQueries.md} {\r\n padding: 18px 24px;\r\n width: 100%;\r\n margin: 0;\r\n }\r\n`;\r\n\r\nexport const AddBundleButton = styled(Button)`\r\n width: 207px;\r\n ${theme.mediaQueries.lg} {\r\n width: 221px;\r\n }\r\n`;\r\n\r\nexport const LcoHoursContainer = styled(Flex)`\r\n border-radius: 8px;\r\n background-color: ${theme.colors.snowMountainGrey[50]};\r\n padding: 8px 0px;\r\n justify-content: center;\r\n & > div {\r\n flex: 1;\r\n &:first-child {\r\n border-right: 1px solid ${theme.colors.nightSkyBlack[60]};\r\n }\r\n }\r\n ${theme.mediaQueries.lg} {\r\n width: 327px;\r\n }\r\n`;\r\n\r\nexport const BundleImageContainer = styled(Box)`\r\n width: 172px;\r\n height: 64px;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin: 0 auto;\r\n`;\r\n\r\nexport const BundleImage = styled.img`\r\n width: 72px;\r\n height: 72px;\r\n ${theme.mediaQueries.md} {\r\n width: 56px;\r\n height: 56px;\r\n }\r\n`;\r\n\r\nexport const MobileAddOnsContainer = styled(Box)`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: ${theme.space[3]}px;\r\n row-gap: 30px;\r\n ${({ isBundleAvailable }) => {\r\n if (isBundleAvailable) {\r\n return css`\r\n > div {\r\n &:first-child {\r\n grid-column: 1 / -1;\r\n margin-bottom: 10px;\r\n margin-right: 0px;\r\n\r\n > .info-card-addons-bundle {\r\n height: 302px;\r\n width: 100%;\r\n padding-top: initial;\r\n }\r\n }\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const BundleInfoCardWrapper = styled(Flex)`\r\n column-gap: 24px;\r\n ${theme.mediaQueries.md} {\r\n column-gap: 4px;\r\n }\r\n`;\r\n\r\nexport const AddonsCarouselContainer = styled(Box)`\r\n > div {\r\n padding: 0;\r\n }\r\n`;\r\n\r\nexport const AddGuestPolicyCont = styled(Flex)`\r\n width: 80px;\r\n position: relative;\r\n left: -30px;\r\n width: calc(100% + 60px);\r\n padding: 30px;\r\n background-color: ${theme.colors.snowMountainGrey[20]};\r\n margin: 20px 0;\r\n\r\n ${mediaQueries.sm} {\r\n padding: 20px;\r\n width: 100%;\r\n left: 0;\r\n }\r\n\r\n flex-direction: column;\r\n`;\r\n\r\nexport const NewReservationDetailsHeader = styled(Flex)`\r\n width: 100%;\r\n min-height: 20px;\r\n border: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n border-radius: 16px;\r\n padding: 20px 20px 5px 20px;\r\n\r\n ${mediaQueries.sm} {\r\n padding: 20px 20px 10px 20px;\r\n }\r\n margin-bottom: 20px;\r\n flex-wrap: wrap;\r\n`;\r\n\r\nexport const LineDetailsHeader = styled(Flex)`\r\n width: 100%;\r\n min-height: 20px;\r\n margin-bottom: 15px;\r\n\r\n ${mediaQueries.sm} {\r\n width: 50%;\r\n margin-bottom: 10px;\r\n }\r\n\r\n img {\r\n position: relative;\r\n top: -2px;\r\n }\r\n`;\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Payment endpoints\r\n *\r\n * @class PaymentApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class PaymentApiClient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * If there isn't any url provided, then we use the default from the environment variable\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v2`;\r\n\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_PAYMENT_SERVICE_ENDPOINT, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * Sends a GET request with accessBlock in order to get the wallet(s) config\r\n * @param accessBlock\r\n * @param i4GoServerUrl\r\n * @returns {Promise<AxiosResponse<any>|*>}\r\n */\r\n async getShift4WalletConfig(accessBlock, i4GoServerUrl) {\r\n const walletConfigUrl = `${i4GoServerUrl}?fuseaction=get.get3dsInfo&i4go_accessBlock=${accessBlock}`;\r\n\r\n return await super.getApiCall(walletConfigUrl, {}, false);\r\n }\r\n\r\n /**\r\n * Sends a GET request with accessBlock in order to get the wallet(s) config\r\n * @param accessBlock\r\n * @param applePayToken\r\n * @param googlePayToken\r\n * @param i4GoServerUrl\r\n * @returns {Promise<AxiosResponse<any>|*>}\r\n */\r\n async approveShift4WalletTransaction(accessBlock, applePayToken, googlePayToken, i4GoServerUrl) {\r\n const form_data = new FormData();\r\n const formDataValues = {\r\n i4go_accessBlock: accessBlock,\r\n i4go_successURL: '',\r\n i4go_failureURL: '',\r\n i4go_cardNumber: '',\r\n i4go_cvv2Code: '',\r\n i4go_p2peBlock: '',\r\n i4go_trackInformation: '',\r\n i4go_applePayToken: applePayToken,\r\n i4go_googlePayToken: googlePayToken,\r\n i4go_cardinalInfo: '',\r\n i4go_referrer: window.location,\r\n i4go_cardholderName: '',\r\n cardNumber: '',\r\n cvv2Code: '',\r\n i4go_streetAddress: '',\r\n i4go_postalCode: ''\r\n };\r\n\r\n if (applePayToken) {\r\n delete formDataValues.i4go_googlePayToken;\r\n } else {\r\n delete formDataValues.i4go_applePayToken;\r\n }\r\n\r\n for (let key in formDataValues) {\r\n form_data.append(key, formDataValues[key]);\r\n }\r\n const walletConfigUrl = `${i4GoServerUrl}?fuseaction=api.jsonPostCardEntry`;\r\n\r\n return await super.postApiCall(walletConfigUrl, form_data, false);\r\n }\r\n}\r\n","import GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Upgrade room endpoints\r\n *\r\n * @class Shift4i4GoApiClient\r\n * @extends {GWRApiClient}\r\n */\r\n\r\nexport default class Shift4i4GoApiClient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * If there isn't any url provided, then we use the default from the environment variable\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n\r\n constructor(url = '', token = '') {\r\n super(url, token);\r\n }\r\n\r\n /**\r\n * function to get vaulted card token\r\n * @function\r\n * @param {Object} data - form data to send card details get token\r\n * @param {string} url - shifti4Go server url\r\n */\r\n async getVaultedCardDetails(urlReq, data) {\r\n const urlRequest = `${urlReq}?fuseaction=api.jsonPostCardEntry`;\r\n var formData = new FormData();\r\n Object.keys(data).forEach((value, index) => {\r\n formData.append(value, data[value]);\r\n });\r\n let response = await super.postApiCall(urlRequest, formData, false);\r\n return response;\r\n }\r\n}\r\n","import * as Yup from 'yup';\r\nimport { SUPPORTED_COUNTRIES, VALID_COUNTRIES } from '../../utilities/constants';\r\nimport countries from '../utilities/countries';\r\nimport provinces from '../utilities/provinces';\r\nimport states from '../utilities/states';\r\nimport { onlyDigitsValidation, strLenIsBetweenRange } from '../utilities/validation/ValidationHelperMethods';\r\nimport { specialRequestOptions } from './AdditionalRequests/selectOptions';\r\nimport { errors, paymentFieldsLengths } from './ValidationMessages';\r\n\r\nconst createReservationSchema = (cidNumberIsRequired = true) => {\r\n let creditCardValues = {\r\n number: Yup.string().required(),\r\n cardCode: Yup.string().required(),\r\n holder: Yup.string().required(),\r\n expiration: Yup.date().required()\r\n };\r\n\r\n if (cidNumberIsRequired) {\r\n creditCardValues.cidNumber = Yup.string()\r\n .required()\r\n .test('is-number', errors.CVV_ONLY_NUMBERS, val => onlyDigitsValidation(val))\r\n .test('len', errors.CVV_LENGTH, val =>\r\n strLenIsBetweenRange(val, paymentFieldsLengths.CVV_MIN - 1, paymentFieldsLengths.CVV_MAX + 1)\r\n );\r\n }\r\n\r\n return Yup.object().shape({\r\n userId: Yup.string()\r\n .default(null)\r\n .notRequired()\r\n .nullable(),\r\n payment: Yup.object().shape({\r\n type: Yup.number()\r\n .positive()\r\n .integer()\r\n .required(),\r\n creditCard: Yup.object().when('type', {\r\n is: 1,\r\n then: Yup.object().shape(creditCardValues),\r\n otherwise: Yup.object().notRequired()\r\n }),\r\n affirm: Yup.object().when('type', {\r\n is: 3,\r\n then: Yup.object().shape({\r\n checkoutToken: Yup.string().required(),\r\n property: Yup.string().required(),\r\n amount: Yup.number().required(),\r\n resvId: Yup.string().nullable()\r\n }),\r\n otherwise: Yup.object().notRequired()\r\n })\r\n }),\r\n address: Yup.object().shape({\r\n street1: Yup.string().required(),\r\n city: Yup.string().required(),\r\n state: Yup.string()\r\n .when('country', {\r\n is: SUPPORTED_COUNTRIES.UnitedStates,\r\n then: Yup.string()\r\n .oneOf(states.map(state => state.abbreviation))\r\n .required()\r\n })\r\n .when('country', {\r\n is: SUPPORTED_COUNTRIES.Canada,\r\n then: Yup.string()\r\n .oneOf(provinces.map(province => province.abbreviation))\r\n .required()\r\n })\r\n .when('country', {\r\n is: val => !VALID_COUNTRIES.includes(val),\r\n then: Yup.string().notRequired()\r\n }),\r\n country: Yup.string()\r\n .oneOf(countries.map(country => country.code))\r\n .required(),\r\n postalCode: Yup.string()\r\n .when('country', {\r\n is: val => val === SUPPORTED_COUNTRIES.UnitedStates,\r\n then: Yup.string().length(5)\r\n })\r\n .required(),\r\n email: Yup.string()\r\n .email()\r\n .required()\r\n }),\r\n details: Yup.object().shape({\r\n comments: Yup.array()\r\n .of(Yup.string())\r\n .default(() => [])\r\n .notRequired()\r\n .nullable(),\r\n specialRequests: Yup.array()\r\n .of(\r\n Yup.object().shape({\r\n requestId: Yup.number().default(0),\r\n code: Yup.string().oneOf(specialRequestOptions.map(item => item.value))\r\n })\r\n )\r\n .notRequired(),\r\n sourceCode: Yup.string()\r\n .default('NA')\r\n .notRequired(),\r\n selection: Yup.object().shape({\r\n property: Yup.string()\r\n .uppercase()\r\n .required(),\r\n arrival: Yup.string().required(),\r\n departure: Yup.string().required(),\r\n roomCode: Yup.string().required(),\r\n adults: Yup.number()\r\n .integer()\r\n .required(),\r\n children: Yup.array()\r\n .of(Yup.number().integer())\r\n .default([]),\r\n offerCode: Yup.string()\r\n .uppercase()\r\n .notRequired(),\r\n rateCode: Yup.string()\r\n .uppercase()\r\n .notRequired(),\r\n site: Yup.string()\r\n .uppercase()\r\n .required(),\r\n suiteDescription: Yup.string().notRequired(),\r\n suiteTitle: Yup.string().notRequired(),\r\n checkoutTime: Yup.date().notRequired(),\r\n isDueBalanceBb: Yup.boolean()\r\n .default(true)\r\n .notRequired(),\r\n grandTotalDue: Yup.number().notRequired()\r\n }),\r\n items: Yup.array()\r\n .of(\r\n Yup.object().shape({\r\n quantity: Yup.number()\r\n .positive()\r\n .integer(),\r\n date: Yup.date().notRequired(),\r\n itemCode: Yup.string().notRequired(),\r\n rateCode: Yup.string()\r\n .uppercase()\r\n .notRequired(),\r\n total: Yup.number()\r\n .positive()\r\n .integer()\r\n .notRequired()\r\n })\r\n )\r\n .default([])\r\n .notRequired(),\r\n alerts: Yup.array()\r\n .of(\r\n Yup.object().shape({\r\n alert_code: Yup.string().notRequired(),\r\n alert_description: Yup.string().notRequired()\r\n })\r\n )\r\n .default([])\r\n .notRequired(),\r\n packages: Yup.array()\r\n .of(\r\n Yup.object().shape({\r\n description: Yup.string().notRequired(),\r\n shortDescription: Yup.string().notRequired(),\r\n packageCode: Yup.string().notRequired(),\r\n quantity: Yup.number()\r\n .positive()\r\n .integer()\r\n .notRequired(),\r\n tax: Yup.number().notRequired(),\r\n totalAmount: Yup.number().notRequired(),\r\n unitAmount: Yup.number().notRequired(),\r\n packageAmount: Yup.number().notRequired()\r\n })\r\n )\r\n .default([])\r\n .notRequired()\r\n }),\r\n qualifyingId: Yup.string().notRequired(),\r\n isCabana: Yup.boolean()\r\n .default(false)\r\n .notRequired(),\r\n cabanaSource: Yup.string().notRequired(),\r\n profileId: Yup.string()\r\n .notRequired()\r\n .nullable(),\r\n cabanaItem: Yup.object()\r\n .shape({\r\n quantity: Yup.number()\r\n .positive()\r\n .integer()\r\n .notRequired(),\r\n date: Yup.date().notRequired(),\r\n itemCode: Yup.string().notRequired(),\r\n rateCode: Yup.string()\r\n .uppercase()\r\n .notRequired(),\r\n total: Yup.number()\r\n .positive()\r\n .integer()\r\n .notRequired()\r\n })\r\n .default(null)\r\n .nullable()\r\n .notRequired(),\r\n customer: Yup.object().shape({\r\n gender: Yup.number()\r\n .oneOf([1, 2])\r\n .required(),\r\n firstName: Yup.string().required(),\r\n lastName: Yup.string().required(),\r\n isCASLMarked: Yup.boolean().default(false)\r\n })\r\n });\r\n};\r\n\r\nexport default createReservationSchema;\r\n","import * as Yup from 'yup';\r\nimport { SUPPORTED_COUNTRIES, VALID_COUNTRIES } from '../../../utilities/constants';\r\nimport countries from '../../utilities/countries';\r\nimport provinces from '../../utilities/provinces';\r\nimport states from '../../utilities/states';\r\nimport { onlyDigitsValidation, strLenIsBetweenRange } from '../../utilities/validation/ValidationHelperMethods';\r\nimport { errors, paymentFieldsLengths } from '../ValidationMessages';\r\n\r\nconst partyReservationSchema = Yup.object().shape({\r\n userId: Yup.string()\r\n .default(null)\r\n .notRequired()\r\n .nullable(),\r\n payment: Yup.object().shape({\r\n type: Yup.number()\r\n .positive()\r\n .integer()\r\n .required(),\r\n creditCard: Yup.object().when('type', {\r\n is: 1,\r\n then: Yup.object().shape({\r\n number: Yup.string().required(),\r\n holder: Yup.string().required(),\r\n expiration: Yup.date().required(),\r\n cardCode: Yup.string().required(),\r\n cidNumber: Yup.string()\r\n .required()\r\n .test('is-number', errors.CVV_ONLY_NUMBERS, val => onlyDigitsValidation(val))\r\n .test('len', errors.CVV_LENGTH, val =>\r\n strLenIsBetweenRange(val, paymentFieldsLengths.CVV_MIN - 1, paymentFieldsLengths.CVV_MAX + 1)\r\n )\r\n }),\r\n otherwise: Yup.object().notRequired()\r\n }),\r\n affirm: Yup.object().when('type', {\r\n is: 3,\r\n then: Yup.object().shape({\r\n checkoutToken: Yup.string().required(),\r\n property: Yup.string().required(),\r\n amount: Yup.number().required(),\r\n resvId: Yup.string().nullable()\r\n }),\r\n otherwise: Yup.object().notRequired()\r\n })\r\n }),\r\n address: Yup.object().shape({\r\n street1: Yup.string().required(),\r\n city: Yup.string().required(),\r\n state: Yup.string()\r\n .when('country', {\r\n is: SUPPORTED_COUNTRIES.UnitedStates,\r\n then: Yup.string()\r\n .oneOf(states.map(state => state.abbreviation))\r\n .required()\r\n })\r\n .when('country', {\r\n is: SUPPORTED_COUNTRIES.Canada,\r\n then: Yup.string()\r\n .oneOf(provinces.map(province => province.abbreviation))\r\n .required()\r\n })\r\n .when('country', {\r\n is: val => !VALID_COUNTRIES.includes(val),\r\n then: Yup.string().notRequired()\r\n }),\r\n country: Yup.string()\r\n .oneOf(countries.map(country => country.code))\r\n .required(),\r\n postalCode: Yup.string()\r\n .when('country', {\r\n is: val => val === SUPPORTED_COUNTRIES.UnitedStates,\r\n then: Yup.string().length(5)\r\n })\r\n .required(),\r\n email: Yup.string()\r\n .email()\r\n .required()\r\n }),\r\n profileId: Yup.string()\r\n .notRequired()\r\n .nullable(),\r\n customer: Yup.object().shape({\r\n gender: Yup.number()\r\n .oneOf([1, 2])\r\n .required(),\r\n firstName: Yup.string().required(),\r\n lastName: Yup.string().required(),\r\n isCASLMarked: Yup.boolean().default(false)\r\n }),\r\n party: Yup.object().shape({\r\n guestsOfHonor: Yup.array().required(),\r\n partyDate: Yup.string().required(),\r\n partyType: Yup.string().required(),\r\n partySize: Yup.object().shape({\r\n adults: Yup.number().required(),\r\n kids: Yup.number().required(),\r\n infants: Yup.number().required(),\r\n spectators: Yup.number().required()\r\n }),\r\n partyTime: Yup.object().shape({\r\n name: Yup.string().required(),\r\n startTime: Yup.string().required(),\r\n endTime: Yup.string().required()\r\n })\r\n })\r\n});\r\n\r\nexport default partyReservationSchema;\r\n","import { creditCardType } from 'card-validator';\r\nimport get from 'lodash-es/get';\r\nimport PaymentApiClient from '../../api/clients/PaymentApiClient';\r\nimport RoomBookingApiClient from '../../api/clients/RoomBookingApiClient';\r\nimport Shift4i4GoApiClient from '../../api/clients/Shift4i4GoApiClient';\r\nimport { isLocationAvailableWithAffirm } from '../../api/Utils/affirmUtils';\r\nimport { isPayPalEnabled } from '../../api/Utils/paypalUtils';\r\nimport { editCopyByReplaceString } from '../../components/utilities/copyFunctions';\r\nimport { store } from '../../store/configureStore';\r\nimport { getNormalizedCode } from '../../utilities/availabilityUtils';\r\nimport {\r\n ASSETS_LOCATIONS,\r\n DATE_FORMATS,\r\n LATE_CHECKOUT_PREFIXES,\r\n SITE_NIAGON,\r\n SUPPORTED_COUNTRIES,\r\n getAssetsUrl\r\n} from '../../utilities/constants';\r\nimport { isDevEnvironment } from '../../utilities/env';\r\nimport { maskPhone } from '../../utilities/maskUtils';\r\nimport { checkObjectProperties } from '../../utilities/objectKeysManagementUtils';\r\nimport { GwDatesWrapper } from '../_internal_date_/gwDatesWrapper';\r\nimport unmaskValue from '../utilities/unmaskValue';\r\nimport createReservationSchema from './createReservationSchema';\r\n\r\nimport { FLOW_NAMES } from '../../flows/DynamicFlow/utilities/constants';\r\nimport { PAYMENT_FORM_IMAGES } from './assets/images';\r\nimport * as COPY from './utilities/copy';\r\nimport partyReservationSchema from './utilities/createPartyReservationSchema';\r\nimport { paymentMethodsTypes } from './utilities/helpers';\r\n\r\nconst DAY_PASS_PAGE_TYPE = 'daypass';\r\n/**\r\n * Type of payment methods\r\n * @enum {string}\r\n */\r\nexport const paymentMethods = {\r\n CREDIT_CARD: 1,\r\n AFFIRM: 3,\r\n PAYPAL: 4,\r\n SHIFT4: 5,\r\n APPLE_PAY: 5,\r\n GOOGLE_PAY: 5\r\n};\r\n\r\nexport const flowOrigins = {\r\n ROOM_BOOKING: 0,\r\n DAY_PASS: 1\r\n};\r\n\r\nconst paymentFormLogos = {\r\n creditCard: getAssetsUrl(ASSETS_LOCATIONS.ROOT, PAYMENT_FORM_IMAGES.UI_ICON_CREDITCARD),\r\n affirm: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, PAYMENT_FORM_IMAGES.AFFIRM_LOGO),\r\n paypal: 'https://www.paypalobjects.com/webstatic/en_US/i/buttons/PP_logo_h_100x26.png',\r\n applePay: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, PAYMENT_FORM_IMAGES.APPLE_PAY_LOGO),\r\n googlePay: getAssetsUrl(ASSETS_LOCATIONS.CONTENT, PAYMENT_FORM_IMAGES.GOOGLE_PAY_LOGO),\r\n shift4: 'https://www.shift4.com/wp-content/uploads/2019/05/shift4-logo.png'\r\n};\r\n\r\n/**\r\n * Payment methods configuration objects to be used to return the payment type\r\n * on the paload.\r\n * @enum {Object}\r\n */\r\nconst paymentMethododsConf = {\r\n 'credit-card': {\r\n type: paymentMethods.CREDIT_CARD,\r\n label: 'creditCard'\r\n },\r\n affirm: {\r\n type: paymentMethods.AFFIRM,\r\n label: 'affirm'\r\n },\r\n applePayEnabled: {\r\n type: paymentMethods.APPLE_PAY,\r\n label: 'digitalWallet'\r\n },\r\n googlePayEnabled: {\r\n type: paymentMethods.GOOGLE_PAY,\r\n label: 'digitalWallet'\r\n },\r\n paypal: {\r\n type: paymentMethods.PAYPAL,\r\n label: 'paypal'\r\n },\r\n shift4: {\r\n type: paymentMethods.SHIFT4,\r\n label: 'ALTERNATIVE'\r\n }\r\n};\r\n\r\n/**\r\n * Type of credit cards\r\n * @enum {string}\r\n */\r\nconst creditCardTypes = {\r\n visa: 'VS',\r\n mastercard: 'MC',\r\n 'american-express': 'AX',\r\n discover: 'DS',\r\n default: 'any'\r\n};\r\n\r\nconst CREDIT_CARD_TEST_NUMBER = '4444333322221111';\r\nconst DEFAULT_OFFER_CODE = 'BBAR';\r\nconst SOURCE_CODE = 'WEBN';\r\nconst OCCASION = 'BDAY';\r\nconst NEXT_GEN_QA = 'NextGenQA';\r\nconst APPLE_PAY_TYPE = 'applePay';\r\nconst GOOGLE_PAY_TYPE = 'googlePay';\r\nexport const DEFAULT_RATE_CODE = 'AMTCERT';\r\n\r\n/**\r\n * Formik initial values\r\n */\r\nconst getInitialValues = selectedPaymentMethod => ({\r\n contactInfo: {\r\n phone: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n textAgreement: false\r\n },\r\n billingInfo: {\r\n billingAddress: '',\r\n postalCode: '',\r\n city: '',\r\n state: 'AL',\r\n country: SUPPORTED_COUNTRIES.UnitedStates\r\n },\r\n paymentOptions: {\r\n selected: selectedPaymentMethod ?? 'credit-card',\r\n ccNameOnCard: '',\r\n ccMonth: '',\r\n ccYear: '',\r\n ccCvv: '',\r\n ccCardNumber: '',\r\n paypal: {\r\n nonce: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n deviceId: ''\r\n },\r\n googlePay: {\r\n tokenizationData: {},\r\n type: '',\r\n info: {},\r\n description: ''\r\n },\r\n applePay: {\r\n paymentData: {},\r\n paymentMethod: {},\r\n transactionIdentifier: ''\r\n }\r\n },\r\n specialRequests: [],\r\n specialRequestsOther: '',\r\n specialOccasion: [],\r\n specialOccasionOther: '',\r\n specialOccasionBirthday: '',\r\n isCASLMarked: false\r\n});\r\n\r\n/**\r\n * Based on a credit card type, return the correspondant code. On dev\r\n * environment pass the test code \"1111222233334444\" as a visa card.\r\n * @param {number} cardNumber Credit card number.\r\n * @return {string} Credit card code.\r\n */\r\nexport const getCardCode = cardNumber => {\r\n if (cardNumber === CREDIT_CARD_TEST_NUMBER) {\r\n return creditCardTypes.visa;\r\n }\r\n\r\n const cardType = creditCardType(cardNumber);\r\n const [bestCardMatch] = cardType;\r\n\r\n if (!bestCardMatch) return creditCardTypes.default;\r\n\r\n const { type: bestCardType } = bestCardMatch;\r\n return creditCardTypes[bestCardType] || creditCardTypes.default;\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} formData\r\n * @param {*} stateData\r\n */\r\nconst getAffirmCheckoutPayload = (formData, stateData) => {\r\n const { contactInfo, billingInfo } = formData;\r\n const {\r\n selectedSuite,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n resortLocation,\r\n selectedPackages,\r\n summaryTotal,\r\n summaryTaxes\r\n } = stateData;\r\n const displayName = `${COPY.GREAT_WOLF_LODGE} ${resortLocation} ; ${resortLocation}, ${COPY.US}; ${checkinDateSelection}-${checkoutDateSelection}; ${selectedSuite.title}`;\r\n\r\n const billingInformation = {\r\n name: {\r\n first: contactInfo.firstName,\r\n last: contactInfo.lastName\r\n },\r\n address: {\r\n line1: billingInfo.billingAddress,\r\n line2: billingInfo.addressLineTwo || '',\r\n city: billingInfo.city,\r\n state: billingInfo.state,\r\n zipcode: billingInfo.postalCode,\r\n country: billingInfo.country\r\n },\r\n email: contactInfo.email\r\n };\r\n\r\n const filteredSelectedPackages = selectedPackages.filter(\r\n filteredPackage => filteredPackage.isAdjustment === undefined\r\n );\r\n\r\n return {\r\n metadata: {\r\n mode: 'modal',\r\n entity_name: resortLocation\r\n },\r\n merchant: {\r\n user_confirmation_url: `${window.location.origin}/plan/payment`,\r\n user_cancel_url: `${window.location.origin}/plan/payment`,\r\n user_confirmation_url_action: 'GET',\r\n name: 'Great Wolf Lodge'\r\n },\r\n billing: billingInformation,\r\n shipping: {\r\n ...billingInformation,\r\n phone_number: unmaskValue(contactInfo.phone)\r\n },\r\n items: [\r\n {\r\n display_name: displayName,\r\n sku: selectedSuite.suiteCode,\r\n unit_price: selectedSuite?.totalRate * 100,\r\n qty: 1,\r\n // Item image and item url are rendering a relative path but I think\r\n // should render an absolute path to those urls for affirm\r\n item_image_url: selectedSuite.mainImage,\r\n item_url: selectedSuite.anchorPath\r\n },\r\n ...filteredSelectedPackages.map(selectedPackage => {\r\n return {\r\n display_name: selectedPackage.packageName || get(selectedPackage, 'shortDescription', ''),\r\n sku: selectedPackage.packageCode,\r\n unit_price: Math.abs(selectedPackage.total.toFixed(2) * 100),\r\n qty: selectedPackage.quantity,\r\n item_image_url: '',\r\n item_url: ''\r\n };\r\n })\r\n ],\r\n shipping_amount: 0,\r\n tax_amount: parseInt(Math.round(summaryTaxes * 100)),\r\n total: parseInt(Math.round(summaryTotal * 100))\r\n };\r\n};\r\n\r\n/**\r\n * Returns and transform all payment details based on the type of payment\r\n * selected.\r\n * @param {Object} paymentData Data coming from the payment form\r\n * @param {Object} stateData Redux state data\r\n */\r\nconst getPaymentDetails = (paymentData, stateData, flowName) => {\r\n const {\r\n ccYear,\r\n ccMonth,\r\n ccCardNumber,\r\n ccNameOnCard,\r\n ccCvv,\r\n selected,\r\n cardCode,\r\n vaultedCardId,\r\n isI4IframeFlow,\r\n security\r\n } = paymentData;\r\n const {\r\n resortLocation,\r\n summaryTotal,\r\n checkoutToken,\r\n paypal,\r\n optimizelyChargePackagesAtCheckout,\r\n googlePay,\r\n applePay,\r\n profile,\r\n offer,\r\n suiteRates,\r\n showLoyalty\r\n } = stateData;\r\n const expiration = ccYear && ccMonth ? GwDatesWrapper.format(`${ccYear}-${ccMonth}-05`) : null;\r\n let paymentObject = {};\r\n if (selected === 'credit-card') {\r\n paymentObject = {\r\n number: ccCardNumber,\r\n holder: ccNameOnCard,\r\n ...(expiration && { expiration }),\r\n ...(vaultedCardId && { vaultedCardId }),\r\n securityCode: 0,\r\n cardCode: cardCode ?? getCardCode(ccCardNumber),\r\n cidNumber: ccCvv,\r\n ccYear: ccYear,\r\n ccMonth: ccMonth\r\n };\r\n\r\n if (isI4IframeFlow) {\r\n paymentObject = {\r\n ...paymentObject,\r\n cardNumber: ccCardNumber,\r\n lastFourDigits: ccCardNumber.slice(-4),\r\n ...(security && { security })\r\n };\r\n }\r\n } else if (selected === 'affirm') {\r\n paymentObject = {\r\n checkoutToken: checkoutToken,\r\n property: resortLocation,\r\n amount: summaryTotal,\r\n reservationId: null\r\n };\r\n } else if (selected === 'paypal') {\r\n paymentObject = {\r\n nonce: paypal.nonce,\r\n firstName: paypal.firstName,\r\n lastName: paypal.lastName,\r\n email: paypal.email,\r\n deviceId: paypal.deviceId\r\n };\r\n } else if (selected === 'googlePayEnabled') {\r\n paymentObject = {\r\n cardCode: googlePay.i4go_cardtype,\r\n extendedCardData: googlePay.i4go_extendedcarddata,\r\n holder: googlePay.i4go_cardholdername,\r\n expirationMonth: googlePay.i4go_expirationmonth,\r\n expirationYear: googlePay.i4go_expirationyear,\r\n token: googlePay.i4go_uniqueid,\r\n lastFourDigits: googlePay.otn.cardnumber.slice(12)\r\n };\r\n } else if (selected === 'applePayEnabled') {\r\n const billingContactData = JSON.parse(applePay.i4go_applepaytoken);\r\n paymentObject = {\r\n cardCode: applePay.i4go_cardtype,\r\n extendedCardData: applePay.i4go_extendedcarddata,\r\n holder:\r\n applePay?.i4go_cardholdername ??\r\n `${billingContactData.billingContact.givenName} ${billingContactData.billingContact.familyName}`,\r\n expirationMonth: applePay.i4go_expirationmonth,\r\n expirationYear: applePay.i4go_expirationyear,\r\n token: applePay.i4go_uniqueid,\r\n lastFourDigits: applePay.otn.cardnumber.slice(12)\r\n };\r\n }\r\n\r\n const handlePoints = () => {\r\n if (showLoyalty && profile && profile.user && profile.user.pointsBalance) {\r\n if (profile.user.pointsBalance <= suiteRates[0].totalNightlyRate) {\r\n return profile.user.pointsBalance.toFixed();\r\n } else if (profile.user.pointsBalance > suiteRates[0].totalNightlyRate) {\r\n return suiteRates[0].totalNightlyRate.toFixed();\r\n }\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n return {\r\n type: paymentMethododsConf[selected].type,\r\n [paymentMethododsConf[selected].label]: paymentObject,\r\n shouldChargePackagesUpfront: optimizelyChargePackagesAtCheckout,\r\n points: flowName !== FLOW_NAMES.BIRTHDAY ? Number(handlePoints()) ?? 0 : 0,\r\n offers: flowName !== FLOW_NAMES.BIRTHDAY && offer && offer.activeOffers ? offer.activeOffers : [],\r\n isI4IframeFlow\r\n };\r\n};\r\n\r\n/**\r\n * Returns a formed object containning address details.\r\n * @param {Object} billingData Payment form billing data\r\n * @param {Object} contactData Payment form contact data\r\n */\r\nconst getAddressDetails = (billingData, contactData) => {\r\n const { billingAddress, addressLineTwo, city, state, country, postalCode } = billingData;\r\n const { email } = contactData;\r\n return {\r\n street1: billingAddress,\r\n street2: addressLineTwo || '',\r\n city: city,\r\n state: state,\r\n country: country,\r\n postalCode: postalCode,\r\n email: email\r\n };\r\n};\r\n\r\n/**\r\n * Returns a formed object containing all the order details.\r\n * @param {Object} formData Payment form data\r\n * @param {Object} stateData Redux state data\r\n */\r\nconst getOrderDetails = (formData, stateData) => {\r\n const {\r\n specialRequests,\r\n specialRequestsOther,\r\n specialOccasion,\r\n specialOccasionBirthday,\r\n specialOccasionOther\r\n } = formData;\r\n const {\r\n selectedSuite,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n adultsCount,\r\n kidsAges,\r\n selectedPackages,\r\n dayPasses,\r\n pageType,\r\n validOfferCode,\r\n qualifyingID,\r\n resortLocation\r\n } = stateData;\r\n\r\n const getOfferCode = () => {\r\n if (pageType === DAY_PASS_PAGE_TYPE) return '';\r\n if (isDevEnvironment) return DEFAULT_RATE_CODE;\r\n\r\n if (selectedSuite?.offerType === DEFAULT_OFFER_CODE) {\r\n return DEFAULT_OFFER_CODE;\r\n }\r\n\r\n return validOfferCode ? getNormalizedCode(validOfferCode) : getNormalizedCode(selectedSuite?.rateCode);\r\n };\r\n\r\n const getRateCode = () => {\r\n if (pageType === DAY_PASS_PAGE_TYPE) return dayPasses.selectedRateCode;\r\n\r\n return getNormalizedCode(selectedSuite?.rateCode);\r\n };\r\n const commentsList = [specialRequestsOther];\r\n\r\n if (pageType === DAY_PASS_PAGE_TYPE && dayPasses.qualifyingId) {\r\n commentsList.push(editCopyByReplaceString(COPY.QUALIFYING_ID, dayPasses.qualifyingId, '<ID>'));\r\n } else if (qualifyingID) {\r\n commentsList.push(editCopyByReplaceString(COPY.QUALIFYING_ID, qualifyingID, '<ID>'));\r\n }\r\n\r\n return {\r\n comments: commentsList,\r\n specialRequests: specialRequests.map(request => ({\r\n requestId: 0,\r\n code: request\r\n })),\r\n // what is source code?\r\n sourceCode: SOURCE_CODE,\r\n selection: {\r\n property: resortLocation,\r\n arrival:\r\n pageType === DAY_PASS_PAGE_TYPE\r\n ? GwDatesWrapper.format(dayPasses.arrivalDate, DATE_FORMATS.default)\r\n : GwDatesWrapper.format(checkinDateSelection, DATE_FORMATS.default),\r\n departure:\r\n pageType === DAY_PASS_PAGE_TYPE\r\n ? GwDatesWrapper.add(dayPasses.arrivalDate, 1, 'days')\r\n : GwDatesWrapper.format(checkoutDateSelection, DATE_FORMATS.default),\r\n roomCode: pageType === DAY_PASS_PAGE_TYPE ? dayPasses.selectedItemCode : selectedSuite.suiteCode,\r\n suiteDescription: pageType === DAY_PASS_PAGE_TYPE ? dayPasses.item.description : selectedSuite.title,\r\n adults: pageType === DAY_PASS_PAGE_TYPE ? dayPasses.numberOfGuests : adultsCount,\r\n children: pageType === DAY_PASS_PAGE_TYPE ? [] : kidsAges,\r\n offerCode: pageType === DAY_PASS_PAGE_TYPE ? getNormalizedCode(dayPasses.promoCode) : getOfferCode(),\r\n rateCode: getRateCode(),\r\n site: resortLocation,\r\n availabilityKey: selectedSuite?.availabilityKey,\r\n suiteContent: {\r\n maxOccupancy: selectedSuite?.maxOccupancy,\r\n suiteCategory: selectedSuite?.suiteCategory\r\n }\r\n },\r\n alerts: specialOccasion.map(occasion => ({\r\n alert_code: occasion,\r\n alert_description:\r\n occasion === OCCASION\r\n ? editCopyByReplaceString(COPY.WISH_HAPPY_BIRTH_DAY, specialOccasionBirthday, '<BIRTH_DAY>')\r\n : specialOccasionOther\r\n })),\r\n packages:\r\n pageType === DAY_PASS_PAGE_TYPE\r\n ? selectedPackages.map(selectedPackage => {\r\n const { packageCode, isAdjustment, startDate, endDate, packageType, isDiningByPackage } = selectedPackage;\r\n return {\r\n packageCode,\r\n isAdjustment,\r\n quantity: 1,\r\n packageType: packageType && packageType.length > 0 ? packageType[0] : '',\r\n isDiningByPackage,\r\n startDate: GwDatesWrapper.format(startDate, DATE_FORMATS.default),\r\n endDate: GwDatesWrapper.format(endDate, DATE_FORMATS.default)\r\n };\r\n })\r\n : selectedPackages.map(selectedPackage => {\r\n const {\r\n packageCode,\r\n isAdjustment,\r\n quantity,\r\n startDate,\r\n endDate,\r\n packageType,\r\n isDiningByPackage,\r\n availabilityKey\r\n } = selectedPackage;\r\n\r\n return {\r\n availabilityKey,\r\n packageCode,\r\n isAdjustment,\r\n quantity,\r\n packageType: packageType && packageType.length > 0 ? packageType[0] : '',\r\n isDiningByPackage,\r\n startDate: GwDatesWrapper.format(startDate, DATE_FORMATS.default),\r\n endDate: GwDatesWrapper.format(endDate, DATE_FORMATS.default)\r\n };\r\n }),\r\n items:\r\n pageType === DAY_PASS_PAGE_TYPE\r\n ? // Create an \"array\" of items containing the day passes information\r\n [\r\n {\r\n Quantity: dayPasses.numberOfGuests,\r\n Date: GwDatesWrapper.format(dayPasses.arrivalDate, DATE_FORMATS.default),\r\n ItemCode: dayPasses.selectedItemCode,\r\n RateCode: getRateCode()\r\n }\r\n ]\r\n : // if the page type is a reservation, we should send the\r\n // late checkout packages as an item so the backend can discount\r\n // the item quantity\r\n selectedPackages\r\n .filter(selectedPackage => selectedPackage.packageCode.includes(LATE_CHECKOUT_PREFIXES.code))\r\n .map(selectedPackage => {\r\n const { quantity, total, packageCode } = selectedPackage;\r\n return {\r\n Quantity: quantity,\r\n Date: GwDatesWrapper.format(checkoutDateSelection, DATE_FORMATS.default), // should be applied for the stay checkout date\r\n Total: total,\r\n ItemCode: packageCode,\r\n RateCode: getRateCode()\r\n };\r\n })\r\n };\r\n};\r\n\r\n/**\r\n * Return customer details\r\n * @param {Object} contactInfo User data\r\n */\r\nconst getCustomerDetails = contactInfo => {\r\n return {\r\n // where to pull gender?\r\n gender: 1,\r\n firstName: contactInfo.firstName,\r\n lastName: isDevEnvironment ? NEXT_GEN_QA : contactInfo.lastName,\r\n phoneNumber: maskPhone(contactInfo.phone),\r\n canContactBySms: contactInfo.textAgreement,\r\n isCASLMarked: contactInfo.isCASLMarked,\r\n isPhoneUpdated: contactInfo?.isPhoneUpdated ?? false\r\n };\r\n};\r\n\r\n/**\r\n * Returns the payment info returned by Paypal checkout\r\n * @param {Object} paypal Paypal success object\r\n */\r\nconst getPaypalPaymentInfo = paypal => {\r\n return {\r\n nonce: paypal.nonce,\r\n firstName: paypal.details.firstName,\r\n lastName: paypal.details.lastName,\r\n email: paypal.details.email,\r\n deviceId: paypal.deviceId\r\n };\r\n};\r\n\r\n/**\r\n * Returns the billing info selected on Paypal site\r\n * @param {Object} paypal Paypal success object\r\n */\r\nconst getPaypalBillingInfo = paypal => {\r\n return {\r\n billingAddress: paypal.details.billingAddress.line1 || '',\r\n postalCode: paypal.details.billingAddress.postalCode || '',\r\n city: paypal.details.billingAddress.city || '',\r\n state: paypal.details.billingAddress.state || '',\r\n country: paypal.details.billingAddress.countryCode || ''\r\n };\r\n};\r\n\r\n/**\r\n * Returns the payment info returned by Google Pay checkout\r\n * @param gPay\r\n * @returns {{country: (*|string), city: (string|string), postalCode: (*|string), billingAddress: (string|string), state: (string|string)}}\r\n */\r\nconst getGooglePayBillingInfo = gPay => {\r\n return {\r\n billingAddress: gPay?.info?.billingAddress.address1 || '',\r\n postalCode: gPay?.info?.billingAddress.postalCode || '',\r\n city: gPay?.info?.billingAddress.locality || '',\r\n state: gPay?.info?.billingAddress.administrativeArea || '',\r\n country: gPay?.info?.billingAddress.countryCode || ''\r\n };\r\n};\r\n\r\n/**\r\n * Returns the payment info returned by Apple Pay checkout\r\n * @param applePayBillingContact\r\n * @returns {{country: (*|string), city: (string|string), postalCode: (*|string), billingAddress: (string|string), state: (string|string)}}\r\n */\r\nconst getApplePayBillingInfo = applePayBillingContact => {\r\n return {\r\n billingAddress: applePayBillingContact?.addressLines[0] || '',\r\n postalCode: applePayBillingContact?.postalCode || '',\r\n city: applePayBillingContact?.locality || '',\r\n state: applePayBillingContact?.administrativeArea || '',\r\n country: applePayBillingContact?.countryCode || ''\r\n };\r\n};\r\n\r\n/**\r\n * Returns a contact and billing info based on user logged in for formik.\r\n * @param {Object} profile Payment form data\r\n */\r\nconst setContactandBillingAddressInfo = (profile, selectedPaymentMethod) => {\r\n const { currentLodge } = store.getState();\r\n let contactAndBillingAddressInfo = { ...getInitialValues(selectedPaymentMethod) };\r\n if (profile) {\r\n contactAndBillingAddressInfo.contactInfo = {\r\n phone: maskPhone(profile.phoneNumber) || '',\r\n firstName: profile.firstName || '',\r\n lastName: profile.lastName || '',\r\n email: profile.email || '',\r\n textAgreement: currentLodge.resortLocation !== SITE_NIAGON ? true : false\r\n };\r\n contactAndBillingAddressInfo.billingInfo = {\r\n billingAddress: profile.streetLine1 || '',\r\n addressLineTwo: profile.streetLine2 || '',\r\n postalCode: profile.zip || '',\r\n city: profile.city || '',\r\n state: profile.stateProvince || '',\r\n country: profile.country || SUPPORTED_COUNTRIES.UnitedStates\r\n };\r\n }\r\n return contactAndBillingAddressInfo;\r\n};\r\n\r\nconst getPartyOrder = state => {\r\n const {\r\n partyDate,\r\n partyAdults,\r\n partyKids,\r\n partyInfants,\r\n partySpectators,\r\n partyTime,\r\n bdaySelectedParty,\r\n guestsOfHonor,\r\n selectedPackages\r\n } = state;\r\n const timeDate = bdaySelectedParty.priceDetails.times.find(timeData => timeData.name === partyTime);\r\n const BIRTHDAY_PAYMENT_INDEX = {\r\n 0: 'pizzaPackages',\r\n 1: 'drinksPackages',\r\n 2: 'cakePackages',\r\n 3: 'addOnPackages'\r\n };\r\n\r\n function createArrayBirthdayPackages(selectedPackages) {\r\n let packages = {};\r\n\r\n const groupedPackages = {};\r\n selectedPackages.forEach(pkg => {\r\n const summarySectionType = pkg.summarySectionType;\r\n if (groupedPackages[summarySectionType]) {\r\n groupedPackages[summarySectionType].push(pkg);\r\n } else {\r\n groupedPackages[summarySectionType] = [pkg];\r\n }\r\n });\r\n\r\n Object.keys(groupedPackages).forEach(gKey => {\r\n // packageCodes\r\n const packageCodes = [];\r\n const groupedPackages = Object.groupBy(selectedPackages, ({ summarySectionType }) => summarySectionType);\r\n const sortedPackage = groupedPackages[gKey]?.sort((a, b) => {\r\n // If packageCode is the same, compare isExtra (false comes before true)\r\n return a.isExtra - b.isExtra;\r\n });\r\n\r\n if (+gKey === 3) {\r\n sortedPackage?.forEach(pkg => {\r\n packageCodes.push({\r\n code: pkg.packageCode,\r\n quantity: pkg.quantity\r\n });\r\n });\r\n } else {\r\n sortedPackage.forEach(pkg => {\r\n const qty = pkg.quantity;\r\n const code = pkg.packageCode;\r\n for (let i = 0; i < qty; i++) {\r\n packageCodes.push(code);\r\n }\r\n });\r\n }\r\n\r\n packages[BIRTHDAY_PAYMENT_INDEX[gKey]] = packageCodes;\r\n });\r\n\r\n return packages;\r\n }\r\n\r\n return {\r\n party: {\r\n guestsOfHonor: guestsOfHonor,\r\n partyDate: partyDate,\r\n partySize: {\r\n adults: partyAdults,\r\n kids: partyKids,\r\n infants: partyInfants,\r\n spectators: partySpectators\r\n },\r\n partyTime: {\r\n name: timeDate.name,\r\n startTime: timeDate.startTime,\r\n endTime: timeDate.endTime\r\n },\r\n partyType: bdaySelectedParty.partyType,\r\n depositAmount: bdaySelectedParty.priceDetails?.depositAmount,\r\n remainingBalance: bdaySelectedParty.priceDetails?.remainingBalance,\r\n ...createArrayBirthdayPackages(selectedPackages)\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * Returns a well formed payload to be used by createReservation.\r\n * @param {Object} formValues Payment form data\r\n * @param {Object} stateValues Redux state data\r\n */\r\nconst getPayload = async (flowName, formValues, stateValues, callBack = () => {}) => {\r\n const {\r\n paymentOptions,\r\n billingInfo,\r\n contactInfo,\r\n specialRequests,\r\n specialRequestsOther,\r\n specialOccasion\r\n } = formValues;\r\n const { profile, suiteRates } = stateValues;\r\n\r\n const defaultPayload = {\r\n profileId: profile.user ? profile.user.id : null,\r\n address: getAddressDetails(billingInfo, contactInfo),\r\n payment: getPaymentDetails(paymentOptions, stateValues, flowName),\r\n customer: getCustomerDetails(contactInfo)\r\n };\r\n\r\n let payload = {};\r\n\r\n if (flowName === FLOW_NAMES.BOOKING || flowName === FLOW_NAMES.DAYPASS) {\r\n const suiteDaypassPayload = {\r\n details: getOrderDetails(\r\n {\r\n specialRequests,\r\n specialRequestsOther,\r\n specialOccasion\r\n },\r\n stateValues\r\n ),\r\n\r\n expectedRates: suiteRates\r\n };\r\n payload = { ...defaultPayload, ...suiteDaypassPayload };\r\n\r\n try {\r\n const cidNumberIsRequired = !paymentOptions.isI4IframeFlow;\r\n return await createReservationSchema(cidNumberIsRequired).validate(payload);\r\n } catch (error) {\r\n callBack(error?.errors[0] ?? 'Something Went Wrong');\r\n console.error(error);\r\n // null catch statement to prevent error from breaking the app\r\n }\r\n }\r\n\r\n if (flowName === FLOW_NAMES.BIRTHDAY) {\r\n const birthdayPayload = getPartyOrder(stateValues);\r\n payload = { ...defaultPayload, ...birthdayPayload };\r\n try {\r\n return await partyReservationSchema.validate(payload);\r\n } catch (error) {\r\n callBack(error?.errors[0] ?? 'Something Went Wrong');\r\n console.error(error);\r\n // null catch statement to prevent error from breaking the app\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * @function\r\n * Check if the all contact and billing information is complete before we\r\n * render the info text component\r\n * @param {Object} contactInfo Formik data with the contactInfo\r\n * @param {Object} billingInfo Formik data with the billingInfo\r\n * @Return {Boolean} If contactInfo and billingInfo haven't any null or empty properties then the result will be true\r\n */\r\nconst allFieldsProvided = contactInfo => {\r\n if (!contactInfo) return false;\r\n\r\n return checkObjectProperties(contactInfo);\r\n};\r\n\r\n/**\r\n * @function\r\n * Returns requited data to render payment tabs depending on calculated values\r\n * @param {Boolean} isPlanPage\r\n * @returns\r\n */\r\nconst getPaymentMethods = (isPlanPage, resortLocation) => {\r\n const { CREDIT_CARD, AFFIRM, PAYPAL, SHIFT4, APPLE_PAY, GOOGLE_PAY } = paymentMethodsTypes;\r\n\r\n const methods = {\r\n [CREDIT_CARD]: {\r\n isEnabled: true,\r\n isEnabledOutsidePlanPage: true,\r\n order: 1\r\n },\r\n [AFFIRM]: {\r\n isEnabled: isLocationAvailableWithAffirm(resortLocation),\r\n isEnabledOutsidePlanPage: false,\r\n order: 4\r\n },\r\n [PAYPAL]: {\r\n isEnabled: isPayPalEnabled(process.env.REACT_APP_PAYPAL_ENABLED_AT, resortLocation),\r\n isEnabledOutsidePlanPage: true,\r\n order: 5\r\n },\r\n [SHIFT4]: {\r\n isEnabled: process.env.REACT_APP_ENABLE_SHIFT4 === 'true',\r\n isEnabledOutsidePlanPage: true,\r\n order: 6\r\n },\r\n [APPLE_PAY]: {\r\n isEnabled: true,\r\n isEnabledOutsidePlanPage: true,\r\n order: 7\r\n },\r\n [GOOGLE_PAY]: {\r\n isEnabled: true,\r\n isEnabledOutsidePlanPage: true,\r\n order: 8\r\n }\r\n };\r\n\r\n const availablePaymentMethods = Object.values(paymentMethodsTypes).filter(method => {\r\n return isPlanPage\r\n ? methods[method]?.isEnabled\r\n : methods[method]?.isEnabled && methods[method]?.isEnabledOutsidePlanPage;\r\n });\r\n\r\n let availableSpace = 100;\r\n\r\n return availablePaymentMethods\r\n .map((method, idx) => {\r\n const { length } = availablePaymentMethods;\r\n if (availableSpace % length === 0 || idx !== 0) {\r\n return { name: method, width: `${availableSpace / length}%` };\r\n }\r\n\r\n const firstTabSize = Math.ceil(availableSpace / length / 10) * 10;\r\n availableSpace -= firstTabSize;\r\n return { name: method, width: `${firstTabSize}%` };\r\n })\r\n .sort((a, b) => a.order < b.order);\r\n};\r\n\r\nconst fetchShift4WalletConfig = async (accessBlock, i4GoServerUrl) => {\r\n try {\r\n const payApiClient = new PaymentApiClient();\r\n const { data } = await payApiClient.getShift4WalletConfig(accessBlock, i4GoServerUrl);\r\n return data;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n};\r\n\r\nconst approveShift4WalletTransaction = async (accessBlock, token, paymentType, i4GoServerUrl) => {\r\n try {\r\n const applePayToken = paymentType === APPLE_PAY_TYPE ? token : '';\r\n const googlePayToken = paymentType === GOOGLE_PAY_TYPE ? token : '';\r\n const payApiClient = new PaymentApiClient();\r\n const { data } = await payApiClient.approveShift4WalletTransaction(\r\n accessBlock,\r\n applePayToken,\r\n googlePayToken,\r\n i4GoServerUrl\r\n );\r\n return data;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n};\r\n\r\nexport const fetchTiogaTokenAccessBlock = async (resortLocation, paymentType, totalToCharge, origin = null) => {\r\n try {\r\n const payApiClient = new RoomBookingApiClient();\r\n return await payApiClient.getShift4i4AccessBlockTioga(resortLocation, paymentType, totalToCharge, origin);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n};\r\n\r\n/**\r\n * Create shift4i4Go vaulted card details\r\n *\r\n * @function\r\n * @param {number, ccMonth, ccYear, cidNumber, holder} creditCardData credt Card data to be tokenized\r\n * @param {postalCode, street1} billingAddressData billing address data to be tokenized\r\n */\r\nconst fillVaultedCardDetails = async (creditCardData, billingAddressData, resortLocation) => {\r\n const { number: ccNumber, ccMonth, ccYear, cidNumber: cvv2Code, holder: ccHolder } = creditCardData;\r\n const { postalCode, street1 } = billingAddressData;\r\n const cardTokenAccessBlockData = await fetchTiogaTokenAccessBlock(resortLocation, 1, 0);\r\n const ccStreetAddress = street1.replace(/(^\\d+)(.+$)/i, '$1');\r\n const data = {\r\n i4go_accessblock: cardTokenAccessBlockData.data.token,\r\n i4go_cardnumber: ccNumber,\r\n i4go_expirationmonth: ccMonth,\r\n i4go_expirationyear: ccYear,\r\n i4go_cvv2code: cvv2Code,\r\n i4go_cardholdername: ccHolder,\r\n i4go_postalcode: postalCode,\r\n i4go_streetaddress: ccStreetAddress\r\n };\r\n const vaultedCardDetails = (\r\n await new Shift4i4GoApiClient().getVaultedCardDetails(cardTokenAccessBlockData.data.url, data)\r\n ).data;\r\n\r\n return {\r\n vaultedCardId: vaultedCardDetails.i4go_uniqueid,\r\n lastFourDigits: vaultedCardDetails.otn.cardnumber.replaceAll('X', '').trim(),\r\n cardnumber: vaultedCardDetails.otn.cardnumber,\r\n cidNumber: '',\r\n number: vaultedCardDetails.otn.cardnumber\r\n };\r\n};\r\n\r\nexport const transformPaymentDataToOptions = (paymentMethodsComponents, optionsVariation) =>\r\n optionsVariation.reduce((paymentMethods, currentOption) => {\r\n if (!paymentMethodsComponents[currentOption].show || !paymentMethodsComponents[currentOption].allowedOnLocation)\r\n return paymentMethods;\r\n\r\n return [\r\n ...paymentMethods,\r\n {\r\n paymentMethod: {\r\n uuid: currentOption,\r\n ...paymentMethodsComponents[currentOption]\r\n }\r\n }\r\n ];\r\n }, []);\r\n\r\nexport const getSelectedPaymentMethod = (\r\n appleGooglePayMethodsFirst,\r\n isGooglePaymentActive,\r\n availablePaymentMethods\r\n) => {\r\n if (!appleGooglePayMethodsFirst) return paymentMethodsTypes.CREDIT_CARD;\r\n if (window.ApplePaySession && availablePaymentMethods.includes(paymentMethodsTypes.APPLE_PAY))\r\n return paymentMethodsTypes.APPLE_PAY;\r\n if (isGooglePaymentActive && availablePaymentMethods.includes(paymentMethodsTypes.GOOGLE_PAY))\r\n return paymentMethodsTypes.GOOGLE_PAY;\r\n return paymentMethodsTypes.CREDIT_CARD;\r\n};\r\n\r\nexport const setBasicBillingInfo = (values, addressInfo) => {\r\n values.billingInfo.city = addressInfo.locality;\r\n values.billingInfo.postalCode = addressInfo.postalCode;\r\n values.billingInfo.country = addressInfo.countryCode;\r\n values.billingInfo.state = addressInfo.administrativeArea;\r\n};\r\n\r\nexport {\r\n allFieldsProvided,\r\n approveShift4WalletTransaction,\r\n fetchShift4WalletConfig,\r\n fillVaultedCardDetails,\r\n getAffirmCheckoutPayload,\r\n getApplePayBillingInfo,\r\n getGooglePayBillingInfo,\r\n getPayload,\r\n getPaymentMethods,\r\n getPaypalBillingInfo,\r\n getPaypalPaymentInfo,\r\n paymentFormLogos,\r\n setContactandBillingAddressInfo\r\n};\r\n","import styled from 'styled-components';\r\nimport theme from './themes/theme';\r\nimport Box from './Box';\r\n\r\nconst floatLabel = (active, type, error) => {\r\n if (active) {\r\n if (type === 'textarea') {\r\n return {\r\n transform: 'translateY(-8px) scale(0.57)',\r\n color: `${theme.colors.preciousStoneBlue[100]}`\r\n };\r\n } else {\r\n return {\r\n fontSize: '8px',\r\n transform: `translateY(${error ? '15px' : '-15px'})`,\r\n color: `${theme.colors.preciousStoneBlue[100]}`\r\n };\r\n }\r\n }\r\n};\r\n\r\nconst positionLabel = (type, error) => {\r\n if (type === 'textarea') {\r\n return {\r\n top: '15px'\r\n };\r\n } else if (type === 'select') {\r\n return {\r\n top: 'calc(100% - 31px)'\r\n };\r\n } else {\r\n if (error) {\r\n return {\r\n top: 0,\r\n overflow: 'hidden',\r\n minHeight: '15px',\r\n left: 0,\r\n margin: '8px 0'\r\n };\r\n }\r\n\r\n return {\r\n top: '25px',\r\n transform: 'translateY(-50%)',\r\n overflow: 'visible',\r\n minHeight: 'auto'\r\n };\r\n }\r\n};\r\n\r\nconst errorFieldProps = props => {\r\n if (props.error) {\r\n return {\r\n position: 'relative',\r\n transition: 'none'\r\n };\r\n }\r\n};\r\n\r\nconst Label = styled(Box).attrs(props => ({\r\n as: 'label'\r\n}))`\r\n font-size: ${props => (props.error ? '10px' : `${theme.fontSizes[1]}px`)};\r\n position: absolute;\r\n transform-origin: top left;\r\n color: ${props => (props.error ? theme.colors.digitalBrightRed[100] : props.color || theme.colors.nightSkyBlack[60])};\r\n left: 16px;\r\n font-family: ${theme.fontSecondary};\r\n font-weight: ${theme.fontWeights.medium};\r\n margin: 0;\r\n transition: all 0.1s ease-in-out;\r\n pointer-events: ${props => (props.clickable ? 'unset' : 'none')};\r\n padding-bottom: 0;\r\n display: inline-block;\r\n line-height: normal;\r\n ${props => positionLabel(props.type, props.error)};\r\n ${props => floatLabel(props.active, props.type, props.error)};\r\n ${errorFieldProps};\r\n`;\r\n\r\nLabel.displayName = 'Label';\r\n\r\nLabel.defaultProps = {\r\n theme: theme,\r\n active: false\r\n};\r\n\r\nexport default Label;\r\n","// Lodge Locations Selectors\r\n\r\nexport const getLocationList = state => state.locationList;\r\n\r\nexport const getLocation = (state, locationCode) => state?.locationList[locationCode] || {};\r\n\r\nexport const getLocationPhone = (state, locationCode) => getLocation(state, locationCode).phone;\r\n\r\nexport const getLocationURL = (state, locationCode) => getLocation(state, locationCode).url;\r\n\r\nexport const getLocationDisplayName = (state, shorthandOrCode) => getLocation(state, shorthandOrCode).display;\r\n\r\n/**\r\n * Check if the user has a location already selected\r\n * @param {array} locationSelectedValues Locations selected by the user\r\n * @param {string} locationCode Property code to check if the user has selected\r\n * @returns bool whether the user has a location already selected\r\n */\r\nexport const containsLocation = (locationSelectedValues, locationCode) => {\r\n return locationSelectedValues.includes(locationCode);\r\n};\r\n\r\n/**\r\n * Get locations/properties by region in a dictionary\r\n * @returns dict\r\n */\r\nexport const getPropertiesByRegion = state => {\r\n let regions = Object.entries(state.locationList).map(([key, value]) => {\r\n return value.region;\r\n });\r\n regions = [...new Set(regions)];\r\n\r\n const locations = Object.entries(state.locationList).map(([key, value]) => {\r\n return {\r\n display: value.display,\r\n region: value.region,\r\n operaCode: value.operaCode\r\n };\r\n });\r\n\r\n let propertiesByRegion = {};\r\n\r\n regions.forEach(region => {\r\n propertiesByRegion[region] = locations.filter(location => location.region === region);\r\n });\r\n\r\n return propertiesByRegion;\r\n};\r\n\r\n/**\r\n * Get regions selected by the user\r\n * @param {array} locationSelectedValues Locations selected by the user\r\n * @returns array containing the names of the regions where the user is subscribed\r\n */\r\nexport const regionsSelected = (state, locationSelectedValues) => {\r\n const propsByRegion = getPropertiesByRegion(state);\r\n const filtered = Object.keys(propsByRegion).filter(key =>\r\n propsByRegion[key].some(location => containsLocation(locationSelectedValues, location.operaCode))\r\n );\r\n\r\n return filtered;\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { Text } from '..';\r\nimport { deleteState } from '../../../infrastructure/middleware/storage/reduxLocalStorage';\r\nimport theme from '../themes/theme';\r\nimport { TextLikeLink } from './styles';\r\n\r\nconst propTypes = {\r\n /** Changes the hover color for text and icons */\r\n hoverColor: PropTypes.string,\r\n /** Changes the default color for text and icons */\r\n color: PropTypes.string,\r\n /** Changes the text font weight */\r\n fontWeight: PropTypes.number,\r\n /** Use this prop to clear redux local storage on redirects */\r\n clearStateOnRedirect: PropTypes.bool,\r\n /** An string indicating if the component should render an element that is different from the normal anchor element. */\r\n as: PropTypes.string,\r\n /** Icon to display */\r\n icon: PropTypes.func,\r\n /** Size of the icon */\r\n size: PropTypes.string,\r\n /** Position for the icon */\r\n iconPosition: PropTypes.oneOf(['left', 'right']),\r\n /** Prop to add the underline to the component */\r\n underline: PropTypes.bool,\r\n /** Props to be passed to the icon component */\r\n iconProps: PropTypes.object\r\n};\r\n\r\nconst defaultProps = {\r\n color: theme.colors.preciousStoneBlue[100],\r\n fontWeight: theme.fontWeights.bold,\r\n clearStateOnRedirect: false,\r\n as: 'a',\r\n iconPosition: 'right',\r\n size: '14px',\r\n underline: true,\r\n iconProps: null,\r\n lineHeight: null\r\n};\r\n\r\n/** Use the `TextLink` component to indicate a clickable text */\r\nconst TextLink = ({\r\n clearStateOnRedirect,\r\n onClick,\r\n children,\r\n icon: Icon,\r\n size,\r\n fontSize,\r\n iconPosition,\r\n iconProps,\r\n lineHeight,\r\n ...restProps\r\n}) => {\r\n const handleClick = () => {\r\n if (clearStateOnRedirect) {\r\n deleteState();\r\n }\r\n\r\n onClick && onClick();\r\n };\r\n\r\n return (\r\n <TextLikeLink {...restProps} onClick={handleClick}>\r\n {Icon && iconPosition === 'left' && <Icon size={size} data-testid=\"TextLink:iconLeft\" {...iconProps} />}\r\n <Text as=\"span\" fontSize={fontSize} lineHeight={lineHeight}>\r\n {children}\r\n </Text>\r\n {Icon && iconPosition === 'right' && <Icon size={size} data-testid=\"TextLink:iconRight\" {...iconProps} />}\r\n </TextLikeLink>\r\n );\r\n};\r\n\r\nTextLink.defaultProps = defaultProps;\r\nTextLink.propTypes = propTypes;\r\n\r\nexport default TextLink;\r\n","import TextLink from './TextLink';\r\n\r\nexport default TextLink;\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Reservation endpoints\r\n *\r\n * @class ReservationsApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class ReservationsApiClient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * If there isn't any url provided, then we use the default from the environment variable\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v2`;\r\n\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_RESERVATION_SERVICE_ENDPOINT, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * @function\r\n * Get a reservation by its Id\r\n * @param {int} reservationId\r\n */\r\n async getReservationsById(reservationId) {\r\n const urlRequest = `${this.url}/${reservationId}`;\r\n\r\n let request = await super.getApiCallAuth(urlRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get's an object that specifies wether or not the reservetation is elligible for virtual check-in,\r\n * it's worth noticing that reservation is elligible for virtual checking if it's due to 24h, there\r\n * maybe some cases when the Nor1 API isn't synced so it may respond with a non elligible flag.\r\n * @param {number} reservationId Reservation number.\r\n */\r\n async getReservationCheckIn(reservationId) {\r\n const urlRequest = `${this.url}/${reservationId}/check-in`;\r\n\r\n const request = await super.getApiCallAuth(urlRequest);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @deprecated This function and the components where it's used should be removed in a future release.\r\n * Get all reservations by Phone number and last four numbers of the Credit Card\r\n * @param {string} phone\r\n * @param {int} creditCard\r\n */\r\n async getAllReservationsByPhoneAndCc(phone, creditCard) {\r\n const urlRequest = `${this.url}/phone`;\r\n\r\n let queryParams = {\r\n PhoneNumber: phone,\r\n LastFourCc: creditCard\r\n };\r\n\r\n let request = await super.getApiCallAuth(urlRequest, queryParams);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get all reservations by Email and last four numbers of the Credit Card\r\n * @param {string} email\r\n * @param {int} creditCard\r\n */\r\n async getAllReservationsByEmailAndCc(email, creditCard) {\r\n const urlRequest = `${this.url}/email`;\r\n\r\n let queryParams = {\r\n Email: email,\r\n LastFourCc: creditCard\r\n };\r\n\r\n let request = await super.getApiCallAuth(urlRequest, queryParams);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get all reservations by Reservation Id and Last Name\r\n * @param {int} reservationId\r\n * @param {string} lastName\r\n */\r\n async getReservationsByIdAndLastName(reservationId, lastName) {\r\n const urlRequest = `${this.url}/last-name`;\r\n\r\n let queryParams = {\r\n ReservationId: reservationId,\r\n LastName: lastName\r\n };\r\n\r\n let request = await super.getApiCall(urlRequest, queryParams);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get reservations by Reservation Id and Reservation Key\r\n * @param {number} reservationId\r\n * @param {string} reservationKey\r\n */\r\n async getReservationsByIdAndReservationKey(reservationId, reservationKey) {\r\n const urlRequest = `${this.url}/fetch`;\r\n\r\n const queryParams = {\r\n ReservationId: reservationId,\r\n ReservationKey: reservationKey\r\n };\r\n\r\n const request = await super.getApiCall(urlRequest, queryParams);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Send a PUT request to cancel the reservation by Id.\r\n * @param {number} reservationId\r\n */\r\n async cancelReservationById(reservationId) {\r\n const actionUrl = `${reservationId}/cancel`;\r\n\r\n const urlRequest = `${this.url}/${actionUrl}`;\r\n\r\n let request = await super.putApiCallAuth(urlRequest, {});\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Send a PUT request to modify a reservation.\r\n * @param {Object} reservation Reservation payload.\r\n * The reservation modified fields\r\n */\r\n async modifyReservation(reservation) {\r\n const urlRequest = `${this.url}/modify`;\r\n\r\n let request = await super.putApiCall(urlRequest, reservation);\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Create a new reservation for the current user\r\n * @param {object} reservation\r\n */\r\n async createSuiteReservation(reservation) {\r\n const urlRequest = this.url;\r\n\r\n const shouldUseAuthCall = super.shouldUseAuthenticatedCalls();\r\n\r\n let request = null;\r\n\r\n // This to allow backend to update the User Profile\r\n if (shouldUseAuthCall) {\r\n request = await super.postApiCallAuth(urlRequest, reservation);\r\n } else {\r\n request = await super.postApiCall(urlRequest, reservation);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Create a new daypass for the current user.\r\n * @param {Object} reservation payload object\r\n * @returns\r\n * @see {@link https://gwrdev-azure.greatwolf.com/reservation/index.html?urls.primaryName=V2} for information on model object.\r\n */\r\n async createDayPassReservation(reservation) {\r\n const urlRequest = `${this.url}/daypass`;\r\n\r\n return super.postApiCall(urlRequest, reservation);\r\n }\r\n\r\n /**\r\n * Add a cabana for your reservation\r\n * @param {Object} Cabanas payload object\r\n */\r\n async addCabana(cabanasRequest) {\r\n const urlRequest = `${this.url}/cabana`;\r\n return super.postApiCall(urlRequest, cabanasRequest);\r\n }\r\n\r\n async addCabanaV3(reservationId, cabanasRequest, lastName) {\r\n const urlRequest = `${this.url}/${reservationId}/packages/cabana?last-name=${lastName}`;\r\n return super.postApiCall(urlRequest, cabanasRequest);\r\n }\r\n\r\n async getCabanaDeposit(request) {\r\n const urlRequest = `${this.url}/${request.id}/packages/availability/cabana/${request.cabanaRoomCode}/${request.cabanaRateCode}?${request.extraParams}`;\r\n\r\n let result = await super.getApiCall(urlRequest, request.queryParams);\r\n\r\n return result;\r\n }\r\n\r\n async fetchCabanasV3(resId) {\r\n const urlRequest = `${this.url}/${resId}/packages/availability/cabana`;\r\n\r\n let result = await super.getApiCall(urlRequest);\r\n\r\n return result;\r\n }\r\n\r\n async getDynamicTilesV3(request) {\r\n const urlRequest = `${this.url}/${request.resId}/dynamic-tile`;\r\n\r\n let result = await super.getApiCallAuth(urlRequest, request.queryParams);\r\n\r\n return result;\r\n }\r\n\r\n async fakeGetDynamicTilesV3(request) {\r\n throw new Error('dynamic-tile disabled temporarily');\r\n }\r\n\r\n async getFolio(request) {\r\n const urlRequest = `${this.url}/${request.resId}/folio`;\r\n\r\n let result = await super.getApiCall(urlRequest, request.queryParams);\r\n\r\n return result;\r\n }\r\n\r\n async getDiningCredits(request) {\r\n const urlRequest = `${this.url}/${request.resId}/dining-credits`;\r\n\r\n let result = await super.getApiCall(urlRequest, request.queryParams);\r\n\r\n return result;\r\n }\r\n}\r\n","/*\r\nAs detailed on this user story: https://dev.azure.com/gwdigital/GW%20Digital%20Project/_workitems/edit/55167/\r\nduring the removal of the 'moment' date library it was chosen to have\r\nthis file be the only place where 'moment' would be allowed to be imported or mentioned.\r\n*/\r\nimport moment from 'moment';\r\nimport {\r\n DateRangePicker,\r\n DayPicker,\r\n DayPickerRangeController,\r\n DayPickerSingleDateController,\r\n SingleDatePicker,\r\n toISODateString\r\n} from 'react-dates';\r\nimport {\r\n ANCHOR_LEFT,\r\n END_DATE,\r\n HORIZONTAL_ORIENTATION,\r\n START_DATE,\r\n VERTICAL_ORIENTATION,\r\n VERTICAL_SCROLLABLE\r\n} from 'react-dates/constants';\r\nimport { GwDatesWrapper } from './gwDatesWrapper';\r\n\r\nexport {\r\n ANCHOR_LEFT as GW_ANCHOR_LEFT,\r\n END_DATE as GW_END_DATE,\r\n HORIZONTAL_ORIENTATION as GW_HORIZONTAL_ORIENTATION, START_DATE as GW_START_DATE, VERTICAL_ORIENTATION as GW_VERTICAL_ORIENTATION,\r\n VERTICAL_SCROLLABLE as GW_VERTICAL_SCROLLABLE\r\n};\r\n\r\n// Check to see if the input provided is 'moment' object\r\nconst isMoment = inputData => {\r\n return inputData instanceof moment;\r\n};\r\n\r\nconst formatStr = GwDatesWrapper.gwDateFromat;\r\n\r\n// Helper to convert 'moment' object values into standard string dates.\r\n// Input can be an object, an array, or a single value. It would recurse\r\n// through all entries to convert the entire input (all indeces of array\r\n// and all properties of an Object)\r\nconst convertMomentToDates = inputData => {\r\n try {\r\n // Return null/undefined if input is null/undefined\r\n if (!inputData) return inputData;\r\n\r\n // Check type of input data\r\n if (isMoment(inputData)) {\r\n // Single moment object\r\n return GwDatesWrapper.format(inputData, formatStr);\r\n } else if (Array.isArray(inputData)) {\r\n // Array of potential moment objects\r\n return inputData.map(val => convertMomentToDates(val));\r\n } else if ({}.constructor === inputData.constructor) {\r\n // JSON with potential moment object properties\r\n return Object.entries(inputData).reduce((acc, [key, val]) => {\r\n acc[key] = convertMomentToDates(val);\r\n return acc;\r\n }, {});\r\n } else return inputData;\r\n } catch (ex) {\r\n console.error('convertMomentToDates', ex);\r\n return inputData;\r\n }\r\n};\r\n\r\n// Helper to convert standard string dates into 'moment' object values.\r\n// Input can be an object, an array, or a single value. It would recurse\r\n// through all entries to convert the entire input (all indeces of array\r\n// and all properties of an Object)\r\nconst convertDatesToMoment = inputData => {\r\n // Check to see if the input provided is a string in standard date format\r\n const isDateStr = inputStr => {\r\n // input needs to be of string type\r\n if (typeof inputStr !== 'string') return false;\r\n // input needs to have the same length as format string\r\n inputStr = inputStr.substring(0, formatStr.length);\r\n // check input against the default/standard date format\r\n const formatPieces = formatStr.split('-');\r\n const inputPieces = inputStr.split('-');\r\n\r\n // check if equal count of pieces based on separator\r\n if (formatPieces.length !== inputPieces.length) return false;\r\n // length of each piece\r\n for (let i = 0; i < formatPieces.length; i++) {\r\n // if any piece is not same, then its not in desired format\r\n if (formatPieces[i].length !== inputPieces[i].length) {\r\n return false;\r\n }\r\n }\r\n // if same count of pieces and all pieces are same length\r\n // means input string is in standard date format\r\n return true;\r\n };\r\n\r\n try {\r\n // Return null/undefined if input is null/undefined\r\n if (!inputData) return inputData;\r\n\r\n // Check type of input data\r\n if (isMoment(inputData)) {\r\n // moment object\r\n return inputData; // Nothing to do - already a moment\r\n } else if (isDateStr(inputData)) {\r\n // Single string representing a date\r\n return moment(inputData);\r\n } else if (Array.isArray(inputData)) {\r\n // Array of dates\r\n return inputData.map(val => convertDatesToMoment(val));\r\n } else if ({}.constructor === inputData.constructor) {\r\n // JSON with date properties\r\n return Object.entries(inputData).reduce((acc, [key, val]) => {\r\n acc[key] = convertDatesToMoment(val);\r\n return acc;\r\n }, {});\r\n } else return inputData;\r\n } catch (ex) {\r\n console.error('convertDatesToMoment', ex);\r\n return inputData;\r\n }\r\n};\r\n\r\n// Change handlers (functions) of given set of props so that outer components can send\r\n// in dates in string format, but downstream 'react-dates' component will\r\n// receive 'moment' objects; also outer component can return dates in string format\r\n// but the converted function from this helper will send 'moment' objects to the\r\n// 'react-dates' component.\r\nconst changeHandlersForMoments = (propsWithHandlers, nameOfHandlersToReplace) => {\r\n const convertedProps = { ...propsWithHandlers };\r\n nameOfHandlersToReplace.forEach(name => {\r\n const origHandler = propsWithHandlers[name]; // Original handler that will return date in string format\r\n if (origHandler) {\r\n const newHandler = (param1, param2, param3, param4, param5) => {\r\n // New handler capable of returning moment\r\n // convert input parameter to dateStr (in case of any moment) and capture output from original handler\r\n const dateStrOutput = origHandler(\r\n convertMomentToDates(param1),\r\n convertMomentToDates(param2),\r\n convertMomentToDates(param3),\r\n convertMomentToDates(param4),\r\n convertMomentToDates(param5)\r\n );\r\n // convert output of original handler (which is expected to be a dateStr) into moment and return that\r\n const convertedOutput = convertDatesToMoment(dateStrOutput);\r\n return convertedOutput;\r\n };\r\n // update props with new hanlder (that receives moment but calls original handler with dateStr)\r\n convertedProps[name] = newHandler;\r\n }\r\n });\r\n return convertedProps;\r\n};\r\n\r\n// ******************************************************************************************\r\n// *** Generic wrapper component that is re-used for creating specific wrapper components ***\r\n// *** in order to provide moment-agnostic versions of 'reac-dates' components ***\r\n// ******************************************************************************************\r\n// Documentation used for names of 'react-dates' library props and handlers in this wrapper component:\r\n// DateRangePicker --> https://github.com/react-dates/react-dates?tab=readme-ov-file#daterangepicker\r\n// GWDayPickerRangeController --> https://github.com/react-dates/react-dates?tab=readme-ov-file#daypickerrangecontroller\r\n// SingleDatePicker --> https://github.com/react-dates/react-dates?tab=readme-ov-file#singledatepicker\r\n// DayPicker --> https://github.com/react-dates/react-dates/blob/master/src/components/DayPicker.jsx\r\n// DayPickerSingleDateController --> https://github.com/react-dates/react-dates/blob/master/src/components/DayPickerSingleDateController.jsx\r\n// ******************************************************************************************\r\n// Additionally, in future, we'll have to find substitutes for these components to remove dependency on\r\n// 'react-dates' library in order to eliminate use of 'moment' from code base. The idea would be to find\r\n// substitutes that can produce current UI/output, using same/similar input (props & hanlders), have no\r\n// reliance on 'moment' library and also provide better run-time chunk size (good support for tree shaking\r\n// and lazy loading).\r\n//\r\n// To get things started, here is an article that talks about a few other date pickers:\r\n// --> https://blog.logrocket.com/top-react-date-pickers/#comparing-date-pickers\r\n// ******************************************************************************************\r\n\r\nconst GWReactDatesWrapper = ({ ComponentToWrap, ...props }) => {\r\n const propsNeedingMoment = ['minDate', 'maxDate', 'startDate', 'endDate', 'date', 'focusedDate'];\r\n const handlersForDateConvert = [\r\n 'onDateChange',\r\n 'onDatesChange',\r\n 'onPrevMonthClick',\r\n 'onNextMonthClick',\r\n 'onClose',\r\n 'isDayBlocked',\r\n 'isOutsideRange',\r\n 'isDayHighlighted',\r\n 'initialVisibleMonth',\r\n 'onFocusChange'\r\n ];\r\n // handlers not included in above 'handlersForDateConvert' list\r\n // --> renderCalendarInfo, onOutsideClick, renderCalendarDay, renderDayContents, renderMonthText, renderMonthElement\r\n\r\n // Change inputs of given set of props so that outer components can send\r\n // in dates in string format, but downstream 'react-dates' compoent will\r\n // receive 'moment' objects.\r\n\r\n propsNeedingMoment.forEach(name => {\r\n if (props[name]) {\r\n props[name] = convertDatesToMoment(props[name]);\r\n }\r\n });\r\n\r\n props = changeHandlersForMoments(props, handlersForDateConvert);\r\n\r\n return <ComponentToWrap {...props} />;\r\n};\r\n\r\nexport const GWRDateRangePicker = ({ ...props }) => {\r\n return <GWReactDatesWrapper ComponentToWrap={DateRangePicker} {...props} />;\r\n};\r\n\r\nexport const GWDayPickerRangeController = ({ ...props }) => {\r\n return <GWReactDatesWrapper ComponentToWrap={DayPickerRangeController} {...props} />;\r\n};\r\n\r\nexport const GWSingleDatePicker = ({ ...props }) => {\r\n return <GWReactDatesWrapper ComponentToWrap={SingleDatePicker} {...props} />;\r\n};\r\n\r\nexport const GWDayPicker = ({ ...props }) => {\r\n return <GWReactDatesWrapper ComponentToWrap={DayPicker} {...props} />;\r\n};\r\n\r\nexport const GWDayPickerSingleDateController = ({ ...props }) => {\r\n return <GWReactDatesWrapper ComponentToWrap={DayPickerSingleDateController} {...props} />;\r\n};\r\n\r\n// Helper functions based on 'react-dates' code from:\r\n\r\n// https://github.com/react-dates/react-dates/blob/be4ef1e52f012a79128021b8f92fdcbcad6cd168/src/utils/isInclusivelyAfterDay.js\r\nexport const gwIsInclusivelyAfterDay = (dt1, dt2) => {\r\n return GwDatesWrapper.isValid(dt1) && GwDatesWrapper.isValid(dt2) && !GwDatesWrapper.isBefore(dt1, dt2);\r\n};\r\n\r\nexport const gwToISODateString = date => {\r\n return toISODateString(date);\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport styled from 'styled-components';\r\nimport Box from './Box';\r\nimport Text from './Text';\r\nimport CheckIcon from './icons/Check';\r\nimport theme from './themes/theme';\r\n\r\nconst Checkbox = props => {\r\n const {\r\n redesignWidth,\r\n redesignHeight,\r\n disabled,\r\n size,\r\n id,\r\n isRedesign,\r\n tabIndex,\r\n checked,\r\n secondary,\r\n valign,\r\n ...inputProps\r\n } = props;\r\n\r\n return (\r\n <CheckBoxWrapper disabled={disabled} valign={valign} redesignWidth={redesignWidth} redesignHeight={redesignHeight}>\r\n {isRedesign ? (\r\n <RedesignInput\r\n redesignWidth={redesignWidth}\r\n redesignHeight={redesignHeight}\r\n disabled={disabled}\r\n checked={checked}\r\n secondary={secondary}>\r\n <input id={id} type=\"checkbox\" checked={checked} {...inputProps} />\r\n <CheckIcon size={16} color={theme.colors.pureWhite[0]}></CheckIcon>\r\n </RedesignInput>\r\n ) : (\r\n <input type=\"checkbox\" checked={checked} id={id} {...inputProps} />\r\n )}\r\n <Text name=\"boxChecked\" size={size} data-name=\"checked\" />\r\n <Text name=\"boxEmpty\" size={size} data-name=\"empty\" />\r\n </CheckBoxWrapper>\r\n );\r\n};\r\n\r\nconst RedesignInput = styled('div')`\r\n display: inline-block;\r\n width: ${({ redesignWidth }) => (redesignWidth ? redesignWidth : '16')}px;\r\n height: ${({ redesignHeight }) => (redesignHeight ? redesignHeight : '16')}px;\r\n border-radius: 2px;\r\n position: relative;\r\n vertical-align: 'top';\r\n border: 1px solid ${theme.colors.deepForestGreen[100]};\r\n background-color: ${({ checked, secondary }) =>\r\n checked\r\n ? secondary\r\n ? theme.colors.preciousStoneBlue[100]\r\n : theme.colors.successGreen\r\n : theme.colors.pureWhite[0]};\r\n\r\n svg {\r\n display: none;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n pointer-events: none;\r\n }\r\n\r\n input {\r\n opacity: 0;\r\n margin: 0;\r\n width: 100%;\r\n height: 100%;\r\n\r\n &:checked ~ svg {\r\n display: block;\r\n }\r\n }\r\n`;\r\n\r\nconst CheckBoxWrapper = styled(Box)`\r\n width: ${({ redesignWidth }) => (redesignWidth ? redesignWidth : '16')}px;\r\n height: ${({ redesignHeight }) => (redesignHeight ? redesignHeight : '16')}px;\r\n display: inline-block;\r\n position: relative;\r\n vertical-align: ${props => (props.valign ? props.valign : 'top')};\r\n margin-top: ${props => (props.valign ? '0' : '-2px')};\r\n cursor: ${({ disabled }) => (disabled ? null : 'pointer')};\r\n color: ${props => (props.disabled ? props.theme.colors.deepForestGreen[20] : props.theme.colors.deepForestGreen[50])};\r\n svg[data-name='checked'] {\r\n display: none;\r\n }\r\n > input:checked {\r\n & ~ svg[data-name='checked'] {\r\n display: inline-block;\r\n color: ${props =>\r\n props.disabled ? props.theme.colors.deepForestGreen[20] : props.theme.colors.deepForestGreen[50]};\r\n }\r\n & ~ svg[data-name='empty'] {\r\n display: none;\r\n }\r\n }\r\n`;\r\n\r\nCheckBoxWrapper.defaultProps = { theme };\r\n\r\nCheckbox.displayName = 'Checkbox';\r\n\r\nCheckbox.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n size: PropTypes.number,\r\n defaultChecked: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n onChange: PropTypes.func,\r\n theme: PropTypes.object,\r\n redesignHeight: PropTypes.number,\r\n redesignWidth: PropTypes.number\r\n};\r\n\r\nCheckbox.defaultProps = {\r\n size: 20,\r\n disabled: false,\r\n onChange: () => {},\r\n theme: theme\r\n};\r\n\r\nexport default Checkbox;\r\n","// Offer Actions\r\n\r\nimport { getNormalizedCode } from '../../../utilities/availabilityUtils';\r\nimport offerActionTypes from './offer.types';\r\n\r\nexport const addOfferCode = code => ({\r\n type: offerActionTypes.ADD_OFFER_CODE,\r\n code: getNormalizedCode(code)\r\n});\r\n\r\nexport const removeOfferCode = () => ({ type: offerActionTypes.REMOVE_OFFER_CODE });\r\nexport const setOfferCodeDescription = description => dispatch => {\r\n dispatch({\r\n type: offerActionTypes.SET_OFFER_CODE_DESCRIPTION,\r\n description: description\r\n });\r\n};\r\nexport const addActiveOffer = offerData => dispatch => {\r\n dispatch({\r\n type: offerActionTypes.ADD_OFFER_ACTIVE_TYPE,\r\n offerData: offerData\r\n });\r\n};\r\nexport const addEmailActiveOffer = offerData => dispatch => {\r\n dispatch({\r\n type: offerActionTypes.ADD_OFFER_EMAIL_ACTIVE_TYPE,\r\n offerData: offerData\r\n });\r\n};\r\nexport const removeActiveOffer = offerData => dispatch => {\r\n dispatch({\r\n type: offerActionTypes.REMOVE_OFFER_ACTIVE_TYPE,\r\n offerData: offerData\r\n });\r\n};\r\n\r\nexport const verifyActiveOffers = offerData => dispatch => {\r\n dispatch({\r\n type: offerActionTypes.VERIFY_ACTIVE_OFFERS,\r\n offerData: offerData\r\n });\r\n};\r\n","/**\r\n * Pushes current value into the accumulator and returns the accumulator to be\r\n * used in a reduce function.\r\n *\r\n * @param {Array} accumulator Array of items\r\n * @param {number} currentValue Array key\r\n * @returns {Array} Accumulator with new item\r\n */\r\nfunction transformationFn(accumulator, currentValue) {\r\n accumulator.push(currentValue);\r\n return accumulator;\r\n}\r\n\r\n/**\r\n * Generates an array based on the length and transformation passed, if no\r\n * transformastion is passed to the array it will return an array with the\r\n * array length keys as items.\r\n *\r\n * @export\r\n * @param {number} [arrayLength=0]\r\n * @param {function} [transformation=transformationFn]\r\n * @returns {undefined|Array} Undefined if called without arguments otherwise,\r\n * returns an array with the umber of items provided.\r\n */\r\nfunction generateArray(arrayLength = 0, transformation = transformationFn) {\r\n if (!arrayLength) return [];\r\n return [...Array(arrayLength).keys()].reduce(transformation, []);\r\n}\r\n\r\nexport default generateArray;\r\n","import React from 'react'\n\nconst CheckIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='-2.5 -6 21 21'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M6.2,7.95 L1.75,3.25 C1.27993197,3.05340136 0.946598639,3.05340136 0.75,3.25 C0.553401361,3.44659864 0.553401361,3.77993197 0.75,4.25 L6.2,10.05 L14.75,1.25 C14.8864098,0.719743131 14.8864098,0.386409798 14.75,0.25 C14.6135902,0.113590202 14.2802569,0.113590202 13.75,0.25 L6.2,7.95 Z' />\n </svg>\n)\n\nCheckIcon.displayName = 'CheckIcon'\n\nCheckIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CheckIcon","import { DATE_FORMATS } from '../../../utilities/constants';\r\nimport { GwDatesWrapper } from '../../_internal_date_/gwDatesWrapper';\r\n\r\nconst days = (date_1, date_2) => {\r\n let difference = date_1.getTime() - date_2.getTime();\r\n let TotalDays = Math.ceil(difference / (1000 * 3600 * 24));\r\n return TotalDays;\r\n};\r\n\r\nexport const addResortLocationToOffer = (resortLocation, offer) => ({ resortLocation, ...offer });\r\n\r\nexport const formatOffer = (offer, isCheckBoxActive, checkIn, checkOut) => {\r\n // CREATE TEMP FORMAT\r\n const offerObject = {\r\n ...offer\r\n };\r\n // ADD CHECKBOX\r\n offerObject.checkBoxActive = isCheckBoxActive;\r\n\r\n const checkInDate = GwDatesWrapper.format(checkIn, DATE_FORMATS.default);\r\n const checkOutDate = GwDatesWrapper.format(checkOut, DATE_FORMATS.default);\r\n const offerStayStart = GwDatesWrapper.format(offer.stayStartDate, DATE_FORMATS.default);\r\n const offerStayEnd = GwDatesWrapper.format(offer.stayEndDate, DATE_FORMATS.default);\r\n\r\n offerObject.searchIsWithinOfferDates =\r\n GwDatesWrapper.isSameOrAfter(checkInDate, offerStayStart) &&\r\n GwDatesWrapper.isSameOrBefore(checkOutDate, offerStayEnd);\r\n\r\n // ADD EXPIRATION\r\n const todayDate = new Date();\r\n const compareDate = new Date(offer.bookByDate);\r\n const isExpiring = days(compareDate, todayDate);\r\n offerObject.expiringSoon = isExpiring < 14 ? true : false;\r\n\r\n return offerObject;\r\n};\r\n\r\nexport const nonExpiredOrderByDateOffers = (offers, isCheckBoxActive, checkIn, checkOut) => {\r\n const formattedOffers = offers.map(offer => formatOffer(offer, isCheckBoxActive, checkIn, checkOut));\r\n let nonExpiredOffers = [];\r\n let notEligibleOffers = [];\r\n const todayDate = GwDatesWrapper.today();\r\n\r\n formattedOffers.forEach(offer => {\r\n const stayEndDate = GwDatesWrapper.format(offer.stayEndDate, DATE_FORMATS.default);\r\n if (GwDatesWrapper.isSameOrAfter(stayEndDate, todayDate) && offer.searchIsWithinOfferDates) {\r\n nonExpiredOffers.push(offer);\r\n } else notEligibleOffers.push(offer);\r\n });\r\n return nonExpiredOffers\r\n .sort(function(a, b) {\r\n return new Date(a.bookByDate) - new Date(b.bookByDate);\r\n })\r\n .concat(notEligibleOffers);\r\n};\r\n","import { API_URLS, getApiUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the User Account endpoints on Tioga\r\n *\r\n * @class UserAccountApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class UserAccountApiClientTioga extends GWRApiClient {\r\n constructor(version = '', token = '') {\r\n let apiVersion = version !== '' ? version : `v1`;\r\n\r\n const urlAux = getApiUrl(API_URLS.REACT_APP_USERACCOUNT_ENDPOINT_TIOGA, apiVersion);\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * @function\r\n * Get user informstion based on token\r\n */\r\n async getUserUpdatedPointsAndOffers() {\r\n const urlRequest = `${this.url}/loyalty/balance`;\r\n let request = await super.getApiCallAuth(urlRequest);\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Get user point history information based on token and page\r\n * @param {requestObject: {page: number}} requestObject\r\n */\r\n async fetchUserPointsHistory(requestObject) {\r\n const urlRequest = `${this.url}/loyalty/history`;\r\n let request = await super.getApiCallAuth(urlRequest, requestObject?.queryParams);\r\n return request;\r\n }\r\n\r\n /**\r\n * @function\r\n * Update user settings for my profile and my preferences pages\r\n * @param requestObject\r\n */\r\n async updateUserSettings(requestObject) {\r\n const urlRequest = `${this.url}`;\r\n let request = await super.patchApiCallAuth(urlRequest, requestObject);\r\n return request;\r\n }\r\n}\r\n","//DINING CREDIT SECTION TITLE\r\nexport const LEARN_MORE = 'Learn More';\r\nexport const BUY_DINING_CREDITS_NOW =\r\n 'Buy dining credits now to save at all Great Wolf Lodge Restaurants during your stay.';\r\n\r\n//DINING CREDIT LEARN MORE MODAL\r\nexport const INFO_TEXT =\r\n 'Explore the restaurant menus in our app. You can Dine-In at the restaurants or mobile order through our app.';\r\nexport const RESTAURANTS = 'Restaurants Where You Can Use Your Dining Credits:';\r\nexport const INFO_LIST = [\r\n 'Deal is only available for purchase before your stay',\r\n 'Dining credits may be used anytime during your stay',\r\n 'Credit is per room, per stay, and unused credit cannot be rolled over into a future stay'\r\n];\r\nexport const DINING_CREDIT_PACKAGE_TITLE = `$<ALLOWANCE> dining credits for $<AMOUNT>`;\r\n\r\n//DINING PAGE TITLE\r\nexport const DINING_TITLE = 'Save Later When You Buy Today!';\r\nexport const DINING_STAR_SUBTITLE = 'Only Available Before Your Arrival';\r\nexport const DINING_TITLE_UFF_FLOW = 'Take Advantage Of These Bonus Offers';\r\nexport const DINING_SUBTITLE_UFF_FLOW =\r\n 'Add to your Ultimate Food & Fun Package with additional dining offers and credit deals.';\r\n\r\n//DINING CREDIT CARD\r\nexport const SAVE_TAG_TEXT = 'Save $<SAVINGS>';\r\n","import React from 'react'\n\nconst CheckedIconIcon = ({\n size,\n color,\n ...props\n}) => (\n <svg\n {...props}\n viewBox='0 0 32 32'\n width={size}\n height={size}\n fill={color}\n >\n <path d='M24.571 12.49l-9.43 9.092a1.544 1.544 0 0 1-2.113 0L7.466 16.41a1.452 1.452 0 0 1-.043-2.091 1.547 1.547 0 0 1 2.147-.042l4.485 4.185 8.399-8.07a1.545 1.545 0 0 1 2.108.046 1.45 1.45 0 0 1 .022 2.054zM14.58.065a15.999 15.999 0 1 0 14.917 24.528 15.997 15.997 0 0 0-2.179-19.902A15.954 15.954 0 0 0 14.58.065z' />\n </svg>\n)\n\nCheckedIconIcon.displayName = 'CheckedIconIcon'\n\nCheckedIconIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CheckedIconIcon","import React from 'react';\r\nimport LoadingSpinnerIcon from '../ui-kit/LoadingSpinner';\r\nimport theme from '../ui-kit/themes/theme';\r\nimport Modal from './Modal';\r\n\r\nconst ModalSpinner = props => (\r\n <Modal {...props}>\r\n <LoadingSpinnerIcon size={80} color={theme.colors.woodpeckerRed[100]} />\r\n </Modal>\r\n);\r\n\r\nexport default ModalSpinner;\r\n","import uuidv4 from 'uuid/v4';\r\n\r\nexport const getBrowserId = () => {\r\n let browserId = localStorage.getItem('browserId');\r\n if (!browserId) {\r\n const newUuid = uuidv4();\r\n localStorage.setItem('browserId', newUuid);\r\n browserId = newUuid;\r\n }\r\n return browserId;\r\n};\r\n\r\nexport const isInternetExplorer = () => {\r\n return navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0;\r\n};\r\n","// Get cart location\r\nexport const getCartResortLocation = state => state.cartResortLocation;\r\n\r\n// Get expired cart\r\nexport const getExpiredCart = state => state.expiredCart;\r\n\r\n// Get cart last visited step\r\nexport const getCartLastVisitedStep = state => state.cartLastVisitedStep;\r\n","import styled, { css } from 'styled-components';\r\nimport { space } from 'styled-system';\r\n\r\nimport { Box, Flex } from '../../../ui-kit';\r\nimport ArrowDownThinIcon from '../../../ui-kit/icons/ArrowDownThin';\r\nimport theme, { mediaQueries } from '../../../ui-kit/themes/theme';\r\n\r\nexport const Container = styled(Box)`\r\n font-family: ${theme.fontSecondary};\r\n\r\n ${space}\r\n ${mediaQueries.lg} {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nexport const Content = styled(Box)`\r\n ${({ isCartVariation }) => {\r\n if (!isCartVariation) {\r\n return css`\r\n border: none;\r\n padding: 0px ${theme.space[3]}px 0px;\r\n border-radius: 0px 0px 20px 20px;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const Header = styled(Box)`\r\n flex: 1;\r\n`;\r\n\r\nexport const HeaderContainer = styled(Flex)`\r\n background-color: ${theme.colors.kiddiePoolBlue[20]};\r\n padding: 16px;\r\n border-radius: 0px;\r\n border: 1px solid ${theme.colors.kiddiePoolBlue[20]};\r\n align-items: center;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n\r\n ${mediaQueries.lg} {\r\n border-radius: 20px 20px 0px 0px;\r\n }\r\n`;\r\n\r\nexport const SummaryIcon = styled(ArrowDownThinIcon)`\r\n transition-duration: 0.4s;\r\n transition-property: transform;\r\n transform: rotate(${props => props.rotate || '0deg'});\r\n height: 12px;\r\n width: 20px;\r\n\r\n ${mediaQueries.lg} {\r\n height: 7px;\r\n width: 12px;\r\n }\r\n`;\r\n","import React, { createContext, useState, useContext } from 'react';\r\nimport { Container } from './styles';\r\nimport { SummaryAccordionContent } from './SummaryAccordionContent';\r\nimport { SummaryAccordionHeader } from './SummaryAccordionHeader';\r\n\r\nconst AccordionContext = createContext();\r\n\r\nexport const useAccordionContext = () => {\r\n const context = useContext(AccordionContext);\r\n\r\n if (!context) {\r\n throw new Error('Child components of SummaryAccordion cannot be rendered outside the SummaryAccordion Component!');\r\n }\r\n\r\n return context;\r\n};\r\n\r\nexport const SummaryAccordion = ({ shouldStartOpened, children, ...restProps }) => {\r\n const [expanded, setExpanded] = useState(shouldStartOpened);\r\n\r\n return (\r\n <AccordionContext.Provider value={{ expanded, setExpanded }}>\r\n <Container {...restProps}>{children}</Container>\r\n </AccordionContext.Provider>\r\n );\r\n};\r\n\r\nSummaryAccordion.Content = SummaryAccordionContent;\r\n\r\nSummaryAccordion.Header = SummaryAccordionHeader;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { Content } from './styles';\r\nimport { useAccordionContext } from './SummaryAccordion';\r\n\r\nexport const SummaryAccordionContent = ({ children, variation, ...restProps }) => {\r\n const { expanded } = useAccordionContext();\r\n return (\r\n <Content {...restProps} expanded={expanded} variation={variation}>\r\n {children({ expanded: expanded })}\r\n </Content>\r\n );\r\n};\r\n\r\nSummaryAccordionContent.propTypes = {\r\n children: PropTypes.func.isRequired\r\n};\r\n","import React from 'react';\r\n\r\nimport { Box } from '../../../ui-kit';\r\nimport { Header, HeaderContainer, SummaryIcon } from './styles';\r\nimport { useAccordionContext } from './SummaryAccordion';\r\n\r\nexport const SummaryAccordionHeader = ({ children, ...restProps }) => {\r\n const { expanded, setExpanded } = useAccordionContext();\r\n\r\n return (\r\n <HeaderContainer>\r\n <Header {...restProps}>{children}</Header>\r\n <Box onClick={() => setExpanded(!expanded)}>\r\n <SummaryIcon rotate={expanded ? '-180deg' : '0deg'} data-testid=\"`SummaryAccordion:expand-icon`\" />\r\n </Box>\r\n </HeaderContainer>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Flex, Text } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { StyledWave } from '../styles';\r\n\r\nconst CartHeader = ({ subTotal = 0 }) => {\r\n return (\r\n <>\r\n {/* Content Title and Subtotal */}\r\n <Flex justifyContent=\"space-between\" background={theme.colors.kiddiePoolBlue[20]} pl={7} pt={7} pr={7} pb={3}>\r\n <Text color=\"deepLakeBlue.100\" fontSize={[1, 1, 1, 1, 7]} fontWeight=\"bold\" lineHeight={[18, 18, 18, 18, 24]}>\r\n {COPY.BOOKING_CART_TITLE}\r\n </Text>\r\n <Flex alignItems=\"baseline\">\r\n <Text\r\n color=\"deepLakeBlue.100\"\r\n fontSize={[1, 1, 1, 1, 7]}\r\n fontWeight=\"bold\"\r\n lineHeight={[18, 18, 18, 18, 24]}\r\n mr={1}>\r\n {subtotalCopy(subTotal)}\r\n </Text>\r\n <Text color=\"deepLakeBlue.100\" fontSize={[0]} fontWeight=\"medium\" lineHeight={[18]}>\r\n {COPY.BOOKING_CART_SUBTOTAL}\r\n </Text>\r\n </Flex>\r\n </Flex>\r\n {/* Wave */}\r\n <StyledWave />\r\n </>\r\n );\r\n};\r\n\r\nexport default CartHeader;\r\n\r\nfunction subtotalCopy(subTotal) {\r\n // Check if subtotal has decimals and decimals are not 0\r\n const subTotalHasDecimals = subTotal % 1 !== 0 && subTotal % 1 !== 0.0;\r\n\r\n // if decimals is true return the subtotal with 2 decimal places\r\n if (subTotalHasDecimals) {\r\n return `$${subTotal}`;\r\n }\r\n // if it has no decimals or decimals are 0 return the subtotal with no decimal places\r\n return `$${Math.floor(subTotal)}`;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport routes from '../../../../../routes';\r\nimport { emitEventsByName, EVENTS_DICTIONARY } from '../../../../../utilities/customEventsHelpers';\r\nimport { Box, Button } from '../../../../ui-kit';\r\nimport Scrollable from '../../../../ui-kit/Scrollable';\r\nimport theme from '../../../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceString } from '../../../../utilities/copyFunctions';\r\nimport { handleTotal } from '../../../../utilities/utils';\r\nimport * as COPY from '../utilities/copy';\r\nimport CartHeader from './Content/CartHeader';\r\nimport { CartModalButtonsContainer, Overlay, OverlayContainer, ScrollContainer } from './styles';\r\n\r\nconst propTypes = {\r\n toggleOpen: PropTypes.func,\r\n cartHasPackages: PropTypes.bool,\r\n overlayVisible: PropTypes.bool,\r\n variation: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n toggleOpen: () => {},\r\n cartHasPackages: false,\r\n overlayVisible: false,\r\n variation: null\r\n};\r\n\r\nconst CartOverlay = ({\r\n toggleOpen,\r\n cartHasPackages,\r\n overlayVisible,\r\n isCartVariation,\r\n children,\r\n onPlanPage,\r\n setIsCartOpenClose,\r\n isCartOpenClose,\r\n isCartExpired,\r\n cartLastVisitedStep,\r\n ...otherProps\r\n}) => {\r\n const {\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n setExcedent,\r\n isUserAuthenticated,\r\n summaryTotal,\r\n selectedSuite,\r\n pushToLastVisitedStep\r\n } = otherProps;\r\n const hasDiningPackages = currentSelectedPackages?.some(pkg => pkg.packageType?.includes('dining'));\r\n // Dynamic calculation os scroll height\r\n const [contentScrollHeight, setContentScrollHeight] = useState(0);\r\n const [continueButtonText, setContinueButtonText] = useState(\r\n getContinueTextOutsidePlan(cartLastVisitedStep, hasDiningPackages)\r\n );\r\n const cartHeader = useRef(null);\r\n const cartFooter = useRef(null);\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.md})`\r\n });\r\n\r\n const navigateToNextStep = () => {\r\n emitEventsByName(EVENTS_DICTIONARY.FLOW_TRIGGER_NEXT_STEP);\r\n };\r\n\r\n const getContinueButtonText = stepTextEvent => {\r\n const stepText = stepTextEvent?.detail?.text ?? null;\r\n if (stepTextEvent) {\r\n setContinueButtonText(editCopyByReplaceString(COPY.CONTINUE_TO_STEP, stepText, '<STEP>'));\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n overlayVisible && setIsCartOpenClose(true);\r\n }, [setIsCartOpenClose, overlayVisible]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (isCartOpenClose && overlayVisible) {\r\n setIsCartOpenClose(false);\r\n }\r\n };\r\n }, [setIsCartOpenClose, isCartOpenClose, overlayVisible]);\r\n\r\n useEffect(() => {\r\n if (cartHeader.current && cartFooter.current) {\r\n const header = document.querySelector('.header-container__inner');\r\n const headerSize = header ? header.clientHeight : isMobile ? 58 : 68;\r\n\r\n setContentScrollHeight(\r\n vhToPixels(100) - cartHeader.current.clientHeight - cartFooter.current.clientHeight - headerSize\r\n );\r\n }\r\n\r\n if (cartHeader.current && !cartFooter.current) {\r\n setContentScrollHeight(vhToPixels(100) - cartHeader.current.clientHeight);\r\n }\r\n }, [isMobile, overlayVisible]);\r\n\r\n useEffect(() => {\r\n window.addEventListener(EVENTS_DICTIONARY.FLOW_NEXT_STEP_TEXT, e => getContinueButtonText(e));\r\n\r\n return () => {\r\n window.removeEventListener(EVENTS_DICTIONARY.FLOW_NEXT_STEP_TEXT, e => getContinueButtonText(e));\r\n };\r\n }, []);\r\n\r\n const subTotal = isUserAuthenticated\r\n ? handleTotal(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n setExcedent\r\n ).toFixed(2)\r\n : summaryTotal?.toFixed(2);\r\n\r\n const continueBooking = () => {\r\n toggleOpen();\r\n if (onPlanPage) {\r\n navigateToNextStep();\r\n } else {\r\n pushToLastVisitedStep();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isCartVariation ? (\r\n <Overlay onClick={toggleOpen} isCartVariation={isCartVariation} overlayVisible={overlayVisible}></Overlay>\r\n ) : null}\r\n\r\n <OverlayContainer\r\n isDevelopment={process.env.NODE_ENV === 'development'}\r\n isCartVariation={isCartVariation}\r\n isCartEmpty={!cartHasPackages}\r\n overlayVisible={overlayVisible}>\r\n {isCartVariation ? (\r\n <Box ref={cartHeader}>\r\n <CartHeader subTotal={!selectedSuite || Object.keys(selectedSuite).length === 0 ? 0 : subTotal} />\r\n </Box>\r\n ) : null}\r\n\r\n <ScrollContainer isCartVariation={isCartVariation} onPlanPage={onPlanPage} isCartEmpty={!cartHasPackages}>\r\n <Scrollable\r\n maxHeight={isCartVariation ? contentScrollHeight : null}\r\n scrollColor={theme.colors.successGreen}\r\n showTrack\r\n trackColor={theme.colors.snowMountainGrey[50]}\r\n hideScrollWhileScrolling={!isCartVariation}>\r\n {children}\r\n </Scrollable>\r\n </ScrollContainer>\r\n {(isCartVariation && !onPlanPage && cartHasPackages && !isCartExpired) ||\r\n (isCartVariation && onPlanPage && cartHasPackages) ? (\r\n <CartModalButtonsContainer py={7} px={[4]} ref={cartFooter}>\r\n <Button onClick={continueBooking} fluid variant=\"book\">\r\n {continueButtonText}\r\n </Button>\r\n </CartModalButtonsContainer>\r\n ) : null}\r\n </OverlayContainer>\r\n </>\r\n );\r\n};\r\n\r\nCartOverlay.propTypes = propTypes;\r\nCartOverlay.defaultProps = defaultProps;\r\n\r\nexport default CartOverlay;\r\n\r\nfunction vhToPixels(vh) {\r\n return Math.round(window.innerHeight / (100 / vh));\r\n}\r\n\r\nfunction getContinueTextOutsidePlan(cartLastVisitedStep, hasDiningPackages) {\r\n if (cartLastVisitedStep === routes.plan.dining.replace(/\\/$/, '')) {\r\n if (hasDiningPackages) {\r\n return editCopyByReplaceString(COPY.CONTINUE_TO_STEP, 'Payment', '<STEP>');\r\n }\r\n return editCopyByReplaceString(COPY.CONTINUE_TO_STEP, 'Dining', '<STEP>');\r\n }\r\n\r\n if (cartLastVisitedStep === routes.plan.activities.replace(/\\/$/, '')) {\r\n return editCopyByReplaceString(COPY.CONTINUE_TO_STEP, 'Activities', '<STEP>');\r\n }\r\n\r\n if (cartLastVisitedStep === routes.plan.payment.replace(/\\/$/, '')) {\r\n return editCopyByReplaceString(COPY.CONTINUE_TO_STEP, 'Payment', '<STEP>');\r\n }\r\n\r\n return COPY.CONTINUE_BOOKING;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\nimport { TESTS_DICTIONARY, getTestValueAB } from '../../../../../../utilities/ABTesting';\r\nimport { COSTSUMMARY_TOOLTIP, ROOM_RATE_TYPE } from '../../../../../../utilities/constants';\r\nimport { Box } from '../../../../../ui-kit';\r\nimport Tooltip from '../../../../../ui-kit/Tooltip';\r\nimport QuestionIcon from '../../../../../ui-kit/icons/Question';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { handleTaxes } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\n\r\nconst SummaryTooltip = ({ isDesktop, title, children }) => {\r\n const isTablet = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.xl})`\r\n });\r\n return (\r\n <Tooltip\r\n title={title}\r\n borderColor={theme.colors.snowMountainGrey[100]}\r\n textAlign=\"left\"\r\n fontSize={theme.fontSizes[0] + 'px'}\r\n textColor=\"nightSkyBlack.100\"\r\n tooltipWidth={!isDesktop ? 210 : 290}\r\n alignment={!isDesktop || isTablet ? 'right' : 'center'}\r\n triggerComponent={({ triggerRef }) => {\r\n return (\r\n <Box ref={triggerRef}>\r\n <SummaryContent.Tooltip>{children}</SummaryContent.Tooltip>\r\n </Box>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst propTypes = {\r\n /** Flag that indicates that the reservation has additional charges */\r\n hasAdditionalCharges: PropTypes.bool.isRequired,\r\n\r\n /** Array with the taxes and fees for reservation*/\r\n taxesAndFees: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n amount: PropTypes.number,\r\n tooltip: PropTypes.string\r\n })\r\n ),\r\n\r\n /** Size for the tooltip icons */\r\n iconSize: PropTypes.number\r\n};\r\n\r\nexport const AdditionalCharges = ({\r\n hasAdditionalCharges,\r\n taxesAndFees,\r\n iconSize,\r\n roomAdjustmentTax,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n userOffers,\r\n activeOffers,\r\n numberOfNights,\r\n isParkingFeeABCDTestActive,\r\n currentParkingFeeAmount,\r\n isDesktop,\r\n rateType\r\n}) => {\r\n const shouldRenderAdditionalChargers = hasAdditionalCharges && taxesAndFees != null;\r\n\r\n if (!shouldRenderAdditionalChargers) return null;\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n\r\n let ABTestTaxesAndFees = [...taxesAndFees];\r\n if (isParkingFeeABCDTestActive) {\r\n const parkingFee = {\r\n id: 'testParkingFee' + Math.floor(Math.random()),\r\n name: 'Parking Fee',\r\n amount: currentParkingFeeAmount * numberOfNights\r\n };\r\n\r\n if (!taxesAndFees.find(i => i.name === 'Parking Fee')) ABTestTaxesAndFees.push(parkingFee);\r\n }\r\n\r\n const optimizelyDisplayResortFeeWithTotalInSuiteCardJ = getTestValueAB(\r\n TESTS_DICTIONARY.optimizelyDisplayResortFeeWithTotalInSuiteCardJ,\r\n false\r\n );\r\n\r\n const optimizelyDisplayResortFeeWithTotalInSuiteCardH = getTestValueAB(\r\n TESTS_DICTIONARY.optimizelyDisplayResortFeeWithTotalInSuiteCardH,\r\n false\r\n );\r\n\r\n const isRoomOnly = rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass;\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n\r\n return (\r\n <>\r\n <SummaryContent.Divider />\r\n <SummaryContent.Item fontSize={0} fontWeight=\"bold\">\r\n <SummaryContent.Description lineHeight=\"16px\">{COPY.ADDITIONAL_CHARGES}</SummaryContent.Description>\r\n </SummaryContent.Item>\r\n\r\n {ABTestTaxesAndFees.map(item => {\r\n let taxAmount = handleTaxes(\r\n item.amount,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n roomAdjustmentTax,\r\n userOffers,\r\n activeOffers\r\n ).toFixed(2);\r\n\r\n return (\r\n <SummaryContent.Item fontSize={0} key={item.id}>\r\n <SummaryContent.Description lineHeight=\"18px\">\r\n {item.name}\r\n {item.tooltip && (\r\n <SummaryTooltip\r\n isDesktop={isDesktop}\r\n title={\r\n (optimizelyDisplayResortFeeWithTotalInSuiteCardJ ||\r\n optimizelyDisplayResortFeeWithTotalInSuiteCardH) &&\r\n isRoomOnly &&\r\n item.name === 'Resort Fee'\r\n ? COSTSUMMARY_TOOLTIP.resortFeeJVersion\r\n : item.tooltip\r\n }\r\n ariaKey={item.name}>\r\n <QuestionIcon size={iconSize} />\r\n </SummaryTooltip>\r\n )}\r\n </SummaryContent.Description>\r\n <SummaryContent.Amount>{`$${\r\n item.name === 'Taxes' ? taxAmount : item.amount.toFixed(2)\r\n }`}</SummaryContent.Amount>\r\n </SummaryContent.Item>\r\n );\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nAdditionalCharges.propTypes = propTypes;\r\n\r\nAdditionalCharges.defaultProps = {\r\n hasAdditionalCharges: false,\r\n taxesAndFees: [],\r\n iconSize: 16\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { buildAddToCartEnhancedEcommerceObject } from '../../../../../../infrastructure/middleware/analytics/analyticsObjectBuilders';\r\nimport routes from '../../../../../../routes';\r\nimport { EVENT_CATEGORIES } from '../../../../../../utilities/constants';\r\nimport { pushEvent } from '../../../../../../utilities/dataLayerUtils';\r\nimport { Box, Flex, Text } from '../../../../../ui-kit';\r\nimport AlertSuccessIcon from '../../../../../ui-kit/icons/AlertSuccessIcon';\r\nimport CheckedIconIcon from '../../../../../ui-kit/icons/CheckedIcon';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport { CART_MODIFY_MODAL_TYPES, CART_MODIFY_MODAL_VARIATIONS } from '../../utilities/constants';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { CartCardImageContainer, CartCardTitle, CartCardsContainer, SummaryPackagesCardContainer } from '../styles';\r\nimport { editCopyByReplaceMultipleStrings, editCopyByReplaceString } from './../../../../../utilities/copyFunctions';\r\n\r\nconst propTypes = {\r\n /** Title of the suite */\r\n suiteTitle: PropTypes.string.isRequired,\r\n\r\n /** Total for the suite */\r\n suiteTotal: PropTypes.number.isRequired,\r\n\r\n /** Promo code used in the reservation */\r\n promoCode: PropTypes.string,\r\n\r\n /** Number of guests as `1 Adult, 0 Kid` or `2 Adults, 2 Kids` */\r\n guestCountText: PropTypes.string.isRequired,\r\n\r\n /** Size for the promoCode icon */\r\n iconSize: PropTypes.number,\r\n\r\n promotionalSavings: PropTypes.string\r\n};\r\n\r\nexport const Details = ({\r\n suiteTitle,\r\n suiteTotal,\r\n guestCountText,\r\n promoCode,\r\n promotionalSavings,\r\n selectedSuite,\r\n checkIn,\r\n checkOut,\r\n isCartVariation = false,\r\n openModifyCartItemModal,\r\n clearPlanPackages,\r\n clearSelectedSuite,\r\n toggleOpen,\r\n setCartReturnedPageLinkClicked,\r\n resortLocationUrlParam,\r\n onPlanPage,\r\n clearSelectedPackages,\r\n kidsAges,\r\n resortLocation,\r\n arrival,\r\n departure,\r\n adultsCount,\r\n kidsCount,\r\n shouldDisplayRoomSavings,\r\n shouldDisplayPromoValue\r\n}) => {\r\n const history = useHistory();\r\n const showNegativeSign = promotionalSavings > 0 ? '-' : '';\r\n\r\n const copyObjectDates = {\r\n '<CHECK_IN>': checkIn,\r\n '<CHECK_OUT>': checkOut\r\n };\r\n\r\n // Go to plan page, used on edit and remove suite based on last search\r\n const goToLastPlanSearch = () => {\r\n const lastSearch = JSON.parse(localStorage.getItem('GWL_LAST_SEARCH'));\r\n setTimeout(() => {\r\n window.location.href =\r\n resortLocationUrlParam +\r\n `plan?\r\n numberOfAdults=${lastSearch.numberOfAdults}&\r\n arrival=${lastSearch.arrival}&\r\n departure=${lastSearch.departure}&\r\n offerCode=${lastSearch.offerCode}&\r\n kidsAges=${lastSearch.kidsAges}&\r\n cal=${lastSearch.cal}`.replace(/\\s/g, '');\r\n }, 500);\r\n };\r\n\r\n // Handle remove suite modal\r\n const handleRemoveSuiteModal = () => {\r\n const goToPlanPageOnRemove = () => {\r\n const eventObject = buildAddToCartEnhancedEcommerceObject(\r\n EVENT_CATEGORIES.GTM.removeFromCart,\r\n kidsAges,\r\n selectedSuite,\r\n resortLocation,\r\n departure,\r\n arrival,\r\n adultsCount,\r\n kidsCount,\r\n 1,\r\n 'standard purchase - cart'\r\n );\r\n pushEvent(eventObject);\r\n\r\n toggleOpen();\r\n clearPlanPackages();\r\n clearSelectedSuite();\r\n if (!onPlanPage) {\r\n goToLastPlanSearch();\r\n }\r\n };\r\n openModifyCartItemModal(\r\n selectedSuite,\r\n CART_MODIFY_MODAL_TYPES.REMOVE,\r\n CART_MODIFY_MODAL_VARIATIONS.SUITE,\r\n goToPlanPageOnRemove\r\n );\r\n };\r\n\r\n // Handle edit suite modal and dont remove the suite\r\n const handleEditSuiteModal = () => {\r\n const goToPlanPageOnEdit = () => {\r\n setCartReturnedPageLinkClicked('plan');\r\n toggleOpen();\r\n clearSelectedPackages();\r\n goToLastPlanSearch();\r\n };\r\n openModifyCartItemModal(\r\n selectedSuite,\r\n CART_MODIFY_MODAL_TYPES.EDIT,\r\n CART_MODIFY_MODAL_VARIATIONS.SUITE,\r\n goToPlanPageOnEdit\r\n );\r\n };\r\n\r\n const goToPlanPageByTitle = () => {\r\n setCartReturnedPageLinkClicked('plan');\r\n goToLastPlanSearch();\r\n toggleOpen();\r\n };\r\n\r\n return (\r\n <>\r\n {!isCartVariation ? <SummaryContent.Divider /> : null}\r\n\r\n <SummaryPackagesCardContainer isCartVariation={isCartVariation} pt={isCartVariation ? [7] : 0}>\r\n <CartCardsContainer isCartVariation={isCartVariation}>\r\n {/* Suite Card Image */}\r\n {isCartVariation ? (\r\n <CartCardImageContainer mr={3} cover={true}>\r\n <img src={selectedSuite.mainImage} alt={selectedSuite.headline} />\r\n </CartCardImageContainer>\r\n ) : null}\r\n\r\n <Flex flexDirection=\"column\" flexGrow=\"1\">\r\n <Box>\r\n {/* Suite Card title */}\r\n <SummaryContent.Item\r\n fontSize={0}\r\n fontWeight=\"bold\"\r\n mb={isCartVariation ? 0 : null}\r\n mt={isCartVariation ? 0 : null}>\r\n {!isCartVariation ? (\r\n <SummaryContent.Description lineHeight=\"16px\">{suiteTitle}</SummaryContent.Description>\r\n ) : (\r\n <CartCardTitle\r\n fontSize={[0]}\r\n fontWeight=\"bold\"\r\n lineHeight={[18, 18, 18, 18, 16]}\r\n color=\"deepLakeBlue.100\"\r\n mb={2}\r\n onClick={goToPlanPageByTitle}>\r\n {selectedSuite.headline}\r\n </CartCardTitle>\r\n )}\r\n {!isCartVariation ? (\r\n <SummaryContent.Amount lineHeight=\"16px\" fontWeight=\"bold\">{`$${suiteTotal.toFixed(\r\n 2\r\n )}`}</SummaryContent.Amount>\r\n ) : null}\r\n </SummaryContent.Item>\r\n {/* Guest Count */}\r\n <SummaryContent.Item fontSize={0} mb={isCartVariation ? 0 : null} mt={isCartVariation ? 0 : null}>\r\n {!isCartVariation ? (\r\n <SummaryContent.Description lineHeight=\"18px\">{guestCountText}</SummaryContent.Description>\r\n ) : (\r\n <Text fontSize={[0]} lineHeight={[18]} fontWeight=\"medium\" color=\"deepLakeBlue.100\" capitalize mb={1}>\r\n {guestCountText}\r\n </Text>\r\n )}\r\n </SummaryContent.Item>\r\n {/* Dates */}\r\n {isCartVariation ? (\r\n <Text fontSize={[0]} lineHeight={[18]} fontWeight=\"medium\" color=\"deepLakeBlue.100\" capitalize mb={3}>\r\n {editCopyByReplaceMultipleStrings(COPY.DATES, copyObjectDates)}\r\n </Text>\r\n ) : null}\r\n {/* Promo Code */}\r\n {!isCartVariation && promoCode ? (\r\n <SummaryContent.Item fontSize={0} fontWeight=\"bold\" color=\"deepForestGreen.100\">\r\n <SummaryContent.Description lineHeight=\"16px\">\r\n <AlertSuccessIcon color={theme.colors.successGreen} size={'20.48px'} />\r\n <Text pl={'5px'}>{editCopyByReplaceString(COPY.PROMO_CODE_COPY, promoCode, '<PROMOCODE>')}</Text>\r\n </SummaryContent.Description>\r\n {shouldDisplayPromoValue ? (\r\n <SummaryContent.Amount lineHeight=\"16px\" fontWeight=\"bold\">\r\n {`${showNegativeSign}$${promotionalSavings.toFixed(2)}`}\r\n </SummaryContent.Amount>\r\n ) : null}\r\n </SummaryContent.Item>\r\n ) : null}\r\n {shouldDisplayRoomSavings && (\r\n <SummaryContent.Item fontWeight=\"bold\">\r\n <SummaryContent.Description>\r\n <Text\r\n lineHeight=\"16px\"\r\n color={theme.colors.deepForestGreen[100]}\r\n fontWeight={theme.fontWeights.bold}\r\n fontSize={theme.fontSizes[0] + 'px'}>\r\n {COPY.ROOM_SAVINGS_APPLIED}\r\n </Text>\r\n </SummaryContent.Description>\r\n <SummaryContent.Amount>\r\n <Text\r\n lineHeight=\"16px\"\r\n color={theme.colors.deepForestGreen[100]}\r\n fontWeight={theme.fontWeights.bold}\r\n fontSize={theme.fontSizes[0] + 'px'}>\r\n {`${showNegativeSign}$${promotionalSavings.toFixed(2)}`}\r\n </Text>\r\n </SummaryContent.Amount>\r\n </SummaryContent.Item>\r\n )}\r\n {isCartVariation && promoCode ? (\r\n <Flex alignItems=\"center\" mb={3}>\r\n <CheckedIconIcon color={theme.colors.successGreen} size={16}></CheckedIconIcon>\r\n <Text\r\n fontSize={[0]}\r\n lineHeight={[16]}\r\n fontWeight=\"bold\"\r\n color=\"deepForestGreen.100\"\r\n capitalize\r\n ml={2}>\r\n {editCopyByReplaceString(COPY.PROMOTION_CODE, promoCode, '<PROMO>')}\r\n </Text>\r\n </Flex>\r\n ) : null}\r\n {/* Change Suite Selection */}\r\n {!isCartVariation ? (\r\n <SummaryContent.Item>\r\n <SummaryContent.Action\r\n lineHeight=\"18px\"\r\n fontSize={{ sm: '10px', lg: '10px' }}\r\n onClick={() => history.push(routes.plan.self)}>\r\n {COPY.CHANGE_SUITE_SELECTION}\r\n </SummaryContent.Action>\r\n </SummaryContent.Item>\r\n ) : null}\r\n </Box>\r\n {isCartVariation ? (\r\n <Flex justifyContent=\"space-between\" flexGrow=\"1\">\r\n <Flex>\r\n <Box>\r\n <SummaryContent.Action\r\n mr={7}\r\n lineHeight=\"16px\"\r\n fontSize={theme.fontSizes[0]}\r\n onClick={handleRemoveSuiteModal}>\r\n {COPY.REMOVE}\r\n </SummaryContent.Action>\r\n </Box>\r\n <Box>\r\n <SummaryContent.Action\r\n lineHeight=\"16px\"\r\n fontSize={theme.fontSizes[0]}\r\n onClick={handleEditSuiteModal}>\r\n {COPY.EDIT}\r\n </SummaryContent.Action>\r\n </Box>\r\n </Flex>\r\n <Box>\r\n <Text\r\n fontSize={[1]}\r\n lineHeight={[18]}\r\n fontWeight=\"bold\"\r\n color=\"deepLakeBlue.100\"\r\n mb={isCartVariation ? 0 : 3}>\r\n ${suiteTotal.toFixed(2)}\r\n </Text>\r\n </Box>\r\n </Flex>\r\n ) : null}\r\n </Flex>\r\n </CartCardsContainer>\r\n </SummaryPackagesCardContainer>\r\n </>\r\n );\r\n};\r\n\r\nDetails.propTypes = propTypes;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { isValidPrice } from '../../../../../../utilities/cmpPackagesUtils';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { handleDueAmounts, handleTotalWithTaxes } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\n\r\nconst propTypes = {\r\n /** Due Amount for today */\r\n dueTodayAmount: PropTypes.number.isRequired,\r\n\r\n /** Due Amount at check in */\r\n dueAtCheckinAmount: PropTypes.number.isRequired\r\n};\r\n\r\nexport const DueAmount = ({\r\n dueTodayAmount,\r\n dueAtCheckinAmount,\r\n roomAdjustmentTax,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n numberOfNights,\r\n isUserAuthenticated,\r\n userOffers,\r\n activeOffers,\r\n setExcedent,\r\n isParkingFeeABCDTestActive,\r\n parkingFeeTotal,\r\n taxesAndFees,\r\n currentSelectedPackages,\r\n summaryTotal,\r\n optimizelyHierarchyFlip\r\n}) => {\r\n const shouldDisplay = isValidPrice(dueTodayAmount) && isValidPrice(dueAtCheckinAmount);\r\n\r\n if (!shouldDisplay) return null;\r\n\r\n const handleSummaryTotal = isUserAuthenticated\r\n ? handleTotalWithTaxes(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n currentSelectedPackages,\r\n setExcedent\r\n )\r\n : summaryTotal.toFixed(2);\r\n\r\n const handleDueToday = isUserAuthenticated\r\n ? handleDueAmounts(\r\n dueTodayAmount,\r\n dueAtCheckinAmount,\r\n roomAdjustmentTax,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n numberOfNights,\r\n userOffers,\r\n activeOffers,\r\n handleSummaryTotal\r\n ).today\r\n : dueTodayAmount.toFixed(2);\r\n\r\n const handleDuetAtCheckIn = isUserAuthenticated\r\n ? handleDueAmounts(\r\n dueTodayAmount,\r\n dueAtCheckinAmount,\r\n roomAdjustmentTax,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n numberOfNights,\r\n userOffers,\r\n activeOffers,\r\n handleSummaryTotal\r\n ).atCheckIn\r\n : dueAtCheckinAmount.toFixed(2);\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n const ABCDTestForParkingFeeDueAtCheckIn = (+handleDuetAtCheckIn + parkingFeeTotal).toFixed(2);\r\n /* ABCD TEST FOR PARKING FEE */\r\n\r\n return (\r\n <>\r\n <SummaryContent.Divider />\r\n <SummaryContent.Item fontSize={!optimizelyHierarchyFlip ? 0 : 7} fontWeight=\"bold\">\r\n <SummaryContent.Description lineHeight={optimizelyHierarchyFlip ? '24px' : '18px'}>\r\n {optimizelyHierarchyFlip ? COPY.DUE_TODAY_CAP : COPY.DUE_TODAY}\r\n </SummaryContent.Description>\r\n <SummaryContent.Amount width={'unset!important'} lineHeight={optimizelyHierarchyFlip && '24px'}>\r\n {`$${handleDueToday}`}\r\n </SummaryContent.Amount>\r\n </SummaryContent.Item>\r\n <SummaryContent.Item fontSize={0} fontWeight={theme.fontWeights.medium}>\r\n <SummaryContent.Description lineHeight={optimizelyHierarchyFlip && '24px'}>\r\n {COPY.DUE_CHECKIN}\r\n </SummaryContent.Description>\r\n <SummaryContent.Amount width={'unset!important'} lineHeight={optimizelyHierarchyFlip && '24px'}>\r\n {`$${isParkingFeeABCDTestActive ? ABCDTestForParkingFeeDueAtCheckIn : handleDuetAtCheckIn}`}\r\n </SummaryContent.Amount>\r\n </SummaryContent.Item>\r\n </>\r\n );\r\n};\r\n\r\nDueAmount.propTypes = propTypes;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { CheckInOutDate } from '../../../../../CheckInOutDates';\r\nimport { Flex } from '../../../../../ui-kit';\r\nimport ArrowRightIcon from '../../../../../ui-kit/icons/ArrowRight';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\n\r\nconst propTypes = {\r\n /** Checkin Date in the MM/DD format */\r\n checkIn: PropTypes.string.isRequired,\r\n\r\n /** Checkout Date in the MM/DD format */\r\n checkOut: PropTypes.string.isRequired,\r\n\r\n /** Number of nights for the reservation */\r\n numberOfNights: PropTypes.number.isRequired\r\n};\r\n\r\nexport const Header = ({ checkIn, checkOut, numberOfNights }) => {\r\n const numberOfNightsLabel = `${numberOfNights} ${numberOfNights && numberOfNights > 1 ? 'Nights' : 'Night'}`;\r\n\r\n return (\r\n <>\r\n <SummaryContent.Item mb={`${theme.space[3]}px`} />\r\n <SummaryContent.Item>\r\n <CheckInOutDate>\r\n <CheckInOutDate.Label\r\n fontSize={['12px', null, null, '12px']}\r\n lineHeight=\"18px\"\r\n height={['18px', null, null, '18px']}>\r\n {COPY.CHECK_IN}\r\n </CheckInOutDate.Label>\r\n <CheckInOutDate.Date lineHeight=\"24px\" fontSize={['24px', '22px']}>\r\n {checkIn}\r\n </CheckInOutDate.Date>\r\n </CheckInOutDate>\r\n <Flex mt={['38px', '30px']} flex=\"1\" justifyContent=\"center\">\r\n <ArrowRightIcon color={theme.colors.preciousStoneBlue[100]} height=\"100%\" />\r\n </Flex>\r\n <CheckInOutDate>\r\n <CheckInOutDate.Label\r\n fontSize={['12px', null, null, '12px']}\r\n lineHeight=\"18px\"\r\n height={['22px', null, null, '14px']}>\r\n {COPY.CHECK_OUT}\r\n </CheckInOutDate.Label>\r\n <CheckInOutDate.Date lineHeight=\"24px\" fontSize={['24px', null, null, '22px']}>\r\n {checkOut}\r\n </CheckInOutDate.Date>\r\n </CheckInOutDate>\r\n </SummaryContent.Item>\r\n <SummaryContent.Item fontWeight=\"bold\" fontSize={['12px', null, null, '12px']}>\r\n <SummaryContent.Description lineHeight=\"16px\">{numberOfNightsLabel}</SummaryContent.Description>\r\n </SummaryContent.Item>\r\n </>\r\n );\r\n};\r\n\r\nHeader.propTypes = propTypes;\r\n","import { Fragment } from 'react';\r\nimport { OFFERS_IMAGES } from '../../../../../../components/LoyaltySummary/assets/images';\r\nimport { GwDatesWrapper } from '../../../../../_internal_date_/gwDatesWrapper';\r\nimport { Box, Flex, Text } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { CustomSummaryItemOffer, CustomSummaryItemTitle, OfferImageContainer, OffersContainer } from '../styles';\r\n\r\nconst Offers = ({ userOffers, activeOffers, removeOffer, excedent, isCartVariation }) => {\r\n if (!activeOffers || activeOffers?.length === 0) {\r\n return null;\r\n }\r\n\r\n const offerSkeleton = (offerCode, index) => {\r\n const offerInfo = userOffers.find(offer => offer.id === offerCode);\r\n if (!offerInfo) return;\r\n\r\n return (\r\n <Fragment>\r\n <SummaryContent.Item>\r\n <Box width=\"100%\">\r\n <Flex justifyContent=\"space-between\" width=\"100%\">\r\n <Box>\r\n <Text\r\n mb=\"1\"\r\n mt=\"0\"\r\n fontSize={0}\r\n fontWeight={theme.fontWeights.medium}\r\n color={theme.colors.deepLakeBlue[100]}>\r\n {offerInfo.title}\r\n </Text>\r\n </Box>\r\n <Box>\r\n <Flex flexDirection=\"row\" alignItems=\"center\">\r\n <SummaryContent.Action\r\n mr={['4px', '4px', '4px', '0px']}\r\n height={'max-content'}\r\n fontSize={isCartVariation ? theme.fontSizes[9] : theme.fontSizes[0]}\r\n lineHeight=\"18px\"\r\n onClick={() => removeOffer(offerInfo)}>\r\n {COPY.REMOVE}\r\n </SummaryContent.Action>\r\n <Text fontWeight=\"500\" fontSize={0} color=\"deepLakeBlue.100\" width=\"63px\" textAlign=\"right\">\r\n {`-$${offerInfo.dollarValue.toFixed(2)}`}\r\n </Text>\r\n </Flex>\r\n </Box>\r\n </Flex>\r\n <Text lineHeight=\"16px\" my=\"0\" fontSize={'10px'} fontWeight=\"medium\" color=\"deepLakeBlue.100\">\r\n {COPY.EXPIRATION_DATE} {GwDatesWrapper.format(offerInfo.bookByDate, 'MMM DD, YYYY')}\r\n </Text>\r\n </Box>\r\n </SummaryContent.Item>\r\n </Fragment>\r\n );\r\n };\r\n\r\n return (\r\n <OffersContainer isCartVariation={isCartVariation}>\r\n {!isCartVariation ? <SummaryContent.Divider /> : null}\r\n <CustomSummaryItemTitle fontWeight=\"bold\">\r\n <SummaryContent.Description>\r\n <Flex flexDirection=\"column\">\r\n <Flex alignItems=\"center\">\r\n <OfferImageContainer mr=\"8px\">\r\n <img src={OFFERS_IMAGES.OFFERS_V_BLUE_ICON} alt=\"\" />\r\n </OfferImageContainer>\r\n <Text color={theme.colors.deepLakeBlue[100]} my=\"0\" fontSize={0} fontWeight=\"bold\" lineHeight=\"16px\">\r\n {COPY.BONUS_DEALS_APPLIED}\r\n </Text>\r\n </Flex>\r\n\r\n {excedent && (\r\n <Text my=\"2\" fontSize={['10px', null, null, '10px']} color=\"red\">\r\n {COPY.EXCEED_AMOUNT}\r\n </Text>\r\n )}\r\n </Flex>\r\n </SummaryContent.Description>\r\n </CustomSummaryItemTitle>\r\n <CustomSummaryItemOffer>\r\n {activeOffers.map((activeOffer, index) => (\r\n <Box key={index}>{offerSkeleton(activeOffer, index)}</Box>\r\n ))}\r\n </CustomSummaryItemOffer>\r\n </OffersContainer>\r\n );\r\n};\r\n\r\nexport default Offers;\r\n","import { PACKAGE_CHARGE_TYPE } from '../../../../../utilities/constants';\r\nimport { DINING_CREDIT, DINING_CREDIT_COINS } from '../../../../DiningCredit/assets/images';\r\n\r\n// Get the correct image to display from the packages\r\nexport function getPkgImage(pkg) {\r\n // check if the package is dining credit and return image\r\n if (\r\n pkg.packageName &&\r\n pkg.packageType?.includes('dining') &&\r\n pkg.packageName.toLowerCase().includes('dining credit')\r\n ) {\r\n if (pkg.allowance && DINING_CREDIT_COINS.includes(pkg.allowance)) {\r\n return DINING_CREDIT[pkg.allowance];\r\n }\r\n }\r\n\r\n // check if the package has a packageIcon\r\n if (pkg.packageIcon) return pkg.packageIcon;\r\n // check if image is a string\r\n if (typeof pkg.image === 'string') return pkg.image;\r\n // check if image is an object and return the url\r\n if (pkg.image && pkg.image.url) return pkg.image.url;\r\n}\r\n\r\n// check if the package is a json\r\nexport function getPkgImageValidation(pkg) {\r\n if (typeof pkg.image === 'string' && pkg.image.includes('.json')) return true;\r\n\r\n return false;\r\n}\r\n\r\n// validate if is dining credit\r\nexport function isDiningCredit(pkg) {\r\n return (\r\n pkg.packageName && pkg.packageType?.includes('dining') && pkg.packageName.toLowerCase().includes('dining credit')\r\n );\r\n}\r\n\r\n// show counter if package has a queryByTestId, is not bundle or dining and is per package charge\r\nexport function showCounter(packageItem) {\r\n return (\r\n packageItem.quantity &&\r\n packageItem.chargeType === PACKAGE_CHARGE_TYPE.byPackage &&\r\n !packageItem.packageType?.includes('bundle') &&\r\n !packageItem.packageType?.includes('dining')\r\n );\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Counter, Flex } from '../../../../../ui-kit';\r\n\r\nconst propTypes = {\r\n handleUpdatePackageQuantity: PropTypes.func,\r\n handleDeletePackage: PropTypes.func,\r\n packageItem: PropTypes.object\r\n};\r\n\r\nconst defaultProps = {\r\n handleUpdatePackageQuantity: () => {},\r\n handleDeletePackage: () => {},\r\n packageItem: null\r\n};\r\n\r\nconst CartCounterContainer = ({ handleUpdatePackageQuantity, handleDeletePackage, packageItem }) => {\r\n const [value, setValue] = useState(packageItem?.quantity ?? 0);\r\n\r\n const handleUpdateStates = value => {\r\n if (value === 0) return handleDeletePackage(packageItem);\r\n handleUpdatePackageQuantity(value, packageItem);\r\n };\r\n\r\n useEffect(() => {\r\n setValue(packageItem?.quantity ?? 0);\r\n }, [packageItem]);\r\n\r\n return (\r\n <Flex>\r\n <Counter\r\n onChange={e => handleUpdateStates(e)}\r\n value={value}\r\n variation=\"small\"\r\n min={0}\r\n width={40}\r\n max={+packageItem?.maxPackageLimit}\r\n />\r\n </Flex>\r\n );\r\n};\r\n\r\nCartCounterContainer.propTypes = propTypes;\r\nCartCounterContainer.defaultProps = defaultProps;\r\n\r\nexport default CartCounterContainer;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport routes from '../../../../../../routes';\r\nimport { getTheFirstElementOfArray } from '../../../../../../utilities/arraysUtils';\r\nimport { PACKAGE_CHARGE_TYPE, ROOM_RATE_TYPE } from '../../../../../../utilities/constants';\r\nimport { getNumberOfBillableGuests } from '../../../../../../utilities/guestsUtils';\r\nimport { getCurrencyCodeText } from '../../../../../../utilities/planUtils';\r\nimport SelectPackageQuantity from '../../../../../Packages/SelectPackageQuantity';\r\nimport { Animation, Box, Flex, Text } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport {\r\n editCopyByReplaceMultipleStrings,\r\n editCopyByReplaceString,\r\n pluralize\r\n} from '../../../../../utilities/copyFunctions';\r\nimport { SummaryContent } from '../../../Content';\r\nimport { CART_MODIFY_MODAL_TYPES, CART_MODIFY_MODAL_VARIATIONS } from '../../utilities/constants';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { getPkgImage, getPkgImageValidation, isDiningCredit } from '../../utilities/functions';\r\nimport {\r\n AddWaterPassesSummary,\r\n CartCardImageContainer,\r\n CartCardTitle,\r\n CartCardsContainer,\r\n CartPackageListItemContainer,\r\n DisableAddButtonText,\r\n SummaryPackagesCardContainer\r\n} from '../styles';\r\nimport CartCounterContainer from './CartCounterContainer';\r\nconst propTypes = {\r\n /** String date object with the checkin date */\r\n checkinDateSelection: PropTypes.string.isRequired,\r\n\r\n /** String date object with the checkout date */\r\n checkoutDateSelection: PropTypes.string.isRequired,\r\n\r\n /** Currenty selected packages */\r\n currentSelectedPackages: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n packageCode: PropTypes.string,\r\n packageName: PropTypes.string,\r\n currencyCode: PropTypes.string,\r\n quantity: PropTypes.number,\r\n amount: PropTypes.number,\r\n isAdjustment: PropTypes.bool,\r\n showQuantitySelect: PropTypes.bool\r\n })\r\n ),\r\n\r\n /** Number of guests for the reservation */\r\n numberOfGuests: PropTypes.number.isRequired,\r\n\r\n /** Flag to indicate the property is in Niagara */\r\n isNiagaraProperty: PropTypes.bool,\r\n\r\n /** Function to update the package quantity */\r\n upsertPackage: PropTypes.func,\r\n\r\n /** Funtion to delete a package */\r\n handleDeletePackage: PropTypes.func,\r\n\r\n /** Flag to indicate if the reservation has selected packages */\r\n hasSelectedPackages: PropTypes.bool\r\n};\r\n\r\nconst getPackagePriceDisplay = packageItem => {\r\n if (packageItem.maxPackageLimit === '1') return `${packageItem.amount.toFixed(2)}`;\r\n return `${(parseInt(packageItem.quantity) * packageItem.amount).toFixed(2)}`;\r\n};\r\n\r\nconst PackageList = ({\r\n currentSelectedPackages,\r\n handleDeletePackage,\r\n isNiagaraProperty,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n numberOfGuests,\r\n handleUpdatePackageQuantity,\r\n isCartVariation,\r\n handleUpdatePackageQuantityCounter,\r\n openModifyCartItemModal,\r\n setCartReturnedPageLinkClicked,\r\n resortLocationUrlParam,\r\n toggleOpen,\r\n lcoCode\r\n}) => {\r\n if (!currentSelectedPackages || !currentSelectedPackages.length) return null;\r\n\r\n const handleRemovePackageModal = packageItem => {\r\n const removeItemConfirmationFunction = () => handleDeletePackage(packageItem);\r\n openModifyCartItemModal(\r\n packageItem,\r\n CART_MODIFY_MODAL_TYPES.REMOVE,\r\n CART_MODIFY_MODAL_VARIATIONS.PACKAGE,\r\n removeItemConfirmationFunction\r\n );\r\n };\r\n\r\n const moveToActivitiesAndCloseCart = () => {\r\n setCartReturnedPageLinkClicked('activities');\r\n toggleOpen();\r\n setTimeout(() => {\r\n window.location.href = removeLastSlash(resortLocationUrlParam) + routes.plan.activities;\r\n }, 500);\r\n };\r\n\r\n const moveToDiningAndCloseCart = () => {\r\n setCartReturnedPageLinkClicked('dining');\r\n toggleOpen();\r\n setTimeout(() => {\r\n window.location.href = removeLastSlash(resortLocationUrlParam) + routes.plan.dining;\r\n }, 500);\r\n };\r\n\r\n return (\r\n <>\r\n <SummaryPackagesCardContainer isCartVariation={isCartVariation}>\r\n {/* Packages Card */}\r\n {currentSelectedPackages.map((item, index) => {\r\n const priceToDisplay = getPackagePriceDisplay(item);\r\n return (\r\n !item.isAdjustment && (\r\n <CartCardsContainer key={`${item.packageCode + index}`} isCartVariation={isCartVariation}>\r\n {/* Package Image */}\r\n {isCartVariation ? (\r\n <CartCardImageContainer\r\n mr={3}\r\n cover={getTheFirstElementOfArray(item.packageType) !== 'Pass'}\r\n isDiningCredit={isDiningCredit(item)}>\r\n {getPkgImageValidation(item) ? (\r\n <Animation\r\n src={getPkgImage(item)}\r\n name={item.headline || item.title}\r\n autoplay={true}\r\n loop={true}\r\n />\r\n ) : (\r\n <img src={getPkgImage(item)} alt=\"\" />\r\n )}\r\n </CartCardImageContainer>\r\n ) : null}\r\n {/* Package Details */}\r\n <CartPackageListItemContainer isCartVariation={isCartVariation}>\r\n <SummaryContent.Item fontSize={0}>\r\n <Flex\r\n flexDirection={isCartVariation ? 'column' : 'row'}\r\n justifyContent={'space-between'}\r\n width=\"100%\"\r\n gap=\"14px\">\r\n <Flex flexGrow=\"1\" flexDirection={isCartVariation ? 'column' : 'row'}>\r\n {isCartVariation ? (\r\n <CartCardTitle\r\n fontSize={[0]}\r\n fontWeight=\"bold\"\r\n lineHeight={[16]}\r\n color=\"deepLakeBlue.100\"\r\n mb={3}\r\n onClick={\r\n item?.packageType?.includes('dining')\r\n ? moveToDiningAndCloseCart\r\n : moveToActivitiesAndCloseCart\r\n }>\r\n {item.headline || item.title}\r\n </CartCardTitle>\r\n ) : (\r\n <SummaryContent.Description lineHeight=\"18px\">\r\n {item.packageName || item.headline}\r\n </SummaryContent.Description>\r\n )}\r\n {(!isNiagaraProperty &&\r\n item.quantity &&\r\n !item.packageType?.includes('dining') &&\r\n !item.packageType?.includes('bundle') &&\r\n item.packageCode !== lcoCode) ||\r\n (isNiagaraProperty &&\r\n item.quantity &&\r\n item.chargeType === PACKAGE_CHARGE_TYPE.byPackage &&\r\n !item.packageType?.includes('bundle') &&\r\n item.packageCode !== lcoCode) ? (\r\n isCartVariation ? (\r\n <CartCounterContainer\r\n handleUpdatePackageQuantity={handleUpdatePackageQuantityCounter}\r\n handleDeletePackage={handleDeletePackage}\r\n packageItem={item}\r\n />\r\n ) : (\r\n <Box width=\"80px\" style={{ textAlign: 'right' }}>\r\n <SelectPackageQuantity\r\n isNiagaraProperty={isNiagaraProperty}\r\n checkinDateSelection={checkinDateSelection}\r\n checkoutDateSelection={checkoutDateSelection}\r\n packageItem={item}\r\n numberOfGuests={numberOfGuests}\r\n handleUpdatePackageQuantity={handleUpdatePackageQuantity}\r\n />\r\n </Box>\r\n )\r\n ) : null}\r\n </Flex>\r\n <Flex gap=\"14px\">\r\n {!isCartVariation ? (\r\n <SummaryContent.Action lineHeight=\"18px\" onClick={() => handleDeletePackage(item)}>\r\n {COPY.REMOVE}\r\n </SummaryContent.Action>\r\n ) : null}\r\n <Flex alignItems=\"center\" flexGrow=\"1\">\r\n {isCartVariation ? (\r\n <Flex justifyContent=\"space-between\" flexGrow=\"1\">\r\n <Flex>\r\n <Box mr={7}>\r\n <SummaryContent.Action\r\n lineHeight=\"16px\"\r\n fontSize={theme.fontSizes[0]}\r\n onClick={() => handleRemovePackageModal(item)}>\r\n {COPY.REMOVE}\r\n </SummaryContent.Action>\r\n </Box>\r\n <Box>\r\n <SummaryContent.Action\r\n lineHeight=\"16px\"\r\n fontSize={theme.fontSizes[0]}\r\n onClick={\r\n item?.packageType?.includes('dining')\r\n ? moveToDiningAndCloseCart\r\n : moveToActivitiesAndCloseCart\r\n }>\r\n {COPY.EDIT}\r\n </SummaryContent.Action>\r\n </Box>\r\n </Flex>\r\n\r\n <Box>\r\n <Text fontSize={[1]} lineHeight={[18]} fontWeight=\"bold\" color=\"deepLakeBlue.100\">\r\n ${priceToDisplay}\r\n </Text>\r\n </Box>\r\n </Flex>\r\n ) : (\r\n <SummaryContent.Amount>\r\n ${priceToDisplay} {getCurrencyCodeText(item.currencyCode)}\r\n </SummaryContent.Amount>\r\n )}\r\n </Flex>\r\n </Flex>\r\n </Flex>\r\n </SummaryContent.Item>\r\n </CartPackageListItemContainer>\r\n </CartCardsContainer>\r\n )\r\n );\r\n })}\r\n </SummaryPackagesCardContainer>\r\n </>\r\n );\r\n};\r\n\r\nexport const PackagesList = ({\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n currentSelectedPackages,\r\n numberOfGuests,\r\n isNiagaraProperty,\r\n upsertPackage,\r\n deletePackage,\r\n hasSelectedPackages,\r\n isCartVariation = false,\r\n openModifyCartItemModal,\r\n resortLocationUrlParam,\r\n setCartReturnedPageLinkClicked,\r\n cartReturnedPageLinkClicked,\r\n toggleOpen,\r\n selectedSuite,\r\n updateSuite,\r\n adultsCount,\r\n kidsAges\r\n}) => {\r\n const handleUpdatePackageQuantitySelect = (e, packageItem) => {\r\n upsertPackage({ ...packageItem, quantity: e.target.value });\r\n };\r\n const handleUpdatePackageQuantityCounter = (value, packageItem) => {\r\n upsertPackage({ ...packageItem, quantity: value });\r\n };\r\n\r\n const price =\r\n selectedSuite?.rateOptions?.length > 1\r\n ? selectedSuite?.rateOptions?.find(rate => rate.rateType === ROOM_RATE_TYPE.roomWithWaterParkPass)\r\n ?.averageNightlyBaseRate -\r\n selectedSuite?.rateOptions?.find(rate => rate.rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass)\r\n ?.averageNightlyBaseRate\r\n : 0;\r\n const numberOfBillableGuests = getNumberOfBillableGuests(adultsCount, kidsAges);\r\n const copyObject = {\r\n '<PASSES>': numberOfBillableGuests,\r\n '<PRICE>': Math.round(price),\r\n '<PASSES_TEXT>': pluralize('pass', numberOfBillableGuests)\r\n };\r\n\r\n const lcoCode = selectedSuite?.lcoPackageCode ?? '';\r\n\r\n return (\r\n <>\r\n {!isCartVariation ? (\r\n <>\r\n <SummaryContent.Divider />\r\n <SummaryContent.Item fontSize={0} lineHeight=\"18px\">\r\n {selectedSuite?.rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass ? (\r\n <AddWaterPassesSummary alignItems=\"center\">\r\n <Text fontSize={0} lineHeight={18} fontWeight=\"medium\">\r\n {ReactHtmlParser(editCopyByReplaceMultipleStrings(COPY.ROOM_WITH_NO_WATER_PASS, copyObject))}\r\n </Text>\r\n <DisableAddButtonText minWidth=\"fit-content\">\r\n <SummaryContent.Action lineHeight=\"18px\" onClick={updateSuite}>\r\n <Text capitalize>\r\n {editCopyByReplaceString(COPY.ADD_PASSES, pluralize('pass', numberOfGuests), '<PASSES_TEXT>')}\r\n </Text>\r\n </SummaryContent.Action>\r\n </DisableAddButtonText>\r\n </AddWaterPassesSummary>\r\n ) : (\r\n <>\r\n <SummaryContent.Description lineHeight=\"18px\">{COPY.WATERPARK_PASS}</SummaryContent.Description>\r\n {COPY.INCLUDED}\r\n </>\r\n )}\r\n </SummaryContent.Item>\r\n </>\r\n ) : null}\r\n\r\n {hasSelectedPackages && (\r\n <PackageList\r\n currentSelectedPackages={currentSelectedPackages}\r\n handleDeletePackage={deletePackage}\r\n isNiagaraProperty={isNiagaraProperty}\r\n checkinDateSelection={checkinDateSelection}\r\n checkoutDateSelection={checkoutDateSelection}\r\n numberOfGuests={numberOfGuests}\r\n handleUpdatePackageQuantity={handleUpdatePackageQuantitySelect}\r\n handleUpdatePackageQuantityCounter={handleUpdatePackageQuantityCounter}\r\n isCartVariation={isCartVariation}\r\n setCartReturnedPageLinkClicked={setCartReturnedPageLinkClicked}\r\n cartReturnedPageLinkClicked={cartReturnedPageLinkClicked}\r\n openModifyCartItemModal={openModifyCartItemModal}\r\n resortLocationUrlParam={resortLocationUrlParam}\r\n toggleOpen={toggleOpen}\r\n lcoCode={lcoCode}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nPackagesList.propTypes = propTypes;\r\n\r\nPackagesList.defaultProps = {\r\n isNiagaraProperty: false,\r\n hasSelectedPackages: false\r\n};\r\n\r\n// Function to remove last slash from string\r\nfunction removeLastSlash(str) {\r\n return str.replace(/\\/$/, '');\r\n}\r\n","import React from 'react';\r\n\r\nimport theme from '../../../../../../components/ui-kit/themes/theme';\r\nimport { store } from '../../../../../../store/configureStore';\r\nimport { Text } from '../../../../../ui-kit';\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nexport const ParkingFee = () => {\r\n const { lodgeConfig } = store?.getState() || '';\r\n return (\r\n <>\r\n {lodgeConfig?.bookingSummaryParkingFee ? (\r\n <SummaryContent.Item id=\"BookingSummaryParkingFee\">\r\n <Text\r\n textAlign=\"left\"\r\n fontWeight={theme.fontWeights.medium}\r\n color=\"deepLakeBlue.100\"\r\n fontSize={9}\r\n lineHeight=\"16px\">\r\n {lodgeConfig.bookingSummaryParkingFee}\r\n </Text>\r\n </SummaryContent.Item>\r\n ) : null}\r\n </>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { OFFERS_IMAGES } from '../../../../../LoyaltySummary/assets/images';\r\nimport { Flex, Text } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceWithComponent } from '../../../../../utilities/copyFunctions';\r\nimport { handlePointsBalance } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { OfferImageContainer, PointsContainer } from '../styles';\r\n\r\nconst Points = ({\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n userOffers,\r\n activeOffers,\r\n isCartVariation\r\n}) => {\r\n const pointsBalanceAmount = handlePointsBalance(\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n userOffers,\r\n activeOffers\r\n );\r\n\r\n const pointsBalanceValue = () => {\r\n return <strong>{`${pointsBalanceAmount.toFixed(0)}`}</strong>;\r\n };\r\n return (\r\n <PointsContainer isCartVariation={isCartVariation}>\r\n {!isCartVariation ? <SummaryContent.Divider /> : null}\r\n <SummaryContent.Description>\r\n <Flex flexDirection=\"row\" justifyContent=\"space-between\" width={1}>\r\n <Flex>\r\n <OfferImageContainer mr=\"8px\">\r\n <img src={OFFERS_IMAGES.OFFERS_V_GREEN_ICON} alt=\"\" />\r\n </OfferImageContainer>\r\n <Text my=\"0\" fontSize={0} color={theme.colors.deepLakeBlue[100]} fontWeight=\"medium\">\r\n {editCopyByReplaceWithComponent(COPY.POINTS_APPLIED, pointsBalanceValue(), '<POINTS>')}\r\n </Text>\r\n </Flex>\r\n <Text fontSize={0} color={theme.colors.deepLakeBlue[100]} fontWeight=\"bold\">{`-$${pointsBalanceAmount.toFixed(\r\n 2\r\n )}`}</Text>\r\n </Flex>\r\n </SummaryContent.Description>\r\n </PointsContainer>\r\n );\r\n};\r\n\r\nexport default Points;\r\n","import styled, { css } from 'styled-components';\r\nimport { fontSize } from 'styled-system';\r\nimport Box from '../ui-kit/Box';\r\nimport theme, { mediaQueries } from '../ui-kit/themes/theme';\r\n\r\nexport const AffirmContainer = styled(Box)`\r\n ${theme.mediaScreens.phone`\r\n margin-right: auto;\r\n border-radius: 25px;\r\n margin-left: auto;\r\n display: inline-block;\r\n `}\r\n ${theme.mediaScreens.tablet`\r\n margin-right: ${props => (props.rightAlign ? '0' : 'auto')};\r\n `}\r\n`;\r\n\r\nexport const StyledFinancingOptionText = styled.p`\r\n margin-bottom: 0;\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n align-items: baseline;\r\n color: ${props => props.color || theme.colors.deepLakeBlue[100]};\r\n ${fontSize}\r\n font-weight: ${props => props.fontWeight || theme.fontWeights.regular};\r\n text-decoration: ${props => (props.textDecoration && props.textDecoration.sm) || props.textDecoration || 'none'};\r\n cursor: pointer;\r\n text-decoration-color: ${props => props.color || theme.colors.deepLakeBlue[100]};\r\n border-bottom: 1px solid transparent;\r\n \r\n .affirm-ala-price {\r\n padding-left: 4px;\r\n }\r\n \r\n .affirm-promo-underline {\r\n margin-right: 5px;\r\n text-decoration: none;\r\n cursor: pointer;\r\n }\r\n\r\n .__affirm-logo {\r\n margin-left: 7px;\r\n }\r\n\r\n .affirm-modal-trigger {\r\n display: none;\r\n }\r\n\r\n &:hover {\r\n ${theme.mediaScreens.tablet`\r\n border-bottom: 1px solid ${props => props.color || theme.colors.deepLakeBlue[100]};\r\n `}\r\n }\r\n ${({ lineHeight }) => {\r\n return css`\r\n line-height: ${lineHeight};\r\n `;\r\n }};\r\n ${mediaQueries.lg} {\r\n text-decoration: ${props => (props.textDecoration && props.textDecoration.lg) || props.textDecoration || 'none'};\r\n }\r\n`;\r\n","// TODO - revisit this component to fix how hooks are working\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nimport throttle from 'lodash-es/throttle';\r\nimport React, { createRef, useEffect } from 'react';\r\nimport { AffirmContainer, StyledFinancingOptionText } from './styles';\r\n\r\nimport { useHistory } from 'react-router';\r\nimport { isLocationAvailableWithAffirm } from '../../api/Utils/affirmUtils';\r\n\r\nconst refreshAffirm = throttle(() => {\r\n try {\r\n window.affirm.ui.refresh();\r\n } catch (e) {}\r\n}, 500);\r\n\r\nconst FinancingOptionText = ({ productType, amount, shouldRefresh, rightAlign, resortLocation, ...restProps }) => {\r\n const rateContainer = createRef();\r\n const shouldEnableAffirm = isLocationAvailableWithAffirm(resortLocation);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (history?.action === 'POP') window.affirm?.ui?.modal?.close();\r\n };\r\n }, [history]);\r\n\r\n useEffect(() => {\r\n refreshAffirm();\r\n }, [shouldRefresh]);\r\n\r\n useEffect(() => {\r\n if (shouldEnableAffirm) {\r\n const setListeners = event => {\r\n const { target } = event;\r\n target.parentElement.querySelector('.affirm-modal-trigger').click();\r\n };\r\n // This sucks but is the only way to emulate production behavior\r\n rateContainer.current.addEventListener('click', setListeners);\r\n\r\n return () => {\r\n if (rateContainer && rateContainer.current) {\r\n rateContainer.current.removeEventListener('click', setListeners);\r\n }\r\n };\r\n }\r\n }, []);\r\n\r\n if (!shouldEnableAffirm) return null;\r\n\r\n return (\r\n <>\r\n <AffirmContainer ref={rateContainer} rightAlign={rightAlign}>\r\n <StyledFinancingOptionText\r\n m={0}\r\n className=\"affirm-as-low-as\"\r\n data-page-type={productType}\r\n data-amount={amount}\r\n {...restProps}\r\n />\r\n </AffirmContainer>\r\n </>\r\n );\r\n};\r\n\r\nexport default FinancingOptionText;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\nimport FinancingOptionText from '../../../../../FinancingOptionText';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\n\r\nconst propTypes = {\r\n /** Summary total for the reservation */\r\n summaryTotal: PropTypes.number.isRequired,\r\n\r\n /** Flag to indicate if affirm should refresh */\r\n refreshAffirm: PropTypes.bool\r\n};\r\n\r\nexport const AffirmLink = ({ summaryTotal, refreshAffirm, optimizelyHierarchyFlip, resortLocation }) => {\r\n const isDesktop = useMediaQuery({\r\n query: `(min-width: ${theme.breakpoints.lg})`\r\n });\r\n return (\r\n <FinancingOptionText\r\n shouldRefresh={refreshAffirm}\r\n productType=\"cart\"\r\n amount={summaryTotal * 100}\r\n textDecoration={{ sm: 'underline', lg: 'none' }}\r\n fontSize={isDesktop || optimizelyHierarchyFlip ? 9 : 0}\r\n fontWeight={theme.fontWeights.bold}\r\n lineHeight={isDesktop || optimizelyHierarchyFlip ? '14px' : '16px'}\r\n color={theme.colors.preciousStoneBlue[100]}\r\n resortLocation={resortLocation}\r\n />\r\n );\r\n};\r\n\r\nAffirmLink.propTypes = propTypes;\r\n\r\nAffirmLink.defaultProps = {\r\n refreshAffirm: false\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { isLocationAvailableWithAffirm } from '../../../../../../api/Utils/affirmUtils';\r\nimport { isValidPrice } from '../../../../../../utilities/cmpPackagesUtils';\r\nimport { SupAmount } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { handleTotal } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { AffirmLink } from './AffirmLink';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if the user has packages selected */\r\n hasSelectedPackages: PropTypes.bool,\r\n\r\n /** Subtotal for the current reservation */\r\n summaryTotal: PropTypes.number.isRequired,\r\n\r\n /** loyalty points balance */\r\n pointsBalance: PropTypes.number,\r\n\r\n /** loyalty boolean to show or not the value */\r\n loyaltyOptIn: PropTypes.bool\r\n};\r\n\r\nexport const Subtotal = ({\r\n isSuperscriptStaySummarySuite,\r\n hasSelectedPackages,\r\n summaryTotal,\r\n pointsBalance,\r\n loyaltyOptIn,\r\n showLoyalty,\r\n userOffers,\r\n activeOffers,\r\n suiteTotal,\r\n isUserAuthenticated,\r\n currentSelectedPackages,\r\n setExcedent,\r\n resortLocation,\r\n optimizelyHierarchyFlip\r\n}) => {\r\n const [refreshAffirm, setRefreshAffirm] = useState(new Date().getTime());\r\n\r\n const handleSummarySubTotal = isUserAuthenticated\r\n ? handleTotal(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n setExcedent\r\n ).toFixed(2)\r\n : summaryTotal?.toFixed(2);\r\n\r\n useEffect(() => {\r\n setRefreshAffirm(new Date().getTime());\r\n }, [hasSelectedPackages, summaryTotal, handleSummarySubTotal]);\r\n\r\n return isValidPrice(summaryTotal) ? (\r\n <>\r\n <SummaryContent.Divider />\r\n\r\n <SummaryContent.Item\r\n fontWeight={theme.fontWeights.bold}\r\n fontSize={optimizelyHierarchyFlip ? theme.fontSizes[0] + 'px' : ['18px', null, null, '18px']}\r\n mb=\"4px\"\r\n lineHeight={optimizelyHierarchyFlip ? '18px' : '22px'}>\r\n <SummaryContent.Description>{COPY.SUBTOTAL}</SummaryContent.Description>\r\n <SummaryContent.SubtotalAmount fontWeight=\"bold\">\r\n <SupAmount\r\n fontSize={optimizelyHierarchyFlip ? theme.fontSizes[0] + 'px' : 7}\r\n textToUse={`$${handleSummarySubTotal}`}\r\n avoidFormat={!isSuperscriptStaySummarySuite}\r\n />\r\n </SummaryContent.SubtotalAmount>\r\n </SummaryContent.Item>\r\n <SummaryContent.Item mb=\"14px\" fontSize={['10px', null, null, '10px']} lineHeight=\"16px\">\r\n <SummaryContent.Description lineHeight=\"16px\" justifyContent=\"flex-end\">\r\n ({COPY.TAXES_NOT_INCLUDED})\r\n </SummaryContent.Description>\r\n </SummaryContent.Item>\r\n {isLocationAvailableWithAffirm(resortLocation) ? (\r\n <SummaryContent.Item mb={`${theme.space[7]}px`}>\r\n <AffirmLink\r\n refreshAffirm={refreshAffirm}\r\n summaryTotal={handleSummarySubTotal}\r\n optimizelyHierarchyFlip={optimizelyHierarchyFlip}\r\n resortLocation={resortLocation}\r\n />\r\n </SummaryContent.Item>\r\n ) : null}\r\n </>\r\n ) : null;\r\n};\r\nSubtotal.propTypes = propTypes;\r\nSubtotal.defaultProps = {\r\n hasSelectedPackages: false,\r\n pointsBalance: 0,\r\n loyaltyOptIn: false\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { TotalSavingsContainer } from '../styles';\r\n\r\nconst propTypes = {\r\n handleSavings: PropTypes.func\r\n};\r\n\r\nexport const TotalSavings = ({\r\n handleSavings,\r\n optimizelyHierarchyFlip = false,\r\n isCartVariation,\r\n shouldDisplayTotalSavings\r\n}) => {\r\n const value = handleSavings();\r\n if (!shouldDisplayTotalSavings) return null;\r\n return (\r\n <>\r\n {!isCartVariation ? <SummaryContent.Divider /> : null}\r\n <TotalSavingsContainer isCartVariation={isCartVariation}>\r\n <SummaryContent.Item\r\n color={isCartVariation ? theme.colors.successGreen : theme.colors.deepForestGreen[100]}\r\n fontSize={optimizelyHierarchyFlip ? theme.fontSizes[7] + 'px' : ['14px', null, null, '14px']}\r\n fontWeight={theme.fontWeights.bold}\r\n lineHeight={optimizelyHierarchyFlip ? '24px' : '22px'}>\r\n <SummaryContent.Description data-testid=\"suite-total\">{COPY.TOTAL_SAVINGS}</SummaryContent.Description>\r\n <SummaryContent.SubtotalAmount\r\n color={isCartVariation ? theme.colors.successGreen : theme.colors.deepForestGreen[100]}\r\n fontSize={optimizelyHierarchyFlip ? theme.fontSizes[7] + 'px' : ['14px', null, null, '14px']}\r\n fontWeight={theme.fontWeights.bold}\r\n lineHeight={optimizelyHierarchyFlip ? '24px' : '18px'}>\r\n {`${!isCartVariation && value > 0 ? '-' : ''}$${value.toFixed(2)}`}\r\n </SummaryContent.SubtotalAmount>\r\n </SummaryContent.Item>\r\n </TotalSavingsContainer>\r\n </>\r\n );\r\n};\r\n\r\nTotalSavings.propTypes = propTypes;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport { isLocationAvailableWithAffirm } from '../../../../../../api/Utils/affirmUtils';\r\nimport { isValidPrice } from '../../../../../../utilities/cmpPackagesUtils';\r\nimport { SupAmount } from '../../../../../ui-kit';\r\nimport theme, { fontSizes } from '../../../../../ui-kit/themes/theme';\r\nimport { handleTotalWithTaxes } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { AffirmLink } from './AffirmLink';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if exist packages for the reservation */\r\n hasSelectedPackages: PropTypes.bool,\r\n\r\n /** Total for the reservation */\r\n summaryTotal: PropTypes.number.isRequired,\r\n\r\n /** loyalty points balance */\r\n pointsBalance: PropTypes.number,\r\n\r\n /** loyalty boolean to show or not the value */\r\n loyaltyOptIn: PropTypes.bool\r\n};\r\n\r\nexport const Totals = ({\r\n isSuperscriptStaySummarySuite,\r\n hasSelectedPackages,\r\n summaryTotal,\r\n pointsBalance,\r\n loyaltyOptIn,\r\n showLoyalty,\r\n userOffers,\r\n activeOffers,\r\n suiteTotal,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n isUserAuthenticated,\r\n currentSelectedPackages,\r\n setExcedent,\r\n parkingFeeTotal,\r\n isParkingFeeABCDTestActive,\r\n resortLocation,\r\n optimizelyHierarchyFlip,\r\n isDesktop\r\n}) => {\r\n const [refreshAffirm, setRefreshAffirm] = useState(new Date().getTime());\r\n\r\n const handleSummaryTotal = isUserAuthenticated\r\n ? handleTotalWithTaxes(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n currentSelectedPackages,\r\n setExcedent\r\n )\r\n : summaryTotal?.toFixed(2);\r\n\r\n useEffect(() => {\r\n setRefreshAffirm(new Date().getTime());\r\n }, [hasSelectedPackages, summaryTotal, handleSummaryTotal]);\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n const ABCDTestForParkingFeeSummaryTotal = () => {\r\n const summaryTotalWithParkingFee = Number(handleSummaryTotal) + parkingFeeTotal;\r\n return summaryTotalWithParkingFee.toFixed(2);\r\n };\r\n /* ABCD TEST FOR PARKING FEE */\r\n\r\n return isValidPrice(summaryTotal) ? (\r\n <>\r\n <SummaryContent.Divider />\r\n <SummaryContent.Item\r\n fontSize={\r\n optimizelyHierarchyFlip\r\n ? !isDesktop\r\n ? fontSizes[1] + 'px'\r\n : fontSizes[0] + 'px'\r\n : ['18px', null, null, '18px']\r\n }\r\n fontWeight={theme.fontWeights.bold}\r\n role=\"complementary\"\r\n aria-label=\"Total Price\"\r\n lineHeight={optimizelyHierarchyFlip ? '18px' : '22px'}>\r\n <SummaryContent.Description data-testid=\"suite-total\">{COPY.TOTAL}</SummaryContent.Description>\r\n <SummaryContent.SubtotalAmount fontWeight=\"bold\">\r\n <SupAmount\r\n fontSize={optimizelyHierarchyFlip ? fontSizes[0] + 'px' : 7}\r\n textToUse={`$${isParkingFeeABCDTestActive ? ABCDTestForParkingFeeSummaryTotal() : handleSummaryTotal}`}\r\n avoidFormat={!isSuperscriptStaySummarySuite}\r\n />\r\n </SummaryContent.SubtotalAmount>\r\n </SummaryContent.Item>\r\n\r\n {isLocationAvailableWithAffirm(resortLocation) ? (\r\n <SummaryContent.Item mb={`${theme.space[7]}px`}>\r\n <AffirmLink\r\n refreshAffirm={refreshAffirm}\r\n summaryTotal={handleSummaryTotal}\r\n optimizelyHierarchyFlip={optimizelyHierarchyFlip}\r\n resortLocation={resortLocation}\r\n />\r\n </SummaryContent.Item>\r\n ) : null}\r\n </>\r\n ) : null;\r\n};\r\n\r\nTotals.propTypes = propTypes;\r\n\r\nTotals.defaultProps = {\r\n hasSelectedPackages: false,\r\n pointsBalance: 0,\r\n loyaltyOptIn: false\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport {\r\n TESTS_DICTIONARY,\r\n getTestValueAB,\r\n optimizelyHideVoyagersBannerMobile\r\n} from '../../../../../../utilities/ABTesting';\r\n\r\nimport Loyalty from '../../../../../Loyalty/Loyalty';\r\nimport { LOYALTY_TYPES } from '../../../../../Loyalty/utilities/constants';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { handlePointsBalance } from '../../../../../utilities/utils';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { AdditionalCharges } from './AdditionalCharges';\r\nimport { Details } from './Details';\r\nimport { DueAmount } from './DueAmount';\r\nimport { Header as SuiteHeader } from './Header';\r\nimport Offers from './Offers';\r\nimport { PackagesList } from './PackageList';\r\nimport { ParkingFee } from './ParkingFee';\r\nimport Points from './Points';\r\nimport { Subtotal } from './Subtotal';\r\nimport { TotalSavings } from './TotalSavings';\r\nimport { Totals } from './Totals';\r\n\r\nconst SuitePlanContent = ({ expanded, onPaymentPage, clearSelectedSuite, isHighestRatesEnabled, ...restProps }) => {\r\n const {\r\n promotionalSavings,\r\n loyaltyOptIn,\r\n suiteTotal,\r\n numberOfNights,\r\n userOffers,\r\n activeOffers,\r\n removeActiveOffer,\r\n showLoyalty,\r\n isUserAuthenticated,\r\n getPointsMultiplier,\r\n offerCode,\r\n pointsBalance,\r\n isCartVariation,\r\n resortLocation,\r\n loyaltyEarnThresholdNights,\r\n setCartReturnedPageLinkClicked,\r\n clearPlanPackages,\r\n deletePackage,\r\n upsertPackage,\r\n promoCode\r\n } = restProps;\r\n\r\n const isDesktop = useMediaQuery({\r\n query: `(min-width: ${theme.breakpoints.lg})`\r\n });\r\n const iconSize = isDesktop ? '16px' : '24px';\r\n\r\n const [showBonusExcedent, setShowBonusExcedent] = useState(false);\r\n\r\n const renderHeader = expanded || onPaymentPage || isDesktop;\r\n const renderTaxes = expanded && onPaymentPage;\r\n const renderExpandedNonPaymentPage = expanded && !onPaymentPage;\r\n const renderPackages = expanded;\r\n const renderTotal = ((expanded || isDesktop) && onPaymentPage && isDesktop) || (!isDesktop && onPaymentPage);\r\n const abTestingHideEarnBanner = !isDesktop && optimizelyHideVoyagersBannerMobile;\r\n\r\n const isSuperscriptStaySummarySuite = getTestValueAB(TESTS_DICTIONARY.optimizelySuperscriptStaySummarySuite, false);\r\n const optimizelyHierarchyFlip = getTestValueAB(TESTS_DICTIONARY.optimizelyHierarchyFlip, false);\r\n const shouldDisplayRoomSavings = !isCartVariation && !promoCode && isHighestRatesEnabled;\r\n\r\n const handleSavings = () => {\r\n const roomSavings = ~~parseFloat(promotionalSavings.toFixed(2));\r\n const pointsSavings = handlePointsBalance(showLoyalty, loyaltyOptIn, pointsBalance, suiteTotal);\r\n let offersSavings = 0;\r\n if (userOffers && userOffers.length > 0) {\r\n offersSavings = userOffers.reduce((previousValue, currentValue) => {\r\n if (activeOffers.length > 0 && activeOffers.includes(currentValue.id)) {\r\n return previousValue + currentValue.dollarValue;\r\n } else {\r\n return previousValue;\r\n }\r\n }, 0);\r\n }\r\n return Number(roomSavings) + Number(pointsSavings) + offersSavings;\r\n };\r\n\r\n return (\r\n <SummaryContent fontSize={[14, null, null, 0]}>\r\n {showLoyalty && !abTestingHideEarnBanner && offerCode !== COPY.SEASONS_CODE && !isCartVariation ? (\r\n <Loyalty\r\n loyaltyType={LOYALTY_TYPES.earn}\r\n numberOfNights={numberOfNights}\r\n isUserAuthenticated={isUserAuthenticated}\r\n suitNightRate={restProps.suiteTotal}\r\n pointsMultiplier={getPointsMultiplier}\r\n loyaltyEarnThresholdNights={loyaltyEarnThresholdNights}\r\n {...restProps}\r\n />\r\n ) : null}\r\n\r\n {renderHeader && !isCartVariation ? <SuiteHeader {...restProps} /> : null}\r\n {expanded ? (\r\n <Details\r\n {...restProps}\r\n setCartReturnedPageLinkClicked={setCartReturnedPageLinkClicked}\r\n clearPlanPackages={clearPlanPackages}\r\n clearSelectedSuite={clearSelectedSuite}\r\n handleSavings={handleSavings}\r\n iconSize={iconSize}\r\n shouldDisplayRoomSavings={shouldDisplayRoomSavings}\r\n shouldDisplayPromoValue={isHighestRatesEnabled}\r\n />\r\n ) : null}\r\n {renderPackages ? (\r\n <PackagesList\r\n {...restProps}\r\n setCartReturnedPageLinkClicked={setCartReturnedPageLinkClicked}\r\n deletePackage={deletePackage}\r\n upsertPackage={upsertPackage}\r\n />\r\n ) : null}\r\n {showLoyalty && expanded && userOffers ? (\r\n <Offers\r\n isCartVariation={isCartVariation}\r\n userOffers={userOffers}\r\n activeOffers={activeOffers}\r\n removeOffer={removeActiveOffer}\r\n excedent={showBonusExcedent}\r\n />\r\n ) : null}\r\n {showLoyalty && expanded && pointsBalance ? <Points {...restProps} isCartVariation={isCartVariation} /> : null}\r\n\r\n {renderTaxes && !isCartVariation ? <AdditionalCharges {...restProps} isDesktop={isDesktop} /> : null}\r\n {expanded && !isCartVariation ? (\r\n <TotalSavings\r\n optimizelyHierarchyFlip={optimizelyHierarchyFlip}\r\n handleSavings={handleSavings}\r\n shouldDisplayTotalSavings={isHighestRatesEnabled}\r\n {...restProps}\r\n />\r\n ) : null}\r\n {renderExpandedNonPaymentPage && !isCartVariation ? (\r\n <Subtotal\r\n isSuperscriptStaySummarySuite={isSuperscriptStaySummarySuite}\r\n optimizelyHierarchyFlip={optimizelyHierarchyFlip}\r\n {...restProps}\r\n setExcedent={setShowBonusExcedent}\r\n resortLocation={resortLocation}\r\n />\r\n ) : null}\r\n\r\n {renderTotal && !optimizelyHierarchyFlip && !isCartVariation ? (\r\n <Totals\r\n isSuperscriptStaySummarySuite={isSuperscriptStaySummarySuite}\r\n {...restProps}\r\n setExcedent={setShowBonusExcedent}\r\n resortLocation={resortLocation}\r\n />\r\n ) : null}\r\n {renderTotal && !isCartVariation ? (\r\n <DueAmount optimizelyHierarchyFlip={optimizelyHierarchyFlip} {...restProps} />\r\n ) : null}\r\n {renderTotal && !renderExpandedNonPaymentPage && !isCartVariation ? <ParkingFee /> : null}\r\n {renderTotal && optimizelyHierarchyFlip && !isCartVariation ? (\r\n <Totals\r\n optimizelyHierarchyFlip={optimizelyHierarchyFlip}\r\n isDesktop={isDesktop}\r\n isSuperscriptStaySummarySuite={isSuperscriptStaySummarySuite}\r\n {...restProps}\r\n setExcedent={setShowBonusExcedent}\r\n resortLocation={resortLocation}\r\n />\r\n ) : null}\r\n {expanded && isCartVariation && handleSavings() ? (\r\n <TotalSavings\r\n handleSavings={handleSavings}\r\n {...restProps}\r\n isCartVariation={isCartVariation}\r\n shouldDisplayTotalSavings={isHighestRatesEnabled}\r\n />\r\n ) : null}\r\n </SummaryContent>\r\n );\r\n};\r\n\r\nexport default SuitePlanContent;\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../../../../utilities/constants';\r\n\r\nexport const SUMMARY_IMAGES = {\r\n CART_LOGO: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'Cart.svg'),\r\n CART_EMPTY_LOGO: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'CartEmpty.svg'),\r\n CLOSE_MODAL_IMAGE: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'close-icon.svg'),\r\n COUNTER_CONFETTI: getAssetsUrl(ASSETS_LOCATIONS.ANIMATION, 'Shopping_Cart_Confetti_Animation.json')\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { Animation, Box, Text } from '../../../../../ui-kit';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { SUMMARY_IMAGES } from '../assets/images';\r\nimport {\r\n CartBubble,\r\n CartBubleTopArrow,\r\n CartLogoContainer,\r\n CartLogoCounter,\r\n CartLogoImg,\r\n CartLogoWithAnimation,\r\n CartMobileSubtotalTopArrow\r\n} from '../styles';\r\n\r\nconst propTypes = {\r\n packagesCount: PropTypes.number,\r\n toggleOpen: PropTypes.func\r\n};\r\n\r\nconst defaultProps = {\r\n packagesCount: 0,\r\n toggleOpen: () => {}\r\n};\r\n\r\nconst CartLogo = ({ packagesCount = 0, toggleOpen, overlayVisible, summaryTotal, isMobile, isTablet }) => {\r\n const [showAnimation, setShowAnimation] = useState(false);\r\n const [showArrow, setShowArrow] = useState(true);\r\n const currentPackageCount = useRef(packagesCount);\r\n const headerElement = document.querySelector('.header-container');\r\n const [arrowPosition, setArrowPosition] = useState(headerElement?.offsetHeight / 2 + 8);\r\n\r\n const path = window.location.pathname;\r\n const isActivitiesOrDining = path.includes('plan') && (path.includes('activities') || path.includes('dining'));\r\n\r\n const appYPosition = useCallback(() => {\r\n const headerSize = headerElement\r\n ? headerElement?.clientHeight - (headerElement?.clientHeight - 45)\r\n : isMobile\r\n ? 58\r\n : 68;\r\n setArrowPosition(headerElement?.offsetHeight / 2 + 8);\r\n const appScrollYPosition = window.scrollY;\r\n\r\n if (appScrollYPosition > headerSize) setShowArrow(false);\r\n if (appScrollYPosition <= headerSize) setShowArrow(true);\r\n }, [isMobile, headerElement]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', e => appYPosition(e));\r\n return () => {\r\n window.removeEventListener('scroll', e => appYPosition(e));\r\n };\r\n }, [appYPosition]);\r\n\r\n useEffect(() => {\r\n if (packagesCount > currentPackageCount.current) {\r\n setShowAnimation(true);\r\n currentPackageCount.current = packagesCount;\r\n const closeAnimation = setTimeout(() => {\r\n setShowAnimation(false);\r\n }, 1500);\r\n\r\n return () => {\r\n clearTimeout(closeAnimation);\r\n };\r\n } else if (packagesCount !== currentPackageCount.current) {\r\n currentPackageCount.current = packagesCount;\r\n }\r\n }, [packagesCount]);\r\n\r\n return (\r\n <CartLogoContainer textAlign=\"center\" onClick={toggleOpen} overlayVisible={overlayVisible}>\r\n <CartLogoImg src={SUMMARY_IMAGES.CART_LOGO} alt=\"Cart\" />\r\n {packagesCount > 0 ? (\r\n <CartLogoWithAnimation showAnimation={showAnimation}>\r\n {showAnimation ? (\r\n <Box>\r\n <Animation src={SUMMARY_IMAGES.COUNTER_CONFETTI} name=\"CounterConfetti\" autoplay={true} loop={true} />\r\n </Box>\r\n ) : null}\r\n <CartLogoCounter>\r\n <Text fontSize={9} fontWeight=\"bold\" lineHeight={14} color=\"pureWhite.0\">\r\n {packagesCount}\r\n </Text>\r\n </CartLogoCounter>\r\n {isActivitiesOrDining && showArrow && (isMobile || isTablet) ? (\r\n <CartMobileSubtotalTopArrow arrowPosition={arrowPosition} />\r\n ) : null}\r\n </CartLogoWithAnimation>\r\n ) : null}\r\n {!overlayVisible && isActivitiesOrDining && !isMobile && !isTablet ? (\r\n <CartBubble>\r\n <CartBubleTopArrow />\r\n <Text as=\"label\">\r\n {COPY.SUBTOTAL}: <Text as=\"span\">${Number(summaryTotal).toFixed()}</Text>\r\n </Text>\r\n </CartBubble>\r\n ) : null}\r\n </CartLogoContainer>\r\n );\r\n};\r\n\r\nCartLogo.propTypes = propTypes;\r\nCartLogo.defaultProps = defaultProps;\r\n\r\nexport default CartLogo;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport routes from '../../../../../../routes';\r\nimport { TIMER_MODAL_CONTENT_IMAGES } from '../../../../../TimerModalContent/assets/images';\r\nimport { Box, Button, Flex, Text } from '../../../../../ui-kit';\r\nimport * as COPY from '../../utilities/copy';\r\nimport { SUMMARY_IMAGES } from '../assets/images';\r\nimport { EmptyCartImageContainer } from '../styles';\r\n\r\nconst propTypes = {\r\n resortLocationUrlParam: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n resortLocationUrlParam: ''\r\n};\r\n\r\nconst EmptyCartContent = ({ resortLocationUrlParam, isCartExpired }) => {\r\n // Redirect to plan page\r\n const redirectToPlanPage = () => {\r\n window.location.href = resortLocationUrlParam ? `${resortLocationUrlParam}plan` : routes.plan.self;\r\n };\r\n return (\r\n <Flex flexDirection=\"column\" alignItems=\"center\">\r\n <EmptyCartImageContainer mt={['96px', '96px', 10, 10, 10]}>\r\n <img\r\n src={isCartExpired ? TIMER_MODAL_CONTENT_IMAGES.BOOKING_EXPIRED : SUMMARY_IMAGES.CART_EMPTY_LOGO}\r\n alt=\"Empty Cart Logo\"\r\n />\r\n </EmptyCartImageContainer>\r\n <Text color=\"deepLakeBlue.100\" fontSize={[7]} fontWeight=\"bold\" lineHeight={[22]} mt={11}>\r\n {isCartExpired ? COPY.EXPIRED_BOOKING_TITLE : COPY.BOOKING_CART_EMPTY}\r\n </Text>\r\n {isCartExpired ? (\r\n <Text\r\n color=\"deepLakeBlue.100\"\r\n fontSize={[1]}\r\n fontWeight=\"medium\"\r\n lineHeight={[20]}\r\n mt={[7, 7, 7, 3, 3]}\r\n textAlign=\"center\"\r\n width=\"268px\">\r\n {COPY.EXPIRED_BOOKING_TEXT}\r\n </Text>\r\n ) : null}\r\n <Box\r\n width={isCartExpired ? '247px' : '187px'}\r\n mt={isCartExpired ? [7, 7, 7, 4, 4] : ['88px', '88px', '91px', '91px', '91px']}\r\n mb={1}>\r\n <Button variant={isCartExpired ? 'primary' : 'book'} fluid onClick={redirectToPlanPage}>\r\n {isCartExpired ? COPY.RESTART_MY_BOOKING : COPY.BOOKING_CART_BOOK_NOW}\r\n </Button>\r\n </Box>\r\n </Flex>\r\n );\r\n};\r\n\r\nEmptyCartContent.propTypes = propTypes;\r\nEmptyCartContent.defaultProps = defaultProps;\r\n\r\nexport default EmptyCartContent;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { isValidPrice } from '../../../../../utilities/cmpPackagesUtils';\r\nimport { Flex } from '../../../../ui-kit';\r\nimport theme from '../../../../ui-kit/themes/theme';\r\nimport {\r\n HeaderTextDesktop,\r\n HeaderTextMobile,\r\n HeaderTextSubtotal,\r\n HeaderTextTotalContainer,\r\n HeaderTextTotalMobile\r\n} from './styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if the component is on the payment page */\r\n onPaymentPage: PropTypes.bool,\r\n\r\n /** Total for the reservation */\r\n total: PropTypes.number\r\n};\r\n\r\nexport const Header = ({ onPaymentPage, total }) => {\r\n const isDesktop = useMediaQuery({\r\n query: `(min-width: ${theme.breakpoints.lg})`\r\n });\r\n\r\n if (isDesktop) {\r\n return <HeaderTextDesktop lineHeight=\"20px\">{COPY.STAY_SUMMARY_DESKTOP}</HeaderTextDesktop>;\r\n }\r\n\r\n return (\r\n <Flex>\r\n <HeaderTextMobile lineHeight=\"20px\">{COPY.STAY_SUMMARY_MOBILE}</HeaderTextMobile>\r\n {isValidPrice(total) && (\r\n <HeaderTextTotalContainer>\r\n <HeaderTextTotalMobile lineHeight=\"18px\">{`$${total}`}</HeaderTextTotalMobile>\r\n <HeaderTextSubtotal>{onPaymentPage ? '(Total)' : '(Subtotal)'}</HeaderTextSubtotal>\r\n </HeaderTextTotalContainer>\r\n )}\r\n </Flex>\r\n );\r\n};\r\n\r\nHeader.propTypes = propTypes;\r\n\r\nHeader.defaultProps = {\r\n onPaymentPage: false,\r\n total: 0\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { getBrowserId } from '../../../../../utilities/browserUtils';\r\nimport { DATE_FORMATS, PACKAGE_CHARGE_TYPE, ROOM_RATE_TYPE } from '../../../../../utilities/constants';\r\nimport { getNumberOfBillableGuests } from '../../../../../utilities/guestsUtils';\r\nimport { getInteractionsUserId } from '../../../../../utilities/interactionsUtils';\r\nimport { GwDatesWrapper } from '../../../../_internal_date_/gwDatesWrapper';\r\nimport { MODAL_KEYS } from '../../../../GlobalModal/modalSource';\r\nimport Loyalty from '../../../../Loyalty/Loyalty';\r\nimport { LOYALTY_TYPES } from '../../../../Loyalty/utilities/constants';\r\nimport { getTimeRemaining } from '../../../../TimerModalContent/utilities/timerFunctions';\r\nimport { Box } from '../../../../ui-kit';\r\nimport theme from '../../../../ui-kit/themes/theme';\r\nimport {\r\n editCopyByReplaceMultipleStrings,\r\n editCopyByReplaceString,\r\n pluralize\r\n} from '../../../../utilities/copyFunctions';\r\nimport { handleTotal, handleTotalWithTaxes } from '../../../../utilities/utils';\r\nimport { SummaryAccordion } from '../../Accordion';\r\nimport * as COPY from '../utilities/copy';\r\nimport CartOverlay from './CartOverlay';\r\nimport { SuitePlanContent } from './Content';\r\nimport CartLogo from './Content/CartLogo';\r\nimport EmptyCartContent from './Content/EmptyCartContent';\r\nimport { Header } from './Header';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if the cost summary should start open */\r\n shouldStartOpened: PropTypes.bool,\r\n\r\n /** Flag to indicat if the cost summary is on the payment page */\r\n onPaymentPage: PropTypes.bool\r\n};\r\n\r\nexport const Summary = ({\r\n shouldStartOpened,\r\n onPaymentPage,\r\n openModal,\r\n showLoyaltyDisclaimerOnly,\r\n isHighestRatesEnabled,\r\n avoidCartLogoRender,\r\n ...restProps\r\n}) => {\r\n // Overlay State\r\n const [overlayVisible, setOverlayVisible] = useState(false);\r\n // Handle Open Cart\r\n const handleOpenCart = () => {\r\n setOverlayVisible(prev => !prev);\r\n };\r\n\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.md})`\r\n });\r\n\r\n const isTablet = useMediaQuery({ maxWidth: theme.breakpoints.xl });\r\n\r\n const history = useHistory();\r\n\r\n const {\r\n summaryTotal,\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages,\r\n isUserAuthenticated,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n selectedSuite,\r\n resortLocationUrlParam,\r\n isCartVariation,\r\n onCmpPage,\r\n resortLocation,\r\n cartResortLocation,\r\n clearSelectedSuite,\r\n clearSelectedPackages,\r\n resetCartResortLocation,\r\n setExpiredCart,\r\n isCartExpired,\r\n adultsCount,\r\n arrival,\r\n departure,\r\n offerCode,\r\n kidsAges,\r\n updateRateCodes,\r\n numberOfGuests,\r\n loyaltyEarnThresholdNights,\r\n setIsCartOpenClose\r\n } = restProps;\r\n\r\n const handleSummaryHeaderTotalAmount = () => {\r\n return Number(\r\n isUserAuthenticated\r\n ? !onPaymentPage\r\n ? handleTotal(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n currentSelectedPackages\r\n ).toFixed(2)\r\n : handleTotalWithTaxes(\r\n userOffers,\r\n activeOffers,\r\n showLoyalty,\r\n loyaltyOptIn,\r\n pointsBalance,\r\n suiteTotal,\r\n taxesAndFees,\r\n roomAdjustmentTax,\r\n currentSelectedPackages\r\n )\r\n : summaryTotal.toFixed(2)\r\n );\r\n };\r\n\r\n // Cart Has at least suite\r\n const cartHasSuite = selectedSuite && Object.keys(selectedSuite).length > 0;\r\n // Count of packages in the cart\r\n let packagesCount = 0;\r\n if (isCartVariation && cartHasSuite) {\r\n const totalPackages = currentSelectedPackages\r\n .filter(packageItem => !packageItem.isAdjustment)\r\n .reduce((acc, packageItem) => {\r\n if (packageItem.chargeType === PACKAGE_CHARGE_TYPE.personPerDay) {\r\n return acc + 1;\r\n }\r\n if (packageItem.quantity) {\r\n return acc + packageItem.quantity;\r\n }\r\n return acc;\r\n }, 1);\r\n\r\n packagesCount = totalPackages;\r\n }\r\n\r\n // Block body scroll if overlay is visible and mobile\r\n if (isCartVariation && isMobile) {\r\n if (overlayVisible) {\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n document.body.style.overflow = 'auto';\r\n }\r\n }\r\n\r\n // Check if there is a PUSH action on history and close the cart\r\n if (isCartVariation) {\r\n history.listen(action => {\r\n if (action === 'PUSH') {\r\n setOverlayVisible(false);\r\n }\r\n });\r\n }\r\n\r\n // Open Modal for modify cart item\r\n const openModifyCartItemModal = (item, type, variation, confirmationFunction) => {\r\n openModal(\r\n {\r\n keyContentComponent: MODAL_KEYS.CART_MODIFY_MODAL,\r\n params: {\r\n item,\r\n type,\r\n variation,\r\n confirmationFunction\r\n }\r\n },\r\n false\r\n );\r\n };\r\n\r\n // Clear selected suite and packages if cart location is different from resort location\r\n useEffect(() => {\r\n if (!isCartVariation || !cartResortLocation) return;\r\n if (cartResortLocation !== resortLocation) {\r\n clearSelectedSuite();\r\n clearSelectedPackages();\r\n resetCartResortLocation();\r\n }\r\n }, [\r\n cartResortLocation,\r\n clearSelectedPackages,\r\n clearSelectedSuite,\r\n isCartVariation,\r\n resetCartResortLocation,\r\n resortLocation\r\n ]);\r\n\r\n // expiration timer\r\n useEffect(() => {\r\n // Dont run if not on cart version\r\n if (!isCartVariation) return;\r\n // Dont run if no suite selected\r\n if (!selectedSuite || isCartExpired) return;\r\n const expirationTime = localStorage.getItem('timerObj');\r\n // Dont run if no expiration time, this is set byt the timer on Plan page\r\n if (!expirationTime) return;\r\n const countdown = setInterval(() => {\r\n const timer = getTimeRemaining(expirationTime);\r\n\r\n if (timer.total < 0) {\r\n setExpiredCart();\r\n clearSelectedSuite();\r\n clearSelectedPackages();\r\n clearInterval(countdown);\r\n\r\n return;\r\n }\r\n }, 1000);\r\n return () => {\r\n clearInterval(countdown);\r\n };\r\n }, [clearSelectedPackages, clearSelectedSuite, isCartExpired, isCartVariation, selectedSuite, setExpiredCart]);\r\n\r\n const updateSuite = useCallback(\r\n async e => {\r\n e.target.classList.add('disabled');\r\n const roomWithPassRate = selectedSuite?.rateOptions?.find(\r\n rate => rate.rateType === ROOM_RATE_TYPE.roomWithWaterParkPass\r\n );\r\n const requestObject = {\r\n NumberOfAdults: adultsCount,\r\n Arrival: GwDatesWrapper.format(arrival, DATE_FORMATS.default),\r\n Departure: GwDatesWrapper.format(departure, DATE_FORMATS.default),\r\n OfferCode: offerCode,\r\n Location: resortLocation,\r\n RateCode: roomWithPassRate.rateCode,\r\n kidsAges: kidsAges.join(','),\r\n uuid: getBrowserId(),\r\n intUserId: getInteractionsUserId(),\r\n suiteType: selectedSuite.suiteCategory,\r\n isDateChanged: false,\r\n skipCompareValidation: true,\r\n availabilityKey: roomWithPassRate.availabilityKey\r\n };\r\n const newSelectedSuite = {\r\n ...selectedSuite,\r\n ...roomWithPassRate\r\n };\r\n\r\n await updateRateCodes(requestObject, newSelectedSuite);\r\n e?.target?.classList?.remove('disabled');\r\n },\r\n [adultsCount, arrival, departure, kidsAges, offerCode, resortLocation, selectedSuite, updateRateCodes]\r\n );\r\n\r\n useEffect(() => {\r\n const waterPassNoticeContainer = document.querySelector('#water-pass-notice');\r\n if (!waterPassNoticeContainer) return;\r\n\r\n if (\r\n selectedSuite?.rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass &&\r\n selectedSuite?.rateOptions?.length > 1\r\n ) {\r\n waterPassNoticeContainer.style.display = 'block';\r\n const roomWithPassRate = selectedSuite?.rateOptions?.find(\r\n rate => rate.rateType === ROOM_RATE_TYPE.roomWithWaterParkPass\r\n );\r\n const roomOnlyRate = selectedSuite?.rateOptions?.find(\r\n rate => rate.rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass\r\n );\r\n const price = roomWithPassRate?.averageNightlyBaseRate - roomOnlyRate?.averageNightlyBaseRate ?? 0;\r\n\r\n const numberOfBillableGuests = getNumberOfBillableGuests(adultsCount, kidsAges);\r\n const copyObject = {\r\n '<PASSES>': numberOfBillableGuests,\r\n '<PRICE>': Math.round(price),\r\n '<PASSES_TEXT>': pluralize('pass', numberOfBillableGuests)\r\n };\r\n const waterPassNoticeText = document.querySelector('#water-pass-notice-text');\r\n waterPassNoticeText.innerHTML = editCopyByReplaceMultipleStrings(COPY.ROOM_WITH_NO_WATER_PASS, copyObject);\r\n const waterPassNoticeActionText = document.querySelector('#water-pass-notice-action-text > span');\r\n waterPassNoticeActionText.innerHTML = editCopyByReplaceString(\r\n COPY.ADD_PASSES,\r\n pluralize('pass', numberOfGuests),\r\n '<PASSES_TEXT>'\r\n );\r\n waterPassNoticeActionText.addEventListener('click', updateSuite, false);\r\n } else {\r\n // remove the notice\r\n waterPassNoticeContainer.style.display = 'none';\r\n }\r\n }, [numberOfGuests, selectedSuite, updateSuite, adultsCount, kidsAges]);\r\n\r\n if (showLoyaltyDisclaimerOnly) {\r\n return (\r\n <Box mx={3}>\r\n <Loyalty\r\n loyaltyType={LOYALTY_TYPES.earn}\r\n numberOfNights={restProps.numberOfNights}\r\n isUserAuthenticated={isUserAuthenticated}\r\n suitNightRate={restProps.suiteTotal}\r\n pointsMultiplier={restProps.getPointsMultiplier}\r\n loyaltyEarnThresholdNights={loyaltyEarnThresholdNights}\r\n {...restProps}\r\n />\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <SummaryAccordion\r\n style={\r\n !isCartVariation\r\n ? { border: isMobile ? 'none' : '1px solid #CCF3F4', borderRadius: isMobile ? '0 0 24px 24px' : '24px' }\r\n : null\r\n }\r\n shouldStartOpened={!isMobile && onPaymentPage ? false : shouldStartOpened}>\r\n {!isCartVariation ? (\r\n <SummaryAccordion.Header>\r\n <Header onPaymentPage={onPaymentPage} total={handleSummaryHeaderTotalAmount()} />\r\n </SummaryAccordion.Header>\r\n ) : null}\r\n {/* Cart logo */}\r\n {isCartVariation && !avoidCartLogoRender && !onCmpPage ? (\r\n <CartLogo\r\n toggleOpen={handleOpenCart}\r\n packagesCount={packagesCount}\r\n isMobile={isMobile}\r\n isTablet={isTablet}\r\n summaryTotal={summaryTotal}\r\n overlayVisible={overlayVisible}\r\n />\r\n ) : null}\r\n {/* Suite Plan Content */}\r\n <CartOverlay\r\n {...restProps}\r\n setIsCartOpenClose={setIsCartOpenClose}\r\n cartHasPackages={cartHasSuite}\r\n overlayVisible={overlayVisible}\r\n toggleOpen={handleOpenCart}>\r\n {/* Empty Cart */}\r\n {isCartVariation && (!cartHasSuite || isCartExpired) ? (\r\n <EmptyCartContent resortLocationUrlParam={resortLocationUrlParam} isCartExpired={isCartExpired} />\r\n ) : (\r\n <SummaryAccordion.Content isCartVariation={isCartVariation}>\r\n {({ expanded }) => {\r\n return (\r\n <SuitePlanContent\r\n expanded={expanded}\r\n onPaymentPage={onPaymentPage}\r\n openModifyCartItemModal={openModifyCartItemModal}\r\n toggleOpen={handleOpenCart}\r\n updateSuite={updateSuite}\r\n clearSelectedSuite={clearSelectedSuite}\r\n isHighestRatesEnabled={isHighestRatesEnabled}\r\n {...restProps}\r\n />\r\n );\r\n }}\r\n </SummaryAccordion.Content>\r\n )}\r\n </CartOverlay>\r\n </SummaryAccordion>\r\n );\r\n};\r\n\r\nSummary.propTypes = propTypes;\r\n\r\nSummary.defaultProps = {\r\n shouldStartOpened: true\r\n};\r\n","import { connect } from 'react-redux';\r\nimport {\r\n getCheckIn,\r\n getCheckOut,\r\n getTotalNumberOfNights\r\n} from '../../../../../store/componentStores/Dates/dates.selectors';\r\nimport { openModal } from '../../../../../store/componentStores/GlobalModal/globalModal.actions';\r\nimport {\r\n getAdultsCount,\r\n getKidsAges,\r\n getKidsCount,\r\n getNumberOfGuests\r\n} from '../../../../../store/componentStores/Guests/guests.selectors';\r\nimport {\r\n getIsCartActive,\r\n getIsHighestRatesEnabled,\r\n getLoyaltyEarnThresholdNights,\r\n getParkingFeeEndDate,\r\n getParkingFeeStartDate,\r\n getPerNightParkingFee1,\r\n getPerNightParkingFee2,\r\n getPerNightParkingFee3,\r\n getPointsMultiplier,\r\n getshowCaliforniaResortFeeVariation,\r\n getTaxAndFeesLabels\r\n} from '../../../../../store/componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport {\r\n clearPlanPackages,\r\n clearSelectedPackages,\r\n deletePackage,\r\n upsertPackage\r\n} from '../../../../../store/componentStores/Packages/packages.actions';\r\nimport {\r\n getPackagesGrossTotal,\r\n getPackagesTaxes,\r\n getSelectedPackages\r\n} from '../../../../../store/componentStores/Packages/packages.selectors';\r\nimport {\r\n setCartReturnedPageLinkClicked,\r\n setIsCartOpenClose\r\n} from '../../../../../store/componentStores/Plans/plans.actions';\r\nimport { getIsCaliforniaResident } from '../../../../../store/componentStores/Plans/plans.selectors';\r\nimport {\r\n clearSelectedSuite,\r\n pushToDiningPackagesPage,\r\n pushToPackagesPage,\r\n pushToPayment,\r\n updateRateCodes\r\n} from '../../../../../store/componentStores/Suite/suite.actions';\r\nimport {\r\n getParkingFee,\r\n getPromotionalSavings,\r\n getRateType,\r\n getResortFee,\r\n getRoomAdjustmentTax,\r\n getSelectedSuite,\r\n getSuiteGrossTotal,\r\n getSuiteHeadline,\r\n getSuiteTaxes,\r\n getSustainabilityFee,\r\n getTaxesAndFeesDetailAvailability\r\n} from '../../../../../store/componentStores/Suite/suite.selectors';\r\nimport {\r\n getDueAtCheckInAmount,\r\n getDueTodayAmount,\r\n getGrossSummaryTotal,\r\n getSummaryTotal,\r\n getValidOfferCode\r\n} from '../../../../../store/reducers';\r\n\r\nimport isEmpty from 'lodash-es/isEmpty';\r\nimport {\r\n getUserIsLoggedIn,\r\n getUserLoyaltyOptIn,\r\n getUserLoyaltyPointsBalance,\r\n getUserOffers\r\n} from '../../../../../store/componentStores/Account/account.selectors';\r\nimport {\r\n pushToLastVisitedStep,\r\n resetCartResortLocation,\r\n setExpiredCart\r\n} from '../../../../../store/componentStores/Cart/cart.actions';\r\nimport {\r\n getCartLastVisitedStep,\r\n getCartResortLocation,\r\n getExpiredCart\r\n} from '../../../../../store/componentStores/Cart/cart.selectors';\r\nimport {\r\n getResortLocation,\r\n getResortLocationUrlParam\r\n} from '../../../../../store/componentStores/CurrentLodge/currentLodge.selectors';\r\nimport { removeActiveOffer } from '../../../../../store/componentStores/Offer/offer.actions';\r\nimport {\r\n getActiveOffers,\r\n getEmailActiveOffers,\r\n getOfferCode\r\n} from '../../../../../store/componentStores/Offer/offer.selectors';\r\nimport {\r\n getCartReturnedPageLinkClicked,\r\n getIsAPScall,\r\n getIsCartOpenClose\r\n} from '../../../../../store/componentStores/Plans/plans.selectors';\r\nimport { showLoyalty } from '../../../../../store/reducers';\r\nimport { getTestValueAB, TESTS_DICTIONARY } from '../../../../../utilities/ABTesting';\r\nimport { DATE_FORMATS } from '../../../../../utilities/constants';\r\nimport { getDateMonthDayFormat } from '../../../../../utilities/dates';\r\nimport { getGuestCountLabel } from '../../../../../utilities/guestsUtils';\r\nimport { checkIfIsNiagaraProperty } from '../../../../../utilities/navigationUtils';\r\nimport { getTaxesAndFees, getTaxesAndFeesDynamic } from '../../../../../utilities/taxes';\r\nimport { GwDatesWrapper } from '../../../../_internal_date_/gwDatesWrapper';\r\nimport { SUMMARY_CART_VARIATIONS } from '../utilities/constants';\r\nimport { Summary } from './Summary';\r\n\r\nconst getPlanSummaryTotal = (onPaymentPage, state) => {\r\n return onPaymentPage ? getSummaryTotal(state) : getGrossSummaryTotal(state);\r\n};\r\n\r\nconst mapStateToProps = (state, { location, variation }) => {\r\n const { pathname } = location;\r\n\r\n const onPaymentPage = pathname.includes('/payment');\r\n const onActivitiesPage = pathname.includes('/packages-activities');\r\n const onDiningPage = pathname.includes('/packages-dining');\r\n const avoidCartLogoRender = onPaymentPage || onActivitiesPage || onDiningPage;\r\n\r\n const cmpUrls = ['confirmation', /my-reservations\\/[\\w\\d]+/];\r\n const onCmpPage = cmpUrls.some(keyword => {\r\n if (keyword instanceof RegExp) {\r\n return keyword.test(pathname);\r\n }\r\n return pathname.includes(keyword);\r\n });\r\n\r\n const onPlanPage = pathname.includes('/plan');\r\n\r\n const selectedPackages = getSelectedPackages(state.packages);\r\n\r\n const taxAndFeeLabels = getTaxAndFeesLabels(state.lodgeConfig);\r\n\r\n const taxesAndFeesPrices = getTaxesAndFeesDetailAvailability(state.suite);\r\n // This is added until backend changes are ready\r\n const taxesAndFees =\r\n !isEmpty(taxAndFeeLabels) && !isEmpty(taxesAndFeesPrices)\r\n ? getTaxesAndFeesDynamic(taxAndFeeLabels, taxesAndFeesPrices, getPackagesTaxes(state.packages))\r\n : getTaxesAndFees(\r\n getSustainabilityFee(state.suite),\r\n getPackagesTaxes(state.packages) + getSuiteTaxes(state.suite),\r\n getResortFee(state.suite),\r\n getParkingFee(state.suite)\r\n );\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n const optimizelyAddParkingFee1 = getTestValueAB(TESTS_DICTIONARY.optimizelyAddParkingFee1, false);\r\n const optimizelyAddParkingFee2 = getTestValueAB(TESTS_DICTIONARY.optimizelyAddParkingFee2, false);\r\n const optimizelyAddParkingFee3 = getTestValueAB(TESTS_DICTIONARY.optimizelyAddParkingFee3, false);\r\n const checkInDateIsInTheParkingFeeInterval = GwDatesWrapper.isBetween(\r\n GwDatesWrapper.format(getCheckIn(state.dates), DATE_FORMATS.default),\r\n GwDatesWrapper.format(getParkingFeeStartDate(state.lodgeConfig), DATE_FORMATS.default),\r\n GwDatesWrapper.format(getParkingFeeEndDate(state.lodgeConfig), DATE_FORMATS.default)\r\n );\r\n\r\n let currentParkingFeeAmount = 0;\r\n\r\n if (optimizelyAddParkingFee1) {\r\n currentParkingFeeAmount = Number(getPerNightParkingFee1(state.lodgeConfig));\r\n } else if (optimizelyAddParkingFee2) {\r\n currentParkingFeeAmount = Number(getPerNightParkingFee2(state.lodgeConfig));\r\n } else if (optimizelyAddParkingFee3) {\r\n currentParkingFeeAmount = Number(getPerNightParkingFee3(state.lodgeConfig));\r\n }\r\n\r\n const isParkingFeeABCDTestActive =\r\n checkInDateIsInTheParkingFeeInterval &&\r\n (optimizelyAddParkingFee1 || optimizelyAddParkingFee2 || optimizelyAddParkingFee3);\r\n\r\n const parkingFeeTotal = currentParkingFeeAmount * getTotalNumberOfNights(state.dates);\r\n\r\n /* ABCD TEST FOR PARKING FEE */\r\n\r\n const resortLocation = getResortLocation(state.currentLodge);\r\n\r\n return {\r\n checkIn:\r\n variation === SUMMARY_CART_VARIATIONS.CART\r\n ? GwDatesWrapper.format(getCheckIn(state.dates), DATE_FORMATS.monthDayYear)\r\n : getDateMonthDayFormat(getCheckIn(state.dates)),\r\n checkOut:\r\n variation === SUMMARY_CART_VARIATIONS.CART\r\n ? GwDatesWrapper.format(getCheckOut(state.dates), DATE_FORMATS.monthDayYear)\r\n : getDateMonthDayFormat(getCheckOut(state.dates)),\r\n currentSelectedPackages: selectedPackages,\r\n dueTodayAmount: getDueTodayAmount(state),\r\n dueAtCheckinAmount: getDueAtCheckInAmount(state),\r\n isCaliforniaResident: getIsCaliforniaResident(state.plans),\r\n guestCountText: getGuestCountLabel(getAdultsCount(state.guests), getKidsCount(state.guests), variation),\r\n hasAdditionalCharges: taxesAndFees && taxesAndFees.length > 0,\r\n hasSelectedPackages: selectedPackages && selectedPackages.length > 0,\r\n isNiagaraProperty: checkIfIsNiagaraProperty(resortLocation),\r\n rateType: getRateType(state.suite),\r\n numberOfGuests: getNumberOfGuests(state.guests),\r\n numberOfNights: getTotalNumberOfNights(state.dates),\r\n onPaymentPage: onPaymentPage,\r\n packagesTotal: getPackagesGrossTotal(state.packages),\r\n promoCode: getValidOfferCode(state),\r\n promotionalSavings: getPromotionalSavings(state.suite),\r\n suiteTitle: getSuiteHeadline(state.suite),\r\n suiteTotal: getSuiteGrossTotal(state.suite),\r\n summaryTotal: getPlanSummaryTotal(onPaymentPage, state),\r\n taxesAndFees: taxesAndFees,\r\n pointsBalance: getUserLoyaltyPointsBalance(state.account),\r\n loyaltyOptIn: getUserLoyaltyOptIn(state.account),\r\n showLoyalty: showLoyalty(state),\r\n userOffers: getUserOffers(state.account),\r\n activeOffers: getActiveOffers(state.offer),\r\n emailActiveOffers: getEmailActiveOffers(state.offer),\r\n isUserAuthenticated: getUserIsLoggedIn(state.account),\r\n getPointsMultiplier: getPointsMultiplier(state.lodgeConfig),\r\n roomAdjustmentTax: getRoomAdjustmentTax(state),\r\n isParkingFeeABCDTestActive: isParkingFeeABCDTestActive,\r\n showCaliforniaResortFeeVariation: getshowCaliforniaResortFeeVariation(state.lodgeConfig),\r\n currentParkingFeeAmount: currentParkingFeeAmount,\r\n parkingFeeTotal: parkingFeeTotal,\r\n offerCode: getOfferCode(state.offer),\r\n resortLocation,\r\n selectedSuite: getSelectedSuite(state.suite),\r\n resortLocationUrlParam: getResortLocationUrlParam(state.currentLodge),\r\n onCmpPage,\r\n onPlanPage,\r\n isApsCall: getIsAPScall(state.plans),\r\n isCartOpenClose: getIsCartOpenClose(state.plans),\r\n cartReturnedPageLinkClicked: getCartReturnedPageLinkClicked(state.plans),\r\n isCartVariation:\r\n variation === SUMMARY_CART_VARIATIONS.CART &&\r\n getIsCartActive(state.lodgeConfig) &&\r\n getTestValueAB(TESTS_DICTIONARY.optimizelyCartFlow, false),\r\n cartResortLocation: getCartResortLocation(state.cart),\r\n cartLastVisitedStep: getCartLastVisitedStep(state.cart),\r\n isCartExpired: getExpiredCart(state.cart),\r\n adultsCount: getAdultsCount(state.guests),\r\n kidsAges: getKidsAges(state.guests),\r\n arrival: getCheckIn(state.dates),\r\n departure: getCheckOut(state.dates),\r\n loyaltyEarnThresholdNights: getLoyaltyEarnThresholdNights(state.lodgeConfig),\r\n kidsCount: getKidsCount(state.guests),\r\n isHighestRatesEnabled: getIsHighestRatesEnabled(state.lodgeConfig),\r\n avoidCartLogoRender\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n upsertPackage,\r\n deletePackage,\r\n clearPlanPackages,\r\n clearSelectedPackages,\r\n openModal,\r\n resetCartResortLocation: resetCartResortLocation,\r\n pushToLastVisitedStep: pushToLastVisitedStep,\r\n setExpiredCart: setExpiredCart,\r\n setIsCartOpenClose,\r\n setCartReturnedPageLinkClicked,\r\n clearSelectedSuite,\r\n pushToPayment,\r\n pushToDiningPackagesPage,\r\n pushToPackagesPage,\r\n updateRateCodes,\r\n removeActiveOffer\r\n};\r\n\r\nconst PlanSummary = connect(mapStateToProps, mapDispatchToProps)(Summary);\r\n\r\nexport { PlanSummary };\r\n\r\n","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n return {\r\n width,\r\n height\r\n };\r\n}\r\n\r\nconst useWindowDimensions = () => {\r\n const [windowDimensions, setWindowDimensions] = useState(\r\n getWindowDimensions()\r\n );\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n};\r\n\r\nexport default useWindowDimensions;\r\n","import styled from 'styled-components';\r\n\r\nimport { Modal } from '../../../Modal';\r\nimport { Absolute, Box, Flex, Text } from '../../../ui-kit';\r\nimport theme from '../../../ui-kit/themes/theme';\r\n\r\nexport const ModalWrapper = styled(Modal)``;\r\n\r\nexport const CloseButtonContainer = styled(Absolute)`\r\n right: 26px;\r\n top: 30px;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const Content = styled(Box)`\r\n padding: 0px ${theme.space[7]}px;\r\n overflow-x: hidden;\r\n`;\r\n\r\nexport const Divider = styled(Box)`\r\n border: 1px solid ${theme.colors.kiddiePoolBlue[10]};\r\n margin-bottom: ${theme.space[4]}px;\r\n`;\r\n\r\nexport const Header = styled(Flex)`\r\n padding: ${theme.space[7]}px;\r\n color: ${theme.colors.deepLakeBlue[100]};\r\n align-items: center;\r\n width: 100%;\r\n position: relative;\r\n height: 82px;\r\n border-bottom: 1px solid ${theme.colors.snowMountainGrey[100]};\r\n`;\r\n\r\nexport const Title = styled(Text)`\r\n font-weight: ${theme.fontWeights.bold};\r\n color: ${theme.colors.preciousStoneBlue[100]};\r\n font-size: 18px;\r\n padding: 0px;\r\n flex: 1;\r\n text-align: center;\r\n`;\r\n","import React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\nimport theme from '../../../../components/ui-kit/themes/theme';\r\nimport CloseIcon from '../../../ui-kit/icons/Close';\r\nimport { ModalContent } from './ModalContent';\r\nimport { CloseButtonContainer, Divider, Header, ModalWrapper, Title } from './styles';\r\n\r\nexport const SummaryModal = ({ opened, children, ...restProps }) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.sm})`\r\n });\r\n const isTablet = useMediaQuery({\r\n query: `(min-width: ${theme.breakpoints.md}) and (max-width: ${theme.breakpoints.lg})`\r\n });\r\n return (\r\n <ModalWrapper\r\n isOpen={opened}\r\n padding={0}\r\n {...restProps}\r\n height={isMobile || isTablet ? 'calc(100% - 74px)' : null}\r\n borderRadius={isMobile || isTablet ? '25px 25px 0 0' : '25px'}\r\n width={isMobile ? '85%' : '466px'}>\r\n {children}\r\n </ModalWrapper>\r\n );\r\n};\r\n\r\nSummaryModal.CloseButton = ({ onClick }) => {\r\n return (\r\n <CloseButtonContainer onClick={onClick}>\r\n <CloseIcon />\r\n </CloseButtonContainer>\r\n );\r\n};\r\n\r\nSummaryModal.Content = ModalContent;\r\n\r\nSummaryModal.Divider = () => {\r\n return <Divider />;\r\n};\r\n\r\nSummaryModal.Header = ({ children, ...restProps }) => {\r\n return <Header {...restProps}>{children}</Header>;\r\n};\r\n\r\nSummaryModal.Title = ({ children, ...restProps }) => {\r\n return <Title {...restProps}>{children};\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\n\r\nimport theme from '../../../../components/ui-kit/themes/theme';\r\nimport { Box } from '../../../ui-kit';\r\nimport useWindowDimensions from '../../../utilities/hooks/useWindowDimensions';\r\nimport { Content } from './styles';\r\n\r\nexport const ModalContent = ({ children, ...restProps }) => {\r\n const [currentHeight, setCurrentHeight] = useState(0);\r\n const { height } = useWindowDimensions();\r\n\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.sm})`\r\n });\r\n\r\n const isTablet = useMediaQuery({\r\n query: `(min-width: ${theme.breakpoints.md}) and (max-width: ${theme.breakpoints.lg})`\r\n });\r\n\r\n const maxHeightModalsMargin = 1417;\r\n const headerDistance = 68 + 24;\r\n const verticalMarginsLessThanMaxHeight = 141 * 2;\r\n const verticalMarginsAfterMaxHeight = 280 * 2;\r\n\r\n const measuredRef = useCallback(node => {\r\n if (node !== null) {\r\n setCurrentHeight(node.getBoundingClientRect().height);\r\n }\r\n }, []);\r\n\r\n const contentHeight =\r\n height < maxHeightModalsMargin\r\n ? height - (verticalMarginsLessThanMaxHeight + headerDistance)\r\n : height - (verticalMarginsAfterMaxHeight + headerDistance);\r\n\r\n const calculatedHeight = currentHeight > 0 && currentHeight < contentHeight ? currentHeight : contentHeight;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { COSTSUMMARY_TOOLTIP, ROOM_RATE_TYPE } from '../../../../../../utilities/constants';\r\nimport { Box, Text } from '../../../../../ui-kit';\r\nimport Tooltip from '../../../../../ui-kit/Tooltip';\r\nimport QuestionIcon from '../../../../../ui-kit/icons/Question';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst SummaryTooltip = ({ isDesktop, title, children }) => {\r\n return (\r\n (\r\n \r\n {children}\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\nconst propTypes = {\r\n /** Flag that indicates that the reservation has additional charges */\r\n hasAdditionalCharges: PropTypes.bool.isRequired,\r\n\r\n /** Array with the taxes and fees for reservation*/\r\n taxesAndFees: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n amount: PropTypes.number,\r\n tooltip: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nexport const AdditionalCharges = ({ hasAdditionalCharges, taxesAndFees, rateType, addGuestReservation }) => {\r\n const isDesktop = useMediaQuery({\r\n minWidth: theme.breakpoints.sm\r\n });\r\n\r\n if (!hasAdditionalCharges) return null;\r\n\r\n const isRoomOnly = rateType === ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_ADDITIONAL_CHARGES}\r\n \r\n \r\n \r\n {addGuestReservation ? (\r\n \r\n \r\n \r\n {COPY.TAXES}\r\n \r\n \r\n \r\n \r\n {`$${Number(addGuestReservation.costSummary.taxesAndFees.TAX).toFixed(2)}`}\r\n \r\n \r\n \r\n ) : null}\r\n {addGuestReservation?.costSummary?.taxesAndFees?.RESORT ? (\r\n \r\n \r\n \r\n {COPY.RESORT_FEE}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`$${Number(addGuestReservation.costSummary.taxesAndFees.RESORT).toFixed(2)}`}\r\n \r\n \r\n \r\n ) : null}\r\n {!addGuestReservation &&\r\n taxesAndFees.map(item => (\r\n \r\n \r\n \r\n {item.name}\r\n \r\n {item.tooltip && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {`$${item.amount.toFixed(2)}`}\r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nAdditionalCharges.propTypes = propTypes;\r\n\r\nAdditionalCharges.defaultProps = {\r\n hasAdditionalCharges: false,\r\n taxesAndFees: [],\r\n iconSize: 16\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport { Accordion } from 'react-accessible-accordion';\r\n\r\nconst BAR_WIDTH = '10px';\r\n\r\nexport const AccordionStyle = styled(Accordion)`\r\n cursor: pointer;\r\n`;\r\n\r\nexport const ArrowIcon = styled.div`\r\n height: 20px;\r\n width: 20px;\r\n display: inline-block;\r\n padding: 0.5em;\r\n margin-left: 0.5em;\r\n position: relative;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n & > span {\r\n top: ${BAR_WIDTH};\r\n position: absolute;\r\n background-color: transparent;\r\n width: ${BAR_WIDTH};\r\n height: 5px;\r\n display: block;\r\n float: right;\r\n border-radius: 2px;\r\n &:after {\r\n width: ${BAR_WIDTH};\r\n content: '';\r\n background-color: #28384c;\r\n height: 1px;\r\n display: block;\r\n float: right;\r\n transition: all 0.7s cubic-bezier(0.25, 1.7, 0.35, 0.8);\r\n }\r\n }\r\n\r\n ${({ isExpanded }) => {\r\n if (isExpanded) {\r\n return css`\r\n & > span:nth-child(1) {\r\n &:after {\r\n transform-origin: center center;\r\n transform: rotate(-85deg);\r\n }\r\n }\r\n & > span:nth-child(2) {\r\n &:after {\r\n transform-origin: center center;\r\n transform: rotate(85deg);\r\n }\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\nexport const Leftbar = styled.span`\r\n left: 0;\r\n transform: rotate(45deg);\r\n &:after {\r\n border-radius: 6px 10px 10px 6px;\r\n }\r\n`;\r\n\r\nexport const RightBar = styled.span`\r\n left: ${BAR_WIDTH};\r\n transform: rotate(-45deg);\r\n &:after {\r\n border-radius: 10px 6px 6px 10px;\r\n z-index: -1;\r\n }\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionItemButton,\r\n AccordionItemHeading,\r\n AccordionItemPanel,\r\n AccordionItemState\r\n} from 'react-accessible-accordion';\r\nimport { isValidPrice } from '../../../../../../utilities/cmpPackagesUtils';\r\nimport { Flex, Text } from '../../../../../ui-kit';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\nimport { AccordionStyle, ArrowIcon, Leftbar, RightBar } from '../styles';\r\n\r\nconst propTypes = {\r\n /** Deposit paid for the reservation */\r\n depositPaid: PropTypes.number.isRequired,\r\n\r\n /** Due amount at check in */\r\n dueAtCheckinAmount: PropTypes.number.isRequired\r\n};\r\n\r\nconst DepositSummary = props => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_DEPOSIT_PAID}\r\n \r\n \r\n {({ expanded }) => (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n\r\n \r\n {`$${props.totalDeposit.toFixed(2)}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_CABANA_DEPOSIT}\r\n \r\n \r\n \r\n {`$${props.cabanaDeposit.toFixed(2)}`}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {COPY.SUMMARY_SUITE_RESERVATION}\r\n \r\n \r\n \r\n {`$${props.roomDeposit.toFixed(2)}`}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nconst SimpleDeposit = ({ depositPaid, newCMPGuestsCount, addGuestReservation }) => {\r\n const removeNewGuestsValue = () => {\r\n return `$${(depositPaid - newCMPGuestsCount?.feeGuests * newCMPGuestsCount?.extraPerGuestAmount).toFixed(2)}`;\r\n };\r\n return (\r\n <>\r\n {newCMPGuestsCount?.feeGuests > 0 && !addGuestReservation ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_DEPOSIT_PAID}\r\n \r\n \r\n {({ expanded }) => (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n\r\n \r\n {`$${depositPaid.toFixed(2)}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_SUITE_RESERVATION}\r\n \r\n \r\n \r\n {`${removeNewGuestsValue()}`}\r\n \r\n \r\n \r\n \r\n \r\n {newCMPGuestsCount?.feeGuests}{' '}\r\n {newCMPGuestsCount?.feeGuests > 1 ? COPY.NEW_GUESTS : COPY.NEW_GUEST}\r\n {' '}\r\n \r\n \r\n \r\n {`$${(\r\n newCMPGuestsCount?.feeGuests * newCMPGuestsCount?.extraPerGuestAmount\r\n ).toFixed(2)}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n {COPY.SUMMARY_DEPOSIT_PAID}\r\n \r\n \r\n \r\n {`$${\r\n addGuestReservation ? addGuestReservation.costSummary.depositPaid.toFixed(2) : depositPaid.toFixed(2)\r\n }`}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport const Deposit = ({\r\n cabanaDeposit,\r\n depositPaid,\r\n dueAtCheckinAmount,\r\n roomDeposit,\r\n newCMPGuestsCount,\r\n addGuestReservation\r\n}) => {\r\n const amountsNonValid = !isValidPrice(depositPaid) || !isValidPrice(dueAtCheckinAmount);\r\n if (amountsNonValid) return null;\r\n const totalDeposit = cabanaDeposit + roomDeposit;\r\n\r\n return (\r\n <>\r\n \r\n {cabanaDeposit > 0 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n {COPY.SUMMARY_DUE_CHECKIN}\r\n \r\n \r\n \r\n \r\n {`$${\r\n addGuestReservation\r\n ? addGuestReservation.costSummary.dueAtCheckIn.toFixed(2)\r\n : dueAtCheckinAmount.toFixed(2)\r\n }`}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nDeposit.propTypes = propTypes;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Text } from '../../../../../ui-kit';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nconst propTypes = {\r\n /** Flag that indicates that the reservation has discount charges */\r\n hasDiscountCharges: PropTypes.bool.isRequired,\r\n\r\n /** Vyager points for reservation*/\r\n voyagerPointsDiscount: PropTypes.number,\r\n\r\n /** Offers points for reservation*/\r\n offersPointsDiscount: PropTypes.number\r\n};\r\n\r\nexport const DiscountCharges = ({ hasDiscountCharges, voyagerPointsDiscount, offersPointsDiscount }) => {\r\n if (!hasDiscountCharges) return null;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_DISCOUNT_CHANGES}\r\n \r\n \r\n \r\n\r\n {voyagerPointsDiscount !== 0 && (\r\n \r\n \r\n \r\n {COPY.SUMMARY_VOYAGERS_POINTS_APPLIED}\r\n \r\n \r\n \r\n {`-$${String(voyagerPointsDiscount.toFixed(2)).replace('-', '')}`}\r\n \r\n \r\n )}\r\n\r\n {offersPointsDiscount !== 0 && (\r\n \r\n \r\n \r\n {COPY.SUMMARY_BONNUS_DEALS_APPLIED}\r\n \r\n \r\n \r\n {`-$${String(offersPointsDiscount.toFixed(2)).replace('-', '')}`}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nDiscountCharges.propTypes = propTypes;\r\n\r\nDiscountCharges.defaultProps = {\r\n hasDiscountCharges: false,\r\n voyagerPointsDiscount: 0,\r\n offersPointsDiscount: 0\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { pluralize } from '../../../../../../components/utilities/copyFunctions';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nimport { GwDatesWrapper } from '../../../../../_internal_date_/gwDatesWrapper';\r\nimport { CheckInOutDate } from '../../../../../CheckInOutDates';\r\nimport { Flex, Text } from '../../../../../ui-kit';\r\nimport ArrowRightIcon from '../../../../../ui-kit/icons/ArrowRight';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nconst propTypes = {\r\n /** Checkin Date in the MM/DD format */\r\n checkIn: PropTypes.string.isRequired,\r\n\r\n /** Checkout Date in the MM/DD format */\r\n checkOut: PropTypes.string.isRequired,\r\n\r\n /** Number of nights for the reservation */\r\n numberOfNights: PropTypes.number.isRequired\r\n};\r\n\r\nexport const Header = ({ checkIn, checkOut, numberOfNights, hasNewGuests, addGuestReservation }) => {\r\n const numberOfNightsLabel = nights => `${nights} ${pluralize('night', nights)}`;\r\n const newGuestsBold = {COPY.NEW_GUESTS_BOLD};\r\n return (\r\n <>\r\n {(hasNewGuests || addGuestReservation) && (\r\n \r\n )}\r\n \r\n \r\n \r\n {COPY.SUMMARY_CHECKIN}\r\n \r\n \r\n {addGuestReservation ? GwDatesWrapper.format(addGuestReservation.arrival, 'MM/DD') : checkIn}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_CHECKOUT}\r\n \r\n \r\n {addGuestReservation ? GwDatesWrapper.format(addGuestReservation.departure, 'MM/DD') : checkOut}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {addGuestReservation\r\n ? numberOfNightsLabel(\r\n GwDatesWrapper.diff(addGuestReservation.departure, addGuestReservation.arrival, 'days')\r\n )\r\n : numberOfNightsLabel(numberOfNights)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nHeader.propTypes = propTypes;\r\n","import { useCallback, useState } from 'react';\r\nimport LodgeApiClient from '../../api/clients/LodgeApiClient';\r\n//import { waitFor } from '../../utilities/waitFor';\r\n/**\r\n * This hook is to get the user data for lead gen\r\n * @returns array with status, fetch function and reset function\r\n */\r\nconst useGetLodgeConfig = () => {\r\n // State Valeus on the hook\r\n const [isCalled, toggleCalled] = useState(false);\r\n const [hasError, toggleError] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n\r\n // Reset funciton\r\n const reset = useCallback(() => {\r\n toggleCalled(false);\r\n toggleError(false);\r\n setErrorMessage('');\r\n }, []);\r\n\r\n const fetch = useCallback(\r\n async (property, application, { onSuccess = () => {}, toggleLoading = () => {}, onFailure = () => {} }) => {\r\n reset();\r\n toggleLoading(true);\r\n\r\n const apiClient = new LodgeApiClient();\r\n\r\n try {\r\n const result = await apiClient.getConfiguration(property, application);\r\n toggleCalled(true);\r\n toggleLoading(false);\r\n onSuccess(result.data);\r\n } catch (error) {\r\n toggleCalled(true);\r\n toggleLoading(false);\r\n toggleError(true);\r\n setErrorMessage(error);\r\n onFailure(error);\r\n }\r\n },\r\n [reset]\r\n );\r\n\r\n return [fetch, reset, { isCalled, hasError, errorMessage }];\r\n};\r\n\r\nexport default useGetLodgeConfig;\r\n","import { isString } from 'lodash-es';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\nimport useGetLodgeConfig from '../../../../../../hooks/api_hooks/useGetLodgeConfig';\r\nimport { getTheFirstElementOfArray } from '../../../../../../utilities/arraysUtils';\r\nimport {\r\n LATE_CHECKOUT_PREFIXES,\r\n PACKAGE_CHARGE_TYPE,\r\n PACKAGE_TYPE,\r\n PARKING_PACKAGE_CODE,\r\n ROOM_RATE_TYPE\r\n} from '../../../../../../utilities/constants';\r\nimport { addNewTag } from '../../../../../../utilities/packagesUtils';\r\nimport { Box, Text } from '../../../../../ui-kit';\r\nimport { editCopyByReplaceMultipleStrings, pluralize } from '../../../../../utilities/copyFunctions';\r\nimport { SummaryContent } from '../../../Content';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst propTypes = {\r\n /** Currently selected packages for the reservation */\r\n packages: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n packageName: PropTypes.string.isRequired,\r\n packageCode: PropTypes.string.isRequired,\r\n amount: PropTypes.number.isRequired,\r\n quantity: PropTypes.number.isRequired\r\n }).isRequired\r\n ),\r\n\r\n /** Flag to indicate if there are selected packages for the reservation */\r\n hasSelectedPackages: PropTypes.bool,\r\n\r\n /** Newly added package code */\r\n newAddedPackageCode: PropTypes.string\r\n};\r\n\r\nconst PKGS_WITH_NO_QTY = [LATE_CHECKOUT_PREFIXES.code, PARKING_PACKAGE_CODE];\r\n\r\nexport const PackagesList = ({\r\n packages,\r\n hasSelectedPackages,\r\n newAddedPackageCode,\r\n totalBillAndNonBillGuest,\r\n numberOfNights,\r\n rateType,\r\n resortLocation,\r\n addGuestReservation\r\n}) => {\r\n const [fetchUFFPackageCode] = useGetLodgeConfig();\r\n\r\n const getUFFPackageCode = useCallback(async () => {\r\n const onSuccess = result => {\r\n const uffJSON = JSON.parse(result.uffPackageCodes);\r\n const UFF_CODES = Object.values(uffJSON);\r\n PKGS_WITH_NO_QTY.push(...UFF_CODES);\r\n };\r\n const onFailure = err => console.log(err);\r\n\r\n await fetchUFFPackageCode(resortLocation?.resortLocation, 'uff', { onSuccess, onFailure });\r\n }, [resortLocation, fetchUFFPackageCode]);\r\n\r\n const getUFFPackageCodeTriggered = useRef(false);\r\n useEffect(() => {\r\n if (!getUFFPackageCodeTriggered.current) {\r\n getUFFPackageCodeTriggered.current = true;\r\n getUFFPackageCode();\r\n }\r\n }, [getUFFPackageCode]);\r\n\r\n const objectForCopy = {\r\n '': totalBillAndNonBillGuest,\r\n '': numberOfNights,\r\n '': pluralize('guest', totalBillAndNonBillGuest),\r\n '': pluralize('night', numberOfNights)\r\n };\r\n\r\n const areWaterParkPassesIncluded = rateType !== ROOM_RATE_TYPE.roomOnlyWithoutWaterParkPass;\r\n\r\n return (\r\n <>\r\n {addGuestReservation ? : null}\r\n {addGuestReservation\r\n ? addGuestReservation.addOns.map((item, index) => {\r\n return (\r\n \r\n \r\n \r\n {item?.quantity ? (\r\n \r\n {item.quantity} {item.content.title}\r\n \r\n ) : (\r\n \r\n {item.content.title}\r\n \r\n )}\r\n {item?.splash && }\r\n \r\n \r\n \r\n \r\n {item.totalPrice === 0 ? COPY.SUMMARY_INCLUDED_REGULAR : `$${item.totalPrice.toFixed(2)}`}\r\n \r\n \r\n \r\n );\r\n })\r\n : null}\r\n {areWaterParkPassesIncluded && !addGuestReservation ? (\r\n <>\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_WATER_PARK_PASSES}\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_INCLUDED}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n\r\n {hasSelectedPackages &&\r\n !addGuestReservation &&\r\n packages.map((item, index) => {\r\n // This is for the Dining deals name to match with the rest of the app\r\n const copyObject = {\r\n '': isString(item.packageAllowance) ? item.packageAllowance : `$${item.packageAllowance}`,\r\n '': getTheFirstElementOfArray(item.packageName.split(' '))\r\n };\r\n const packageName =\r\n item.packageType === PACKAGE_TYPE.dining && item.packageAllowance !== 0\r\n ? editCopyByReplaceMultipleStrings(COPY.SUMMARY_DINING_CREDIT_PACKAGE_TITLE, copyObject)\r\n : item.packageName;\r\n\r\n return item.quantity === 0 ? null : (\r\n \r\n \r\n \r\n \r\n {`${\r\n PKGS_WITH_NO_QTY.some(code => item.packageCode.includes(code)) ||\r\n (item.packageType === PACKAGE_TYPE.dining &&\r\n (item.packageCharge === PACKAGE_CHARGE_TYPE.personPerDay || item.packageAllowance !== 0))\r\n ? ''\r\n : item.quantity\r\n } `}\r\n {packageName}\r\n \r\n {addNewTag(newAddedPackageCode, item.packageCode) && }\r\n \r\n {item.packageType === PACKAGE_TYPE.dining && item.packageCharge === PACKAGE_CHARGE_TYPE.personPerDay ? (\r\n \r\n \r\n {editCopyByReplaceMultipleStrings(COPY.DINING_DEALS_DETAILS, objectForCopy)}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n {`$${item.amount.toFixed(2)}`}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nPackagesList.propTypes = propTypes;\r\n\r\nPackagesList.defaultProps = {\r\n hasSelectedPackages: false\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Flex, Text } from '../../../../../ui-kit';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { Divider } from '../../../../../../pages/ReservationDetail/styles';\r\nimport AlertSuccessIcon from '../../../../../ui-kit/icons/AlertSuccessIcon';\r\nimport theme from '../../../../../ui-kit/themes/theme';\r\nimport { editCopyByReplaceString } from '../../../../../utilities/copyFunctions';\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nconst propTypes = {\r\n /** Title of the suite */\r\n suiteTitle: PropTypes.string.isRequired,\r\n\r\n /** Total for the suite */\r\n suiteTotal: PropTypes.number.isRequired,\r\n\r\n /** Promo code used in the reservation */\r\n promoCode: PropTypes.string,\r\n\r\n /** Number of guests as `1 Adult, 0 Kid` or `2 Adults, 2 Kids` */\r\n guestCountText: PropTypes.string.isRequired,\r\n\r\n /** Flag for the suite that has new guests added from CMP */\r\n hasNewGuests: PropTypes.bool,\r\n\r\n /** Number of new guests added from CMP */\r\n newCMPGuestsCount: PropTypes.object\r\n};\r\n\r\nexport const SuiteDetails = ({\r\n suiteTitle,\r\n suiteName,\r\n suiteTotal,\r\n guestCountText,\r\n promoCode,\r\n hasNewGuests,\r\n newCMPGuestsCount,\r\n addGuestReservation\r\n}) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.md})`\r\n });\r\n\r\n const newGuestsWithFeeTotal = () => {\r\n const total =\r\n newCMPGuestsCount?.feeGuests > 0\r\n ? `$${(newCMPGuestsCount?.feeGuests * newCMPGuestsCount?.extraPerGuestAmount).toFixed(2)}`\r\n : `$0.00`;\r\n return total;\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {addGuestReservation ? addGuestReservation?.product.name : suiteName ? suiteName : suiteTitle}\r\n \r\n \r\n \r\n \r\n {addGuestReservation\r\n ? `$${addGuestReservation?.product.totalPrice.toFixed(2)}`\r\n : `$${\r\n newCMPGuestsCount?.feeGuests > 0\r\n ? (suiteTotal - newCMPGuestsCount?.feeGuests * newCMPGuestsCount?.extraPerGuestAmount).toFixed(2)\r\n : suiteTotal.toFixed(2)\r\n }`}\r\n \r\n \r\n \r\n {isMobile ? null : !addGuestReservation ? : null}\r\n {hasNewGuests && !addGuestReservation && (\r\n <>\r\n {newCMPGuestsCount?.unbillableGuests > 0 ? (\r\n <>\r\n \r\n \r\n \r\n {editCopyByReplaceString(\r\n COPY.NEW_GUESTS_ADDED,\r\n String(newCMPGuestsCount?.unbillableGuests),\r\n ''\r\n )}\r\n \r\n \r\n \r\n {`$0.00`}\r\n \r\n \r\n \r\n \r\n \r\n {COPY.NEW_GUESTS_IN_BASE_OCUPANCY}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n {newCMPGuestsCount?.feeGuests > 0 ? (\r\n <>\r\n \r\n \r\n \r\n {editCopyByReplaceString(\r\n COPY.NEW_GUESTS_ADDED,\r\n String(newCMPGuestsCount?.feeGuests),\r\n ''\r\n )}\r\n \r\n \r\n \r\n \r\n {newGuestsWithFeeTotal()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.NEW_GUESTS_IN_MAX_OCUPANCY}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {guestCountText}\r\n {((addGuestReservation && addGuestReservation.guests?.splash) || hasNewGuests) && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {(promoCode || (addGuestReservation && addGuestReservation?.offerCode)) && (\r\n \r\n \r\n \r\n {`${COPY.SUMMARY_CODE}: ${addGuestReservation?.offerCode ? addGuestReservation?.offerCode : promoCode} ${\r\n COPY.SUMMARY_APPLIED\r\n }`}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nSuiteDetails.propTypes = propTypes;\r\n\r\nSuiteDetails.defaultProps = {\r\n iconSize: 16\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { NOTIFICATION_TYPE } from '../../../../../../utilities/constants';\r\nimport { ALERT_TYPES, Alert } from '../../../../../Alert';\r\nimport { Box, Text } from '../../../../../ui-kit';\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if the alert is shown */\r\n showNotification: PropTypes.bool,\r\n\r\n /** Message for the notification */\r\n notificationMessage: PropTypes.string,\r\n\r\n /** Type for the notification */\r\n notificationType: PropTypes.string\r\n};\r\n\r\nexport const SummaryAlert = ({ showNotification, notificationMessage, notificationType }) => {\r\n const [renderAlert, setRenderAlert] = useState(showNotification);\r\n\r\n useEffect(() => {\r\n setRenderAlert(showNotification);\r\n }, [showNotification]);\r\n\r\n if (!renderAlert) return null;\r\n\r\n const variant = notificationType === NOTIFICATION_TYPE.failed ? ALERT_TYPES.warning : ALERT_TYPES.success;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {ReactHtmlParser(notificationMessage)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSummaryAlert.propTypes = propTypes;\r\nSummaryAlert.defaultProps = {\r\n showNotification: false,\r\n notificationType: NOTIFICATION_TYPE.success\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Text } from '../../../../../ui-kit';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nimport { isValidPrice } from '../../../../../../utilities/cmpPackagesUtils';\r\nimport { SummaryContent } from '../../../Content';\r\n\r\nconst propTypes = {\r\n /** Summary total for the reservation */\r\n total: PropTypes.number.isRequired\r\n};\r\n\r\nexport const Total = ({ total, addGuestReservation }) => {\r\n if (!isValidPrice(Number(total))) return null;\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_TOTAL}\r\n \r\n \r\n \r\n {`$${\r\n addGuestReservation ? addGuestReservation?.costSummary?.total?.toFixed(2) : total.toFixed(2)\r\n }`}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTotal.propTypes = propTypes;\r\n","import React from 'react';\r\n\r\nimport { SummaryContent } from '../../../Content';\r\nimport { AdditionalCharges } from './AdditionalCharges';\r\nimport { Deposit } from './Deposit';\r\nimport { DiscountCharges } from './DiscountCharges';\r\nimport { Header } from './Header';\r\nimport { PackagesList } from './PackagesList';\r\nimport { SuiteDetails } from './SuiteDetails';\r\nimport { SummaryAlert } from './SummaryAlert';\r\nimport { Total } from './Total';\r\n\r\nexport const Content = ({ suppressRate, ...restProps }) => {\r\n return (\r\n \r\n \r\n
\r\n {!suppressRate && }\r\n \r\n {!suppressRate && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { SummaryModal } from '../../Modal';\r\nimport * as COPY from './utilities/copy';\r\n\r\nimport { Content } from './Content';\r\n\r\nconst propTypes = {\r\n /** Flag to indicate if the summary is visible or not */\r\n opened: PropTypes.bool,\r\n /** Function that executes when click on the Close Button */\r\n onClose: PropTypes.func\r\n};\r\n\r\nexport const Summary = ({ opened, onClose, ...restProps }) => {\r\n return (\r\n \r\n \r\n {COPY.SUMMARY_TITLE}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSummary.propTypes = propTypes;\r\nSummary.defaultProps = {\r\n opened: false\r\n};\r\n","import { connect } from 'react-redux';\r\nimport { Summary } from './Summary';\r\n\r\nimport {\r\n cmpDataSelector,\r\n getAddGuestReservationObj,\r\n getAdults,\r\n getArrivalDateObject,\r\n getBillableGuest,\r\n getCabanaDeposit,\r\n getDepartureDateObject,\r\n getDepositePaid,\r\n getKids,\r\n getNumberOfNights,\r\n getOffersDiscountApplied,\r\n getParkingFee,\r\n getPointsDiscountApplied,\r\n getPrivateLodgingFee,\r\n getRateType,\r\n getResortFee,\r\n getRoomDeposit,\r\n getSuiteDetails,\r\n getSuppressRate,\r\n getSustainabilityFee,\r\n getTaxesAndFeesForReservation,\r\n getTotalBillAndNonBillGuest,\r\n getTotalRoomRate\r\n} from '../../../../../store/componentStores/ReservationDetailsEntity/reservationDetailsEntity.selectors';\r\nimport {\r\n getAditionalPackagesFromAddApackage,\r\n getDueAtCheckinAmountWithAdditionalPackages,\r\n getSummaryTotalWithAdditionalPackages,\r\n getTaxesAmountWithAdditionalPackages,\r\n packagesWithAmountFromReservationData\r\n} from '../../../../../store/reducers';\r\n\r\nimport { isEmpty } from 'lodash-es';\r\nimport { getTaxAndFeesLabels } from '../../../../../store/componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport { isArrayEmpty } from '../../../../../utilities/arraysUtils';\r\nimport { getDateMonthDayFormat } from '../../../../../utilities/dates';\r\nimport { getGuestCountLabel } from '../../../../../utilities/guestsUtils';\r\nimport { getTaxesAndFees, getTaxesAndFeesDynamic } from '../../../../../utilities/taxes';\r\n\r\nconst mapStateToProps = state => {\r\n const reservationDetails = cmpDataSelector(state);\r\n const packages = packagesWithAmountFromReservationData(state) ?? [];\r\n const { offerCode } = getSuiteDetails(reservationDetails);\r\n const hasPackages = packages && !isArrayEmpty(packages);\r\n\r\n const taxAndFeeLabels = getTaxAndFeesLabels(state.lodgeConfig);\r\n\r\n const taxesAndFeesPrices = getTaxesAndFeesForReservation(state.entities.reservationDetails);\r\n\r\n const taxesAndFees =\r\n !isEmpty(taxAndFeeLabels) && !isEmpty(taxesAndFeesPrices)\r\n ? getTaxesAndFeesDynamic(taxAndFeeLabels, taxesAndFeesPrices)\r\n : getTaxesAndFees(\r\n getSustainabilityFee(reservationDetails),\r\n getTaxesAmountWithAdditionalPackages(state),\r\n getResortFee(reservationDetails),\r\n getParkingFee(reservationDetails),\r\n getPrivateLodgingFee(reservationDetails)\r\n );\r\n\r\n const addGuestReservation = getAddGuestReservationObj(reservationDetails);\r\n\r\n const voyagerPointsDiscount = getPointsDiscountApplied(reservationDetails);\r\n const offersPointsDiscount = getOffersDiscountApplied(reservationDetails);\r\n const hasDiscountCharges = voyagerPointsDiscount || offersPointsDiscount ? true : false;\r\n\r\n return {\r\n additionalPackages: getAditionalPackagesFromAddApackage(state, true),\r\n checkIn: getDateMonthDayFormat(getArrivalDateObject(reservationDetails)),\r\n checkOut: getDateMonthDayFormat(getDepartureDateObject(reservationDetails)),\r\n depositPaid: getDepositePaid(reservationDetails),\r\n dueAtCheckinAmount: getDueAtCheckinAmountWithAdditionalPackages(state),\r\n guestCountText: getGuestCountLabel(\r\n addGuestReservation ? addGuestReservation?.guests?.adults : getAdults(reservationDetails),\r\n addGuestReservation ? addGuestReservation?.guests?.children?.length : getKids(reservationDetails),\r\n null,\r\n true\r\n ),\r\n addGuestReservation: addGuestReservation,\r\n hasAdditionalCharges: taxesAndFees && taxesAndFees.length > 0,\r\n hasSelectedPackages: hasPackages,\r\n numberOfGuests: getBillableGuest(reservationDetails),\r\n numberOfNights: getNumberOfNights(reservationDetails),\r\n packages: packages,\r\n promoCode: offerCode,\r\n resortLocation: state.currentLodge,\r\n suiteTotal: getTotalRoomRate(reservationDetails),\r\n taxesAndFees: taxesAndFees,\r\n total: getSummaryTotalWithAdditionalPackages(state),\r\n suppressRate: getSuppressRate(reservationDetails),\r\n cabanaDeposit: getCabanaDeposit(reservationDetails),\r\n roomDeposit: getRoomDeposit(reservationDetails),\r\n hasDiscountCharges,\r\n voyagerPointsDiscount,\r\n offersPointsDiscount,\r\n totalBillAndNonBillGuest: getTotalBillAndNonBillGuest(reservationDetails),\r\n rateType: getRateType(reservationDetails)\r\n };\r\n};\r\n\r\nconst ReservationSummary = connect(mapStateToProps, null)(Summary);\r\n\r\nexport { ReservationSummary };\r\n\r\n","import { ASSETS_LOCATIONS, getAssetsUrl } from '../../../utilities/constants';\r\nexport const TIMER_MODAL_CONTENT_IMAGES = {\r\n CLOSE: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'close.svg'),\r\n BOOKING_EXPIRED: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'booking-expired.svg'),\r\n BOOKING_ABOUT_TO_EXPIRED: getAssetsUrl(ASSETS_LOCATIONS.SVG, 'booking-about-to-expires.svg')\r\n};\r\n","export function addMinutes(date, minutes) {\r\n return new Date(date.getTime() + Number(minutes) * 60000);\r\n}\r\nexport function getTimeRemaining(endtime) {\r\n const total = Date.parse(endtime) - Date.parse(new Date());\r\n const mins = Math.floor((total / 1000 / 60) % 60);\r\n const secs = Math.floor((total / 1000) % 60);\r\n const minutesT = mins < 10 ? '0' + mins : mins;\r\n const secondsT = secs < 10 ? '0' + secs : secs;\r\n return {\r\n total,\r\n minutesT,\r\n secondsT\r\n };\r\n}\r\n","import colors from '../themes/colors';\r\n\r\nexport const VARIANTS = {\r\n YELLOW: {\r\n color: colors.deepLakeBlue[100],\r\n background: colors.digitalYellowOrange[100],\r\n borderColor: colors.digitalYellowOrange[100]\r\n },\r\n DARK: {\r\n color: colors.snowMountainGrey[50],\r\n background: colors.deepLakeBlue[100],\r\n borderColor: colors.deepLakeBlue[100]\r\n },\r\n GREEN: {\r\n color: colors.snowMountainGrey[50],\r\n background: colors.deepForestGreen[100],\r\n borderColor: colors.deepForestGreen[100]\r\n },\r\n LIGHT: {\r\n color: colors.deepLakeBlue[100],\r\n background: colors.kiddiePoolBlue[50],\r\n borderColor: colors.kiddiePoolBlue[50]\r\n },\r\n BLACK: {\r\n color: colors.pureWhite[0],\r\n background: colors.nightSkyBlack[100],\r\n borderColor: colors.nightSkyBlack[100]\r\n },\r\n RED: {\r\n color: colors.pureWhite[0],\r\n background: colors.errorOrange,\r\n borderColor: colors.errorOrange\r\n },\r\n BLUE: {\r\n color: colors.pureWhite[0],\r\n background: colors.preciousStoneBlue[100],\r\n borderColor: colors.preciousStoneBlue[100]\r\n },\r\n LIGHT_BLUE: {\r\n color: colors.deepLakeBlue[100],\r\n background: colors.kiddiePoolBlue[100],\r\n borderColor: colors.kiddiePoolBlue[100]\r\n },\r\n FOCUS_BLUE: {\r\n color: colors.pureWhite[0],\r\n background: colors.focusBlue,\r\n borderColor: colors.focusBlue\r\n },\r\n DEEP_ORANGE_100: {\r\n color: colors.pureWhite[0],\r\n background: colors.deepOrange[100],\r\n borderColor: colors.deepOrange[100]\r\n },\r\n SUCCESS_GREEN: {\r\n color: colors.pureWhite[0],\r\n background: colors.successGreen,\r\n borderColor: colors.successGreen\r\n },\r\n YELLOW_WHITE_FONT: {\r\n color: colors.pureWhite[0],\r\n background: colors.digitalYellowOrange[100],\r\n borderColor: colors.digitalYellowOrange[100]\r\n },\r\n BLACK_WHITE_BORDER: {\r\n color: colors.pureWhite[0],\r\n background: colors.nightSkyBlack[100],\r\n borderColor: colors.pureWhite[0]\r\n }\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport Text from '../Text';\r\nimport theme from '../themes/theme';\r\n\r\nexport const StyledBadge = styled(Text)`\r\n border-radius: ${({ borderRadius }) => (borderRadius ? borderRadius : theme.radii[1] + 'px')};\r\n border: ${({ borderColor }) => `1px solid ${borderColor}`};\r\n text-align: center;\r\n ${({ width }) => (width ? width + ';' : null)}\r\n white-space: nowrap;\r\n font-family: ${theme.fonts.quaternary};\r\n font-weight: bold;\r\n\r\n display: inline-block;\r\n\r\n ${({ size }) => {\r\n switch (size) {\r\n case 'small':\r\n return css`\r\n font-size: ${theme.fontSizes[9]}px;\r\n line-height: 14px;\r\n padding: 1px 8px;\r\n `;\r\n case 'large':\r\n return css`\r\n font-size: ${theme.fontSizes[0]}px;\r\n line-height: 18px;\r\n padding: 1px 8px;\r\n `;\r\n default:\r\n return css`\r\n padding: 0 2px;\r\n font-size: ${theme.fontSizes[9]}px;\r\n line-height: 14px;\r\n `;\r\n }\r\n }}\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { VARIANTS } from './constants';\r\nimport { StyledBadge } from './styles';\r\n\r\nconst SIZES = {\r\n SMALL: 'small',\r\n LARGE: 'large'\r\n};\r\n\r\n/** Default Badge/Tag component */\r\nconst Badge = ({\r\n children,\r\n variant,\r\n className,\r\n customColorBg,\r\n customColorText,\r\n borderRadius,\r\n width,\r\n customColorBorder,\r\n size,\r\n caps = true,\r\n // This component allows to pass any other prop to the styled component of Text\r\n ...restProps\r\n}) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nBadge.defaultProps = {\r\n variant: VARIANTS.YELLOW,\r\n className: null\r\n};\r\n\r\nBadge.VARIANTS = VARIANTS;\r\nBadge.SIZES = SIZES;\r\n\r\nBadge.propTypes = {\r\n /** Variant defines a set of styling such as color, bg, border */\r\n variant: PropTypes.shape({\r\n color: PropTypes.string.isRequired,\r\n background: PropTypes.string.isRequired,\r\n borderColor: PropTypes.string.isRequired\r\n }),\r\n /** Children allows to render anything inside the Badge */\r\n children: PropTypes.node,\r\n /** ClassName property to allow styled components to apply styling */\r\n className: PropTypes.string,\r\n /** Custom color for the background */\r\n customColorBg: PropTypes.string,\r\n /** Custom color for the text */\r\n customColorText: PropTypes.string,\r\n /** Custom color for the border */\r\n customColorBorder: PropTypes.string,\r\n /** Boolean to define if the text is uppercase defaults to true */\r\n caps: PropTypes.bool\r\n};\r\n\r\nexport default Badge;\r\n","import Badge from './Badge';\r\n\r\nexport default Badge;\r\n","import { LocalStorageKeys } from '../utilities/storageUtils';\r\nimport { RECOMMENDED_FOR_YOU, IS_CLASSES } from './constants';\r\n\r\nexport const getInteractionsUserId = () => {\r\n const interactionsUserId = localStorage.getItem(LocalStorageKeys.InteractionsUserId);\r\n\r\n return interactionsUserId ? interactionsUserId : null;\r\n};\r\n\r\nexport const renderInteractionsAtributes = (suiteFlags, interactionsData) => {\r\n let attributes = {};\r\n\r\n const isRecommended = suiteFlags?.includes(RECOMMENDED_FOR_YOU);\r\n\r\n if (isRecommended && interactionsData) {\r\n attributes['data-sfis-recommended'] = true;\r\n attributes['data-is-campaignId'] = interactionsData.campaignId;\r\n attributes['data-is-experienceId'] = interactionsData.experienceId;\r\n attributes['data-is-userGroup'] = interactionsData.userGroup;\r\n }\r\n attributes['className'] = IS_CLASSES.suiteContainer;\r\n return attributes;\r\n};\r\n","import { initializeState } from '../../../utilities/storageUtils';\r\nimport preCheckInActionTypes from './preCheckIn.types';\r\n\r\nexport const PRE_CHECK_IN_STEP = {\r\n SUMMARY: 'SUMMARY',\r\n DINING: 'DINING',\r\n ATTRACTIONS: 'ATTRACTIONS',\r\n ADVENTURE_PASS: 'ADVENTURE_PASS',\r\n TRANSITION: 'TRANSITION'\r\n};\r\n\r\nconst INITIAL_STATE = {\r\n preCheckInStep: PRE_CHECK_IN_STEP.SUMMARY,\r\n addedPackagesFailed: 0,\r\n addedPackages: [],\r\n virdeeRedirectionFailed: 0\r\n};\r\n\r\nconst preCheckInReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n switch (action.type) {\r\n // Get Resort Locations SUCCESS\r\n case preCheckInActionTypes.UPDATE_PRE_CHECK_IN_STEP:\r\n return {\r\n ...state,\r\n preCheckInStep: action.step\r\n };\r\n case preCheckInActionTypes.UPDATE_PRE_CHECK_IN_ADDED_PACKAGES_FAILED:\r\n return {\r\n ...state,\r\n addedPackagesFailed: ++state.addedPackagesFailed\r\n };\r\n case preCheckInActionTypes.RESET_PRE_CHECK_IN_ADDED_PACKAGES_FAILED:\r\n return {\r\n ...state,\r\n addedPackagesFailed: 0\r\n };\r\n case preCheckInActionTypes.UPDATE_PRE_CHECK_IN_NEW_PACKAGES:\r\n return {\r\n ...state,\r\n addedPackages: action.packages\r\n };\r\n case preCheckInActionTypes.UPDATE_PRE_CHECK_IN_VIRDEE_REDIRECTION_FAILED:\r\n return {\r\n ...state,\r\n virdeeRedirectionFailed: ++state.virdeeRedirectionFailed\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default preCheckInReducer;\r\n","import React from 'react'\n\nconst CarouselChevronLeftThinIcon = ({\n size,\n color,\n ...props\n}) => (\n \n \n \n)\n\nCarouselChevronLeftThinIcon.displayName = 'CarouselChevronLeftThinIcon'\n\nCarouselChevronLeftThinIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CarouselChevronLeftThinIcon","import styled from 'styled-components';\r\n\r\nexport const CloseButton = styled.button`\r\n position: relative;\r\n left: -15px;\r\n top: 10px;\r\n cursor: pointer;\r\n border: none;\r\n background: transparent;\r\n margin-top: 12px;\r\n`;\r\n\r\nexport const BackButtonWrapper = styled.button`\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n border: none;\r\n margin-left: -6px;\r\n padding: 12px 6px;\r\n background: transparent;\r\n`;\r\n\r\nexport const SuiteDetailInfoCont = styled.div`\r\n max-height: 550px;\r\n overflow-y: auto;\r\n max-width: 50%;\r\n`;\r\n\r\nBackButtonWrapper.displayName = 'BackButtonWrapper';\r\n","export const BACK = 'Back';\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Absolute, Box, Flex, Text } from '../../ui-kit';\r\nimport Scrollable from '../../ui-kit/Scrollable';\r\nimport CarouselChevronLeftThinIcon from '../../ui-kit/icons/CarouselChevronLeftThin';\r\nimport CloseIcon from '../../ui-kit/icons/Close';\r\nimport theme, { colors } from '../../ui-kit/themes/theme';\r\nimport Modal from '../Modal';\r\nimport { BackButtonWrapper, CloseButton, SuiteDetailInfoCont } from './styles';\r\nimport * as COPY from './utilities/copy';\r\n\r\nconst imgPropType = PropTypes.shape({\r\n alt: PropTypes.string.isRequired,\r\n url: PropTypes.string.isRequired\r\n});\r\n\r\nconst propTypes = {\r\n images: PropTypes.arrayOf(imgPropType),\r\n showModal: PropTypes.bool.isRequired,\r\n onCloseModal: PropTypes.func.isRequired,\r\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),\r\n modalHeight: PropTypes.number\r\n};\r\n\r\nconst defaultProps = {\r\n images: [],\r\n children: null,\r\n modalHeight: 440\r\n};\r\n\r\nconst OVERLAY_BACKGROUND_COLOR = 'rgba(251, 252, 249, 0.75)';\r\nconst IMAGE_GAP = 4;\r\n\r\nconst MediaGalleryModal = ({ isFullSize, images, showModal, onCloseModal, children, modalHeight }) => {\r\n const renderImages = () => {\r\n return images?.map((image, index) => (\r\n 0 ? IMAGE_GAP : '0px' }}\r\n />\r\n ));\r\n };\r\n\r\n const renderDefaultContent = () => {\r\n return (\r\n \r\n \r\n onCloseModal(false)} title=\"Close\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {renderImages()}\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n };\r\n\r\n const renderFullSizeContent = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {COPY.BACK}\r\n \r\n \r\n \r\n {renderImages()}\r\n \r\n \r\n );\r\n };\r\n\r\n const renderContent = () => {\r\n if (isFullSize) {\r\n return renderFullSizeContent();\r\n }\r\n\r\n return renderDefaultContent();\r\n };\r\n\r\n return (\r\n \r\n {renderContent()}\r\n \r\n );\r\n};\r\n\r\nMediaGalleryModal.propTypes = propTypes;\r\nMediaGalleryModal.defaultProps = defaultProps;\r\n\r\nexport default MediaGalleryModal;\r\n","// Profile reducer\r\n\r\nimport profileActionTypes from './profile.types';\r\n\r\nexport const INITIAL_STATE = {\r\n isLoading: false,\r\n isUpdateSuccess: false,\r\n user: {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n gender: '',\r\n street: '',\r\n city: '',\r\n stateProvince: '',\r\n country: '',\r\n zip: '',\r\n phoneNumber: '',\r\n streetLine1: '',\r\n streetLine2: '',\r\n birthdate: '',\r\n password: {\r\n currentPassword: '',\r\n newPassword: ''\r\n },\r\n family: [],\r\n isSocialAccountLogin: false,\r\n isConnectedToFacebook: false,\r\n isConnectedToGoogle: false\r\n }\r\n};\r\n\r\nconst profileReducer = (state = INITIAL_STATE, action) => {\r\n switch (action.type) {\r\n case profileActionTypes.IS_PROFILE_LOADING:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading,\r\n isUpdated: action.isUpdateSuccess\r\n };\r\n case profileActionTypes.GET_PROFILE_USER:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading,\r\n isUpdated: false\r\n };\r\n case profileActionTypes.GET_PROFILE_USER_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading,\r\n user: action.user,\r\n isUpdated: false\r\n };\r\n case profileActionTypes.GET_PROFILE_USER_ERROR:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading,\r\n user: action.user,\r\n isUpdated: false\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default profileReducer;\r\n","import React from 'react'\n\nconst PlusThinIcon = ({\n size,\n color,\n ...props\n}) => (\n \n \n \n)\n\nPlusThinIcon.displayName = 'PlusThinIcon'\n\nPlusThinIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default PlusThinIcon","import styled, { css } from 'styled-components';\r\nimport Text from '../Text';\r\nimport theme from '../themes/theme';\r\n\r\nconst getColor = color => theme.colors[color] || color;\r\n\r\nconst spanStyle = ({ underline, color, hoverColor }) => {\r\n const colorFocus = getColor(color);\r\n const colorHover = hoverColor ? getColor(hoverColor) : colorFocus;\r\n\r\n if (!underline)\r\n return css`\r\n text-decoration: none;\r\n > span {\r\n :hover {\r\n background-size: 0 1px, 100% 1px;\r\n color: ${() => colorHover};\r\n }\r\n }\r\n `;\r\n\r\n return css`\r\n > span {\r\n background-size: 100% 1px, 0 1px;\r\n background-position: 100% 100%, 0 100%;\r\n background-repeat: no-repeat;\r\n transition: background-size 200ms linear;\r\n\r\n :hover {\r\n background-size: 0 1px, 100% 1px;\r\n\r\n background-image: linear-gradient(#0000, #0000), linear-gradient(${colorHover}, ${colorHover});\r\n color: ${colorHover};\r\n }\r\n }\r\n `;\r\n};\r\n\r\nexport const TextLikeLink = styled(Text)`\r\n display: inline-flex;\r\n gap: 10px;\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n font-weight: ${({ fontWeight }) => fontWeight};\r\n align-items: center;\r\n\r\n ${spanStyle} :hover {\r\n color: ${({ underline, hoverColor, color }) => (hoverColor ? getColor(hoverColor) : getColor(color))};\r\n }\r\n :hover {\r\n text-decoration: none;\r\n }\r\n`;\r\n","export const SELECT_PLACEHOLDER = 'Included *';\r\nexport const SUBTITLE =\r\n 'Select your food and drinks for your special day! On the day of the party, order additional food and drinks through your dedicated server. Ask about options for all ages!';\r\nexport const TITLE = 'Food & Drinks';\r\nexport const MISSING_SELECTION_ERROR = 'At least one item must be selected';\r\nexport const EXTRA_PLACEHOLDER = 'Extra ';\r\nexport const REMOVE_EXTRA = 'Remove ';\r\nexport const FLOATING_MESSAGE_ERROR = 'To continue, please select your pizza and drinks for your party';\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { Box, TextLink } from '../../../ui-kit';\r\nimport Text from '../../../ui-kit/Text';\r\nimport AlertSuccessIcon from '../../../ui-kit/icons/AlertSuccessIcon';\r\nimport colors from '../../../ui-kit/themes/colors';\r\nimport { editCopyByReplaceString } from '../../../utilities/copyFunctions';\r\nimport { SummaryContent } from '../Content/SummaryContent';\r\nimport SummaryItem from '../SummaryItem';\r\nimport * as COPY from './utilities/copy';\r\n\r\nconst SimpleSummaryInfo = ({\r\n promoCode,\r\n description,\r\n fullWidthDescription,\r\n productTitle,\r\n price,\r\n navigationText,\r\n onNavigateLinkClick,\r\n includedList\r\n}) => {\r\n return (\r\n \r\n \r\n {productTitle}\r\n \r\n }\r\n rightColumn={\r\n \r\n ${price}\r\n \r\n }\r\n />\r\n {!fullWidthDescription ? (\r\n \r\n {description}\r\n \r\n }\r\n />\r\n ) : (\r\n \r\n {description}\r\n \r\n )}\r\n\r\n {includedList?.map((item, key) => (\r\n \r\n \r\n \r\n {ReactHtmlParser(item)}\r\n \r\n \r\n \r\n \r\n {COPY.SUMMARY_INCLUDED}\r\n \r\n \r\n \r\n ))}\r\n\r\n {navigationText ? (\r\n \r\n {navigationText}\r\n \r\n ) : null}\r\n\r\n {promoCode ? (\r\n \r\n \r\n \r\n {editCopyByReplaceString(COPY.PROMOCODE_APPLIED, promoCode, '')}\r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nSimpleSummaryInfo.propTypes = {\r\n passTitle: PropTypes.string,\r\n rate: PropTypes.number,\r\n promoCode: PropTypes.string,\r\n dayPassPromoDescription: PropTypes.string,\r\n amountOfDayPasses: PropTypes.number\r\n};\r\n\r\nSimpleSummaryInfo.defaultProps = {\r\n rate: 0.0\r\n};\r\n\r\nexport default SimpleSummaryInfo;\r\n","import { useCallback } from 'react';\r\nimport { waitFor } from '../../utilities/waitFor';\r\n\r\n/**\r\n * This is a simple hook that returns 2 methods, one for simple scroll using scrollIntoView and\r\n * a custmon scroll based on the top.\r\n *\r\n * @param {options}\r\n * ref, behavior, block, inline, delay, custom.yOffset\r\n * @returns { simpleScrollTo, customScrollTo }\r\n *\r\n * Horizontal scroll is pending for more custom options\r\n */\r\nconst useScrollToItem = () => {\r\n const simpleScrollTo = useCallback(async options => {\r\n const { ref, behavior = 'auto', block = 'start', inline, delay } = options;\r\n if (delay) await waitFor(delay);\r\n\r\n ref.current.scrollIntoView({\r\n behavior,\r\n block,\r\n ...(inline && { inline })\r\n });\r\n }, []);\r\n\r\n const customScrollTo = useCallback(async options => {\r\n const { ref, behavior = 'auto', custom, delay } = options;\r\n const yOffset = custom.yOffset;\r\n const element = ref.current;\r\n const y =\r\n element.getBoundingClientRect().top + window.pageYOffset + yOffset;\r\n if (delay) await waitFor(delay);\r\n window.scrollTo({ top: y, behavior });\r\n }, []);\r\n\r\n return { simpleScrollTo, customScrollTo };\r\n};\r\n\r\nexport default useScrollToItem;\r\n","import { useLayoutEffect } from 'react';\r\n\r\nconst useLockBodyScroll = isOpen => {\r\n useLayoutEffect(() => {\r\n if (isOpen) {\r\n document.querySelector('#root')?.removeAttribute('aria-hidden');\r\n document.body.style.overflowY = 'hidden';\r\n }\r\n\r\n return () => (document.body.style.overflowY = 'visible');\r\n }, [isOpen]);\r\n};\r\n\r\nexport default useLockBodyScroll;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useState } from 'react';\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionItemButton,\r\n AccordionItemHeading,\r\n AccordionItemState\r\n} from 'react-accessible-accordion';\r\nimport MediaQuery from 'react-responsive';\r\n\r\nimport Absolute from '../../ui-kit/Absolute';\r\nimport { Box, Flex } from '../../ui-kit/index';\r\nimport Relative from '../../ui-kit/Relative';\r\nimport Text from '../../ui-kit/Text';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport { Wrapper } from '../assets/styles';\r\nimport { SummaryAccordionIcon } from '../assets/SummaryStyles';\r\n\r\nconst SummaryAccordionIconWrapper = ({ size }) => (\r\n \r\n);\r\n\r\nconst DesktopLayout = ({ title, isExpanded }) => (\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n);\r\nconst isDayPass = window.location.pathname.includes('/daypass/');\r\n\r\nconst MobileLayout = ({ title, isOnPaymentPage, total }) => (\r\n \r\n \r\n \r\n {title}:\r\n \r\n \r\n \r\n ${total.toFixed(2)}\r\n \r\n \r\n {isOnPaymentPage || isDayPass ? '(Total)' : '(Subtotal)'}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst SummaryAccordion = ({ children, total, shouldStartCollapsed, onChange, isOnPaymentPage, title }) => {\r\n const [isExpanded, setIsExpanded] = useState(!shouldStartCollapsed);\r\n return (\r\n \r\n {isDesktop => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isDesktop ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n\r\n \r\n {({ expanded }) => {\r\n setIsExpanded(expanded);\r\n return children({ expanded, isDesktop });\r\n }}\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nSummaryAccordion.propTypes = {\r\n total: PropTypes.number,\r\n shouldStartCollapsed: PropTypes.bool,\r\n onChange: PropTypes.func,\r\n isOnPaymentPage: PropTypes.bool\r\n};\r\n\r\nSummaryAccordion.defaultProps = {\r\n total: 0,\r\n shouldStartCollapsed: true,\r\n onChange: () => {},\r\n isOnPaymentPage: false\r\n};\r\n\r\nexport default SummaryAccordion;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { COSTSUMMARY_TOOLTIP } from '../../../../../utilities/constants';\r\nimport { Box, Flex, Text, Tooltip } from '../../../../ui-kit';\r\nimport QuestionIcon from '../../../../ui-kit/icons/Question';\r\nimport theme from '../../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../../Content';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst propTypes = {\r\n hasAdditionalCharges: PropTypes.bool.isRequired,\r\n taxes: PropTypes.number\r\n};\r\n\r\nexport const AdditionalCharges = ({ taxes, sustainabilityFee, parkingFee, resortFee, lodgeOperaCode }) => {\r\n const isExtraLargeScreen = useMediaQuery({\r\n minWidth: theme.breakpoints.xl\r\n });\r\n const sustainabilityToolTip = ['SCOTAZ'];\r\n return (\r\n <>\r\n \r\n {COPY.ADDITIONAL_CHARGES}\r\n \r\n\r\n \r\n {COPY.TAXES}\r\n {`$${taxes.toFixed(2)}`}\r\n \r\n\r\n {sustainabilityFee > 0 ? (\r\n \r\n \r\n {COPY.SUSTAINABILITY_FEE}\r\n {sustainabilityToolTip.includes(lodgeOperaCode) ? (\r\n \r\n (\r\n \r\n \r\n \r\n )}\r\n tooltipContent={() => {COSTSUMMARY_TOOLTIP.sustainabilityFee}}\r\n />\r\n \r\n ) : null}\r\n \r\n {`$${sustainabilityFee.toFixed(2)}`}\r\n \r\n ) : null}\r\n\r\n {parkingFee > 0 ? (\r\n \r\n {COPY.PARKING_FEE}\r\n {`$${parkingFee.toFixed(2)}`}\r\n \r\n ) : null}\r\n\r\n {resortFee > 0 ? (\r\n \r\n \r\n {COPY.AMENITY_FEE}\r\n \r\n (\r\n \r\n \r\n \r\n )}\r\n tooltipContent={() => {COPY.TOOLTIP_COPY}}\r\n />\r\n \r\n \r\n {`$${resortFee.toFixed(2)}`}\r\n \r\n ) : null}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nAdditionalCharges.propTypes = propTypes;\r\n\r\nAdditionalCharges.defaultProps = {\r\n taxes: 0\r\n};\r\n","import styled, { css } from 'styled-components';\r\nimport { Box } from '../../../../ui-kit';\r\n\r\nexport const ItemListWrapper = styled(Box)`\r\n ${({ allowPackageUpdate }) => {\r\n if (!allowPackageUpdate) {\r\n return css`\r\n & > div {\r\n margin-top: 0;\r\n margin-bottom: 4px;\r\n }\r\n `;\r\n }\r\n }}\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { FLOW_NAVIGATION_ACTIONS } from '../../../../../flows/DynamicFlow/utilities/constants';\r\nimport * as ADDONS_COPY from '../../../../../pages/BirthdayPartyAddOns/utilities/copy';\r\nimport * as FOOD_DRINKS_COPY from '../../../../../pages/BirthdayPartyFoodAndDrinks/utilities/copy';\r\nimport { isArrayEmpty } from '../../../../../utilities/arraysUtils';\r\nimport { getCurrencyCodeText } from '../../../../../utilities/planUtils';\r\nimport SelectPackageQuantity from '../../../../Packages/SelectPackageQuantity';\r\nimport { Box, Text, TextLink } from '../../../../ui-kit';\r\nimport { editCopyByReplaceString } from '../../../../utilities/copyFunctions';\r\nimport { SummaryContent } from '../../Content';\r\nimport { ItemListWrapper } from '../assets/styles';\r\nimport * as COPY from '../utilities/copy';\r\n\r\nconst propTypes = {\r\n /** String date object with the checkin date */\r\n checkinDateSelection: PropTypes.string.isRequired,\r\n\r\n /** String date object with the checkout date */\r\n checkoutDateSelection: PropTypes.string.isRequired,\r\n\r\n /** Currenty selected packages */\r\n currentSelectedPackages: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n packageCode: PropTypes.string,\r\n packageName: PropTypes.string,\r\n currencyCode: PropTypes.string,\r\n quantity: PropTypes.number,\r\n amount: PropTypes.number,\r\n isAdjustment: PropTypes.bool,\r\n showQuantitySelect: PropTypes.bool\r\n })\r\n ),\r\n\r\n /** Number of guests for the reservation */\r\n numberOfGuests: PropTypes.number.isRequired,\r\n\r\n /** Flag to indicate the property is in Niagara */\r\n isNiagaraProperty: PropTypes.bool,\r\n\r\n /** Function to update the package quantity */\r\n upsertPackage: PropTypes.func,\r\n\r\n /** Funtion to delete a package */\r\n deletePackage: PropTypes.func,\r\n\r\n /** Flag to indicate if the reservation has selected packages */\r\n hasSelectedPackages: PropTypes.bool\r\n};\r\n\r\nconst getPackagePriceDisplay = packageItem =>\r\n `${(parseInt(packageItem.quantity || 1) * packageItem.amount).toFixed(2)}`;\r\n\r\nconst getBirthdayScreenSlug = summarySection => {\r\n switch (summarySection) {\r\n case ADDONS_COPY.PAGE_TITLE:\r\n return '/packages-addons';\r\n case FOOD_DRINKS_COPY.TITLE:\r\n return '/food-drinks';\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst ListOfPackages = ({\r\n currentSelectedPackages,\r\n deletePackage,\r\n isNiagaraProperty,\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n numberOfGuests,\r\n updatePackageQuantity,\r\n allowPackageUpdate,\r\n isBirthdayPackage,\r\n isFoodAndDrinks\r\n}) => {\r\n return (\r\n <>\r\n \r\n {currentSelectedPackages.map(item =>\r\n !item.isAdjustment ? (\r\n \r\n \r\n {item.quantity ? `${item.quantity} ` : ''} {item.packageTitle || item.title}\r\n \r\n {allowPackageUpdate && item.quantity && !item.packageType?.includes('dining') ? (\r\n \r\n \r\n \r\n ) : null}\r\n {allowPackageUpdate ? (\r\n deletePackage(item)}>{COPY.REMOVE}\r\n ) : null}\r\n\r\n \r\n {isBirthdayPackage && isFoodAndDrinks && !item.isExtra\r\n ? COPY.SUMMARY_INCLUDED\r\n : `$${getPackagePriceDisplay(item)} ${getCurrencyCodeText(item.currencyCode) || ''}`}\r\n \r\n \r\n ) : null\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst PackagesList = ({\r\n checkinDateSelection,\r\n checkoutDateSelection,\r\n currentSelectedPackages,\r\n numberOfGuests,\r\n isNiagaraProperty,\r\n upsertPackage,\r\n deletePackage,\r\n splitPackagesByTabName,\r\n allowPackageUpdate,\r\n triggerDynamicStepNavigation,\r\n allowPackagesListLink\r\n}) => {\r\n function updatePackageQuantity(e, packageItem) {\r\n upsertPackage({ ...packageItem, quantity: e.target.value });\r\n }\r\n\r\n let groupedPackagesByTabName = null;\r\n\r\n if (splitPackagesByTabName) {\r\n let groupedPackagesBySectionAndType = Object.groupBy(\r\n currentSelectedPackages,\r\n ({ summarySection }) => summarySection\r\n );\r\n\r\n Object.keys(groupedPackagesBySectionAndType).forEach(summarySectionKey => {\r\n groupedPackagesBySectionAndType[summarySectionKey] = Object.groupBy(\r\n groupedPackagesBySectionAndType[summarySectionKey],\r\n ({ summarySectionType }) => summarySectionType\r\n );\r\n });\r\n\r\n groupedPackagesByTabName = groupedPackagesBySectionAndType;\r\n }\r\n\r\n if (currentSelectedPackages && isArrayEmpty(currentSelectedPackages)) return null;\r\n\r\n return (\r\n <>\r\n {splitPackagesByTabName && groupedPackagesByTabName ? (\r\n <>\r\n {Object.entries(groupedPackagesByTabName).map(([summarySection, pkgsList]) => {\r\n return (\r\n <>\r\n \r\n {summarySection}\r\n \r\n {Object.keys(pkgsList).map(list => (\r\n \r\n ))}\r\n\r\n {allowPackagesListLink ? (\r\n {\r\n !window.location.pathname.includes(getBirthdayScreenSlug(summarySection)) &&\r\n triggerDynamicStepNavigation(\r\n FLOW_NAVIGATION_ACTIONS.FLOW_TRIGGER_STEP_BY_SLUG,\r\n getBirthdayScreenSlug(summarySection)\r\n );\r\n }}\r\n mt={2}>\r\n {editCopyByReplaceString(COPY.BIRTHDAY_LINK_TEXT, summarySection, '')}\r\n \r\n ) : null}\r\n \r\n \r\n );\r\n })}\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nPackagesList.propTypes = propTypes;\r\n\r\nPackagesList.defaultProps = {\r\n isNiagaraProperty: false,\r\n hasSelectedPackages: false\r\n};\r\n\r\nexport default PackagesList;\r\n","import React from 'react';\r\nimport { Box, Text } from '../../../ui-kit';\r\nimport { editCopyByReplaceString } from '../../../utilities/copyFunctions';\r\nimport { Divider } from '../Content/styles';\r\nimport SummaryItem from '../SummaryItem';\r\nimport * as COPY from './utilities/copy';\r\n\r\nconst TextWrapperDueToday = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst TextWrapperDueBeforeParty = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nconst SimpleSummaryDue = ({ dueToday, dueBeforeParty, remainingBalanceDueDate }) => {\r\n if (!dueToday && !dueBeforeParty) return null;\r\n return (\r\n \r\n \r\n {COPY.PARTY_DUE_TODAY}}\r\n rightColumn={${dueToday.toFixed(2)}}\r\n />\r\n \r\n {dueBeforeParty ? COPY.PARTY_72_REFUND_PARTY_DISCLAIMER : COPY.PARTY_NON_REFUND_DISCLAIMER}\r\n \r\n {dueBeforeParty ? (\r\n <>\r\n \r\n {editCopyByReplaceString(COPY.PARTY_DUE_BEFORE_PARTY, remainingBalanceDueDate, '')}\r\n \r\n }\r\n rightColumn={${dueBeforeParty.toFixed(2)}}\r\n />\r\n \r\n {dueBeforeParty ? COPY.PARTY_REFUND_DISCLAIMER : COPY.PARTY_NON_REFUND_DISCLAIMER}\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default SimpleSummaryDue;\r\n","import React from 'react';\r\nimport { Box, Text } from '../../../ui-kit';\r\nimport theme from '../../../ui-kit/themes/theme';\r\n\r\nconst SimpleSummaryParkingFeeWarning = ({ bookingSummaryParkingFee }) => {\r\n return (\r\n <>\r\n {bookingSummaryParkingFee ? (\r\n \r\n \r\n {bookingSummaryParkingFee}\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default SimpleSummaryParkingFeeWarning;\r\n","import React from 'react';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { FLOW_NAVIGATION_ACTIONS } from '../../../../flows/DynamicFlow/utilities/constants';\r\nimport theme from '../../../ui-kit/themes/theme';\r\nimport { SummaryContent } from '../Content';\r\nimport { Divider } from '../Content/styles';\r\nimport SummaryAccordion from '../SummaryAccordion';\r\nimport { AdditionalCharges } from './Content/AdditionalCharges';\r\nimport PackagesList from './Content/PackagesList';\r\nimport SimpleSummaryDue from './SimpleSummaryDue';\r\nimport SimpleSummaryFooter from './SimpleSummaryFooter';\r\nimport SimpleSummaryHeader from './SimpleSummaryHeader';\r\nimport SimpleSummaryInfo from './SimpleSummaryInfo';\r\nimport SimpleSummaryParkingFeeWarning from './SimpleSummaryParkingFeeWarning';\r\n\r\nexport const SimpleSummary = ({\r\n bookingSummaryParkingFee,\r\n operaCode,\r\n onChange,\r\n title,\r\n shouldStartCollapsed,\r\n deletePackage,\r\n upsertPackage,\r\n total,\r\n productTitle,\r\n promoCode,\r\n fullWidthDescription,\r\n description,\r\n price,\r\n navigationText,\r\n packagesList,\r\n taxes,\r\n showDueToday,\r\n dueToday,\r\n dueBeforeParty,\r\n sustainabilityFee,\r\n parkingFee,\r\n resortFee,\r\n leftTitle,\r\n leftContent,\r\n rightTitle,\r\n rightContent,\r\n onPaymentPage,\r\n includedList,\r\n remainingBalanceDueDate,\r\n splitPackagesByTabName,\r\n allowPackageUpdate,\r\n triggerDynamicStepNavigation,\r\n allowPackagesListLink\r\n}) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.md})`\r\n });\r\n const history = useHistory();\r\n const onInfoLinkClick = () => {\r\n triggerDynamicStepNavigation(FLOW_NAVIGATION_ACTIONS.FLOW_TRIGGER_FIRST_STEP);\r\n if (isMobile) {\r\n history.push({\r\n search: '?openEditMobile=true'\r\n });\r\n }\r\n };\r\n\r\n return (\r\n \r\n {({ expanded, isDesktop }) => {\r\n return (\r\n <>\r\n {expanded ? (\r\n \r\n \r\n \r\n \r\n \r\n {onPaymentPage ? (\r\n \r\n ) : null}\r\n \r\n ) : null}\r\n {expanded || isDesktop ? : null}\r\n {expanded && bookingSummaryParkingFee ? (\r\n \r\n ) : null}\r\n {expanded && showDueToday ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nexport default SimpleSummary;\r\n","import { useState, useEffect } from 'react';\r\nimport useWindowEventListener from './useWindowEventListener';\r\n\r\n// Correct sizing (viewport) on mobile view\r\nconst useCorrectedHeight = height => {\r\n const [correctedHeight, setHeight] = useState();\r\n\r\n const handleViewportUnitsMobile = () => {\r\n const vh = window.innerHeight * 0.01;\r\n setHeight(height * vh);\r\n };\r\n\r\n useEffect(handleViewportUnitsMobile, [height]);\r\n\r\n useWindowEventListener('resize', handleViewportUnitsMobile);\r\n\r\n return correctedHeight;\r\n};\r\n\r\nexport default useCorrectedHeight;\r\n","import { useEffect } from 'react';\r\n\r\nexport default function useWindowEventListener(\r\n event,\r\n handler,\r\n passive = false\r\n) {\r\n useEffect(() => {\r\n // initiate the event handler\r\n window.addEventListener(event, handler, passive);\r\n\r\n // this will clean up the event every time the component is re-rendered\r\n return function cleanup() {\r\n window.removeEventListener(event, handler);\r\n };\r\n });\r\n}\r\n","import React from 'react'\n\nconst ArrowCaretLeftIcon = ({\n size,\n color,\n ...props\n}) => (\n \n \n \n)\n\nArrowCaretLeftIcon.displayName = 'ArrowCaretLeftIcon'\n\nArrowCaretLeftIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default ArrowCaretLeftIcon","import BlockUi from 'react-block-ui';\r\nimport styled from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\n\r\nimport Box from '../../ui-kit/Box';\r\nimport Flex from '../../ui-kit/Flex';\r\n\r\nexport const ModalContainer = styled(Box)`\r\n padding: ${({ innerPadding }) => `${innerPadding}px`};\r\n ${({ hasTopPadding }) => !hasTopPadding && `padding-top: 0px`};\r\n`;\r\n\r\nexport const OutsideContainer = styled(Flex)`\r\n width: 100%;\r\n`;\r\n\r\nexport const CloseButton = styled.button`\r\n cursor: pointer;\r\n color: inherit;\r\n border: none;\r\n background: transparent;\r\n position: absolute;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n ${({ closeBtnHorizonPosValue }) => 'top:' + closeBtnHorizonPosValue};\r\n ${({ closeBtnPosition, closeBtnVertPosValue }) =>\r\n closeBtnPosition === 'left' ? 'left:' + closeBtnVertPosValue : 'right:' + closeBtnVertPosValue};\r\n\r\n svg {\r\n ${({ closeBtnColor }) => closeBtnColor && 'fill:' + closeBtnColor};\r\n }\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n }\r\n`;\r\n\r\nexport const BackButton = styled(CloseButton)`\r\n position: absolute;\r\n ${({ backButtonVertPosValue }) => 'top:' + backButtonVertPosValue + '!important;'}\r\n left: ${themeGet('space.4')}px;\r\n right: unset;\r\n`;\r\n\r\nexport const HeadingContainer = styled(Flex)`\r\n background-color: ${props => props.backgroundColor};\r\n justify-content: center;\r\n position: relative;\r\n padding: ${props => (props.topPadding ? '32px 0 0' : '0')};\r\n\r\n ${({ hasTitle, theme }) =>\r\n hasTitle &&\r\n `\r\n border: 0 solid ${theme.colors.snowMountainGrey[100]};\r\n border-bottom-width: 0.5px;\r\n `}\r\n`;\r\n\r\nexport const CustomBlockUi = styled(BlockUi)`\r\n overflow: hidden;\r\n border-radius: ${props => props.containerBorderRadius || `${themeGet('radii.5')}px}`};\r\n`;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport Heading from '../../ui-kit/Heading';\r\nimport Text from '../../ui-kit/Text';\r\nimport ArrowCaretLeft from '../../ui-kit/icons/ArrowCaretLeft';\r\nimport CloseIcon from '../../ui-kit/icons/Close';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\nimport { BackButton, CloseButton, HeadingContainer } from './styles';\r\n\r\nconst ModalHeader = ({\r\n title,\r\n fontSize,\r\n lineHeight,\r\n onCloseModal,\r\n backButton,\r\n backButtonSize,\r\n backButtonVertPosValue,\r\n onBackButtonClick,\r\n closeButton,\r\n titleColor,\r\n closeBtnPosition,\r\n closeBtnSize,\r\n closeBtnVertPosValue,\r\n closeBtnHorizonPosValue,\r\n closeBtnColor,\r\n topPadding,\r\n headerBackgroundColor,\r\n width\r\n}) => {\r\n return (\r\n \r\n {title && (\r\n \r\n \r\n {title}\r\n \r\n \r\n )}\r\n {closeButton && (\r\n \r\n \r\n \r\n )}\r\n {backButton && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nModalHeader.defaultProps = {\r\n title: '',\r\n onCloseModal: null,\r\n backButton: false,\r\n onBackButtonClick: null,\r\n titleColor: 'preciousStoneBlue.100',\r\n backgroundColor: 'pureWhite.0'\r\n};\r\n\r\nModalHeader.propTypes = {\r\n title: PropTypes.string,\r\n onCloseModal: PropTypes.func,\r\n backButton: PropTypes.bool,\r\n onBackButtonClick: PropTypes.func,\r\n titleColor: PropTypes.string\r\n};\r\n\r\nexport default ModalHeader;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport Modal from 'react-modal';\r\nimport styled from 'styled-components';\r\n\r\nimport Scrollable from '../../ui-kit/Scrollable';\r\nimport theme from '../../ui-kit/themes/theme';\r\nimport useCorrectedHeight from '../../utilities/useCorrectedHeight';\r\n\r\nimport { isInIframe } from '../../../utilities/customEventsHelpers';\r\nimport ModalHeader from './ModalHeader';\r\nimport { CustomBlockUi, ModalContainer, OutsideContainer } from './styles';\r\n\r\nconst DrawerModal = props => {\r\n const {\r\n children,\r\n isOpen,\r\n closeButton,\r\n onRequestClose,\r\n backButton,\r\n backButtonSize,\r\n backButtonVertPosValue,\r\n onBackButtonClick,\r\n title,\r\n isBlocking,\r\n width,\r\n fontSize,\r\n lineHeight,\r\n className,\r\n innerPadding,\r\n titleColor,\r\n closeBtnPosition,\r\n closeBtnSize,\r\n closeBtnVertPosValue,\r\n closeBtnHorizonPosValue,\r\n closeBtnColor,\r\n borderRadius,\r\n hasTopPadding,\r\n headerBackgroundColor,\r\n titleWidth,\r\n containerBorderRadius,\r\n ...otherProps\r\n } = props;\r\n\r\n const contentClassName = `${className}__content`;\r\n const overlayClassName = `${className}__overlay`;\r\n\r\n const maxHeight = useCorrectedHeight(98);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {React.cloneElement(children, otherProps)}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst StyledDrawerModal = styled(DrawerModal).attrs({\r\n className: 'DrawerModal'\r\n})`\r\n .DrawerModal__overlay {\r\n z-index: ${({ zIndex }) => {\r\n if (zIndex) return zIndex;\r\n\r\n return theme.zIndex.auth;\r\n }};\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-end;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n ${isInIframe ? '' : 'background-color: rgba(57, 84, 118, 0.35);'};\r\n opacity: 0;\r\n transition: opacity 0.25s ease-in-out;\r\n }\r\n\r\n .ReactModal__Overlay--after-open {\r\n opacity: 1;\r\n z-index: ${theme.zIndex.modal};\r\n transition: all 0.25s ease-in-out;\r\n }\r\n\r\n .ReactModal__Overlay--before-close {\r\n opacity: 0;\r\n }\r\n\r\n .DrawerModal__content {\r\n border-top-right-radius: ${theme.radii[5]}px;\r\n border-top-left-radius: ${theme.radii[5]}px;\r\n ${({ borderRadius }) =>\r\n 'border-top-right-radius:' + borderRadius + '; border-top-left-radius:' + borderRadius + ';'};\r\n border-bottom-right-radius: 0;\r\n border-bottom-left-radius: 0;\r\n background-color: ${({ backGroundColor }) => (backGroundColor ? backGroundColor : theme.colors.pureWhite[0])};\r\n max-height: 100%;\r\n overflow: hidden;\r\n padding: 0;\r\n transform: translateY(100vh);\r\n transition: transform 0.25s ease-in-out;\r\n width: 100%;\r\n\r\n ${theme.mediaQueries.md} {\r\n > div {\r\n padding-right: 0px !important;\r\n }\r\n }\r\n }\r\n\r\n .ReactModal__Content--after-open {\r\n transform: translateY(0);\r\n }\r\n\r\n .ReactModal__Content--before-close {\r\n transform: translateY(100vh);\r\n }\r\n\r\n ${theme.mediaQueries.md} {\r\n .DrawerModal__overlay {\r\n align-items: center;\r\n }\r\n\r\n .DrawerModal__content {\r\n ${({ borderRadius }) => 'border-radius:' + borderRadius};\r\n transform: scale(0.8);\r\n transition: transform 0.25s ease-in-out;\r\n width: ${({ width }) => `${width}px`};\r\n }\r\n\r\n .ReactModal__Content--after-open {\r\n transform: scale(1);\r\n }\r\n\r\n .ReactModal__Content--before-close {\r\n transform: scale(0.8);\r\n }\r\n }\r\n`;\r\n\r\nStyledDrawerModal.defaultProps = {\r\n closeBtnPosition: 'right',\r\n closeBtnSize: 16,\r\n closeBtnVertPosValue: '32px',\r\n closeBtnHorizonPosValue: '0px',\r\n closeBtnColor: 'inherit',\r\n borderRadius: `${theme.radii[5]}px`,\r\n hasTopPadding: true,\r\n children: null,\r\n isVisible: false,\r\n onCloseComplete: null,\r\n backButton: false,\r\n onBackButtonClick: null,\r\n title: '',\r\n fontSize: null,\r\n lineHeight: null,\r\n isBlocking: false,\r\n width: 480,\r\n closeButton: true,\r\n innerPadding: theme.space[4]\r\n};\r\n\r\nStyledDrawerModal.propTypes = {\r\n closeBtnPosition: PropTypes.string,\r\n closeBtnSize: PropTypes.number,\r\n closeBtnVertPosValue: PropTypes.string,\r\n closeBtnHorizonPosValue: PropTypes.string,\r\n closeBtnColor: PropTypes.string,\r\n borderRadius: PropTypes.string,\r\n hasTopPadding: PropTypes.bool,\r\n children: PropTypes.node,\r\n isVisible: PropTypes.bool,\r\n onCloseModal: PropTypes.func,\r\n backButton: PropTypes.bool,\r\n onBackButtonClick: PropTypes.func,\r\n title: PropTypes.string,\r\n lineHeight: PropTypes.string,\r\n fontSize: PropTypes.string,\r\n isBlocking: PropTypes.bool,\r\n width: PropTypes.number,\r\n closeButton: PropTypes.bool,\r\n innerPadding: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\r\n};\r\n\r\nexport default StyledDrawerModal;\r\n","import styled, { css } from 'styled-components';\r\nimport { themeGet } from 'styled-system';\r\nimport { Accordion, AccordionItemButton } from 'react-accessible-accordion';\r\nimport { Flex } from '../index';\r\nimport { Link } from 'react-router-dom';\r\nimport { Text } from '../../ui-kit';\r\n\r\nconst itemStyles = css`\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n text-decoration: none;\r\n padding: ${themeGet('space.8')}px ${themeGet('space.2')}px;\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n font-weight: ${themeGet('fontWeights.medium')};\r\n margin-bottom: ${themeGet('space.3')}px;\r\n border-radius: 0 100px 100px 0;\r\n transition: background-color 0.2s;\r\n\r\n :after {\r\n width: 0;\r\n }\r\n`;\r\n\r\nconst accordionItemStyles = css`\r\n border-radius: 0;\r\n margin-bottom: ${themeGet('space.2')}px;\r\n`;\r\n\r\nconst accordionNotActive = css`\r\n background-color: ${themeGet('colors.snowMountainGrey.50')};\r\n color: ${themeGet('colors.deepLakeBlue.50')};\r\n\r\n :before {\r\n background-color: ${themeGet('colors.deepLakeBlue.100')};\r\n }\r\n`;\r\n\r\nconst beforeDecorationStyles = css`\r\n :before {\r\n content: '';\r\n display: inline-block;\r\n width: ${themeGet('space.1')}px;\r\n min-width: ${themeGet('space.1')}px;\r\n height: 12px;\r\n margin-right: ${themeGet('space.2')}px;\r\n border-radius: 2px;\r\n }\r\n`;\r\n\r\nconst activeItem = css`\r\n background-color: ${themeGet('colors.deepLakeBlue.100')};\r\n color: ${themeGet('colors.snowMountainGrey.50')};\r\n\r\n :before {\r\n background-color: ${themeGet('colors.snowMountainGrey.50')};\r\n }\r\n`;\r\n\r\nconst notActiveItem = css`\r\n color: ${themeGet('colors.deepLakeBlue.50')};\r\n\r\n :before {\r\n background-color: ${themeGet('colors.deepLakeBlue.20')};\r\n }\r\n\r\n :hover {\r\n background-color: ${themeGet('colors.snowMountainGrey.50')};\r\n }\r\n`;\r\n\r\nexport const NavigationMenuWrapper = styled(Flex)`\r\n flex-direction: column;\r\n\r\n .accordion__panel {\r\n padding: 20px;\r\n animation: fadein 0.35s ease-in;\r\n }\r\n\r\n @keyframes fadein {\r\n 0% {\r\n opacity: 0;\r\n }\r\n\r\n 100% {\r\n opacity: 1;\r\n }\r\n }\r\n`;\r\n\r\nexport const NavigationItemWrapper = styled(({ isActive, isAccordion, ...rest }) => )`\r\n ${itemStyles}\r\n ${beforeDecorationStyles}\r\n ${({ isActive }) => (isActive ? activeItem : notActiveItem)}\r\n ${({ isAccordion }) => isAccordion && accordionItemStyles}\r\n ${({ isActive, isAccordion }) => isActive && isAccordion && accordionNotActive}\r\n`;\r\n\r\nexport const StyledAccordionItemButton = styled(AccordionItemButton)`\r\n ${itemStyles}\r\n ${activeItem}\r\n ${accordionItemStyles}\r\n ${beforeDecorationStyles}\r\n position: relative;\r\n\r\n &[aria-expanded=true]::after {\r\n transform: rotate(-135deg);\r\n margin-bottom: -4px;\r\n }\r\n\r\n :after {\r\n display: inline-block;\r\n position: absolute;\r\n right: 20px;\r\n content: '';\r\n height: 10px;\r\n width: 10px;\r\n margin-bottom: 4px;\r\n border-bottom: 2px solid currentColor;\r\n border-right: 2px solid currentColor;\r\n transform: rotate(45deg);\r\n transition: transform 0.2s, margin 0.2s;\r\n }\r\n`;\r\n\r\nexport const StyledAccordion = styled(({ optionsNumber, ...rest }) => )`\r\n .accordion__panel {\r\n transition: all 0.3s ease-in-out;\r\n overflow: hidden;\r\n ${({ optionsNumber }) => `max-height: ${optionsNumber * 60}px`}\r\n\r\n &[hidden] {\r\n display: block;\r\n max-height: 0;\r\n }\r\n }\r\n`;\r\n\r\nexport const SelectedOption = styled(Text)`\r\n font-size: ${themeGet('fontSizes.7')}px;\r\n font-weight: ${themeGet('fontWeights.bold')};\r\n\r\n @media screen and (max-width: 32em) {\r\n font-size: ${themeGet('fontSizes.1')}px;\r\n color: ${themeGet('colors.pureWhite.0')};\r\n }\r\n`;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { AccordionItem, AccordionItemHeading, AccordionItemPanel } from 'react-accessible-accordion';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { propTypes as StyledSystemPropTypes } from 'styled-system';\r\nimport routes from '../../../routes';\r\nimport { compareUrlPathnames } from '../../../utilities/navigationUtils';\r\nimport Text from '../Text';\r\nimport theme from '../themes/theme';\r\nimport {\r\n NavigationItemWrapper,\r\n NavigationMenuWrapper,\r\n SelectedOption,\r\n StyledAccordion,\r\n StyledAccordionItemButton\r\n} from './styles';\r\n\r\nconst MODES = {\r\n ACCORDION: 'accordion',\r\n LIST: 'list'\r\n};\r\n\r\nconst propTypes = {\r\n ...StyledSystemPropTypes.space,\r\n /** Array of available routes objects*/\r\n options: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n route: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired\r\n }).isRequired\r\n ).isRequired,\r\n /** Callback function triggered when the user selects an option */\r\n onChange: PropTypes.func,\r\n /** Display mode, by default it shows an accordion for mobile res and list for desktop */\r\n mode: PropTypes.oneOf(Object.values(MODES)),\r\n showLoyalty: PropTypes.bool,\r\n isReferralEnabled: PropTypes.bool\r\n};\r\n\r\nconst defaultProps = {\r\n width: '',\r\n onChange: () => {},\r\n mode: null,\r\n showLoyalty: false,\r\n isReferralEnabled: false\r\n};\r\n\r\nconst NavigationMenu = ({ width, options, onChange, mode, showLoyalty, isReferralEnabled }) => {\r\n const location = useLocation();\r\n\r\n if (showLoyalty && isReferralEnabled) {\r\n //RAF=Refer A Friend\r\n let hasRAF = options.find(option => option.title === 'Refer a Friend');\r\n !hasRAF && options.splice(1, 0, { route: routes.referAFriend, title: 'Refer a Friend' });\r\n }\r\n\r\n const activeOption = options.find(option => compareUrlPathnames(option.route, location.pathname)) || options[0];\r\n\r\n const isDesktop = useMediaQuery({ minWidth: theme.breakpoints.xl });\r\n\r\n const isAccordion = mode ? mode === MODES.ACCORDION : !isDesktop;\r\n\r\n const isActive = option => compareUrlPathnames(option.route, activeOption.route);\r\n\r\n const handleSelect = option => {\r\n if (activeOption !== option) {\r\n onChange(option);\r\n }\r\n };\r\n\r\n const renderOptionsList = () => (\r\n \r\n {options.map(option => (\r\n handleSelect(option)}\r\n isActive={isActive(option)}\r\n isAccordion={isAccordion}\r\n to={option.route}\r\n key={option.route}>\r\n {option.title}\r\n \r\n ))}\r\n \r\n );\r\n\r\n if (!isAccordion) {\r\n return renderOptionsList();\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {activeOption.title}\r\n \r\n \r\n {renderOptionsList()}\r\n \r\n \r\n );\r\n};\r\n\r\nNavigationMenu.MODES = MODES;\r\nNavigationMenu.propTypes = propTypes;\r\nNavigationMenu.defaultProps = defaultProps;\r\n\r\nexport default NavigationMenu;\r\n","import NavigationMenu from './NavigationMenu';\r\n\r\nexport default NavigationMenu;\r\n","import Box from '../ui-kit/Box';\r\nimport Text from '../ui-kit/Text';\r\nimport styled from 'styled-components';\r\nimport theme from '../ui-kit/themes/theme';\r\n\r\nexport const NotificationMessage = styled(Text)`\r\n display: flex;\r\n align-items: center;\r\n font-family: ${theme.fontSecondary};\r\n font-size: 10px;\r\n font-weight: 500;\r\n padding: 8px 16px;\r\n min-height: 40px;\r\n line-height: 16px;\r\n color: ${theme.colors.nightSkyBlack[80]};\r\n margin: 0;\r\n\r\n svg {\r\n margin-right: 10px;\r\n }\r\n}\r\n`;\r\n\r\nexport const NotificationBox = styled(Box)`\r\n position: absolute;\r\n top: 16px;\r\n width: calc(100% - 40px);\r\n margin-left: 20px;\r\n border-radius: 10px;\r\n min-height: 40px;\r\n background: ${theme.colors.deepForestGreen[10]};\r\n`;\r\n\r\nexport const BoxIcon = styled(Box)`\r\n height: 20px;\r\n`;\r\n","import { PropTypes } from 'prop-types';\r\nimport React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport AlertSuccessIcon from '../../components/ui-kit/icons/AlertSuccessIcon';\r\nimport { Box } from '../ui-kit';\r\nimport colors from '../ui-kit/themes/colors';\r\nimport theme from '../ui-kit/themes/theme';\r\nimport { BoxIcon, NotificationBox, NotificationMessage } from './style';\r\n\r\n/**\r\n * Notification banner to show error or success messages.\r\n * @param {Object} props\r\n * @param {boolean} props.type - type of notification to be shown.\r\n * @param {function} props.message - Message to be shown on banner.\r\n */\r\n\r\nconst NOTIFICATION_COLORS = {\r\n default: theme.colors.nightSkyBlack[60],\r\n warning: theme.colors.digitalYellowOrange,\r\n success: theme.colors.successGreen,\r\n error: theme.colors.errorOrange\r\n};\r\n\r\nconst getColor = color => NOTIFICATION_COLORS[color] || NOTIFICATION_COLORS.default;\r\n\r\nconst NotificationBanner = ({ type, message }) => {\r\n return (\r\n \r\n \r\n {type === 'success' ? (\r\n \r\n \r\n \r\n ) : null}\r\n {ReactHtmlParser(message)}\r\n \r\n \r\n );\r\n};\r\n\r\nNotificationBanner.propTypes = {\r\n type: PropTypes.string,\r\n message: PropTypes.string\r\n};\r\n\r\nexport default NotificationBanner;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport NotificationBanner from '../../../NotificationBanner';\r\nimport Flex from '../../../ui-kit/Flex';\r\nimport Text from '../../../ui-kit/Text';\r\nimport { DayPassContainer } from '../../assets/styles';\r\n\r\nconst SimpleSummaryHeader = ({\r\n notificationType,\r\n notificationMessage,\r\n showNotification,\r\n leftTitle = 'LT',\r\n leftContent = 'LC',\r\n rightTitle = 'RT',\r\n rightContent = 'RC'\r\n}) => {\r\n return (\r\n \r\n {showNotification ? (\r\n \r\n ) : null}\r\n\r\n \r\n \r\n {leftTitle}\r\n \r\n \r\n {leftContent}\r\n \r\n \r\n \r\n \r\n {rightTitle}\r\n \r\n \r\n {rightContent}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSimpleSummaryHeader.propTypes = {\r\n validOn: PropTypes.string,\r\n amountOfDayPasses: PropTypes.number\r\n};\r\n\r\nexport default SimpleSummaryHeader;\r\n","import axios from 'axios';\r\nimport Lottie from 'lottie-web';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useEffect, useRef } from 'react';\r\n\r\nimport Box from '../Box';\r\n\r\nconst propTypes = {\r\n /** Animation path */\r\n src: PropTypes.string,\r\n /** Object with the exported animation data. Use this when file is hosted locally */\r\n animationData: PropTypes.object,\r\n /** If the animation should loop or not */\r\n loop: PropTypes.bool,\r\n /** Play the animation as soon it is ready */\r\n autoplay: PropTypes.bool,\r\n /** Animation name for future reference */\r\n name: PropTypes.string,\r\n /** Called when the animation finishes loading */\r\n onLoad: PropTypes.func,\r\n /** Aria label to improve accessibility */\r\n label: PropTypes.string\r\n};\r\n\r\nconst defaultProps = {\r\n src: null,\r\n animationData: null,\r\n loop: true,\r\n autoplay: true,\r\n name: null,\r\n onLoad: null,\r\n label: null\r\n};\r\n\r\n/**\r\n `Animation` component is used to render `JSON`animations and still have control\r\n over them. It is a `lottie-web` wrapper, for more details check their documentation \r\n https://github.com/airbnb/lottie-web\r\n*/\r\nconst Animation = ({ src, onLoad, animationData, loop, autoplay, name, label, ...otherProps }) => {\r\n const container = useRef();\r\n\r\n const getJSON = useCallback(async () => {\r\n const res = await axios.get(src).catch(function(error) {\r\n console.log('ANIMATION ERROR - failed to load animation content from', src);\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n console.log('Data', error.response.data);\r\n console.log('Status', error.response.status);\r\n console.log('Headers', error.response.headers);\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\r\n // http.ClientRequest in node.js\r\n console.log('Request', error.request);\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n console.log('Message', error.message);\r\n }\r\n return false;\r\n });\r\n\r\n return await res.data;\r\n }, [src]);\r\n\r\n const loadAnimation = useCallback(async () => {\r\n try {\r\n const data = src ? (await getJSON()) || animationData : animationData;\r\n\r\n const animation = Lottie.loadAnimation({\r\n container: container.current,\r\n animationData: data,\r\n loop,\r\n autoplay,\r\n name\r\n });\r\n\r\n if (onLoad) {\r\n onLoad(animation);\r\n }\r\n\r\n return animation;\r\n } catch (error) {\r\n console.error('[Error] Animation - Failed to load animation', error);\r\n }\r\n }, [animationData, loop, autoplay, name, onLoad, getJSON, src]);\r\n\r\n useEffect(() => {\r\n loadAnimation();\r\n }, [loadAnimation]);\r\n\r\n return ;\r\n};\r\n\r\nAnimation.defaultProps = defaultProps;\r\n\r\nAnimation.propTypes = propTypes;\r\n\r\nexport default Animation;\r\n","import Animation from './Animation';\r\n\r\nexport default Animation;\r\n","import React from 'react';\r\nimport Flex from '../../ui-kit/Flex';\r\n\r\nconst SummaryItem = ({ leftColumn, centerColumn, rightColumn, bold, highlight, ...props }) => (\r\n \r\n {leftColumn}\r\n \r\n {centerColumn}\r\n \r\n \r\n {rightColumn}\r\n \r\n \r\n);\r\n\r\nexport default SummaryItem;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { Box } from '../../../ui-kit';\r\nimport { BoldText } from '../../assets/SummaryStyles';\r\nimport SummaryItem from '../SummaryItemPackage';\r\nimport * as COPY from './utilities/copy';\r\n\r\nconst SimpleSummaryFooter = ({ total, onPaymentPage }) => {\r\n return (\r\n \r\n \r\n {onPaymentPage ? COPY.TOTAL : COPY.SUBTOTAL}\r\n \r\n }\r\n rightColumn={\r\n \r\n ${isNaN(total) ? 0.0 : total.toFixed(2)}\r\n \r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nSimpleSummaryFooter.propTypes = {\r\n total: PropTypes.number\r\n};\r\n\r\nSimpleSummaryFooter.defaultProps = {\r\n total: 0.0\r\n};\r\n\r\nexport default SimpleSummaryFooter;\r\n","export const specialRequestOptions = [\r\n {\r\n label: 'Close to elevator',\r\n value: 'EC'\r\n },\r\n {\r\n label: 'Close to the Waterpark',\r\n value: 'CWP'\r\n },\r\n {\r\n label: 'Far from Elevator',\r\n value: 'EF'\r\n },\r\n {\r\n label: 'Lobby Level',\r\n value: 'LL'\r\n },\r\n {\r\n label: \"Pack 'n Play\",\r\n value: 'CRB'\r\n },\r\n {\r\n label: 'Top Floor',\r\n value: 'TF'\r\n },\r\n {\r\n label: 'Other',\r\n value: 'OTHR'\r\n }\r\n];\r\n","// Reservations Reducer\r\n\r\nimport { initializeState } from '../../../utilities/storageUtils';\r\nimport reservationsActionTypes from './reservations.types';\r\n\r\nconst INITIAL_STATE = {\r\n tempUserInfo: {},\r\n confirmedReservation: {},\r\n createdReservation: {},\r\n reservationList: [],\r\n upcomingReservationList: [],\r\n pastReservationList: [],\r\n canceledReservationList: [],\r\n isLoading: false,\r\n isInitialLoading: false,\r\n requestFailed: false,\r\n requestHasFinished: false,\r\n reservationUser: undefined,\r\n errorMessage: null,\r\n errorType: '',\r\n status: '',\r\n cancellationHasFailed: false,\r\n lastNameFindReservationById: '',\r\n reservationKeyFindReservationById: { key: '', reservationId: '' }\r\n};\r\n\r\n/**\r\n *\r\n * IMPORTANT!!!\r\n * The validation of reservation.isCabana is required to avoid showing cabanas reservations\r\n * this was implemented by story 30448, this is just a FE fix, the fix needs to be completed\r\n * on the BE and will be implemented on another story\r\n */\r\nexport function reservationListHandler(reservationData) {\r\n const reservedReservations = reservationData['RESERVED'] ? reservationData['RESERVED'] : [];\r\n const changedReservations = reservationData['CHANGED'] ? reservationData['CHANGED'] : [];\r\n const noShowReservations = reservationData['NO_SHOW'] ? reservationData['NO_SHOW'] : [];\r\n const checkedOutReservations = reservationData['CHECKEDOUT'] ? reservationData['CHECKEDOUT'] : [];\r\n const filteredReservations = {\r\n upcomingReservationList: [...reservedReservations, ...changedReservations] ?? [],\r\n pastReservationList: [...noShowReservations, ...checkedOutReservations] ?? [],\r\n canceledReservationList: reservationData['CANCELED'] ?? []\r\n };\r\n return filteredReservations;\r\n}\r\n\r\nconst reservationsReducer = (state, action) => {\r\n state = initializeState(state, INITIAL_STATE);\r\n\r\n // Get Book information reducers\r\n switch (action.type) {\r\n case reservationsActionTypes.SET_RESERVATION_LAST_NAME_FIND_BY_ID:\r\n return {\r\n ...state,\r\n lastNameFindReservationById: action.lastName\r\n };\r\n case reservationsActionTypes.CREATE_RESERVATION_SUCCESS:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: {\r\n ...state.confirmedReservation\r\n },\r\n createdReservation: action.createdReservation,\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList]\r\n };\r\n case reservationsActionTypes.CREATE_RESERVATION_LOADING:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: {\r\n ...state.confirmedReservation\r\n },\r\n createdReservation: {\r\n ...state.createdReservation,\r\n reservation: {\r\n ...state.createdReservation.reservation\r\n }\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList],\r\n isLoading: action.isLoading\r\n };\r\n case reservationsActionTypes.CREATE_RESERVATION_ERROR:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: {\r\n ...state.confirmedReservation\r\n },\r\n createdReservation: {\r\n ...state.createdReservation,\r\n reservation: {\r\n ...state.createdReservation.reservation\r\n }\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList],\r\n errorMessage: action.errorMessage,\r\n errorType: action.errorType\r\n };\r\n case reservationsActionTypes.GET_RESERVATION_BY_ID_SUCCESS:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: action.confirmedReservation,\r\n createdReservation: {\r\n ...state.createdReservation,\r\n reservation: {\r\n ...state.createdReservation.reservation\r\n }\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList],\r\n requestFailed: false,\r\n isLoading: false,\r\n errorMessage: null\r\n };\r\n\r\n case reservationsActionTypes.GET_RESERVATION_BY_ID_ERROR:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: {\r\n ...INITIAL_STATE.confirmedReservation\r\n },\r\n createdReservation: {\r\n ...state.createdReservation,\r\n reservation: {\r\n ...state.createdReservation.reservation\r\n }\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList],\r\n isLoading: false\r\n };\r\n\r\n case reservationsActionTypes.GET_RESERVATION_BY_ID_FINISH:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...state.tempUserInfo,\r\n customer: {\r\n ...state.tempUserInfo.customer\r\n },\r\n details: {\r\n ...state.tempUserInfo.details\r\n },\r\n address: {\r\n ...state.tempUserInfo.address\r\n },\r\n payment: {\r\n ...state.tempUserInfo.payment\r\n }\r\n },\r\n confirmedReservation: {\r\n ...state.confirmedReservation\r\n },\r\n createdReservation: {\r\n ...state.createdReservation\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList],\r\n requestHasFinished: action.requestHasFinished\r\n };\r\n\r\n // Reservation item request succeded\r\n case reservationsActionTypes.GET_RESERVATION_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n confirmedReservation: action.confirmedReservation,\r\n reservationList: action.reservationList,\r\n upcomingReservationList: action.upcomingReservationList,\r\n pastReservationList: action.pastReservationList,\r\n canceledReservationList: action.canceledReservationList,\r\n reservationUser: action.reservationUser,\r\n requestFailed: false,\r\n isLoading: false,\r\n isInitialLoading: false,\r\n errorMessage: null\r\n };\r\n // The request is currently running\r\n case reservationsActionTypes.GET_RESERVATION_INFO_LOADING:\r\n return {\r\n ...state,\r\n isLoading: action.isLoading\r\n };\r\n // Reservation item request failed\r\n case reservationsActionTypes.GET_RESERVATION_INFO_ERROR:\r\n return {\r\n ...state,\r\n reservationList: action.reservationList,\r\n upcomingReservationList: [],\r\n pastReservationList: [],\r\n canceledReservationList: [],\r\n reservationUser: action.reservationUser,\r\n requestFailed: action.requestFailed,\r\n errorMessage: action.errorMessage,\r\n isLoading: false,\r\n isInitialLoading: false\r\n };\r\n // Reservation item request finished\r\n case reservationsActionTypes.GET_RESERVATION_INFO_FINISH:\r\n const getValidValue = (value, key) => (value !== undefined ? value : state[key]);\r\n\r\n const newIsLoadingValue = getValidValue(action.isLoading, 'isLoading');\r\n const newErrorMessageValue = getValidValue(action.errorMessage, 'errorMessage');\r\n const newRequestFailedValue = getValidValue(action.requestFailed, 'requestFailed');\r\n\r\n return {\r\n ...state,\r\n requestHasFinished: action.requestHasFinished,\r\n isLoading: newIsLoadingValue,\r\n errorMessage: newErrorMessageValue,\r\n requestFailed: newRequestFailedValue\r\n };\r\n\r\n case reservationsActionTypes.CREATE_RESERVATION_TEMP_USER:\r\n return {\r\n ...state,\r\n tempUserInfo: {\r\n ...action.tempUserInfo\r\n },\r\n confirmedReservation: {\r\n ...state.confirmedReservation\r\n },\r\n createdReservation: {\r\n ...state.createdReservation\r\n },\r\n reservationList: [...state.reservationList],\r\n upcomingReservationList: [...state.upcomingReservationList],\r\n pastReservationList: [...state.pastReservationList],\r\n canceledReservationList: [...state.canceledReservationList]\r\n };\r\n // Action to clear the errors\r\n case reservationsActionTypes.CLEAR_RESERVATION_ERROR:\r\n return {\r\n ...state,\r\n requestFailed: false,\r\n errorMessage: null,\r\n errorType: ''\r\n };\r\n\r\n // Action to set initial loading.\r\n case reservationsActionTypes.GET_RESERVATION_INITIAL_INFO_LOADING:\r\n return {\r\n ...state,\r\n isInitialLoading: action.isInitialLoading\r\n };\r\n\r\n case reservationsActionTypes.SET_RESERVATION_KEY_FIND_RESERVATION_BY_ID:\r\n return {\r\n ...state,\r\n reservationKeyFindReservationById: action.reservationIdKey\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reservationsReducer;\r\n","export const PAGE_TITLE = 'add-ons';\r\n","import React from 'react'\n\nconst CloseCircleIcon = ({\n size,\n color,\n ...props\n}) => (\n \n \n \n)\n\nCloseCircleIcon.displayName = 'CloseCircleIcon'\n\nCloseCircleIcon.defaultProps = {\n size: 24,\n color: 'currentcolor'\n}\n\nexport default CloseCircleIcon","const isAuthorMode = () => {\r\n const bodyClassList = document.body.classList;\r\n return bodyClassList.contains('edit') || bodyClassList.contains('preview');\r\n};\r\nexport default isAuthorMode;\r\n","// Default location used by LocationPicker when no location is mentioned on URL\r\nexport const defaultLocation = {\r\n location: 'WILLVA',\r\n url: 'williamsburg'\r\n};\r\n","var map = {\n\t\"./OfferNotFound.svg\": 1085,\n\t\"./OffersNormal.svg\": 1086,\n\t\"./OffersNormalWhite.svg\": 1087,\n\t\"./OffersOpen.svg\": 1088,\n\t\"./ac.svg\": 1089,\n\t\"./accessible.svg\": 1090,\n\t\"./accessibleIcon.svg\": 1091,\n\t\"./airplane.svg\": 1092,\n\t\"./alertErrorIcon.svg\": 1093,\n\t\"./alertInfoIcon.svg\": 1094,\n\t\"./alertOfferIcon.svg\": 1095,\n\t\"./alertSuccessIcon.svg\": 1096,\n\t\"./arrival.svg\": 1097,\n\t\"./arrowCaretLeft.svg\": 1098,\n\t\"./arrowDown.svg\": 1099,\n\t\"./arrowDownRounded.svg\": 1100,\n\t\"./arrowDownThin.svg\": 1101,\n\t\"./arrowLeft.svg\": 1102,\n\t\"./arrowRight.svg\": 1103,\n\t\"./arrowRightThin.svg\": 1104,\n\t\"./arrowUp.svg\": 1105,\n\t\"./attention.svg\": 1106,\n\t\"./attentionWarning.svg\": 1107,\n\t\"./attractionsBlue.svg\": 1108,\n\t\"./attractionsIcon.svg\": 1109,\n\t\"./attractionsWhite.svg\": 1110,\n\t\"./automatic.svg\": 1111,\n\t\"./bag.svg\": 1112,\n\t\"./beach.svg\": 1113,\n\t\"./bed.svg\": 1114,\n\t\"./bedAkela.svg\": 1115,\n\t\"./birthdayBlue.svg\": 1116,\n\t\"./birthdayIcon.svg\": 1117,\n\t\"./birthdayWhite.svg\": 1118,\n\t\"./blueQuestion.svg\": 1119,\n\t\"./boxChecked.svg\": 1120,\n\t\"./boxEmpty.svg\": 1121,\n\t\"./boxMinus.svg\": 1122,\n\t\"./boxPlus.svg\": 1123,\n\t\"./breakfast.svg\": 1124,\n\t\"./build.svg\": 1125,\n\t\"./business.svg\": 1126,\n\t\"./cabin.svg\": 1127,\n\t\"./cake.svg\": 1128,\n\t\"./calendar-icon.svg\": 1129,\n\t\"./calendar-outline.svg\": 1130,\n\t\"./calendar.svg\": 1131,\n\t\"./calendarPicker.svg\": 1132,\n\t\"./carCircle.svg\": 1133,\n\t\"./carDoor.svg\": 1134,\n\t\"./carouselChevronLeft.svg\": 1135,\n\t\"./carouselChevronLeftThin.svg\": 1136,\n\t\"./carouselChevronRight.svg\": 1137,\n\t\"./carouselChevronRigthThin.svg\": 1138,\n\t\"./carriage.svg\": 1139,\n\t\"./cars.svg\": 1140,\n\t\"./casino.svg\": 1141,\n\t\"./chairs.svg\": 1142,\n\t\"./chart.svg\": 1143,\n\t\"./chat.svg\": 1144,\n\t\"./check.svg\": 1145,\n\t\"./checkedIcon.svg\": 1146,\n\t\"./chevron-thin-right.svg\": 1147,\n\t\"./chevronDown.svg\": 1148,\n\t\"./chevronLeft.svg\": 1149,\n\t\"./chevronRight.svg\": 1150,\n\t\"./chevronThinLeft.svg\": 1151,\n\t\"./chevronUp.svg\": 1152,\n\t\"./chevronUpThin.svg\": 1153,\n\t\"./circleMinus.svg\": 1154,\n\t\"./circlePlus.svg\": 1155,\n\t\"./cityView.svg\": 1156,\n\t\"./clock.svg\": 1157,\n\t\"./close-icon.svg\": 1158,\n\t\"./close.svg\": 1159,\n\t\"./closeCircle.svg\": 1160,\n\t\"./closeIcon.svg\": 1161,\n\t\"./closeThin.svg\": 1162,\n\t\"./closedEye.svg\": 1163,\n\t\"./cloud.svg\": 1164,\n\t\"./collisionCoverage.svg\": 1165,\n\t\"./condoIcon.svg\": 1166,\n\t\"./coupon.svg\": 1167,\n\t\"./credit-card-outline.svg\": 1168,\n\t\"./creditCard.svg\": 1169,\n\t\"./cruises.svg\": 1170,\n\t\"./delete.svg\": 1171,\n\t\"./departure.svg\": 1172,\n\t\"./devices.svg\": 1173,\n\t\"./directions.svg\": 1174,\n\t\"./discount.svg\": 1175,\n\t\"./document.svg\": 1176,\n\t\"./dollar.svg\": 1177,\n\t\"./dollarCircle.svg\": 1178,\n\t\"./doubleArrowUpIcon.svg\": 1179,\n\t\"./doubleOccupancy.svg\": 1180,\n\t\"./earlyBird.svg\": 1181,\n\t\"./edit.svg\": 1182,\n\t\"./electric.svg\": 1183,\n\t\"./email.svg\": 1184,\n\t\"./emoticon.svg\": 1185,\n\t\"./event.svg\": 1186,\n\t\"./eventAvailable.svg\": 1187,\n\t\"./eventBusy.svg\": 1188,\n\t\"./facebook.svg\": 1189,\n\t\"./facebookBtn.svg\": 1190,\n\t\"./facebookIcon.svg\": 1191,\n\t\"./familyBlue.svg\": 1192,\n\t\"./familyIcon.svg\": 1193,\n\t\"./familyWhite.svg\": 1194,\n\t\"./fan.svg\": 1195,\n\t\"./favoriteHotel.svg\": 1196,\n\t\"./filter.svg\": 1197,\n\t\"./fitness.svg\": 1198,\n\t\"./flame.svg\": 1199,\n\t\"./flightCircle.svg\": 1200,\n\t\"./flightCoverage.svg\": 1201,\n\t\"./flights.svg\": 1202,\n\t\"./forbidden.svg\": 1203,\n\t\"./freeCancellation.svg\": 1204,\n\t\"./fridge.svg\": 1205,\n\t\"./front-desk.svg\": 1206,\n\t\"./fullSofaBed.svg\": 1207,\n\t\"./gallery.svg\": 1208,\n\t\"./gas.svg\": 1209,\n\t\"./globe.svg\": 1210,\n\t\"./golf.svg\": 1211,\n\t\"./googleBtn.svg\": 1212,\n\t\"./gps.svg\": 1213,\n\t\"./graph.svg\": 1214,\n\t\"./grid-gallery.svg\": 1215,\n\t\"./grid.svg\": 1216,\n\t\"./guestScore.svg\": 1217,\n\t\"./guests.svg\": 1218,\n\t\"./hd Tv.svg\": 1219,\n\t\"./help.svg\": 1220,\n\t\"./history.svg\": 1221,\n\t\"./home.svg\": 1222,\n\t\"./hotelCircle.svg\": 1223,\n\t\"./hotels.svg\": 1224,\n\t\"./house.svg\": 1225,\n\t\"./hybrid.svg\": 1226,\n\t\"./icons-32-bottles-water.svg\": 1227,\n\t\"./icons-32-deck-cards.svg\": 1228,\n\t\"./icons-32-mini-fridge.svg\": 1229,\n\t\"./inclusive.svg\": 1230,\n\t\"./information.svg\": 1231,\n\t\"./informationOutline.svg\": 1232,\n\t\"./instagram.svg\": 1233,\n\t\"./key.svg\": 1234,\n\t\"./kitchenette.svg\": 1235,\n\t\"./laptop.svg\": 1236,\n\t\"./lateNight.svg\": 1237,\n\t\"./list.svg\": 1238,\n\t\"./localBar.svg\": 1239,\n\t\"./location-pointer.svg\": 1240,\n\t\"./location_icon.svg\": 1241,\n\t\"./lock.svg\": 1242,\n\t\"./lodge-news.svg\": 1243,\n\t\"./loyalty.svg\": 1244,\n\t\"./luggage.svg\": 1245,\n\t\"./manual.svg\": 1246,\n\t\"./map.svg\": 1247,\n\t\"./menu.svg\": 1248,\n\t\"./microwave.svg\": 1249,\n\t\"./mileage.svg\": 1250,\n\t\"./minus-thin.svg\": 1251,\n\t\"./minus.svg\": 1252,\n\t\"./mobilePhone.svg\": 1253,\n\t\"./multiOccupancy.svg\": 1254,\n\t\"./notification.svg\": 1255,\n\t\"./offer.svg\": 1256,\n\t\"./openEye.svg\": 1257,\n\t\"./open_modal_link.svg\": 1258,\n\t\"./ottoman.svg\": 1259,\n\t\"./overage.svg\": 1260,\n\t\"./overage21.svg\": 1261,\n\t\"./overnight.svg\": 1262,\n\t\"./parking.svg\": 1263,\n\t\"./personAdd.svg\": 1264,\n\t\"./pets.svg\": 1265,\n\t\"./phone.svg\": 1266,\n\t\"./phone_icon.svg\": 1267,\n\t\"./picture.svg\": 1268,\n\t\"./pin.svg\": 1269,\n\t\"./plus-thin.svg\": 1270,\n\t\"./plus.svg\": 1271,\n\t\"./pool.svg\": 1272,\n\t\"./printer.svg\": 1273,\n\t\"./question.svg\": 1274,\n\t\"./quilt.svg\": 1275,\n\t\"./radioChecked.svg\": 1276,\n\t\"./radioEmpty.svg\": 1277,\n\t\"./radioMinus.svg\": 1278,\n\t\"./radioPlus.svg\": 1279,\n\t\"./rateCalendar.svg\": 1280,\n\t\"./refresh.svg\": 1281,\n\t\"./restaurant.svg\": 1282,\n\t\"./ribbon.svg\": 1283,\n\t\"./roomSize.svg\": 1284,\n\t\"./rowing.svg\": 1285,\n\t\"./sales-alert-solid.svg\": 1286,\n\t\"./search.svg\": 1287,\n\t\"./searchRecent.svg\": 1288,\n\t\"./seat.svg\": 1289,\n\t\"./seatBusiness.svg\": 1290,\n\t\"./seatEconomy.svg\": 1291,\n\t\"./security.svg\": 1292,\n\t\"./shuttle.svg\": 1293,\n\t\"./singleOccupancy.svg\": 1294,\n\t\"./smoking.svg\": 1295,\n\t\"./spa.svg\": 1296,\n\t\"./spaIcon.svg\": 1297,\n\t\"./splitTicket.svg\": 1298,\n\t\"./star.svg\": 1299,\n\t\"./starHalf.svg\": 1300,\n\t\"./steeringWheel.svg\": 1301,\n\t\"./success-check.svg\": 1302,\n\t\"./success-icon.svg\": 1303,\n\t\"./success.svg\": 1304,\n\t\"./successDuotone.svg\": 1305,\n\t\"./successOutline.svg\": 1306,\n\t\"./swap.svg\": 1307,\n\t\"./thumbsDown.svg\": 1308,\n\t\"./thumbsUp.svg\": 1309,\n\t\"./timer.svg\": 1310,\n\t\"./trashCan.svg\": 1311,\n\t\"./trendingUp.svg\": 1312,\n\t\"./trophy.svg\": 1313,\n\t\"./tune.svg\": 1314,\n\t\"./twitter.svg\": 1315,\n\t\"./ui-icon-birthdays.svg\": 1316,\n\t\"./ui-icon-cabana.svg\": 1317,\n\t\"./ui-icon-dining.svg\": 1318,\n\t\"./ui-icon-pass.svg\": 1319,\n\t\"./unlock.svg\": 1320,\n\t\"./user-new-ui.svg\": 1321,\n\t\"./user.svg\": 1322,\n\t\"./verified.svg\": 1323,\n\t\"./viewDetails.svg\": 1324,\n\t\"./virtual-events.svg\": 1325,\n\t\"./warning.svg\": 1326,\n\t\"./warningOutline.svg\": 1327,\n\t\"./web.svg\": 1328,\n\t\"./whirlpool.svg\": 1329,\n\t\"./white-check-mark.svg\": 1330,\n\t\"./wifi.svg\": 1331,\n\t\"./wiley.svg\": 1332,\n\t\"./wolf.svg\": 1333,\n\t\"./youtube.svg\": 1334,\n\t\"./zoomOut.svg\": 1335\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1084;","export default __webpack_public_path__ + \"static/media/OfferNotFound.0bb4a78e.svg\";","export default __webpack_public_path__ + \"static/media/OffersNormal.1472c5a9.svg\";","export default __webpack_public_path__ + \"static/media/OffersNormalWhite.6a893531.svg\";","export default __webpack_public_path__ + \"static/media/OffersOpen.a3c4605a.svg\";","export default __webpack_public_path__ + \"static/media/ac.a67a8cad.svg\";","export default __webpack_public_path__ + \"static/media/accessible.bb24c0a8.svg\";","export default __webpack_public_path__ + \"static/media/accessibleIcon.3ca1de13.svg\";","export default __webpack_public_path__ + \"static/media/airplane.650ef7e1.svg\";","export default __webpack_public_path__ + \"static/media/alertErrorIcon.9956fb8e.svg\";","export default __webpack_public_path__ + \"static/media/alertInfoIcon.cbf9190c.svg\";","export default __webpack_public_path__ + \"static/media/alertOfferIcon.56d20947.svg\";","export default __webpack_public_path__ + \"static/media/alertSuccessIcon.2edfba0a.svg\";","export default __webpack_public_path__ + \"static/media/arrival.6d6ffc60.svg\";","export default __webpack_public_path__ + \"static/media/arrowCaretLeft.99e9f56c.svg\";","export default __webpack_public_path__ + \"static/media/arrowDown.9dfcf66a.svg\";","export default __webpack_public_path__ + \"static/media/arrowDownRounded.7c26cef5.svg\";","export default __webpack_public_path__ + \"static/media/arrowDownThin.259850f1.svg\";","export default __webpack_public_path__ + \"static/media/arrowLeft.36692eca.svg\";","export default __webpack_public_path__ + \"static/media/arrowRight.8fd38d13.svg\";","export default __webpack_public_path__ + \"static/media/arrowRightThin.f398bf18.svg\";","export default __webpack_public_path__ + \"static/media/arrowUp.84db7ea2.svg\";","export default __webpack_public_path__ + \"static/media/attention.583d583a.svg\";","export default __webpack_public_path__ + \"static/media/attentionWarning.d2e6d9b8.svg\";","export default __webpack_public_path__ + \"static/media/attractionsBlue.13cd92ff.svg\";","export default __webpack_public_path__ + \"static/media/attractionsIcon.3e81d8ba.svg\";","export default __webpack_public_path__ + \"static/media/attractionsWhite.2da8845b.svg\";","export default __webpack_public_path__ + \"static/media/automatic.6a284b85.svg\";","export default __webpack_public_path__ + \"static/media/bag.a7bf5567.svg\";","export default __webpack_public_path__ + \"static/media/beach.83363029.svg\";","export default __webpack_public_path__ + \"static/media/bed.2946a131.svg\";","export default __webpack_public_path__ + \"static/media/bedAkela.67d5d07d.svg\";","export default __webpack_public_path__ + \"static/media/birthdayBlue.47d635d7.svg\";","export default __webpack_public_path__ + \"static/media/birthdayIcon.9eca36ce.svg\";","export default __webpack_public_path__ + \"static/media/birthdayWhite.13d4b43a.svg\";","export default __webpack_public_path__ + \"static/media/blueQuestion.3c5aa776.svg\";","export default __webpack_public_path__ + \"static/media/boxChecked.c343ce14.svg\";","export default __webpack_public_path__ + \"static/media/boxEmpty.b2e8209c.svg\";","export default __webpack_public_path__ + \"static/media/boxMinus.6312cfec.svg\";","export default __webpack_public_path__ + \"static/media/boxPlus.cfb124cd.svg\";","export default __webpack_public_path__ + \"static/media/breakfast.bb33017c.svg\";","export default __webpack_public_path__ + \"static/media/build.29604c44.svg\";","export default __webpack_public_path__ + \"static/media/business.04dd2c17.svg\";","export default __webpack_public_path__ + \"static/media/cabin.1538682f.svg\";","export default __webpack_public_path__ + \"static/media/cake.bf84b8b1.svg\";","export default __webpack_public_path__ + \"static/media/calendar-icon.c4b7b12b.svg\";","export default __webpack_public_path__ + \"static/media/calendar-outline.be0e1e3c.svg\";","export default __webpack_public_path__ + \"static/media/calendar.0e7aa3a7.svg\";","export default __webpack_public_path__ + \"static/media/calendarPicker.24def4ce.svg\";","export default __webpack_public_path__ + \"static/media/carCircle.2b62cf24.svg\";","export default __webpack_public_path__ + \"static/media/carDoor.745b5a72.svg\";","export default __webpack_public_path__ + \"static/media/carouselChevronLeft.233f9a44.svg\";","export default __webpack_public_path__ + \"static/media/carouselChevronLeftThin.e36f3994.svg\";","export default __webpack_public_path__ + \"static/media/carouselChevronRight.02521b76.svg\";","export default __webpack_public_path__ + \"static/media/carouselChevronRigthThin.fe62df3a.svg\";","export default __webpack_public_path__ + \"static/media/carriage.3399f6e1.svg\";","export default __webpack_public_path__ + \"static/media/cars.7a11f725.svg\";","export default __webpack_public_path__ + \"static/media/casino.ba1b7722.svg\";","export default __webpack_public_path__ + \"static/media/chairs.6209dbea.svg\";","export default __webpack_public_path__ + \"static/media/chart.9dcb2b0b.svg\";","export default __webpack_public_path__ + \"static/media/chat.268a6e8d.svg\";","export default __webpack_public_path__ + \"static/media/check.2cfe8bc2.svg\";","export default __webpack_public_path__ + \"static/media/checkedIcon.2eb662e5.svg\";","export default __webpack_public_path__ + \"static/media/chevron-thin-right.92263cc6.svg\";","export default __webpack_public_path__ + \"static/media/chevronDown.4d3c14e5.svg\";","export default __webpack_public_path__ + \"static/media/chevronLeft.a6f865aa.svg\";","export default __webpack_public_path__ + \"static/media/chevronRight.dbc221a7.svg\";","export default __webpack_public_path__ + \"static/media/chevronThinLeft.99e9f56c.svg\";","export default __webpack_public_path__ + \"static/media/chevronUp.0778875d.svg\";","export default __webpack_public_path__ + \"static/media/chevronUpThin.95119969.svg\";","export default __webpack_public_path__ + \"static/media/circleMinus.505c8fc6.svg\";","export default __webpack_public_path__ + \"static/media/circlePlus.093701a8.svg\";","export default __webpack_public_path__ + \"static/media/cityView.20705328.svg\";","export default __webpack_public_path__ + \"static/media/clock.8342530a.svg\";","export default __webpack_public_path__ + \"static/media/close-icon.8d19338e.svg\";","export default __webpack_public_path__ + \"static/media/close.941ea749.svg\";","export default __webpack_public_path__ + \"static/media/closeCircle.36675afa.svg\";","export default __webpack_public_path__ + \"static/media/closeIcon.ea7c95d7.svg\";","export default __webpack_public_path__ + \"static/media/closeThin.f38c5096.svg\";","export default __webpack_public_path__ + \"static/media/closedEye.0ee7fa56.svg\";","export default __webpack_public_path__ + \"static/media/cloud.19ef8aa4.svg\";","export default __webpack_public_path__ + \"static/media/collisionCoverage.a368af57.svg\";","export default __webpack_public_path__ + \"static/media/condoIcon.74258ee5.svg\";","export default __webpack_public_path__ + \"static/media/coupon.9a45035e.svg\";","export default __webpack_public_path__ + \"static/media/credit-card-outline.2b6835b6.svg\";","export default __webpack_public_path__ + \"static/media/creditCard.98a6a928.svg\";","export default __webpack_public_path__ + \"static/media/cruises.ab67f123.svg\";","export default __webpack_public_path__ + \"static/media/delete.151774f4.svg\";","export default __webpack_public_path__ + \"static/media/departure.1357e882.svg\";","export default __webpack_public_path__ + \"static/media/devices.c58b98c0.svg\";","export default __webpack_public_path__ + \"static/media/directions.079c7bcb.svg\";","export default __webpack_public_path__ + \"static/media/discount.e2d07667.svg\";","export default __webpack_public_path__ + \"static/media/document.b85763cf.svg\";","export default __webpack_public_path__ + \"static/media/dollar.0358da97.svg\";","export default __webpack_public_path__ + \"static/media/dollarCircle.b3f60821.svg\";","export default __webpack_public_path__ + \"static/media/doubleArrowUpIcon.42a9329b.svg\";","export default __webpack_public_path__ + \"static/media/doubleOccupancy.5edb3c44.svg\";","export default __webpack_public_path__ + \"static/media/earlyBird.0e6f1bd2.svg\";","export default __webpack_public_path__ + \"static/media/edit.7b40250b.svg\";","export default __webpack_public_path__ + \"static/media/electric.868bdea2.svg\";","export default __webpack_public_path__ + \"static/media/email.9b0a2978.svg\";","export default __webpack_public_path__ + \"static/media/emoticon.27961774.svg\";","export default __webpack_public_path__ + \"static/media/event.b45c0c96.svg\";","export default __webpack_public_path__ + \"static/media/eventAvailable.6cef03d7.svg\";","export default __webpack_public_path__ + \"static/media/eventBusy.2d0a2f2b.svg\";","export default __webpack_public_path__ + \"static/media/facebook.60a030fa.svg\";","export default __webpack_public_path__ + \"static/media/facebookBtn.5264afc5.svg\";","export default __webpack_public_path__ + \"static/media/facebookIcon.f71c8177.svg\";","export default __webpack_public_path__ + \"static/media/familyBlue.8e3a0c40.svg\";","export default __webpack_public_path__ + \"static/media/familyIcon.ff294ed0.svg\";","export default __webpack_public_path__ + \"static/media/familyWhite.3e96c19f.svg\";","export default __webpack_public_path__ + \"static/media/fan.9b85c651.svg\";","export default __webpack_public_path__ + \"static/media/favoriteHotel.38b0bdfb.svg\";","export default __webpack_public_path__ + \"static/media/filter.d6c1d511.svg\";","export default __webpack_public_path__ + \"static/media/fitness.b437d92a.svg\";","export default __webpack_public_path__ + \"static/media/flame.67e1977c.svg\";","export default __webpack_public_path__ + \"static/media/flightCircle.bb23ca46.svg\";","export default __webpack_public_path__ + \"static/media/flightCoverage.a3ca6398.svg\";","export default __webpack_public_path__ + \"static/media/flights.4cf6ff81.svg\";","export default __webpack_public_path__ + \"static/media/forbidden.b6546cc7.svg\";","export default __webpack_public_path__ + \"static/media/freeCancellation.28215d78.svg\";","export default __webpack_public_path__ + \"static/media/fridge.93a454b0.svg\";","export default __webpack_public_path__ + \"static/media/front-desk.9917bfba.svg\";","export default __webpack_public_path__ + \"static/media/fullSofaBed.ee6d4817.svg\";","export default __webpack_public_path__ + \"static/media/gallery.d16c4c14.svg\";","export default __webpack_public_path__ + \"static/media/gas.eb69c73c.svg\";","export default __webpack_public_path__ + \"static/media/globe.9b36c42a.svg\";","export default __webpack_public_path__ + \"static/media/golf.9d099937.svg\";","export default __webpack_public_path__ + \"static/media/googleBtn.a4ee1211.svg\";","export default __webpack_public_path__ + \"static/media/gps.8abb0b0c.svg\";","export default __webpack_public_path__ + \"static/media/graph.a4458fae.svg\";","export default __webpack_public_path__ + \"static/media/grid-gallery.c95a47b5.svg\";","export default __webpack_public_path__ + \"static/media/grid.adc89035.svg\";","export default __webpack_public_path__ + \"static/media/guestScore.cfeba791.svg\";","export default __webpack_public_path__ + \"static/media/guests.c356d7b1.svg\";","export default __webpack_public_path__ + \"static/media/hd Tv.1af8749c.svg\";","export default __webpack_public_path__ + \"static/media/help.59b1268d.svg\";","export default __webpack_public_path__ + \"static/media/history.faa40da4.svg\";","export default __webpack_public_path__ + \"static/media/home.4e75e1b8.svg\";","export default __webpack_public_path__ + \"static/media/hotelCircle.6c6a130f.svg\";","export default __webpack_public_path__ + \"static/media/hotels.acabde4f.svg\";","export default __webpack_public_path__ + \"static/media/house.2ee6ff10.svg\";","export default __webpack_public_path__ + \"static/media/hybrid.45927adc.svg\";","export default __webpack_public_path__ + \"static/media/icons-32-bottles-water.d2853c6d.svg\";","export default __webpack_public_path__ + \"static/media/icons-32-deck-cards.7c3736ad.svg\";","export default __webpack_public_path__ + \"static/media/icons-32-mini-fridge.5afc2fc3.svg\";","export default __webpack_public_path__ + \"static/media/inclusive.b616e583.svg\";","export default __webpack_public_path__ + \"static/media/information.c4889bbc.svg\";","export default __webpack_public_path__ + \"static/media/informationOutline.9b6c323e.svg\";","export default __webpack_public_path__ + \"static/media/instagram.5a70c3bc.svg\";","export default __webpack_public_path__ + \"static/media/key.8270b0ad.svg\";","export default __webpack_public_path__ + \"static/media/kitchenette.69648fe4.svg\";","export default __webpack_public_path__ + \"static/media/laptop.a72162d5.svg\";","export default __webpack_public_path__ + \"static/media/lateNight.cbcd9fc2.svg\";","export default __webpack_public_path__ + \"static/media/list.5d09ef30.svg\";","export default __webpack_public_path__ + \"static/media/localBar.7849a341.svg\";","export default __webpack_public_path__ + \"static/media/location-pointer.17b9d403.svg\";","export default __webpack_public_path__ + \"static/media/location_icon.5d11a79a.svg\";","export default __webpack_public_path__ + \"static/media/lock.eef1a017.svg\";","export default __webpack_public_path__ + \"static/media/lodge-news.b3d7aa46.svg\";","export default __webpack_public_path__ + \"static/media/loyalty.beaf26a7.svg\";","export default __webpack_public_path__ + \"static/media/luggage.2d66c72d.svg\";","export default __webpack_public_path__ + \"static/media/manual.9f138946.svg\";","export default __webpack_public_path__ + \"static/media/map.3488ab8b.svg\";","export default __webpack_public_path__ + \"static/media/menu.d17985fc.svg\";","export default __webpack_public_path__ + \"static/media/microwave.3cd17075.svg\";","export default __webpack_public_path__ + \"static/media/mileage.eb8cf302.svg\";","export default __webpack_public_path__ + \"static/media/minus-thin.205856de.svg\";","export default __webpack_public_path__ + \"static/media/minus.97620447.svg\";","export default __webpack_public_path__ + \"static/media/mobilePhone.a680af5d.svg\";","export default __webpack_public_path__ + \"static/media/multiOccupancy.216b4aa0.svg\";","export default __webpack_public_path__ + \"static/media/notification.9f749575.svg\";","export default __webpack_public_path__ + \"static/media/offer.7ffae217.svg\";","export default __webpack_public_path__ + \"static/media/openEye.e0459549.svg\";","export default __webpack_public_path__ + \"static/media/open_modal_link.eada0345.svg\";","export default __webpack_public_path__ + \"static/media/ottoman.a6b33247.svg\";","export default __webpack_public_path__ + \"static/media/overage.7ff492ef.svg\";","export default __webpack_public_path__ + \"static/media/overage21.705bd9b6.svg\";","export default __webpack_public_path__ + \"static/media/overnight.bac5a0c7.svg\";","export default __webpack_public_path__ + \"static/media/parking.d0fd63c1.svg\";","export default __webpack_public_path__ + \"static/media/personAdd.ae7ce60b.svg\";","export default __webpack_public_path__ + \"static/media/pets.357eecd8.svg\";","export default __webpack_public_path__ + \"static/media/phone.49f002e3.svg\";","export default __webpack_public_path__ + \"static/media/phone_icon.a680af5d.svg\";","export default __webpack_public_path__ + \"static/media/picture.5027cc7e.svg\";","export default __webpack_public_path__ + \"static/media/pin.adac1b49.svg\";","export default __webpack_public_path__ + \"static/media/plus-thin.3bf90891.svg\";","export default __webpack_public_path__ + \"static/media/plus.5fb2ccd5.svg\";","export default __webpack_public_path__ + \"static/media/pool.faea1a4b.svg\";","export default __webpack_public_path__ + \"static/media/printer.79179e1e.svg\";","export default __webpack_public_path__ + \"static/media/question.f9256074.svg\";","export default __webpack_public_path__ + \"static/media/quilt.b7823921.svg\";","export default __webpack_public_path__ + \"static/media/radioChecked.dcf47cc3.svg\";","export default __webpack_public_path__ + \"static/media/radioEmpty.37990fb9.svg\";","export default __webpack_public_path__ + \"static/media/radioMinus.1998915e.svg\";","export default __webpack_public_path__ + \"static/media/radioPlus.766098c5.svg\";","export default __webpack_public_path__ + \"static/media/rateCalendar.2b00bebe.svg\";","export default __webpack_public_path__ + \"static/media/refresh.a94233b3.svg\";","export default __webpack_public_path__ + \"static/media/restaurant.33335246.svg\";","export default __webpack_public_path__ + \"static/media/ribbon.9d747aab.svg\";","export default __webpack_public_path__ + \"static/media/roomSize.7dbfa862.svg\";","export default __webpack_public_path__ + \"static/media/rowing.b77980e8.svg\";","export default __webpack_public_path__ + \"static/media/sales-alert-solid.1d93fb2f.svg\";","export default __webpack_public_path__ + \"static/media/search.781b4274.svg\";","export default __webpack_public_path__ + \"static/media/searchRecent.56c35b44.svg\";","export default __webpack_public_path__ + \"static/media/seat.994764e0.svg\";","export default __webpack_public_path__ + \"static/media/seatBusiness.ddeed677.svg\";","export default __webpack_public_path__ + \"static/media/seatEconomy.d7bc526c.svg\";","export default __webpack_public_path__ + \"static/media/security.18df480b.svg\";","export default __webpack_public_path__ + \"static/media/shuttle.de2ec4ff.svg\";","export default __webpack_public_path__ + \"static/media/singleOccupancy.628d19b6.svg\";","export default __webpack_public_path__ + \"static/media/smoking.ddfb3656.svg\";","export default __webpack_public_path__ + \"static/media/spa.efced4cf.svg\";","export default __webpack_public_path__ + \"static/media/spaIcon.bdc583ca.svg\";","export default __webpack_public_path__ + \"static/media/splitTicket.cd246869.svg\";","export default __webpack_public_path__ + \"static/media/star.a3530845.svg\";","export default __webpack_public_path__ + \"static/media/starHalf.0f75bec3.svg\";","export default __webpack_public_path__ + \"static/media/steeringWheel.a07eaa4e.svg\";","export default __webpack_public_path__ + \"static/media/success-check.0f9ea56e.svg\";","export default __webpack_public_path__ + \"static/media/success-icon.779957e4.svg\";","export default __webpack_public_path__ + \"static/media/success.8e725dc6.svg\";","export default __webpack_public_path__ + \"static/media/successDuotone.f01724b5.svg\";","export default __webpack_public_path__ + \"static/media/successOutline.4b41ebf1.svg\";","export default __webpack_public_path__ + \"static/media/swap.c5c9f6d5.svg\";","export default __webpack_public_path__ + \"static/media/thumbsDown.eff2eb6e.svg\";","export default __webpack_public_path__ + \"static/media/thumbsUp.b37343c4.svg\";","export default __webpack_public_path__ + \"static/media/timer.b6cf5f39.svg\";","export default __webpack_public_path__ + \"static/media/trashCan.a2ee66e0.svg\";","export default __webpack_public_path__ + \"static/media/trendingUp.76eea75c.svg\";","export default __webpack_public_path__ + \"static/media/trophy.c80a3730.svg\";","export default __webpack_public_path__ + \"static/media/tune.35d5ad8e.svg\";","export default __webpack_public_path__ + \"static/media/twitter.c98997bf.svg\";","export default __webpack_public_path__ + \"static/media/ui-icon-birthdays.f6bf5dbe.svg\";","export default __webpack_public_path__ + \"static/media/ui-icon-cabana.d33e14bb.svg\";","export default __webpack_public_path__ + \"static/media/ui-icon-dining.9d2573ee.svg\";","export default __webpack_public_path__ + \"static/media/ui-icon-pass.4f359e64.svg\";","export default __webpack_public_path__ + \"static/media/unlock.32efae50.svg\";","export default __webpack_public_path__ + \"static/media/user-new-ui.c0e5a0e2.svg\";","export default __webpack_public_path__ + \"static/media/user.930c3900.svg\";","export default __webpack_public_path__ + \"static/media/verified.cdc383e6.svg\";","export default __webpack_public_path__ + \"static/media/viewDetails.b0ef891b.svg\";","export default __webpack_public_path__ + \"static/media/virtual-events.87885e0c.svg\";","export default __webpack_public_path__ + \"static/media/warning.9e32c874.svg\";","export default __webpack_public_path__ + \"static/media/warningOutline.d9cbe4d7.svg\";","export default __webpack_public_path__ + \"static/media/web.e4d4dcd4.svg\";","export default __webpack_public_path__ + \"static/media/whirlpool.83f9a4b2.svg\";","export default __webpack_public_path__ + \"static/media/white-check-mark.8160513d.svg\";","export default __webpack_public_path__ + \"static/media/wifi.f5dc3630.svg\";","export default __webpack_public_path__ + \"static/media/wiley.23e26099.svg\";","export default __webpack_public_path__ + \"static/media/wolf.a2cfd326.svg\";","export default __webpack_public_path__ + \"static/media/youtube.035850fc.svg\";","export default __webpack_public_path__ + \"static/media/zoomOut.f836678b.svg\";","import { isDevEnvironment } from '../utilities/env';\r\n\r\n// const birthdayPartyTimesAndLocationsJson = [\r\n// {\r\n// property: 'ATLAGA',\r\n// timesAndLocations: [\r\n// {\r\n// value: 0,\r\n// name: '11:30 am to 1:00 pm in a reserved area outside of the water park'\r\n// },\r\n// {\r\n// value: 1,\r\n// name: '1:30 pm to 3:00 pm in a reserved area outside of the water park'\r\n// },\r\n// {\r\n// value: 2,\r\n// name: '3:30 pm to 5:00 pm in a reserved area outside of the water park'\r\n// }\r\n// ]\r\n// },\r\n// {\r\n// property: 'BLOOMN',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:30 to 1:30 pm at Campfire Kitchen' },\r\n// { value: 1, name: '2:00 to 3:00 pm at Campfire Kitchen' },\r\n// { value: 2, name: '3:30 to 4:30 pm at Campfire Kitchen' },\r\n// {\r\n// value: 3,\r\n// name: '4:00 to 5:00 pm at Buckets Incredible Craveables'\r\n// },\r\n// {\r\n// value: 4,\r\n// name: '6:00 to 7:00 pm at Buckets Incredible Craveables'\r\n// },\r\n// {\r\n// value: 5,\r\n// name: '7:30 to 8:30 pm at Buckets Incredible Craveables'\r\n// }\r\n// ]\r\n// },\r\n// {\r\n// property: 'COLOCO',\r\n// timesAndLocations: [\r\n// { value: 0, name: '11:30 am at Hungry As A Wolf' },\r\n// { value: 1, name: '1:30 pm at Hungry As A Wolf' },\r\n// { value: 2, name: '3:30 pm at Hungry As A Wolf' },\r\n// { value: 3, name: '5:30 pm at Hungry As A Wolf' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'CONCNC',\r\n// timesAndLocations: [\r\n// {\r\n// value: 0,\r\n// name: '12:30 pm to 2:00 pm at The Loose Moose Cottage'\r\n// },\r\n// { value: 1, name: '2:30 pm to 4:00 pm at The Loose Moose Cottage' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'DELLWI',\r\n// timesAndLocations: [\r\n// { value: 0, name: '11 a.m. to 12:30 pm in the water park' },\r\n// { value: 1, name: '1 to 2:30 pm in the water park' },\r\n// { value: 2, name: '3 to 4:30 pm in the water park' },\r\n// { value: 3, name: '5 to 6:30 pm in the water park' },\r\n// { value: 4, name: '7 to 8:30 pm in the water park' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'GRANWA',\r\n// timesAndLocations: [\r\n// { value: 0, name: '1 to 2:30 pm at The Water Park Mezzanine' },\r\n// { value: 1, name: '2 to 3:30 pm at The Water Park Mezzanine' },\r\n// { value: 2, name: '3 to 4:30 pm at The Water Park Mezzanine' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'GRAPTX',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:30 to 1:30 pm at The Loose Moose Cottage' },\r\n// { value: 1, name: '2:30 to 4:00 pm at The Loose Moose Cottage' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'GURNIL',\r\n// timesAndLocations: [\r\n// { value: 0, name: '11:00 am to 12:30 pm in Campfire Kitchen' },\r\n// { value: 1, name: '1:00 pm to 2:30 pm in Campfire Kitchen' },\r\n// { value: 2, name: '3:00 pm to 4:30 pm in Campfire Kitchen' },\r\n// { value: 3, name: '5:00 pm to 6:30 pm in Campfire Kitchen' },\r\n// { value: 4, name: '7:00 pm to 8:30 pm in Campfire Kitchen' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'KANSKS',\r\n// timesAndLocations: [\r\n// {\r\n// value: 0,\r\n// name: '12:00 pm to 1:30 pm at Camp Critter Bar & Grille'\r\n// },\r\n// {\r\n// value: 1,\r\n// name: '2:00 pm to 3:30 pm at Camp Critter Bar & Grille'\r\n// },\r\n// {\r\n// value: 2,\r\n// name: '4:00 pm to 5:30 pm at Camp Critter Bar & Grille'\r\n// }\r\n// ]\r\n// },\r\n// {\r\n// property: 'MASOOH',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:00 pm at Loose Moose' },\r\n// { value: 1, name: '1:00 pm at Loose Moose' },\r\n// { value: 2, name: '2:00 pm at Loose Moose' },\r\n// { value: 3, name: '3:00 pm at Loose Moose' },\r\n// { value: 4, name: '4:00 pm at Loose Moose' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'NEWEMA',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:30 to 2:00 pm at Lodge Wood Fired Grill' },\r\n// { value: 1, name: '2:30 to 4:00 pm at Lodge Wood Fired Grill' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'NIAGON',\r\n// timesAndLocations: [{ value: 0, name: 'Unknown' }]\r\n// },\r\n// {\r\n// property: 'POCOPA',\r\n// timesAndLocations: [\r\n// {\r\n// value: 0,\r\n// name:\r\n// '1:00 to 2:00 pm Bear Den (located inside The Loose Moose Cottage) or Northwest Territory'\r\n// },\r\n// {\r\n// value: 1,\r\n// name:\r\n// '2:00 to 3:00 pm Bear Den (located inside The Loose Moose Cottage) or Northwest Territory'\r\n// },\r\n// {\r\n// value: 2,\r\n// name:\r\n// '3:00 to 4:00 pm Bear Den (located inside The Loose Moose Cottage) or Northwest Territory'\r\n// }\r\n// ]\r\n// },\r\n// {\r\n// property: 'SANDOH',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:00 to 1:00 pm at Gitchigoomie Grill' },\r\n// { value: 1, name: '1:00 to 2:00 pm at Gitchigoomie Grill' },\r\n// { value: 2, name: '2:00 to 3:00 pm at Gitchigoomie Grill' },\r\n// { value: 3, name: '4:00 to 5:00 pm at Gitchigoomie Grill' }\r\n// ]\r\n// },\r\n// {\r\n// property: 'SCOTAZ',\r\n// timesAndLocations: [{ value: 0, name: 'Unknown' }]\r\n// },\r\n// {\r\n// property: 'SOUTCA',\r\n// timesAndLocations: [{ value: 0, name: 'Unknown' }]\r\n// },\r\n// {\r\n// property: 'TRAVMI',\r\n// timesAndLocations: [\r\n// {\r\n// value: 0,\r\n// name: '11:00 am to 12:30 pm in the Water Park Birthday Party Area'\r\n// },\r\n// {\r\n// value: 1,\r\n// name: '1:00 pm to 2:30 pm in the Water Park Birthday Party Area'\r\n// },\r\n// {\r\n// value: 2,\r\n// name: '3:00 pm to 4:30 pm in the Water Park Birthday Party Area'\r\n// },\r\n// {\r\n// value: 3,\r\n// name: '5:00 pm to 6:30 pm in the Water Park Birthday Party Area'\r\n// }\r\n// ]\r\n// },\r\n// {\r\n// property: 'WILLVA',\r\n// timesAndLocations: [\r\n// { value: 0, name: '12:00 pm to 1:30 pm in the restaurant' },\r\n// { value: 1, name: '12:30 pm to 2:00 pm in the restaurant' },\r\n// { value: 2, name: '1:00 pm to 2:30 pm in the restaurant' },\r\n// { value: 3, name: '1:30 pm to 3:00 pm in the restaurant' },\r\n// { value: 4, name: '2:00 pm to 3:30 pm in the restaurant' },\r\n// { value: 5, name: '2:30 pm to 4:00 pm in the restaurant' },\r\n// { value: 6, name: '3:00 pm to 4:30 pm in the restaurant' }\r\n// ]\r\n// }\r\n// ];\r\n\r\nconst birthdayPartyTimesAndLocationsJson = [\r\n {\r\n name: '04:00 PM to 05:30 PM at Campfire Kitchen',\r\n value: 0\r\n },\r\n {\r\n name: '06:00 PM to 07:30 PM at Campfire Kitchen',\r\n value: 1\r\n },\r\n {\r\n name: '08:00 PM to 09:30 PM at Campfire Kitchen',\r\n value: 2\r\n },\r\n {\r\n name: '10:00 PM to 11:30 PM at Campfire Kitchen',\r\n value: 3\r\n },\r\n {\r\n name: '12:00 AM to 01:30 AM at Campfire Kitchen',\r\n value: 4\r\n }\r\n];\r\n\r\nif (isDevEnvironment) {\r\n window.birthdayPartyTimesAndLocationsJson = JSON.stringify(\r\n birthdayPartyTimesAndLocationsJson\r\n );\r\n}\r\n","import { isDevEnvironment } from '../utilities/env';\r\n\r\nconst bookingEngineAlert = [\r\n {\r\n enableBookingAlert: true,\r\n startNotificationDate: '01/09/2020',\r\n endNotificationDate: '30/09/2020',\r\n startSearchDate: '01/09/2020',\r\n endSearchDate: '30/09/2020',\r\n iconImage: '/content/dam/greatwolf/sites/www/global/en/story-time-icon.svg',\r\n iconAlt: '(1) Booking Engine Alert Icon',\r\n message:\r\n \"

(1) Heads Up! This alert needs your attention, but it's not super important. Learn more.\\r\\n\"\r\n },\r\n {\r\n enableBookingAlert: true,\r\n startNotificationDate: '01/08/2020',\r\n endNotificationDate: '30/08/2020',\r\n startSearchDate: '01/08/2020',\r\n endSearchDate: '30/08/2020',\r\n iconImage: '/content/dam/greatwolf/sites/www/global/en/story-time-icon.svg',\r\n iconAlt: '(2) Booking Engine Alert Icon',\r\n message:\r\n \"

(2) Heads Up! This alert needs your attention, but it's not super important. Learn more.\\r\\n\"\r\n },\r\n {\r\n enableBookingAlert: true,\r\n startNotificationDate: '01/08/2020',\r\n endNotificationDate: '30/08/2020',\r\n startSearchDate: '01/08/2020',\r\n endSearchDate: '30/08/2020',\r\n iconImage: '/content/dam/greatwolf/sites/www/global/en/story-time-icon.svg',\r\n iconAlt: '(3) Booking Engine Alert Icon',\r\n message:\r\n \"

(3) Heads Up! This alert needs your attention, but it's not super important. Learn more.\\r\\n\"\r\n }\r\n];\r\n\r\nif (isDevEnvironment) {\r\n window.bookingEngineAlert = JSON.stringify(bookingEngineAlert);\r\n}\r\n","import { isDevEnvironment } from '../utilities/env';\r\n\r\nconst mysteryDealPromoList = {\r\n data: [\r\n {\r\n offerCode: 'PROMO10',\r\n rateCode: 'PROMO10',\r\n percentage: 10\r\n },\r\n {\r\n offerCode: 'PROMO20',\r\n rateCode: 'PROMO20',\r\n percentage: 20\r\n },\r\n {\r\n offerCode: 'ESAVE',\r\n rateCode: 'ESAVE',\r\n percentage: 25\r\n },\r\n {\r\n offerCode: 'MOREFUN',\r\n rateCode: 'MOREFUN',\r\n percentage: 40\r\n }\r\n ]\r\n};\r\n\r\nif (isDevEnvironment) {\r\n window.mysteryDealPromoList = JSON.stringify(mysteryDealPromoList);\r\n}\r\n","import { isDevEnvironment } from '../utilities/env';\r\n\r\nconst promoCodeListJson = [\r\n { promoCode: 'EMDDIN', isExclusive: 'true' },\r\n { promoCode: 'YEAREND', isExclusive: 'true' },\r\n { promoCode: 'HOWL', isExclusive: 'false' },\r\n { promoCode: 'SNOWLAND', isExclusive: 'false' },\r\n { promoCode: 'MOREFUN', isExclusive: 'false' },\r\n { promoCode: 'ESAVE', isExclusive: 'true' },\r\n { promoCode: 'ESAVER', isExclusive: 'true' },\r\n { promoCode: 'HEROES', isExclusive: 'false' },\r\n { promoCode: 'TRIPLEFUN', isExclusive: 'false' },\r\n { promoCode: 'FINAL', isExclusive: 'true' },\r\n { promoCode: 'COUNTDOWN', isExclusive: 'true' },\r\n { promoCode: 'SUMMERFN', isExclusive: 'true' },\r\n { promoCode: 'SCHOOL', isExclusive: 'true' }\r\n];\r\n\r\nif (isDevEnvironment) {\r\n window.promoCodeList = JSON.stringify(promoCodeListJson);\r\n}\r\n","import { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nclass ScrollToTop extends Component {\r\n componentDidUpdate(prevProps) {\r\n if (this.props.location.pathname !== prevProps.location.pathname) {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n render() {\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default withRouter(ScrollToTop);\r\n","import axios from 'axios';\r\nimport { MODAL_KEYS } from '../../components/GlobalModal/modalSource';\r\nimport { openModal } from '../../store/componentStores/GlobalModal/globalModal.actions';\r\n\r\naxios.interceptors.response.use(undefined, async err => {\r\n if (err.response?.status === 401 || err.response?.data?.message === '401 Unauthorized') {\r\n localStorage.removeItem('user');\r\n openModal(\r\n {\r\n keyContentComponent: MODAL_KEYS.AUTH_MODAL,\r\n params: {\r\n shouldOpenCreateForm: false\r\n }\r\n },\r\n false,\r\n true\r\n );\r\n }\r\n return Promise.reject(err);\r\n});\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read http://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { getGeolocationUrl } from '../Utils/apiURLConfiguration';\r\nimport GWRApiClient from './GWRApiClient';\r\n\r\n/**\r\n * Concrete implementation for the Geolocation endpoints\r\n *\r\n * @class GeolocationApiClient\r\n * @extends {GWRApiClient}\r\n */\r\nexport default class GeolocationApiClient extends GWRApiClient {\r\n /**\r\n * @constructor\r\n * Calls parent constructor.\r\n * If there isn't any url provided, then we use the default from the environment variable\r\n * fills the url and token information\r\n * @param {string} url\r\n * The url where the service endpoints are\r\n * @param {string} token\r\n * The token of the logged user\r\n */\r\n constructor(token = '') {\r\n const urlAux = getGeolocationUrl();\r\n\r\n super(urlAux, token);\r\n }\r\n\r\n /**\r\n * function to get geolocation data\r\n *\r\n * @function\r\n */\r\n async getGeolocationData() {\r\n const urlRequest = `${this.url}`;\r\n let request = await super.getApiCall(urlRequest);\r\n\r\n return request;\r\n }\r\n}\r\n","import { store } from '../../../store/configureStore';\r\nimport { getResortLocationUrl } from '../../../utilities/resortLocation';\r\nimport { LocalStorageKeys, SessionStorageKeys } from '../../../utilities/storageUtils';\r\n\r\nexport const LODGE_LOCATION_DATA_TTL = 15; // minutes\r\nexport const LODGE_CONFIG_DATA_TTL = 30; // minutes\r\nexport const GEO_DATA_TTL = 60; // minutes\r\n\r\n// get data from sessionStorage\r\nlet endpointTTLData = JSON.parse(sessionStorage.getItem(SessionStorageKeys.ENDPOINT_TTL_KEY)) || {};\r\n\r\nconst urlList = {\r\n planConfigByResort: ['plan', 'daypass'],\r\n creditPackageConfigByResort: ['check-in', 'packages-dining', /my-reservations\\/[\\w\\d]+/],\r\n cmpConfigByResort: ['confirmation', /my-reservations\\/[\\w\\d]+/],\r\n paymentConfigByResort: ['payment', 'packages-', /my-reservations\\/[\\w\\d]+/],\r\n partyBookingWidgetConfigByResort: ['birthday-parties']\r\n};\r\n\r\n// function to validate if the endpoint can be called\r\nexport const canCallEndpoint = (endpoint, minTTL = 3, validateUrl = false) => {\r\n const now = Date.now();\r\n const msTTL = minTTL * 60 * 1000;\r\n\r\n const { lodgeLocations } = store?.getState() || '';\r\n\r\n if (\r\n endpointTTLData[endpoint] &&\r\n now - endpointTTLData[endpoint] < msTTL &&\r\n Object.keys(lodgeLocations.locationList).length > 0\r\n ) {\r\n return false; // the endpoint has been called during TTL value in minutes\r\n }\r\n return validateUrl ? checkURLAgainstList(endpoint) : true; // the endpoint can be called\r\n};\r\n\r\n// function to mark the endpoint as called\r\nexport const markEndpointAsCalled = endpoint => {\r\n endpointTTLData[endpoint] = Date.now();\r\n sessionStorage.setItem(SessionStorageKeys.ENDPOINT_TTL_KEY, JSON.stringify(endpointTTLData));\r\n};\r\n\r\n// check if the current url contains any of the keywords for the endpoint\r\nexport const checkURLAgainstList = endpoint => {\r\n const currentURL = window.location.href;\r\n\r\n const keywordCheck =\r\n urlList[endpoint] &&\r\n urlList[endpoint].some(keyword => {\r\n if (keyword instanceof RegExp) {\r\n return keyword.test(currentURL);\r\n }\r\n return currentURL.includes(keyword);\r\n });\r\n\r\n if (keywordCheck) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const clearEndpointTTLData = endpointList => {\r\n // remove TTL for endpoints - keep the ones where 'keepTTL' flag is set\r\n endpointList.forEach(enddpoint => {\r\n delete endpointTTLData[enddpoint.name];\r\n });\r\n\r\n sessionStorage.setItem(SessionStorageKeys.ENDPOINT_TTL_KEY, JSON.stringify(endpointTTLData));\r\n};\r\n\r\nexport const getLocationFromUrl = () => {\r\n const locationData = localStorage.getItem(LocalStorageKeys.URL_LOCATION);\r\n return locationData ? JSON.parse(locationData) : null;\r\n};\r\n\r\nexport const setLocationFromUrl = () => {\r\n const locationData = getResortLocationUrl();\r\n if (locationData) {\r\n localStorage.setItem(LocalStorageKeys.URL_LOCATION, JSON.stringify(locationData.replace(/\\//g, '')));\r\n }\r\n};\r\n","import { useEffect, useRef } from 'react';\r\nimport {\r\n canCallEndpoint,\r\n clearEndpointTTLData,\r\n getLocationFromUrl,\r\n markEndpointAsCalled,\r\n setLocationFromUrl\r\n} from '../../../store/componentStores/utilities/endpointTtlValidation';\r\n\r\nconst MAX_ENDPOINT_CALL_ATTEMPTS = 2;\r\n\r\nconst useEndpointValidation = (maxOccupancy, endpointList, resetCallback, resortLocation) => {\r\n const endpointCallAttemps = useRef(0);\r\n const url = window.location.href;\r\n\r\n //Removing the geolocation call when the user is on CA lodges\r\n //===============================================================================\r\n if (url.includes('southern-california') || url.includes('northern-california')) {\r\n endpointList = endpointList.filter(ep => ep.name !== 'geolocation');\r\n }\r\n\r\n useEffect(() => {\r\n const locationFromUrl = getLocationFromUrl();\r\n\r\n if (!url.includes(locationFromUrl)) {\r\n if (typeof resetCallback === 'function') {\r\n clearEndpointTTLData(endpointList);\r\n resetCallback();\r\n setLocationFromUrl();\r\n }\r\n }\r\n\r\n // Iterate over endpointList\r\n for (const endpoint of endpointList) {\r\n const { name, TTL, validateUrl, isLodgeSpecific } = endpoint;\r\n\r\n if (!isLodgeSpecific || resortLocation) {\r\n if (canCallEndpoint(name, TTL, validateUrl)) {\r\n // call validated endpoint\r\n if (typeof endpoint.call === 'function') {\r\n endpoint.call();\r\n }\r\n markEndpointAsCalled(name);\r\n }\r\n } else {\r\n // Left following log as commented code to assist in future debugging in case if LodgeConfig data is not\r\n // getting loaded properly during initial load of application\r\n // console.log('endpoint', name, 'is lodge specific but no resort location provided. Skipping call');\r\n }\r\n }\r\n endpointCallAttemps.current += 1;\r\n const shouldClearEndpointTTLData = !maxOccupancy && endpointCallAttemps.current < MAX_ENDPOINT_CALL_ATTEMPTS;\r\n if (shouldClearEndpointTTLData) clearEndpointTTLData(endpointList);\r\n }, [endpointList, resetCallback, resortLocation, url, maxOccupancy]);\r\n};\r\n\r\nexport default useEndpointValidation;\r\n","// THIS FILE WILL RUN ANY CONFIGURATION THAT WILL LOAD BEFORE RENDER APP\r\nimport React, { Fragment, useEffect } from 'react';\r\nimport ReactGA from 'react-ga';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n getBookingWidgetConfigByResort,\r\n getCartConfigByResort,\r\n getCmpConfigByResort,\r\n getCreditPackageConfigByResort,\r\n getLeadGenConfigByResort,\r\n getLoyaltyConfigByResort,\r\n getPartyBookingWidgetConfigByResort,\r\n getPaymentConfigByResort,\r\n getPlanConfigByResort,\r\n resetLodgeConfig\r\n} from '../../store/componentStores/LodgeConfig/lodgeConfig.actions';\r\nimport {\r\n getMaxOccupancy,\r\n getReferralEnabledLocation\r\n} from '../../store/componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport { getAllLodgesLocation } from '../../store/componentStores/LodgeLocations/lodgeLocations.actions';\r\nimport { getLocationList } from '../../store/componentStores/LodgeLocations/lodgeLocations.selectors';\r\n\r\nimport { updateCurrentLodge } from '../../store/componentStores/CurrentLodge/currentLodge.actions';\r\nimport { getResortLocation } from '../../store/componentStores/CurrentLodge/currentLodge.selectors';\r\n\r\nimport { getGeolocationData } from '../../store/componentStores/Geolocation/geolocation.actions';\r\nimport {\r\n GEO_DATA_TTL,\r\n LODGE_CONFIG_DATA_TTL,\r\n LODGE_LOCATION_DATA_TTL\r\n} from '../../store/componentStores/utilities/endpointTtlValidation';\r\nimport { setLocation } from '../../utilities/analytics';\r\nimport { SITE_NIAGON } from '../../utilities/constants';\r\nimport duettoTracking from '../../utilities/duetto';\r\nimport {\r\n LocalStorageKeys,\r\n isReferAfriendSessionCreatedAlready,\r\n sessionStorage_transfer\r\n} from '../../utilities/storageUtils';\r\nimport useEndpointValidation from '../utilities/hooks/useEndpointValidation';\r\n\r\nconst AppConfiguration = ({\r\n children,\r\n getLoyaltyConfigByResort,\r\n getPlanConfigByResort,\r\n getGeolocationData,\r\n getLodgeLocations,\r\n isInPrimerState,\r\n isLoyaltyEnabled,\r\n isReferralEnabledLocation,\r\n getCreditPackageConfigByResort,\r\n getPaymentConfigByResort,\r\n getLeadGenConfigByResort,\r\n getCmpConfigByResort,\r\n resetLodgeConfig,\r\n resortLocation,\r\n locationList,\r\n updateCurrentLodge,\r\n getCartConfigByResort,\r\n getBookingWidgetConfigByResort,\r\n getPartyBookingWidgetConfigByResort,\r\n maxOccupancy\r\n}) => {\r\n const endpointList = [\r\n {\r\n name: 'geolocation',\r\n TTL: GEO_DATA_TTL,\r\n call: getGeolocationData,\r\n isLodgeSpecific: false\r\n },\r\n {\r\n name: 'lodgeLocations',\r\n TTL: LODGE_LOCATION_DATA_TTL,\r\n call: getLodgeLocations,\r\n isLodgeSpecific: false\r\n },\r\n {\r\n name: 'loyaltyConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getLoyaltyConfigByResort,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'planConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getPlanConfigByResort,\r\n validateUrl: true,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'creditPackageConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getCreditPackageConfigByResort,\r\n validateUrl: true,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'leadGenConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getLeadGenConfigByResort,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'cmpConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getCmpConfigByResort,\r\n validateUrl: true,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'paymentConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getPaymentConfigByResort,\r\n validateUrl: true,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'cartConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getCartConfigByResort,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'bookingWidgetConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getBookingWidgetConfigByResort,\r\n isLodgeSpecific: true\r\n },\r\n {\r\n name: 'partyBookingWidgetConfigByResort',\r\n TTL: LODGE_CONFIG_DATA_TTL,\r\n call: getPartyBookingWidgetConfigByResort,\r\n validateUrl: true,\r\n isLodgeSpecific: true\r\n }\r\n ];\r\n\r\n useEndpointValidation(maxOccupancy, endpointList, resetLodgeConfig, resortLocation);\r\n\r\n useEffect(() => {\r\n if (!isReferralEnabledLocation) return;\r\n // Ask other tabs for session storage\r\n if (!isReferAfriendSessionCreatedAlready()) {\r\n localStorage.setItem(LocalStorageKeys.GET_SESSION_STORAGE, Date.now());\r\n }\r\n\r\n // Run transfer\r\n window.addEventListener('storage', sessionStorage_transfer);\r\n\r\n // Clean events\r\n return function cleanupListener() {\r\n window.removeEventListener('storage', sessionStorage_transfer, false);\r\n };\r\n }, [isReferralEnabledLocation]);\r\n\r\n useEffect(() => {\r\n const voyagersClubPhase = !isLoyaltyEnabled ? 'VO' : isInPrimerState ? 'V1' : 'V2';\r\n ReactGA.set({ dimension58: voyagersClubPhase });\r\n }, [isInPrimerState, isLoyaltyEnabled]);\r\n\r\n useEffect(() => {\r\n if (resortLocation) {\r\n duettoTracking.initialize(\r\n resortLocation === SITE_NIAGON\r\n ? process.env.REACT_APP_DUETTO_ID_NIAGARA\r\n : process.env.REACT_APP_DUETTO_ID_UNIVERAL\r\n );\r\n setLocation(resortLocation);\r\n }\r\n }, [resortLocation]);\r\n\r\n useEffect(() => {\r\n updateCurrentLodge(locationList);\r\n }, [locationList, updateCurrentLodge]);\r\n\r\n return resortLocation ? {children} : null;\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n maxOccupancy: getMaxOccupancy(state.lodgeConfig),\r\n isInPrimerState: state.lodgeConfig.isInPrimerState,\r\n isLoyaltyEnabled: state.lodgeConfig.isLoyaltyEnabled,\r\n isReferralEnabledLocation: getReferralEnabledLocation(state.lodgeConfig),\r\n resortLocation: getResortLocation(state.currentLodge),\r\n locationList: getLocationList(state.lodgeLocations)\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n getLoyaltyConfigByResort,\r\n getPlanConfigByResort,\r\n getCreditPackageConfigByResort,\r\n getLodgeLocations: getAllLodgesLocation,\r\n getPaymentConfigByResort,\r\n getLeadGenConfigByResort,\r\n getCmpConfigByResort,\r\n resetLodgeConfig,\r\n updateCurrentLodge,\r\n getCartConfigByResort,\r\n getBookingWidgetConfigByResort,\r\n getGeolocationData: getGeolocationData,\r\n getPartyBookingWidgetConfigByResort\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppConfiguration);\r\n","// Lodge Locations Actions\r\n\r\nimport lodgeLocationsActionTypes from './lodgeLocations.types';\r\nimport LodgeApiClient from '../../../api/clients/LodgeApiClient';\r\n\r\nexport const getAllLodgesLocation = () => async dispatch => {\r\n dispatch({ type: lodgeLocationsActionTypes.CLEAR_LODGE_LOCATIONS_LOADING_CONFIG });\r\n dispatch({ type: lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_LOADING, isLoading: true });\r\n\r\n try {\r\n const configurationClient = new LodgeApiClient();\r\n const result = await configurationClient.getLodgesLocations();\r\n const lodges = result.data.reduce((prev, current) => {\r\n return {\r\n ...prev,\r\n [current.id]: {\r\n address: current.Address,\r\n booking_phone: current.PhoneNumber,\r\n display: current.Name,\r\n shortDisplayName: current.Name,\r\n mobile_booking_phone: current.MobileBookingPhone,\r\n phone: current.PhoneNumber,\r\n operaCode: current.id,\r\n url: current.ShortName,\r\n region: current.Region,\r\n birthdayEmail: current.BirthdayEmail,\r\n maxOccupancy: current.MaxOccupancy\r\n }\r\n };\r\n }, {});\r\n\r\n dispatch({\r\n type: lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_SUCCESS,\r\n locationList: lodges\r\n });\r\n dispatch({ type: lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_LOADING, isLoading: false });\r\n } catch (error) {\r\n dispatch({\r\n type: lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_ERROR,\r\n locationList: {},\r\n requestFailed: true,\r\n errorMessage: `Oops, ${error.message}`\r\n });\r\n dispatch({ type: lodgeLocationsActionTypes.GET_LODGE_LOCATIONS_LOADING, isLoading: false });\r\n }\r\n};\r\n","// Import types\r\nimport geolocationActionTypes from './geolocation.types';\r\n\r\n// Import API client\r\nimport GeolocationApiClient from '../../../api/clients/GeolocationApiClient';\r\n\r\nexport const getGeolocationData = () => async dispatch => {\r\n try {\r\n const apiClient = new GeolocationApiClient();\r\n const configurationData = await apiClient.getGeolocationData();\r\n dispatch({\r\n type: geolocationActionTypes.GET_GEOLOCATION,\r\n geolocationData: configurationData.data\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n dispatch({\r\n type: geolocationActionTypes.GET_GEOLOCATION_ERROR,\r\n geolocationData: error\r\n });\r\n }\r\n};\r\n","import styled from 'styled-components';\r\nimport { Box } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\n// Cart Container\r\nexport const CartCustomContainer = styled(Box)`\r\n position: relative;\r\n max-width: 24px;\r\n max-height: 24px;\r\n margin: 0 auto;\r\n ${theme.mediaQueries.md} {\r\n max-width: 32px;\r\n max-height: 32px;\r\n }\r\n`;\r\n","export const CART_ID_DESKTOP = 'cart-container-desktop';\r\nexport const CART_ID_MOBILE = 'cart-container-mobile';\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { connect } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { getIsCartActive } from '../../store/componentStores/LodgeConfig/lodgeConfig.selectors';\r\nimport { TESTS_DICTIONARY, getTestValueAB } from '../../utilities/ABTesting';\r\nimport { PlanSummary } from '../Summary';\r\nimport { SUMMARY_CART_VARIATIONS } from '../Summary/components/Suite/utilities/constants';\r\nimport theme from '../ui-kit/themes/theme';\r\nimport { CartCustomContainer } from './assets/styles';\r\nimport { CART_ID_DESKTOP, CART_ID_MOBILE } from './utilities/constants';\r\n// Portal Component\r\nconst CartPortal = ({ children }) => {\r\n const isMobile = useMediaQuery({\r\n query: `(max-width: ${theme.breakpoints.xl})`\r\n });\r\n const cartContainer = document.getElementById(isMobile ? CART_ID_MOBILE : CART_ID_DESKTOP);\r\n if (!cartContainer) return null;\r\n\r\n return <>{createPortal(children, cartContainer)};\r\n};\r\n\r\n// Main Component\r\n// Rules:\r\n// 1. This component can be connected to the store.\r\n// 2. Will load the summary on cart variant and will be displayed on the cart portal.\r\n\r\nconst propTypes = {\r\n location: PropTypes.object,\r\n isCartActive: PropTypes.bool\r\n};\r\n\r\nconst defaultProps = {\r\n location: null,\r\n isCartActive: false\r\n};\r\n\r\nconst CartContainer = ({ location, isCartActive }) => {\r\n useEffect(() => {\r\n const mobileIcon = document.getElementById(CART_ID_MOBILE);\r\n if (mobileIcon && isCartActive) {\r\n document.getElementById(CART_ID_MOBILE).style.width = '24px';\r\n document.getElementById(CART_ID_MOBILE).style.height = '24px';\r\n }\r\n }, [isCartActive]);\r\n\r\n // return null if cart is not active and avoid portal rendering\r\n if (!isCartActive || !location) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCartContainer.propTypes = propTypes;\r\nCartContainer.defaultProps = defaultProps;\r\n\r\nconst mapStateToProps = state => ({\r\n location: state.router.location,\r\n isCartActive: getIsCartActive(state.lodgeConfig) && getTestValueAB(TESTS_DICTIONARY.optimizelyCartFlow, false)\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(CartContainer);\r\n","export const FLOATING_MESSAGE_IMAGES = {\r\n WARNING: 'warning.svg',\r\n SUCCESS_BLUE: 'success-blue.svg'\r\n};\r\n","import styled, { keyframes, css } from 'styled-components';\r\n\r\nimport { Flex, Text, Box } from '../../ui-kit';\r\nimport theme from '../../ui-kit/themes/theme';\r\n\r\nconst breatheAnimationDesk = keyframes`\r\n 0% { top: 0px; opacity: 0}\r\n\r\n 100% { top: 117px; opacity: 1; }\r\n`;\r\n\r\nconst breatheAnimationDMobile = keyframes`\r\n 0% { top: 0px; opacity: 0}\r\n\r\n 100% { top: 80px; opacity: 1; }\r\n`;\r\n\r\nexport const FloatingMessageContainer = styled(Flex)`\r\n z-index: 9999;\r\n position: fixed;\r\n flex-direction: row;\r\n max-width: 791px;\r\n min-height: 56px;\r\n padding: ${theme.space[3]}px;\r\n border-radius: 8px;\r\n\r\n ${({ variant }) => {\r\n switch (variant) {\r\n case 'error':\r\n return css`\r\n border: solid 1px ${theme.colors.digitalBrightRed[100]};\r\n background-color: ${theme.colors.digitalBrightRed[10]};\r\n `;\r\n default:\r\n return css`\r\n border: solid 1px ${theme.colors.kiddiePoolBlue[100]};\r\n background-color: ${theme.colors.kiddiePoolBlue[10]};\r\n `;\r\n }\r\n }};\r\n\r\n width: 90%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n top: 80px;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n animation-name: ${breatheAnimationDMobile};\r\n animation-duration: 2s;\r\n\r\n ${theme.mediaQueries.md} {\r\n top: 117px;\r\n animation-name: ${breatheAnimationDesk};\r\n width: 100%;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nexport const FloatingMessageImg = styled.img`\r\n margin-right: ${theme.space[3]}px;\r\n`;\r\n\r\nexport const FloatingInnerMessageContainer = styled(Flex)`\r\n align-items: flex-start;\r\n\r\n ${theme.mediaQueries.md} {\r\n align-items: center;\r\n }\r\n`;\r\n\r\nexport const InnerMessage = styled(Text)`\r\n font-family: Montserrat;\r\n font-size: 14px;\r\n font-weight: 500;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: 1.43;\r\n letter-spacing: normal;\r\n color: #333;\r\n`;\r\n\r\nexport const CloseFloatingMessage = styled(Box)`\r\n width: 16px;\r\n height: 16px;\r\n cursor: pointer;\r\n & > svg {\r\n width: 16px;\r\n height: 16px;\r\n }\r\n ${theme.mediaQueries.md} {\r\n width: 24px;\r\n height: 24px;\r\n & > svg {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n }\r\n`;\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { ASSETS_LOCATIONS, getAssetsUrl } from '../../utilities/constants';\r\nimport CloseIcon from '../ui-kit/icons/Close';\r\nimport { FLOATING_MESSAGE_IMAGES } from './assets/images';\r\nimport {\r\n CloseFloatingMessage,\r\n FloatingInnerMessageContainer,\r\n FloatingMessageContainer,\r\n FloatingMessageImg,\r\n InnerMessage\r\n} from './assets/styles';\r\nimport * as COPY from './utilities/copy';\r\n\r\nconst FloatingMessage = () => {\r\n const [innerMessage, setInnerMessage] = useState('');\r\n const [messageVariant, setMessageVariant] = useState('success');\r\n const [onCloseFunction, setOnCloseFunction] = useState(null);\r\n const [visible, setVisible] = useState(false);\r\n\r\n const showFloatingMessage = e => {\r\n if (e.detail) {\r\n const { message, variant, onCloseFunction } = e.detail;\r\n if (message) setInnerMessage(message);\r\n if (variant) setMessageVariant(variant);\r\n if (onCloseFunction) setOnCloseFunction(() => () => onCloseFunction());\r\n }\r\n setVisible(true);\r\n };\r\n\r\n const closeFloatingMessage = useCallback(() => {\r\n setVisible(false);\r\n if (onCloseFunction) onCloseFunction();\r\n }, [onCloseFunction]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('floating-message', showFloatingMessage);\r\n return function cleanupListener() {\r\n window.removeEventListener('floating-message', showFloatingMessage, false);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!visible) return;\r\n const timer = setTimeout(() => {\r\n closeFloatingMessage();\r\n }, 10000);\r\n return () => clearTimeout(timer);\r\n }, [visible, closeFloatingMessage]);\r\n\r\n return (\r\n <>\r\n {visible && (\r\n \r\n \r\n \r\n\r\n {innerMessage}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default FloatingMessage;\r\n","export const SUCCESS_ICON = 'success icon';\r\nexport const ERROR_ICON = 'error icon';\r\n","// TODO - revisit this component to fix how hooks are working\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { setIEModalAlreadyShown } from '../../store/componentStores/IEModal/ieModal.actions';\r\nimport { MODAL_KEYS } from '../GlobalModal/modalSource';\r\nimport withGlobalModal from '../GlobalModal/withGlobalModal';\r\n\r\nconst IEModal = ({ isAlreadyShown, setIEModalAlreadyShown, openModal }) => {\r\n useEffect(() => {\r\n const userAgent = window.navigator.userAgent;\r\n const isIEBrowser = userAgent.indexOf('MSIE ') > -1 || userAgent.indexOf('Trident/') > -1;\r\n\r\n if (isIEBrowser && !isAlreadyShown) {\r\n openModal(\r\n {\r\n keyContentComponent: MODAL_KEYS.IE_MODAL,\r\n params: {}\r\n },\r\n true\r\n );\r\n setIEModalAlreadyShown(true);\r\n }\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n ...state.ieModal\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n setIEModalAlreadyShown\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withGlobalModal(IEModal));\r\n","// IEModal actions\r\n\r\nimport ieModalActionTypes from './ieModal.types';\r\n\r\nexport const setIEModalAlreadyShown = params => dispatch => {\r\n dispatch({\r\n type: ieModalActionTypes.SET_IEMODAL_IS_ALREADY_SHOWN,\r\n isAlreadyShown: params\r\n });\r\n};\r\n","import { createGlobalStyle } from 'styled-components';\r\nimport { colors, fontWeights } from './components/ui-kit/themes/theme';\r\nconst GlobalStyle = createGlobalStyle`\r\n *,\r\n *:after,\r\n *:before {\r\n box-sizing: border-box;\r\n }\r\n *[data-accordion-component='AccordionItemButton']:focus {\r\n outline: 0;\r\n }\r\n\r\n .sticky-bottom {\r\n transform: translateX(calc(50vw - 110px)) !important;\r\n z-index: 700 !important;\r\n top: unset !important;\r\n left: unset !important;\r\n bottom: 90px !important;\r\n }\r\n\r\n .gpay-card-info-container {\r\n border-radius: 35px!important;\r\n }\r\n\r\n .DateRangePicker, .DayPicker {\r\n font-family: Montserrat;\r\n border-radius: 5px;\r\n }\r\n .DateRangePicker_picker {\r\n z-index: 7000;\r\n border-radius: 5px;\r\n }\r\n\r\n .DateRangePicker_picker__fullScreenPortal {\r\n z-index: 9000;\r\n }\r\n\r\n .DateInput_fang {\r\n z-index: 8000;\r\n margin-top: 2px;\r\n top: -28px;\r\n }\r\n table.CalendarMonth_table {\r\n border-collapse: unset;\r\n }\r\n td.CalendarDay__default {\r\n font-weight: bold;\r\n border: 2px solid transparent;\r\n color: ${colors.nightSkyBlack[80]};\r\n border-collapse: unset;\r\n border-radius: 4px;\r\n\r\n &:hover {\r\n background: transparent;\r\n border: none;\r\n }\r\n }\r\n\r\n td.CalendarDay__selected {\r\n &,\r\n &:active,\r\n &:hover {\r\n background: ${colors.deepLakeBlue[100]};\r\n border: 2px solid transparent;\r\n color: ${colors.pureWhite[0]} !important;\r\n }\r\n }\r\n\r\n td.CalendarDay__hovered_span,\r\n td.CalendarDay__selected_span {\r\n &,\r\n &:hover {\r\n background: transparent;\r\n color: ${colors.nightSkyBlack[80]};\r\n border-radius: 0;\r\n }\r\n &:hover {\r\n border-radius: 4px;\r\n }\r\n }\r\n\r\n ul.DayPicker_weekHeader_ul {\r\n font-weight: ${fontWeights.bold};\r\n }\r\n\r\n div.DayPickerNavigation_button__default {\r\n border: none;\r\n color: ${colors.digitalBrightRed[100]};\r\n }\r\n\r\n svg.DayPickerNavigation_svg__horizontal {\r\n fill: ${colors.digitalBrightRed[100]};\r\n }\r\n input.DateInput_input__focused {\r\n border-bottom: 2px solid ${colors.digitalBrightRed[100]};\r\n }\r\n td.CalendarDay__blocked_calendar,\r\n td.CalendarDay__blocked_calendar:active,\r\n td.CalendarDay__blocked_calendar:hover {\r\n background: none;\r\n border: none;\r\n color: ${colors.nightSkyBlack[60]};\r\n }\r\n\r\n td.CalendarDay__blocked_out_of_range,\r\n td.CalendarDay__blocked_out_of_range:active,\r\n td.CalendarDay__blocked_out_of_range:hover {\r\n color: ${colors.deepLakeBlue[20]};\r\n }\r\n\r\n .accordion__body {\r\n display: block;\r\n }\r\n\r\n .accordion__body--hidden {\r\n display: none;\r\n }\r\n\r\n .accordion__title {\r\n cursor: pointer;\r\n }\r\n\r\n .accordion__arrow {\r\n transition: transform 0.25s ease;\r\n }\r\n\r\n [aria-expanded='true'] .accordion__arrow,\r\n [aria-selected='true'] .accordion__arrow {\r\n transform: rotate(-180deg);\r\n }\r\n .ReactModal__Overlay {\r\n z-index: 2\r\n }\r\n \r\n body.ReactModal__Body--open {\r\n\r\n }\r\n\r\n input[type=button], input[type=search] {\r\n -webkit-appearance: none;\r\n }\r\n\r\n select[multiple] {\r\n min-height: 55px;\r\n }\r\n`;\r\n\r\nexport default GlobalStyle;\r\n","import React, { lazy, Suspense, useEffect, useMemo } from 'react';\r\nimport Modal from 'react-modal';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport { Switch, withRouter } from 'react-router';\r\nimport { Route, useLocation } from 'react-router-dom';\r\nimport uuidv4 from 'uuid/v4';\r\nimport AppConfiguration from './components/AppConfiguration/AppConfiguration';\r\nimport { CartContainer } from './components/Cart';\r\nimport FloatingMessage from './components/FloatingMessage/FloatingMessage';\r\nimport IEModal from './components/IEModal';\r\nimport theme from './components/ui-kit/themes/theme';\r\nimport { FLOW_NAMES } from './flows/DynamicFlow/utilities/constants';\r\nimport GlobalStyle from './GlobalStyle';\r\nimport routes from './routes';\r\nimport withAppInsights from './utilities/applicationInsights';\r\nimport { checkCookie, getCookie, setCookie } from './utilities/cookiesUtils';\r\nimport isAuthorMode from './utilities/isAuthorMode';\r\n\r\nconst DynamicFlow = lazy(() => import(/* webpackChunkName: \"DynamicFlow\" */ './flows/DynamicFlow/DynamicFlow'));\r\n\r\nconst BookTab = lazy(() => import(/* webpackChunkName: \"BookTab\" */ './components/BookTab/index'));\r\nconst EmailCapture = lazy(() => import(/* webpackChunkName: \"EmailCapture\" */ './components/EmailCapture'));\r\nconst AppLayout = lazy(() => import(/* webpackChunkName: \"AppLayout\" */ './layouts/AppLayout'));\r\nconst SummaryLayout = lazy(() => import(/* webpackChunkName: \"SummaryLayout\" */ './layouts/SummaryLayout'));\r\nconst NoMatchLayout = lazy(() => import(/* webpackChunkName: \"NoMatchLayout\" */ './layouts/NoMatchLayout'));\r\nconst HeaderWithTwoColumnLayout = lazy(() =>\r\n import(/* webpackChunkName: \"HeaderWithTwoColumnLayout\" */ './layouts/HeaderWithTwoColumnLayout')\r\n);\r\nconst NavigationMenuLayout = lazy(() =>\r\n import(\r\n /* webpackChunkName: \"NavigationMenuLayout\" */\r\n './layouts/NavigationMenuLayout'\r\n )\r\n);\r\nconst DayPassesPicker = lazy(() =>\r\n import(/* webpackChunkName: \"DayPassesPicker\" */ './components/DayPasses/DayPassesPicker')\r\n);\r\nconst DayPassesHeader = lazy(() =>\r\n import(/* webpackChunkName: \"DayPassesHeader\" */ './components/DayPasses/DayPassesHeader')\r\n);\r\nconst DayPassesInformation = lazy(() =>\r\n import(/* webpackChunkName: \"DayPassesInformation\" */ './components/DayPasses/DayPassesInformation')\r\n);\r\nconst PaymentForm = lazy(() => import(/* webpackChunkName: \"PaymentForm\" */ './components/PaymentForm'));\r\nconst GlobalModal = lazy(() => import(/* webpackChunkName: \"GlobalModal\" */ './components/GlobalModal'));\r\nconst PlanSearchForm = lazy(() => import(/* webpackChunkName: \"PlanSearchForm\" */ './components/PlanSearchForm'));\r\nconst BirthdaySearchFormRouter = lazy(() =>\r\n import(/* webpackChunkName: \"BirthdaySearchFormRouter\" */ './components/BirthdaySearchForm/BirthdaySearchFormRouter')\r\n);\r\nconst PreCheckIn = lazy(() => import(/* webpackChunkName: \"Reservation\" */ './pages/PreCheckIn'));\r\nconst Reservations = lazy(() => import(/* webpackChunkName: \"Reservations\" */ './pages/Reservations'));\r\nconst MyReservations = lazy(() =>\r\n import(/* webpackChunkName: \"MyReservations\" */ './pages/Reservations/MyReservations')\r\n);\r\nconst SearchReservations = lazy(() =>\r\n import(/* webpackChunkName: \"SearchReservations\" */ './pages/Reservations/SearchReservations')\r\n);\r\nconst ReferAFriendPage = lazy(() => import(/* webpackChunkName: \"ReferAFriend\" */ './pages/User/ReferAFriendPage'));\r\nconst UserProfile = lazy(() => import(/* webpackChunkName: \"UserProfile\" */ './pages/User/Profile'));\r\nconst EventCalendar = lazy(() => import(/* webpackChunkName: \"EventCalendar\" */ './pages/EventCalendar'));\r\nconst MyRecentSearches = lazy(() =>\r\n import(/* webpackChunkName: \"MyRecentSearches\" */ './pages/RecentSearches/MyRecentSearches')\r\n);\r\nconst ChangePassword = lazy(() => import(/* webpackChunkName: \"ChangePassword\" */ './pages/ChangePassword'));\r\nconst UpdatePassword = lazy(() =>\r\n import(/* webpackChunkName: \"UpdatePassword\" */ './pages/ChangePassword/UpdatePassword')\r\n);\r\nconst UnlockAccount = lazy(() => import(/* webpackChunkName: \"UnlockAccount\" */ './pages/UnlockAccount'));\r\nconst ReservationDetail = lazy(() => import(/* webpackChunkName: \"ReservationDetail\" */ './pages/ReservationDetail'));\r\nconst MyReservationsPage = lazy(() => import(/* webpackChunkName: \"MyReservationsPage\" */ './pages/MyReservations'));\r\nconst MyPreferences = lazy(() => import(/* webpackChunkName: \"MyPreferences\" */ './pages/User/Preferences'));\r\n\r\nconst DaypassBooking = lazy(() => import(/* webpackChunkName: \"DaypassBooking\" */ './pages/Daypass/DaypassBooking'));\r\nconst LandingPageForm = lazy(() => import(/* webpackChunkName: \"LandingPageForm\" */ './pages/Loyalty/LandingPageForm'));\r\nconst EmailQueuePage = lazy(() => import(/* webpackChunkName: \"LandingPageForm\" */ './pages/EmailQueue'));\r\nconst MysteryModal = lazy(() => import(/* webpackChunkName: \"MysteryModal\" */ './components/MysteryModal'));\r\nconst EventPlanner = lazy(() => import(/* webpackChunkName: \"EventPlanner\" */ './pages/EventPlanner'));\r\nconst Folio = lazy(() => import(/* webpackChunkName: \"Folio\" */ './pages/Folio'));\r\nconst IframeHandler = lazy(() => import(/* webpackChunkName: \"IframeHandler\" */ './pages/IframeHandler'));\r\n\r\nModal.setAppElement(document.getElementById('root'));\r\n\r\nconst App = ({ history, flowName }) => {\r\n if (!flowName) console.warn('No flowName attribute found in HTML');\r\n const flowAudience = window.flowAudience ?? 'ALL';\r\n\r\n console.log('FLOW_NAMES.birthday', FLOW_NAMES.BIRTHDAY);\r\n\r\n history.listen(() => {\r\n // It'll be used by the AOS library being used in the AEM project\r\n // that needs to trigger the footer animation when we're switching\r\n // between React routes\r\n window.dispatchEvent(new Event('resize'));\r\n });\r\n const { search } = useLocation();\r\n const searchParams = useMemo(() => new URLSearchParams(search), [search]);\r\n\r\n useEffect(() => {\r\n //This if statement to setup the did cookie\r\n //==========================================\r\n if (!checkCookie('did')) {\r\n setCookie('did', uuidv4(), 3650);\r\n }\r\n //This if statement is to setup the eid cookie\r\n //=============================================\r\n if (searchParams.get('eid') !== null) {\r\n //If the eid query string exists and the eid cookie doesn't exits create one\r\n //===========================================================================\r\n if (!checkCookie('eid')) setCookie('eid', searchParams.get('eid'), 3650);\r\n //If eid cookie exists but is different from the query string update the cookie with the query string\r\n //====================================================================================================\r\n if (\r\n getCookie('eid') !== null &&\r\n searchParams.get('eid') !== null &&\r\n searchParams.get('eid') !== getCookie('eid')\r\n ) {\r\n setCookie('eid', searchParams.get('eid'), 3650);\r\n }\r\n }\r\n //This if statement is to setup the pastGuest cookie\r\n //===================================================\r\n if (searchParams.get('pg') !== null) {\r\n //If the pg query string exists and the pastGuest cookie doesn't exits create one\r\n //==================================================================================\r\n if (!checkCookie('pastGuest')) setCookie('pastGuest', searchParams.get('pg'), 3650);\r\n //If pastGuest cookie exists but has different value from the pg from the query string it will update the cookie\r\n //===============================================================================================================\r\n if (\r\n getCookie('pastGuest') !== null &&\r\n searchParams.get('pg') !== null &&\r\n searchParams.get('pg') !== getCookie('pastGuest')\r\n ) {\r\n setCookie('pastGuest', searchParams.get('pg'), 3650);\r\n }\r\n }\r\n }, [history.location.pathname, searchParams]);\r\n\r\n const isTablet = useMediaQuery({ maxWidth: theme.breakpoints.lg });\r\n\r\n return (\r\n \r\n

\r\n \r\n \r\n
}>\r\n {searchParams.get('mystery') === 'true' ? : null}\r\n \r\n \r\n \r\n {!isAuthorMode() && }\r\n\r\n \r\n \r\n \r\n {\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n return ;\r\n }}\r\n />\r\n {\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n {\r\n return (\r\n \r\n );\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }}\r\n />\r\n \r\n\r\n {/* This layout is the catch-all for non-Plan components that still renders dynamic features on AEM */}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withAppInsights(withRouter(App));\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\n/**\r\n * Exposes mock data that should come from AEM to the global object\r\n * Note this needs to be at the top level so is accessible by all other\r\n * imported modules.\r\n */\r\nimport './data/birthdayPartyTimesAndLocationsJson';\r\nimport './data/bookingEngineAlert';\r\nimport './data/location';\r\nimport './data/mysteryDealPromoList';\r\nimport './data/promoCodeListJson';\r\n// end of mock data\r\n\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport React from 'react';\r\nimport 'react-block-ui/style.css';\r\nimport 'react-dates/initialize';\r\n// Importing react-dates CSS as per the 'webpack' section of their documentation: https://github.com/react-dates/react-dates?tab=readme-ov-file#webpack\r\nimport 'react-dates/lib/css/_datepicker.css';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { ThemeProvider } from 'styled-components';\r\nimport ScrollToTop from './ScrollToTop';\r\nimport theme from './components/ui-kit/themes/theme';\r\nimport './index.css';\r\nimport './infrastructure/interceptors/axios_interceptors';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { history, store } from './store/configureStore';\r\n\r\n//App is the main component and needs to be imported last\r\n//TEMPORARY FIX, the main issue is a circular dependency between the store and the App component\r\nimport App from './App';\r\n\r\n// const persistedState = loadState();\r\nconst rootElement = document.getElementById('root');\r\nconst bookingEngineElement = document.getElementById('booking-engine');\r\nconst flowName = bookingEngineElement?.getAttribute('data-flow') ?? rootElement?.getAttribute('data-flow');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}