{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./selectors/resources/browse-engine.ts","webpack:///./selectors/home-page/index.ts","webpack:///./components/widget-container/index.js","webpack:///./components/home/favorites-widget/index.js","webpack:///./components/home/favorites-widget-wrapper/index.tsx","webpack:///./components/home/home-container.js","webpack:///./constants/dcs-widget-types.js","webpack:///./components/shared/browse-store/index.js","webpack:///./components/home/user-greeting/styled/index.js","webpack:///./experiments/oop-1978/constants/index.ts","webpack:///./experiments/oop-1978/selectors/index.ts","webpack:///./components/home/user-greeting/index.js","webpack:///./components/home/context-cards/icon.js","webpack:///./components/home/context-cards/delivery-date.js","webpack:///./components/home/context-cards/delivery-slot-time.js","webpack:///./components/home/context-cards/main-text.js","webpack:///./components/home/context-cards/order-created-context-card.js","webpack:///./components/home/context-cards/im-here-button/styled/index.tsx","webpack:///./constants/im-here.ts","webpack:///./components/modals/im-here-modal/styled.tsx","webpack:///./lib/requests/fulfilment/mutate-order-fulfilment-event.ts","webpack:///./lib/requests/graphql-queries/mutate-fulfilment-event.js","webpack:///./components/modals/im-here-modal/index.tsx","webpack:///./components/home/context-cards/im-here-button/constants/index.ts","webpack:///./components/home/context-cards/im-here-button/im-here-reducer.ts","webpack:///./components/home/context-cards/im-here-button/index.tsx","webpack:///./utils/useAsyncError.ts","webpack:///./components/home/context-cards/order-due-context-card.js","webpack:///./lib/map-helper.js","webpack:///./components/home/context-cards/wismo/shared/analytics/index.ts","webpack:///./components/home/context-cards/wismo/shared/wismo-star-rating/index.tsx","webpack:///./constants/order-context-card.js","webpack:///./components/home/context-cards/wismo/shared/styled/index.ts","webpack:///./context/order-context-provider.js","webpack:///./components/home/context-cards/wismo/shared/delivery-heading/styled/index.ts","webpack:///./components/home/context-cards/wismo/shared/delivery-heading/index.tsx","webpack:///./components/home/context-cards/wismo/shared/delivery-status/styled/index.ts","webpack:///./components/home/context-cards/wismo/shared/delivery-status/index.tsx","webpack:///./components/home/context-cards/wismo/shared/book-slot-link/styled/index.ts","webpack:///./components/home/context-cards/wismo/shared/book-slot-link/index.tsx","webpack:///./components/home/context-cards/wismo/shared/driver-on-map/index.js","webpack:///./components/home/context-cards/wismo/shared/progress-bar/styled/index.ts","webpack:///./components/home/context-cards/wismo/shared/progress-bar/index.tsx","webpack:///./lib/requests/get-order-payment-retry-details.js","webpack:///./components/home/context-cards/wismo/shared/update-payment-details-button/index.tsx","webpack:///./components/home/context-cards/wismo/shared/driver-on-map/utils/index.js","webpack:///./components/home/context-cards/wismo/shared/driver-on-map/styled.ts","webpack:///./components/home/context-cards/wismo/shared/driver-on-map/layout.tsx","webpack:///./components/home/context-cards/wismo/components/delivered/index.tsx","webpack:///./components/home/context-cards/wismo/components/delivery-scheduled/styled/index.ts","webpack:///./components/home/context-cards/wismo/components/delivery-scheduled/index.tsx","webpack:///./components/home/context-cards/wismo/components/preparing-order/index.tsx","webpack:///./components/home/context-cards/wismo/components/arrived-at-location/styled/index.ts","webpack:///./components/home/context-cards/wismo/components/arrived-at-location/index.tsx","webpack:///./components/home/context-cards/wismo/components/payment-failed/index.tsx","webpack:///./components/home/cancelled-context-card/index.tsx","webpack:///./components/home/context-cards/wismo/components/index.tsx","webpack:///./components/home/context-cards/wismo/on-demand/steps-template/index.tsx","webpack:///./components/home/context-cards/wismo/on-demand/index.tsx","webpack:///./mock-data/delivery-tracking.js","webpack:///./lib/requests/get-delivery-tracking.js","webpack:///./experiments/oop-1628/constants/index.js","webpack:///./experiments/oop-1628/selectors/index.js","webpack:///./components/home/context-cards/wismo/wismo-context-card.js","webpack:///./components/home/amend-order-context-card/index.js","webpack:///./components/home/context-cards/order-amended-context-card.js","webpack:///./components/home/context-cards/reserved-button.js","webpack:///./components/home/context-cards/info-message.js","webpack:///./components/home/context-cards/button.js","webpack:///./components/home/slot-expired-context-card/index.tsx","webpack:///./components/home/context-cards/slot-reserved-context-card.js","webpack:///./components/home/context-cards/first-time-shopper-tooltip.js","webpack:///./components/home/context-cards/no-slot-booked-context-card.js","webpack:///./experiments/oop-1978/components/book-slot/styled/index.tsx","webpack:///./experiments/oop-1978/components/book-slot/index.tsx","webpack:///./components/home/book-a-slot-context-card/index.js","webpack:///./components/orders/multiple-orders-notice/index.tsx","webpack:///./components/home/main-banner/styled/index.js","webpack:///./components/home/main-banner/top-notification.tsx","webpack:///./experiments/oop-1978/components/book-another-slot/styled/index.tsx","webpack:///./experiments/oop-1978/components/book-another-slot/index.tsx","webpack:///./components/home/main-banner/main-banner-signed-in.js","webpack:///./components/home/signin-register/index.js","webpack:///./components/home/delivery-description/index.js","webpack:///./lib/propositional-message/category.js","webpack:///./lib/propositional-message/source.js","webpack:///./lib/propositional-message/propositional-messages.js","webpack:///./lib/propositional-message/parse-tweet.js","webpack:///./components/home/propositional-message/index.js","webpack:///./lib/propositional-message/index.js","webpack:///./components/home/main-banner/main-banner-signed-out.js","webpack:///./components/pages/home/styled/index.js","webpack:///./components/pages/home/background-image.tsx","webpack:///./experiments/oop-2172/constants/index.ts","webpack:///./components/pages/home/index.js","webpack:///./experiments/oop-2172/helpers/analytics.ts","webpack:///./tmp-bundles/static-home.bundle.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","34","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","getBrowseEngineConfigFromState","state","getFeatureVariableStringFromState","browseEngineFeature","featureKey","variationKey","useCustomerId","getHomePageResource","getResources","HOME_PAGE","getDcsHomePageUnorderedComponentByID","componentId","_homePageResource$dat","homePageResource","unordered","content","getHomePageAnalyticsData","_homePageResource$dat2","_objectSpread","values","WidgetContainer","_PureComponent","_inherits","_super","_createSuper","_classCallCheck","arguments","_createClass","doubleClasses","classnames","this","props","doubleMedium","doubleLarge","Element","element","_jsx","className","concat","widgetName","children","PureComponent","FavoritesWidget","helpers","_dec","_class","gridPos","_this$props","favoritesItems","isAmendBasket","productTileType","translate","config","feature","f","carouselContent","BEANS","forEach","item","id","productTile","CarouselTile","identifier","CAROUSEL_FAVORITES_IDENTIFIER","itemIndex","showRestOfShelfLink","showWriteAReviewLink","tile","CAROUSEL_TILE","ProductTile","FLEXI","listData","SectionDividerWidget","title","link","Carousel","profilerKey","mapDispatchToProps","fetchFavoritesCarouselItems","FavoritesWidgetWrapper","connect","experiments","getFavExperiments","getFavCarouselItems","getIsAmendBasket","fetchFavsCarouselItemEnabled","getIsUserAuthenticated","_this","_defineProperty","_assertThisInitialized","dataRequested","hasFiredAnalytics","AnalyticsRenderedProductsEvent","items","pageType","displayArea","componentName","LazyComponent","fetchData","exposeActiveTestDataBatch","hasFavorites","hasMinFavorites","fireAnalytics","renderLazyComponent","renderFavoritesWidget","getPanelPosition","cmsData","index","findIndex","panel","firstChild","_ref","otherProps","_objectWithoutProperties","showTescoRecommendation","cmsExpanded","treeMap","component","placeholder","expandedComponent","assign","FAVOURITES_CAROUSEL","catId","page","configKey","HOME_DISPLAY_AREA","panelPos","expandPlaceholder","components","RecommenderWrapper","React","_extends","openNavMenu","text","Link","to","onClick","evt","preventDefault","stopPropagation","analyticsBus","emit","action","Heading","styled","h1","withConfig","displayName","spacing","xl","xx","colors","inverse","mediumMin","fontSize","GreetingMessage","span","GreetingName","bookSlotsHomepage","default","singleBookSlotCTA","singleBookSlotCTANoFavs","BOOK_ANOTHER_SLOT_ORDER_STATUSES","RECEIVED","CREATED","PENDING","ORDER_DUE_WITH_WISMO","ORDER_DUE","CONTEXT_CARD_STATUSES","_bookSlotsHomepage$va","defaultVariant","singleBookSlotCTAVariant","singleBookSlotCTANoFavsVariant","getVariant","getIsAmongSlotBookingVariants","includes","getIsNoFavsVariant","UserGreeting","updateWelcomeMessageStyle","_dec2","user","welcomeTranslations","welcomeText","contents","data-auto","isAuthenticated","isRegistered","userNameText","getGreeting","classNames","interpolate","getTitle","lastName","translatedTitle","_capitalize","str","charAt","toUpperCase","Icon","DeliveryDate","date","format","DeliverySlotTime","_Component","start","end","FormattedSlotTime","startTime","endTime","TagName","tagName","alt","renderTime","Component","MainText","onDemandDynamicDeliveryTime","getOnDemandDynamicDeliveryTime","fulfilmentEstimatedArrivalTime","getFulfilmentEstimatedTime","displayAsGuidePrice","guidePrice","labelKey","Price","enableMaxLimit","compactMode","_this$props2","address","addressName","aria-label","_this$props3","orderDate","showTime","showDeliverySlotWindow","showDeliveryType","shoppingMethod","deliveryBy","slotMessage","isOnDemandShopping","isOnDemandShoppingMethod","dynamicDeliveryTimeObj","isDynamicDeliveryTimeAvailable","_getOnDemandDynamicDe","getOnDemandDynamicDeliveryData","onDemandDynamicDeliverySuffix","unit","min","max","showDynamicTime","deliveryTime","getIsSameDay","contextCardDeliveryTime","day","month","renderOrderDate","renderAddress","renderGuidePrice","defaultProps","OrderCreatedContextCard","order","language","getLanguage","timezone","getTimezone","expiryTime","getFormattedTime","expiry","_class2","_len","args","Array","_key","getTimezoneAndLocaleAppliedMoment","sameDayEnabled","expiresToday","COLLECTION","_this$props$order","orderNo","_this$props$order$slo","slot","slotStart","slotEnd","confirmationDateTime","isAmendOrder","formatDate","expiryDate","now","isSame","amendByInfo","amend_by_time","amend_by_date","infoHTML","getInfoHtmlTitle","orderPlacedOn","getFormattedDate","BookSlotContextCardWrapper","addMargin","AmendOrderButton","amendCutoff","buttonClasses","buttonText","formClasses","SafelyOutputString","OrderFulfilmentEventStatus","ImHereActionType","StyledButton","Button","md","media","belowTablet","_templateObject","LoadingSpinner","div","StyledModal","Modal","white","tescoBlue","Content","lg","ButtonContainer","section","StyledHeading","SubHeading","BodyText","xs","mutateOrderFulfilmentEvent","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","payload","apiKey","endpoint","region","atrc","uuid","traceId","context","queryVariables","requestName","response","_response$data$fulfil","status","errors","_res$parsedBody","_res$parsedBody$error","res","statusCode","errorMessage","_message","wrap","_context","prev","next","uuidv4","collection","locationUuid","orderId","MUTATE_ORDER_FULFILMENT","clientGraphqlPost","sent","fulfilmentEvent","SUCCESS","isArray","_ref3","code","logApmError","abrupt","t0","parsedBody","stop","_x","_x2","updateOrderListImHereArrived","openModal","connector","getApigeeMangoEndpoint","getApigeeMangoApiKey","getAppRegion","getAtrc","enhance","compose","closeModal","confirmHandler","onClose","open","ssr","onChange","_","variant","method","DISPLAY_LOADER","HIDE_BUTTON","currentOrderKey","getImHereButtonSessionKeyTemplate","sessionStore","set","HIDE_LOADER","CONNECTION_TIMEOUT_MODAL","throwAsyncError","confirmImHere","initialState","displayButton","displaySpinner","displayImHereModal","DISPLAY_IMHERE_MODAL","HIDE_IMHERE_MODAL","ImHereButton","_useState","_useState2","setError","_React$useReducer","useReducer","imhereReducer","_React$useReducer2","_slicedToArray","dispatch","useState","useCallback","Fragment","block","Spinner","accessibleLabel","size","ImHereModal","callback","StyledStarRatingContainer","sm","OrderDueContextCard","ownProps","imHereStatus","getImHereStatus","_this$props$slot","slotTime","textRoot","legendText","legendAriaLabel","refererUrl","noRatingCopy","_titleKeys","titleKeys","ON_DEMAND","DELIVERY","showImHereButtonSurvey","contextCardTitle","starRatingProps","imHereStatusValue","getStarRatingProps","role","AVAILABLE","visualSize","InteractiveStarRatingBasic","getDistanceBetweenCoordinates","driverGeoLocation","destinationGeoLocation","latitudeA","latitude","longitudeA","longitude","latitudeB","theta","dist","Math","sin","deg2rad","cos","acos","PI","deg","getEventValueFromTrackingStatus","currentTrackingStatus","punctuality","stopsUntilDelivery","SUPPORTED_WISMO_TRACKING_STATUS","PREPARING_ORDER","AMEND_CUT_OFF","DELIVERY_SCHEDULED","ACTIVE_NEXT_STOP","WISMO_PUNCTUALITY","ON_TIME","EARLY","ACTIVE","DELAYED","ACTIVE_LATE","ARRIVED_AT_CUSTOMER_LOCATION","ACTIVE_ARRIVED","ACTIVE_ARRIVED_EARLY","DELIVERED","ACTIVE_DELIVERED","CANCELLED","NOT_AVAILABLE","emitWismoEvent","WISMO_EVENT_TYPE","basicEvent","NOW","NOT_AVAILABLE_ERROR","emitViewErrorDataEvent","showWismoStepper","customerVariables","ratingLabels","StarRating","inlineDescriptors","star","customerVariablesWithStar","overall_rating","toLowerCase","starRating","emitStarRatingEvent","OOo","oo_launchStarRating","getActiveExperimentsFromWindow","SlotTimeInline","paymentIssue","css","OrderContext","createContext","useOrderContext","useContext","OrderContextProvider","newOrder","setState","Provider","setOrder","updateOrderContext","Wrapper","retryEnabledCollection","SlotTime","AddressName","Postcode","VisuallyHide","visuallyHide","Messaging","InLineMessaging","MessagingText","Text","wismoAddressName","getWismoOrderAddressName","_order$payment","deliveryHeading","ccAddressName","deliveryAddressName","postcode","messaging","messageType","retryEnabled","payment","retryOption","SUPPORTED_PAYMENT_RETRY_OPTION","ENABLED","headingLevel","slotTimeJsx","postcodeJsx","PrimaryDeliveryStatus","SecondaryDeliveryStatus","ThirdDeliveryStatus","DeliveryStatus","primaryDeliveryStatus","secondaryDeliveryStatus","thirdDeliveryStatus","inheritColor","forwardedAs","SlotLink","bookSlotPath","getLanguageLink","getDefaultSlotsPath","bookSlotText","SpaLink","createSPALink","href","emphasized","icon","graphic","position","global","spaLink","BOOK_ANOTHER_SLOT","DELAY","emitBookAnotherSlotEvent","Container","DriverOnMap","homeGeoLocation","onReadyHandler","mapAttributes","setBestView","map","Map","onReady","onResize","center","points","disablePanning","disableTouchInput","disableZooming","stepColor","isComplete","success","lines","mobileStepWidth","noOfSteps","ol","attrs","currentStep","stepLineStyle","stepMarkerWidth","stepFullWidthStyles","Step","fullWidth","belowTabletLarge","StepMarker","li","background","StepText","base","stepNo","_templateObject2","isCurrentStep","StepErrorIcon","steps","_ref$paymentIssue","step","accessibilityText","aria-current","orderPaymentRequestData","_orderDetails$fulfilm","_yield$response","orderDetails","_error$errors","_error$errors$","_errorObj$errors","_errorObj$errors$","errorObj","GET_ORDER_PAYMENT_RETRY_OPTION","fulfilment","payments","locale","_order$payment2","_useOrderContext","_React$useState","_React$useState2","isSubmitting","setIsSubmitting","formId","myRef","useRef","submitter","ref","updatePaymentDetailsForm","SafeForm","data-testid","paymentId","amount","_handleClick","deliveryTrackingRequestData","paymentRetryDetails","updatedOrder","_myRef$current","getOrderPaymentRetryDetails","updatePaymentError","current","click","isLoading","getThreeSteps","Layout","Panel","DeliveryStatusLayout","BackgroundPanel","aboveMobileLarge","aboveTabletLarge","xxxl","outline","WrapperWithMapStyles","WrapperWithoutMapStyles","aboveDesktop","_templateObject3","_templateObject4","_templateObject5","_templateObject6","showMap","PaymentIssueMainBody","_templateObject7","_templateObject8","_templateObject9","PaymentIssueErrorLayout","_templateObject10","aboveTablet","_templateObject11","_templateObject12","_templateObject13","DeliveryHeadingWrapper","mapStateToProps","ordersURL","currency","getCurrency","UpdatePaymentDetailsButton","_order$wismoSlot","_order$wismoSlot$curr","_order$wismoSlot2","_order$wismoSlot2$cur","_order$wismoSlot3","_order$wismoSlot3$des","display3Steps","deliveryStatus","isCancelled","wismoSlot","geoLocation","destination","totalPrice","retryExpired","EXPIRED","unshift","getSteps","mapStatusToStepNumber","progressBar","ProgressBar","hideStepper","renderAddressTotalDetails","_order$slotStart","_order$address","_order$address2","style","fontWeight","symbol","StandaloneLink","BookSlotLink","showBookASlotButton","DeliveryHeading","useEffect","DriverOnMapLayout","PunctualityIcon","stops","warning","info","deliveryStart","deliveryEnd","smart_count","emitAnalyticsEvent","languageLink","placeOrderAgainLink","HomeDeliveryWismoStepper","paymentFailed","PaymentFailed","CancelledContextCard","PreparingOrder","DeliveryScheduled","ArrivedAtLocation","Delivered","fulfilmentEstimatedTime","currentStatus","localeMappedStatus","replace","OnDemandWismoCard","StepsTemplate","deliveryTrackingMocks","PREPARINGORDER","deliveryTracking","tripTrackingId","deliveryWindow","cache","maxAge","DELIVERYSCHEDULED","ARRIVED","orderStatusFromSessionStorage","_window","_window$sessionStorag","wismoStatus","deliveryTrackingData","_error","sessionStorage","getItem","JSON","parse","GET_TRIP_TRACKING","pollingFrequency","shouldDisplay3StepsConfig","shouldDisplay3Steps","attributes","WismoContextCard","_deliveryTrackingRequ","_this$context","mocksEnabled","getDeliveryTrackingInfo","_wismoSlot$currentTra","wismoSlotStart","wismoSlotEnd","CONTEXT_CARD_IMPRESSION","wismoTime","updateDeliveryTrackingInfo","_wismoSlot$currentTra2","_wismoSlot$currentTra3","_wismoSlot$destinatio","timeoutID","stopPollingForTrackingInfo","startPollingForTrackingInfo","isWarning","_wismoSlot$currentTra4","_wismoSlot$destinatio2","_wismoSlot$currentTra5","_wismoSlot$destinatio3","_wismoSlot$currentTra6","_wismoSlot$currentTra7","_wismoSlot$currentTra8","_wismoSlot$destinatio4","_wismoSlot$currentTra9","_wismoSlot$currentTra10","distanceBetweenGeoCoordinates","shouldShowMap","logCustomEvent","stops_until_delivery","has_home_geo_location","has_driver_geo_location","order_status","polling_frequency","is_showing_map","shopping_method","trip_tracking_id","distance_between_geo_coordinates","cutsMustard","deviceType","isFirstTimeShopper","opinionLabRefererUrl","String","url","_wismoSlot$destinatio5","_this$getDeliveryData","getDeliveryData","_wismoSlot$currentTra11","WismoStarRating","getCustomerVariables","IconRight","getWismoCard","getCutsMustard","getDeviceType","getIsFirstTimeShopper","StyledNotification","Notification","AmendOrderContextCard","showAmendChangeSlot","checkoutEntryPoint","getCheckoutEntryPoint","checkoutInAmend","currentUrl","getCurrentUrl","defaultSlotsPath","paymentOptionsLink","getPaymentOptionsLink","taxonomyFirstItem","getFirstNavItem","selectTaxonomyItem","_React$Component","ECOUPON_MODAL","analyticsId","translationKey","dataAuto","ChevronLink","_this2","getChevronLink","SUPERDEPARTMENT","TABLET","linkData","getUrlWithJourneyParam","AMEND_COUPONS_JOURNEY","workingDays","moment","tz","address_name","order_date","getBodyText","showInfoMessage","getAddItemsLink","getChangeSlotLink","getAddCouponsLink","getChangePaymentDetailsLink","showIcon","OrderAmendedContextCard","showChangeYourSlotLink","slotsLanguageLink","hasTrolleyItems","infoHTMLText","save_by_date_time","SaveChangesButton","disabled","addModalToUrl","handleClick","emitCheckoutAnalyticsEvent","CONTEXT_CARD","CHECKOUT","isEmpty","cannotPurchaseTrolley","timeLeft","slotExpiredCB","bottomText","overrideMessage","calDay","calendar","sameDay","nextDay","zeroRemainingCB","prefixText","suffixText","CountdownTimeText","CountdownTimer","countdownEnd","cbKey","CALLBACK_KEYS","ONDEMAND_ZERO_REMAINING_HOMEPAGE","cb","check_out_by","check_out_on","getBottomText","forwardRef","aria-describedby","ariaDescribedBy","domRef","button","longText","label","propTypes","PropTypes","string","oneOfType","bool","func","getTrolleyShoppingMethod","isOnDemandDelivery","overrideSlotExpiredMessage","showBasketInfo","SlotExpiredContextCard","SlotReservedContextCard","trolleyShoppingMethod","showExpiringState","overrideReservationMessage","isExpiring","getSlotReservedText","ReservedButton","InfoMessage","isSlotExpired","_this$props3$order","diff","slotReservedCard","FirstTimeShopperTooltip","isOpen","refreshToken","debounce","random","theme","themeColors","firstTimeShopperTooltipVariant","body","replaceTooltip","addWindowEventListener","removeWindowEventListener","prevProps","closedCookiePolicy","hasAcceptedCookiePolicy","closedAppBanner","hasAcceptedAppBanner","toggledHeaderSearchBar","isHeaderSearchOpen","isMultiSearchLinkVisible","isDesktop","addEventListener","handleWindowResize","removeEventListener","getCookieKey","firstTimeShopper","cookieExpiry","emitFTSExperimentAnayticsEvent","setCookie","customerId","_this3","HeadingStyled","BodyTextStyled","targetRef","isMobile","isNavMenuOpen","isSearchSuggestionsClosed","override","overrideTheme","ThemeOverride","overrides","Tooltip","persist","onToolTipChange","supressTargetFocusOnClose","containerWidth","styles","getIsMobile","getIsDesktop","getSuggestions","getSuggestionsVisibility","getHeaderMultiSearchLinkVisibility","getHasAcceptedCookiePolicy","getHasAcceptedAppBanner","getCID","withTheme","LinkButtonText","ActionButton","NoSlotBookedContextCard","getFirstTimeShopperTooltipVariant","isDeliveryAvailable","getIsDeliveryAvailable","isOnlyCollectionAvailable","BOOK_A_SLOT","aria-hidden","rel","detailsText","returnNullIfFalsy","getShoppingMethods","TextButtonLink","stretch","emitBookASlotAnalyticsEvent","getButtonLabel","_this$props4","renderDefaultContextCard","tooltipId","actionButtonRef","StyledBookSlotButtonWrapper","textSize","BookASlotContextCardHome","getItems","_this$props$order2","cardName","getContent","NoSlotBookedContextCardComponent","BookSlotButton","isDue","isAfter","hasItems","FAILED_PAYMENT_COLLECTION","fireContextCardAnalytics","RESERVED","BOOKED","AMENDED","getWismoContextCard","getOrderDueContextCard","bookASlotHref","bookAnotherSlotText","NotificationBannerWrapper","TopNotification","renderTree","NotificationBanner","StyledBookAnotherSlotWrapper","StyledBookAnotherSlot","MultipleOrdersNotice","BrowseStoreButton","BannerSignedIn","favoritesLink","getFavoritesLanguageLink","navItems","getNavList","topNotification","TOP_NOTIFICATION","wismoConfiguration","getWismoConfiguration","renderFavTooltip","getShowFavNavLinkTooltip","showBookASlotButtons","showFavButtons","showHorizontalTaxonomy","getShouldShowHorizontalTaxonomy","boundingRef","FavNavLinkTooltipContainer","tooltipRootID","observerId","mobileOnly","createRef","experiment","variation","optimizelyAttrs","exposeActiveTestData","minHeight","NAV_ITEM_HEIGHT","NAV_LIST_COLLAPSED_VERTICAL_PADDING","trolleyItems","recentOrder","slotId","deliverySlot","today","utc","storeId","ContextCard","orderAddress","showCancelledContextCard","deliveryDayHasPassed","showAmendOrderContextCard","updatePaymentDetailsError","InPageMessaging","BookASlotContextCard","slotBookingContextCard","BookAnotherSlot","classes","getMainBannerStyles","shouldShowMultipleOrdersNotice","shouldShowFavAndBrowseStoreCTA","SimpleButton","favoritesLinkClickHandler","buttonClass","getDomRef","getTooltipContent","SignInRegisterNew","loginUrl","getLoginUrl","registrationUrl","getRegisterUrl","emitRegisterAnalytics","SectionMessage","headingTag","DeliveryDescription","clickHandler","analyticsProps","deliveryMeta","image","pingImage","pictureBreakpoints","imageWidth","screenWidth","alternativeDesign","doNotShowPicture","learnMore","RImg","breakpoints","maxWidth","getLinkProps","renderContent","getMessageData","UK","meta","category","source","IE","getCategoryData","_UK","_IE","punchLine","moreInfo","messagesMeta","columnIndex","indexOf","tescoReferenceRegEx","parseTweet","tweet","linkOptions","twitterLink","PropositionalMessage","messageData","row","categoryData","sourceId","signature","categoryId","html","findMessageByIndex","messageIndex","SignInRegister","BannerSignedOut","getAdvertPanel","propositionalMessageIndex","propositionClickHandler","BannerBackgroundImage","path","utils","HomepageHeader","BackgroundOverlay","BackgroundImagePanel","fallbackImageSrc","Image","MFE_HOMEPAGE_ROLLOUT_EXPERIMENT","isUserAuthenticated","backgroundImageData","BACKGROUND_IMAGE","getDeliveryLocation","analyticsData","bookedSlot","getLastSelectedSlot","isUserRegistered","getIsUserRegistered","trolleyUpdating","getIsTrolleyUpdating","getUser","contextCard","_contextCardData$chil","contextCardData","isNotificationBannerEnabled","getIsNotificationBannerEnabled","getRecentOrder","browseEngineConfig","MultiSearchTooltipContainer","Home","componentData","contentId","campaignTitle","posInModule","posInPanel","modulePosition","placement","contentSegment","segments","ruleId","trackingId","emitContentInteractOp","campaignId","trim","_recentOrder$slot","_recentOrder$slot2","_recentOrder$wismoSlo","_recentOrder$wismoSlo2","_recentOrder$wismoSlo3","_recentOrder$wismoSlo4","homeConfig","welcome","getWelcomeTranslations","contextValue","MainBannerSignedIn","MainBannerSignedOut","componentClickHandler","_this$props3$homePage","UI_EXPERIMENT_RENDERED","asset","main","HomeContainer","shared","targeting","dfpTargetingCreator","header","getHeader","showMiniTrolley","BackgroundImage","BANNER_IMAGE","DfpContainer","pageId","AnalyticsContentEvent","pageName","sectionOrder","__webpack_public_path__","documentElement","getAttribute","addToCache","isSPA","render"],"mappings":"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","file":"static-home.bundle.2b121969591273db763f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t34: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"2\":\"dynamic-buylist-group.bundle~dynamic-buylist.bundle~dynamic-categories.bundle~dynamic-favorites.bund~64dad473\",\"3\":\"dynamic-buylist-group.bundle~dynamic-buylist.bundle~dynamic-categories.bundle~dynamic-favorites.bund~be52f5ca\",\"4\":\"dynamic-book-a-slot.bundle~dynamic-choose-a-location.bundle~dynamic-home.bundle\",\"5\":\"dynamic-promotions-ab-redesign.bundle~dynamic-promotions-home.bundle\",\"6\":\"dynamic-book-a-slot-hub.bundle\",\"7\":\"dynamic-book-a-slot.bundle\",\"8\":\"dynamic-buylist-group.bundle\",\"9\":\"dynamic-buylist.bundle\",\"10\":\"dynamic-categories.bundle\",\"11\":\"dynamic-choose-a-location.bundle\",\"12\":\"dynamic-favorites.bundle\",\"13\":\"dynamic-home.bundle\",\"14\":\"dynamic-multi-search.bundle\",\"15\":\"dynamic-product-details.bundle\",\"16\":\"dynamic-promotion-list.bundle\",\"17\":\"dynamic-promotions-ab-redesign.bundle\",\"18\":\"dynamic-promotions-home.bundle\",\"19\":\"dynamic-ratings-reviews-submission.bundle\",\"20\":\"dynamic-ratings-reviews-thankyou.bundle\",\"21\":\"dynamic-search.bundle\",\"22\":\"dynamic-shop-all-groceries.bundle\",\"23\":\"dynamic-trolley.bundle\",\"24\":\"dynamic-zone.bundle\",\"47\":\"vendors~dynamic-book-a-slot.bundle\"}[chunkId]||chunkId) + \".\" + {\"2\":\"64b2d01736d7ba443eaf\",\"3\":\"f7ea2875676c77277a2d\",\"4\":\"913d075efb58f6f815b6\",\"5\":\"c8ef0a4026c813dbb02e\",\"6\":\"c3b1f54cbfc5bedee6a3\",\"7\":\"0cbde7ae67732616b1d5\",\"8\":\"bf2903b007d80dacb5b7\",\"9\":\"aeb9b1befd3dd296dc21\",\"10\":\"d429c97422b79e7c26b4\",\"11\":\"b770d6cbb4dc08a2aa03\",\"12\":\"64a19b995e52e9a5d5cd\",\"13\":\"3207b0fe2a4cff34b985\",\"14\":\"5a8febbeebf933bfc49d\",\"15\":\"67779ad8895fa2cff610\",\"16\":\"838a30997e29bb99746b\",\"17\":\"aa3a68ebcaeec2bead9a\",\"18\":\"0cc9d8b23e1147e4ac9d\",\"19\":\"e3e8783315c326d608d8\",\"20\":\"ce5278e473a4156d986e\",\"21\":\"612183ee8d34eff57547\",\"22\":\"553abcdf1f242b132b7a\",\"23\":\"f367a01cce3ae3731268\",\"24\":\"ef7da8d7b0908b6e278a\",\"47\":\"45e708ebef130072e98b\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1779,0,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { getFeatureConfigurationFromReqRes, getFeatureVariableStringFromState } from '#/lib/optimizely-manager';\nimport { browseEngineFeature, ENABLE_BROWSE_TRANSITIONING } from '#/constants/experiments';\nimport { Request, Response } from 'express';\n\ninterface Configuration {\n name: string;\n value: string;\n}\nexport interface FeatureConfiguration {\n featureKey: string;\n params: Array;\n}\n\nconst featureParamName = 'browse_engine';\n\nexport const getBrowseEngineFeatureConfigWithReqRes = (req: Request, res: Response): FeatureConfiguration => {\n const featureKey = browseEngineFeature.featureKey;\n const featureConfig = getFeatureConfigurationFromReqRes(req, res, featureKey, browseEngineFeature);\n\n return (\n featureConfig?.browse_engine && {\n featureKey,\n params: [\n {\n name: featureParamName,\n value: featureConfig.browse_engine,\n },\n ],\n }\n );\n};\n\nexport const isUsingAthena = (req: Request, res: Response): boolean => {\n const featureConfig = getBrowseEngineFeatureConfigWithReqRes(req, res);\n return featureConfig?.params[0].value === 'athena';\n};\n\nexport const extendConfigWithBrowseEngineFeatureConfig = (\n req: Request,\n res: Response,\n configs: Array | undefined = undefined,\n): Array | undefined => {\n if (req.c(ENABLE_BROWSE_TRANSITIONING)) {\n const engineConfig = getBrowseEngineFeatureConfigWithReqRes(req, res);\n if (engineConfig && configs) {\n configs.push(engineConfig);\n } else if (engineConfig) {\n configs = [engineConfig];\n }\n }\n return configs;\n};\n\nexport const getBrowseEngineConfigFromState = (state: Store): string => {\n return getFeatureVariableStringFromState(state, browseEngineFeature.featureKey, browseEngineFeature.variationKey, {\n useCustomerId: browseEngineFeature.useCustomerId,\n });\n};\n","import { getResources } from '#/selectors/resources';\nimport { HOME_PAGE } from '#/constants/spa-resource';\n\nconst getHomePageResource = state => getResources(state)[HOME_PAGE];\n\nexport const getDcsHomePageUnorderedComponentByID = (componentId: string) => state => {\n const homePageResource = getHomePageResource(state);\n const unordered = homePageResource?.data.content?.unordered;\n if (!unordered) {\n return null;\n }\n return unordered[componentId] || null;\n};\n\nexport const getContextCardData = (componentId: string) => state => {\n const contextCardData = getDcsHomePageUnorderedComponentByID(componentId)(state);\n\n if (!contextCardData) {\n return null;\n }\n\n return {\n ...contextCardData.props,\n ...contextCardData.children?.[0].props,\n };\n};\n\nexport const getHomePageAnalyticsData = state => {\n const homePageResource = getHomePageResource(state);\n\n const unordered = homePageResource?.data.content?.unordered;\n\n if (!unordered) {\n return homePageResource?.data;\n }\n const content = homePageResource.data.content;\n\n return {\n ...homePageResource.data,\n content: {\n ...content,\n unordered: Object.values(unordered),\n },\n };\n};\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\n/*\n * Handles the width of widgets on the home page\n * Decides the number of columns each widget should take up\n */\n\nclass WidgetContainer extends PureComponent {\n static propTypes = {\n children: PropTypes.node,\n doubleLarge: PropTypes.bool,\n doubleMedium: PropTypes.bool,\n element: PropTypes.string,\n widgetName: PropTypes.string.isRequired\n };\n render() {\n const doubleClasses = classnames({\n 'double-medium': this.props.doubleMedium,\n 'double-large': this.props.doubleLarge\n });\n\n const Element = this.props.element ? this.props.element : 'div';\n\n return (\n \n
{this.props.children}
\n \n );\n }\n}\n\nexport default WidgetContainer;\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { CAROUSEL_FAVORITES_IDENTIFIER } from '#/analytics/constants';\nimport { CAROUSEL_TILE } from '#/constants/analytics';\nimport Carousel from '#/components/carousel';\nimport { BEANS } from '#/constants/tile-types';\nimport helpers from '#/lib/decorators/helpers';\nimport ProductTile from '#/components/products/product-tile';\nimport SectionDividerWidget from '#/components/home/section-divider-widget';\nimport WidgetContainer from '#/components/widget-container';\nimport { FLEXI } from '#/constants/tile-types';\nimport CarouselTile from '#/components/product-tiles/vertical-tile/variant/carousel-tile';\n\n@helpers(['c', 't', 'f'])\nexport default class FavoritesWidget extends PureComponent {\n static propTypes = {\n favoritesItems: PropTypes.object.isRequired,\n isAmendBasket: PropTypes.bool.isRequired,\n t: PropTypes.func\n };\n\n render() {\n let gridPos = 0;\n const {\n favoritesItems,\n isAmendBasket,\n productTileType,\n t: translate,\n c: config,\n f: feature\n } = this.props;\n\n const carouselContent = [];\n if (productTileType === BEANS) {\n favoritesItems.forEach((item, id) => {\n const productTile = (\n \n );\n\n gridPos++;\n\n carouselContent.push(productTile);\n });\n } else {\n favoritesItems.forEach((item, id) => {\n const productTile = (\n \n );\n\n gridPos++;\n\n carouselContent.push(productTile);\n });\n }\n\n return (\n
\n \n
\n \n
\n
\n {carouselContent}\n
\n );\n }\n}\n","import React, { PureComponent } from 'react';\nimport WidgetContainer from '#/components/widget-container';\nimport FavoritesWidget from '#/components/home/favorites-widget';\nimport { BEANS } from '#/constants/tile-types';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { getFavCarouselItems, getFavExperiments } from '#/reducers/results';\nimport { getIsAmendBasket } from '#/selectors/trolley';\nimport { fetchFavoritesCarouselItems } from '#/actions/results-actions';\nimport LazyComponent from '#/components/shared/lazy-component';\nimport AnalyticsRenderedProductsEvent from '#/components/analytics/rendered-products-event';\nimport { exposeActiveTestDataBatch } from '#/lib/optimizely-manager';\nimport { getIsUserAuthenticated } from '#/reducers/user';\n\ninterface FavoritesWidgetWrapperMstp {\n experiments: ReturnType;\n favoritesItems: ReturnType;\n isAmendBasket: ReturnType;\n fetchFavsCarouselItemEnabled: boolean;\n}\n\ninterface FavoritesWidgetWrapperMdtp {\n fetchFavoritesCarouselItems: typeof fetchFavoritesCarouselItems;\n}\n\ntype FavoritesWidgetWrapperProps = FavoritesWidgetWrapperMstp &\n FavoritesWidgetWrapperMdtp & {\n listData: { page: string };\n };\n\nconst mapStateToProps = (state: Store): FavoritesWidgetWrapperMstp => ({\n experiments: getFavExperiments(state),\n favoritesItems: getFavCarouselItems(state),\n isAmendBasket: getIsAmendBasket(state),\n fetchFavsCarouselItemEnabled: getIsUserAuthenticated(state),\n});\n\nconst mapDispatchToProps: FavoritesWidgetWrapperMdtp = {\n fetchFavoritesCarouselItems,\n};\n\n@connect(mapStateToProps, mapDispatchToProps)\nclass FavoritesWidgetWrapper extends PureComponent {\n dataRequested: boolean;\n hasFiredAnalytics: boolean;\n\n constructor(props: FavoritesWidgetWrapperProps) {\n super(props);\n this.dataRequested = false;\n this.hasFiredAnalytics = false;\n }\n\n renderFavoritesWidget(): JSX.Element {\n return (\n \n \n \n \n );\n }\n\n renderLazyComponent(): JSX.Element {\n return ;\n }\n\n fetchData = (): void => {\n this.dataRequested = true;\n const { fetchFavsCarouselItemEnabled, fetchFavoritesCarouselItems } = this.props;\n\n if (fetchFavsCarouselItemEnabled) {\n fetchFavoritesCarouselItems();\n }\n };\n\n fireAnalytics(): void {\n exposeActiveTestDataBatch(this.props.experiments);\n this.hasFiredAnalytics = true;\n }\n\n render(): JSX.Element {\n const { favoritesItems } = this.props;\n const hasFavorites = favoritesItems && favoritesItems.length > 0;\n const hasMinFavorites = favoritesItems && favoritesItems.length >= 3;\n const shouldFireAnalytics = hasMinFavorites && !this.hasFiredAnalytics;\n if (shouldFireAnalytics) {\n this.fireAnalytics();\n }\n return (\n
\n {!hasFavorites && !this.dataRequested && this.renderLazyComponent()}\n {hasMinFavorites && this.renderFavoritesWidget()}\n
\n );\n }\n}\n\nexport default FavoritesWidgetWrapper;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport * as components from '#/components/cms-driven';\nimport { treeMap } from '#/lib/dcs/tree-utils';\nimport FavoritesWidgetWrapper from './favorites-widget-wrapper';\nimport RecommenderWrapper from '#/components/recommender';\nimport { HOME_DISPLAY_AREA } from '#/constants/recommendations';\nimport {\n RECOMMENDERS_CAROUSEL,\n PLACEHOLDER\n} from '#/constants/dcs-widget-types';\nimport { FAVOURITES_CAROUSEL } from '#/constants/favorites';\nimport helpers from '#/lib/decorators/helpers';\n\nfunction getPanelPosition(cmsData) {\n const index = cmsData.findIndex(panel => {\n if (panel && panel.children.length) {\n const firstChild = panel.children[0];\n\n return (\n firstChild.type === PLACEHOLDER &&\n firstChild.props.componentName === RECOMMENDERS_CAROUSEL\n );\n }\n\n return null;\n });\n\n return index === -1 ? 1 : index + 1;\n}\n\nconst HomeContainer = ({ cmsData, isAmendBasket, ...otherProps }) => {\n const { c: config } = otherProps;\n\n const expandPlaceholder = (placeholder, showTescoRecommendation) => {\n const expandedComponent = Object.assign({}, placeholder);\n const componentName = expandedComponent.props.componentName;\n\n expandedComponent.type = componentName;\n\n if (componentName === FAVOURITES_CAROUSEL) {\n expandedComponent.props = {\n catId: 'Favorites',\n title: 'Favorites',\n isAmendBasket,\n listData: { page: 'Home' }\n };\n } else if (\n showTescoRecommendation &&\n componentName === RECOMMENDERS_CAROUSEL\n ) {\n expandedComponent.props = {\n page: 'home',\n configKey: 'home_page',\n displayArea: HOME_DISPLAY_AREA,\n panelPos: getPanelPosition(cmsData)\n };\n }\n\n return expandedComponent;\n };\n\n const showTescoRecommendation = config('recommenders:enabled');\n const cmsExpanded = treeMap(component => {\n if (component.type === 'Placeholder') {\n return expandPlaceholder(component, showTescoRecommendation);\n }\n\n return component;\n }, cmsData);\n\n components.FavouritesCarousel = FavoritesWidgetWrapper;\n\n if (showTescoRecommendation) {\n components.RecommendersCarousel = RecommenderWrapper;\n }\n\n return (\n
\n \n
\n );\n};\n\nHomeContainer.propTypes = {\n c: PropTypes.func.isRequired,\n cmsData: PropTypes.array,\n isAmendBasket: PropTypes.bool\n};\n\nexport default helpers(['c'])(HomeContainer);\n","//Type that's need to match with the incoming DCS data\n// Example :\n// {\n// type: \"RecommendersCarousel\",\n// ...\n// }\n\nexport const PLACEHOLDER = 'Placeholder';\nexport const RECOMMENDERS_CAROUSEL = 'RecommendersCarousel';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { openNavMenu } from '#/actions/ui-action-creators';\nimport Link from '#/components/link-check-spa';\nimport analyticsBus from '#/analytics/analyticsBus';\n\nconst BrowseStoreButton = props => {\n const text = props.t('home:new-user-banner.browse-the-store');\n const classes = 'browse-store';\n\n const clickHandler = evt => {\n evt.preventDefault();\n evt.stopPropagation();\n\n props.openNavMenu();\n analyticsBus().emit('UIEventBasicEvent', {\n action: 'now',\n type: 'home',\n value: 'browse the store'\n });\n };\n\n return (\n
\n \n {text}\n \n
\n );\n};\n\nBrowseStoreButton.propTypes = {\n l: PropTypes.func.isRequired,\n openNavMenu: PropTypes.func.isRequired,\n t: PropTypes.func.isRequired\n};\n\nconst mapDispatchToProps = {\n openNavMenu\n};\n\nexport default connect(\n null,\n mapDispatchToProps\n)(helpers(['l', 't'])(BrowseStoreButton));\n","import styled from 'styled-components';\nimport { colors, spacing, fontSize } from '@ddsweb/selectors';\nimport { mediumMin } from '#/constants/viewports';\n\nconst Heading = styled.h1`\n font-size: ${spacing.xl};\n padding-top: ${spacing.xx};\n color: ${colors.inverse};\n @media (max-width: 767px) {\n padding: 6px 0; /* Right left padding on small needs to go, so that the text correctly aligns.*/\n }\n\n @media (min-width: ${mediumMin}) {\n padding-left: 0;\n font-size: ${fontSize.xl};\n }\n`;\n\nHeading.displayName = 'Heading';\n\nconst GreetingMessage = styled.span`\n display: block;\n\n // used for oop-1978 experiment\n .heading--in-line & {\n display: inline;\n }\n`;\n\nGreetingMessage.displayName = 'GreetingMessage';\n\nconst GreetingName = styled.span`\n padding-top: 6px;\n font-family: 'TESCO Modern', Arial, sans-serif;\n font-weight: bold;\n display: block;\n\n @media (min-width: ${mediumMin}) {\n padding-top: 11px;\n }\n\n // used for oop-1978 experiment\n .heading--in-line & {\n display: inline;\n padding: 0;\n\n &::before {\n content: ' ';\n }\n }\n`;\n\nGreetingName.displayName = 'GreetingName';\n\nexport { Heading, GreetingMessage, GreetingName };\n","import { CREATED, ORDER_DUE, ORDER_DUE_WITH_WISMO, PENDING, RECEIVED } from '#/constants/order-statuses';\n\nexport const bookSlotsHomepage = {\n key: '1978',\n featureKey: 'ghs-all_book-multiple-slots-homepage-mweb',\n variationKey: 'experience',\n variants: {\n default: 'default',\n singleBookSlotCTA: 'Single-CTA+BookSlot',\n singleBookSlotCTANoFavs: 'Single-CTA+BookSlot+RemoveBrowseFavs',\n },\n useCustomerId: true,\n};\n\nexport const BOOK_ANOTHER_SLOT_ORDER_STATUSES = [RECEIVED, CREATED, PENDING, ORDER_DUE_WITH_WISMO, ORDER_DUE];\n\nexport const CONTEXT_CARD_STATUSES = {\n UPCOMING_ORDER: 'upcomingorder',\n WISMO: 'wismo',\n DAY_OF_COLLECTION: 'dayofcollection',\n CANCELLED_ORDER: 'cancelledorder',\n PAYMENT_FAILURE: 'paymentfailure',\n};\n","import { getFeatureVariableStringFromState } from '#/lib/optimizely-manager';\nimport { bookSlotsHomepage } from '#/experiments/oop-1978/constants';\n\nconst {\n useCustomerId,\n variationKey,\n variants: {\n default: defaultVariant,\n singleBookSlotCTA: singleBookSlotCTAVariant,\n singleBookSlotCTANoFavs: singleBookSlotCTANoFavsVariant,\n },\n featureKey,\n} = bookSlotsHomepage;\n\nconst getVariant = (state: Store): string =>\n getFeatureVariableStringFromState(state, featureKey, variationKey, { useCustomerId }) || defaultVariant;\n\nexport const getIsAmongSlotBookingVariants = (state: Store): boolean =>\n [singleBookSlotCTAVariant, singleBookSlotCTANoFavsVariant].includes(getVariant(state));\n\nexport const getIsNoFavsVariant = (state: Store): boolean => singleBookSlotCTANoFavsVariant === getVariant(state);\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { interpolate } from '#/utils/text-utils';\nimport { Heading, GreetingMessage, GreetingName } from './styled';\nimport { getIsAmongSlotBookingVariants } from '#/experiments/oop-1978/selectors';\n\nconst mapStateToProps = state => ({\n updateWelcomeMessageStyle: getIsAmongSlotBookingVariants(state)\n});\n\n@connect(mapStateToProps)\n@helpers(['t'])\nexport default class UserGreeting extends PureComponent {\n static propTypes = {\n t: PropTypes.func.isRequired,\n user: PropTypes.shape({\n displayName: PropTypes.string,\n isAuthenticated: PropTypes.bool.isRequired,\n isRegistered: PropTypes.bool.isRequired,\n lastName: PropTypes.string,\n title: PropTypes.string\n }),\n welcomeTranslations: PropTypes.object.isRequired,\n updateWelcomeMessageStyle: PropTypes.bool.isRequired\n };\n\n render() {\n const { user, welcomeTranslations, updateWelcomeMessageStyle } = this.props;\n const welcomeText = welcomeTranslations['welcome-message'];\n const contents = [\n \n {welcomeText}\n \n ];\n\n if (user.isAuthenticated && user.isRegistered) {\n const userNameText = welcomeTranslations['username-message'];\n\n contents.push(\n \n {this.getGreeting(user, userNameText)}\n \n );\n }\n\n return (\n \n {contents}\n \n );\n }\n\n getGreeting(user, userNameText) {\n return interpolate(userNameText, {\n name: user.displayName,\n title: this.getTitle(user),\n lastName: user.lastName\n });\n }\n\n getTitle({ title }) {\n const { t: translate } = this.props;\n\n if (title) {\n const translatedTitle = translate(`name-title.${title}`);\n\n if (translatedTitle !== '') {\n return this._capitalize(translatedTitle);\n }\n\n return this._capitalize(title);\n }\n\n return '';\n }\n\n _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Icon = ({ children }) => (\n
\n
{children}
\n
\n);\n\nIcon.propTypes = {\n children: PropTypes.node\n};\n\nexport default Icon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst DeliveryDate = ({ date }) => (\n

\n \n {date.format('ddd').toUpperCase()}\n \n {date.format('DD')}\n \n {date.format('MMM').toUpperCase()}\n \n

\n);\n\nDeliveryDate.propTypes = {\n date: PropTypes.object.isRequired\n};\n\nexport default DeliveryDate;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport FormattedSlotTime from '#/components/shared/formatted-time/formattedSlotTime';\n\nclass DeliverySlotTime extends Component {\n static propTypes = {\n alt: PropTypes.bool,\n className: PropTypes.string,\n end: PropTypes.object,\n start: PropTypes.object,\n tagName: PropTypes.oneOf(['p', 'span'])\n };\n\n static defaultProps = {\n tagName: 'p'\n };\n\n renderTime() {\n const { start, end } = this.props;\n\n return ;\n }\n\n render() {\n const TagName = this.props.tagName;\n return (\n \n {!this.props.alt && (\n {`${this.props.start.format('DD MMM YYYY')}:`}\n )}\n \n {this.renderTime()}\n \n \n );\n }\n}\n\nexport default DeliverySlotTime;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport helpers from '#/lib/decorators/helpers';\nimport Price from '#/components/shared/price';\nimport DeliverySlotTime from './delivery-slot-time';\nimport { getIsSameDay } from '#/lib/slot/slot-utils';\nimport { connect } from 'react-redux';\nimport {\n isOnDemandShoppingMethod,\n getOnDemandDynamicDeliveryData\n} from '#/lib/shopping-method-util';\nimport {\n getOnDemandDynamicDeliveryTime,\n getFulfilmentEstimatedTime\n} from '#/selectors/slot';\n\nconst mapStateToProps = state => ({\n onDemandDynamicDeliveryTime: getOnDemandDynamicDeliveryTime(state),\n fulfilmentEstimatedArrivalTime: getFulfilmentEstimatedTime(state)\n});\n\n@connect(mapStateToProps)\n@helpers(['t', 'c'])\nclass MainText extends Component {\n static propTypes = {\n address: PropTypes.object,\n alt: PropTypes.bool,\n c: PropTypes.func.isRequired,\n deliveryBy: PropTypes.shape({\n day: PropTypes.string.isRequired,\n month: PropTypes.string.isRequired\n }),\n displayAsGuidePrice: PropTypes.bool,\n end: PropTypes.object,\n fulfilmentEstimatedArrivalTime: PropTypes.shape({\n isDynamicDeliveryTimeAvailable: PropTypes.bool.isRequired,\n value: PropTypes.number,\n unit: PropTypes.string,\n range: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number\n })\n }),\n guidePrice: PropTypes.number,\n onDemandDynamicDeliveryTime: PropTypes.shape({\n isDynamicDeliveryTimeAvailable: PropTypes.bool.isRequired,\n value: PropTypes.number,\n unit: PropTypes.string,\n range: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number\n })\n }),\n orderPlacedOn: PropTypes.string,\n shoppingMethod: PropTypes.string,\n showDeliverySlotWindow: PropTypes.bool,\n showDeliveryType: PropTypes.bool,\n showTime: PropTypes.bool,\n slotMessage: PropTypes.string,\n start: PropTypes.object,\n t: PropTypes.func.isRequired\n };\n\n renderGuidePrice() {\n const {\n t: translate,\n displayAsGuidePrice,\n guidePrice,\n c: config,\n alt\n } = this.props;\n const labelKey = displayAsGuidePrice\n ? 'common:guide-price'\n : 'common:price';\n\n return (\n guidePrice && (\n

\n {`${translate(\n labelKey\n )}:`}\n \n

\n )\n );\n }\n\n renderAddress() {\n const {\n address,\n address: { name: addressName }\n } = this.props;\n\n return (\n address && (\n \n {addressName}\n

\n )\n );\n }\n\n renderOrderDate() {\n const {\n orderDate,\n t: translate,\n showTime,\n alt,\n start,\n end,\n fulfilmentEstimatedArrivalTime,\n showDeliverySlotWindow,\n showDeliveryType,\n shoppingMethod,\n deliveryBy,\n onDemandDynamicDeliveryTime,\n slotMessage\n } = this.props;\n const isOnDemandShopping = isOnDemandShoppingMethod(shoppingMethod);\n\n const { isDynamicDeliveryTimeAvailable } = onDemandDynamicDeliveryTime;\n\n const dynamicDeliveryTimeObj = isDynamicDeliveryTimeAvailable\n ? onDemandDynamicDeliveryTime\n : fulfilmentEstimatedArrivalTime;\n\n const {\n onDemandDynamicDeliverySuffix,\n unit,\n min,\n max,\n showDynamicTime\n } = getOnDemandDynamicDeliveryData(\n isOnDemandShopping,\n true,\n dynamicDeliveryTimeObj\n );\n\n if (slotMessage) {\n return (\n \n {slotMessage}\n

\n );\n }\n\n if (showDeliveryType) {\n const deliveryTime = getIsSameDay({ start })\n ? translate('common:today')\n : start.format('DD MMM YYYY');\n\n const contextCardDeliveryTime = showDynamicTime ? (\n \n {translate(\n `home:book-a-slot.${shoppingMethod}.delivery-time${onDemandDynamicDeliverySuffix}`,\n {\n unit,\n min,\n max\n }\n )}\n \n ) : (\n {`${deliveryTime}, ${translate(\n `home:book-a-slot.${shoppingMethod}.delivery-time`\n )}`}\n );\n\n return (\n

\n \n {contextCardDeliveryTime}\n \n

\n );\n }\n\n if (showDeliverySlotWindow) {\n return showTime && ;\n }\n\n if (deliveryBy) {\n return (\n

\n {translate('home:book-a-slot.slot-booked.delivery-by', {\n day: deliveryBy.day,\n month: deliveryBy.month\n })}\n

\n );\n }\n\n return (\n

\n {translate('orders:common.created-on')} {orderDate}\n

\n );\n }\n\n render() {\n const { alt } = this.props;\n\n return (\n \n {this.renderOrderDate()}\n {!alt && this.renderAddress()}\n {this.renderGuidePrice()}\n {alt && this.renderAddress()}\n \n );\n }\n}\n\nMainText.defaultProps = {\n showTime: true,\n displayAsGuidePrice: true,\n showDeliverySlotWindow: true\n};\n\nexport default MainText;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport helpers from '#/lib/decorators/helpers';\nimport SafelyOutputString from '#/components/safely-output-string';\nimport AmendOrderButton from '#/components/shared/amend-order-button';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport Icon from './icon';\nimport DeliveryDate from './delivery-date';\nimport MainText from '#/components/home/context-cards/main-text';\nimport { COLLECTION } from '#/constants/shopping-methods';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { getLanguage, getTimezone } from '#/reducers/app';\nimport { getFormattedDate } from '#/lib/i18n/date-utils';\nimport { BookSlotContextCardWrapper } from './styled';\nimport { getFormattedTime } from '#/components/shared/formatted-time/selector';\n\nconst mapStateToProps = (state, { order, c: config }) => {\n return {\n language: getLanguage(state),\n timezone: getTimezone(state),\n displayAsGuidePrice: config('displayAsGuidePrice'),\n expiryTime: getFormattedTime(state, order.expiry, config)\n };\n};\n\n@helpers(['c', 't'])\n@connect(mapStateToProps)\nclass OrderCreatedContextCard extends Component {\n static propTypes = {\n c: PropTypes.func,\n isAmendOrder: PropTypes.bool,\n language: PropTypes.string.isRequired,\n order: PropTypes.shape({\n address: PropTypes.object.isRequired,\n displayAsGuidePrice: PropTypes.bool,\n expiry: PropTypes.string.isRequired,\n guidePrice: PropTypes.number,\n id: PropTypes.string.isRequired,\n orderNo: PropTypes.string.isRequired,\n confirmationDateTime: PropTypes.string,\n slot: PropTypes.shape({\n start: PropTypes.string,\n end: PropTypes.string\n })\n }).isRequired,\n t: PropTypes.func,\n timezone: PropTypes.string\n };\n\n static defaultProps = {\n isAmendOrder: true\n };\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n getInfoHtmlTitle = (sameDayEnabled, expiresToday, shoppingMethod) => {\n if (sameDayEnabled && expiresToday)\n return 'home:book-a-slot.order-placed.details-same-day';\n\n if (shoppingMethod === COLLECTION)\n return 'home:book-a-slot.order-placed.details-collection';\n\n return 'home:book-a-slot.order-placed.details';\n };\n\n render() {\n const {\n order: {\n address,\n expiry,\n guidePrice,\n orderNo,\n shoppingMethod,\n slot: { start: slotStart, end: slotEnd },\n confirmationDateTime\n },\n displayAsGuidePrice,\n expiryTime,\n c: config,\n isAmendOrder,\n t: translate\n } = this.props;\n\n const start = this.formatDate(slotStart);\n const end = this.formatDate(slotEnd);\n const expiryDate = this.formatDate(expiry);\n const now = this.formatDate();\n\n const sameDayEnabled = config('sameDayClickAndCollectEnabled');\n const expiresToday = expiryDate.isSame(now, 'day');\n const amendByInfo = {\n amend_by_time: expiryTime,\n amend_by_date: expiryDate.format('dddd, D MMMM YYYY')\n };\n\n const title = this.getInfoHtmlTitle(\n sameDayEnabled,\n expiresToday,\n shoppingMethod\n );\n const infoHTML = translate(title, amendByInfo);\n\n const orderPlacedOn = getFormattedDate(\n confirmationDateTime,\n 'Do MMMM YYYY'\n );\n\n return (\n \n \n \n \n \n

\n {translate('home:book-a-slot.order-placed.title')}\n

\n \n {isAmendOrder && (\n \n )}\n \n {isAmendOrder && (\n
\n {infoHTML}\n
\n )}\n \n );\n }\n}\n\nexport default OrderCreatedContextCard;\n","import styled from 'styled-components';\nimport Button from '@beans/button';\nimport { media } from '@beans/foundation';\nimport { spacing, fontSize } from '@beans/selectors';\n\nexport const StyledButton = styled(Button)`\n border-radius: ${fontSize.md};\n ${media.belowTablet`\n margin-top: ${spacing.md};\n margin-bottom: ${spacing.xx};\n `};\n`;\n\nexport const LoadingSpinner = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n`;\n","export const ARRIVED = 'ARRIVED';\nexport enum OrderFulfilmentEventStatus {\n SUCCESS = 'OK',\n FAILED = 'FAILED',\n}\nexport enum ImHereActionType {\n DISPLAY_IMHERE_MODAL = 'DISPLAY_IMHERE_MODAL',\n HIDE_IMHERE_MODAL = 'HIDE_IMHERE_MODAL',\n DISPLAY_LOADER = 'DISPLAY_LOADER',\n HIDE_LOADER = 'HIDE_LOADER',\n HIDE_BUTTON = 'HIDE_BUTTON',\n}\n","import styled from 'styled-components';\nimport { spacing, fontSize } from '@beans/selectors';\nimport { SubHeading, BodyText } from '@beans/typography';\nimport Modal from '@beans/modal';\nimport { colors } from '@beans/selectors';\n\nexport const StyledModal = styled(Modal)`\n .beans-modal__close-link {\n background-color: ${colors.white};\n color: ${colors.tescoBlue};\n }\n .beans-modal__mask {\n z-index: 12;\n }\n`;\n\nexport const Content = styled.div`\n margin-bottom: ${spacing.lg};\n`;\n\nexport const ButtonContainer = styled.section`\n display: flex;\n justify-content: space-between;\n .beans-button__container {\n width: 155px;\n }\n`;\n\nexport const StyledHeading = styled(SubHeading)`\n && {\n margin: ${spacing.md} 0;\n font-size: ${fontSize.md};\n }\n`;\n\nexport const StyledBodyText = styled(BodyText)`\n padding: ${spacing.xs} 0;\n`;\n","import { logApmError } from '#/lib/apm';\nimport { clientGraphqlPost } from '#/lib/requests/client-graphql';\nimport graphqlQuery from '#/lib/requests/graphql-queries/mutate-fulfilment-event';\nimport { OrderFulfilmentEventStatus } from '#/constants/im-here';\nimport uuidv4 from 'uuid/v4';\nimport { MUTATE_ORDER_FULFILMENT } from '#/constants/request-names';\n\nexport type RequestConfig = {\n apiKey: string;\n endpoint: string;\n region: string;\n atrc: string;\n};\n\ntype ErrorResponse = {\n status: number;\n message: string;\n parsedBody?: {\n errors?: Error[];\n };\n};\n\ntype FulfilmentEventError = { code: string | number };\n\nexport type MutateOrderFulfilmentEventResponse = {\n data: {\n fulfilmentEvent: {\n status: string | null;\n errors: FulfilmentEventError[] | null;\n };\n };\n cache: {\n maxAge: number;\n };\n};\n\nexport const mutateOrderFulfilmentEvent = async (\n payload: { [key: string]: string | undefined | null },\n { apiKey, endpoint, region, atrc }: RequestConfig,\n): Promise => {\n const uuid = uuidv4();\n const traceId = `${atrc}:${uuid}`;\n const context = { 'x-apikey': apiKey, traceId, region };\n const queryVariables = {\n action: {\n collection: { locationUuid: payload.locationUuid, orderId: payload.orderId, action: payload.action },\n },\n };\n\n try {\n const requestName = MUTATE_ORDER_FULFILMENT;\n const response = await clientGraphqlPost(\n endpoint,\n context,\n graphqlQuery,\n queryVariables,\n atrc,\n requestName,\n traceId,\n );\n const {\n data: {\n fulfilmentEvent: { status, errors },\n },\n } = response;\n\n if (status !== OrderFulfilmentEventStatus.SUCCESS) {\n let message = `Order Fulfilment event Error - Message: GraphQL Mutation status is ${status}`;\n if (Array.isArray(errors) && errors.length > 0) {\n message += ', GraphQL Errors:';\n errors.forEach(({ code }: FulfilmentEventError) => {\n message += ` ${code}`;\n });\n }\n logApmError(new Error(message), { traceId });\n }\n return response;\n } catch (responseError) {\n const res = responseError as ErrorResponse;\n const error = res?.parsedBody?.errors?.[0];\n const statusCode = res?.status || 'unknown';\n const errorMessage = error?.message || res.message || 'unknown';\n const message = `Order Fulfilment event Error - Message: ${errorMessage}, Status: ${statusCode}`;\n\n logApmError(new Error(message), { traceId });\n return { error: true };\n }\n};\n","export default `mutation fulfilmentEvent($action: FulfilmentEventAction) { \n fulfilmentEvent(action: $action) { \n status \n errors { \n code \n } \n } \n }`;\n","import React from 'react';\nimport Button from '@ddsweb/button';\nimport { ConnectedProps } from 'react-redux';\nimport { compose } from 'react-recompose';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { ButtonContainer, Content, StyledHeading, StyledModal } from './styled';\nimport { TTranslateFn } from '#/components/slots/delivery-content-section/index.defs';\nimport { ImHereActionType, OrderFulfilmentEventStatus, ARRIVED } from '#/constants/im-here';\nimport {\n mutateOrderFulfilmentEvent,\n MutateOrderFulfilmentEventResponse,\n} from '#/lib/requests/fulfilment/mutate-order-fulfilment-event';\nimport { updateOrderListImHereArrived } from '#/actions/order-list-details-action-creators';\nimport { sessionStore } from '#/lib/data-store/client-store.js';\nimport { getImHereButtonSessionKeyTemplate } from '#/components/home/context-cards/im-here-button/selector';\nimport { getApigeeMangoEndpoint, getApigeeMangoApiKey, getAppRegion } from '#/reducers/app';\nimport { openModal } from '#/actions/ui-action-creators';\nimport { CONNECTION_TIMEOUT_MODAL } from '#/constants/modal-names';\nimport { getAtrc } from '#/reducers/user';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { SLOT_BOOKED_ANALYTICS_METHOD } from '#/components/home/context-cards/im-here-button/constants';\n\ntype HelperProps = {\n t: TTranslateFn;\n};\n\ntype Props = {\n closeModal: () => void;\n confirmHandler: (type: ImHereActionType, callback?: (errorHandler: (error: Error) => void) => void) => void;\n orderNo: string;\n locationUuid: string;\n slotStart: string;\n slotEnd: string;\n};\n\ntype TPayload = {\n locationUuid?: string;\n orderId?: string;\n action: string;\n};\n\nconst mapDispatchToProps = {\n updateOrderListImHereArrived,\n openModal,\n};\n\nconst mapStateToProps = (state: Store): { endpoint: string; apiKey: string; region: string; atrc: string } => ({\n endpoint: getApigeeMangoEndpoint(state),\n apiKey: getApigeeMangoApiKey(state),\n region: getAppRegion(state),\n atrc: getAtrc(state),\n});\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport type ImHereModalProps = HelperProps & ConnectedProps & Props;\n\nconst ImHereModal = (props: ImHereModalProps): JSX.Element => {\n const {\n t: translate,\n closeModal,\n orderNo,\n locationUuid,\n confirmHandler,\n updateOrderListImHereArrived,\n openModal,\n endpoint,\n apiKey,\n region,\n atrc,\n slotStart,\n slotEnd,\n } = props;\n\n const changeHandler = (_: void, event: React.MouseEvent): void => {\n onClose(event);\n };\n\n const onClose = (event: React.MouseEvent): void => {\n event.preventDefault();\n closeModal();\n };\n\n const markArrivalKeyInSession = (): void => {\n const currentOrderKey: string = getImHereButtonSessionKeyTemplate(locationUuid, orderNo);\n const loggedOrderKey: string = sessionStore?.get(currentOrderKey);\n\n if (!loggedOrderKey) {\n sessionStore?.set(currentOrderKey, 'true');\n }\n };\n\n const confirmImHere = (payload: TPayload) => async (e: React.SyntheticEvent): Promise => {\n e.preventDefault();\n\n analyticsBus().emit('UIEventSlotBooked', {\n start: slotStart,\n end: slotEnd,\n method: SLOT_BOOKED_ANALYTICS_METHOD,\n });\n\n confirmHandler(ImHereActionType.DISPLAY_LOADER);\n\n try {\n const response = await mutateOrderFulfilmentEvent(payload, { apiKey, endpoint, region, atrc });\n const {\n data: {\n fulfilmentEvent: { status },\n },\n } = response as MutateOrderFulfilmentEventResponse;\n if (status === OrderFulfilmentEventStatus.SUCCESS) {\n confirmHandler(ImHereActionType.HIDE_BUTTON);\n markArrivalKeyInSession();\n updateOrderListImHereArrived(orderNo);\n } else {\n confirmHandler(ImHereActionType.HIDE_LOADER);\n openModal(CONNECTION_TIMEOUT_MODAL);\n }\n } catch (error) {\n confirmHandler(ImHereActionType.HIDE_LOADER, throwAsyncError => {\n throwAsyncError(error as Error);\n });\n }\n };\n\n const payload = {\n locationUuid: locationUuid,\n orderId: orderNo,\n action: ARRIVED,\n };\n\n return (\n \n \n {translate('modals:im-here.title')}\n \n \n \n \n \n \n );\n};\n\nconst enhance = compose(helpers(['c', 't']), connector);\n\nexport default enhance(ImHereModal);\n","export const SLOT_BOOKED_ANALYTICS_METHOD = 'booked slot collection';\n","import { ImHereActionType } from '#/constants/im-here';\n\ninterface ImHereAction {\n type: ImHereActionType;\n}\nexport interface InitialState {\n displayButton: boolean;\n displaySpinner: boolean;\n displayImHereModal: boolean;\n}\nexport const initialState = {\n displayButton: true,\n displaySpinner: false,\n displayImHereModal: false,\n};\n\nexport default function(state: InitialState = initialState, action: ImHereAction): InitialState {\n switch (action.type) {\n case ImHereActionType.DISPLAY_IMHERE_MODAL:\n return {\n ...state,\n displayImHereModal: true,\n };\n case ImHereActionType.HIDE_IMHERE_MODAL:\n return {\n ...state,\n displayImHereModal: false,\n };\n case ImHereActionType.DISPLAY_LOADER:\n return {\n ...state,\n displayImHereModal: false,\n displaySpinner: true,\n };\n case ImHereActionType.HIDE_LOADER:\n return {\n ...state,\n displayImHereModal: false,\n displaySpinner: false,\n };\n case ImHereActionType.HIDE_BUTTON:\n return {\n ...state,\n displayImHereModal: false,\n displayButton: false,\n };\n default:\n return state;\n }\n}\n","import React from 'react';\nimport { StyledButton, LoadingSpinner } from '#/components/home/context-cards/im-here-button/styled';\nimport helpers from '#/lib/decorators/helpers';\nimport { TTranslateFn } from '#/components/slots/delivery-content-section/index.defs';\nimport ImHereModal from '#/components/modals/im-here-modal';\nimport imhereReducer, { initialState } from '#/components/home/context-cards/im-here-button/im-here-reducer';\nimport Spinner from '@ddsweb/spinner';\nimport { ImHereActionType } from '#/constants/im-here';\nimport { useAsyncError } from '#/utils/useAsyncError';\n\ntype HelperProps = {\n t: TTranslateFn;\n};\ntype Props = {\n orderNo: string;\n locationUuid: string;\n slotStart: string;\n slotEnd: string;\n};\n\nexport type ImHereButtonProps = HelperProps & Props;\n\nconst ImHereButton = helpers(['t'])((props: ImHereButtonProps) => {\n const { t: translate, orderNo, locationUuid, slotStart, slotEnd } = props;\n const [state, dispatch] = React.useReducer(imhereReducer, initialState);\n const throwAsyncError = useAsyncError();\n const handleClose = (): void => dispatch({ type: ImHereActionType.HIDE_IMHERE_MODAL });\n\n const displayImHereModal = (e: React.MouseEvent): void => {\n e.stopPropagation();\n dispatch({ type: ImHereActionType.DISPLAY_IMHERE_MODAL });\n };\n\n const handleConfirm = (action: ImHereActionType, callback?: (errorHandler: (error: Error) => void) => void): void => {\n dispatch({ type: action });\n if (callback) {\n callback(throwAsyncError);\n }\n };\n\n return (\n <>\n {state.displayButton && (\n \n {state.displaySpinner ? (\n \n \n \n ) : (\n translate('home:book-a-slot.order-placed.im-here')\n )}\n \n )}\n {state.displayImHereModal && (\n \n )}\n \n );\n});\n\nexport default ImHereButton;\n","import { useState, useCallback } from 'react';\n\nexport const useAsyncError = (): ((error: Error) => void) => {\n const [_, setError] = useState();\n\n return useCallback(\n error => {\n setError(() => {\n throw error;\n });\n },\n [setError],\n );\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport MainText from './main-text';\nimport { DELIVERY, COLLECTION, ON_DEMAND } from '#/constants/shopping-methods';\nimport styled from 'styled-components';\nimport { Heading } from '@ddsweb/heading';\nimport { spacing } from '@ddsweb/selectors';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { getLanguage, getTimezone } from '#/reducers/app';\nimport { SHOPPING_METHOD_PROP_TYPE } from '#/components/slots/prop-types';\nimport ImHereButton from '#/components/home/context-cards/im-here-button';\nimport { getImHereStatus, imHereStatusValue } from './im-here-button/selector';\nimport InteractiveStarRatingBasic from '#/components/star-rating/interactive-star-rating/starRatingBasic';\n\nconst StyledStarRatingContainer = styled.div`\n margin: ${spacing.sm} 0px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nconst mapStateToProps = (state, ownProps) => ({\n language: getLanguage(state),\n timezone: getTimezone(state),\n imHereStatus: getImHereStatus(\n state,\n ownProps.locationUuid,\n ownProps.orderNo,\n ownProps.shoppingMethod,\n ownProps.slot\n )\n});\n\n@connect(mapStateToProps)\n@helpers(['t', 'c'])\nclass OrderDueContextCard extends Component {\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n componentDidMount() {\n const { orderId } = this.props;\n const { start, end } = this.props.slot;\n\n const payload = {\n type: 'context card impression',\n value: 'active order',\n action: 'now',\n orderId,\n slotTime: `${start} - ${end}`\n };\n\n analyticsBus().emit('UIEventBasicEvent', payload);\n }\n\n getStarRatingProps() {\n const { c: config, t: translate } = this.props;\n const textRoot =\n 'home:book-a-slot.order-due.collection.imHere.star-rating-feedback';\n const legendText = translate(`${textRoot}.legend-text`);\n const legendAriaLabel = translate(`${textRoot}.legend-aria-label`);\n const refererUrl = config('opinionLab:refererUrls:imHereButton');\n\n return {\n legendAriaLabel,\n legendText,\n refererUrl,\n noRatingCopy: legendAriaLabel\n };\n }\n\n render() {\n const {\n slot,\n t: translate,\n shoppingMethod,\n address,\n guidePrice,\n c: config,\n orderNo,\n locationUuid,\n imHereStatus\n } = this.props;\n\n const titleKeys = {\n [ON_DEMAND]: 'home:book-a-slot.order-due.delivery.title',\n [DELIVERY]: 'home:book-a-slot.order-due.delivery.title',\n [COLLECTION]: 'home:book-a-slot.order-due.collection.title'\n };\n\n const showImHereButtonSurvey = config('showImHereButtonSurvey');\n const start = this.formatDate(slot.start);\n const end = this.formatDate(slot.end);\n\n let contextCardTitle = translate(titleKeys[shoppingMethod]);\n let starRatingProps = null;\n\n if (imHereStatus === imHereStatusValue.RECEIVED) {\n contextCardTitle = translate(\n 'home:book-a-slot.order-due.collection.received-title'\n );\n }\n\n if (showImHereButtonSurvey) {\n starRatingProps = this.getStarRatingProps();\n }\n\n return (\n \n
\n \n {contextCardTitle}\n \n \n {imHereStatus === imHereStatusValue.AVAILABLE && (\n \n )}\n {showImHereButtonSurvey &&\n imHereStatus === imHereStatusValue.RECEIVED && (\n \n \n {starRatingProps.legendText}\n \n \n \n )}\n
\n \n );\n }\n}\n\nOrderDueContextCard.propTypes = {\n address: PropTypes.object.isRequired,\n guidePrice: PropTypes.number.isRequired,\n locationUuid: PropTypes.string.isRequired,\n orderId: PropTypes.string.isRequired,\n orderNo: PropTypes.string.isRequired,\n shoppingMethod: SHOPPING_METHOD_PROP_TYPE.isRequired,\n slot: PropTypes.shape({\n end: PropTypes.string,\n start: PropTypes.string\n }).isRequired\n};\n\nexport default OrderDueContextCard;\n","export const getDistanceBetweenCoordinates = (\n driverGeoLocation,\n destinationGeoLocation\n) => {\n if (!driverGeoLocation || !destinationGeoLocation) return undefined;\n const { latitude: latitudeA, longitude: longitudeA } = driverGeoLocation;\n const { latitude: latitudeB, longitude: longitudeB } = destinationGeoLocation;\n let theta = longitudeA - longitudeB;\n let dist =\n Math.sin(deg2rad(latitudeA)) * Math.sin(deg2rad(latitudeB)) +\n Math.cos(deg2rad(latitudeA)) *\n Math.cos(deg2rad(latitudeB)) *\n Math.cos(deg2rad(theta));\n dist = Math.acos(dist);\n dist = rad2deg(dist);\n dist *= 60 * 1.1515;\n return dist;\n};\n\nfunction deg2rad(deg) {\n return (deg * Math.PI) / 180.0;\n}\n\nfunction rad2deg(rad) {\n return (rad * 180.0) / Math.PI;\n}\n","import analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { WISMO_PUNCTUALITY, SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { ShoppingMethod } from '#/constants/shopping-methods';\nimport {\n NOW,\n DELAY,\n AMEND_CUT_OFF,\n ACTIVE,\n ACTIVE_LATE,\n ACTIVE_NEXT_STOP,\n ACTIVE_ARRIVED,\n ACTIVE_ARRIVED_EARLY,\n ACTIVE_DELIVERED,\n NOT_AVAILABLE,\n CANCELLED,\n BOOK_ANOTHER_SLOT,\n WISMO_EVENT_TYPE,\n NOT_AVAILABLE_ERROR,\n} from '#/analytics/constants';\nimport { emitViewErrorDataEvent } from '#/analytics/types/error-data';\n\ntype TCurrentTrackingStatus = {\n status: string;\n punctuality?: string;\n stopsUntilDelivery?: number;\n};\n\nfunction getEventValueFromTrackingStatus(currentTrackingStatus: TCurrentTrackingStatus) {\n let value;\n const { status, punctuality, stopsUntilDelivery } = currentTrackingStatus;\n\n switch (status) {\n case SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER:\n value = AMEND_CUT_OFF;\n break;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED: {\n if (stopsUntilDelivery === 0) {\n value = ACTIVE_NEXT_STOP;\n } else {\n switch (punctuality) {\n case WISMO_PUNCTUALITY.ON_TIME:\n case WISMO_PUNCTUALITY.EARLY:\n value = ACTIVE;\n break;\n\n case WISMO_PUNCTUALITY.DELAYED:\n value = ACTIVE_LATE;\n break;\n\n default:\n value = ACTIVE;\n }\n }\n break;\n }\n\n case SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION: {\n switch (punctuality) {\n case WISMO_PUNCTUALITY.ON_TIME:\n case WISMO_PUNCTUALITY.DELAYED:\n value = ACTIVE_ARRIVED;\n break;\n\n case WISMO_PUNCTUALITY.EARLY:\n value = ACTIVE_ARRIVED_EARLY;\n break;\n\n default:\n value = ACTIVE_ARRIVED;\n }\n break;\n }\n\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED:\n value = ACTIVE_DELIVERED;\n break;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED:\n value = CANCELLED;\n break;\n\n default:\n value = NOT_AVAILABLE;\n }\n\n return value;\n}\n\nexport function emitWismoEvent(shoppingMethod: ShoppingMethod, status: TCurrentTrackingStatus, orderNo: string) {\n const trackingInfo = status;\n if (trackingInfo.status === SUPPORTED_WISMO_TRACKING_STATUS.NOT_AVAILABLE) {\n const text = NOT_AVAILABLE_ERROR;\n emitViewErrorDataEvent({ code: '', text });\n return;\n }\n\n const value = getEventValueFromTrackingStatus(status);\n const type = WISMO_EVENT_TYPE[shoppingMethod];\n basicEvent(analyticsBus, {\n type,\n value,\n action: NOW,\n orderNo,\n });\n}\n\nexport function emitStarRatingEvent(\n starRating: string,\n currentTrackingStatus: TCurrentTrackingStatus,\n shoppingMethod: ShoppingMethod,\n) {\n const value = `${getEventValueFromTrackingStatus(currentTrackingStatus)}:${starRating}`;\n const type = WISMO_EVENT_TYPE[shoppingMethod];\n basicEvent(analyticsBus, {\n type,\n value,\n action: NOW,\n });\n}\n\nexport function emitBookAnotherSlotEvent(shoppingMethod: ShoppingMethod) {\n const type = WISMO_EVENT_TYPE[shoppingMethod];\n basicEvent(analyticsBus, {\n type,\n value: BOOK_ANOTHER_SLOT,\n action: DELAY,\n });\n}\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport StarRating from '#/components/star-rating';\nimport { RATING_STARS } from '#/constants/order-context-card';\nimport { getActiveExperimentsFromWindow } from '#/lib/open-feedback-window';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { NOW } from '#/analytics/constants';\nimport { emitStarRatingEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { ShoppingMethod } from '#/constants/shopping-methods';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\n\ntype CurrentTrackingStatus = {\n punctuality: string;\n status: string;\n};\n\ntype Props = {\n shoppingMethod: ShoppingMethod;\n customerVariables: object;\n currentTrackingStatus: CurrentTrackingStatus;\n showWismoStepper: boolean;\n t: (key: string, options?: object) => string;\n};\n\nconst WismoStarRating = ({\n shoppingMethod,\n currentTrackingStatus,\n showWismoStepper,\n customerVariables,\n t: translate,\n}: Props): JSX.Element => {\n const ratingLabels: string[] = [\n translate('context-cards:star-rating-radio-1'),\n translate('context-cards:star-rating-radio-2'),\n translate('context-cards:star-rating-radio-3'),\n translate('context-cards:star-rating-radio-4'),\n translate('context-cards:star-rating-radio-5'),\n ];\n\n const legendText: string = isOnDemandShoppingMethod(shoppingMethod)\n ? translate('context-cards:feedback-stars-ondemand-legend')\n : translate('context-cards:feedback-stars-legend');\n\n const onClick = (star: string): void => {\n const customerVariablesWithStar = {\n ...customerVariables,\n overall_rating: star,\n };\n\n const value = currentTrackingStatus?.punctuality\n ? `wismo ${currentTrackingStatus.punctuality.toLowerCase()}`\n : 'wismo';\n\n if (showWismoStepper) {\n const trackingInfo = isOnDemandShoppingMethod(shoppingMethod)\n ? { status: currentTrackingStatus?.status }\n : currentTrackingStatus;\n\n emitStarRatingEvent(star, trackingInfo, shoppingMethod);\n } else {\n basicEvent(analyticsBus, {\n type: `${star} star`,\n value,\n action: NOW,\n });\n }\n\n window.OOo.oo_launchStarRating({\n ...customerVariablesWithStar,\n ...getActiveExperimentsFromWindow(),\n });\n };\n\n return (\n \n );\n};\n\nexport default helpers(['t'])(WismoStarRating);\n","export const RATING_STARS = 'rating';\n","import styled, { css } from 'styled-components';\nimport DeliverySlotTime from '#/components/home/context-cards/delivery-slot-time';\n\nexport const SlotTimeInline = styled(DeliverySlotTime)`\n && span {\n font: inherit;\n text-transform: lowercase;\n ${(props: { paymentIssue: boolean }): string | void => {\n if (props.paymentIssue) {\n return css`\n font-weight: bold;\n `;\n }\n }};\n }\n`;\nSlotTimeInline.displayName = 'WismoStepperSlotTimeInline';\n","import React, { Component, useContext } from 'react';\n\nconst OrderContext = React.createContext();\nexport const useOrderContext = () => useContext(OrderContext);\n\nclass OrderContextProvider extends Component {\n state = {\n order: this.props.order\n };\n\n updateOrderContext = newOrder => {\n this.setState({ order: newOrder });\n };\n\n render() {\n const { children } = this.props;\n const { order } = this.state;\n\n return (\n \n {children}\n \n );\n }\n}\n\nexport { OrderContextProvider, OrderContext };\n","import styled from 'styled-components';\nimport { Heading } from '@ddsweb/heading';\nimport { Text } from '@ddsweb/text';\nimport { InLineMessaging } from '@ddsweb/messaging';\nimport { visuallyHide } from '@ddsweb/foundation';\nimport { spacing, fontSize, colors } from '@ddsweb/selectors';\n\nexport const Wrapper = styled(Heading)`\n && {\n margin-bottom: ${(props: { retryEnabledCollection: boolean }): string =>\n props.retryEnabledCollection ? ((spacing.sm as unknown) as string) : ((spacing.xs as unknown) as string)};\n }\n`;\nWrapper.displayName = 'WismoStepperDeliveryHeadingWrapper';\n\nexport const SlotTime = styled.span`\n font-weight: normal;\n`;\nSlotTime.displayName = 'WismoStepperSlotTime';\n\nexport const AddressName = styled.span`\n font-weight: normal;\n`;\nAddressName.displayName = 'WismoStepperAddressName';\n\nexport const Postcode = styled.span`\n font-weight: normal;\n text-transform: uppercase;\n`;\nPostcode.displayName = 'WismoStepperPostcode';\n\nexport const VisuallyHide = styled.span`\n ${visuallyHide};\n`;\n\nexport const Messaging = styled(InLineMessaging)`\n margin-bottom: ${spacing.md};\n`;\n\nexport const MessagingText = styled(Text)`\n font-size: ${fontSize.xx};\n color: ${colors.text};\n`;\n","import React from 'react';\nimport { compose } from 'react-recompose';\nimport { Moment } from 'moment';\nimport { ConnectedProps } from 'react-redux';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { getWismoOrderAddressName } from '#/selectors/order-list-details';\nimport { SlotTimeInline } from '#/components/home/context-cards/wismo/shared/styled';\nimport { SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport { useOrderContext } from '#/context/order-context-provider';\nimport { COLLECTION } from '#/constants/shopping-methods';\nimport { Wrapper, SlotTime, AddressName, Postcode, VisuallyHide, Messaging, MessagingText } from './styled';\n\nconst mapStateToProps = (state: Store) => ({\n wismoAddressName: getWismoOrderAddressName(state),\n});\n\nconst connector = connect(mapStateToProps);\n\ntype THelpersProps = {\n t: (key: string, options?: object) => string;\n};\n\ntype TOwnProps = {\n deliveryAddressName?: string;\n ccAddressName?: string;\n postcode?: string;\n slotStart?: Moment;\n slotEnd?: Moment;\n messaging: string;\n messageType: string;\n};\n\ntype TProps = TOwnProps & THelpersProps & ConnectedProps;\n\nexport const DeliveryHeading: React.FC = ({\n t: translate,\n wismoAddressName,\n ccAddressName,\n deliveryAddressName,\n postcode,\n slotStart,\n slotEnd,\n messaging,\n messageType,\n}): JSX.Element => {\n const { order } = useOrderContext();\n const retryEnabled = order.payment?.retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED;\n const shoppingMethod = order.shoppingMethod;\n const retryEnabledCollection = shoppingMethod === COLLECTION && retryEnabled;\n const headingLevel = retryEnabledCollection ? '4' : '5';\n const addressName = deliveryAddressName || wismoAddressName || ccAddressName;\n const message = messaging ? (\n \n {messaging}\n \n ) : null;\n\n const slotTimeJsx = (): JSX.Element => {\n return (\n \n {`${translate('context-cards:wismo-stepper-today')}, `}\n \n \n );\n };\n\n const postcodeJsx = (): JSX.Element => {\n return (\n <>\n {translate('common:to')} \n {postcode}\n \n );\n };\n\n let deliveryHeading;\n\n if (slotStart) {\n if (postcode) {\n deliveryHeading = (\n <>\n {slotTimeJsx()}\n {', '}\n {postcodeJsx()}\n \n );\n } else {\n deliveryHeading = slotTimeJsx();\n }\n } else if (postcode) {\n deliveryHeading = postcodeJsx();\n } else {\n deliveryHeading = null;\n }\n\n return (\n \n {message}\n {retryEnabledCollection ? (\n translate('home:order-collection')\n ) : (\n <>\n {`${translate(`context-cards:${order.shoppingMethod}-wismo-stepper.title`)} `}\n <>\n {`${addressName}, `}\n {deliveryHeading}\n \n \n )}\n \n );\n};\n\nconst enhance: Function = compose(helpers(['t']), connector);\n\nexport default enhance(DeliveryHeading);\n","import styled, { css } from 'styled-components';\nimport { Text } from '@ddsweb/text';\nimport Link from '@ddsweb/link';\nimport { fontSize, spacing } from '@ddsweb/selectors';\n\nexport const PrimaryDeliveryStatus = styled(Text)`\n && {\n margin-bottom: 6px; \n font-weight: bold;\n ${(props: { paymentIssue: boolean }): void =>\n props.paymentIssue &&\n css`\n margin-bottom: ${spacing.xs};\n font-size: ${fontSize.md};\n `}\n`;\n\nPrimaryDeliveryStatus.displayName = 'WismoStepperPrimaryDeliveryStatus';\n\nexport const SecondaryDeliveryStatus = styled(Text)`\n margin-bottom: ${(props: { paymentIssue: boolean }): string =>\n props.paymentIssue\n ? css`\n ${spacing.sm};\n `\n : css`\n ${spacing.xs};\n `};\n`;\nSecondaryDeliveryStatus.displayName = 'WismoStepperSecondaryDeliveryStatus';\n\nexport const ThirdDeliveryStatus = styled(Link)`\n font-weight: bold;\n font-size: ${fontSize.xs};\n`;\nThirdDeliveryStatus.displayName = 'WismoStepperThirdDeliveryStatus';\n","import { SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport React from 'react';\nimport { PrimaryDeliveryStatus, SecondaryDeliveryStatus, ThirdDeliveryStatus } from './styled';\n\ntype Props = {\n primaryDeliveryStatus: string | JSX.Element;\n secondaryDeliveryStatus?: string | JSX.Element;\n thirdDeliveryStatus?: string | JSX.Element;\n paymentIssue?: SUPPORTED_PAYMENT_RETRY_OPTION;\n};\n\nconst DeliveryStatus: React.FC = ({\n primaryDeliveryStatus,\n secondaryDeliveryStatus,\n thirdDeliveryStatus,\n paymentIssue,\n}: Props) => {\n return (\n <>\n \n {primaryDeliveryStatus}\n \n {secondaryDeliveryStatus && (\n \n {secondaryDeliveryStatus}\n \n )}\n {thirdDeliveryStatus && {thirdDeliveryStatus}}\n \n );\n};\n\nexport default DeliveryStatus;\n","import styled from 'styled-components';\nimport Link from '@ddsweb/link';\nimport { spacing } from '@ddsweb/selectors';\n\nexport const SlotLink = styled(Link)`\n && {\n display: block;\n margin-top: ${spacing.sm};\n }\n\n && .beans-link__icon-container {\n vertical-align: bottom;\n }\n`;\nSlotLink.displayName = 'WismoStepperSlotLink';\n","import React from 'react';\nimport { compose } from 'react-recompose';\nimport { createSPALink } from '@ddsweb/helpers';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { getLanguageLink } from '#/reducers/app';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport Link from '#/components/link-check-spa';\nimport { SlotLink } from './styled';\nimport { emitBookAnotherSlotEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { ShoppingMethod } from '#/constants/shopping-methods';\n\ntype TProps = {\n t: (key: string, options?: object) => string;\n bookSlotPath: string;\n shoppingMethod: ShoppingMethod;\n};\n\nexport const BookSlotLink: React.FC = ({ t: translate, bookSlotPath, shoppingMethod }) => {\n const bookSlotText = translate('common:pages.book-another-slot');\n\n const SpaLink = createSPALink(Link, props => ({\n onClick: props.onClick,\n to: props.href,\n }));\n\n return (\n emitBookAnotherSlotEvent(shoppingMethod)}\n >\n {bookSlotText}\n \n );\n};\n\nconst mapStateToProps = (state, { f: feature }) => ({\n bookSlotPath: getLanguageLink(state, getDefaultSlotsPath(feature)(state)),\n});\n\nconst enhance: Function = compose(helpers(['t', 'f']), connect(mapStateToProps));\n\nexport default enhance(BookSlotLink);\n","import React from 'react';\nimport Map from '#/components/map';\nimport styled from 'styled-components';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\n\nconst Container = styled.div`\n width: 100%;\n height: 100%;\n & .map__wrapper {\n border: none;\n border-radius: unset;\n }\n`;\n\nconst DriverOnMap = ({\n homeGeoLocation,\n driverGeoLocation,\n shoppingMethod\n}) => {\n const onReadyHandler = ({ target }) => {\n target.mapAttributes.setBestView(target.map, [\n homeGeoLocation,\n driverGeoLocation\n ]);\n };\n return (\n \n \n \n );\n};\n\nexport default DriverOnMap;\n","import styled, { css } from 'styled-components';\nimport { Heading } from '@ddsweb/heading';\nimport { spacing, colors, fontSize } from '@ddsweb/selectors';\nimport { media } from '@ddsweb/foundation';\n\nconst stepMarkerWidth = 25;\nconst stepColor = props => (props.isComplete ? colors.success : colors.lines);\nconst mobileStepWidth = props => `${100 / (props.noOfSteps - 1)}%`;\n\nexport const Wrapper = styled.ol.attrs(props => ({\n role: 'progressbar',\n 'aria-valuemin': 1,\n 'aria-valuenow': props.currentStep,\n 'aria-valuemax': props.noOfSteps,\n}))`\n display: flex;\n list-style-type: none;\n width: 100%;\n max-width: 1200px;\n margin: 0 auto;\n`;\n\nconst stepLineStyle = css`\n content: '';\n position: absolute;\n /* Subtracting half the stepMarkerWidth ensures that the line starts from the middle of the \n circular step marker */\n width: calc(100% - ${stepMarkerWidth / 2}px);\n top: ${stepMarkerWidth / 2}px;\n right: 50%;\n height: 2px;\n background: ${stepColor};\n`;\n\nconst stepFullWidthStyles = css`\n /* On mobile we want the markers to be evenly spaced out, with the first and last marker\n being adjacent to the very left and very right respectively (see diagram 1).\n We also need the step text of the first and last step to be aligned to the left and right\n (rather than the center under the marker) respectively. This is what the code below does.\n \n Diagram 1 (Mobile)\n |o----o----o---o| |o---o----o----o| |o---o---o---o|\n Step1 Step2 step4\n\n Diagram 2 (Desktop)\n |--o--o--o--o--|\n Step1\n */\n\n :not(:first-of-type):not(:last-of-type) {\n width: ${mobileStepWidth};\n }\n\n :first-of-type {\n align-items: flex-start;\n }\n\n :last-of-type {\n align-items: flex-end;\n }\n\n :first-of-type,\n :last-of-type {\n /* \n The first and last step should be half the width of the other steps\n First step : o--\n Last step : --o\n Other steps : --o--\n */\n width: calc(${mobileStepWidth} / 2);\n }\n\n :last-of-type {\n ::before {\n ${stepLineStyle}\n /* The last step width is half the other steps. Therefore for the step line\n to reach the second last step we need to use double the step width */\n width: calc(200% - ${stepMarkerWidth / 2}px);\n /* This ensures the line starts from the middle of the circular marker */\n right: ${stepMarkerWidth / 2}px;\n }\n }\n`;\n\nexport const Step = styled.div`\n display: flex;\n flex-direction: column;\n width: ${props => `${100 / props.noOfSteps}%`};\n position: relative;\n align-items: center;\n /* This creates a progress line to the left of the marker, except for the first marker */\n :not(:first-of-type) {\n ::before {\n ${stepLineStyle}\n }\n }\n ${({ fullWidth }) => fullWidth && stepFullWidthStyles};\n\n ${media.belowTabletLarge`\n ${stepFullWidthStyles}\n `}\n`;\n\nexport const StepMarker = styled.li`\n display: flex;\n justify-content: center;\n align-items: center;\n background: ${props => (props.isComplete ? colors.success : colors.background)};\n border: 1px solid ${stepColor};\n width: ${stepMarkerWidth}px;\n height: ${stepMarkerWidth}px;\n border-radius: ${stepMarkerWidth / 2}px;\n /* This is required to make sure the marker appears on top of the progress line */\n z-index: 1;\n`;\n\nexport const StepText = styled(Heading)`\n && {\n color: ${props => (props.paymentIssue ? colors.text : props.isComplete ? colors.base : colors.text)};\n }\n font-size: ${props => props.paymentIssue && fontSize.xx};\n white-space: nowrap;\n padding-top: ${spacing.xs};\n\n margin-right: ${({ stepNo, noOfSteps }) => (stepNo === noOfSteps ? '0' : spacing.sm)};\n\n margin-left: ${({ stepNo }) => (stepNo === 1 ? '0' : spacing.sm)};\n\n text-align: center;\n\n /* The 'white-space' style below ensures the text can overflow between steps instead of creating two lines.\n This is important for mobile-like designs for this experiment */\n\n ${media.belowTabletLarge`\n display: ${props => props.isCurrentStep || 'none'};\n margin-right: 0;\n margin-left: 0;\n text-align: initial;\n `}\n`;\n","import React from 'react';\nimport Icon from '@ddsweb/icon';\nimport { StepErrorIcon } from '@ddsweb/icon';\nimport helpers from '#/lib/decorators/helpers';\nimport { Wrapper, Step, StepMarker, StepText } from './styled';\n\ntype Props = {\n steps: { title: string }[];\n currentStep: number;\n t: (key: string, options?: object) => string;\n fullWidth?: boolean;\n paymentIssue?: boolean;\n};\n\nexport const ProgressBar = ({ steps, currentStep, t: translate, fullWidth, paymentIssue = false }: Props) => {\n return (\n \n {steps.map((step, index) => {\n const stepNo = index + 1;\n const isComplete = stepNo <= currentStep && !paymentIssue;\n const isCurrentStep = stepNo === currentStep;\n\n const accessibilityText = isComplete\n ? 'context-cards:wismo-stepper-step-completed'\n : 'context-cards:wismo-stepper-step-not-completed';\n\n return (\n \n {translate(accessibilityText)}\n \n {paymentIssue && stepNo == 1 ? : }\n \n \n {translate(step.title)}\n \n \n );\n })}\n \n );\n};\n\nexport default helpers(['t'])(ProgressBar);\n","import { clientGraphqlPost } from './client-graphql';\nimport uuidv4 from 'uuid/v4';\nimport { logApmError } from '#/lib/apm';\nimport { GET_ORDER_PAYMENT_RETRY_OPTION } from '#/constants/request-names';\n\nconst GET_ORDER_PAYMENT_RETRY_DETAILS = `\n query GetOrder($orderId: ID) {\n order(orderId: $orderId) {\n fulfilment {\n payments {\n ... on CardPaymentDetailsType {\n retryOption\n }\n }\n }\n }\n }\n `;\n\nexport default async orderPaymentRequestData => {\n const { atrc, apiKey, region, endpoint, orderId } = orderPaymentRequestData;\n const uuid = uuidv4();\n const traceId = `${atrc}:${uuid}`;\n const context = { 'x-apikey': apiKey, traceId, region };\n const queryVariables = {\n orderId: orderId\n };\n let response = null;\n\n try {\n const requestName = GET_ORDER_PAYMENT_RETRY_OPTION;\n\n response = await clientGraphqlPost(\n endpoint,\n context,\n GET_ORDER_PAYMENT_RETRY_DETAILS,\n queryVariables,\n atrc,\n requestName,\n traceId\n );\n\n const { data } = await response;\n const orderDetails = data.order;\n return {\n retryOption: orderDetails.fulfilment.payments[0]?.retryOption\n };\n } catch (error) {\n const errorObj = error?.parsedBody;\n const statusCode = error?.status || error?.errors?.[0]?.status || 'unknown';\n const errorMessage =\n error?.message ||\n errorObj?.message ||\n errorObj?.errors?.[0]?.message ||\n 'unknown';\n const message = `Failed Payments Error - Failed to retrieve retryOption. Message: ${errorMessage}, Status: ${statusCode}`;\n logApmError(new Error(message), { traceId });\n return null;\n }\n};\n","import React, { useRef } from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport SafeForm from '#/components/shared/safe-form';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { getLanguage, getApigeeMangoApiKey, getApigeeMangoEndpoint, getAppRegion } from '#/reducers/app';\nimport { getAtrc } from '#/reducers/user';\nimport { useOrderContext } from '#/context/order-context-provider';\nimport getOrderPaymentRetryDetails from '#/lib/requests/get-order-payment-retry-details';\nimport { SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport Button from '@ddsweb/button';\n\nconst PAYMENT_RETRY = 'PAYMENT_RETRY';\nconst HOME = 'HOME';\n\nconst mapStateToProps = (state: Store): object => ({\n locale: getLanguage(state),\n endpoint: getApigeeMangoEndpoint(state),\n apiKey: getApigeeMangoApiKey(state),\n region: getAppRegion(state),\n atrc: getAtrc(state),\n});\n\ntype TOwnProps = {\n t: (key: string, options?: { [key: string]: string }) => string;\n className: string;\n loading: boolean;\n locale: string;\n paymentOptionsURL: string;\n endpoint: string;\n apiKey: string;\n region: string;\n atrc: string;\n};\n\ntype TProps = TOwnProps & ReturnType;\n\nexport function UpdatePaymentDetailsButton({\n endpoint,\n apiKey,\n region,\n atrc,\n locale,\n className,\n t: translate,\n}: TProps): JSX.Element {\n const { order, setOrder } = useOrderContext();\n const [isSubmitting, setIsSubmitting] = React.useState(false);\n\n const formId = `update-payment-button-form-${order.orderNo}`;\n const myRef = useRef(null);\n const submitter = ;\n const updatePaymentDetailsForm = (\n \n {submitter}\n \n \n \n \n \n \n );\n\n async function handleClick(): Promise {\n setIsSubmitting(true);\n const deliveryTrackingRequestData = {\n apiKey: apiKey,\n region: region,\n atrc: atrc,\n endpoint: endpoint,\n orderId: order.id,\n };\n const response = await getOrderPaymentRetryDetails(deliveryTrackingRequestData);\n const paymentRetryDetails = response;\n const retryEnabled = paymentRetryDetails?.retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED;\n let updatedOrder;\n\n if (retryEnabled) {\n // proceed to submit the form & execute the post request\n updatedOrder = {\n ...order,\n updatePaymentError: false,\n };\n setOrder(updatedOrder);\n myRef.current?.click();\n } else if (response === null) {\n // re-renders the context card with an in-page error message\n updatedOrder = {\n ...order,\n updatePaymentError: true,\n };\n setIsSubmitting(false);\n setOrder(updatedOrder);\n } else {\n // re-renders the context card based on the newly updated retryOption\n updatedOrder = {\n ...order,\n payment: paymentRetryDetails !== null ? paymentRetryDetails : { ...order.payment },\n };\n setIsSubmitting(false);\n setOrder(updatedOrder);\n }\n }\n\n return (\n <>\n \n {updatePaymentDetailsForm}\n \n );\n}\n\nexport default connect(mapStateToProps)(helpers(['t'])(UpdatePaymentDetailsButton));\n","import { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\n\nfunction getThreeSteps(shoppingMethod) {\n return [\n {\n title: `context-cards:${shoppingMethod}-wismo-stepper.steps.delivery-scheduled.progress-bar`\n },\n {\n title: `context-cards:${shoppingMethod}-wismo-stepper.steps.arrived-at-customer-location.progress-bar`\n },\n {\n title: `context-cards:${shoppingMethod}-wismo-stepper.steps.delivered.progress-bar`\n }\n ];\n}\n\nexport const getSteps = (\n display3Steps = false,\n shoppingMethod,\n paymentIssue = false\n) => {\n const steps = getThreeSteps(shoppingMethod);\n if (!display3Steps) {\n if (paymentIssue) {\n steps.unshift({\n title: `context-cards:${shoppingMethod}-wismo-stepper.steps.payment-issue.progress-bar`\n });\n } else {\n steps.unshift({\n title: `context-cards:${shoppingMethod}-wismo-stepper.steps.preparing-order.progress-bar`\n });\n }\n }\n return steps;\n};\n\nexport const mapStatusToStepNumber = (\n status,\n display3Steps = false,\n paymentIssue = false\n) => {\n if (paymentIssue) {\n return 1;\n }\n switch (status) {\n case SUPPORTED_WISMO_TRACKING_STATUS.NOT_AVAILABLE:\n return 1;\n case SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER:\n return display3Steps ? null : 1;\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED:\n return display3Steps ? 1 : 2;\n case SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION:\n return display3Steps ? 2 : 3;\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED:\n return display3Steps ? 3 : 4;\n default:\n return null;\n }\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport styled, { css } from 'styled-components';\nimport { Panel, BackgroundPanel, media } from '@ddsweb/foundation';\nimport { base, spacing, colors, fontSize } from '@ddsweb/selectors';\nimport { SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport { COLLECTION, DELIVERY } from '#/constants/shopping-methods';\n\nfunction checkForRetryEnabled(retryOption: SUPPORTED_PAYMENT_RETRY_OPTION) {\n if (retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED) {\n return true;\n }\n return false;\n}\n\nexport const Layout = styled(Panel)`\n border-radius: 0;\n && {\n border: 0;\n padding: ${spacing.sm} ${spacing.sm} ${spacing.md};\n }\n\n & .payment-failed-error-message {\n color: ${colors.text};\n font-size: ${fontSize.xs};\n }\n & .payment-failed-inline-message {\n margin-bottom: ${spacing.sm};\n }\n`;\nLayout.displayName = 'WismoStepperLayout';\n\nexport const DeliveryStatusLayout = styled(BackgroundPanel)`\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-areas:\n 'scooter status'\n 'progress progress';\n\n ${(props: { paymentIssue: SUPPORTED_PAYMENT_RETRY_OPTION | null }): string | void =>\n props.paymentIssue\n ? css`\n padding: ${spacing.md} ${spacing.xs};\n ${media.aboveMobileLarge`\n padding: ${spacing.md} ${spacing.xl};\n & .vehicle-icon {\n align-self: center;\n };\n `};\n `\n : css`\n padding: ${spacing.xl} ${spacing.sm};\n ${media.aboveTabletLarge`\n padding: ${spacing.xxxl} ${spacing.xl};\n `};\n `};\n\n border: ${base.outline};\n`;\nDeliveryStatusLayout.displayName = 'WismoStepperDeliveryStatusLayout';\n\nconst WrapperWithMapStyles = css`\n & [aria-current='false'] {\n display: none;\n }\n\n & [aria-current='step'] {\n white-space: nowrap;\n }\n`;\n\nconst WrapperWithoutMapStyles = css`\n & [aria-current='false'] {\n display: none;\n ${media.aboveDesktop`\n display: block;\n `}\n }\n`;\n\nexport const Wrapper = styled.div`\n & .context-card-wismo__star-rating {\n grid-area: rating;\n }\n\n & .map {\n grid-area: map;\n height: 200px;\n ${media.aboveDesktop`\n height: auto\n `}\n }\n\n & .stepper {\n grid-area: stepper;\n }\n\n & .scooter,\n .truck {\n grid-area: scooter;\n ${(props: { paymentIssue: boolean }): string =>\n props.paymentIssue &&\n css`\n margin-right: 0px;\n `};\n }\n\n & .delivery-status {\n grid-area: status;\n }\n\n & ol[role='progressbar'] {\n grid-area: progress;\n margin-top: ${(props: { paymentIssue: boolean }): string =>\n props.paymentIssue\n ? css`\n ${spacing.md};\n `\n : css`\n ${spacing.lg};\n `};\n ${media.aboveTabletLarge`\n margin-top: ${spacing.md};\n `}\n }\n\n ${media.aboveDesktop`\n ${({ showMap }: { showMap: boolean }): unknown =>\n showMap &&\n css`\n display: grid;\n grid-template-columns: auto 50%;\n grid-auto-flow: column;\n column-gap: 14px;\n grid-template-areas: 'stepper map' 'rating map';\n .vehicle-icon {\n display: none;\n }\n `}\n`}\n ${props => (props.showMap ? WrapperWithMapStyles : WrapperWithoutMapStyles)};\n`;\n\nexport const PaymentIssueMainBody = styled.div`\n display: block;\n margin-left: ${spacing.xs};\n ${(props: { paymentIssue: SUPPORTED_PAYMENT_RETRY_OPTION | null }): string | void => {\n if (props.paymentIssue) {\n if (checkForRetryEnabled(props.paymentIssue)) {\n return css`\n ${media.aboveTabletLarge`\n margin-left: ${spacing.lg};\n `}\n\n & .delivery-status {\n padding-top: ${spacing.sm};\n ${media.aboveTabletLarge`\n padding-top: ${spacing.xxxl};\n `}\n }\n `;\n } else {\n return css`\n ${media.aboveTabletLarge`\n margin-left: ${spacing.md};\n `}\n `;\n }\n }\n }};\n\n & .place-order-again-standalone {\n font-size: ${fontSize.xs};\n }\n`;\n\nexport const PaymentIssueErrorLayout = styled.div`\n & .update-payment-form {\n display: none;\n }\n ${(props: { shoppingMethod: string }): string | void => {\n if (props.shoppingMethod === DELIVERY) {\n return css`\n padding-top: ${spacing.md};\n padding-bottom: ${spacing.md};\n display: grid;\n white-space: wrap;\n grid-template-areas:\n 'a a'\n 'b b';\n row-gap: ${spacing.md};\n column-gap: ${spacing.md};\n align-items: start;\n\n ${media.aboveMobileLarge`\n grid-template-areas: \n \"a b\"\n \"a b\";\n `};\n\n ${media.aboveTablet`\n grid-template-areas: \n \"a a\"\n \"b b\";\n `};\n\n ${media.aboveTabletLarge`\n grid-template-areas: \n \"a b\"\n \"a b\";\n `};\n\n & .payment-issue-inline-message {\n grid-area: a;\n }\n\n & .payment-issue-error-message {\n color: ${colors.text};\n }\n\n & .update-payment-button {\n grid-area: b;\n height: auto;\n width: auto;\n }\n `;\n } else {\n return css`\n display: flex;\n flex-direction: column;\n\n & .payment-issue-inline-message {\n margin-top: ${spacing.sm};\n }\n\n & .update-payment-button {\n margin-top: ${spacing.sm};\n }\n\n ${media.aboveMobileLarge`\n & .update-payment-button {\n width: fit-content;\n }\n `};\n `;\n }\n }})}\n`;\n\nexport const DeliveryHeadingWrapper = styled.div`\n ${(props: { shoppingMethod: string }): string | void => {\n if (props.shoppingMethod === COLLECTION) {\n return css`\n margin-top: ${spacing.xx};\n `;\n }\n }}\n`;\n\nPaymentIssueErrorLayout.displayName = 'WismoStepperPaymentIssueErrorLayout';\n","import React from 'react';\nimport { ConnectedProps } from 'react-redux';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { getCurrency, getLanguageLink } from '#/reducers/app';\nimport DriverOnMap from '.';\nimport ProgressBar from '../progress-bar';\nimport UpdatePaymentDetailsButton from '../update-payment-details-button/index';\nimport { useOrderContext } from '#/context/order-context-provider';\nimport { ON_DEMAND, DELIVERY, COLLECTION } from '#/constants/shopping-methods';\nimport { getSteps, mapStatusToStepNumber } from './utils';\nimport { CANCELLED, SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport { InLineMessaging } from '@ddsweb/messaging';\nimport { Text } from '@ddsweb/text';\nimport { StandaloneLink } from '@ddsweb/link';\nimport {\n Layout,\n DeliveryStatusLayout,\n Wrapper,\n PaymentIssueMainBody,\n PaymentIssueErrorLayout,\n DeliveryHeadingWrapper,\n} from './styled';\nimport { SlotTimeInline } from '../styled';\nimport { TCurrency } from '#/custom-typings/redux-store/app.defs';\n\nconst mapStateToProps = (state: Store): object => {\n return {\n ordersURL: getLanguageLink(state, `/orders/`),\n currency: getCurrency(state),\n };\n};\n\nconst connector = connect(mapStateToProps);\n\ntype TOwnProps = {\n t: (key: string, options?: object) => string;\n deliveryHeading: JSX.Element;\n deliveryStatus?: JSX.Element;\n starRating?: React.Component;\n showMap?: boolean;\n display3Steps?: boolean;\n ordersURL: string;\n currency: TCurrency;\n};\n\ntype TProps = TOwnProps & ConnectedProps;\n\nexport const DriverOnMapLayout: React.FC = ({\n t: translate,\n ordersURL,\n deliveryHeading,\n showMap,\n display3Steps,\n deliveryStatus,\n starRating,\n currency,\n}) => {\n const { order } = useOrderContext();\n const isCancelled = order.status === CANCELLED;\n const shoppingMethod = order.shoppingMethod;\n const status = order.wismoSlot?.currentTrackingStatus?.status;\n const driverGeoLocation = order.wismoSlot?.currentTrackingStatus?.geoLocation;\n const homeGeoLocation = order.wismoSlot?.destination?.geoLocation;\n const totalPrice = order.payment?.amount;\n const retryOption = order.payment?.retryOption;\n const retryEnabled = retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED;\n const retryExpired = retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.EXPIRED;\n const paymentIssue = retryEnabled || retryExpired;\n const steps = getSteps(display3Steps, order.shoppingMethod, paymentIssue);\n const currentStep = mapStatusToStepNumber(status, display3Steps, paymentIssue);\n const progressBar = currentStep && (\n \n );\n const hideStepper = retryEnabled && shoppingMethod === COLLECTION;\n\n const renderPaymentIssueMainBody = (): JSX.Element => {\n return (\n \n
\n
{deliveryStatus}
\n
\n {retryExpired && (\n \n {translate('context-cards:wismo-context-card-place-order-again')}\n \n )}\n
\n );\n };\n\n const renderPaymentIssueRetryEnabled = (): JSX.Element => {\n return (\n
\n \n {shoppingMethod === COLLECTION && renderAddressTotalDetails()}\n \n \n {translate('context-cards:wismo-context-card-payment-issue-error-message')}\n \n \n \n \n
\n );\n };\n\n const renderAddressTotalDetails = (): JSX.Element => {\n return (\n
\n {order.slotStart?.format('ddd D MMM')}\n {': '}\n \n
{`${order.address?.name}, ${order.address?.postcode}`}
\n
\n {translate('home:total')}\n \n {currency.symbol}\n {totalPrice}\n \n
\n
\n );\n };\n\n const renderVehicle = (): JSX.Element => {\n return (\n \n );\n };\n\n return (\n \n {retryExpired && (\n \n \n {shoppingMethod === DELIVERY\n ? translate('context-cards:wismo-context-card-payment-failed-error-message')\n : translate('context-cards:wismo-context-card-payment-failed-error-message-cc')}\n \n \n )}\n {deliveryHeading}\n \n {!hideStepper && (\n
\n \n {renderVehicle()}\n\n {paymentIssue && shoppingMethod !== ON_DEMAND ? (\n renderPaymentIssueMainBody()\n ) : (\n <>\n
{deliveryStatus}
\n {!isCancelled && progressBar}\n \n )}\n {retryEnabled && progressBar}\n \n
\n )}\n\n {showMap && homeGeoLocation && driverGeoLocation && (\n <>\n
\n \n
\n \n )}\n {retryEnabled && shoppingMethod !== ON_DEMAND &&
{renderPaymentIssueRetryEnabled()}
}\n\n {starRating && (\n
\n {starRating}\n
\n )}\n
\n
\n );\n};\n\nexport default connect(mapStateToProps)(helpers(['t'])(DriverOnMapLayout));\n","import React from 'react';\nimport { Moment } from 'moment';\nimport { compose } from 'react-recompose';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport BookSlotLink from '#/components/home/context-cards/wismo/shared/book-slot-link';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport { useOrderContext } from '#/context/order-context-provider';\nimport { getIsAmongSlotBookingVariants } from '#/experiments/oop-1978/selectors';\n\ntype TProps = {\n t: (key: string, options?: object) => string;\n orderNo: string;\n postcode: string;\n slotStart: Moment;\n slotEnd: Moment;\n starRating: React.Component;\n display3Steps: boolean;\n};\ntype TOwnState = {\n showBookASlotButton: boolean;\n};\n\nconst mapStateToProps = (state: Store): TOwnState => ({\n showBookASlotButton: !getIsAmongSlotBookingVariants(state),\n});\n\ntype TDeliveredProps = TOwnState & TProps;\n\nexport const Delivered: React.FC = ({\n t: translate,\n starRating,\n display3Steps,\n showBookASlotButton,\n}: TDeliveredProps) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const postcode = order.address?.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n const deliveryHeading = ;\n\n const primaryDeliveryStatus = translate('context-cards:wismo-stepper-delivered');\n\n const secondaryDeliveryStatus = (\n <>\n {translate('context-cards:wismo-stepper-thank-you')}\n {showBookASlotButton && }\n \n );\n\n const deliveryStatus = (\n \n );\n\n React.useEffect(() => emitWismoEvent(DELIVERY, { status: SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED }, orderNo), []);\n\n return (\n \n );\n};\n\nconst enhance: Function = compose(connect(mapStateToProps), helpers(['t']));\n\nexport default enhance(Delivered);\n","import styled from 'styled-components';\nimport Icon from '@ddsweb/icon';\nimport { colors } from '@ddsweb/selectors';\nimport { WISMO_PUNCTUALITY } from '#/constants/order-statuses';\n\nexport const PunctualityIcon = styled(Icon)`\n margin-right: 6px;\n\n &&& circle {\n fill: ${props =>\n props.punctuality === WISMO_PUNCTUALITY.DELAYED && props.stops > 0 ? colors.warning : colors.info};\n }\n`;\nPunctualityIcon.displayName = 'HomeDeliveryWismoStepperPunctualityIcon';\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport { SlotTimeInline } from '#/components/home/context-cards/wismo/shared/styled';\nimport { WISMO_PUNCTUALITY, SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport { PunctualityIcon } from './styled';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport { useOrderContext } from '#/context/order-context-provider';\n\ntype Props = {\n t: (key: string, options?: object) => string;\n showMap?: boolean;\n homeGeoLocation?: {\n latitude?: string;\n longitude?: string;\n };\n driverGeoLocation?: {\n latitude?: string;\n longitude?: string;\n };\n starRating: React.Component;\n display3Steps: boolean;\n};\n\nexport const DeliveryScheduled: React.FC = ({ t: translate, showMap, starRating, display3Steps }: Props) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const stops = order.wismoSlot?.currentTrackingStatus?.stopsUntilDelivery;\n const punctuality = order.wismoSlot?.currentTrackingStatus?.punctuality;\n const deliveryStart = order.deliveryStart;\n const deliveryEnd = order.deliveryEnd;\n const postcode = order.address.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n const deliveryHeading = ;\n\n const primaryDeliveryStatus = (\n <>\n \n {stops > 0\n ? translate('context-cards:wismo-stepper-stop', { smart_count: stops })\n : translate('context-cards:wismo-stepper-next-stop')}\n {deliveryStart && deliveryEnd && (\n <>\n {`, ${translate('context-cards:wismo-stepper-estimated-arrival')} `}\n \n \n )}\n \n );\n\n let secondaryDeliveryStatus;\n\n if (stops > 0) {\n switch (punctuality) {\n case WISMO_PUNCTUALITY.DELAYED:\n secondaryDeliveryStatus = translate('context-cards:wismo-stepper-schedule-late');\n break;\n\n case WISMO_PUNCTUALITY.ON_TIME:\n case WISMO_PUNCTUALITY.EARLY:\n default:\n secondaryDeliveryStatus = translate('context-cards:wismo-stepper-driver-on-the-way');\n }\n } else {\n secondaryDeliveryStatus = translate('context-cards:wismo-stepper-nearly-arrived');\n }\n\n const deliveryStatus = (\n \n );\n\n React.useEffect(\n () =>\n emitWismoEvent(\n DELIVERY,\n { status: SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED, punctuality, stopsUntilDelivery: stops },\n orderNo,\n ),\n [],\n );\n\n return (\n \n );\n};\n\nexport default helpers(['t'])(DeliveryScheduled);\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { SlotTimeInline } from '#/components/home/context-cards/wismo/shared/styled';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport { useOrderContext } from '#/context/order-context-provider';\n\ntype Props = {\n t: (key: string, options?: object) => string;\n starRating: React.Component;\n display3Steps: boolean;\n};\n\nexport const PreparingOrder: React.FC = ({ t: translate, starRating, display3Steps }: Props) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const postcode = order.address.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n const deliveryHeading = ;\n const primaryDeliveryStatus = (\n <>\n {translate('context-cards:wismo-stepper-today')}\n {', '}\n \n \n );\n const secondaryDeliveryStatus = translate('context-cards:wismo-stepper-check-update');\n const deliveryStatus = (\n \n );\n\n React.useEffect(\n () => emitWismoEvent(DELIVERY, { status: SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER }, orderNo),\n [],\n );\n\n return (\n \n );\n};\n\nexport default helpers(['t'])(PreparingOrder);\n","import styled from 'styled-components';\n\nexport const Postcode = styled.span`\n text-transform: uppercase;\n`;\n\nPostcode.displayName = 'HomeDeliveryWismoStepperArrivedAtPostcode';\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { WISMO_PUNCTUALITY, SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { Postcode } from './styled';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport { useOrderContext } from '#/context/order-context-provider';\n\ntype Props = {\n t: (key: string, options?: object) => string;\n starRating: React.Component;\n display3Steps: boolean;\n};\n\nexport const ArrivedAtLocation: React.FC = ({ t: translate, starRating, display3Steps }: Props) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const punctuality = order.wismoSlot?.currentTrackingStatus?.punctuality;\n const postcode = order.address?.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n let deliveryHeading;\n let primaryDeliveryStatus;\n let secondaryDeliveryStatus;\n\n switch (punctuality) {\n case WISMO_PUNCTUALITY.EARLY:\n deliveryHeading = ;\n primaryDeliveryStatus = translate('context-cards:wismo-stepper.arrived-at-location.early.primary');\n secondaryDeliveryStatus = translate('context-cards:wismo-stepper.arrived-at-location.early.secondary');\n break;\n\n case WISMO_PUNCTUALITY.ON_TIME:\n case WISMO_PUNCTUALITY.DELAYED:\n default:\n deliveryHeading = ;\n primaryDeliveryStatus = (\n <>\n {translate('context-cards:wismo-stepper.arrived-at-location.on-time.primary')} {postcode}\n \n );\n secondaryDeliveryStatus = translate('context-cards:wismo-stepper.arrived-at-location.on-time.secondary');\n }\n\n const deliveryStatus = (\n \n );\n\n React.useEffect(\n () =>\n emitWismoEvent(\n DELIVERY,\n { status: SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION, punctuality },\n orderNo,\n ),\n [],\n );\n\n return (\n \n );\n};\n\nexport default helpers(['t'])(ArrivedAtLocation);\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport DeliveryStatus from '../../shared/delivery-status';\nimport { SlotTimeInline } from '../../shared/styled';\nimport { VisuallyHide } from '../../shared/delivery-heading/styled';\nimport { Postcode } from '../arrived-at-location/styled';\nimport { useOrderContext } from '#/context/order-context-provider';\n\ntype Props = {\n t: (key: string, options?: object) => string;\n starRating?: React.Component;\n};\n\nexport const PaymentFailed: React.FC = ({ t: translate, starRating }: Props) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const status = order.wismoSlot?.currentTrackingStatus?.status;\n const retryExpired = order.payment?.retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.EXPIRED;\n const postcode = order.address.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n const retryOption = order.payment.retryOption;\n const deliveryHeading = (\n \n );\n const primaryDeliveryStatus = <>{translate('context-cards:wismo-context-card-payment-issue')};\n const secondaryDeliveryStatus = (\n <>\n {`${translate(`context-cards:wismo-context-card-booked-for`)} `}\n {slotStart.format('ddd D MMM')}\n {', '}\n \n {', '}\n {translate('common:to')}\n {postcode}\n \n );\n\n const deliveryStatus = (\n \n );\n\n React.useEffect(() => emitWismoEvent(DELIVERY, { status: status }, orderNo), []);\n\n return (\n \n );\n};\n\nexport default helpers(['t'])(PaymentFailed);\n","import React from 'react';\nimport Link from '@beans/link';\nimport helpers from '#/lib/decorators/helpers';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { SlotTimeInline } from '#/components/home/context-cards/wismo/shared/styled';\nimport { DELIVERY } from '#/constants/shopping-methods';\nimport DriverOnMapLayout from '#/components/home/context-cards/wismo/shared/driver-on-map/layout';\nimport { basicEvent } from '#/analytics/types/basic';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { DELAY } from '#/analytics/constants';\nimport { useOrderContext } from '#/context/order-context-provider';\n\ntype Props = {\n t: (key: string, options?: object) => string;\n l: Function;\n starRating: React.Component;\n};\n\nexport const emitAnalyticsEvent = (): void =>\n basicEvent(analyticsBus, {\n type: 'wismo',\n value: 'cancelled order modal:reorder',\n action: DELAY,\n });\n\nconst CancelledContextCard: React.FC = ({ t: translate, l: languageLink, starRating }: Props) => {\n const { order } = useOrderContext();\n const orderNo = order.orderNo;\n const name = order.address.name;\n const postcode = order.address.postcode;\n const slotStart = order.slotStart;\n const slotEnd = order.slotEnd;\n const deliveryHeading = (\n \n );\n\n const primaryDeliveryStatus = translate('context-cards:wismo-stepper.cancelled.primary');\n const secondaryDeliveryStatus = (\n <>\n {translate('context-cards:wismo-stepper.cancelled.booked-for')}{' '}\n \n {', '}\n {postcode}\n \n );\n const placeOrderAgainLink = (\n \n {translate('context-cards:wismo-stepper.cancelled.place-order-again')}\n \n );\n\n const deliveryStatus = (\n \n );\n\n React.useEffect(() => emitWismoEvent(DELIVERY, { status: SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED }, orderNo), []);\n\n return (\n \n );\n};\n\nexport default helpers(['t', 'l'])(CancelledContextCard);\n","import React from 'react';\nimport { SUPPORTED_WISMO_TRACKING_STATUS, SUPPORTED_PAYMENT_RETRY_OPTION } from '#/constants/order-statuses';\nimport Delivered from './delivered';\nimport DeliveryScheduled from './delivery-scheduled';\nimport PreparingOrder from './preparing-order';\nimport ArrivedAtLocation from './arrived-at-location';\nimport PaymentFailed from './payment-failed';\nimport { useOrderContext } from '#/context/order-context-provider';\nimport CancelledContextCard from '#/components/home/cancelled-context-card';\n\ntype Props = {\n t: Function;\n showMap?: boolean;\n starRating: React.Component;\n display3Steps: boolean;\n};\n\nexport const HomeDeliveryWismoStepper: React.FC = ({ showMap, starRating, display3Steps }) => {\n const { order } = useOrderContext();\n const retryOption = order.payment?.retryOption;\n const paymentFailed =\n retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED || retryOption === SUPPORTED_PAYMENT_RETRY_OPTION.EXPIRED;\n const status = order.wismoSlot?.currentTrackingStatus?.status;\n\n if (paymentFailed) {\n return ;\n }\n\n switch (status) {\n case SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED:\n return ;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER:\n return ;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED:\n return ;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION:\n return ;\n\n case SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED:\n return ;\n\n default:\n return null;\n }\n};\n\nexport default HomeDeliveryWismoStepper;\n","import React from 'react';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { getOnDemandDynamicDeliveryData } from '#/lib/shopping-method-util';\nimport DeliveryHeading from '#/components/home/context-cards/wismo/shared/delivery-heading';\nimport DeliveryStatus from '#/components/home/context-cards/wismo/shared/delivery-status';\nimport BookSlotLink from '#/components/home/context-cards/wismo/shared/book-slot-link';\nimport CancelledContextCard from '#/components/home/cancelled-context-card';\nimport { SlotTimeInline } from '#/components/home/context-cards/wismo/shared/styled';\nimport { emitWismoEvent } from '#/components/home/context-cards/wismo/shared/analytics';\nimport { getFulfilmentEstimatedTime } from '#/selectors/slot';\nimport { ON_DEMAND } from '#/constants/shopping-methods';\nimport { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport { TOnDemandWismoStepperProps } from '../types';\nimport { DynamicDeliveryTime } from '#/custom-typings/redux-store/slot.defs';\nimport { TTranslateFunc } from '#/lib/records/helpers.defs';\nimport DriverOnMapLayout from '../../shared/driver-on-map/layout';\nimport { getIsAmongSlotBookingVariants } from '#/experiments/oop-1978/selectors';\n\ntype TOwnProps = {\n t: TTranslateFunc;\n};\n\ntype TOwnState = {\n fulfilmentEstimatedTime: DynamicDeliveryTime;\n showBookASlotButton: boolean;\n};\n\nconst mapStateToProps = (state: Store): TOwnState => ({\n fulfilmentEstimatedTime: getFulfilmentEstimatedTime(state),\n showBookASlotButton: !getIsAmongSlotBookingVariants(state),\n});\n\ntype TStepsTemplateProps = TOwnState & TOwnProps & TOnDemandWismoStepperProps;\n\nexport const StepsTemplate: React.FC = ({\n t: translate,\n orderNo,\n postcode,\n status: currentStatus,\n deliveryStart,\n deliveryEnd,\n fulfilmentEstimatedTime,\n showMap,\n homeGeoLocation,\n driverGeoLocation,\n starRating,\n shoppingMethod,\n showBookASlotButton,\n}) => {\n if (currentStatus === SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED) {\n return (\n \n );\n }\n\n const localeMappedStatus = currentStatus.replace(/_/g, '-').toLowerCase();\n const deliveryHeading = ;\n\n const showDeliveryToday = true; //TODO: Remove this once API is ready with order specific dynamic deliverytime\n const { onDemandDynamicDeliverySuffix, unit, min, max } = getOnDemandDynamicDeliveryData(\n true,\n true,\n fulfilmentEstimatedTime,\n showDeliveryToday,\n );\n const primaryDeliveryStatus = [\n SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED,\n SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION,\n ].includes(currentStatus) ? (\n \n ) : currentStatus !== SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED ? (\n translate(\n `context-cards:ondemand-wismo-stepper.steps.${localeMappedStatus}.primary${onDemandDynamicDeliverySuffix}`,\n {\n unit,\n min,\n max,\n },\n )\n ) : (\n translate(`context-cards:ondemand-wismo-stepper.steps.${localeMappedStatus}.primary`)\n );\n const secondaryDeliveryStatus = (\n <>\n {translate(`context-cards:ondemand-wismo-stepper.steps.${localeMappedStatus}.secondary`)}\n {showBookASlotButton && currentStatus === SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED && (\n \n )}\n \n );\n\n const deliveryStatus = (\n \n );\n React.useEffect(() => emitWismoEvent(ON_DEMAND, { status: currentStatus }, orderNo), []);\n return (\n \n );\n};\n\nexport default helpers(['t'])(connect(mapStateToProps)(StepsTemplate));\n","import React from 'react';\nimport { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\nimport StepsTemplate from './steps-template';\nimport { TOnDemandWismoStepperProps } from './types';\n\nconst OnDemandWismoCard: React.FC = props => {\n const supportedStatuses = [\n SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER,\n SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED,\n SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION,\n SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED,\n SUPPORTED_WISMO_TRACKING_STATUS.NOT_AVAILABLE,\n SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED,\n ];\n\n return supportedStatuses.includes(props.status) ? : null;\n};\n\nexport default OnDemandWismoCard;\n","import { SUPPORTED_WISMO_TRACKING_STATUS } from '#/constants/order-statuses';\n\nexport const deliveryTrackingMocks = {\n PREPARINGORDER: {\n data: {\n deliveryTracking: {\n tripTrackingId: null,\n deliveryWindow: {\n start: '2022-11-01T09:30:00Z',\n end: '2022-11-01T10:00:00+00:00'\n },\n currentTrackingStatus: {\n status: SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER\n },\n destination: {\n geoLocation: {\n latitude: 51.44931,\n longitude: -0.07473\n }\n }\n }\n },\n cache: {\n maxAge: 0\n }\n },\n DELIVERYSCHEDULED: {\n data: {\n deliveryTracking: {\n tripTrackingId: 'xxx',\n deliveryWindow: {\n start: '2022-11-01T09:30:00Z',\n end: '2022-11-01T10:00:00+00:00'\n },\n currentTrackingStatus: {\n status: SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED,\n punctuality: 'ON_TIME',\n geoLocation: {\n longitude: -0.07573,\n latitude: 51.45031\n },\n stopsUntilDelivery: 1\n },\n destination: {\n geoLocation: {\n latitude: 51.44931,\n longitude: -0.07473\n }\n }\n }\n },\n cache: {\n maxAge: 30\n }\n },\n ARRIVED: {\n data: {\n deliveryTracking: {\n tripTrackingId: 'xxx',\n deliveryWindow: {\n start: '2022-11-01T09:30:00Z',\n end: '2022-11-01T10:00:00+00:00'\n },\n currentTrackingStatus: {\n status: SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION,\n punctuality: 'ON_TIME',\n geoLocation: {\n longitude: -0.07573,\n latitude: 51.45031\n },\n stopsUntilDelivery: 1\n },\n destination: {\n geoLocation: {\n longitude: -0.07573,\n latitude: 51.45031\n }\n }\n }\n },\n cache: {\n maxAge: 30\n }\n },\n DELIVERED: {\n data: {\n deliveryTracking: {\n deliveryWindow: {\n start: '2022-11-01T09:30:00Z',\n end: '2022-11-01T10:00:00+00:00'\n },\n currentTrackingStatus: {\n status: SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED,\n punctuality: 'ON_TIME',\n geoLocation: {\n longitude: -0.07573,\n latitude: 51.45031\n },\n stopsUntilDelivery: 1\n },\n destination: {\n geoLocation: {\n latitude: 51.44931,\n longitude: -0.07473\n }\n }\n }\n },\n cache: {\n maxAge: 0\n }\n },\n CANCELLED: {\n data: {\n deliveryTracking: {\n tripTrackingId: null,\n deliveryWindow: {\n start: '2022-11-01T09:30:00Z',\n end: '2022-11-01T10:00:00+00:00'\n },\n currentTrackingStatus: {\n status: SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED\n },\n destination: {\n geoLocation: {\n latitude: 51.44931,\n longitude: -0.07473\n }\n }\n }\n },\n cache: {\n maxAge: 0\n }\n }\n};\n","import { logApmError } from '#/lib/apm';\nimport { deliveryTrackingMocks } from '#/mock-data/delivery-tracking';\nimport { clientGraphqlPost } from './client-graphql';\nimport uuidv4 from 'uuid/v4';\nimport { GET_TRIP_TRACKING } from '#/constants/request-names';\n\nconst GET_TRIP_TRACKING_QUERY = `\nquery GetTripTracking($tripTrackingId: String!) {\n deliveryTracking(tripTrackingId: $tripTrackingId) {\n tripTrackingId\n deliveryWindow {\n start\n end\n }\n currentTrackingStatus {\n status\n punctuality\n stopsUntilDelivery\n geoLocation {\n latitude\n longitude\n }\n }\n destination {\n geoLocation {\n latitude\n longitude\n }\n }\n }\n}\n`;\nexport default async deliveryTrackingRequestData => {\n const {\n atrc,\n apiKey,\n region,\n endpoint,\n wismoSlot\n } = deliveryTrackingRequestData;\n const uuid = uuidv4();\n const traceId = `${atrc}:${uuid}`;\n const context = { 'x-apikey': apiKey, traceId, region };\n const queryVariables = {\n tripTrackingId: wismoSlot?.tripTrackingId\n };\n let response = null;\n let orderStatusFromSessionStorage = null;\n\n if (typeof window !== 'undefined') {\n const wismoStatus = window?.sessionStorage?.getItem('wismo-test-status');\n if (wismoStatus) {\n orderStatusFromSessionStorage = JSON.parse(wismoStatus);\n }\n }\n\n try {\n if (orderStatusFromSessionStorage) {\n response =\n deliveryTrackingMocks[orderStatusFromSessionStorage.toUpperCase()];\n } else {\n const requestName = GET_TRIP_TRACKING;\n\n response = await clientGraphqlPost(\n endpoint,\n context,\n GET_TRIP_TRACKING_QUERY,\n queryVariables,\n atrc,\n requestName,\n traceId\n );\n }\n const { data, cache } = await response;\n const deliveryTrackingData = data.deliveryTracking;\n const maxAge = cache?.maxAge;\n return {\n wismoSlot: deliveryTrackingData,\n pollingFrequency: maxAge\n };\n } catch (error) {\n const res = error;\n if (typeof window !== 'undefined') {\n //browser errors\n const error = res?.parsedBody?.errors?.[0];\n const statusCode = res?.status || 'unknown';\n const errorMessage = error?.message || res.message || 'unknown';\n const message = `Get Trip Tracking Error - Message: ${errorMessage}, Status: ${statusCode}`;\n logApmError(new Error(message), { traceId });\n }\n }\n return null;\n};\n","export const shouldDisplay3StepsConfig = {\n featureKey: 'ghs-all_wismo_3-step-journey',\n variationKey: 'enabled',\n useCustomerId: true\n};\n","import { getFeatureVariableStringFromState } from '#/lib/optimizely-manager';\nimport { shouldDisplay3StepsConfig } from '../constants';\n\nexport const shouldDisplay3Steps = state => {\n const { useCustomerId, featureKey, variationKey } = shouldDisplay3StepsConfig;\n const attributes = {};\n const isEnabled = getFeatureVariableStringFromState(\n state,\n featureKey,\n variationKey,\n {\n useCustomerId,\n attributes\n }\n );\n return isEnabled === 'true';\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Icon from '@ddsweb/icon';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\nimport { getDistanceBetweenCoordinates } from '#/lib/map-helper';\nimport {\n getLanguage,\n getTimezone,\n getCutsMustard,\n getDeviceType,\n getApigeeMangoEndpoint,\n getApigeeMangoApiKey,\n getAppRegion\n} from '#/reducers/app';\nimport { getIsFirstTimeShopper } from '#/reducers/user';\nimport MainText from '#/components/home/context-cards/main-text';\nimport IconRight from '#/components/home/context-cards/icon';\nimport DeliverySlotTime from '#/components/home/context-cards/delivery-slot-time';\nimport WismoStarRating from '#/components/home/context-cards/wismo/shared/wismo-star-rating';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { NOW, CONTEXT_CARD_IMPRESSION } from '#/analytics/constants';\nimport { ON_DEMAND } from '#/constants/shopping-methods';\nimport {\n WISMO_PUNCTUALITY,\n SUPPORTED_WISMO_TRACKING_STATUS\n} from '#/constants/order-statuses';\nimport HomeDeliveryWismoStepper from './components';\nimport OnDemandWismoCard from './on-demand';\nimport getDeliveryTrackingInfo from '#/lib/requests/get-delivery-tracking';\nimport { getAtrc } from '#/reducers/user';\nimport { logCustomEvent } from '#/lib/apm';\nimport { shouldDisplay3Steps } from '#/experiments/oop-1628/selectors';\nimport { OrderContext } from '../../../../context/order-context-provider';\n\nconst mapStateToProps = state => ({\n language: getLanguage(state),\n timezone: getTimezone(state),\n cutsMustard: getCutsMustard(state),\n deviceType: getDeviceType(state),\n isFirstTimeShopper: getIsFirstTimeShopper(state),\n endpoint: getApigeeMangoEndpoint(state),\n apiKey: getApigeeMangoApiKey(state),\n region: getAppRegion(state),\n atrc: getAtrc(state),\n display3Steps: shouldDisplay3Steps(state)\n});\nexport class WismoContextCard extends Component {\n constructor(props) {\n super(props);\n this.state = {\n pollingFrequency: undefined\n };\n }\n\n static contextType = OrderContext;\n\n updateDeliveryTrackingInfo = async () => {\n const { order, setOrder } = this.context;\n const deliveryTrackingRequestData = {\n ...this.props,\n wismoSlot: order.wismoSlot\n };\n let mocksEnabled = false;\n\n if (typeof window !== 'undefined') {\n const wismoStatus = window?.sessionStorage?.getItem('wismo-test-status');\n if (wismoStatus) {\n mocksEnabled = JSON.parse(wismoStatus);\n }\n }\n //avoid making delivery tracking call if no tripId\n if (\n !deliveryTrackingRequestData.wismoSlot?.tripTrackingId &&\n !mocksEnabled\n ) {\n return;\n }\n const response = await getDeliveryTrackingInfo(deliveryTrackingRequestData);\n if (response) {\n const newOrder = {\n ...order,\n wismoSlot: response.wismoSlot\n };\n setOrder(newOrder);\n this.setState({\n pollingFrequency: response.pollingFrequency\n });\n }\n };\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n componentDidMount = () => {\n const { orderNo, slot, showWismoStepper } = this.props;\n if (!showWismoStepper) {\n const { wismoSlot } = this.context.order;\n let wismoSlotStart = '';\n let wismoSlotEnd = '';\n let value = 'wismo';\n\n if (wismoSlot?.deliveryWindow) {\n wismoSlotStart = wismoSlot.deliveryWindow.start;\n wismoSlotEnd = wismoSlot.deliveryWindow.end;\n }\n\n if (wismoSlot?.currentTrackingStatus?.punctuality) {\n value = `wismo ${wismoSlot.currentTrackingStatus.punctuality.toLowerCase()}`;\n }\n\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD_IMPRESSION,\n value,\n action: NOW,\n orderNo,\n slotTime: `${slot.start} - ${slot.end}`,\n wismoTime:\n wismoSlotStart && wismoSlotEnd\n ? `${wismoSlotStart} - ${wismoSlotEnd}`\n : ''\n });\n }\n // call this first time to get the tracking details and set that into the state\n this.updateDeliveryTrackingInfo();\n };\n\n startPollingForTrackingInfo = () => {\n const { pollingFrequency } = this.state;\n const { wismoSlot } = this.context.order;\n const {\n currentTrackingStatus: { status }\n } = wismoSlot;\n\n if (pollingFrequency) {\n if (\n [SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED].includes(\n wismoSlot?.currentTrackingStatus?.status\n ) &&\n (!wismoSlot?.currentTrackingStatus?.geoLocation ||\n !wismoSlot?.destination?.geoLocation)\n ) {\n return;\n }\n\n if (\n status !== SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED &&\n status !== SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED\n ) {\n this.timeoutID = setTimeout(\n this.updateDeliveryTrackingInfo,\n Math.max(pollingFrequency, 30) * 1000\n );\n }\n }\n };\n\n stopPollingForTrackingInfo = () => {\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n }\n };\n\n componentDidUpdate() {\n this.stopPollingForTrackingInfo();\n this.startPollingForTrackingInfo();\n }\n\n componentWillUnmount = () => {\n this.stopPollingForTrackingInfo();\n };\n\n getDeliveryData() {\n const { wismoSlot } = this.context.order;\n\n let deliveryStart = '';\n let deliveryEnd = '';\n let isWarning = false;\n\n if (wismoSlot?.deliveryWindow && wismoSlot?.currentTrackingStatus) {\n let status = wismoSlot.currentTrackingStatus.punctuality;\n deliveryStart = this.formatDate(wismoSlot.deliveryWindow.start);\n deliveryEnd = this.formatDate(wismoSlot.deliveryWindow.end);\n isWarning = status === WISMO_PUNCTUALITY.DELAYED;\n }\n\n return {\n deliveryStart,\n deliveryEnd,\n isWarning\n };\n }\n\n shouldShowMap() {\n const { pollingFrequency } = this.state;\n const { wismoSlot } = this.context.order;\n\n const stopsWhenMapHidden = 4;\n const validDistanceBetweenCoordinatesInMiles = 2;\n\n const distanceBetweenGeoCoordinates = getDistanceBetweenCoordinates(\n wismoSlot?.currentTrackingStatus?.geoLocation,\n wismoSlot?.destination?.geoLocation\n );\n\n const shouldShowMap =\n distanceBetweenGeoCoordinates <= validDistanceBetweenCoordinatesInMiles &&\n wismoSlot?.currentTrackingStatus?.stopsUntilDelivery <=\n stopsWhenMapHidden &&\n wismoSlot?.destination?.geoLocation &&\n wismoSlot?.currentTrackingStatus?.geoLocation &&\n pollingFrequency &&\n [SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED].includes(\n wismoSlot?.currentTrackingStatus?.status\n );\n\n logCustomEvent('PostOrderTracking', {\n stops_until_delivery:\n wismoSlot?.currentTrackingStatus?.stopsUntilDelivery,\n has_home_geo_location: !!wismoSlot?.destination?.geoLocation,\n has_driver_geo_location: !!wismoSlot?.currentTrackingStatus?.geoLocation,\n order_status: wismoSlot?.currentTrackingStatus?.status,\n polling_frequency: pollingFrequency,\n is_showing_map: !!shouldShowMap,\n shopping_method: this.props.shoppingMethod,\n trip_tracking_id: wismoSlot?.tripTrackingId,\n distance_between_geo_coordinates: distanceBetweenGeoCoordinates\n });\n\n return !!shouldShowMap;\n }\n\n getCustomerVariables() {\n const {\n cutsMustard,\n deviceType,\n isFirstTimeShopper,\n locationUuid,\n shoppingMethod,\n c: config\n } = this.props;\n\n const opinionLabRefererUrl =\n shoppingMethod === ON_DEMAND\n ? config('opinionLab:refererUrls:ondemandwismo')\n : config('opinionLab:refererUrls:wismo');\n\n return {\n cutsMustard: String(cutsMustard),\n deviceType: deviceType,\n isFirstTimeShopper: String(isFirstTimeShopper),\n locationUuid: locationUuid,\n url: opinionLabRefererUrl\n };\n }\n\n getWismoCard() {\n const { deliveryStart, deliveryEnd, isWarning } = this.getDeliveryData();\n const {\n t: translate,\n showWismoStepper,\n shoppingMethod,\n address,\n orderNo,\n slot,\n display3Steps\n } = this.props;\n const { wismoSlot } = this.context.order;\n const { status, geoLocation } = wismoSlot.currentTrackingStatus;\n\n const { postcode, name: addressName } = address;\n const slotStart = this.formatDate(slot.start);\n const slotEnd = this.formatDate(slot.end);\n\n const starRating = (\n \n );\n // To remove 'showWismoStepper' flag once HomeDelivery WismoStepper is productionized\n\n if (showWismoStepper) {\n if (isOnDemandShoppingMethod(shoppingMethod)) {\n return (\n \n );\n }\n\n return (\n <>\n \n \n );\n }\n\n return (\n <>\n \n \n
\n {translate('common:today')}\n
\n
\n {isWarning ? (\n \n ) : (\n
\n \n
\n )}\n \n \n {translate('context-cards:wismo-context-card-title')}\n \n \n {isWarning && (\n

\n {translate('context-cards:wismo-context-card-update-message')}\n

\n )}\n \n \n \n \n \n \n {starRating}\n \n \n );\n }\n\n render() {\n return (\n \n {this.getWismoCard()}\n \n );\n }\n}\n\nWismoContextCard.propTypes = {\n address: PropTypes.object.isRequired,\n guidePrice: PropTypes.number.isRequired,\n language: PropTypes.string.isRequired,\n locationUuid: PropTypes.string,\n orderNo: PropTypes.string,\n shoppingMethod: PropTypes.string.isRequired,\n showWismoStepper: PropTypes.bool,\n slot: PropTypes.shape({\n end: PropTypes.string,\n start: PropTypes.string\n }),\n t: PropTypes.func,\n timezone: PropTypes.string,\n wismoSlot: PropTypes.shape({\n deliveryWindow: PropTypes.shape({\n end: PropTypes.string.isRequired,\n start: PropTypes.string.isRequired\n }),\n currentTrackingStatus: PropTypes.shape({\n punctuality: PropTypes.oneOf([\n WISMO_PUNCTUALITY.EARLY,\n WISMO_PUNCTUALITY.DELAYED,\n WISMO_PUNCTUALITY.ON_TIME\n ]),\n status: PropTypes.oneOf([\n SUPPORTED_WISMO_TRACKING_STATUS.PREPARING_ORDER,\n SUPPORTED_WISMO_TRACKING_STATUS.DELIVERY_SCHEDULED,\n SUPPORTED_WISMO_TRACKING_STATUS.ARRIVED_AT_CUSTOMER_LOCATION,\n SUPPORTED_WISMO_TRACKING_STATUS.DELIVERED,\n SUPPORTED_WISMO_TRACKING_STATUS.NOT_AVAILABLE,\n SUPPORTED_WISMO_TRACKING_STATUS.CANCELLED\n ]),\n stopsUntilDelivery: PropTypes.number\n })\n })\n};\n\nWismoContextCard.defaultProps = {\n showWismoStepper: false\n};\n\nexport default connect(mapStateToProps)(helpers(['t', 'c'])(WismoContextCard));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment-timezone';\nimport styled from 'styled-components';\nimport Notification from '@ddsweb/notification';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport helpers from '#/lib/decorators/helpers';\nimport ChevronLink from '#/components/link/chevron-link';\nimport { selectTaxonomyItem } from '#/actions/taxonomy-action-creators';\nimport { openNavMenu, openModal } from '#/actions/ui-action-creators';\nimport { getFirstNavItem } from '#/reducers/taxonomy';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { getUrlWithJourneyParam } from '#/lib/url/journey-utils';\nimport { SUPERDEPARTMENT } from '#/constants/taxonomy-levels';\nimport { TABLET } from '#/constants/platforms';\nimport { ECOUPON_MODAL } from '#/constants/modal-names';\nimport { AMEND_COUPONS_JOURNEY } from '#/constants/journey-names';\nimport {\n getCheckoutEntryPoint,\n getPaymentOptionsLink\n} from '#/utils/checkout-utils';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport SafelyOutputString from '#/components/safely-output-string';\nimport { getLanguage, getTimezone, getCurrentUrl } from '#/reducers/app';\n\nconst StyledNotification = styled(Notification)`\n margin-bottom: 18px;\n`;\n\nconst mapStateToProps = (state, { f: feature, c: config }) => {\n const showAmendChangeSlot = feature('allowAmendSlot');\n\n return {\n checkoutEntryPoint: getCheckoutEntryPoint(state, config),\n checkoutInAmend: config('checkout:enableInAmendMode'),\n currentUrl: getCurrentUrl(state),\n defaultSlotsPath: getDefaultSlotsPath(feature)(state),\n language: getLanguage(state),\n paymentOptionsLink: getPaymentOptionsLink(state),\n showAmendChangeSlot,\n taxonomyFirstItem: getFirstNavItem(state),\n timezone: getTimezone(state)\n };\n};\n\n@helpers(['c', 'f', 't', 'l'])\n@connect(mapStateToProps, {\n selectTaxonomyItem,\n openNavMenu,\n openModal\n})\nexport default class AmendOrderContextCard extends React.Component {\n static propTypes = {\n address: PropTypes.object.isRequired,\n c: PropTypes.func.isRequired,\n checkoutEntryPoint: PropTypes.string.isRequired,\n checkoutInAmend: PropTypes.bool.isRequired,\n currentUrl: PropTypes.string.isRequired,\n defaultSlotsPath: PropTypes.string.isRequired,\n f: PropTypes.func.isRequired,\n l: PropTypes.func.isRequired,\n language: PropTypes.string.isRequired,\n openNavMenu: PropTypes.func.isRequired,\n order: PropTypes.object.isRequired,\n paymentOptionsLink: PropTypes.string.isRequired,\n selectTaxonomyItem: PropTypes.func.isRequired,\n showAmendChangeSlot: PropTypes.bool,\n t: PropTypes.func.isRequired,\n taxonomyFirstItem: PropTypes.object,\n timezone: PropTypes.string.isRequired,\n workingDays: PropTypes.number\n };\n\n constructor(props) {\n super(props);\n }\n\n getChevronLink({\n analyticsId,\n action,\n translationKey,\n href,\n onClick,\n dataAuto\n }) {\n const { t: translate } = this.props;\n const text = translate(translationKey);\n\n return (\n {\n basicEvent(analyticsBus, {\n type: 'contextCard',\n value: analyticsId,\n action\n });\n\n if (typeof onClick === 'function') {\n onClick(e);\n }\n }}\n >\n {text}\n \n );\n }\n\n getAddItemsLink() {\n return this.getChevronLink({\n analyticsId: 'change items',\n action: 'now',\n href: this.props.l('/shop'),\n translationKey: 'home:amend-order.add-items-to-basket',\n dataAuto: 'amend-add-items-link',\n onClick: e => {\n e.stopPropagation();\n this.props.openNavMenu();\n this.props.selectTaxonomyItem(\n SUPERDEPARTMENT,\n this.props.taxonomyFirstItem,\n TABLET\n );\n e.preventDefault();\n }\n });\n }\n\n getChangeSlotLink() {\n return this.getChevronLink({\n analyticsId: 'change slot',\n action: 'delay',\n href: this.props.l(this.props.defaultSlotsPath),\n translationKey: 'home:amend-order.change-your-slot',\n dataAuto: 'amend-change-slot-link'\n });\n }\n\n handleAddCouponClick = e => {\n e && e.preventDefault();\n this.props.openModal(ECOUPON_MODAL);\n };\n\n getAddCouponsLink() {\n const { checkoutEntryPoint } = this.props;\n const linkData = {\n analyticsId: 'add coupons',\n action: 'delay',\n translationKey: 'home:amend-order.add-coupons-vouchers',\n dataAuto: 'add-vouchers-ecoupons'\n };\n\n linkData.href = getUrlWithJourneyParam(\n checkoutEntryPoint,\n AMEND_COUPONS_JOURNEY,\n [AMEND_COUPONS_JOURNEY]\n );\n\n return this.getChevronLink(linkData);\n }\n\n getChangePaymentDetailsLink() {\n const { paymentOptionsLink } = this.props;\n const linkData = {\n analyticsId: 'change payment',\n action: 'now',\n translationKey: 'home:amend-order.change-payment-details',\n dataAuto: 'amend-change-payment-link',\n href: paymentOptionsLink\n };\n\n return this.getChevronLink(linkData);\n }\n\n getBodyText() {\n const {\n t: translate,\n address,\n order,\n language,\n timezone,\n workingDays\n } = this.props;\n\n let translationKey = 'home:amend-order.context-card-details';\n let orderDate = workingDays;\n\n orderDate = moment(order.slot.start)\n .tz(timezone)\n .locale(language)\n .format('ll');\n\n return translate(translationKey, {\n address_name: address.name,\n order_date: orderDate\n });\n }\n\n render() {\n const { t: translate, c: config, showAmendChangeSlot } = this.props;\n const orderDetails = this.getBodyText();\n const showInfoMessage = config('showPriceInfoAmendContextCard');\n\n return (\n \n

\n {translate('home:amend-order.context-card-title')}\n

\n

\n {orderDetails}\n

\n
\n
\n {this.getAddItemsLink()}\n {showAmendChangeSlot && this.getChangeSlotLink()}\n
\n
\n {\n <>\n {this.getAddCouponsLink()}\n {config('changePaymentDetailsEnabled') &&\n this.getChangePaymentDetailsLink()}\n \n }\n
\n
\n {showInfoMessage && (\n \n )}\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { addModalToUrl } from '#/lib/url/modal-utils';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { openModal } from '#/actions/ui-action-creators';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport SaveChangesButton from '#/components/buttons/save-changes-button';\nimport Link from '#/components/link';\nimport SafelyOutputString from '#/components/safely-output-string';\nimport {\n getCurrentUrl,\n getLanguage,\n getLanguageLink,\n getTimezone\n} from '#/reducers/app';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport { ECOUPON_MODAL } from '#/constants/modal-names';\nimport Icon from './icon';\nimport DeliveryDate from './delivery-date';\nimport MainText from './main-text';\n\nconst mapStateToProps = (state, { c: config, f: feature }) => ({\n currentUrl: getCurrentUrl(state),\n displayAsGuidePrice: config('displayAsGuidePrice'),\n language: getLanguage(state),\n timezone: getTimezone(state),\n showChangeYourSlotLink: feature('allowAmendSlot'),\n slotsLanguageLink: getLanguageLink(state, getDefaultSlotsPath(feature)(state))\n});\n\n@helpers(['t', 'c', 'f'])\n@connect(mapStateToProps, { openModal })\nexport default class OrderAmendedContextCard extends Component {\n static propTypes = {\n c: PropTypes.func.isRequired,\n currentUrl: PropTypes.string,\n displayAsGuidePrice: PropTypes.bool.isRequired,\n hasTrolleyItems: PropTypes.bool.isRequired,\n language: PropTypes.string.isRequired,\n openModal: PropTypes.func,\n order: PropTypes.shape({\n address: PropTypes.object.isRequired,\n guidePrice: PropTypes.number.isRequired,\n orderPlacedOn: PropTypes.string,\n expiry: PropTypes.string.isRequired,\n slot: PropTypes.shape({\n start: PropTypes.string.isRequired,\n end: PropTypes.string.isRequired\n })\n }),\n showChangeYourSlotLink: PropTypes.bool,\n slotsLanguageLink: PropTypes.string.isRequired,\n t: PropTypes.func,\n timezone: PropTypes.string.isRequired\n };\n\n handleClick = e => {\n e && e.preventDefault();\n this.props.openModal(ECOUPON_MODAL);\n basicEvent(analyticsBus, {\n type: 'contextCard',\n value: 'add ecoupons'\n });\n };\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n render() {\n const {\n order: { slot, expiry, address, guidePrice, orderPlacedOn },\n displayAsGuidePrice,\n t: translate,\n hasTrolleyItems,\n currentUrl,\n showChangeYourSlotLink,\n slotsLanguageLink\n } = this.props;\n const start = this.formatDate(slot.start);\n const end = this.formatDate(slot.end);\n const amendExpiry = this.formatDate(expiry).format('dddd DD MMMM, HH:mm');\n const infoHTMLText = translate('home:book-a-slot.order-amended.details', {\n save_by_date_time: amendExpiry\n });\n\n return (\n \n
\n \n \n \n

\n {translate('home:book-a-slot.order-amended.title')}\n

\n \n
\n \n {showChangeYourSlotLink ? (\n \n {translate('home:amend-order.change-your-slot')}\n \n \n ) : (\n \n {translate('orders:amend.add-ecoupons-vouchers')}\n \n \n )}\n
\n
\n {!showChangeYourSlotLink && (\n
\n {infoHTMLText}\n
\n )}\n \n );\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Link from '#/components/link-check-spa';\nimport { getCheckoutEntryPoint } from '../../../utils/checkout-utils';\nimport analyticsBus from '../../../analytics/analyticsBus';\nimport { basicEvent } from '../../../analytics/types/basic';\nimport { CONTEXT_CARD, CHECKOUT, DELAY } from '../../../analytics/constants';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '../../../lib/render/connect-deep-compare';\nimport { getDefaultSlotsPath } from '../../../reducers/slot';\n\nexport const mapStateToProps = (state, { c: config, f }) => ({\n checkoutEntryPoint: getCheckoutEntryPoint(state, config),\n defaultSlotsPath: getDefaultSlotsPath(f)(state)\n});\n\nfunction emitCheckoutAnalyticsEvent() {\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD,\n value: CHECKOUT,\n action: DELAY\n });\n}\n\nconst ReservedButton = props => {\n if (props.isEmpty || props.cannotPurchaseTrolley) {\n return (\n
\n \n {props.t('home:book-a-slot.change-slot')}\n \n
\n );\n } else {\n return (\n
\n \n {props.t('home:book-a-slot.checkout')}\n \n
\n );\n }\n};\n\nReservedButton.propTypes = {\n cannotPurchaseTrolley: PropTypes.bool,\n checkoutEntryPoint: PropTypes.string.isRequired,\n currentUrl: PropTypes.string.isRequired,\n defaultSlotsPath: PropTypes.string.isRequired,\n isEmpty: PropTypes.bool,\n l: PropTypes.func.isRequired,\n t: PropTypes.func.isRequired\n};\n\nexport default helpers(['f'])(connect(mapStateToProps)(ReservedButton));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SafelyOutputString from '#/components/safely-output-string';\nimport { SHOPPING_METHOD_PROP_TYPE } from '#/components/slots/prop-types';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\nimport CountdownTimer from '#/components/shared/countdown-timer';\nimport { CALLBACK_KEYS } from '#/components/shared/countdown-timer/callback-keys';\nimport { CountdownTimeText } from '#/components/home/context-cards/styled';\nimport { connect } from 'react-redux';\nimport helpers from '#/lib/decorators/helpers';\nimport { getFormattedTime } from '#/components/shared/formatted-time/selector';\n\nconst mapStateToProps = (state, ownProps) => ({\n expiryTime: getFormattedTime(state, ownProps.expiry, ownProps.c)\n});\n\nconst InfoMessage = ({\n timeLeft,\n expiry,\n t: translate,\n shoppingMethod,\n slotExpiredCB,\n expiryTime\n}) => {\n let bottomText = '';\n const overrideMessage = isOnDemandShoppingMethod(shoppingMethod);\n const calDay = expiry.calendar(null, {\n sameDay: '[today]',\n nextDay: '[tomorrow]'\n });\n\n const zeroRemainingCB = () => {\n slotExpiredCB();\n };\n\n const getMessageWithCountdownTimer = () => {\n const prefixText = translate(\n 'home:book-a-slot.slot-booked.checkout-by-ondemand-checkout-in'\n );\n const suffixText = translate(\n 'home:book-a-slot.slot-booked.checkout-by-ondemand-product-prices-offers'\n );\n return (\n <>\n {prefixText}\n \n \n \n . {suffixText}\n \n );\n };\n\n const getBottomText = () => {\n if (timeLeft > 0) {\n if (calDay === 'today') {\n if (overrideMessage) {\n bottomText = getMessageWithCountdownTimer();\n return bottomText;\n } else {\n bottomText = translate(\n 'home:book-a-slot.slot-booked.ckeckout-by-today',\n {\n check_out_by: expiryTime\n }\n );\n }\n } else if (calDay === 'tomorrow') {\n bottomText = translate(\n 'home:book-a-slot.slot-booked.ckeckout-by-tomorrow',\n {\n check_out_by: expiryTime\n }\n );\n } else {\n bottomText = translate('home:book-a-slot.slot-booked.ckeckout-by', {\n check_out_on: expiry.format('DD-MM-YYYY'),\n check_out_by: expiryTime\n });\n }\n }\n return {bottomText};\n };\n\n return (\n \n {getBottomText()}\n

\n );\n};\n\nInfoMessage.propTypes = {\n expiry: PropTypes.object.isRequired,\n shoppingMethod: SHOPPING_METHOD_PROP_TYPE.isRequired,\n slotExpiredCB: PropTypes.func.isRequired,\n t: PropTypes.func.isRequired,\n timeLeft: PropTypes.number.isRequired\n};\n\nexport default helpers(['c'])(connect(mapStateToProps)(InfoMessage));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Link from '#/components/link-check-spa';\n\n/** @type {React.ComponentType} */\nconst Button = React.forwardRef((props, ref) => (\n
\n \n {props.label}\n \n
\n));\n\nButton.propTypes = {\n ariaDescribedBy: PropTypes.string,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n longText: PropTypes.bool,\n onClick: PropTypes.func,\n to: PropTypes.string\n};\n\nexport default Button;\n","import { Moment } from 'moment';\nimport classnames from 'classnames';\nimport React, { FunctionComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { compose } from 'react-recompose';\nimport Button from '#/components/home/context-cards/button';\nimport Icon from '#/components/home/context-cards/icon';\nimport MainText from '#/components/home/context-cards/main-text';\nimport helpers from '#/lib/decorators/helpers';\nimport { getLanguage, getLanguageLink } from '#/reducers/app';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport { TrolleyState } from '#/custom-typings/redux-store/trolley.defs';\nimport { getTrolleyShoppingMethod } from '#/selectors/trolley';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\n\nconst mapStateToProps = (state, { f }) => {\n const shoppingMethod = getTrolleyShoppingMethod(state);\n const isOnDemandDelivery = isOnDemandShoppingMethod(shoppingMethod);\n\n return {\n defaultSlotsPath: getLanguageLink(state, getDefaultSlotsPath(f)(state)),\n language: getLanguage(state),\n shoppingMethod,\n overrideSlotExpiredMessage: isOnDemandDelivery,\n showBasketInfo: isOnDemandDelivery,\n };\n};\n\nconst connector = connect(mapStateToProps);\n\ntype OwnProps = {\n deliveryBy?: { day: string; month: string };\n start?: Moment;\n end?: Moment;\n address: TrolleyState['deliveryAddress'];\n shoppingMethod: string;\n overrideSlotExpiredMessage: boolean;\n showBasketInfo: boolean;\n};\ntype HelperProps = { f: Function; t: Function };\nexport type Props = OwnProps & HelperProps & ConnectedProps;\n\nconst SlotExpiredContextCardComponent: FunctionComponent = ({\n deliveryBy,\n start,\n end,\n address,\n t: translate,\n defaultSlotsPath,\n language,\n shoppingMethod,\n showBasketInfo,\n overrideSlotExpiredMessage,\n}) => (\n
\n
\n \n
\n \n

\n {overrideSlotExpiredMessage\n ? translate(`home:book-a-slot.slot-booked.slot-expired-${shoppingMethod}`)\n : translate('home:book-a-slot.slot-booked.slot-expired')}\n

\n {deliveryBy ? (\n \n ) : (\n \n )}\n
\n \n {showBasketInfo && (\n

\n {translate('home:book-a-slot.slot-booked.items-in-basket-info')}\n

\n )}\n
\n
\n);\n\nconst enhance = compose(helpers(['t', 'f']), connector);\n\nexport const SlotExpiredContextCard = enhance(SlotExpiredContextCardComponent);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport helpers from '#/lib/decorators/helpers';\nimport Icon from './icon';\nimport DeliveryDate from './delivery-date';\nimport MainText from './main-text';\nimport ReservedButton from './reserved-button';\nimport InfoMessage from './info-message';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { getCurrentUrl, getLanguage, getTimezone } from '#/reducers/app';\nimport { SlotExpiredContextCard } from '../slot-expired-context-card';\nimport { isOnDemandShoppingMethod } from '#/lib/shopping-method-util';\nimport { getTrolleyShoppingMethod } from '#/selectors/trolley';\nimport { SHOPPING_METHOD_PROP_TYPE } from '#/components/slots/prop-types';\n\nexport const mapStateToProps = state => {\n const trolleyShoppingMethod = getTrolleyShoppingMethod(state);\n const isOnDemandDelivery = isOnDemandShoppingMethod(trolleyShoppingMethod);\n\n return {\n currentUrl: getCurrentUrl(state),\n language: getLanguage(state),\n timezone: getTimezone(state),\n trolleyShoppingMethod,\n showExpiringState: !isOnDemandDelivery,\n overrideReservationMessage: isOnDemandDelivery\n };\n};\n\n@helpers(['l', 't', 'c'])\n@connect(mapStateToProps)\nexport default class SlotReservedContextCard extends Component {\n static propTypes = {\n address: PropTypes.object.isRequired,\n c: PropTypes.func,\n currentUrl: PropTypes.string.isRequired,\n l: PropTypes.func,\n language: PropTypes.string.isRequired,\n order: PropTypes.shape({\n cannotPurchaseTrolley: PropTypes.bool.isRequired,\n expiry: PropTypes.string.isRequired,\n isEmpty: PropTypes.bool.isRequired,\n slot: PropTypes.shape({\n start: PropTypes.string.isRequired,\n end: PropTypes.string.isRequired\n })\n }),\n overrideReservationMessage: PropTypes.bool.isRequired,\n showExpiringState: PropTypes.bool.isRequired,\n t: PropTypes.func,\n timezone: PropTypes.string,\n trolleyShoppingMethod: SHOPPING_METHOD_PROP_TYPE.isRequired\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n isSlotExpired: false\n };\n }\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n getSlotReservedText() {\n const {\n trolleyShoppingMethod,\n t: translate,\n overrideReservationMessage\n } = this.props;\n\n if (overrideReservationMessage) {\n return translate(\n `home:book-a-slot.slot-booked.slot-reserved-${trolleyShoppingMethod}`\n );\n }\n return translate('home:book-a-slot.slot-booked.slot-reserved');\n }\n\n slotReservedCard = (isExpiring, timeLeft, start, end, expiry) => {\n const {\n address,\n currentUrl,\n l: languageLink,\n order: { isEmpty, cannotPurchaseTrolley },\n overrideReservationMessage,\n t: translate,\n trolleyShoppingMethod\n } = this.props;\n const slotExpiredCB = () => {\n this.setState({ isSlotExpired: true });\n };\n\n const title = isExpiring\n ? translate('home:book-a-slot.slot-booked.slot-expiring')\n : this.getSlotReservedText();\n\n return (\n \n
\n \n \n \n \n {title}\n \n \n \n
\n\n
\n \n
\n \n );\n };\n\n render() {\n const {\n address,\n c: config,\n order: { expiry, slot },\n showExpiringState\n } = this.props;\n const start = this.formatDate(slot.start);\n const end = this.formatDate(slot.end);\n const expiryTime = this.formatDate(expiry);\n const now = this.formatDate();\n\n const timeLeft = expiryTime.diff(now, 'seconds');\n const isExpiring =\n showExpiringState &&\n timeLeft < config('minutesBeforeSlotExpiryWarning') * 60;\n\n return timeLeft > 0 ? (\n this.slotReservedCard(isExpiring, timeLeft, start, end, expiryTime)\n ) : (\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { css, withTheme } from 'styled-components';\nimport Tooltip from '@ddsweb/popover';\nimport { Heading } from '@ddsweb/heading';\nimport Text from '@ddsweb/text';\nimport { colors } from '@ddsweb/selectors';\nimport { ThemeOverride } from '@ddsweb/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { CONTEXT_CARD, NOW } from '#/analytics/constants';\nimport {\n isNavMenuOpen,\n isHeaderSearchOpen,\n getHeaderMultiSearchLinkVisibility\n} from '#/reducers/ui';\nimport { getSuggestionsVisibility, getSuggestions } from '#/reducers/search';\nimport {\n getIsMobile,\n getHasAcceptedCookiePolicy,\n getHasAcceptedAppBanner,\n getIsDesktop\n} from '#/reducers/app';\nimport { getCID } from '#/reducers/user';\nimport { firstTimeShopper } from '#/constants/experiments';\nimport { setCookie } from '#/lib/cookie/cookie-utils';\nimport { debounce } from '#/utils/misc';\n\nconst mapStateToProps = state => ({\n isMobile: getIsMobile(state),\n isDesktop: getIsDesktop(state),\n isNavMenuOpen: isNavMenuOpen(state),\n isHeaderSearchOpen: isHeaderSearchOpen(state),\n isSearchSuggestionsClosed:\n !getSuggestions(state).length || !getSuggestionsVisibility(state), //getSuggestionsVisibility is true even when empty suggestions\n isMultiSearchLinkVisible: getHeaderMultiSearchLinkVisibility(state),\n hasAcceptedCookiePolicy: getHasAcceptedCookiePolicy(state),\n hasAcceptedAppBanner: getHasAcceptedAppBanner(state),\n customerId: getCID(state)\n});\n\nexport class FirstTimeShopperTooltip extends Component {\n static propTypes = {\n customerId: PropTypes.string.isRequired,\n firstTimeShopperTooltipVariant: PropTypes.string.isRequired,\n hasAcceptedAppBanner: PropTypes.bool.isRequired,\n hasAcceptedCookiePolicy: PropTypes.bool.isRequired,\n id: PropTypes.string.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n isHeaderSearchOpen: PropTypes.bool.isRequired,\n isMobile: PropTypes.bool.isRequired,\n isMultiSearchLinkVisible: PropTypes.bool.isRequired,\n isNavMenuOpen: PropTypes.bool.isRequired,\n isSearchSuggestionsClosed: PropTypes.bool.isRequired,\n t: PropTypes.func.isRequired,\n targetRef: PropTypes.object.isRequired\n };\n\n constructor(props) {\n super(props);\n const { t, firstTimeShopperTooltipVariant } = props;\n this.content = {\n title: t(`home:book-a-slot.first-time-shopper-tooltip-message.title`),\n body: t(\n `home:book-a-slot.first-time-shopper-tooltip-message.variant-${firstTimeShopperTooltipVariant}`\n )\n };\n this.accessibleLabel = `${this.content.title} ${this.content.body}`;\n this.replaceTooltip = this.replaceTooltip.bind(this);\n }\n\n state = {\n isOpen: true,\n refreshToken: 'init'\n };\n\n BodyTextStyled = styled(Text)`\n && {\n color: ${colors.inverse};\n }\n `;\n HeadingStyled = styled(Heading)`\n && {\n color: ${colors.inverse};\n }\n `;\n\n componentDidMount() {\n this.addWindowEventListener();\n }\n\n componentWillUnmount() {\n this.removeWindowEventListener();\n clearTimeout(this.timeout);\n }\n\n componentDidUpdate(prevProps) {\n const closedCookiePolicy =\n this.props.hasAcceptedCookiePolicy &&\n prevProps.hasAcceptedCookiePolicy !== this.props.hasAcceptedCookiePolicy;\n\n const closedAppBanner =\n prevProps.hasAcceptedAppBanner !== this.props.hasAcceptedAppBanner;\n\n const toggledHeaderSearchBar =\n prevProps.isHeaderSearchOpen !== this.props.isHeaderSearchOpen;\n\n const toggledMultiSearchLink =\n prevProps.isMultiSearchLinkVisible !==\n this.props.isMultiSearchLinkVisible;\n\n if (\n toggledMultiSearchLink ||\n closedCookiePolicy ||\n closedAppBanner ||\n toggledHeaderSearchBar\n ) {\n this.replaceTooltip();\n }\n }\n\n addWindowEventListener() {\n if (this.props.isDesktop) {\n window.addEventListener('resize', this.handleWindowResize);\n } else {\n window.addEventListener('orientationchange', this.replaceTooltip);\n }\n }\n\n removeWindowEventListener() {\n if (this.props.isDesktop) {\n window.removeEventListener('resize', this.handleWindowResize);\n } else {\n window.removeEventListener('orientationchange', this.replaceTooltip);\n }\n }\n\n handleWindowResize = debounce(() => {\n this.setState({\n refreshToken: `${Math.random()}`\n });\n }, 100);\n\n replaceTooltip() {\n this.setState({\n isOpen: false\n });\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => {\n this.setState({\n isOpen: true\n });\n }, 500);\n }\n\n emitFTSExperimentAnayticsEvent() {\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD,\n value: 'tooltip:close',\n action: NOW\n });\n }\n\n onToolTipChange({ action }) {\n const closed = action === 'close';\n if (closed) {\n this.setState({\n isOpen: false\n });\n this.removeWindowEventListener();\n const { getCookieKey, cookieExpiry } = firstTimeShopper;\n this.emitFTSExperimentAnayticsEvent();\n setCookie(\n getCookieKey(this.props.customerId),\n 'closed',\n cookieExpiry,\n '/groceries'\n );\n }\n }\n\n overrideTheme = props => theme => {\n const themeColors = theme.colors;\n\n return {\n colors: {\n ...themeColors,\n background: {\n ...themeColors.background,\n base: colors.info(props)\n }\n }\n };\n };\n\n render() {\n const {\n HeadingStyled,\n BodyTextStyled,\n content,\n accessibleLabel,\n props,\n state\n } = this;\n const {\n targetRef,\n id,\n isMobile,\n isNavMenuOpen,\n isSearchSuggestionsClosed\n } = props;\n\n if (!state.isOpen || isNavMenuOpen || !isSearchSuggestionsClosed)\n return null;\n\n const override = this.overrideTheme(props);\n\n return (\n \n this.onToolTipChange(e)}\n supressTargetFocusOnClose\n containerWidth={296}\n styles={css`\n background-color: ${colors.info};\n z-index: ${isMobile ? 11 : 13};\n .ddsweb-popover__pointer + button {\n background-color: ${colors.inverse};\n }\n `} /* z-index is 12 for left nav on tablets we want to stay above it\n but on mobiles below it while scrolling down */\n >\n {content.title}\n {content.body}\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps)(\n helpers(['t'])(withTheme(FirstTimeShopperTooltip))\n);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Link, { TextButtonLink } from '@ddsweb/link';\nimport styled from 'styled-components';\nimport { fontSize, spacing } from '@ddsweb/selectors';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { CONTEXT_CARD, BOOK_A_SLOT, DELAY } from '#/analytics/constants';\nimport { mediumMin } from '#/constants/viewports';\nimport SafelyOutputString from '#/components/safely-output-string';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport { getLanguage } from '#/reducers/app';\nimport { getFirstTimeShopperTooltipVariant } from '#/reducers/experiments';\nimport { getIsDeliveryAvailable } from '#/selectors/available-shopping-methods';\nimport { isOnlyCollectionAvailable } from '#/selectors/trolley';\nimport FirstTimeShopperTooltip from './first-time-shopper-tooltip';\nimport Icon from './icon';\n\nexport const LinkButtonText = styled.span`\n font-size: ${fontSize.xs};\n`;\n\nexport const ActionButton = styled.div`\n padding: ${spacing.lg} 0;\n @media (min-width: ${mediumMin}) {\n padding: 10px 0;\n }\n`;\n\nconst mapStateToProps = (state, { f }) => ({\n defaultSlotsPath: getDefaultSlotsPath(f)(state),\n firstTimeShopperTooltipVariant: getFirstTimeShopperTooltipVariant(state),\n isDeliveryAvailable: getIsDeliveryAvailable(state),\n isOnlyCollectionAvailable: isOnlyCollectionAvailable(state),\n language: getLanguage(state)\n});\n@helpers(['f', 'l', 't', 'c'])\n@connect(mapStateToProps)\nexport default class NoSlotBookedContextCard extends Component {\n static propTypes = {\n c: PropTypes.func.isRequired,\n defaultSlotsPath: PropTypes.string.isRequired,\n f: PropTypes.func.isRequired,\n firstTimeShopperTooltipVariant: PropTypes.string,\n isClickCollectContextCardOop1162: PropTypes.bool,\n isDeliveryAvailable: PropTypes.bool.isRequired,\n isOnlyCollectionAvailable: PropTypes.bool.isRequired,\n l: PropTypes.func.isRequired,\n language: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired\n };\n\n emitBookASlotAnalyticsEvent() {\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD,\n value: BOOK_A_SLOT,\n action: DELAY\n });\n }\n\n actionButtonRef = {}; // FTS experiment tooltip reference\n tooltipId = 'fts-tooltip'; // FTS tooltip id linking button and tooltip\n\n getButtonLabel() {\n const { t: translate, isOnlyCollectionAvailable } = this.props;\n return (\n \n \n {translate(\n isOnlyCollectionAvailable\n ? 'slots:fulfilment-card.not-booked.collection.intro'\n : 'slots:fulfilment-card.not-booked.intro'\n )}\n \n \n {translate(\n isOnlyCollectionAvailable\n ? 'slots:fulfilment-card.not-booked.collection.cta-button'\n : 'slots:fulfilment-card.not-booked.cta-button'\n )}\n \n \n );\n }\n\n getShoppingMethods() {\n const {\n c: config,\n language,\n t: translate,\n isOnlyCollectionAvailable\n } = this.props;\n\n const link = config(`links:firstTimeShopping:${language}`);\n return (\n <>\n \n {translate(\n isOnlyCollectionAvailable\n ? 'home:book-a-slot.no-slot-booked.collection.details2'\n : 'home:book-a-slot.no-slot-booked.details2'\n )}\n \n {link && !isOnlyCollectionAvailable && (\n <>\n
\n \n {translate('home:book-a-slot.no-slot-booked.details2-more')}\n \n \n )}\n \n );\n }\n renderDefaultContextCard() {\n const {\n defaultSlotsPath,\n l: language,\n t: translate,\n isOnlyCollectionAvailable\n } = this.props;\n const detailsText = translate(\n isOnlyCollectionAvailable\n ? 'home:book-a-slot.no-slot-booked.collection.details'\n : 'home:book-a-slot.no-slot-booked.details',\n {},\n { returnNullIfFalsy: true }\n );\n\n return (\n <>\n
\n {detailsText && (\n

{detailsText}

\n )}\n

\n {this.getShoppingMethods()}\n

\n
\n \n \n {this.getButtonLabel()}\n \n \n \n );\n }\n render() {\n const {\n firstTimeShopperTooltipVariant,\n isOnlyCollectionAvailable,\n t: translate\n } = this.props;\n\n return (\n \n
\n \n
\n \n

\n {translate(\n isOnlyCollectionAvailable\n ? 'slots:fulfilment-card.not-booked.collection.cta-title'\n : 'slots:fulfilment-card.not-booked.cta-title'\n )}\n

\n {this.renderDefaultContextCard()}\n {firstTimeShopperTooltipVariant && (\n \n )}\n
\n
\n

\n {translate(\n isOnlyCollectionAvailable\n ? 'home:book-a-slot.no-slot-booked.collection.details3'\n : 'home:book-a-slot.no-slot-booked.details3'\n )}\n

\n
\n
\n );\n }\n}\n","import styled from 'styled-components';\nimport { spacing } from '@ddsweb/selectors';\n\nexport const StyledBookSlotButtonWrapper = styled.div`\n padding: ${spacing.sm};\n\n //override context card default style\n .context-card-book-a-slot > &:first-child {\n border-radius: 0;\n }\n`;\n","import React from 'react';\nimport { TextButtonLink } from '@ddsweb/link';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { TFeatureFunc, TTranslateFunc } from '#/lib/records/helpers.defs';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport { basicEvent } from '#/analytics/types/basic';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { TLanguageLink } from '#/components/slots/delivery-content-section/index.defs';\nimport { StyledBookSlotButtonWrapper } from './styled';\nimport { BOOK_A_SLOT, CONTEXT_CARD, DELAY } from '#/analytics/constants';\n\nexport type TOwnProps = {\n defaultSlotsPath: string;\n f: TFeatureFunc;\n l: TLanguageLink;\n t: TTranslateFunc;\n};\n\nconst mapStateToProps = (\n state: Store,\n { f }: TOwnProps,\n): {\n defaultSlotsPath: string;\n} => ({\n defaultSlotsPath: getDefaultSlotsPath(f)(state),\n});\n\nexport const BookSlotButton: React.FC = (props: TOwnProps): JSX.Element => {\n const { t: translate, l: language, defaultSlotsPath } = props;\n\n const emitBookASlotAnalyticsEvent = (): void => {\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD,\n value: BOOK_A_SLOT,\n action: DELAY,\n });\n };\n\n return (\n \n \n {translate('slots:fulfilment-card.not-booked.cta-button')}\n \n \n );\n};\n\nexport default helpers(['f', 'l', 't'])(connect(mapStateToProps)(BookSlotButton));\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { COLLECTION } from '#/constants/shopping-methods';\nimport helpers from '#/lib/decorators/helpers';\nimport OrderCreatedContextCard from '#/components/home/context-cards/order-created-context-card';\nimport OrderDueContextCard from '#/components/home/context-cards/order-due-context-card';\nimport WismoContextCard from '#/components/home/context-cards/wismo/wismo-context-card';\nimport AmendOrderContextCard from '#/components/home/amend-order-context-card';\nimport OrderAmendedContextCard from '#/components/home/context-cards/order-amended-context-card';\nimport SlotReservedContextCard from '#/components/home/context-cards/slot-reserved-context-card';\nimport NoSlotBookedContextCard from '#/components/home/context-cards/no-slot-booked-context-card';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { hasItems } from '#/lib/trolley/trolley-utils';\nimport {\n CREATED,\n ORDER_DUE,\n RESERVED,\n EXPIRED,\n BOOKED,\n RECEIVED,\n PENDING,\n AMENDED,\n ORDER_DUE_WITH_WISMO,\n SUPPORTED_PAYMENT_RETRY_OPTION,\n FAILED_PAYMENT_COLLECTION\n} from '#/constants/order-statuses';\nimport { getItems } from '#/selectors/trolley';\nimport { getLanguage, getTimezone } from '#/reducers/app';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport PaymentFailed from '../context-cards/wismo/components/payment-failed';\nimport { getIsAmongSlotBookingVariants } from '#/experiments/oop-1978/selectors';\nimport BookSlotButton from '#/experiments/oop-1978/components/book-slot';\nimport { CONTEXT_CARD_STATUSES } from '#/experiments/oop-1978/constants';\n\nconst mapStateToProps = (state, { c: config }) => {\n return {\n items: getItems(state),\n language: getLanguage(state),\n timezone: getTimezone(state),\n displayAsGuidePrice: config('displayAsGuidePrice'),\n checkoutInAmend: config('checkout:enableInAmendMode'),\n showBookASlotButton: getIsAmongSlotBookingVariants(state)\n };\n};\n\n@helpers(['c'])\n@connect(mapStateToProps)\nexport default class BookASlotContextCardHome extends Component {\n static propTypes = {\n address: PropTypes.object,\n c: PropTypes.func.isRequired,\n displayAsGuidePrice: PropTypes.bool.isRequired,\n items: PropTypes.array,\n language: PropTypes.string,\n order: PropTypes.shape({\n address: PropTypes.object,\n expiry: PropTypes.string,\n id: PropTypes.string,\n orderNo: PropTypes.string,\n shoppingMethod: PropTypes.string,\n slot: PropTypes.object,\n wismoSlot: PropTypes.shape({\n deliveryWindow: PropTypes.shape({\n end: PropTypes.string.isRequired,\n start: PropTypes.string.isRequired\n })\n }),\n status: PropTypes.string,\n guidePrice: PropTypes.number,\n showWismoStepper: PropTypes.bool,\n payment: PropTypes.shape({\n retryOption: PropTypes.oneOf([\n SUPPORTED_PAYMENT_RETRY_OPTION.ENABLED,\n SUPPORTED_PAYMENT_RETRY_OPTION.EXPIRED,\n SUPPORTED_PAYMENT_RETRY_OPTION.NOT_APPLICABLE\n ])\n })\n }),\n timezone: PropTypes.string.isRequired\n };\n\n slot = this.props.order?.slot;\n wismoSlot = this.props.order?.wismoSlot;\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n render() {\n return (\n
\n {this.getContent()}\n
\n );\n }\n\n fireContextCardAnalytics = cardName => {\n analyticsBus().emit('UIEventBasicEvent', {\n action: 'now',\n type: 'slots',\n value: `contextcard:${cardName}:impression`\n });\n };\n\n getOrderDueContextCard = () => {\n const { displayAsGuidePrice, order } = this.props;\n\n const {\n shoppingMethod,\n address,\n guidePrice,\n id,\n slot,\n orderNo,\n locationUuid\n } = order;\n\n return (\n \n );\n };\n\n getWismoContextCard = () => {\n const { order } = this.props;\n const {\n shoppingMethod,\n slot,\n address,\n guidePrice,\n orderNo,\n wismoSlot,\n showWismoStepper,\n locationUuid\n } = order;\n\n return (\n \n );\n };\n\n getContent() {\n const {\n order,\n c: config,\n checkoutInAmend,\n items,\n address,\n showBookASlotButton\n } = this.props;\n\n const NoSlotBookedContextCardComponent = showBookASlotButton\n ? BookSlotButton\n : NoSlotBookedContextCard;\n\n if (order !== null) {\n const now = this.formatDate();\n const expiryDate = this.formatDate(order.expiry);\n const isDue = now.isAfter(expiryDate);\n const status =\n (order.status === CREATED || order.status === RECEIVED) && isDue\n ? ORDER_DUE\n : order.status;\n const hasTrolleyItems = hasItems(items);\n\n switch (status) {\n case FAILED_PAYMENT_COLLECTION:\n this.fireContextCardAnalytics(CONTEXT_CARD_STATUSES.PAYMENT_FAILURE);\n return ;\n\n case RESERVED:\n case EXPIRED:\n case BOOKED:\n return ;\n\n case RECEIVED:\n case CREATED:\n case PENDING:\n this.fireContextCardAnalytics(CONTEXT_CARD_STATUSES.UPCOMING_ORDER);\n return ;\n\n case AMENDED:\n return (\n <>\n {config('enableAmendModeModal') && !checkoutInAmend ? (\n \n ) : (\n \n )}\n \n );\n case ORDER_DUE_WITH_WISMO:\n this.fireContextCardAnalytics(CONTEXT_CARD_STATUSES.WISMO);\n return this.getWismoContextCard();\n\n case ORDER_DUE:\n this.fireContextCardAnalytics(\n order.shoppingMethod === COLLECTION\n ? CONTEXT_CARD_STATUSES.DAY_OF_COLLECTION\n : CONTEXT_CARD_STATUSES.UPCOMING_ORDER\n );\n return this.getOrderDueContextCard();\n\n default:\n return ;\n }\n } else {\n return ;\n }\n }\n}\n","import React from 'react';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { basicEvent } from '#/analytics/types/basic';\nimport { CONTEXT_CARD, DELAY, BOOK_ANOTHER_SLOT } from '#/analytics/constants';\nimport ChevronLink from '../../link/chevron-link';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { compose } from 'react-recompose';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\n\ntype TOwnProps = {\n defaultSlotsPath: string;\n f: (featureKey?: string | string[] | undefined) => string;\n l: Function;\n t: (key: string, data?: object) => string;\n};\n\nconst mapStateToProps = (\n state: Store,\n { f }: TOwnProps,\n): {\n defaultSlotsPath: string;\n} => ({\n defaultSlotsPath: getDefaultSlotsPath(f)(state),\n});\nconst connector = connect(mapStateToProps);\ntype TProps = TOwnProps & ReturnType;\n\nconst emitBookASlotAnalyticsEvent = (): void => {\n basicEvent(analyticsBus, {\n type: CONTEXT_CARD,\n value: BOOK_ANOTHER_SLOT,\n action: DELAY,\n });\n};\n\nconst MultipleOrdersNotice: React.FC = (props: TProps) => {\n const bookASlotHref = props.l(props.defaultSlotsPath);\n const bookAnotherSlotText = props.t('common:pages.book-another-slot');\n return (\n
\n {props.t('common:pages.multiple-order-notice')}\n  \n \n {bookAnotherSlotText}\n \n
\n );\n};\nconst enhance = compose(helpers(['f', 'l', 't']), connector);\n\nexport default enhance(MultipleOrdersNotice);\n","import styled from 'styled-components';\nimport { mediumMin } from '#/constants/viewports';\n\n/**\n * DCS driven component and so margin-top is set with negative value.\n * This helps matching the design and also to avoid any change in parent component\n * when this doesn't render\n */\nexport const NotificationBannerWrapper = styled.div`\n padding: 0 6px;\n margin-top: -6px;\n\n @media (max-width: ${mediumMin}) {\n padding: 0;\n margin-top: 0;\n }\n`;\n\nNotificationBannerWrapper.displayName = 'NotificationBannerWrapper';\n","import React from 'react';\nimport { NotificationBannerWrapper } from './styled';\nimport { NotificationBanner, Panel } from '#/components/cms-driven';\nimport { renderTree } from '#/components/cms-driven/component-tree';\n\ntype OwnProps = {\n data: object;\n};\n\nconst TopNotification: React.FC = ({ data }: OwnProps) => {\n if (!data) {\n return null;\n }\n\n return {renderTree({ NotificationBanner, Panel }, [data])};\n};\n\nexport default TopNotification;\n","import styled from 'styled-components';\nimport { spacing } from '@beans/selectors';\nimport Link from '#/components/link-check-spa';\n\nexport const StyledBookAnotherSlotWrapper = styled.div`\n margin: calc(${spacing.sm} / 2);\n`;\n\nexport const StyledBookAnotherSlot = styled(Link)`\n margin: 0;\n\n &.button {\n border: 0;\n }\n`;\n","import React from 'react';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport { TFeatureFunc, TTranslateFunc } from '#/lib/records/helpers.defs';\nimport { getDefaultSlotsPath } from '#/reducers/slot';\nimport { TLanguageLink } from '#/components/slots/delivery-content-section/index.defs';\nimport { StyledBookAnotherSlot, StyledBookAnotherSlotWrapper } from './styled';\nimport analyticsBus from '#/analytics/analyticsBus';\n\nexport type TOwnProps = {\n defaultSlotsPath: string;\n f: TFeatureFunc;\n l: TLanguageLink;\n t: TTranslateFunc;\n};\n\nexport type TBookAnotherSlotProps = {\n shoppingMethod: string;\n};\n\ntype TStepsTemplateProps = TOwnProps & TBookAnotherSlotProps;\n\nconst mapStateToProps = (\n state: Store,\n { f }: TOwnProps,\n): {\n defaultSlotsPath: string;\n} => ({\n defaultSlotsPath: getDefaultSlotsPath(f)(state),\n});\n\nexport const BookAnotherSlot: React.FC = (props: TStepsTemplateProps): JSX.Element => {\n const { shoppingMethod, t: translate, l: language, defaultSlotsPath } = props;\n\n return (\n \n {\n analyticsBus().emit('UIEventBasicEvent', {\n action: 'delay',\n type: 'slots',\n value: `${shoppingMethod}:book another slot`,\n });\n }}\n to={language(defaultSlotsPath)}\n className=\"button button-secondary\"\n >\n {translate('common:pages.book-another-slot')}\n \n \n );\n};\n\nexport default helpers(['f', 'l', 't'])(connect(mapStateToProps)(BookAnotherSlot));\n","import React, { createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport moment from 'moment-timezone';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport helpers from '#/lib/decorators/helpers';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { exposeActiveTestData } from '#/lib/optimizely-manager';\nimport BrowseStoreButton from '#/components/shared/browse-store';\nimport SimpleButton from '#/components/shared/simple-button';\nimport UserGreeting from '#/components/home/user-greeting';\nimport BookASlotContextCard from '#/components/home/book-a-slot-context-card';\nimport CancelledContextCard from '#/components/home/cancelled-context-card';\nimport AmendOrderContextCard from '#/components/home/amend-order-context-card';\nimport MultipleOrdersNotice from '#/components/orders/multiple-orders-notice';\nimport {\n NAV_ITEM_HEIGHT,\n NAV_LIST_COLLAPSED_VERTICAL_PADDING\n} from '#/constants/ui';\nimport { ON_DEMAND } from '#/constants/shopping-methods';\nimport { CANCELLED } from '#/constants/order-statuses';\nimport { getNavList } from '#/reducers/taxonomy';\nimport {\n getIsMobile,\n getLanguage,\n getTimezone,\n getCutsMustard,\n getDeviceType\n} from '#/reducers/app';\nimport { getIsFirstTimeShopper } from '#/reducers/user';\nimport { getWismoConfiguration } from '#/selectors/order-list-details';\nimport { getDcsHomePageUnorderedComponentByID } from '#/selectors/home-page';\nimport analyticsBus from '#/analytics/analyticsBus';\nimport { getFavoritesLanguageLink } from '#/utils/favorite-utils';\nimport { TOP_NOTIFICATION } from './constants';\nimport TopNotification from './top-notification';\nimport FavNavLinkTooltipContainer from '#/experiments/oop-1263/components';\nimport { getShowFavNavLinkTooltip } from '#/experiments/oop-1263/selectors';\nimport WismoStarRating from '../context-cards/wismo/shared/wismo-star-rating';\nimport { getShouldShowHorizontalTaxonomy } from '#/experiments/oop-1734/selectors';\nimport Text from '@ddsweb/text';\nimport { OrderContext } from '#/context/order-context-provider';\nimport { InPageMessaging } from '@ddsweb/messaging';\nimport Heading from '@ddsweb/heading';\nimport {\n getIsAmongSlotBookingVariants,\n getIsNoFavsVariant\n} from '#/experiments/oop-1978/selectors';\nimport BookAnotherSlot from '#/experiments/oop-1978/components/book-another-slot';\nimport {\n BOOK_ANOTHER_SLOT_ORDER_STATUSES,\n CONTEXT_CARD_STATUSES\n} from '#/experiments/oop-1978/constants';\n\nconst mapStateToProps = state => ({\n favoritesLink: getFavoritesLanguageLink(state, '/favorites'),\n isMobile: getIsMobile(state),\n navItems: getNavList(state),\n topNotification: getDcsHomePageUnorderedComponentByID(TOP_NOTIFICATION)(\n state\n ),\n cutsMustard: getCutsMustard(state),\n deviceType: getDeviceType(state),\n isFirstTimeShopper: getIsFirstTimeShopper(state),\n wismoConfiguration: getWismoConfiguration(state),\n renderFavTooltip: getShowFavNavLinkTooltip(state),\n language: getLanguage(state),\n timezone: getTimezone(state),\n showBookASlotButtons: getIsAmongSlotBookingVariants(state),\n showFavButtons: !getIsNoFavsVariant(state),\n showHorizontalTaxonomy: getShouldShowHorizontalTaxonomy(state)\n});\n\n@connect(mapStateToProps)\n@helpers(['c', 't'])\nexport default class BannerSignedIn extends React.Component {\n static propTypes = {\n address: PropTypes.object.isRequired,\n c: PropTypes.func.isRequired,\n favoritesLink: PropTypes.string.isRequired,\n isAmendBasket: PropTypes.bool.isRequired,\n isMobile: PropTypes.bool.isRequired,\n navItems: PropTypes.array.isRequired,\n renderFavTooltip: PropTypes.bool.isRequired,\n slot: PropTypes.object.isRequired,\n t: PropTypes.func.isRequired,\n topNotification: PropTypes.object,\n trolleyItems: PropTypes.array.isRequired,\n user: PropTypes.object.isRequired,\n welcomeTranslations: PropTypes.object.isRequired,\n wismoConfiguration: PropTypes.object\n };\n\n constructor(props) {\n super(props);\n this.targetRef = createRef();\n }\n\n static contextType = OrderContext;\n\n componentDidMount() {\n const { wismoConfiguration } = this.props;\n\n const { experiment, variation, optimizelyAttrs: attributes } =\n wismoConfiguration || {};\n exposeActiveTestData({\n experiment,\n variation,\n attributes\n });\n }\n\n getMainBannerStyles() {\n return {\n minHeight: `${this.props.navItems.length * NAV_ITEM_HEIGHT +\n NAV_LIST_COLLAPSED_VERTICAL_PADDING}px`\n };\n }\n\n shouldShowMultipleOrdersNotice() {\n const { order } = this.context;\n const {\n isAmendBasket,\n trolleyItems,\n slot,\n showBookASlotButtons\n } = this.props;\n return (\n order && // there's a recent order\n !isAmendBasket && // the basket is NOT in amend mode\n trolleyItems.length === 0 && // the trolley has 0 items in it\n !slot && // there is no booked slot\n !showBookASlotButtons // the 'book another slot' button from oop-1978 experiment is not displayed\n );\n }\n\n shouldShowFavAndBrowseStoreCTA() {\n const { recentOrder, slot, showFavButtons } = this.props;\n\n return (\n (recentOrder &&\n BOOK_ANOTHER_SLOT_ORDER_STATUSES.includes(recentOrder?.status)) || // there's an upcoming order\n slot?.slotId || // there's a booked slot\n showFavButtons // the variations from oop-1978 which disables the button are not active\n );\n }\n\n favoritesLinkClickHandler = () => {\n analyticsBus().emit('UIEventBasicEvent', {\n action: 'delay',\n type: 'home',\n value: 'shop favourites'\n });\n };\n\n getTooltipContent = (domRef, boundingRef) => (\n \n );\n\n getDomRef = ref => {\n this.targetRef.current = ref;\n };\n\n formatDate = date => {\n return getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n };\n\n deliveryDayHasPassed(deliverySlot) {\n const today = moment()\n .utc()\n .tz(this.props.timezone);\n\n const slotEnd = this.formatDate(deliverySlot);\n const isPastDeliveryDay = today.isAfter(slotEnd, 'day');\n\n return isPastDeliveryDay;\n }\n\n getCustomerVariables() {\n const {\n cutsMustard,\n deviceType,\n isFirstTimeShopper,\n storeId,\n shoppingMethod,\n c: config\n } = this.props;\n\n const opinionLabRefererUrl =\n shoppingMethod === ON_DEMAND\n ? config('opinionLab:refererUrls:ondemandwismo')\n : config('opinionLab:refererUrls:wismo');\n\n return {\n cutsMustard: String(cutsMustard),\n deviceType: deviceType,\n isFirstTimeShopper: String(isFirstTimeShopper),\n storeId: storeId,\n url: opinionLabRefererUrl\n };\n }\n\n render() {\n const {\n isAmendBasket,\n c: config,\n t: translate,\n user,\n welcomeTranslations,\n favoritesLink,\n topNotification,\n address,\n renderFavTooltip,\n showBookASlotButtons,\n showHorizontalTaxonomy\n } = this.props;\n\n const { order } = this.context;\n const orderAddress = order?.address || address;\n const showCancelledContextCard =\n order?.status === CANCELLED &&\n !this.deliveryDayHasPassed(order?.slot.end);\n const showAmendOrderContextCard =\n isAmendBasket && config('showHomeAmendOrderContextCard');\n\n let ContextCard;\n let starRating = null;\n const updatePaymentError = order?.updatePaymentError === true;\n\n const updatePaymentDetailsError = (\n \n {translate(\n 'context-cards:wismo-context-card-update-payment-inpage-error-title'\n )}\n \n }\n variant=\"error\"\n >\n \n {translate(\n 'context-cards:wismo-context-card-update-payment-inpage-error-body'\n )}\n \n \n );\n\n if (showCancelledContextCard) {\n analyticsBus().emit('UIEventBasicEvent', {\n action: 'now',\n type: 'slots',\n value: `contextcard:${CONTEXT_CARD_STATUSES.CANCELLED_ORDER}:impression`\n });\n starRating = (\n \n );\n }\n\n if (showAmendOrderContextCard) {\n ContextCard = AmendOrderContextCard;\n } else {\n ContextCard = BookASlotContextCard;\n }\n\n let slotBookingContextCard = null;\n if (order && BOOK_ANOTHER_SLOT_ORDER_STATUSES.includes(order?.status)) {\n slotBookingContextCard = (\n \n );\n }\n\n const classes = classnames('main-banner main-banner--signed-in', {\n 'main-banner--overflow': !renderFavTooltip,\n 'main-banner--hidden-taxonomy': showHorizontalTaxonomy\n });\n return (\n
\n \n
\n {topNotification && }\n
\n \n
\n
\n {showCancelledContextCard ? (\n
\n \n
\n ) : (\n <>\n {updatePaymentError && updatePaymentDetailsError}\n \n \n )}\n
\n\n {this.shouldShowMultipleOrdersNotice() && }\n\n {showBookASlotButtons && slotBookingContextCard}\n\n {this.shouldShowFavAndBrowseStoreCTA() && (\n
\n \n
\n \n {renderFavTooltip && this.getTooltipContent(this.targetRef)}\n
\n
\n )}\n
\n
\n );\n }\n}\n","import React, { PureComponent } from 'react';\nimport { SectionMessage } from '../../cms-driven/section-message';\nimport Link from '../../link-check-spa';\nimport { emitRegisterAnalytics } from '#/analytics/helpers/register';\nimport { getLoginUrl, getRegisterUrl } from '#/reducers/app';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport PropTypes from 'prop-types';\n\nconst mapStateToProps = state => ({\n loginUrl: getLoginUrl(state),\n registrationUrl: getRegisterUrl(state)\n});\n@helpers(['t', 'c'])\n@connect(mapStateToProps)\nexport default class SignInRegisterNew extends PureComponent {\n static propTypes = {\n c: PropTypes.func.isRequired,\n loginUrl: PropTypes.string.isRequired,\n registrationUrl: PropTypes.string.isRequired,\n t: PropTypes.func.isRequired\n };\n\n handleClick = value => () => {\n emitRegisterAnalytics(value);\n };\n\n render() {\n const { t, c, loginUrl, registrationUrl } = this.props;\n return (\n
\n

\n {t('home:greeting-signed-out')}\n

\n
\n
\n \n
\n \n \n {t('common:sign-in')}\n \n
\n
\n
\n
\n \n
\n \n \n {t('common:register')}\n \n
\n \n \n );\n }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { ResponsiveImage as RImg } from '../../cms-driven';\nimport Link from '../../link-check-spa';\nimport helpers from '../../../lib/decorators/helpers';\n\n@helpers(['c', 't'])\nexport default class DeliveryDescription extends Component {\n static propTypes = {\n analyticsProps: PropTypes.object,\n c: PropTypes.func.isRequired,\n deliveryMeta: PropTypes.object.isRequired,\n onClick: PropTypes.func,\n t: PropTypes.func.isRequired\n };\n\n constructor(props) {\n super();\n this.clickHandler =\n typeof props.onClick === 'function'\n ? props.onClick.bind(null, props.analyticsProps)\n : undefined;\n }\n\n getLinkProps() {\n const { deliveryMeta, t: translate } = this.props;\n return {\n to: deliveryMeta['delivery-description.href'],\n onClick: this.clickHandler,\n title: translate('common:new-window'),\n target: '_blank',\n rel: 'noopener noreferrer'\n };\n }\n\n renderContent() {\n const { deliveryMeta, c: config } = this.props;\n\n const image = deliveryMeta['delivery-description.picture'];\n const pingImage = deliveryMeta['delivery-description.ping.picture'];\n const pictureBreakpoints = [\n {\n imageWidth: 200,\n screenWidth: 0\n },\n {\n imageWidth: 270,\n screenWidth: config('responsive:largeMin')\n },\n {\n imageWidth: 370,\n screenWidth: config('responsive:extraLargeMin')\n }\n ];\n const alternativeDesign = config('deliveryDescriptionAlternativeDesign');\n const doNotShowPicture = config('deliveryDescriptionDoNotShowPicture');\n\n const learnMore = deliveryMeta['delivery-description.learn-more'];\n return (\n <>\n {!doNotShowPicture && (\n
\n {image && (\n \n )}\n {pingImage && (\n \n )}\n
\n )}\n
\n
\n {deliveryMeta['delivery-description.delivered-by-tesco']}\n
\n
\n {deliveryMeta['delivery-description.line1.next-day']}\n {deliveryMeta['delivery-description.for-little']}\n \n {deliveryMeta['min-price']}\n \n \n
\n
\n \n {deliveryMeta['delivery-description.line2.click-collect']}\n \n {deliveryMeta['delivery-description.line2.for']}\n \n {deliveryMeta['delivery-description.line2.free']}\n \n
\n {!alternativeDesign ? (\n
{learnMore}
\n ) : (\n \n {learnMore}\n \n )}\n
\n \n );\n }\n\n render() {\n const { c: config } = this.props;\n\n const alternativeDesign = config('deliveryDescriptionAlternativeDesign');\n\n return (\n <>\n {!alternativeDesign ? (\n \n {this.renderContent()}\n \n ) : (\n \n {this.renderContent()}\n \n )}\n \n );\n }\n}\n","export default {\n CLICK_COLLECT: 1,\n DELIVERY_SAVER: 2,\n ORDER_ANYTIME: 3,\n TRIED_CLICK_AND_COLLECT: 4,\n SHOPPING_PICKED_PERSONALLY: 5,\n ORDER_HOMEWARE: 6\n};\n","export default {\n TWITTER: 1\n};\n","import category from './category';\nimport source from './source';\n\nexport function getMessageData(region) {\n const messageData = {\n UK: {\n meta: ['category', 'source', 'signature', 'message'],\n content: [\n [\n category.ORDER_ANYTIME,\n source.TWITTER,\n '',\n 'Order online anytime, anywhere. Then leave the rest to us. We’ll deliver to your door or car boot. Forgotten something? No problem. You can amend your order right up to 11.45pm the night before your slot. Shopping, sorted.'\n ],\n [\n category.TRIED_CLICK_AND_COLLECT,\n source.TWITTER,\n '',\n \"With over 500 locations across the country to collect from, you'll find a convenient, great-value slot that fits around your schedule. When it's your slot time, we'll have your shop ready and waiting for you. So now you're in the know, why not give it a go?\"\n ],\n [\n category.SHOPPING_PICKED_PERSONALLY,\n source.TWITTER,\n '',\n 'Want your bananas extra green or smaller jacket spuds? Just let us know. Add a note when you check out and we’ll pass it on to our pickers.'\n ],\n [\n category.ORDER_HOMEWARE,\n source.TWITTER,\n '',\n 'Did you know, you can order homeware, cookware, toys, computer games, and lots of other products with your weekly shop?'\n ]\n ]\n },\n IE: {\n meta: ['category', 'source', 'signature', 'message'],\n content: [\n [\n category.TRIED_CLICK_AND_COLLECT,\n source.TWITTER,\n '',\n 'With locations available nationwide to collect from, you can book a convenient slot, at a time that suits you for free. At your selected time, simply pull up at the designated Click+Collect area and pick-up your shop. So now you’re in the know, why not give it a go?'\n ],\n [\n category.ORDER_HOMEWARE,\n source.TWITTER,\n '',\n 'Did you know, you can order homeware, cookware, toys, computer games, and lot of other products with your weekly shop?'\n ]\n ]\n }\n };\n\n return messageData[region];\n}\n\nexport function getCategoryData(region) {\n const categoryData = {\n UK: {\n [category.CLICK_COLLECT]: {\n url: '/click-and-collect/',\n punchLine: 'Click. Collect. Devour.',\n moreInfo: 'More about Click+Collect'\n },\n [category.DELIVERY_SAVER]: {\n url: '/deliverysaver/',\n punchLine: 'A sweet deal on delivery.',\n moreInfo: 'More about Delivery Saver'\n },\n [category.ORDER_ANYTIME]: {\n url: null,\n punchLine: 'Shopping that works around you'\n },\n [category.TRIED_CLICK_AND_COLLECT]: {\n url: null,\n punchLine: 'Have you tried Click+Collect?'\n },\n [category.SHOPPING_PICKED_PERSONALLY]: {\n url: null,\n punchLine: 'Your shopping, picked personally'\n },\n [category.ORDER_HOMEWARE]: {\n url: '/groceries/en-GB/zone/Homeware',\n punchLine: 'Need a frying pan with your eggs?',\n moreInfo: 'See Home and Entertainment'\n }\n },\n IE: {\n [category.TRIED_CLICK_AND_COLLECT]: {\n url: null,\n punchLine: 'Have you tried Click+Collect?'\n },\n [category.ORDER_HOMEWARE]: {\n url: '/groceries/en-IE/shop/home-and-living/home-essentials/cookware',\n punchLine: 'Need a frying pan with your eggs?',\n moreInfo: 'See Home And Entertainment'\n }\n }\n };\n\n return categoryData[region];\n}\n\nexport const messagesMeta = ['category', 'source', 'signature', 'message'];\n\nexport const columnIndex = {\n category: messagesMeta.indexOf('category'),\n source: messagesMeta.indexOf('source'),\n signature: messagesMeta.indexOf('signature'),\n message: messagesMeta.indexOf('message')\n};\n","const TESCO_TWITTER_URL = 'https://twitter.com/Tesco';\nconst tescoReferenceRegEx = /@Tesco/gi;\n\nexport default function parseTweet(tweet, linkOptions) {\n const twitterLink = `@Tesco`;\n\n return tweet.replace(tescoReferenceRegEx, twitterLink);\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { findMessageByIndex } from '../../../lib/propositional-message';\nimport Link from '../../link-check-spa';\nimport helpers from '../../../lib/decorators/helpers';\nimport SafelyOutputString from '#/components/safely-output-string';\n\nconst PropositionalMessage = ({ messageIndex, c: config }) => {\n const twitterTab = 'propositionalTab';\n const region = config('REGION');\n const message = findMessageByIndex(messageIndex, {\n target: twitterTab,\n title: '',\n region\n });\n\n return (\n \n );\n};\n\nPropositionalMessage.propTypes = {\n c: PropTypes.func.isRequired,\n messageIndex: PropTypes.number,\n t: PropTypes.func.isRequired\n};\n\nPropositionalMessage.defaultProps = {\n messageIndex: 0\n};\n\nexport default helpers(['t', 'c'])(PropositionalMessage);\n","import generateRandomNumber from './generate-random-number';\nimport {\n columnIndex,\n getMessageData,\n getCategoryData\n} from './propositional-messages';\nimport source from './source';\nimport parseTweet from './parse-tweet';\n\nexport function generateRandomIndex(region) {\n const messageData = getMessageData(region);\n const msgDataLen = messageData?.content?.length || 0;\n\n return msgDataLen > 0 ? generateRandomNumber(msgDataLen) : 0;\n}\n\nexport function findMessageByIndex(index = 0, linkOptions) {\n const region = linkOptions.region;\n const messageData = getMessageData(region);\n const row = messageData.content[index];\n const categoryData = getCategoryData(region);\n const sourceId = row[columnIndex.source];\n const signature = row[columnIndex.signature];\n const categoryId = row[columnIndex.category];\n const category = categoryData[categoryId];\n const { moreInfo, punchLine, url } = category;\n\n const html =\n sourceId === source.TWITTER\n ? parseTweet(row[columnIndex.message], linkOptions)\n : row[columnIndex.message];\n\n return { html, moreInfo, punchLine, signature, url };\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport helpers from '#/lib/decorators/helpers';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport SignInRegister from '#/components/home/signin-register';\nimport BrowseStoreButton from '#/components/shared/browse-store';\nimport UserGreeting from '#/components/home/user-greeting';\nimport DeliveryDescription from '#/components/home/delivery-description';\nimport PropositionalMessage from '#/components/home/propositional-message';\nimport {\n NAV_ITEM_HEIGHT,\n NAV_LIST_COLLAPSED_VERTICAL_PADDING\n} from '#/constants/ui';\nimport { getNavList } from '#/reducers/taxonomy';\nimport { getIsMobile } from '#/reducers/app';\nimport { getDcsHomePageUnorderedComponentByID } from '#/selectors/home-page';\nimport { TOP_NOTIFICATION } from './constants';\nimport TopNotification from './top-notification';\nimport { getShouldShowHorizontalTaxonomy } from '#/experiments/oop-1734/selectors';\n\nconst mapStateToProps = state => ({\n isMobile: getIsMobile(state),\n navItems: getNavList(state),\n showHorizontalTaxonomy: getShouldShowHorizontalTaxonomy(state),\n topNotification: getDcsHomePageUnorderedComponentByID(TOP_NOTIFICATION)(state)\n});\n\n@helpers(['c'])\n@connect(mapStateToProps)\nexport default class BannerSignedOut extends React.Component {\n static propTypes = {\n analyticsProps: PropTypes.object,\n c: PropTypes.func.isRequired,\n deliveryMeta: PropTypes.object.isRequired,\n isMobile: PropTypes.bool.isRequired,\n navItems: PropTypes.array.isRequired,\n propositionalMessageIndex: PropTypes.number.isRequired,\n propositionClickHandler: PropTypes.func,\n topNotification: PropTypes.object,\n user: PropTypes.shape({\n displayName: PropTypes.string,\n isAuthenticated: PropTypes.bool.isRequired,\n isRegistered: PropTypes.bool.isRequired\n }).isRequired,\n welcomeTranslations: PropTypes.object.isRequired\n };\n\n getMainBannerStyles() {\n return {\n minHeight: `${this.props.navItems.length * NAV_ITEM_HEIGHT +\n NAV_LIST_COLLAPSED_VERTICAL_PADDING}px`\n };\n }\n\n render() {\n const {\n user,\n welcomeTranslations,\n showHorizontalTaxonomy,\n topNotification\n } = this.props;\n const classes = classnames('main-banner main-banner--signed-out', {\n 'main-banner--hidden-taxonomy': showHorizontalTaxonomy\n });\n\n return (\n
\n \n
\n {topNotification && }\n
\n \n
\n
\n
\n \n
\n
\n {this.getAdvertPanel()}\n
\n
\n \n
\n
\n
\n
\n );\n }\n\n getAdvertPanel() {\n const {\n c: config,\n propositionalMessageIndex,\n analyticsProps,\n deliveryMeta,\n propositionClickHandler\n } = this.props;\n\n if (config('propositionalMessageEnabled')) {\n return ;\n } else {\n return (\n \n );\n }\n }\n}\n","import styled from 'styled-components';\nimport { colors } from '@ddsweb/selectors';\n\nconst BannerBackgroundImage = styled.div`\n ${({ path }) =>\n path &&\n `\n background-image: url(${path});\n `}\n background-size: cover;\n background-color: ${colors.utils};\n background-repeat: no-repeat;\n height: 100%;\n width: 100%;\n overflow: hidden;\n position: absolute;\n z-index: 0;\n\n @media (min-width: 992px) {\n width: 100vw;\n }\n\n @media (min-width: 1200px) {\n left: calc((100vw - 1200px) / -2);\n }\n\n .ui-panel,\n picture img {\n height: 100%;\n }\n`;\nBannerBackgroundImage.displayName = 'BannerBackgroundImage';\n\nconst HomepageHeader = styled.div`\n position: relative;\n background: ${colors.utils};\n\n .browse-store--button,\n .browse-favorites--button {\n background: ${colors.background.base};\n border: none;\n color: ${colors.tescoBlue};\n margin-top: 0;\n margin-bottom: 0;\n }\n\n @media (min-width: 992px) {\n position: relative;\n max-width: 1200px;\n margin: 0 auto;\n }\n`;\nHomepageHeader.displayName = 'HomepageHeader';\n\nconst BackgroundOverlay = styled.div`\n background: rgba(0, 0, 0, 0.1);\n height: 100%;\n`;\n\nexport { BannerBackgroundImage, HomepageHeader, BackgroundOverlay };\n","import React from 'react';\nimport { Image, Panel } from '#/components/cms-driven';\nimport { renderTree } from '#/components/cms-driven/component-tree';\nimport { BannerBackgroundImage, BackgroundOverlay } from '#/components/pages/home/styled';\n\ntype TData = {\n props: {\n id: string;\n ordered: boolean;\n };\n children: object[];\n type: string;\n};\n\ntype OwnProps = {\n data: TData;\n fallbackImageSrc: string;\n};\n\nconst BackgroundImagePanel: React.FC = ({ data, fallbackImageSrc }: OwnProps) => {\n if (!data) {\n return (\n \n \n \n );\n }\n\n return (\n \n {renderTree({ Image, Panel }, [data])}\n \n \n );\n};\n\nexport default BackgroundImagePanel;\n","export const MFE_HOMEPAGE_ROLLOUT_EXPERIMENT = {\n variationKey: '2172-LEGO',\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { connect } from '#/lib/render/connect-deep-compare';\nimport {\n getCurrentUrl,\n getIsMobile,\n getAppRegion,\n getLanguage,\n getTimezone\n} from '#/reducers/app';\nimport {\n getUser,\n getIsUserRegistered,\n getIsUserAuthenticated\n} from '#/reducers/user';\nimport {\n getLastSelectedSlot,\n getIsTrolleyUpdating,\n getItems,\n getIsAmendBasket,\n getDeliveryLocation\n} from '#/selectors/trolley';\nimport { getHomePageResource } from '#/selectors/resources';\nimport { getBrowseEngineConfigFromState } from '#/selectors/resources/browse-engine';\nimport {\n getContextCardData,\n getHomePageAnalyticsData,\n getDcsHomePageUnorderedComponentByID\n} from '#/selectors/home-page';\nimport HomeContainer from '#/components/home/home-container';\nimport { DfpContainer } from '#/components/cms-driven';\nimport AnalyticsContentEvent from '#/components/analytics/content-event';\nimport MainBannerSignedIn from '#/components/home/main-banner/main-banner-signed-in';\nimport MainBannerSignedOut from '#/components/home/main-banner/main-banner-signed-out';\nimport helpers from '#/lib/decorators/helpers';\nimport dfpTargetingCreator from '#/lib/dfp-targeting-creator';\nimport { exposeActiveTestDataBatch } from '#/lib/optimizely-manager';\nimport {\n BACKGROUND_IMAGE,\n CONTEXT_CARD,\n BANNER_IMAGE\n} from '#/components/home/main-banner/constants';\nimport BackgroundImage from './background-image';\nimport { HomepageHeader } from './styled';\nimport { emitContentInteractOp } from '#/analytics/bertie/events';\nimport MultiSearchTooltipContainer from '#/experiments/oop-1824/components/mult-search-tooltip-container';\nimport { getIsNotificationBannerEnabled } from '#/experiments/oop-1824/selectors';\nimport { getRecentOrder } from '#/selectors/order-list-details';\nimport { OrderContextProvider } from '#/context/order-context-provider';\nimport { getTimezoneAndLocaleAppliedMoment } from '#/lib/date-helpers';\nimport { MFE_HOMEPAGE_ROLLOUT_EXPERIMENT } from '#/experiments/oop-2172/constants';\nimport { emitRenderedExperimentOpEvent } from '#/experiments/oop-2172/helpers/analytics';\n\nexport const mapStateToProps = state => {\n const isUserAuthenticated = getIsUserAuthenticated(state);\n const isAmendBasket = getIsAmendBasket(state);\n const backgroundImageData = getDcsHomePageUnorderedComponentByID(\n BACKGROUND_IMAGE\n )(state);\n\n return {\n address: getDeliveryLocation(state),\n analyticsData: getHomePageAnalyticsData(state),\n backgroundImageData,\n bookedSlot: getLastSelectedSlot(state),\n homePageResource: getHomePageResource(state),\n isAmendBasket,\n isUserAuthenticated,\n isUserRegistered: getIsUserRegistered(state),\n trolleyItems: getItems(state),\n trolleyUpdating: getIsTrolleyUpdating(state),\n user: getUser(state),\n currentUrl: getCurrentUrl(state),\n isMobile: getIsMobile(state),\n region: getAppRegion(state),\n contextCard: getContextCardData(CONTEXT_CARD)(state),\n isNotificationBannerEnabled: getIsNotificationBannerEnabled(state),\n recentOrder: getRecentOrder(state),\n language: getLanguage(state),\n timezone: getTimezone(state),\n browseEngineConfig: getBrowseEngineConfigFromState(state)\n };\n};\n\n@helpers(['asset', 't'])\n@connect(mapStateToProps)\nexport default class Home extends Component {\n static propTypes = {\n address: PropTypes.object,\n asset: PropTypes.func.isRequired,\n bookedSlot: PropTypes.object,\n cmsData: PropTypes.object,\n currentUrl: PropTypes.string,\n favoritesVariant: PropTypes.string,\n homePageResource: PropTypes.object.isRequired,\n isAmendBasket: PropTypes.bool.isRequired,\n isMobile: PropTypes.bool.isRequired,\n isNotificationBannerEnabled: PropTypes.bool.isRequired,\n isUserAuthenticated: PropTypes.bool,\n isUserRegistered: PropTypes.bool,\n language: PropTypes.string,\n recentOrder: PropTypes.object,\n region: PropTypes.string.isRequired,\n timezone: PropTypes.string,\n trolleyItems: PropTypes.array.isRequired,\n trolleyUpdating: PropTypes.bool.isRequired,\n user: PropTypes.object\n };\n\n componentClickHandler = componentData => {\n const {\n contentId,\n title: campaignTitle,\n posInPanel: posInModule,\n placement: modulePosition,\n catId,\n segments: contentSegment,\n ruleId,\n trackingId\n } = componentData;\n\n emitContentInteractOp({\n displayArea: 'm-of',\n pageType: 'home',\n panel: [\n {\n campaignId: trackingId || (contentId ? contentId.trim() : catId),\n campaignTitle,\n trackingId,\n contentSegment,\n posInModule,\n ruleId\n }\n ],\n modulePosition\n });\n };\n\n getWelcomeTranslations() {\n const { t: translate, isUserAuthenticated } = this.props;\n\n return {\n 'welcome-message': isUserAuthenticated\n ? translate('home:welcome-message')\n : translate('home:welcome-message-signed-out'),\n 'username-message': translate('home:welcome-name')\n };\n }\n\n formatDate = date =>\n getTimezoneAndLocaleAppliedMoment(\n date,\n this.props.timezone,\n this.props.language\n );\n\n getHeader({ homeConfig, propositionalMessageIndex, ...otherProps }) {\n const {\n isUserAuthenticated,\n isAmendBasket,\n trolleyItems,\n bookedSlot,\n address,\n user,\n recentOrder\n } = this.props;\n const deliveryMeta = homeConfig || {};\n const welcome = this.getWelcomeTranslations();\n const contextValue = {\n ...recentOrder,\n slotStart: this.formatDate(recentOrder.slot?.start),\n slotEnd: this.formatDate(recentOrder.slot?.end),\n deliveryStart: this.formatDate(\n recentOrder.wismoSlot?.deliveryWindow?.start\n ),\n deliveryEnd: this.formatDate(recentOrder.wismoSlot?.deliveryWindow?.end)\n };\n\n return isUserAuthenticated ? (\n \n \n \n ) : (\n \n );\n }\n\n componentDidMount() {\n const {\n isUserAuthenticated,\n homePageResource: { data: { experiments } = {} },\n region\n } = this.props;\n exposeActiveTestDataBatch(experiments);\n\n // This event to be triggered for UK only due to mfe-homepage traffic split\n if (region === 'UK' && isUserAuthenticated) {\n emitRenderedExperimentOpEvent(MFE_HOMEPAGE_ROLLOUT_EXPERIMENT);\n }\n }\n\n render() {\n const {\n analyticsData,\n asset,\n backgroundImageData,\n homePageResource,\n isAmendBasket,\n user,\n isUserAuthenticated,\n isMobile,\n region,\n contextCard,\n isNotificationBannerEnabled\n } = this.props;\n\n const { main } = homePageResource.data.content;\n const content = (\n \n );\n\n const targeting = dfpTargetingCreator({ user });\n\n const header = this.getHeader(contextCard);\n const showMiniTrolley = isUserAuthenticated && !isMobile;\n\n return (\n \n {isNotificationBannerEnabled && }\n \n {\n \n }\n {header}\n \n
\n \n
\n \n {content}\n \n
\n
\n \n \n );\n }\n}\n","import analyticsBus from '#/analytics/analyticsBus';\nimport { UI_EXPERIMENT_RENDERED } from '#/analytics/constants';\nimport { ExperimentOpPayload } from '#/experiments/oop-2172/types/analytics';\n\nexport const emitRenderedExperimentOpEvent = ({ variationKey }: ExperimentOpPayload): void =>\n analyticsBus().emit(UI_EXPERIMENT_RENDERED, { variationKey });\n","\n import '@babel/polyfill';\n import 'isomorphic-fetch';\n import render from '../lib/render/client-spa';\n import Home from '../components/pages/home';\n import { addToCache } from './lazy-component';\n\n // This tells Webpack the correct path to load bundles from.\n // Different environments and regions use different paths.\n // In development environments the Webpack devserver should be used instead (default behaviour).\n if (process.env.NODE_ENV !== 'development') {\n __webpack_public_path__ = document.documentElement.getAttribute('data-base-static-url') + '/';\n }\n\n addToCache('Home', Home);\n window.isSPA = true;\n\n render();\n"],"sourceRoot":""}