{"version":3,"sources":["config/config.env.ts","config/config.ts","widget/models/enum.ts","widget/brand/Brand.tsx","widget/header/Header.tsx","widget/chatservice/communicationService.ts","widget/util/commonUtil.ts","widget/message/Message.tsx","widget/message/MessageQrArticle.tsx","widget/util/dateTimeHelper.ts","find-a-wine/wine-type/wineTypeModel.ts","widget/message/orderTracking/orderTrackingService.ts","widget/chatservice/dialogflowQuery.ts","widget/message/MessageLink.tsx","widget/message/orderTracking/MessageUnit.tsx","widget/message/orderTracking/Single/MessageFailed.tsx","widget/message/orderTracking/Single/MessageDelayed.tsx","widget/message/orderTracking/Single/MessageInProgress.tsx","widget/message/orderTracking/Single/MessageDelivered.tsx","widget/message/orderTracking/Single/MessageAusPost.tsx","widget/message/orderTracking/Single/MessageOrderTrackingSingle.tsx","widget/message/orderTracking/Multiple/MessageConsignment.tsx","widget/message/orderTracking/Multiple/MessageOrderTrackingMultiple.tsx","widget/message/orderTracking/MessageSummary.tsx","widget/message/orderTracking/MessageOrderTracking.tsx","widget/message/MessageQR.tsx","widget/chatservice/zendeskApis.ts","widget/article/Vote.tsx","widget/message/MessageQuickEvent.tsx","widget/message/MessageQrDynamic.tsx","widget/ticket-form/TicketForm.tsx","widget/thank-you/ThankYou.tsx","widget/loader/Loader.tsx","widget/models/messageHandler.ts","widget/carousel/Arrow.tsx","widget/store/StoreDetails.tsx","actions/index.ts","actions/actionTypes.ts","widget/store-select/StoreSelect.tsx","widget/carousel/Carousel.tsx","widget/util/validators.ts","widget/message/LiveChatMessage.tsx","widget/checkbox/checkbox.tsx","widget/message/livechat/LiveChatUserForm.tsx","widget/message/livechat/LiveChatRating.tsx","widget/message/MessageLiveChatQR.tsx","widget/message/sessionHandling/ManualEndSession.tsx","widget/message/sessionHandling/AutoEndSession.tsx","widget/store-selector-detail/StoreSelectDetail.tsx","widget/store-selector/StoreSelector.tsx","widget/product-list-detail/ProductListDetail.tsx","widget/product-list/ProductList.tsx","widget/product-nearby-store-list-detail/ProductNearbyStoreListDetail.tsx","widget/product-nearby-store-list/ProductNearbyStoreList.tsx","find-a-wine/price/PriceModel.ts","find-a-wine/wine-type/WineType.tsx","find-a-wine/varietal/Varietal.tsx","find-a-wine/varietal/VarietalsModel.ts","find-a-wine/price/Price.tsx","find-a-wine/result-category/resultCatergory.tsx","widget/Widget.tsx","find-a-wine/results/Results.tsx","find-a-wine/recommendation-list/recommendationList.tsx","find-a-wine/cancel-faw/cancelFaw.tsx","find-a-wine/wine-merchant-redirect/WineMerchantRedirect.tsx","selectors/recommendedWines.ts","find-a-wine/FindAWine.tsx","widget/message/ArticleList.tsx","widget/SkeletonScreens/SkeletonScreenFAQs.tsx","widget/article/ArticleDetail.tsx","widget/message/ArticleListPayload.tsx","widget/chatservice/chatserverApis.ts","widget/message/verifiedOrderTracking/VerifiedOrderUtils.tsx","widget/SkeletonScreens/SkeletonScreenOrderTracking.tsx","widget/message/verifiedOrderTracking/OrderExpandedTile.tsx","widget/message/verifiedOrderTracking/VerifiedOrderList.tsx","widget/AgeVerification/AgeVerification.tsx","widget/chatservice/liveChat.ts","widget/message/livechat/LiveChatUserFormWeb.tsx","privacy-form/PrivacyForm.tsx","App.tsx","serviceWorker.ts","reducers/botData.ts","reducers/fawData.ts","reducers/productData.ts","reducers/index.ts","index.tsx"],"names":["config","CHATSERVER_URL","HEADER_TEXT","ARTICLE_TEXT","TICKET_FORM_HEADER_TEXT","MESSAGE_SENT","ZENDESK_FORM_ID","DAN_HELP_CENTRE_URL","DAN_CONTACT_US_FORM_URL","ENDEAVOUR_DELIVERY_URL","AUSPOST_URL","FRIENDLY_ERROR_MESSAGE","IDLE_MESSAGE","IDLE_MESSAGE_FOLLOW","IDLE_TIMEOUT","SESSION_ALIVE_PING","AUTOEND_TIMEOUT","COOKIES_CHATBOT_USER_ID_TEXT","COOKIES_ARTICLE_TOKEN_TEXT","COOKIES_LIVECHAT_SESSION","TRACK_ORDER_EMPTY_STATUS","ZENDESK_LIVECHAT_DEPARTMENT_ID","ZENDESK_LIVECHAT_GROUP_ID","ZENDESK_CHAT_CONNECTION","COOKIE_DOMAIN","APIMGT_KEY","FACEBOOK_CLOSE_WINDOW_URL","ALLOWED_CHARACTERS","ISSTAGING","SOURCE","isWebView","ISWEBVIEW","APPCLOSEURL","BWS_MY_ACCOUNT_URL","webview","URL","document","location","toString","searchParams","get","Boolean","MessageTypes","DialogflowQueryType","Speaker","FollowUpEventTypes","livechat","acceptanceIntent","vote","storeConfig","dialogflowEvent","orderTrackingStatusConfig","orderTrackingStatusMapping","orderTrackingConfig","Brand","isLiveChat","size","className","src","alt","Header","name","toggleWidget","closeButton","backToWidget","isAgentName","tabIndex","id","onClick","postMessageToClient","objCall","dataObj","JSON","stringify","window","parent","postMessage","toTitleCase","str","replace","txt","charAt","toUpperCase","substr","toLowerCase","isMobileOS","test","navigator","userAgent","getUniqueId","prefix","text","textId","split","join","getIntentGroupTypeId","groupName","handleAnalyticsBot","linkName","linkType","methodHandler","data","getStoreStatus","storeData","storeTradingStatus","StatusBackground","StoreCurrentStatus","storeTradingHours","trading_hours_all","simpleTradingStatus","nextOpenDayIndex","findIndex","x","slice","storeTodayStartHour","storeTodayStartDate","date","storeTodayStartTime","Date","getTime","currentTime","openHour","isDeliveryDateToday","value","deliveryDate","todaysDate","moment","format","Message","message","isHostDevice","messageListArray","setShowVerifyAge","setisOverlayScreenMounted","useState","addMessageClass","setAddMessageClass","addMargin","setAddMargin","showVerifyAgeMessage","setShowVerifyAgeMessage","useEffect","push","len","length","hasOwnProperty","prev","from","hasQr","System","isFirstBotMessageInConversation","showBotLabel","icon","shopper","User","BWS","Agent","undefined","MessageQrArticle","clickHandler","summary","weekday","Array","toDate","toDateString","getDST","isDST","convertTimeStringToMinutes","map","Number","hours","minutes","convertMinutesToTimeString","Math","floor","String","padStart","Types","getDeliveryTime","mapStatus","status","dueDateString","dateString","mappedStatus","getSummaryOpenerText","displayCourierNameText","consignment","courierName","carrierName","trim","urlTextQuery","urlEventQuery","requestPost","method","headers","body","eventQueryAsync","chatbotUserId","a","sessionId","isLCAvailable","additionalParams","params","Object","keys","forEach","key","event","parameters","fetch","response","json","result","console","log","type","textQueryAsync","updateAnalyticsStatus","userId","intentGroupId","isSuccessful","updateType","then","error","addAnalyticsEvent","eventName","queryId","intentGroupName","intentGroupTypeId","source","MessageLink","link","target","externalLink","Form","DynamicQr","Url","indexOf","href","preventDefault","stopPropagation","pathname","_","analyticsData","v4","prodDetailsUrl","storeId","storeName","queryString","i_cid","open","onClickHandler","rel","MessageUnit","info","MessageFailed","orderNumber","dateDisplayText","MessageDelayed","MessageInProgress","label","barCodeNumber","MessageDelivered","deliveredObj","MessageAusPost","orderTrackingUrl","MessageOrderTrackingSingle","trackingInfo","consignmentNotes","searchTermOrderNumber","expectedDeliveryDate","isDeliveryFailed","isDelivered","isDelayed","statusDate","isAusPost","trackingURL","MessageConsignment","totalNumberOf","index","isAllDelayed","isDeliveryDelayed","consignmentNumber","MessageOrderTrackingMultiple","consignments","every","c","MessageSummary","isMultiple","numberOfConsignments","MessageOrderTracking","setIsMultiple","numberOfDeliveries","filteredConsignments","filter","item","deliveryType","searchTermOrderName","MessageQR","eventText","quickReplyHandler","e","Text","URL_ARTICLE_FETCH","URL_ARTICLE_STATUS","URL_TICKET_CREATE","Vote","aria-label","articleId","resolveStatus","isOpened","isAccepted","isRejected","resolveArticle","Event","rejectStatus","rejectArticle","intentGroupInfo","followUpEventName","MessageQuickEvent","showTextResponse","MessageQrDynamic","callbackType","callback","url","TicketForm","showThankYou","setName","email","setEmail","tellMeMore","setTellMeMore","subjects","setSubjects","selectedSubject","setSelectedSubject","onSubmit","ticketObj","placeholder","onChange","required","disabled","selected","hidden","s","ThankYou","onGoBackClick","Loader","handleMessageNewRoutine","messageArray","interaction_access_token","storePayload","paStoreSelectPayload","productListPayload","productNearbyStoresPayload","selectStorePayload","i","isSelected","token","products","stores","Arrow","direction","activeIndex","itemsLength","StoreDetails","store","isDeliveryEnabled","isDelivery","isClickAndCollectEnabled","isPickup","facilities","includes","isDriveThrough","phone","storeContact","tomorrowDay","setTomorrowDay","store_trading_hours","statusBackground","setStatusBackground","storeCurrentStatus","setStoreCurrentStatus","setStoreTradingHours","todayDate","setDate","getDate","dayName","distance","addressLine1","state","postCode","day","toLocaleDateString","month","intentPayload","division","suburb","updateCurrentView","currentView","openPdp","pdpOpened","showFawPage","showFaw","showFAW","fetchProducts","reqData","APi_URL","dispatch","res","statusCode","productsData","catch","errorMessage","openPdpDansPage","wineLink","wineName","selectedType","intentData","prodDetailsLink","isBotOpenFirstTime","isWidgetOpenFirstTime","isCustomQueueMessageTriggered","messageTriggered","setChipsSelected","selection","chipSelection","setAddtlComments","comments","additionalComments","setShowOrderTrackingDetail","showDetail","showOrderTrackingDetail","setOrderForTile","orderDataExpandedTile","updateLastFollowUpEventName","lastFollowUpEventName","showVOCSurvey","showVocSurvey","StoreSelect","chooseWinePreference","timeStr1","timeStr2","fawOpen","setFawOpen","useDispatch","postcode","streetNumber","Carousel","setActiveIndex","itemLength","isValidEmail","LiveChatMessage","liveChatMessage","responseText","RegExp","garnishResponse","Checkbox","setCheckboxValue","checked","dangerouslySetInnerHTML","__html","LiveChatUserForm","closeUserForm","consent","setConsent","autoFocus","LiveChatRating","liveChatRating","liveChatAgent","setRatingValue","closeLiveChatRating","setLiveChatComment","useSelector","botData","additionalCommentsRevertValue","useRef","goodChipLabels","badChipLabels","goodChips","badChips","showAdditionalComments","setShowAdditionalComments","setChipsSelection","splice","setCompleteLiveChatCommentsForZendesk","renderChips","updateRating","isChipSelected","current","chipString","closeAdditionalComments","reverChanges","MessageLiveChatQR","callBackFn","ManualEndSession","screenText","endBotSession","timeoutType","endScreenMountingStyle","endSession","timeoutId","onclick","contains","setTimeout","clearTimeout","ref","AutoEndSession","openWelcomeMessage","setShowWelcomeMessage","autoEndBotSession","showWelcomeMessage","style","justifyContent","StoreSelectorDetail","setStore","setSelectedStoreData","selectedStoreId","selectedStoreName","parseInt","StoreSelector","formatStoreName","replaceAll","isMarketPlaceProduct","product","stockCode","startsWith","ProductListDetail","selectedStore","isMemberOffer","isSuperSaver","isLowPriceEveryday","isClearance","tags","tag","_tag","fileName","images","small","substring","lastIndexOf","isDeliveryOnly","availableInventoryQty","stockOnHand","getInventoryStatus","displayPrice","price","wasPrice","urlFriendlyName","productBrand","productName","trunc","toFixed","isOnlineOffer","nonMemberPrice","isDisplayOnly","analyticsCall","productData","productDetailsUrl","availablePackTypes","ProductList","ProductNearbyStoreListDetail","nearbyStore","storeAvailableQuantity","tradingHours","OpenHour","storeNo","ProductNearbyStoreList","nearbyStores","Prices","WineTypeMapping","WineType","Red","WhiteRose","ChampagneSparkling","NotSure","Varietal","updateVarietal","varietals","selectedVarietal","v","Varietals","PriceRangeMapping","Price","updatePrice","range","under10","under20","under30","under50","under75","under100","over100","any","ResultCatergory","fawRecommendation","categoryType","orientation","setOrientation","isMoving","setIsMoving","fawData","storeID","fawRecommendations","recommendationResults","setScreenOrientation","matchMedia","matches","addEventListener","swipeable","draggable","responsive","superLargeDesktop","breakpoint","max","min","items","partialVisibilityGutter","desktop","tablet","mobile","smallMobile","ssr","infinite","autoPlaySpeed","keyBoardControl","customTransition","transitionDuration","partialVisible","showDots","arrows","containerClass","dotListClass","centerMode","beforeChange","afterChange","focusOnSelect","currentTarget","parentNode","classList","openPDPpage","brandName","round","rating","review","imageURL","intervalFunction","timeoutAcceptance","globalBotTimeout","globalBotSessionAlive","lCQueueNotificationInterval","fawProps","RedVarietals","WhiteVarietals","SparklingVarietals","VarietalTypeMapping","Results","recommendedWines","bestSellers","topRatedSellers","newAndNoteworthySellers","isFetching","noResultDisplay","setNoResultDisplay","wineType","selectedWineType","priceRange","selectedPriceRange","varietal","RecommendationList","recommendationList","CancelFaw","lastSelectedScreen","onCancel","getStepNumber","WineMerchantRedirect","updateWineExpert","selectWineExpert","handleDone","getRecommendedWines","createSelector","productArray","brand","singlePrice","averageOverallRating","totalReviewCount","sku","salesRank","newAndNoteworthyRank","sort","b","FindAWine","resumeGlobalTimeout","recommendedWinesResult","fawWrapper","createElement","isFetchingRequired","setIsFetchingRequired","wineExpert","fawChildProps","sendAnalyticsTag","storeNumber","wineTypes","wineVarietal","getProducts","scrollTo","updateAnalytics","updateSelectedStore","getRecommendedList","recommendedList","showRecommendationText","getRecommendationText","isDisabled","channel","updateView","ArticleListProps","SkeletonScreenFAQs","Skeleton","variant","animation","width","height","ArticleDetail","isArticleFound","setIsArticleFound","articleStartRef","articleTitle","setArticleTitle","articleBody","setArticleBody","setArticleLink","articleLastUpdated","setArticleLastUpdated","viewStatus","viewArticle","scrollIntoView","behavior","scrollToStart","article","edited_at","articlePageName","html_url","parse","stringWithAppendedOutBoundIcon","articleBodyHtmlString","match","content","urlParts","appendOutboundIconAndAriaTag","articleToBeRendered","ArticleListPayloadProps","messages","m","URL_GREET_SHOPPER","URL_SHOPPER_GET_ORDER_DETAIL","AUTH_BACKWARD_COMPATIBILITY_SETTING","URL_SETTINGS_GET_FEATURE","URL_CONFIGURATIONS","requestGet","greetLoggedInShopper","shopperId","widgetSessionId","ak","getOrderDetailByShopperId","getAuthBackwardCompatibilitySetting","getFeatureSetting","featureName","getConfigSettings","getShippingStatus","shippingStatus","deliveryStatus","shippingIconUrl","SkeletonScreenOrderTracking","OrderExpandedTile","order","setMessages","featureDelGuarranteeMicroCopy","msgs","tileStartRef","React","isDataLoaded","setIsDataLoaded","lastDeliveryDate","setLastDeliveryDate","deliveryStartTime","setDeliveryStartTime","deliveryEndTime","setDeliveryEndTime","isDeliveryToday","setIsDeliveryToday","orderData","setOrderData","deliveryStatusIcon","setDeliveryStatusIcon","setDeliveryStatus","showAllProduct","setShowAllProduct","steps","stepsFailedDelivery","showProduct","setShowProduct","isFailed","setIsFailed","Map","deliveryMap","setDeliveryMap","allProducts","showProducts","processAcceptance","formatDateTimeStamp","time","getOrderStatusDateTime","orderType","statusDateList","find","statusName","statusDateTime","orderId","QuickReplyPayload","uri","sortedDates","deliveryBookingList","deliveryAtDate","deliveryTime","deliveryAtTime","step","orderConfirmedDate","set","orderPackedDate","orderOnItsWayDate","orderDeliveredDate","createdDate","deliveryBooking","QontoStepIconRoot","styled","display","alignItems","color","zIndex","fontSize","borderRadius","backgroundColor","QontoStepIcon","props","active","completed","Check","Connector","withStyles","alternativeLabel","top","borderColor","line","borderTopWidth","vertical","marginLeft","StepConnector","ConnectorFailed","Accordion","expanded","AccordionDetails","Typography","Stepper","activeStep","connector","Step","StepLabel","StepIconComponent","has","productImages","quantity","deliveryUpdate","trackingUrl","Button","endIcon","VerifiedOrderList","orderList","orderDate","isSubscription","deliveryCount","deliveryDatesAllConsignments","consignmentShippingTypes","shippingType","calculatedDeliveryDate","getShippingType","productImage","indexinner","backgroundImage","AgeVerification","showVerifyAge","verifyAge","timoutIdShowVerifyAge","closeAgeVerificationPage","cookies","Cookies","Widget","messagesEndRef","setIsHostDevice","input","setInput","loader","setLoader","openLiveChat","setOpenLiveChat","showWidget","setShowWidget","showMurphyPopup","setShowMurphyPopup","murphyTyping","setMurphyTyping","showArticle","setShowArticle","articleData","setArticleData","paSelectedStoreData","setPaSelectedStoreData","showTicketForm","setShowTicketForm","setShowThankYou","isBotOpenFromBWS","setIsBotOpenFromBWS","acceptIntentTriggeredOnQueryResp","setAcceptIntentTriggeredOnQueryResp","showInputTextBox","setShowInputTextBox","shouldInitWithWelcome","setShouldInitWithWelcome","showUserForm","setShowUserForm","firstName","setFirstName","showLiveChatRating","setShowLiveChatRating","setLiveChatRating","setEndScreenMountingStyle","isOverlayScreenMounted","showManualEndSessionScreen","setShowManualEndSessionScreen","autoEndSessionScreen","setAutoEndSessionScreen","showCloseAndSkip","setShowCloseAndSkip","showVOCLoader","setShowVOCLoader","setTimeoutType","setLCReviewDone","lCQueueMessage","setLCQueueMessage","isBwsSiteScrolling","setIsBwsSiteScrolling","unreadMessageCount","setUnreadMessageCount","agentNames","setAgentNames","agentChatCount","intentGroupPendingRenew","intentName","shopperEncryptedEmail","isChangeAlerted","isUserLoggedOn","isWidgetShown","isInitWelcomeShown","isLiveChatOn","liveChatHours","fawStoreName","fawStreetNumber","lcUserInitialPosition","liveChatUserInitialPosition","liveChatUserQueuePosition","customQueueMessageTriggered","setCurrentOrderId","featureSddPrompt","greetingTemplate","isGreetShopperCalledFromToggle","userAuthKey","userAuthKeyRetryCount","authenticationBackwardCompatibility","settingsRetryCount","widgetSessionIdLive","divFooterContainer","lastMessageTimeout","dialogFlowPing","manualDialogFlowPing","dialogflowEventQueryAsync","keepSessionAlive","processedMessages","processDFQueryResponse","addDelayToMessages","dialogflowTextQueryAsync","globalShopperDetails","deviceType","appVersion","overrideResponse","nextEventName","acceptanceRateTriggered","productAvailFollowUpTriggered","orderTrackingFollowUpTriggered","numberOfFAQArticles","Article","ArticleList","numberOfResponses","followUpEventMessage","FollowUpEventData","eventData","z","Command","SessionId","QueryId","IntentGroupId","IntentGroupName","IntentName","LastOrderChecked","ConditionalQr","isQRAllowed","QuickReply","setLiveChatHoursSubtext","ArticlePayload","updateIcidParam","setLiveChatHoursSubtextQr","dynamicQR","OrderTracking","ProductNearbyStore","acceptanceIntentName","getIntentName","timeout","initAcceptanceRate","Stores","initStoreLocatorAcceptanceRate","Product","VerifiedOrders","acceptanceName","acceptanceEventName","initOrderTrackingFollowup","initProductAvailAcceptanceRate","unavailable_response","followUpEventType","OrderTrackingAcceptance","CoolerFAQAcceptance","SDDFAQAcceptance","initDynamicFollowup","userSessionId","globalThis","executeCommand","commandName","helpUrl","icidParams","search","messageCounter","splitMessages","messageGroup","elem","lastTimeout","group","wordCount","messageText","subtext","messageType","qrText","isAllowed","commandText","initLiveChat","addToLiveChatMessages","options","liveChatMessages","opt","Qr","sendMessage","divTextBox","ownerDocument","getElementById","trimmedInput","innerText","regex","isSafeInput","queryType","showText","renew","textContent","globalBotTimeoutHandler","displayText","queuePosition","queueWaitingMessage","random","getLcQueueMessage","clearInterval","queueMessage","authKey","callGreetShopper","startBotSession","shopperIdParam","authKeyParam","Data","ShopperId","updateShopperId","StatusCode","LoggedInFirstName","LoggedInName","postClientToCloseBot","toggledByPopup","hasVoted","setInterval","openArticle","formedGreetingText","isVerifyAge","endLiveChat","ResetWidgetSettings","refreshWidgetSessionId","newId","uuid","setWidgetSessionId","path","domain","sameSite","secure","maxAge","isEnabled","messageHandler","localStorage","setItem","onChangeHandler","hostname","origin","sendMessageFromBackground","messageString","handleMurphyPopup","isScrolling","setShopperId","userShopperId","overflowY","scrollHeight","remove","closeMurphyPopup","fireAnalytics","displayMessages","useMemo","botMessages","lastBotMessageIndex","messagesWithDisplayProp","isFirstMessage","lastMessageType","getMessageParentClassName","classNames","handleBotTermination","surveyScreenTimeout","surveyScreenInitialLoadTimeout","KAMPYLE_ONSITE_SDK","updatePageView","mdJSON","action","formId","newHeight","manualEndScreenTimeout","visibility","toggleMessageBodyVisibility","PAStoreSelector","Help","LiveChatQr","End","QrEvent","ArticleListPayload","isQRPayloadLoaded","obj","isArray","el","contentEditable","onKeyDown","keyCode","spellCheck","autoCorrect","autoCapitalize","aria-autocomplete","LiveChatUserFormWeb","setPrivacyConsent","privacyConsent","htmlFor","defaultChecked","PrivacyForm","closeForm","WebviewSdk","hasFeature","features","close","MessengerExtensions","requestCloseBrowser","submit","requestConfig","conversationId","appId","projectId","userName","userEmail","axios","post","App","query","URLSearchParams","useLocation","defaultState","errorMsg","rootReducer","combineReducers","loggerMiddleware","createLogger","predicate","getState","environment","createStore","applyMiddleware","thunkMiddleware","ReactDOM","render","StrictMode","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.36299049.chunk.js","sourcesContent":["const config = {\r\n CHATSERVER_URL: 'https://api.edg.com.au/murphybot/chatserver',\r\n HEADER_TEXT: \"BWS Bot\",\r\n ARTICLE_TEXT: \"Help\",\r\n TICKET_FORM_HEADER_TEXT: \"Contact Us\",\r\n MESSAGE_SENT: \"Message Sent\",\r\n ZENDESK_FORM_ID: \"\",\r\n DAN_HELP_CENTRE_URL: \"https://wowbws.zendesk.com/hc/en-us\",\r\n DAN_CONTACT_US_FORM_URL: \"https://www.bws.com.au/contact?source=bot\",\r\n ENDEAVOUR_DELIVERY_URL: \"https://endeavourdelivery.com.au/track?search=\",\r\n AUSPOST_URL: \"https://auspost.com.au/mypost/track/#/details/\",\r\n FRIENDLY_ERROR_MESSAGE: \"Sorry but I’m having some technical issues. I’ll be back shortly\",\r\n IDLE_MESSAGE: \"Looks like you don't need any more help! I'm going to leave you alone now. I'm still here if you need me. You can close the chat window to end our chat or ask me another question.\",\r\n IDLE_MESSAGE_FOLLOW: \"Ask another question\",\r\n IDLE_TIMEOUT: 1000 * 60 * 10,\r\n SESSION_ALIVE_PING: 1000 * 60 * 8,\r\n AUTOEND_TIMEOUT: 1000 * 60 * 5,\r\n COOKIES_CHATBOT_USER_ID_TEXT: \"chatbotUserId\",\r\n COOKIES_ARTICLE_TOKEN_TEXT: \"chatbotLCArticleToken\",\r\n COOKIES_LIVECHAT_SESSION: \"chatbotDMSession\",\r\n TRACK_ORDER_EMPTY_STATUS: \"Please click the link below to view more details\",\r\n ZENDESK_LIVECHAT_DEPARTMENT_ID : '',\r\n ZENDESK_LIVECHAT_GROUP_ID : '',\r\n ZENDESK_CHAT_CONNECTION : '',\r\n COOKIE_DOMAIN : 'prdedgccslivraue.z8.web.core.windows.net',\r\n APIMGT_KEY: '7eb95db69b8a4a3a85ca9eb9a52e43b8',\r\n FACEBOOK_CLOSE_WINDOW_URL: \"https://www.messenger.com/closeWindow/?image_url=''&display_text=Closing%20window\",\r\n ALLOWED_CHARACTERS: /^[a-zA-Z0-9?*!:.,$%#_\\\\-\\\\~\\\\ô\\\\&\\\\+\\\\ö\\\\é\\\\è\\\\(\\\\)\\\\/\\\\'\\\\%\\\\ñ\\\\:\\\\ô\\\\\"\\\\@\\\\â\\\\ë\\\\á\\\\Ä\\\\°\\\\â\\\\«\\\\»\\\\ö\\\\ò\\\\É\\\\É\\\\’\\s`]+$/,\r\n ISSTAGING: false,\r\n SOURCE: isWebView() ? 'bwsapp' : 'bws',\r\n ISWEBVIEW : isWebView(),\r\n APPCLOSEURL : 'https://bot.close/?i_cid=bwsbot',\r\n BWS_MY_ACCOUNT_URL : 'https://bws.com.au/my-account'\r\n}\r\n\r\nfunction isWebView() {\r\n const params = new URL(document.location.toString()).searchParams;\r\n const webview = params.get(\"webview\");\r\n\r\n return Boolean(webview);\r\n}\r\n\r\nexport {\r\n config\r\n}","import { config } from './config.env';\r\n\r\nconst livechat = {\r\n HEADER_TEXT: `LIVE CHAT`,\r\n ENDCHAT_TIMEOUT : 1500,\r\n LIVECHAT_TIMEOUT : 1000 * 60 * 20,\r\n RATING_TIMEOUT: 3000\r\n} \r\n\r\n\r\nconst acceptanceIntent = {\r\n DEFAULT_TIMEOUT: 3000,\r\n NEARBY_STORES_TIMEOUT :6000,\r\n ARTICLES_FOLLOWUP_DEFAULT_TIMEOUT: 3000,\r\n ORDERTRACKING_AUTH_TIMEOUT: 3000,\r\n COOLER_ARTICLE_TIMEOUT: 5000,\r\n SDD_ARTICLE_TIMEOUT: 5000\r\n}\r\n\r\nconst vote = {\r\n QUESTION_TEXT: \"Does this article help answer your question?\",\r\n QUESTION_TEXT_ORDERTRACKING: \"Does this help answer your question?\",\r\n YES_TEXT: \"\\u{1F603} Yes\",\r\n NO_TEXT: \"\\u{1F97A} I need help\"\r\n}\r\n\r\nconst storeConfig = {\r\n STORE_NUMBER_IN_CAROUSEL: 5,\r\n GOOGLE_MAP_API_DIRECTION_URL: \"https://www.google.com/maps/dir/?api=1&destination=\",\r\n}\r\n\r\nconst dialogflowEvent = {\r\n End_Interaction: \"End_Interaction\",\r\n Chatbot_Additional_Questions: \"Chatbot_Additional_Questions\",\r\n Authenticated_Chatbot_Additional_Questions: \"Chatbot_Authenticated_Additional_Questions\",\r\n Chatbot_Contact_Options: \"Chatbot_Contact_Options\",\r\n Chatbot_Contact_Options_FAQList: \"Chatbot_Contact_Options_FAQList\",\r\n Authenticated_Chatbot_Contact_Options: \"Chatbot_Authenticated_Contact_Options\",\r\n Dans_Chatbot_Welcome: \"Dans_Chatbot_Welcome\",\r\n Chatbot_Article_FirstSuggestions: \"Chatbot_Article_FirstSuggestions\",\r\n KEEP_ALIVE: \"KEEP_ALIVE\",\r\n LIVECHAT_GETINTOUCH: \"LIVECHAT_GETINTOUCH\",\r\n ACCEPTANCE_RATE: \"ACCEPTANCE_RATE\",\r\n PRODUCTAVAIL_FOLLOWUP: \"PRODUCTAVAIL_FOLLOWUP\",\r\n Chatbot_FAW_Followup_Questions: \"Chatbot_FAW_Followup_Questions\",\r\n Chatbot_FAW_Try_Again: \"Chatbot_FAW_Try_Again\",\r\n Chatbot_FAW_Select_Store_Again: \"Chatbot_FAW_Select_Store_Again\",\r\n PRODUCT_AVAIL_FIND_NEARBY_STORES:\"PRODUCT_AVAIL_FIND_NEARBY_STORES\",\r\n ORDERTRACKING_AUTHENTICATED_FOLLOWUP: \"ORDERTRACKING_AUTHENTICATED_FOLLOWUP\",\r\n STORE_LOCATOR_Acceptance_Question: \"STORE_LOCATOR_Acceptance_Question\",\r\n PRODUCT_AVAIL_Acceptance_Question: \"PRODUCT_AVAILABILITY_Acceptance_Question\",\r\n ORDER_TRACKING_EXPANDEDTILE_NO: \"ORDER_TRACKING_EXPANDEDTILE_NO\",\r\n ORDER_TRACKING_EXPANDEDTILE_YES: \"ORDER_TRACKING_EXPANDEDTILE_YES\",\r\n ORDER_TRACKING_Acceptance_Question: \"ORDER_TRACKING_Acceptance_Question\",\r\n SDD_Acceptance_Question: \"SDD_Acceptance_Question\"\r\n}\r\n\r\nconst orderTrackingStatusConfig = {\r\n CONFIRMED: \"Confirmed\",\r\n PACKED: \"Packed\",\r\n ON_ITS_WAY: \"On its way\",\r\n DELIVERED: \"Delivered\",\r\n DELIVERY_FAILED: \"DeliveryFailed\",\r\n DELIVERY_CANCELLED: \"Delivery cancelled\",\r\n DELAYED: \"Delayed\"\r\n}\r\n\r\ntype statusMapping = { [key: string]: string };\r\n\r\nconst orderTrackingStatusMapping : statusMapping= { \r\n \"Manifest Received\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Placed\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Awaiting Pick\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Picking\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Packed\" : orderTrackingStatusConfig.PACKED,\r\n \"In transit to delivery depot\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Pickup Complete\" : orderTrackingStatusConfig.PACKED,\r\n \"Received in Depot\" : orderTrackingStatusConfig.PACKED,\r\n \"Consignment Merged\" : orderTrackingStatusConfig.PACKED,\r\n \"Out For Delivery\" : orderTrackingStatusConfig.ON_ITS_WAY,\r\n \"Consignment with Delivery Partner\" : orderTrackingStatusConfig.ON_ITS_WAY,\r\n \"Delivered - Left as Instructed\" : orderTrackingStatusConfig.DELIVERED,\r\n \"Delivered - Signed\" : orderTrackingStatusConfig.DELIVERED,\r\n \"Delivery attempt failed\" : orderTrackingStatusConfig.DELIVERY_FAILED,\r\n \"Consignment closed\" : orderTrackingStatusConfig.DELIVERED,\r\n \"Manifest Import Reversed\" : orderTrackingStatusConfig.DELIVERY_CANCELLED,\r\n \"Consignment Cancelled\" : orderTrackingStatusConfig.DELIVERY_CANCELLED,\r\n \"Consignment Confirmed\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"Picking in Progress\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"WithDriver\" : orderTrackingStatusConfig.ON_ITS_WAY,\r\n \"DriverNotAssigned\" : orderTrackingStatusConfig.DELIVERY_CANCELLED,\r\n \"Collected\" : orderTrackingStatusConfig.ON_ITS_WAY,\r\n \"DeliveryRequested\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"DriverAssigned\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"ArrivedForPickUp\" : orderTrackingStatusConfig.CONFIRMED,\r\n \"DeliveryFailed\" : orderTrackingStatusConfig.DELIVERY_FAILED\r\n}\r\n\r\nconst orderTrackingConfig = {\r\n QUICK_REPLY_TEXT: \"View detailed tracking\",\r\n REBOOK_REPLY_TEXT: \"Rebook your delivery\"\r\n}\r\n\r\nconst zendeskErrorConfig = {\r\n ERROR_RESPONSE_ARRAY : [\"Hmm... looks like I'm having some technical issues. Give it another try in a few minutes or reach out to the customer service team via email.\"\r\n ,\"Uh oh... Looks like someone unplugged me. Please retry live chat later or leave the customer service team a message.\"\r\n ,\"Oh no... Looks like someone switched around my wires and I can't connect you to live chat right now. Please try again in a few minutes or get in touch with the customer service team via email.\"]\r\n}\r\n\r\nexport {\r\n config,\r\n vote,\r\n dialogflowEvent,\r\n storeConfig,\r\n orderTrackingStatusMapping,\r\n orderTrackingStatusConfig,\r\n livechat,\r\n acceptanceIntent,\r\n orderTrackingConfig,\r\n zendeskErrorConfig\r\n}","enum MessageTypes {\r\n Message = \"message\",\r\n Qr = \"qr\",\r\n Article = \"article\",\r\n Help = \"help\",\r\n Form = \"form\",\r\n End = \"end\",\r\n Stores = \"store\",\r\n Direction = \"direction\",\r\n QrEvent = 'qe',\r\n OrderTracking = 'ordertracking',\r\n DynamicQr = 'dqr',\r\n Command = 'command',\r\n LiveChatMessage = 'livechatmessage',\r\n ConditionalQr = \"conditionalqr\",\r\n LiveChatQr = \"livechatqr\",\r\n SessionId = \"session_id\",\r\n PAStoreSelector = \"pa-store-select\",\r\n Product = \"product-list\",\r\n ProductNearbyStore=\"product-nearby-store-list\",\r\n StoreSelector = \"store-select\",\r\n Url = \"url\",\r\n ArticleList = \"article-list\",\r\n QuickReply = \"quickReply\",\r\n IntentGroupId = \"intent_group_id\",\r\n IntentGroupName = \"intent_group_name\",\r\n IntentName = \"intent_name\",\r\n QueryId = \"query_id\",\r\n QuickReplyPayload = \"qrPayload\",\r\n ArticlePayload = \"articlePayload\",\r\n VerifiedOrders = \"verifiedOrders\",\r\n LastOrderChecked = \"last_order_checked\",\r\n FollowUpEventData = \"followup_event_data\",\r\n}\r\n\r\nenum DialogflowQueryType {\r\n Text = \"text\",\r\n Event = \"event\"\r\n}\r\n\r\nenum Speaker {\r\n User = \"user\",\r\n Agent = \"agent\",\r\n System = \"system\",\r\n BWS = \"bws\"\r\n}\r\n\r\nenum FollowUpEventTypes {\r\n OrderTrackingAcceptance = \"OrderTrackingAcceptance\",\r\n CoolerFAQAcceptance = \"CoolerFAQAcceptance\",\r\n SDDFAQAcceptance = \"SDDFAQAcceptance\"\r\n}\r\n\r\nexport {\r\n MessageTypes,\r\n DialogflowQueryType,\r\n Speaker,\r\n FollowUpEventTypes\r\n}","import React from 'react'\r\nimport './brand.scss'\r\n\r\ntype size = {\r\n isLiveChat?: boolean,\r\n size?: string\r\n}\r\n\r\nconst Brand = ({isLiveChat, size} : size) => {\r\n return (\r\n
\r\n { !isLiveChat && \r\n
\r\n }\r\n\r\n { isLiveChat &&\r\n \"BWS\"\r\n\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default Brand\r\n","import React from 'react'\r\nimport './header.scss';\r\nimport Brand from '../brand/Brand';\r\nimport { config, livechat } from '../../config/config';\r\n\r\ntype HeaderProps = {\r\n name: string; \r\n toggleWidget: () => void;\r\n closeButton: () => void;\r\n backToWidget: () => void;\r\n isAgentName: boolean;\r\n}\r\n\r\nconst Header = ({name, toggleWidget, closeButton, backToWidget, isAgentName}: HeaderProps) => {\r\n return (\r\n
\r\n\r\n { name === config.HEADER_TEXT || name === livechat.HEADER_TEXT || isAgentName ? \r\n
\r\n \r\n
:\r\n
\r\n \"back\"\r\n
\r\n }\r\n\r\n
\r\n {name}\r\n
\r\n\r\n {\r\n !config.ISWEBVIEW && \r\n
\r\n \"minimize\"\r\n
\r\n }\r\n\r\n
\r\n \"close\"\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Header\r\n \r\n\r\n \r\n","const postMessageToClient = (objCall: any) => {\r\n const dataObj = JSON.stringify(objCall);\r\n window.parent.postMessage(dataObj, '*'); \r\n}\r\n\r\nexport {\r\n postMessageToClient\r\n}","import moment from \"moment\";\r\nimport { postMessageToClient } from \"../chatservice/communicationService\";\r\n\r\nconst toTitleCase = (str: string) => {\r\n return str.replace( /\\w\\S*/g, function(txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n }\r\n );\r\n}\r\n\r\nconst pickRandomString = (arr : string[]) => {\r\n var index = Math.floor(Math.random() * arr.length); \r\n return arr[index];\r\n}\r\n\r\nconst getOrdinalSuffix = (n: number) => {\r\n return[\"st\",\"nd\",\"rd\"][((n+90)%100-10)%10-1]||\"th\"\r\n}\r\n\r\n\r\nconst isMobileOS = () => {\r\n return (/Android|aarch64|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent))\r\n}\r\n\r\nconst getUniqueId = (prefix:string, text: string) => {\r\n const textId = text?.split(' ')?.join('-')?.toLowerCase();\r\n return `${prefix?.toLowerCase()}-${textId}`;\r\n}\r\n\r\nconst getWordCount = (text:string) => {\r\n if (text === null || text.length === 0) return 0;\r\n \r\n var words = text.split(' ');\r\n return words.length;\r\n}\r\n\r\nconst getIntentGroupTypeId = (groupName:string) => {\r\n switch (groupName?.toLowerCase())\r\n {\r\n case \"faq\": return 1;\r\n case \"livechat\": return 2;\r\n case \"welcome\": return 3;\r\n case \"firstsuggestions\": return 4;\r\n case \"ordertracking\": return 5;\r\n case \"storelocator\": return 6;\r\n case \"productavailability\": return 7;\r\n case \"menu\": return 8;\r\n case \"findawine\": return 9;\r\n case \"authenticate\": return 10;\r\n case \"ignore\": return 0;\r\n default: return 0;\r\n }\r\n}\r\n\r\nconst handleAnalyticsBot = (linkName: string, linkType: string, methodHandler:string ) => {\r\n const objCall = {\r\n data : {\r\n linkName : linkName,\r\n linkType: linkType,\r\n },\r\n methodHandler : methodHandler\r\n };\r\n postMessageToClient(objCall);\r\n}\r\n\r\n//function to get store trading hours status\r\nconst getStoreStatus = (storeData:any) => {\r\n const storeTradingStatus = {\r\n\r\n StatusBackground : \"\",\r\n StoreCurrentStatus :\"\",\r\n storeTradingHours : \"\"\r\n }\r\n if (storeData?.trading_hours_all[0]?.simpleTradingStatus === null) {\r\n storeTradingStatus.StatusBackground = \"storeDetail__status-today-closed\";\r\n storeTradingStatus.StoreCurrentStatus = \"Closed now\";\r\n\r\n let nextOpenDayIndex = storeData.trading_hours_all?.findIndex(\r\n (x: any) => x.simpleTradingStatus !== null\r\n );\r\n\r\n let data =storeData.trading_hours_all[nextOpenDayIndex]?.simpleTradingStatus[1]?.split(\" \")[1].slice(0, 3);\r\n\r\n storeTradingStatus.storeTradingHours = `opens at ${storeData.trading_hours_all[nextOpenDayIndex]?.simpleTradingStatus[2]?.toUpperCase()}, ${data}`;\r\n } else {\r\n if (storeData.trading_hours_all[0]?.simpleTradingStatus[0]?.toLowerCase() === \"closed now\") {\r\n storeTradingStatus.StatusBackground = \"storeDetail__status-today-closed\";\r\n\r\n let storeTodayStartHour = storeData.trading_hours_all[0]?.simpleTradingStatus[1];\r\n let storeTodayStartDate = storeData.trading_hours_all[0]?.date?.split(\"T\")[0];\r\n let storeTodayStartTime = new Date(storeTodayStartDate + \" \" + storeTodayStartHour).getTime();\r\n let currentTime = new Date().getTime();\r\n\r\n storeTradingStatus.StoreCurrentStatus = \"Closed now\";\r\n\r\n if (currentTime < storeTodayStartTime) {\r\n storeTradingStatus.storeTradingHours = `opens at ${storeData.trading_hours_all[0]?.simpleTradingStatus[1]?.toUpperCase()}`;\r\n } else {\r\n let nextOpenDayIndex = storeData.trading_hours_all?.findIndex(\r\n (x: any) => x.simpleTradingStatus !== null\r\n );\r\n\r\n let data = storeData.trading_hours_all[nextOpenDayIndex + 1]?.simpleTradingStatus[1]?.split(\" \")[1].slice(0, 3);\r\n\r\n storeTradingStatus.storeTradingHours = `opens at ${storeData.trading_hours_all[1]?.simpleTradingStatus[2]}, ${data}`;\r\n }\r\n } else if (storeData.trading_hours_all[0]?.simpleTradingStatus[0]?.toLowerCase() === \"closing soon\") {\r\n storeTradingStatus.StoreCurrentStatus = \"Closing soon\" ;\r\n storeTradingStatus.StatusBackground = \"storeDetail__status-closing-soon\"\r\n storeTradingStatus.storeTradingHours = storeData.trading_hours_all[0]?.openHour?.toUpperCase();\r\n\r\n } else if (storeData.trading_hours_all[0]?.simpleTradingStatus[0]?.toLowerCase() === \"opening soon\") {\r\n storeTradingStatus.StoreCurrentStatus = \"Opening soon\" ;\r\n storeTradingStatus.StatusBackground = \"storeDetail__status-opening-soon\"\r\n storeTradingStatus.storeTradingHours = storeData.trading_hours_all[0]?.openHour?.toUpperCase();\r\n\r\n } else {\r\n storeTradingStatus.StoreCurrentStatus = \"Open now\" ;\r\n storeTradingStatus.StatusBackground = \"storeDetail__status-today-open\";\r\n storeTradingStatus.storeTradingHours = storeData.trading_hours_all[0]?.openHour?.toUpperCase();\r\n }\r\n }\r\n return storeTradingStatus;\r\n }\r\n\r\nconst isDeliveryDateToday = (value:string)=> {\r\n const deliveryDate = value?.split('T')[0];\r\n const todaysDate = new Date();\r\n const todaysDateFormatted = moment(todaysDate).format('YYYY-MM-DD')\r\n return todaysDateFormatted === deliveryDate ? true : false\r\n}\r\n\r\nexport { \r\n toTitleCase,\r\n pickRandomString,\r\n getOrdinalSuffix,\r\n isMobileOS,\r\n getUniqueId,\r\n getWordCount,\r\n getIntentGroupTypeId,\r\n handleAnalyticsBot,\r\n getStoreStatus,\r\n isDeliveryDateToday\r\n}","import React,{useEffect,useState} from 'react'\r\nimport './message.scss';\r\nimport Brand from '../brand/Brand';\r\nimport { Speaker } from '../models/enum';\r\nimport { MessageModel } from '../models/messageModel';\r\nimport { handleAnalyticsBot, isMobileOS } from '../../widget/util/commonUtil'\r\n\r\ntype messageProps = {\r\n message: MessageModel,\r\n isHostDevice: boolean ,\r\n messageListArray: MessageModel[],\r\n setShowVerifyAge: (type: boolean) => void,\r\n setisOverlayScreenMounted: (type: boolean) => void,\r\n};\r\n\r\nconst Message = ({message, isHostDevice, messageListArray, setShowVerifyAge,setisOverlayScreenMounted}: messageProps) => {\r\n const [addMessageClass, setAddMessageClass] = useState('');\r\n const [addMargin, setAddMargin] = useState('large-margin');\r\n const [showVerifyAgeMessage, setShowVerifyAgeMessage] = useState(false);\r\n\r\n const clickHandler = () => {\r\n handleAnalyticsBot(`${isMobileOS() ? 'app' : 'web'}:chatbot:nsw id verification:read whats changing`, 'chatbot nsw id verification', 'chatbotTriggerAdobeAnalytics');\r\n setShowVerifyAge(true)\r\n setisOverlayScreenMounted(true)\r\n } \r\n\r\n useEffect(() => {\r\n messageListArray.push(message);\r\n const len = messageListArray.length;\r\n if(message.hasOwnProperty('isVerifyAge')){\r\n setShowVerifyAgeMessage(true);\r\n }\r\n \r\n if (len > 1) {\r\n const prev = messageListArray[len - 2];\r\n \r\n if (message.from === 'user' || message.from === 'bws') {\r\n if (!prev?.from) {\r\n setAddMargin('large-margin')\r\n } else if (prev.from === 'user') {\r\n setAddMargin('user-message-margin');\r\n }\r\n } else if (!message.from) {\r\n if ((!prev?.from && !prev?.hasQr) || prev.from === 'bws') {\r\n setAddMargin('small-margin')\r\n } else {\r\n setAddMargin('large-margin');\r\n }\r\n }\r\n }\r\n \r\n if (message.from !== 'user' && message !== null && message.from !== Speaker.System) setAddMessageClass('message__text--bot');\r\n\r\n }, []);\r\n \r\n return (\r\n
\r\n \r\n {message.showBotLabel && (\r\n
\r\n \r\n BWS BOT\r\n
)\r\n }\r\n\r\n {showVerifyAgeMessage && \r\n
\r\n \"\"\r\n
\r\n {message.text}\r\n \r\n
\r\n
\r\n }\r\n\r\n
\r\n {\r\n message.from === Speaker.System && !showVerifyAgeMessage &&\r\n \r\n
\r\n \r\n { message.icon && message.icon !== '' && \"system-icon\" } \r\n \r\n \r\n { message.text }\r\n {\r\n message.shopper && message.shopper !== '' &&\r\n  { message.shopper } \r\n }\r\n \r\n \r\n
\r\n }\r\n\r\n {\r\n message.from === Speaker.User &&\r\n
\r\n { message.text }\r\n
\r\n }\r\n\r\n {\r\n (message.from === Speaker.BWS || message.from === Speaker.Agent || message.from === undefined || message.from === null) &&\r\n
\r\n { message.text }\r\n
\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Message","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport './messageQrArticle.scss';\r\n\r\ntype MessageQrArticleProps = {\r\n message: any,\r\n clickHandler: any\r\n}\r\n\r\nconst MessageQrArticle = ({message, clickHandler}: MessageQrArticleProps) => {\r\n return (\r\n
\r\n
clickHandler(message)} tabIndex={0}>\r\n {message.text}\r\n
\r\n
\r\n {message.summary}\r\n \"\"\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MessageQrArticle\r\n","\r\nimport { sortBy } from 'lodash';\r\nimport moment from 'moment';\r\n\r\ntype tradingHour = {\r\n date: Date,\r\n text: string,\r\n hours: string\r\n}\r\n\r\nconst weekday = new Array(7);\r\nweekday[0] = \"Sunday\";\r\nweekday[1] = \"Monday\";\r\nweekday[2] = \"Tuesday\";\r\nweekday[3] = \"Wednesday\";\r\nweekday[4] = \"Thursday\";\r\nweekday[5] = \"Friday\";\r\nweekday[6] = \"Saturday\";\r\n\r\nconst isToday = (date: Date) => {\r\n const today = new Date()\r\n return date.getDate() === today.getDate() && date.getMonth() === today.getMonth() && date.getFullYear() === today.getFullYear();\r\n}\r\n\r\nconst isTomorrow = (date: Date) => {\r\n const today = new Date();\r\n return date.getDate() === today.getDate() + 1 && date.getMonth() === today.getMonth() && date.getFullYear() === today.getFullYear();\r\n}\r\n\r\nconst tradingHoursFormatter = (rawTradingHours: any) : Array => {\r\n let formatted: Array = [];\r\n\r\n formatted = Object.keys(rawTradingHours).map((t: string) => {\r\n let date = new Date(t);\r\n let text = isToday(date) ? 'Today' : isTomorrow(date) ? 'Tomorrow' : weekday[date.getDay()];\r\n let hours = rawTradingHours[t].stringValue;\r\n return {\r\n date: date,\r\n text: text,\r\n hours: hours\r\n }\r\n });\r\n\r\n const result = sortBy(formatted, 'date');\r\n \r\n return result;\r\n}\r\n\r\nconst isPast = (dateString: string) => {\r\n if (dateString === '' || dateString === null || dateString === undefined) {\r\n return false;\r\n }\r\n\r\n const today = new Date();\r\n const date = new Date(dateString);\r\n return today > date;\r\n}\r\n\r\nconst toDate = (value: string) => {\r\n if (value === '' || value === null || value === undefined) {\r\n return 'N/A';\r\n }\r\n\r\n let dateObj = new Date(value);\r\n return dateObj.toDateString();\r\n}\r\n\r\nconst getDST = (): string => {\r\n const date = new Date();\r\n return moment(date).isDST() ? 'AEDT' : 'AEST';\r\n}\r\n\r\nconst convertTimeStringToMinutes = (value:string) => {\r\n // Parse the time string\r\n var [hours, minutes, seconds] = value?.split(\":\").map(Number);\r\n // Calculate total minutes\r\n var minutes = hours * 60 + minutes;\r\n return minutes;\r\n}\r\n\r\nfunction convertMinutesToTimeString(value:number) {\r\n var hours = Math.floor(value / 60);\r\n var minutes = value % 60;\r\n var seconds = 0; // Assuming you want seconds to be 0\r\n // Formatting with leading zeros\r\n var time = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\r\n return time;\r\n}\r\n\r\nconst getDeliveryTime = (value: string): string[] => {\r\n const deliveryStartTime = convertMinutesToTimeString(convertTimeStringToMinutes(value) - 30);\r\n const deliveryEndTime = convertMinutesToTimeString(convertTimeStringToMinutes(value) + 30);\r\n return [deliveryStartTime, deliveryEndTime];\r\n}\r\n\r\nexport { \r\n tradingHoursFormatter,\r\n isPast,\r\n toDate,\r\n getDST,\r\n getDeliveryTime\r\n}","import { WineType } from '../models/fawTypes';\r\n\r\nenum Types {\r\n Red = \"Red\",\r\n WhiteRose = \"White & rosé\",\r\n ChampagneSparkling = \"Champagne/sparkling\",\r\n NotSure = \"I'm not sure\"\r\n}\r\n\r\nconst WineTypeMapping: WineType = {\r\n \"Red\": [\"Red\"],\r\n \"White & rosé\": [\"White\", \"Rose\"],\r\n \"Champagne/sparkling\": [\"Champagne\", \"Sparkling\"],\r\n \"I'm not sure\": [],\r\n}\r\n\r\n\r\n\r\nexport { Types, WineTypeMapping }","\r\nimport { orderTrackingStatusMapping, orderTrackingStatusConfig } from '../../../config/config';\r\nimport { isPast } from '../../util/dateTimeHelper';\r\n\r\nconst mapStatus = (status: string, dueDateString: string) : string => {\r\n let mappedStatus = orderTrackingStatusMapping[status] || status;\r\n\r\n if (isPast(dueDateString) && \r\n mappedStatus !== orderTrackingStatusConfig.DELIVERED && \r\n mappedStatus !== orderTrackingStatusConfig.DELIVERY_CANCELLED &&\r\n mappedStatus !== status) {\r\n mappedStatus = orderTrackingStatusConfig.DELAYED;\r\n }\r\n\r\n return mappedStatus || \"N/A\";\r\n}\r\n\r\nconst filterByNonePickUp = (consignmentNotes: any) => {\r\n // 'Pickup' means courier picking up from Endeavour\r\n return consignmentNotes.filter((item: any) => item.deliveryType !== 'Pickup'); \r\n}\r\n\r\nconst getSummaryOpenerText = (message: any) => {\r\n // todo: return different text based on status\r\n return message.text;\r\n}\r\n\r\nconst displayCourierNameText = (consignment: any) => {\r\n const courierName = consignment.courierName || '';\r\n const carrierName = consignment.carrierName || '';\r\n \r\n if(carrierName) {\r\n return carrierName.trim().toLowerCase() === 'endeavour own fleet' ? \"Endeavour Delivery\" : carrierName;\r\n }\r\n\r\n if(courierName) {\r\n return courierName.trim().toLowerCase() === 'nexday' ? \"Endeavour Delivery\" : courierName;\r\n }\r\n}\r\n\r\nexport { \r\n mapStatus,\r\n filterByNonePickUp,\r\n getSummaryOpenerText,\r\n displayCourierNameText\r\n}","import { config } from '../../config/config';\r\nimport axios from 'axios/index';\r\n\r\nconst urlTextQuery: string = `${config.CHATSERVER_URL}/api/TextQuery`;\r\nconst urlEventQuery: string = `${config.CHATSERVER_URL}/api/EventQuery`;\r\n\r\nconst requestPost: any = {\r\n method: 'POST',\r\n headers: { \r\n 'Content-Type' : 'application/json',\r\n 'Ocp-Apim-Subscription-Key': config.APIMGT_KEY\r\n },\r\n body: JSON.stringify({})\r\n}\r\n\r\nconst eventQueryAsync = async (text: string, chatbotUserId: string, sessionId: string = \"\", isLCAvailable?: boolean, additionalParams:any = null) : Promise => {\r\n try { \r\n const params:any = {\r\n sessionId: sessionId,\r\n isLCAvailable: isLCAvailable\r\n }\r\n\r\n // add the source if the \r\n if (config.ISSTAGING) {\r\n params['source'] = 'bwsstaging';\r\n } else if (config.SOURCE !== null) {\r\n params['source'] = config.SOURCE;\r\n }\r\n\r\n // add additional params passed into the event\r\n if (additionalParams) {\r\n Object.keys(additionalParams).forEach(key => {\r\n params[key] = additionalParams[key];\r\n });\r\n }\r\n \r\n requestPost.body = JSON.stringify({event: text, chatbotUserId: chatbotUserId, parameters: params});\r\n const response = await fetch(urlEventQuery, requestPost);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(error);\r\n return [{\r\n text: config.FRIENDLY_ERROR_MESSAGE, \r\n type: \"message\" \r\n }];\r\n }\r\n}\r\n\r\nconst textQueryAsync = async (text: string, chatbotUserId: string, sessionId: string = \"\", isLCAvailable: boolean, additionalParams:any = null): Promise => { \r\n try { \r\n let params: any = {\r\n sessionId: sessionId,\r\n isLCAvailable: isLCAvailable\r\n }\r\n\r\n // add the source if the \r\n if (config.ISSTAGING) {\r\n params['source'] = 'bwsstaging';\r\n } else if (config.SOURCE !== null) {\r\n params['source'] = config.SOURCE;\r\n }\r\n\r\n // add additional params passed into the event\r\n if (additionalParams) {\r\n Object.keys(additionalParams).forEach(key => {\r\n params[key] = additionalParams[key];\r\n });\r\n }\r\n\r\n requestPost.body = JSON.stringify({text: text, chatbotUserId: chatbotUserId, parameters: params }); \r\n const response = await fetch(urlTextQuery, requestPost);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(error);\r\n return [{\r\n text: config.FRIENDLY_ERROR_MESSAGE, \r\n type: \"message\" \r\n }];\r\n }\r\n}\r\n\r\n\r\n// todo: example of using axios\r\nconst textQueryAxios = async (text: string, chatbotUserId: string) => { \r\n axios.interceptors.request.use(config => {\r\n // log a message before any HTTP request is sent\r\n console.log(`text: ${text}, chatbotUserId: ${chatbotUserId}`); \r\n return config;\r\n });\r\n \r\n const res = await axios.post('/api/df_text_query', {\r\n text: text,\r\n chatbotUserId: chatbotUserId\r\n }).catch ((error) => {\r\n if (error.response) {\r\n // responded with status code out of xxx\r\n console.log(error.response.data);\r\n console.log(error.response.status);\r\n console.log(error.response.headers);\r\n } else if (error.request) { \r\n console.log(error.request);\r\n } else {\r\n // Something happened in setting up the request and triggered an Error\r\n console.log('Error', error.message);\r\n }\r\n });\r\n\r\n return res;\r\n}\r\n\r\nconst updateAnalyticsStatus = (sessionId: string, userId:string, intentGroupId: string, isSuccessful: boolean): any => {\r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId, \r\n userId: userId,\r\n data: {\r\n updateType: 'acceptance',\r\n intentGroupId : intentGroupId,\r\n isSuccessful : isSuccessful,\r\n }\r\n });\r\n return fetch(`${config.CHATSERVER_URL}/api/Analytics/UpdateAnalyticsStatus`, requestPost)\r\n .then(response => response.json())\r\n .then((result) => { \r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst addAnalyticsEvent = (sessionId: string, userId:string, data: any): any => {\r\n \r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId, \r\n userId: userId,\r\n data: {\r\n updateType: 'addEvent',\r\n eventName: data.eventName,\r\n queryId : data.queryId,\r\n isSuccessful : data.isSuccessful,\r\n intentGroupId : data.intentGroupId,\r\n intentGroupName : data.intentGroupName,\r\n intentGroupTypeId : data.intentGroupTypeId,\r\n source : data.source\r\n }\r\n });\r\n return fetch(`${config.CHATSERVER_URL}/api/Analytics/UpdateAnalyticsStatus`, requestPost)\r\n .then(response => response.json())\r\n .then((result) => { \r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nexport {\r\n eventQueryAsync,\r\n textQueryAsync,\r\n updateAnalyticsStatus,\r\n addAnalyticsEvent\r\n}","/* eslint-disable react/jsx-no-target-blank */\r\nimport React from 'react'\r\nimport { postMessageToClient } from '../chatservice/communicationService';\r\nimport { addAnalyticsEvent, updateAnalyticsStatus } from '../chatservice/dialogflowQuery';\r\nimport { MessageTypes } from '../models/enum';\r\nimport './message.scss';\r\nimport { getIntentGroupTypeId, getUniqueId } from '../../widget/util/commonUtil';\r\nimport { v4 } from 'uuid';\r\nimport { config } from '../../config/config.env';\r\n\r\ntype messageLinkProps = {\r\n text: string,\r\n link: string,\r\n toggleWidget?: any,\r\n target?: string,\r\n sessionId?: any,\r\n userId?: any,\r\n intentGroupId?: any,\r\n intentGroupName?: any,\r\n type?: any\r\n}\r\n\r\nconst MessageLink = ({text, link, toggleWidget, target, sessionId, userId, intentGroupId, intentGroupName, type }: messageLinkProps) => {\r\n const onClickHandler = (link:string, event: any) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n \r\n postMessageToClient({name: \"chatbotQRClicked\", text: text});\r\n // if message type is DQR post a success to analytics when clicked.\r\n if (type === MessageTypes.DynamicQr || type === MessageTypes.Url) {\r\n let isSuccessful;\r\n\r\n try {\r\n let url = new URL(link);\r\n var path = url.pathname;\r\n isSuccessful = (path !== '/contact') ? true : null;\r\n } catch (_) {\r\n isSuccessful = null;\r\n }\r\n\r\n const analyticsData = {\r\n queryId : v4(),\r\n isSuccessful : isSuccessful,\r\n eventName: `URL_CLICK (${link})`,\r\n intentGroupId : intentGroupId,\r\n intentGroupName : intentGroupName,\r\n intentGroupTypeId : getIntentGroupTypeId(intentGroupName),\r\n source : config.SOURCE\r\n };\r\n \r\n addAnalyticsEvent(sessionId, userId, analyticsData);\r\n\r\n } else if (link.indexOf('1300138297') >= 0) {\r\n const analyticsData = {\r\n queryId : v4(),\r\n isSuccessful : false,\r\n eventName: 'CALL_CHUB',\r\n intentGroupId : intentGroupId,\r\n intentGroupName : intentGroupName,\r\n intentGroupTypeId : getIntentGroupTypeId(intentGroupName),\r\n source : config.SOURCE\r\n };\r\n \r\n addAnalyticsEvent(sessionId, userId, analyticsData);\r\n }\r\n\r\n \r\n\r\n if (target === 'route') {\r\n // init change url\r\n const objCall = {\r\n data: {\r\n prodDetailsUrl: new URL(link).pathname,\r\n storeId: '',\r\n storeName: '',\r\n queryString: { i_cid: 'cbprodtracking-loaddashboard' }\r\n },\r\n methodHandler: \"chatbotInitChangeUrl\"\r\n };\r\n\r\n //minimize widget\r\n if (toggleWidget)\r\n toggleWidget(false);\r\n postMessageToClient(objCall);\r\n } else if (target === 'self') {\r\n window.parent.location.href = link;\r\n } else {\r\n window.open(link, \"_blank\");\r\n }\r\n }\r\n \r\n const externalLink = (type && (type === MessageTypes.Form || type === MessageTypes.DynamicQr || type === MessageTypes.Url) && (link.indexOf('tel:') === -1) && sessionId && userId && intentGroupId) ? `${link}&msid=${sessionId}&muid=${userId}&migid=${intentGroupId}` : link;\r\n \r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default MessageLink\r\n ","import React from 'react';\r\nimport './messageOrderTracking.scss';\r\n\r\nconst MessageUnit = ({info}: any) => {\r\n return (\r\n {info} \r\n );\r\n};\r\n\r\nexport default MessageUnit;\r\n","import React from 'react';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\n\r\ntype messageFailedProps = {\r\n orderNumber: string,\r\n dateDisplayText: string\r\n};\r\n\r\nconst MessageFailed = ({orderNumber, dateDisplayText}: messageFailedProps) => {\r\n return (\r\n
\r\n
Unfortunately, we attempted your delivery at but were unsuccessful.
\r\n
Your delivery is rebooked to arrive in 2 business days.
\r\n
If the time doesn’t suit you, rebook your delivery below
\r\n
\r\n );\r\n};\r\n\r\nexport default MessageFailed;\r\n","import React from 'react';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\n\r\ntype messageDelayedProps = {\r\n orderNumber: string\r\n};\r\n\r\nconst MessageDelayed = ({orderNumber}: messageDelayedProps) => {\r\n return (\r\n
\r\n
Unfortunately, your delivery is delayed.
\r\n
\r\n
Please check your tracking below. If its only been a day or so, bear with us. Longer than a week? Please get in touch.
\r\n
\r\n );\r\n};\r\n\r\nexport default MessageDelayed;\r\n","import React from 'react';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\n\r\ntype messageInProgressProps = {\r\n courierName: string,\r\n label: string,\r\n status: string,\r\n orderNumber: string,\r\n dateDisplayText: string,\r\n barCodeNumber: string\r\n};\r\n\r\nconst MessageInProgress = ({courierName, label, status, orderNumber, dateDisplayText, barCodeNumber}: messageInProgressProps) => {\r\n return (\r\n
\r\n
Your order is . It’s {label} on by .\r\n\r\n { courierName.toLowerCase() === 'xl express'\r\n &&\r\n

\r\n To track your delivery, view detailed tracking below and enter the following number { barCodeNumber }.\r\n
\r\n }\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MessageInProgress;\r\n","import React from 'react';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\n\r\ntype messageDeliveredProps = {\r\n deliveredObj: {\r\n courierName: string,\r\n orderNumber: string,\r\n dateDisplayText: string,\r\n barCodeNumber: string\r\n }\r\n};\r\n\r\nconst MessageDelivered = ({deliveredObj}: messageDeliveredProps) => {\r\n return (\r\n
\r\n
Your order was delivered on by \r\n\r\n { deliveredObj.courierName.toLowerCase() === 'xl express'\r\n &&\r\n

\r\n To track your delivery, view detailed tracking below and enter the following number { deliveredObj.barCodeNumber }.\r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MessageDelivered;\r\n","import React from 'react';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\nimport MessageLink from '../../MessageLink';\r\nimport { orderTrackingConfig } from '../../../../config/config';\r\n\r\ntype messageAusPostProps = {\r\n orderNumber: string,\r\n orderTrackingUrl: string\r\n};\r\n\r\nconst MessageAusPost = ({orderNumber, orderTrackingUrl}: messageAusPostProps) => {\r\n return (\r\n
\r\n
\r\n
\r\n
Your will be delivered by .
\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default MessageAusPost;\r\n","import React from 'react';\r\nimport '../../message.scss';\r\nimport '../messageOrderTracking.scss';\r\nimport { config, orderTrackingStatusConfig, orderTrackingConfig } from '../../../../config/config';\r\nimport { displayCourierNameText } from '../orderTrackingService';\r\nimport MessageLink from '../../MessageLink';\r\nimport MessageFailed from './MessageFailed';\r\nimport MessageDelayed from './MessageDelayed';\r\nimport MessageInProgress from './MessageInProgress';\r\nimport MessageDelivered from './MessageDelivered';\r\nimport MessageAusPost from './MessageAusPost';\r\n\r\ntype messageOrderTrackingSingleProps = {\r\n message: any,\r\n toDate: any,\r\n mapStatus: any\r\n};\r\n\r\nconst MessageOrderTrackingSingle = ({message, toDate, mapStatus}: messageOrderTrackingSingleProps) => {\r\n const consignment = message.data.trackingInfo[0].consignmentNotes[0];\r\n const orderNumber = message.data.searchTermOrderNumber; \r\n const mappedStatus = mapStatus(consignment.status, consignment.expectedDeliveryDate);\r\n const isDeliveryFailed = mappedStatus === orderTrackingStatusConfig.DELIVERY_FAILED;\r\n const isDelivered = mappedStatus === orderTrackingStatusConfig.DELIVERED;\r\n const isDelayed = mappedStatus === orderTrackingStatusConfig.DELAYED;\r\n const label = mappedStatus === orderTrackingStatusConfig.DELIVERED ? \"delivered\" : \"due\";\r\n const dateDisplayText = toDate(isDelivered ? consignment.statusDate : consignment.expectedDeliveryDate);\r\n const isAusPost = consignment.courierName === \"AusPost\";\r\n const courierName = displayCourierNameText(consignment);\r\n\r\n if(isAusPost) {\r\n return (\r\n \r\n );\r\n }\r\n else { \r\n return (\r\n
\r\n
\r\n {isDeliveryFailed && }\r\n {mappedStatus === 'N/A' &&
{config.TRACK_ORDER_EMPTY_STATUS}
} \r\n {mappedStatus !== 'N/A' && \r\n (isDelivered ? \r\n : isDelayed ? \r\n : \r\n )\r\n }\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MessageOrderTrackingSingle;\r\n","import React from 'react';\r\nimport '../../message.scss';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageUnit from '../MessageUnit';\r\nimport MessageLink from '../../MessageLink';\r\nimport { config, orderTrackingStatusConfig, orderTrackingConfig } from '../../../../config/config';\r\nimport { displayCourierNameText } from '../orderTrackingService';\r\n\r\ntype messageConsignmentProps = {\r\n consignment: any,\r\n totalNumberOf: number,\r\n index: number,\r\n mapStatus: any,\r\n toDate: any,\r\n orderTrackingUrl: string,\r\n isAllDelayed: boolean\r\n \r\n};\r\n\r\nconst MessageConsignment = ({consignment, totalNumberOf, index, mapStatus, toDate, orderTrackingUrl, isAllDelayed}: messageConsignmentProps) => { \r\n const status = mapStatus(consignment.status, consignment.expectedDeliveryDate); \r\n const isDeliveryDelayed = status === orderTrackingStatusConfig.DELAYED;\r\n const isDeliveryFailed = status === orderTrackingStatusConfig.DELIVERY_FAILED; \r\n const isDelivered = status === orderTrackingStatusConfig.DELIVERED;\r\n const dateDisplayText = toDate(isDelivered || isDeliveryFailed ? consignment.statusDate : consignment.expectedDeliveryDate);\r\n const isAusPost = consignment.courierName === 'AusPost';\r\n const courierName = displayCourierNameText(consignment);\r\n return ( \r\n
\r\n
\r\n
Delivery of
\r\n
Delivery Number:
\r\n { \r\n isAusPost ? \r\n dateDisplayText === 'N/A' ?
Delivered by:
:
Delivered by: by .
\r\n : \r\n isDeliveryFailed ?\r\n
\r\n
Status:
\r\n
Attempted delivery date:
\r\n
This delivery is rebooked to arrive in 2 business days. If that doesn’t suit you, rebook your delivery below
\r\n
\r\n :\r\n isDeliveryDelayed ? \r\n isAllDelayed ?\r\n
\r\n
Unfortunately, your delivery is delayed.
\r\n
\r\n
Please check your tracking below. If its only been a day or so, bear with us. Longer than a week? Please get in touch.
\r\n
\r\n :\r\n
\r\n
Status:
\r\n
Delivered by:
\r\n
Please check your tracking below. If its only been a day or so, bear with us. Longer than a week? Please get in touch.
\r\n
\r\n :\r\n
\r\n
Status:
\r\n
Delivered by: by
\r\n
\r\n }\r\n {!isAusPost && status === 'N/A' &&
{config.TRACK_ORDER_EMPTY_STATUS}
}\r\n { courierName.toLowerCase() === 'xl express'\r\n &&\r\n
\r\n To track your delivery, view detailed tracking below and enter the following number {consignment.barCodeNumber}..\r\n
\r\n }\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n ); \r\n};\r\n\r\nexport default MessageConsignment;","import React from 'react';\r\nimport { orderTrackingStatusConfig } from '../../../../config/config';\r\nimport '../../message.scss';\r\nimport '../messageOrderTracking.scss';\r\nimport MessageConsignment from './MessageConsignment';\r\n\r\ntype messageOrderTrackingMultipleProps = {\r\n consignments: any,\r\n toDate: any,\r\n mapStatus: any,\r\n};\r\n\r\nconst MessageOrderTrackingMultiple = ({consignments, toDate, mapStatus}: messageOrderTrackingMultipleProps) => { \r\n const isAllDelayed = consignments.every((consignment: { status: string; expectedDeliveryDate: string; }) => {\r\n const mappedStatus = mapStatus(consignment.status, consignment.expectedDeliveryDate); \r\n return mappedStatus === orderTrackingStatusConfig.DELAYED\r\n });\r\n \r\n return (\r\n
\r\n {consignments.map((c: any, index: number) => (\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default MessageOrderTrackingMultiple;\r\n","import React from 'react';\r\nimport '../message.scss';\r\nimport './messageOrderTracking.scss';\r\nimport MessageUnit from './MessageUnit';\r\n\r\ntype messageSummaryProps = {\r\n text: string,\r\n isMultiple: boolean,\r\n orderNumber: string,\r\n numberOfConsignments: number\r\n};\r\n\r\nconst MessageSummary = ({text, isMultiple, orderNumber, numberOfConsignments}: messageSummaryProps) => {\r\n return ( \r\n
\r\n
{text}
\r\n {isMultiple && \r\n
\r\n Your order is coming in deliveries.\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default MessageSummary;\r\n","import React, { useState, useEffect } from 'react';\r\nimport '../message.scss';\r\nimport './messageOrderTracking.scss';\r\nimport Brand from '../../brand/Brand';\r\nimport MessageOrderTrackingSingle from './Single/MessageOrderTrackingSingle';\r\nimport MessageOrderTrackingMultiple from './Multiple/MessageOrderTrackingMultiple';\r\nimport MessageSummary from './MessageSummary';\r\nimport { toDate } from '../../util/dateTimeHelper';\r\nimport { mapStatus, getSummaryOpenerText } from './orderTrackingService';\r\nimport { filterByNonePickUp } from './orderTrackingService';\r\n\r\nconst MessageOrderTracking = ({message}: any) => {\r\n const [isMultiple, setIsMultiple] = useState(false);\r\n const numberOfDeliveries = message.data.trackingInfo[0].consignmentNotes.length;\r\n const filteredConsignments = filterByNonePickUp(message.data.trackingInfo[0].consignmentNotes);\r\n const numberOfConsignments = filteredConsignments.length;\r\n\r\n useEffect(() => {\r\n setIsMultiple(numberOfDeliveries > 1);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n return (\r\n
\r\n { message.from !== 'user' && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n
\r\n
\r\n 1} orderNumber={message.data.searchTermOrderName} numberOfConsignments={numberOfConsignments} />\r\n
\r\n
\r\n {isMultiple ? :\r\n } \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MessageOrderTracking;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport './message.scss';\r\nimport { DialogflowQueryType } from '../../widget/models/enum';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\ntype propsMessageQR = {\r\n text: string,\r\n eventText ?: string,\r\n quickReplyHandler: any\r\n}\r\n\r\n\r\n\r\nconst MessageQR = ({text, eventText, quickReplyHandler}: propsMessageQR) => {\r\n const onMessageClick = (e: any) => {\r\n quickReplyHandler(e, DialogflowQueryType.Text, eventText, true);\r\n }\r\n\r\n return (\r\n
\r\n {text}\r\n
\r\n )\r\n}\r\n\r\nexport default MessageQR\r\n","import { request } from 'http';\r\nimport { config } from '../../config/config';\r\n\r\nconst URL_ARTICLE_FETCH: string = `${config.CHATSERVER_URL}/api/Zendesk/Article`;\r\nconst URL_ARTICLE_STATUS: string = `${config.CHATSERVER_URL}/api/Analytics/RecordArticleStatus`;\r\nconst URL_LIVECHAT_STATUS: string = `${config.CHATSERVER_URL}/api/Analytics/UpdateLiveChatStatus`;\r\nconst URL_LIVECHAT_HOURS: string = `${config.CHATSERVER_URL}/api/Zendesk/GetLiveChatHours`;\r\nconst URL_TICKET_CREATE: string = `${config.CHATSERVER_URL}/api/Zendesk/PostCreateTicket`;\r\nconst URL_FORM_DETAILS_GET: string = `${config.CHATSERVER_URL}/api/Zendesk/Form/GetDetails`;\r\n\r\nconst requestPost = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': config.APIMGT_KEY\r\n },\r\n body: JSON.stringify({})\r\n};\r\n\r\nconst requestGet = {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json','Ocp-Apim-Subscription-Key': config.APIMGT_KEY }\r\n};\r\n\r\nconst fetchArticle = (articleId: string) => {\r\n requestPost.body = JSON.stringify({ articleId: articleId, source: config.SOURCE });\r\n\r\n return fetch(URL_ARTICLE_FETCH, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst fetchLiveChatHours = () => {\r\n return fetch(URL_LIVECHAT_HOURS, requestGet)\r\n .then((result) => {\r\n return result.json();\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst updateLiveChatStatus = (sessionId: string, userId: string, intentGroupId: string, liveChatStatus: boolean) => {\r\n\r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId,\r\n userId: userId,\r\n data: {\r\n intentGroupId: intentGroupId,\r\n liveChatStatus: liveChatStatus\r\n }\r\n });\r\n\r\n return fetch(URL_LIVECHAT_STATUS, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst viewArticle = (sessionId: string, userId: string, intentGroupId: string, queryId: string, articleId: string, viewStatus: boolean) => {\r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId,\r\n userId: userId,\r\n data: {\r\n intentGroupId: intentGroupId,\r\n queryId: queryId,\r\n articleId: articleId,\r\n isOpened: viewStatus,\r\n isAccepted: null,\r\n isRejected: null\r\n }\r\n });\r\n\r\n return fetch(URL_ARTICLE_STATUS, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst resolveArticle = (sessionId: string, userId: string, intentGroupId: string, queryId: string, articleId: string, resolveStatus: boolean): any => {\r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId,\r\n userId: userId,\r\n data: {\r\n intentGroupId: intentGroupId,\r\n queryId: queryId,\r\n articleId: articleId,\r\n isOpened: null,\r\n isAccepted: resolveStatus,\r\n isRejected: null\r\n }\r\n });\r\n return fetch(URL_ARTICLE_STATUS, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst rejectArticle = (sessionId: string, userId: string, intentGroupId: string, queryId: string, articleId: string, rejectStatus: boolean): any => {\r\n requestPost.body = JSON.stringify(\r\n {\r\n sessionId: sessionId,\r\n userId: userId,\r\n data: {\r\n intentGroupId: intentGroupId,\r\n queryId: queryId,\r\n articleId: articleId,\r\n isOpened: null,\r\n isAccepted: null,\r\n isRejected: rejectStatus\r\n }\r\n });\r\n\r\n return fetch(URL_ARTICLE_STATUS, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\nconst createTicket = (ticketObj: any): any => {\r\n requestPost.body = JSON.stringify(ticketObj);\r\n return fetch(URL_TICKET_CREATE, requestPost)\r\n .then(response => response.json())\r\n .then((result) => {\r\n return result;\r\n }, (error) => { console.log(error) });\r\n}\r\n\r\n\r\nconst getFormDetails = async () => {\r\n try {\r\n // requestGet.body = JSON.stringify({ ticketformid: config.ZENDESK_FORM_ID });\r\n const response = await fetch(URL_FORM_DETAILS_GET, requestGet);\r\n const result = await response.json();\r\n return result;\r\n } catch (error) {\r\n console.log(error);\r\n return [\"\"];\r\n }\r\n}\r\n\r\nexport {\r\n viewArticle,\r\n resolveArticle,\r\n rejectArticle,\r\n createTicket,\r\n getFormDetails,\r\n fetchArticle,\r\n updateLiveChatStatus,\r\n fetchLiveChatHours\r\n}","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react';\r\nimport './vote.scss';\r\nimport { vote, dialogflowEvent } from '../../config/config';\r\nimport { DialogflowQueryType } from '../models/enum';\r\nimport { resolveArticle, rejectArticle } from '../chatservice/zendeskApis';\r\nimport { postMessageToClient } from '../chatservice/communicationService';\r\n\r\ntype VoteProps = {\r\n sessionId: any,\r\n userId: any,\r\n data: any,\r\n backToWidget: (voted: boolean) => void,\r\n quickReplyHandler: any\r\n}\r\n\r\nconst Vote = ({sessionId, userId, data, backToWidget, quickReplyHandler }: VoteProps) => { \r\n const resolveClickHandler = (e: any) => {\r\n postMessageToClient({name: \"chatbotArticleVote\", text: 'yes'});\r\n resolveArticle(sessionId, userId, data.intentGroupId, data.queryId, data.articleId, true);\r\n\r\n quickReplyHandler(e, DialogflowQueryType.Event, dialogflowEvent.Chatbot_Additional_Questions, false, null, true, null);\r\n\r\n backToWidget(true);\r\n }\r\n\r\n const rejectClickHandler = (e: any) => {\r\n postMessageToClient({name: \"chatbotArticleVote\", text: 'no, i need help'});\r\n rejectArticle(sessionId, userId, data.intentGroupId, data.queryId, data.articleId, true);\r\n const intentGroupInfo = {\r\n intentGroupId: data.intentGroupId,\r\n intentGroupName: data.intentGroupName\r\n }\r\n \r\n if(data?.followUpEventName)\r\n {\r\n quickReplyHandler(e, DialogflowQueryType.Event, data.followUpEventName + '_Event_No', false, null, false, intentGroupInfo);\r\n }\r\n else\r\n {\r\n quickReplyHandler(e, DialogflowQueryType.Event, dialogflowEvent.Chatbot_Contact_Options_FAQList, false, null, false, intentGroupInfo);\r\n }\r\n\r\n backToWidget(true);\r\n }\r\n\r\n return (\r\n
\r\n
{vote.QUESTION_TEXT}
\r\n
\r\n
{vote.YES_TEXT}
\r\n
{vote.NO_TEXT}
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Vote\r\n","import React from 'react'\r\nimport './message.scss';\r\nimport { DialogflowQueryType } from '../models/enum';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\ntype messageQuickEventProps = {\r\n text: string, \r\n quickReplyHandler: any, \r\n eventName: string,\r\n showTextResponse: boolean\r\n}\r\n\r\nconst MessageQuickEvent = ({text, quickReplyHandler, eventName, showTextResponse}: messageQuickEventProps) => {\r\n const onClickHandler = (e: any) => {\r\n quickReplyHandler(e, DialogflowQueryType.Event, eventName, showTextResponse);\r\n }\r\n\r\n return (\r\n
\r\n {text} \r\n
\r\n )\r\n}\r\n\r\nexport default MessageQuickEvent\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport './message.scss';\r\nimport MessageLink from './MessageLink';\r\nimport MessageQuickEvent from './MessageQuickEvent';\r\n\r\ntype messageQrDynamicProp = {\r\n message: any,\r\n quickReplyHandler: any,\r\n sessionId?: any,\r\n userId?: any,\r\n}\r\n\r\nconst MessageQrDynamic = ({message, quickReplyHandler, sessionId, userId}: messageQrDynamicProp) => {\r\n let callbackType = \"\";\r\n const callback = message.data.callback;\r\n\r\n if (callback !== undefined && callback !== null) {\r\n if (callback.hasOwnProperty('url')) {\r\n callbackType = \"link\";\r\n } else if (callback.hasOwnProperty('event')) {\r\n callbackType = \"event\";\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {callbackType === 'link' && }\r\n {callbackType === 'event' && }\r\n
\r\n )\r\n}\r\n\r\nexport default MessageQrDynamic\r\n\r\n\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport './ticketForm.scss';\r\nimport { getFormDetails, createTicket } from '../chatservice/zendeskApis';\r\n\r\ntype TicketFormProps = {\r\n showThankYou: () => void\r\n}\r\n\r\nconst TicketForm = ({showThankYou}: TicketFormProps) => {\r\n const [name, setName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [tellMeMore, setTellMeMore] = useState(\"\");\r\n const [subjects, setSubjects] = useState>([]);\r\n const [selectedSubject, setSelectedSubject] = useState(\"\");\r\n\r\n const handleSubmit = (e: any) => {\r\n e.preventDefault();\r\n showThankYou();\r\n //alert('name-' + name + ' email-' + email + ' tell me more-' + tellMeMore + ' subject-' + selectedSubject );\r\n\r\n //todo: confirm each field\r\n createTicket({\r\n \"ticket\": {\r\n \"subject\": selectedSubject,\r\n \"comment\": { \r\n \"body\": tellMeMore \r\n },\r\n \"requester\": { \"locale_id\": 1, \"name\": name, \"email\": email },\r\n \"custom_fields\": [\r\n {\r\n \"id\": 81551748, \r\n \"value\": \"delivery__product_related__missing\"\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n const handleChange = (e: any) => {\r\n setSelectedSubject(e.target.value);\r\n }\r\n\r\n useEffect(() => {\r\n // todo\r\n //getFormDetails().then(result => { setSubjects(result); }); \r\n \r\n // todo: mock\r\n setSubjects([\"Payment\", \"Delivery\", \"Store Location\", \"Others\"]);\r\n }, [])\r\n\r\n return ( \r\n
\r\n
\r\n setName(e.target.value))} required/>\r\n setEmail(e.target.value))} required/>\r\n \r\n \r\n \r\n
\r\n closeAdditionalComments(false) } value=\"Done\" />\r\n
\r\n
\r\n\r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default LiveChatRating","/* eslint-disable react/jsx-no-target-blank */\r\nimport React from 'react'\r\nimport './message.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\ntype messageLinkProps = {\r\n text: string,\r\n link: string,\r\n callBackFn: () => void\r\n}\r\n\r\nconst MessageLiveChatQR = ({text, link, callBackFn}: messageLinkProps) => {\r\n return (\r\n
\r\n {text} \r\n
\r\n )\r\n}\r\n\r\nexport default MessageLiveChatQR\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { showVOCSurvey } from '../../../actions/index';\r\n\r\ntype ManualEndSessionProps = {\r\n endBotSession: (value: boolean) => void;\r\n timeoutType: number;\r\n endScreenMountingStyle: string;\r\n}\r\n\r\nconst ManualEndSession = ({endBotSession, timeoutType, endScreenMountingStyle}: ManualEndSessionProps) => {\r\n\r\n // 1 user exits from the cross\r\n // 2 timeout text after 10 mins\r\n // 3 user ends after query\r\n // 4 close after live chat\r\n \r\n const endSession = useRef(null);\r\n const dispatch = useDispatch();\r\n let screenText;\r\n\r\n switch (timeoutType) {\r\n case 1: \r\n screenText = `
Have you finished your chat?
`;\r\n break;\r\n case 2:\r\n screenText = `
Are you still there or have you finished your chat?
`;\r\n break;\r\n case 3:\r\n screenText = `
Too easy! Feel free to drop by next time you need a hand.
`;\r\n break;\r\n case 4:\r\n screenText = `
Thank you for your feedback.
\r\n
Have you finished your chat session?
`;\r\n break;\r\n default:\r\n screenText = `
No problem. I enjoyed our chat, stop by
\r\n
again sometime.
\r\n
Have you finished your chat session?
`;\r\n break;\r\n }\r\n\r\n\r\n useEffect(() => {\r\n let timeoutId: ReturnType | null = null;\r\n \r\n window.onclick = (event:Event) => {\r\n const { className } = event.target as HTMLElement;\r\n if ( endSession.current && !endSession.current.contains(event.target as HTMLElement) && className && className.indexOf('header') && className.indexOf('brand') ) {\r\n timeoutId = setTimeout(() => {\r\n endBotSession(false)\r\n }, 450);\r\n }\r\n }\r\n \r\n return () => {\r\n if(timeoutId) { clearTimeout(timeoutId);}\r\n }\r\n }, [])\r\n \r\n \r\n \r\n\r\n return (\r\n\r\n
\r\n
\r\n\r\n
\r\n endBotSession(false) }/>\r\n dispatch(showVOCSurvey(true)) }/>\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ManualEndSession","import React, { useEffect } from 'react'\r\n\r\ntype AutoEndSessionProps = {\r\n openWelcomeMessage: () => void,\r\n setShowWelcomeMessage:(type: boolean) => void,\r\n autoEndBotSession: () => void,\r\n showWelcomeMessage: boolean\r\n}\r\n\r\nconst AutoEndSession = ({openWelcomeMessage, setShowWelcomeMessage, autoEndBotSession, showWelcomeMessage}: AutoEndSessionProps) => {\r\n\r\n const restartChat = () => {\r\n setShowWelcomeMessage(false);\r\n }\r\n\r\n useEffect(() => {\r\n if(!showWelcomeMessage){\r\n openWelcomeMessage();\r\n autoEndBotSession();\r\n }\r\n }, [showWelcomeMessage])\r\n \r\n\r\n \r\n return (\r\n
\r\n
\r\n
Your chat session has ended.
\r\n
\r\n
\r\n restartChat()}/>\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AutoEndSession","import React, { useEffect, useState } from \"react\";\r\n//import { storeConfig } from '../../config/config';\r\nimport { DialogflowQueryType } from \"../models/enum\";\r\nimport \"./store-selector-detail.scss\";\r\nimport \"../message/message.scss\";\r\nimport { postMessageToClient } from \"../chatservice/communicationService\";\r\nimport { getStoreStatus } from \"../util/commonUtil\";\r\ntype StoreSelectorDetailProps = {\r\n store: any;\r\n isHostDevice: boolean;\r\n setStore: any;\r\n quickReplyHandler: any;\r\n setSelectedStoreData: any;\r\n};\r\n\r\nconst StoreSelectorDetail = ({\r\n store,\r\n isHostDevice,\r\n setStore,\r\n setSelectedStoreData,\r\n quickReplyHandler,\r\n}: StoreSelectorDetailProps) => {\r\n\r\n const [isDelivery, setIsDelivery] = useState(\r\n store.data.isDeliveryEnabled\r\n );\r\n const [isPickup, setIsPickup] = useState(\r\n store.data.isClickAndCollectEnabled\r\n );\r\n const [isDriveThrough, setIsDriveThrough] = useState(\r\n store.data.facilities.includes(\"Drive Thru\")\r\n );\r\n const [tomorrowDay, setTomorrowDay] = useState();\r\n const [statusBackground, setStatusBackground] = useState(\"\");\r\n const [storeCurrentStatus, setStoreCurrentStatus] = useState(\"\");\r\n const [storeTradingHours, setStoreTradingHours] = useState(\"\");\r\n\r\n const onClickHandler = (e: any) => {\r\n const params: any = {\r\n selectedStoreId: store.data.storeId,\r\n selectedStoreName:\r\n \"BWS \" +\r\n store.data.suburb.charAt(0).toUpperCase() +\r\n store.data.suburb.slice(1).toLowerCase(),\r\n };\r\n\r\n if (!store.isSelected) {\r\n quickReplyHandler(\r\n e,\r\n DialogflowQueryType.Event,\r\n \"PRODUCT_AVAIL_SET_STORE\",\r\n false,\r\n params\r\n );\r\n store.isSelected = true;\r\n setStore(parseInt(store.data.storeId));\r\n setSelectedStoreData(store.data);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n let todayDate = new Date();\r\n todayDate.setDate(todayDate.getDate() + 1);\r\n let day = new Date(todayDate);\r\n let dayName = day.toString().split(\" \")[0];\r\n setTomorrowDay(dayName);\r\n \r\n //calling a function to get store current status\r\n const status = getStoreStatus(store?.data);\r\n \r\n setStoreTradingHours(status?.storeTradingHours);\r\n setStoreCurrentStatus(status?.StoreCurrentStatus);\r\n setStatusBackground(status?.StatusBackground);\r\n }, []);\r\n \r\n return (\r\n
\r\n
\r\n
\r\n BWS{\" \"}\r\n \r\n {store.data.name.toLowerCase()}\r\n \r\n
\r\n {store.data.distance && (\r\n
{store.data.distance} km
\r\n )}\r\n
\r\n\r\n
\r\n {isDelivery ? (\r\n
\r\n \r\n Delivery\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n {isPickup ? (\r\n
\r\n \r\n Pick up\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {isDriveThrough ? (\r\n
\r\n \r\n Drive through\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n
\r\n \r\n {store.data.addressLine1}, {store.data.state} {store.data.postCode}\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n {storeCurrentStatus}\r\n \r\n {storeTradingHours}\r\n
\r\n\r\n
\r\n {store.data.trading_hours_all?.map((day: any, index: any) => {\r\n return (\r\n
\r\n {index != 0 ? (\r\n index != 7 ? (\r\n
\r\n \r\n {day.day.slice(0, 3) === \"Tom\"\r\n ? tomorrowDay\r\n : day.day.slice(0, 3)}\r\n \r\n
\r\n \r\n {new Date(day.date).toLocaleDateString(\"en-us\", {\r\n day: \"numeric\",\r\n })}\r\n \r\n \r\n {new Date(day.date).toLocaleDateString(\"en-us\", {\r\n month: \"short\",\r\n })}\r\n \r\n
\r\n\r\n \r\n {day.openHour.toLowerCase() !== \"closed\" ? (\r\n
\r\n \r\n {day.openHour.split(\"-\")[0].toUpperCase()}\r\n \r\n \r\n {\" \"}\r\n -\r\n \r\n \r\n {day.openHour.split(\"-\")[1].toUpperCase()}\r\n \r\n
\r\n ) : (\r\n \"Closed\"\r\n )}\r\n
\r\n
\r\n ) : (\r\n \"\"\r\n )\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {!store.isSelected && (\r\n \r\n Select store\r\n \r\n )}\r\n {store.isSelected && (\r\n \r\n Selected\r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport { StoreSelectorDetail };\r\n","import React, { useState } from 'react';\r\n// import Arrow from './Arrow';\r\nimport { StoreSelectorDetail } from '../store-selector-detail/StoreSelectDetail';\r\nimport './store-selector.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\nimport Arrow from '../carousel/Arrow'\r\n\r\ntype storeSelectorProps = {\r\n stores: any,\r\n isHostDevice: boolean,\r\n setSelectedStoreData: any,\r\n quickReplyHandler: any,\r\n};\r\n\r\nconst StoreSelector = ({ stores, isHostDevice, setSelectedStoreData, quickReplyHandler }: storeSelectorProps) => {\r\n\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const [itemLength] = useState(stores.length);\r\n\r\n const previous = () => {\r\n if (activeIndex !== 0) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index < 1) {\r\n index = length - 1;\r\n } else {\r\n index--;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n const next = () => {\r\n\r\n if (activeIndex !== 4) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index === length - 1) {\r\n index = 0;\r\n } else {\r\n index++;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n const setStore = (storeId: number) => {\r\n for (let i = 0; i < stores.length; i++) {\r\n if (parseInt(stores[i].data.storeId) === storeId) {\r\n stores[i].isSelected = true;\r\n } else {\r\n stores[i].isSelected = false;\r\n }\r\n\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n stores.map((s: any, index: number) => (\r\n
\r\n \r\n
\r\n ))\r\n }\r\n
\r\n
\r\n \r\n
{activeIndex + 1} of {stores.length} {stores.length === 1 ? 'store' : 'stores'}
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport {\r\n StoreSelector\r\n};","import React, { useRef, useState } from \"react\";\r\nimport \"./product-list-detail.scss\";\r\nimport \"../message/message.scss\";\r\nimport { postMessageToClient } from \"../chatservice/communicationService\";\r\nimport { DialogflowQueryType } from \"../models/enum\";\r\nimport { dialogflowEvent } from \"../../config/config\";\r\nimport { updateAnalyticsStatus } from \"../chatservice/dialogflowQuery\";\r\n\r\ntype ProductListDetailProps = {\r\n sessionId: any;\r\n userId: any;\r\n product: any;\r\n selectedStore: any;\r\n quickReplyHandler: any;\r\n toggleWidget: any;\r\n isWebView: boolean;\r\n};\r\n\r\nconst formImageUrl = (url: string) => {\r\n return url.substring(url.lastIndexOf(\"/\") + 1);\r\n};\r\n\r\nconst getInventoryStatus = (product: any) => {\r\n // const packTypeToShow = getPackType(product);\r\n // if (packTypeToShow.Key === 'Bottle') {\r\n // return `${product?.availableInventoryQty} ${packTypeToShow.DisplayName} at ${formatStoreName(product.storeName)}`;\r\n // }\r\n return `${product.stockOnHand}`;\r\n //return `${Math.ceil(product?.availableInventoryQty / packTypeToShow.UnitQty)} ${packTypeToShow.DisplayName} of ${packTypeToShow.UnitQty} at ${formatStoreName(product.storeName)}`;\r\n};\r\n\r\nconst formatStoreName = (storeName: any) => {\r\n const store = storeName.replaceAll(\"BWS \", \"\");\r\n return store.charAt(0).toUpperCase() + store.slice(1).toLowerCase();\r\n};\r\n\r\nconst isMarketPlaceProduct = (product: any) => {\r\n return product?.stockCode?.startsWith(\"ER_\");\r\n};\r\n\r\nconst isMemberOffer = (product: any) => {\r\n return product?.tags?.find((a:any) => a.indexOf('memberprice') >= 0) !== null;\r\n};\r\n\r\nconst isSuperSaver = (product: any) => {\r\n return product?.tags?.find((a:any) => a.indexOf('memberprice') >= 0) !== null;\r\n};\r\n\r\n\r\n\r\nconst ProductListDetail = ({\r\n sessionId,\r\n userId,\r\n product,\r\n selectedStore,\r\n quickReplyHandler,\r\n toggleWidget,\r\n isWebView,\r\n}: ProductListDetailProps) => {\r\n const [isDelivery, setIsDelivery] = useState(\r\n selectedStore.isDeliveryEnabled\r\n );\r\n const [isPickup, setIsPickup] = useState(\r\n selectedStore.isClickAndCollectEnabled\r\n );\r\n const [isDriveThrough, setIsDriveThrough] = useState(\r\n selectedStore.facilities.includes(\"Drive Thru\")\r\n );\r\n\r\n let isMemberOffer: boolean = false;\r\n let isSuperSaver: boolean = false;\r\n let isLowPriceEveryday: boolean = false;\r\n let isClearance: boolean = false;\r\n \r\n product?.tags?.forEach((tag:any) => {\r\n const _tag = tag.toLowerCase();\r\n if (_tag.indexOf('memberprice') >= 0) \r\n { \r\n isMemberOffer = true;\r\n }\r\n else if (_tag.indexOf('super-savers') >= 0) \r\n {\r\n isSuperSaver = true; \r\n }\r\n else if (_tag.indexOf('low-prices') >= 0) \r\n {\r\n isLowPriceEveryday = true;\r\n }\r\n else if (_tag.indexOf('clearance') >= 0) \r\n { \r\n isClearance = true;\r\n }\r\n });\r\n\r\n const fileName = formImageUrl(product.images.small);\r\n let stockText = \"\";\r\n\r\n if (isMarketPlaceProduct(product)) {\r\n //Market place products\r\n stockText = \"Delivery only\";\r\n } else if (\r\n product.isDeliveryOnly ||\r\n parseInt(product?.availableInventoryQty ?? 0) <= 0\r\n ) {\r\n stockText = \"0\";\r\n } else {\r\n stockText = getInventoryStatus(product);\r\n }\r\n\r\n let displayPrice = product.price;\r\n let wasPrice = product.wasPrice;\r\n\r\n const prodDetailsUrl = `/product/${product.stockCode}/${product.urlFriendlyName}`;\r\n const onMoreDetailsClickHandler = (e: any) => {\r\n const analyticsCall = {\r\n data: {\r\n linkName: `web:chatbot:product availability:more details:${product.productName}`,\r\n linkType: \"chatbot product availability\",\r\n },\r\n methodHandler: \"chatbotTriggerAdobeAnalytics\",\r\n };\r\n postMessageToClient(analyticsCall);\r\n\r\n // init change url\r\n const objCall = {\r\n data: {\r\n prodDetailsUrl: prodDetailsUrl,\r\n storeId: product.storeId,\r\n storeName: formatStoreName(product.storeName),\r\n queryString: { i_cid: \"cbprodavail\" },\r\n },\r\n methodHandler: \"chatbotInitChangeUrl\",\r\n };\r\n // minimize widget\r\n toggleWidget(false);\r\n postMessageToClient(objCall);\r\n\r\n // post message to chatserver, change analytics status to success\r\n updateAnalyticsStatus(sessionId, userId, product.intentGroupId, true);\r\n };\r\n\r\n const onNearbyStoreClickHandler = (e: any) => {\r\n const params: any = {\r\n suburb: selectedStore.suburb,\r\n postcode: selectedStore.postCode,\r\n productData: {\r\n productName: product.productName,\r\n stockCode: product.stockCode,\r\n productDetailsUrl: prodDetailsUrl,\r\n availablePackTypes: product.availablePackTypes,\r\n },\r\n state: selectedStore.state,\r\n selectedStoreId: selectedStore.storeId,\r\n };\r\n quickReplyHandler(\r\n e,\r\n DialogflowQueryType.Event,\r\n dialogflowEvent.PRODUCT_AVAIL_FIND_NEARBY_STORES,\r\n false,\r\n params\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {product.productBrand}\r\n {product.productName}\r\n
\r\n\r\n {product.isDeliveryOnly && !isMarketPlaceProduct(product) && (\r\n

Available for delivery

\r\n )}\r\n {displayPrice > 0 && (\r\n
\r\n { isMemberOffer && Everyday Rewards Exclusive Member Pricing }\r\n { isSuperSaver && SUPER SAVERS }\r\n { isClearance && CLEARANCE }\r\n { isLowPriceEveryday &&
LOW PRICES EVERYDAY
}\r\n
\r\n )}\r\n {displayPrice > 0 && (\r\n
\r\n
\r\n $\r\n { Math.trunc(displayPrice)}\r\n { (displayPrice).toFixed(2).split('.')[1] }\r\n
\r\n { (wasPrice !== null && wasPrice > displayPrice )? `Was ${ wasPrice.toFixed(2) }` : '' }\r\n
\r\n )}\r\n\r\n {(product.isOnlineOffer || product.isMemberOffer) &&\r\n product.nonMemberPrice > 0 && (\r\n
\r\n Non-Member ${product.nonMemberPrice.toFixed(2)}{\" \"}\r\n
\r\n )}\r\n\r\n {product?.availableInventoryQty !== 0 && (product?.isDisplayOnly === null || (product?.isDisplayOnly !== null && product?.isDisplayOnly === false)) ? (\r\n
\r\n
\r\n {product?.availableInventoryQty} units are available at{\" \"}\r\n {product.storeName.slice(4)}\r\n
\r\n
\r\n {isDelivery ? (\r\n
\r\n \"\"\r\n Delivery\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n {isPickup ? (\r\n
\r\n \"\"\r\n Pick up\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {isDriveThrough ? (\r\n
\r\n \"\"\r\n Drive through\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n
\r\n ) : (\r\n
\r\n
\"\" out of stock at{\" \"}{product.storeName} \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n\r\n
\r\n {!isWebView && (\r\n
\r\n \r\n view details{\" \"}\r\n \"\"{\" \"}\r\n \r\n
\r\n )}\r\n {!isMarketPlaceProduct(product) && (\r\n
\r\n \r\n Find nearby\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport { ProductListDetail };\r\n","import React, { useState } from 'react';\r\n// import Arrow from './Arrow';\r\nimport { ProductListDetail } from '../product-list-detail/ProductListDetail';\r\nimport './product-list.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\nimport Arrow from '../carousel/Arrow'\r\n\r\ntype productListProps = {\r\n sessionId: any,\r\n userId: any,\r\n products: any,\r\n selectedStore: any,\r\n quickReplyHandler: any,\r\n toggleWidget: any,\r\n isWebView: boolean\r\n};\r\n\r\nconst ProductList = ({ sessionId, userId, products, selectedStore, quickReplyHandler, toggleWidget, isWebView }: productListProps) => {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const [itemLength] = useState(products.length);\r\n\r\n const previous = () => {\r\n if (activeIndex !== 0) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index < 1) {\r\n index = length - 1;\r\n } else {\r\n index--;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n const next = () => {\r\n\r\n if (activeIndex !== 4) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index === length - 1) {\r\n index = 0;\r\n } else {\r\n index++;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n products.map((s: any, index: number) => (\r\n
\r\n \r\n
\r\n ))\r\n }\r\n
\r\n
\r\n \r\n
{activeIndex + 1} of {products.length} {products.length === 1 ? 'product' : 'products'}
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport {\r\n ProductList\r\n};","import React, { useRef, useState } from 'react';\r\nimport './product-nearby-store-list-detail.scss';\r\nimport '../message/message.scss';\r\nimport { postMessageToClient } from '../chatservice/communicationService';\r\nimport { config } from '../../config/config.env';\r\n\r\ntype ProductNearbyStoreListDetailProps = {\r\n nearbyStore: any,\r\n isHostDevice: any,\r\n toggleWidget: any\r\n}\r\n\r\nconst formatStoreName = (storeName: any) => {\r\n const store = storeName.replaceAll(\"BWS \", \"\");\r\n return store.charAt(0).toUpperCase() + store.slice(1).toLowerCase();\r\n}\r\n\r\nconst getPackType = (product:any) =>{\r\n return product.availablePackTypes.sort((a: any, b: any) => a.UnitQty > b.UnitQty ? 1 : -1)[0];\r\n}\r\n\r\n\r\nconst getInventoryStatus = (product: any, nearbyStore:any) => {\r\n return `${nearbyStore?.storeAvailableQuantity} at ${formatStoreName(nearbyStore?.storeName)}`;\r\n}\r\n\r\nconst ProductNearbyStoreListDetail = ({ nearbyStore, toggleWidget, isHostDevice }: ProductNearbyStoreListDetailProps) => {\r\n let product = nearbyStore.product;\r\n let stockText = getInventoryStatus(product,nearbyStore);\r\n const [isDelivery, setIsDelivery] = useState(\r\n nearbyStore.facilities.includes(\"SYS- Express Delivery\")\r\n );\r\n const [isPickup, setIsPickup] = useState(\r\n nearbyStore.facilities.includes(\"SYS- BWS Collect\")\r\n );\r\n const [isDriveThrough, setIsDriveThrough] = useState(\r\n nearbyStore.facilities.includes(\"Drive Thru\")\r\n );\r\n\r\n const onClickHandler = (e: any) => {\r\n\r\n\r\n const analyticsCall = {\r\n data: {\r\n linkName: `web:chatbot:product availability:find nearby:purchase from store:${nearbyStore.storeName}`,\r\n linkType: 'chatbot product availability',\r\n },\r\n methodHandler: \"chatbotTriggerAdobeAnalytics\"\r\n };\r\n postMessageToClient(analyticsCall);\r\n\r\n // init change url\r\n const objCall = {\r\n data: {\r\n prodDetailsUrl: product.productDetailsUrl,\r\n storeId: nearbyStore.storeNo,\r\n storeName: formatStoreName(nearbyStore.storeName),\r\n queryString: { i_cid: 'cbprodavail-findnearby' }\r\n },\r\n methodHandler: \"chatbotInitChangeUrl\"\r\n };\r\n\r\n //minimize widget\r\n toggleWidget(false);\r\n postMessageToClient(objCall);\r\n}\r\n\r\nreturn (\r\n
\r\n
\r\n
BWS {nearbyStore.suburb.toLowerCase()}
\r\n {nearbyStore.distance &&
{nearbyStore.distance} km
}\r\n
\r\n
\r\n {nearbyStore.storeAvailableQuantity} units available\r\n
\r\n\r\n
\r\n {isDelivery ? (\r\n
\r\n \"\" \r\n Delivery\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n {isPickup ? (\r\n
\r\n \"\" \r\n Pick up\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {isDriveThrough ? (\r\n
\r\n \"\" \r\n Drive through\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n
\r\n {nearbyStore.addressLine1}, {nearbyStore.state} {nearbyStore.postcode} \r\n
\r\n
\r\n Open now\r\n - \r\n closes at {nearbyStore.tradingHours[0].OpenHour.split('-')[1]}\r\n
\r\n\r\n {\r\n (config.ISWEBVIEW === false) &&\r\n \r\n }\r\n
\r\n);\r\n}\r\n\r\nexport {\r\n ProductNearbyStoreListDetail\r\n}","import React, { useState } from 'react';\r\n// import Arrow from './Arrow';\r\nimport { ProductNearbyStoreListDetail } from '../product-nearby-store-list-detail/ProductNearbyStoreListDetail';\r\nimport './product-nearby-store-list.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\nimport Arrow from '../carousel/Arrow'\r\n\r\ntype nearbyStoreProps = {\r\n nearbyStores: any,\r\n isHostDevice: any,\r\n toggleWidget: any\r\n};\r\n\r\nconst ProductNearbyStoreList = ({ nearbyStores, isHostDevice, toggleWidget }: nearbyStoreProps) => {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const [itemLength] = useState(nearbyStores.length);\r\n\r\n const previous = () => {\r\n if (activeIndex !== 0) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index < 1) {\r\n index = length - 1;\r\n } else {\r\n index--;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n const next = () => {\r\n\r\n if (activeIndex !== 4) {\r\n\r\n let index = activeIndex;\r\n let length = itemLength;\r\n\r\n if (index === length - 1) {\r\n index = 0;\r\n } else {\r\n index++;\r\n }\r\n\r\n setActiveIndex(index);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n nearbyStores.map((s: any, index: number) => (\r\n
\r\n \r\n
\r\n ))\r\n }\r\n
\r\n
\r\n \r\n
{activeIndex + 1} of {nearbyStores.length} {nearbyStores.length === 1 ? 'store' : 'stores'}
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport {\r\n ProductNearbyStoreList\r\n};","import { PriceType } from '../models/fawTypes'\r\n\r\nenum Prices {\r\n under10 = \"Under $10\",\r\n under20 = \"$10 - $20\",\r\n under30 = \"$20 - $30\",\r\n under50 = \"$30 - $50\",\r\n under75 = \"$50 - $75\",\r\n under100 = \"$75 - $100\",\r\n over100 = \"$100 +\",\r\n any = \"Any price\"\r\n}\r\n\r\nconst PriceRangeMapping: PriceType = {\r\n \"Under $10\": [0,10],\r\n \"$10 - $20\": [10, 20],\r\n \"$20 - $30\": [20, 30],\r\n \"$30 - $50\": [30, 50],\r\n \"$50 - $75\": [50, 75],\r\n \"$75 - $100\": [75, 100],\r\n \"$100 +\": [100],\r\n \"Any Price\": []\r\n}\r\n\r\nexport { Prices, PriceRangeMapping }","import React from 'react';\r\nimport '../findAWine.scss';\r\nimport { Types } from './wineTypeModel';\r\n\r\nexport type WineTypeProps = {\r\n updateType: (type: string) => void;\r\n type: string;\r\n}\r\n\r\nconst WineType = ({updateType, type}: WineTypeProps) => {\r\n return (\r\n
\r\n

I’m curious about...

\r\n {updateType(Types.Red)}}/>\r\n {updateType(Types.WhiteRose)}}/>\r\n {updateType(Types.ChampagneSparkling)}}/>\r\n {updateType(Types.NotSure)}}/> \r\n
\r\n )\r\n}\r\n \r\nexport default WineType\r\n\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport '../findAWine.scss';\r\nimport './varietal.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\ntype VarietalProps = {\r\n updateVarietal: (varietal: string) => void;\r\n varietals: string[];\r\n selectedVarietal: string;\r\n}\r\n\r\nconst Varietal = ({ updateVarietal, varietals, selectedVarietal }: VarietalProps) => {\r\n return (\r\n
\r\n

I’m interested in...

\r\n
\r\n {varietals.map((v: any, index: number) => \r\n
\r\n {updateVarietal(v)}}/>\r\n
)}\r\n
\r\n
\r\n )\r\n}\r\n \r\nexport default Varietal","import { VarietalType } from '../models/fawTypes';\r\n\r\nenum Varietals {\r\n NotSure = \"I'm not sure\"\r\n}\r\n\r\nconst RedVarietals: string[] = [\r\n \"Cab sav & blends\",\r\n \"Pinot noir\",\r\n \"Grenache & blends\",\r\n \"I'm not sure\",\r\n \"Shiraz & blends\",\r\n \"Merlot & blends\",\r\n \"Other varietals\"\r\n];\r\n\r\nconst WhiteVarietals: string[] = [\r\n \"Sauvignon blanc\",\r\n \"Chardonnay\",\r\n \"Rosé\",\r\n \"I'm not sure\",\r\n \"Pinot gris & grigio\",\r\n \"Riesling\",\r\n \"Other varietals\"\r\n];\r\n\r\nconst SparklingVarietals: string[] = [\r\n \"Champagne\",\r\n \"Sparkling white\",\r\n \"Sparkling red\",\r\n \"I'm not sure\",\r\n \"Prosecco & cava\",\r\n \"Sparkling rosé\",\r\n \"Other varietals\"\r\n];\r\n\r\nconst VarietalTypeMapping: VarietalType = {\r\n \"Shiraz & blends\": \"Shiraz / Shiraz Blends\",\r\n \"Cab sav & blends\": \"Cab / Cab blends\",\r\n \"Pinot noir\": \"Pinot Noir\",\r\n \"Merlot & blends\": \"Merlot\", //check for blends\r\n \"Grenache & blends\": \"Grenache & GSM\", //check\r\n \"Other varietals\": \"Other\",\r\n \"Sauvignon blanc\": \"Sauvignon Blanc\",\r\n \"Pinot gris & grigio\": \"Pinot Grigio\", //check\r\n \"Chardonnay\": \"Chardonnay\",\r\n \"Riesling\": \"Riesling\",\r\n \"Rosé\": \"Rosé\",\r\n \"Champagne\": \"Champagne\",\r\n \"Sparkling white\": \"Sparkling White\",\r\n \"Sparkling red\": \"Sparkling Red\",\r\n \"Prosecco & cava\": \"Prosecco & Cava\",\r\n \"Sparkling rosé\": \"Sparkling Rosé\"\r\n}\r\n\r\nexport { RedVarietals, WhiteVarietals, SparklingVarietals, VarietalTypeMapping, Varietals }","import React from 'react';\r\nimport '../findAWine.scss';\r\nimport './price.scss';\r\nimport { Prices } from './PriceModel';\r\n\r\ntype PriceProps = {\r\n updatePrice: (priceRange: string) => void;\r\n range: string;\r\n}\r\n\r\nconst Price = ({updatePrice, range }: PriceProps) => {\r\n return (\r\n
\r\n

I would like to spend ...

\r\n
\r\n
\r\n {updatePrice(Prices.under10)}}/>\r\n {updatePrice(Prices.under20)}}/>\r\n {updatePrice(Prices.under30)}}/>\r\n {updatePrice(Prices.under50)}}/>\r\n
\r\n
\r\n {updatePrice(Prices.under75)}}/>\r\n {updatePrice(Prices.under100)}}/>\r\n {updatePrice(Prices.over100)}}/>\r\n {updatePrice(Prices.any)}}/>\r\n
\r\n
\r\n
\r\n )\r\n}\r\n \r\nexport default Price","import React, { useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Carousel from 'react-multi-carousel';\r\nimport 'react-multi-carousel/lib/styles.css';\r\nimport { ResultCatergoryProps } from '../models/fawTypes';\r\nimport './resultCategory.scss';\r\nimport { updateSelectedType, updateCurrentView, openPdpDansPage } from '../../actions/index';\r\nimport { RootState } from '../../reducers/index';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\nconst ResultCatergory = ({ fawRecommendation, categoryType, intentData }: ResultCatergoryProps) => {\r\n\r\n const [orientation, setOrientation] = useState('');\r\n const [isMoving, setIsMoving] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const storeName = useSelector((state: RootState) => { return state.fawData.selectedStoreName });\r\n const storeID = useSelector((state: RootState) => { return state.fawData.selectedStoreId });\r\n\r\n const fawRecommendations = [...fawRecommendation];\r\n const recommendationResults = fawRecommendations.length > 5 ? [...fawRecommendations.splice(0, 5)] : fawRecommendations ;\r\n\r\n const setScreenOrientation = () => {\r\n\r\n if (window.matchMedia(\"(orientation: portrait)\").matches) {\r\n setOrientation('portrait');\r\n }\r\n \r\n if (window.matchMedia(\"(orientation: landscape)\").matches) {\r\n setOrientation('landscape');\r\n }\r\n }\r\n\r\n useEffect(()=> {\r\n setScreenOrientation();\r\n return () => { setOrientation('') }\r\n }, [])\r\n\r\n window.addEventListener(\"resize\", setScreenOrientation);\r\n\r\n const responsive = {\r\n superLargeDesktop: {\r\n breakpoint: { max: 4000, min: 3000 },\r\n items: 1,\r\n partialVisibilityGutter: 105\r\n },\r\n desktop: {\r\n breakpoint: { max: 3000, min: 1024 },\r\n items: 1,\r\n partialVisibilityGutter: 105\r\n },\r\n tablet: {\r\n breakpoint: { max: 1024, min: 464 },\r\n items: 2,\r\n partialVisibilityGutter: 105\r\n },\r\n mobile: {\r\n breakpoint: { max: 464, min: 0 },\r\n items: 1,\r\n partialVisibilityGutter: 125\r\n },\r\n smallMobile: {\r\n breakpoint: { max: 320, min: 0 },\r\n items: 1,\r\n partialVisibilityGutter: 90\r\n }\r\n };\r\n \r\n const showRecommendationList = () => {\r\n dispatch(updateSelectedType(categoryType));\r\n dispatch(updateCurrentView('recommendationList'));\r\n }\r\n\r\n const openPDPpage = (event:any, wineLink: string, wineName:string) => {\r\n if(isMoving) event.preventDefault();;\r\n \r\n if (event.currentTarget.parentNode.classList.contains('react-multi-carousel-item--active')) {\r\n dispatch(openPdpDansPage(wineLink, storeName, storeID, wineName, categoryType, intentData));\r\n }\r\n }\r\n\r\n const isCenterModeOn = () => {\r\n //Center mode on with landscape and Ipad portrait mode\r\n return (orientation === 'landscape' && recommendationResults.length > 2); \r\n }\r\n\r\n const isPartialModeOn = () => {\r\n //Partial mode on with portrait and non Ipad devices\r\n return (orientation === 'portrait') && (recommendationResults.length > 1);\r\n }\r\n \r\n return (\r\n
\r\n {/* top section */}\r\n
\r\n {categoryType}\r\n { recommendationResults.length ? showRecommendationList() } >See more : null}\r\n
\r\n {/* Recommendations */}\r\n {recommendationResults.length? \r\n setIsMoving(true)}\r\n afterChange={() => setIsMoving(false)}\r\n focusOnSelect={true}\r\n >\r\n {recommendationResults.map((item, index) => \r\n
openPDPpage(event, item.wineLink, item.wineName)}>\r\n
\r\n
{item.brandName}
\r\n
{item.wineName}
\r\n
\r\n ${item.price} \r\n per bottle\r\n
\r\n
\r\n
\r\n \r\n {(Math.round(item.rating * 10) / 10).toFixed(1)}\r\n
\r\n ({item.review} reviews)\r\n
\r\n
\r\n
\r\n {item.wineName}/\r\n
\r\n
)\r\n }\r\n : \r\n
No results found. Consider widening your filters.
\r\n }\r\n
\r\n )\r\n}\r\n \r\nexport default ResultCatergory","import React, { useState, useEffect, useRef, useMemo, CSSProperties } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RootState } from '../reducers/index';\r\nimport Cookies from 'universal-cookie';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { config, dialogflowEvent, livechat, acceptanceIntent, zendeskErrorConfig } from '../config/config';\r\nimport { DialogflowQueryType, FollowUpEventTypes, MessageTypes, Speaker } from './models/enum';\r\nimport './widget.scss';\r\nimport Header from './header/Header';\r\nimport Message from './message/Message';\r\nimport MessageQrArticle from './message/MessageQrArticle';\r\nimport MessageOrderTracking from './message/orderTracking/MessageOrderTracking';\r\nimport MessageQR from './message/MessageQR';\r\nimport Vote from './article/Vote';\r\nimport MessageLink from './message/MessageLink';\r\nimport MessageQuickEvent from './message/MessageQuickEvent';\r\nimport MessageQrDynamic from './message/MessageQrDynamic';\r\nimport TicketForm from './ticket-form/TicketForm';\r\nimport ThankYou from './thank-you/ThankYou';\r\nimport Loader from './loader/Loader';\r\nimport { eventQueryAsync, textQueryAsync } from './chatservice/dialogflowQuery';\r\nimport { handleMessageNewRoutine } from './models/messageHandler';\r\nimport { postMessageToClient } from './chatservice/communicationService';\r\nimport { Carousel } from './carousel/Carousel';\r\n//import zChat from '../zendesk/web-sdk';\r\nimport { MessageModel } from './models/messageModel';\r\nimport { isLiveChatAvailable, selectLiveChatMessages, sendLiveChatMessage } from './chatservice/liveChat';\r\nimport LiveChatMessage from './message/LiveChatMessage';\r\nimport LiveChatUserForm from './message/livechat/LiveChatUserForm';\r\nimport LiveChatRating from './message/livechat/LiveChatRating';\r\nimport MessageLiveChatQR from './message/MessageLiveChatQR';\r\nimport ManualEndSessionScreen from './message/sessionHandling/ManualEndSession';\r\nimport AutoEndSession from './message/sessionHandling/AutoEndSession';\r\nimport { StoreSelector } from './store-selector/StoreSelector';\r\nimport { ProductList } from './product-list/ProductList';\r\nimport { ProductNearbyStoreList } from './product-nearby-store-list/ProductNearbyStoreList';\r\nimport { FindAWine } from '../find-a-wine/FindAWine';\r\nimport { FAWProps } from '../find-a-wine/models/fawTypes';\r\nimport { openPdp, showFawPage, isBotOpenFirstTime, updateLCUserInitalPosition, updateLCUserPosition, isCustomQueueMessageTriggered, setAddtlComments, setWidgetSessionId, setShopperId, setShowOrderTrackingDetail, setOrderForTile, updateLastFollowUpEventName, showVOCSurvey } from '../actions/index';\r\nimport ArticleList from './message/ArticleList';\r\nimport ArticleDetail from './article/ArticleDetail';\r\nimport { pickRandomString, getOrdinalSuffix, isMobileOS, getWordCount } from '../widget/util/commonUtil';\r\nimport { getDST } from '../widget/util/dateTimeHelper';\r\nimport { QrPayloadModel } from './models/qrPayloadModel';\r\nimport ArticleListPayloadProps from './message/ArticleListPayload';\r\nimport { getAuthBackwardCompatibilitySetting, getConfigSettings, getFeatureSetting, greetLoggedInShopper } from './chatservice/chatserverApis';\r\nimport OrderExpandedTile from './message/verifiedOrderTracking/OrderExpandedTile';\r\nimport VerifiedOrderList from './message/verifiedOrderTracking/VerifiedOrderList';\r\nimport { FollowUpEventDataModel } from './models/followUpEventDataModel';\r\nimport AgeVerification from './AgeVerification/AgeVerification';\r\n\r\nconst cookies: Cookies = new Cookies();\r\n\r\nlet intervalFunction: any;\r\nlet timeoutAcceptance: any;\r\nlet globalBotTimeout: any;\r\nlet globalBotSessionAlive: any;\r\nlet lCQueueNotificationInterval: any;\r\nlet messageListArray: any[] = [];\r\n\r\nlet fawProps: FAWProps;\r\n\r\ndeclare global {\r\n var userShopperId: number;\r\n var userSessionId: string;\r\n interface Window { KAMPYLE_ONSITE_SDK: any; sf_widget: any; }\r\n}\r\n\r\nconst Widget = () => {\r\n const messagesEndRef: any = useRef(null);\r\n const [isHostDevice, setIsHostDevice] = useState((config.ISWEBVIEW) ? true : (config.ISSTAGING) ? false : null);\r\n const [input, setInput] = useState('');\r\n const [messages, setMessages] = useState([]);\r\n const [loader, setLoader] = useState(false);\r\n const [openLiveChat, setOpenLiveChat] = useState(false);\r\n const [showWidget, setShowWidget] = useState(false);\r\n const [showMurphyPopup, setShowMurphyPopup] = useState(false);\r\n const [murphyTyping, setMurphyTyping] = useState(false);\r\n const [showArticle, setShowArticle] = useState(false);\r\n const [articleData, setArticleData] = useState();\r\n const [paSelectedStoreData, setPaSelectedStoreData] = useState();\r\n const [showTicketForm, setShowTicketForm] = useState(false);\r\n const [showThankYou, setShowThankYou] = useState(false);\r\n const [isBotOpenFromBWS, setIsBotOpenFromBWS] = useState(false);\r\n const [acceptIntentTriggeredOnQueryResp, setAcceptIntentTriggeredOnQueryResp] = useState(false);\r\n\r\n const [showInputTextBox, setShowInputTextBox] = useState(true);\r\n const [shouldInitWithWelcome, setShouldInitWithWelcome] = useState(true);\r\n\r\n const [showUserForm, setShowUserForm] = useState(false);\r\n const [name, setName] = useState(\"\");\r\n const [firstName, setFirstName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [showLiveChatRating, setShowLiveChatRating] = useState(false);\r\n const [liveChatRating, setLiveChatRating] = useState(\"\");\r\n const [liveChatAgent, setLiveChatAgent] = useState(\"\");\r\n\r\n const [endScreenMountingStyle, setEndScreenMountingStyle] = useState('');\r\n const [showVerifyAge, setShowVerifyAge] = useState(false)\r\n const [isOverlayScreenMounted, setisOverlayScreenMounted] = useState(false)\r\n const [showManualEndSessionScreen, setShowManualEndSessionScreen] = useState(false);\r\n const [autoEndSessionScreen, setAutoEndSessionScreen] = useState(false);\r\n const [showCloseAndSkip, setShowCloseAndSkip] = useState(false);\r\n const [showVOCLoader, setShowVOCLoader] = useState(false);\r\n const [timeoutType, setTimeoutType] = useState(0);\r\n const [isLCReviewDone, setLCReviewDone] = useState(false);\r\n const [lCQueueMessage, setLCQueueMessage] = useState([]);\r\n const [showWelcomeMessage, setShowWelcomeMessage] = useState(false);\r\n const [isArticleFound, setIsArticleFound] = useState(null);\r\n const [isBwsSiteScrolling, setIsBwsSiteScrolling] = useState(false);\r\n\r\n\r\n const [liveChatComment, setLiveChatComment] = useState(\"\");\r\n const [unreadMessageCount, setUnreadMessageCount] = useState(0);\r\n const [agentNames, setAgentNames] = useState([livechat.HEADER_TEXT]);\r\n const queuePosition: any = useRef();\r\n const agentChatCount: any = useRef(0);\r\n const sessionId: any = useRef(\"\"); // this is the dialogflow session id as handled by the chatserver\r\n const intentGroupId: any = useRef(\"\");\r\n const intentGroupPendingRenew: any = useRef(false);\r\n const queryId: any = useRef(\"\");\r\n const intentGroupName: any = useRef(\"\");\r\n const intentName: any = useRef(\"\");\r\n\r\n const chatbotUserId: any = useRef(\"\");\r\n const shopperEncryptedEmail: any = useRef(\"\");\r\n const isChangeAlerted: any = useRef(false); // isChangeAlerted flag tells the widget whether to display log on status or not, when the user toggles the widget open\r\n const isUserLoggedOn: any = useRef(false);\r\n const isWidgetShown: any = useRef(false);\r\n const isInitWelcomeShown: any = useRef(false);\r\n\r\n const isLiveChatOn: any = useRef(false);\r\n const liveChatHours: any = useRef(\"\");\r\n const dispatch = useDispatch();\r\n\r\n const pdpOpened = useSelector((state: RootState) => { return state.fawData.pdpOpened });\r\n const showFAW = useSelector((state: RootState) => { return state.fawData.showFAW });\r\n const fawStoreName = useSelector((state: RootState) => { return state.fawData.selectedStoreName });\r\n const fawStreetNumber = useSelector((state: RootState) => { return state.fawData.selectedStoreId });\r\n const isWidgetOpenFirstTime = useSelector((state: RootState) => { return state.botData.isWidgetOpenFirstTime });\r\n const lcUserInitialPosition = useSelector((state: RootState) => { return state.botData.liveChatUserInitialPosition });\r\n const liveChatUserQueuePosition = useSelector((state: RootState) => { return state.botData.liveChatUserQueuePosition });\r\n const customQueueMessageTriggered = useSelector((state: RootState) => { return state.botData.isCustomQueueMessageTriggered });\r\n const showOrderTrackingDetail = useSelector((state: RootState) => { return state.botData.showOrderTrackingDetail });\r\n const orderDataExpandedTile = useSelector((state: RootState) => { return state.botData.orderDataExpandedTile });\r\n const lastFollowUpEventName = useSelector((state: RootState) => { return state.botData.lastFollowUpEventName });\r\n const showVocSurvey = useSelector((state: RootState) => { return state.botData.showVocSurvey });\r\n const [currentOrderId, setCurrentOrderId] = useState(\"\");\r\n const featureSddPrompt: any = useRef(false);\r\n const featureDelGuarranteeMicroCopy: any = useRef(false);\r\n const greetingTemplate: any = useRef('');\r\n const isGreetShopperCalledFromToggle = useRef(false);\r\n\r\n //const shopperId: number = useSelector((state: RootState) => { return state.botData.shopperId });\r\n const widgetSessionId: string = useSelector((state: RootState) => { return state.botData.widgetSessionId }); // this is the widget session, it changes every start of use\r\n const shopperId: any = useRef(0);\r\n const userAuthKey: any = useRef('');\r\n const userAuthKeyRetryCount: any = useRef(0);\r\n const authenticationBackwardCompatibility: any = useRef(null);\r\n const settingsRetryCount: any = useRef(0);\r\n\r\n const widgetSessionIdLive: any = useRef(\"\");\r\n let divFooterContainer: HTMLDivElement | null = null;\r\n const lastMessageTimeout: any = useRef(null);\r\n\r\n async function dialogFlowPing() {\r\n //To keep session alive with dialog flow\r\n const params = {\r\n intentGroupName: intentGroupName.current,\r\n intentGroupId: intentGroupId.current,\r\n intentName: intentName.current,\r\n intentGroupPendingRenew: false,\r\n shopperId: shopperId.current,\r\n widgetSessionId: widgetSessionId\r\n };\r\n\r\n // set livechat availability parameter as false since its irrelevant to this event\r\n await eventQueryAsync(dialogflowEvent.KEEP_ALIVE, chatbotUserId.current, sessionId.current, false, params);\r\n }\r\n\r\n const manualDialogFlowPing = async () => {\r\n // show timeout screen after 10 mins\r\n resumeGlobalTimeout();\r\n dialogFlowPing();\r\n }\r\n\r\n const dialogflowEventQueryAsync = async (text: string, params: any = null) => {\r\n // show timeout screen after 10 mins\r\n resumeGlobalTimeout();\r\n\r\n //To keep session alive with dialog flow\r\n keepSessionAlive();\r\n const isLCAvailable = isLiveChatAvailable();\r\n\r\n if (params) {\r\n params['intentGroupName'] = intentGroupName.current;\r\n params['intentGroupId'] = intentGroupId.current;\r\n params['intentName'] = intentName.current;\r\n params['intentGroupPendingRenew'] = intentGroupPendingRenew.current;\r\n params['shopperId'] = shopperId.current;\r\n params['widgetSessionId'] = widgetSessionId;\r\n } else {\r\n params = {\r\n intentGroupName: intentGroupName.current,\r\n intentGroupId: intentGroupId.current,\r\n intentName: intentName.current,\r\n intentGroupPendingRenew: intentGroupPendingRenew.current,\r\n shopperId: shopperId.current,\r\n widgetSessionId: widgetSessionId\r\n }\r\n }\r\n\r\n // clear the last follow up event name once the follow up has been triggered\r\n dispatch(updateLastFollowUpEventName(''));\r\n\r\n // set the false after use\r\n intentGroupPendingRenew.current = false;\r\n const result = await eventQueryAsync(text, chatbotUserId.current, sessionId.current, isLCAvailable, params);\r\n\r\n // process response from DF\r\n const processedMessages = processDFQueryResponse(result);\r\n\r\n if (processedMessages.length > 0) {\r\n addDelayToMessages(processedMessages);\r\n }\r\n\r\n setLoader(false);\r\n }\r\n\r\n const dialogflowTextQueryAsync = async (text: string) => {\r\n // remove timeout for acceptane rate\r\n clearTimeout(timeoutAcceptance);\r\n\r\n // show timeout screen after 10 mins\r\n resumeGlobalTimeout();\r\n\r\n //To keep session alive with dialog flow\r\n keepSessionAlive();\r\n\r\n const isLCAvailable = isLiveChatAvailable();\r\n\r\n let params: any = {\r\n intentGroupName: intentGroupName.current,\r\n intentGroupId: intentGroupId.current,\r\n intentName: intentName.current,\r\n intentGroupPendingRenew: intentGroupPendingRenew.current,\r\n shopperId: shopperId.current,\r\n widgetSessionId: widgetSessionId\r\n }\r\n\r\n // if the request is coming from an app : android or ios, pass the device type\r\n if (config.ISWEBVIEW && window?.globalShopperDetails?.deviceType !== null && window?.globalShopperDetails?.deviceType !== undefined) {\r\n params['deviceType'] = window?.globalShopperDetails?.deviceType;\r\n params['appVersion'] = window?.globalShopperDetails?.appVersion;\r\n }\r\n\r\n // set the false after use\r\n intentGroupPendingRenew.current = false;\r\n\r\n const result = await textQueryAsync(text, chatbotUserId.current, sessionId.current, isLCAvailable, params);\r\n\r\n // process response from DF\r\n const processedMessages = processDFQueryResponse(result);\r\n\r\n\r\n if (processedMessages.length > 0) {\r\n addDelayToMessages(processedMessages);\r\n }\r\n\r\n setLoader(false);\r\n }\r\n\r\n const processDFQueryResponse = (messages: MessageModel[]) => {\r\n\r\n let overrideResponse: string = \"\";\r\n let nextEventName: string = \"\";\r\n let acceptanceRateTriggered: boolean = false;\r\n let productAvailFollowUpTriggered: boolean = false;\r\n let orderTrackingFollowUpTriggered: boolean = false;\r\n const numberOfFAQArticles = messages.filter(m => m.type === MessageTypes.Article || m.type === MessageTypes.ArticleList)?.length;\r\n\r\n const numberOfResponses = messages.filter(a => a.type === MessageTypes.Message);\r\n\r\n // get followup event name if available.\r\n const followUpEventMessage = messages.filter(m => m.type === MessageTypes.FollowUpEventData && m.data !== null);\r\n if (followUpEventMessage.length === 1) {\r\n let eventData: FollowUpEventDataModel = followUpEventMessage[0].data;\r\n if (eventData.followUpEventName)\r\n nextEventName = eventData.followUpEventName;\r\n }\r\n\r\n for (let z = messages.length - 1; z >= 0; z--) {\r\n if (messages[z].type === MessageTypes.Message) {\r\n // if there is an override response, use that and override the response \r\n messages[z].text = (overrideResponse !== '') ? overrideResponse : messages[z].text;\r\n overrideResponse = \"\";\r\n\r\n if (!acceptanceRateTriggered && messages[z].text.indexOf('Are you looking for a product') >= 0) {\r\n acceptanceRateTriggered = true;\r\n const params: any = {\r\n acceptanceIntentName: 'PRODUCT AVAILABILITY-general-lookup'\r\n }\r\n\r\n initAcceptanceRate(params);\r\n continue;\r\n }\r\n\r\n if (!acceptanceRateTriggered && messages[z].text.indexOf('The product you’re looking for is not available anywhere') >= 0) {\r\n acceptanceRateTriggered = true;\r\n const params: any = {\r\n acceptanceIntentName: getIntentName(messages[z].type)\r\n }\r\n\r\n let timeout = acceptanceIntent.NEARBY_STORES_TIMEOUT + (numberOfResponses.length * 2000);\r\n\r\n initAcceptanceRate(params, timeout);\r\n continue;\r\n }\r\n\r\n continue;\r\n }\r\n\r\n\r\n if (messages[z].type === MessageTypes.Command) {\r\n // execute command triggers\r\n executeCommand(messages[z].data?.commandName);\r\n\r\n // remove item from array after command is executed\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n if (messages[z].type === MessageTypes.LiveChatMessage) {\r\n // remove item from array since message is just the command message\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the session id and delete from message response\r\n if (messages[z].type === MessageTypes.SessionId) {\r\n const userSessionId = messages[z].text;\r\n sessionId.current = userSessionId;\r\n globalThis.userSessionId = userSessionId;\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the intent group id and delete from message response\r\n if (messages[z].type === MessageTypes.QueryId) {\r\n queryId.current = messages[z].text;\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the intent group id and delete from message response\r\n if (messages[z].type === MessageTypes.IntentGroupId) {\r\n intentGroupId.current = messages[z].text;\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the intent group name and delete from message response\r\n if (messages[z].type === MessageTypes.IntentGroupName) {\r\n intentGroupName.current = messages[z].text;\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the intent previous intent name and delete from message response\r\n if (messages[z].type === MessageTypes.IntentName) {\r\n intentName.current = messages[z].text;\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the last order id checked if present\r\n if (messages[z].type === MessageTypes.LastOrderChecked) {\r\n if (messages[z].data !== null) {\r\n setCurrentOrderId(messages[z].data);\r\n }\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // save the last order id checked if present\r\n if (messages[z].type === MessageTypes.FollowUpEventData && messages[z].data !== null) {\r\n\r\n if (!acceptanceRateTriggered) {\r\n acceptanceRateTriggered = true;\r\n\r\n let eventData: FollowUpEventDataModel = messages[z].data;\r\n const params: any = {\r\n shopperId: shopperId.current,\r\n widgetSessionId: widgetSessionId\r\n }\r\n\r\n switch (eventData.followUpEventType) {\r\n case FollowUpEventTypes.OrderTrackingAcceptance:\r\n dispatch(updateLastFollowUpEventName(eventData.followUpEventName));\r\n initOrderTrackingFollowup(params, acceptanceIntent.ORDERTRACKING_AUTH_TIMEOUT, eventData.followUpEventName);\r\n break;\r\n case FollowUpEventTypes.CoolerFAQAcceptance:\r\n dispatch(updateLastFollowUpEventName(eventData.followUpEventName));\r\n initOrderTrackingFollowup(params, acceptanceIntent.COOLER_ARTICLE_TIMEOUT + (numberOfResponses.length * 2000), eventData.followUpEventName);\r\n break;\r\n case FollowUpEventTypes.SDDFAQAcceptance:\r\n dispatch(updateLastFollowUpEventName(eventData.followUpEventName));\r\n initDynamicFollowup(params, acceptanceIntent.SDD_ARTICLE_TIMEOUT + (numberOfResponses.length * 2000), eventData.followUpEventName);\r\n break;\r\n default:\r\n dispatch(updateLastFollowUpEventName(''));\r\n initDynamicFollowup(params, acceptanceIntent.DEFAULT_TIMEOUT + (numberOfResponses.length * 2000), '');\r\n break;\r\n }\r\n }\r\n\r\n // after processing, remove it from the messages\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n // we need to manually remove live chat option because\r\n // we're stuck with using the sdk on the UI side\r\n if (messages[z].type === MessageTypes.ConditionalQr || (messages[z].type === MessageTypes.Form\r\n && (messages[z].text.toLowerCase() === 'send us a message' || messages[z].text.toLowerCase() === 'leave us a message'))) {\r\n // block QR if not allowed\r\n if (!isQRAllowed(messages[z].text)) {\r\n // override message to follow response from conditional QR\r\n overrideResponse = (messages[z].unavailable_response) ? messages[z].unavailable_response : \"\";\r\n\r\n // remove message since QR is not allowed\r\n messages.splice(z, 1);\r\n continue;\r\n }\r\n\r\n }\r\n\r\n if (messages[z].type === MessageTypes.QuickReply) {\r\n messages[z]?.text?.forEach((m: MessageModel) => {\r\n if (m.type === MessageTypes.ConditionalQr || m.type === MessageTypes.Form)\r\n setLiveChatHoursSubtext(m);\r\n });\r\n }\r\n\r\n if (messages[z].type === MessageTypes.QuickReplyPayload || messages[z].type === MessageTypes.ArticlePayload) {\r\n messages[z]?.data?.forEach((m: QrPayloadModel) => {\r\n\r\n // check if the URL has i_cid parameter for analytics. if yes, append app if request is app.\r\n if (m.uri !== undefined && m.uri !== null && isMobileOS()) {\r\n m.uri = updateIcidParam(m.uri);\r\n }\r\n\r\n if (m.type === MessageTypes.ConditionalQr || m.type === MessageTypes.Form) {\r\n setLiveChatHoursSubtextQr(m);\r\n }\r\n\r\n if (isMobileOS() && m.type === MessageTypes.DynamicQr) {\r\n let dynamicQR = m as any;\r\n\r\n if (dynamicQR.data !== undefined && dynamicQR.data.callback !== undefined && dynamicQR.data.callback.url !== undefined && dynamicQR.data.callback.url !== null) {\r\n dynamicQR.data.callback.url = updateIcidParam(dynamicQR.data.callback.url);\r\n }\r\n }\r\n });\r\n\r\n if (nextEventName !== '' && messages[z].type === MessageTypes.ArticlePayload) {\r\n messages[z]?.data?.forEach((m: any) => {\r\n m.followUpEventName = nextEventName;\r\n });\r\n }\r\n }\r\n\r\n\r\n if (messages[z].type === MessageTypes.OrderTracking || messages[z].type === MessageTypes.ProductNearbyStore || messages[z].type === MessageTypes.Url) {\r\n const params: any = {\r\n acceptanceIntentName: getIntentName(messages[z].type)\r\n }\r\n\r\n if (!acceptanceRateTriggered) {\r\n acceptanceRateTriggered = true;\r\n let timeout = acceptanceIntent.DEFAULT_TIMEOUT + (numberOfResponses.length * 2000);\r\n\r\n initAcceptanceRate(params, timeout);\r\n continue;\r\n }\r\n }\r\n\r\n if (messages[z].type === MessageTypes.Stores) {\r\n const params: any = {\r\n acceptanceIntentName: getIntentName(messages[z].type)\r\n }\r\n\r\n if (!acceptanceRateTriggered) {\r\n acceptanceRateTriggered = true;\r\n let timeout = acceptanceIntent.DEFAULT_TIMEOUT + (numberOfResponses.length * 2000);\r\n\r\n initStoreLocatorAcceptanceRate(params, timeout);\r\n continue;\r\n }\r\n }\r\n\r\n if (messages[z].type === MessageTypes.Article || messages[z].type === MessageTypes.ArticleList || messages[z].type === MessageTypes.ArticlePayload) {\r\n const params: any = {\r\n acceptanceIntentName: getIntentName(messages[z].type)\r\n }\r\n\r\n if (!acceptanceRateTriggered) {\r\n acceptanceRateTriggered = true;\r\n const timeOut = (numberOfFAQArticles * 1000) + acceptanceIntent.ARTICLES_FOLLOWUP_DEFAULT_TIMEOUT;\r\n initAcceptanceRate(params, timeOut);\r\n continue;\r\n }\r\n }\r\n\r\n if (messages[z].type === MessageTypes.Product) {\r\n if (!productAvailFollowUpTriggered) {\r\n productAvailFollowUpTriggered = true;\r\n let timeout = acceptanceIntent.DEFAULT_TIMEOUT + (numberOfResponses.length * 2000);\r\n\r\n initProductAvailAcceptanceRate(null, timeout);\r\n continue;\r\n }\r\n }\r\n\r\n if (messages[z].type === MessageTypes.VerifiedOrders) {\r\n if (!orderTrackingFollowUpTriggered) {\r\n orderTrackingFollowUpTriggered = true;\r\n let timeout = acceptanceIntent.ORDERTRACKING_AUTH_TIMEOUT;\r\n\r\n let acceptanceName = (messages[z].acceptanceEventName !== null) ? messages[z].acceptanceEventName : \"\";\r\n\r\n const params: any = {\r\n shopperId: shopperId.current,\r\n widgetSessionId: widgetSessionId\r\n }\r\n\r\n initOrderTrackingFollowup(params, timeout, acceptanceName);\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n return messages;\r\n }\r\n\r\n const updateIcidParam = (url: string) => {\r\n\r\n let helpUrl = new URL(url);\r\n let searchParams = helpUrl.searchParams;\r\n const paramKey = 'i_cid';\r\n const icidParams = searchParams.get(paramKey);\r\n\r\n if (icidParams !== undefined && icidParams !== null) {\r\n searchParams.set(paramKey, icidParams + '-app');\r\n helpUrl.search = searchParams.toString();\r\n url = helpUrl.toString();\r\n }\r\n\r\n return url;\r\n }\r\n\r\n const addDelayToMessages = (processedMessages: any) => {\r\n let messageCounter: number = 0;\r\n let splitMessages: MessageModel[] = []\r\n let messageGroup: any = [];\r\n\r\n processedMessages.forEach((elem: MessageModel) => {\r\n if (elem.type === MessageTypes.Message) {\r\n messageCounter += 1;\r\n }\r\n\r\n if (messageCounter > 1) {\r\n messageGroup.push(splitMessages);\r\n splitMessages = [];\r\n splitMessages.push(elem);\r\n } else {\r\n splitMessages.push(elem);\r\n }\r\n });\r\n\r\n // push the last group \r\n messageGroup.push(splitMessages);\r\n let lastTimeout = 1;\r\n messageGroup.forEach((group: any, index: number) => {\r\n let timeout = 1;\r\n\r\n var wordCount = (group.length > 0) ? getWordCount(group[0].text) : 0;\r\n\r\n if (index === 1 && group[0].text === 'If the Cooler is still not showing in the app after trying the earlier suggestions, maybe these will help instead.') {\r\n timeout = 9000;\r\n }\r\n else if (index === 1) {\r\n timeout = 2000;\r\n } else if (index > 1) {\r\n timeout = (Math.floor(wordCount / 10) * 1500) * (index - 1);\r\n }\r\n\r\n // if its the last message assign the timeout to a variable\r\n timeout = (lastTimeout + timeout);\r\n\r\n if (messageGroup.length - 1 === index) {\r\n setTimeout(() => {\r\n setMessages((messages: []) => [...messages, ...handleMessageNewRoutine(group)]);\r\n }, timeout);\r\n\r\n lastMessageTimeout.current = timeout;\r\n } else {\r\n setTimeout(() => {\r\n setMessages((messages: []) => [...messages, ...handleMessageNewRoutine(group)]);\r\n }, timeout);\r\n }\r\n\r\n lastTimeout = timeout;\r\n });\r\n }\r\n\r\n const setLiveChatHoursSubtext = (message: MessageModel) => {\r\n const messageText = message.text.toLowerCase();\r\n if (messageText === \"live chat\" || messageText === \"send us a message\" || messageText === \"leave us a message\") { message.subtext = `Live chat operating hours (${getDST()}): ${liveChatHours.current[0]} - ${liveChatHours.current[1]}` }\r\n }\r\n\r\n const setLiveChatHoursSubtextQr = (message: QrPayloadModel) => {\r\n const messageText = message.text.toLowerCase();\r\n if (messageText === \"live chat\" || messageText === \"send us a message\" || messageText === \"leave us a message\") { message.subtext = `Live chat operating hours (${getDST()}): ${liveChatHours.current[0]} - ${liveChatHours.current[1]}` }\r\n }\r\n\r\n const getIntentName = (messageType: string) => {\r\n let acceptanceIntentName: string = \"\";\r\n switch (messageType) {\r\n case MessageTypes.Stores:\r\n acceptanceIntentName = \"STORE LOCATOR-address\";\r\n break;\r\n case MessageTypes.OrderTracking:\r\n acceptanceIntentName = \"ORDER TRACKING-delivery-type\";\r\n break;\r\n case MessageTypes.Article:\r\n case MessageTypes.ArticleList:\r\n case MessageTypes.ArticlePayload:\r\n acceptanceIntentName = \"FAQ-Default-Intent\";\r\n break;\r\n case MessageTypes.Product:\r\n acceptanceIntentName = \"PRODUCT AVAILABILITY-general-lookup\";\r\n break;\r\n default:\r\n acceptanceIntentName = \"Unknown Message Type\";\r\n break;\r\n }\r\n\r\n return acceptanceIntentName;\r\n }\r\n\r\n // check if QR is currently allowed in curent chat state\r\n const isQRAllowed = (qrText: string): boolean => {\r\n let isAllowed: boolean = false;\r\n\r\n // other future conditional QRs can be expanded here\r\n switch (qrText.toLowerCase()) {\r\n case \"live chat\":\r\n isAllowed = isLiveChatAvailable();\r\n break;\r\n case \"leave us a message\":\r\n case \"send us a message\":\r\n isAllowed = !isLiveChatAvailable();\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return isAllowed;\r\n }\r\n\r\n const executeCommand = (commandText: string) => {\r\n switch (commandText) {\r\n case \"liveChatInit\":\r\n initLiveChat(false);\r\n\r\n // set cookie session variable to keep track that live chat is on\r\n // even on page refresh\r\n // TODO : Set cookie\r\n break;\r\n case \"endBotSession\":\r\n setTimeoutType(3);\r\n setisOverlayScreenMounted(true)\r\n setShowManualEndSessionScreen(true);\r\n\r\n // set cookie session variable to keep track that live chat is on\r\n // even on page refresh\r\n // TODO : Set cookie\r\n break;\r\n case \"openFAWForm\":\r\n chooseWinePreference(fawStoreName, fawStreetNumber, intentGroupId.current, \"FindAWine\", 9);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const initLiveChat = function (bypassUserForm: boolean = true) {\r\n // check if agents or chat is available before initiating the chat.\r\n // this part should be moved to chatserver when possible\r\n // check live chat availability again\r\n if (isLiveChatAvailable()) {\r\n // clear bot timeout\r\n clearTimeout(globalBotTimeout);\r\n\r\n // show live chat \r\n isLiveChatOn.current = true;\r\n\r\n if (bypassUserForm === false) {\r\n // clear name and email first\r\n setName('');\r\n setEmail('');\r\n\r\n showUserInput(false);\r\n setShowUserForm(true);\r\n } else {\r\n // send the visitor info immdiately from variable\r\n //const visitorInfo = getCookie(\"visitorInfo\");\r\n\r\n //zChat.setVisitorInfo(visitorInfo, function() {});\r\n\r\n // send history of messages as first message\r\n const messageHistory = getlocalStorage(\"messageHistory\");\r\n const liveChatHistory = selectLiveChatMessages(getlocalStorage(\"allMessageHistory\"));\r\n const combinedMessages = `${messageHistory}\\n\\n${liveChatHistory}`;\r\n sendLiveChatMessage(combinedMessages);\r\n }\r\n\r\n setArticleData({});\r\n setShowArticle(false);\r\n setShowTicketForm(false);\r\n setShowThankYou(false);\r\n\r\n setLiveChatRating('');\r\n setLiveChatComment('');\r\n } else {\r\n // display status to user\r\n setMessages((messages: any) => [...messages, ...[{ text: \"Live Chat is currently unavailable. Please check on of our other contact options.\", from: Speaker.Agent, type: MessageTypes.Message }]]);\r\n dialogflowEventQueryAsync(dialogflowEvent.LIVECHAT_GETINTOUCH);\r\n }\r\n }\r\n\r\n const addToLiveChatMessages = (text: string, from: string, options?: string[]) => {\r\n setMessages((liveChatMessages: any) =>\r\n [...liveChatMessages,\r\n ...[{\r\n text: text,\r\n from: from,\r\n type: MessageTypes.LiveChatMessage\r\n }]\r\n ]);\r\n\r\n if (options) {\r\n options.forEach(opt => {\r\n setMessages((liveChatMessages: MessageModel[]) =>\r\n [...liveChatMessages,\r\n ...[{\r\n text: opt,\r\n from: from,\r\n type: MessageTypes.Qr,\r\n hasQr: true\r\n }]\r\n ]);\r\n });\r\n }\r\n\r\n if (!showWidget) {\r\n setUnreadMessageCount(unreadMessageCount => unreadMessageCount + 1);\r\n }\r\n };\r\n\r\n const addToStateArray = (name: string) => {\r\n var array = Array.from(agentNames); // make a separate copy of the array\r\n array.unshift(name);\r\n return array;\r\n }\r\n\r\n const ratingWindowDisplayDecision = () => {\r\n // wait 1.5 seconds and if no agent comes in, end the chat\r\n // check again if there are no agents left\r\n // show the rating request page \r\n if (agentChatCount.current <= 0) {\r\n setLiveChatRating('');\r\n setLiveChatComment('');\r\n setShowLiveChatRating(true);\r\n }\r\n }\r\n\r\n const removeFromStateArray = (name: string) => {\r\n var array = Array.from(agentNames); // make a separate copy of the array\r\n\r\n var index = array.indexOf(name);\r\n if (index !== -1) {\r\n array.splice(index, 1);\r\n }\r\n\r\n return array;\r\n }\r\n\r\n const getLcQueueMessage = (queuePosition: number) => {\r\n const messages: string[][] = [];\r\n let queueWaitingMessage: string[] = [];\r\n let randomIndex: number;\r\n\r\n switch (true) {\r\n case (queuePosition >= 50): //eg: Queue position 50 and above\r\n if (isMobileOS()) {\r\n messages.push(\r\n [`Hey ${name}, it's going to be a bit of a wait. Live chat is popular right now.`,\r\n `You can navigate away from this page, but keep it open in the background. Please check back from time to time to see your progress in the queue.`],\r\n [`Woah, what a queue! Sorry for the long wait, ${name}.`,\r\n `Please keep this page open when you navigate to a different one and check back regularly to see your progress in line.`]);\r\n } else {\r\n messages.push(\r\n [`Hey ${name} it is going to be bit of wait . Live chat is popular right now .`,\r\n `You can navigate away from this page, but keep it open in the background. You’ll get an audio notification once you have reached 3rd in place in the queue..`\r\n ],\r\n [`Hey ${name} it is going to be bit of wait . Live chat is popular right now .`,\r\n `Please keep this page open when you navigate to a different one and keep an 'ear' out for an audio notification.`\r\n ]\r\n )\r\n }\r\n randomIndex = Math.round(Math.random() * messages.length);\r\n queueWaitingMessage = messages[randomIndex];\r\n break;\r\n case (queuePosition <= 49 && queuePosition >= 10)://eg: Queue position between 49 and 10\r\n if (isMobileOS()) {\r\n messages.push(\r\n [`You can navigate away from this page, but keep it open in the background. Please check back from time to time to see your progress in the queue.`],\r\n [`Please keep this page open when you navigate to a different one and check back regularly to see your progress in line.`])\r\n } else {\r\n messages.push(\r\n [`You can navigate away from this page, but keep it open in the background. You'll get an audio notification once you reach 3rd place in the queue.`],\r\n [`Please keep this page open when you navigate to a different one and keep an 'ear' out for an audio notification. I'll let you know once it's almost your turn.`])\r\n }\r\n randomIndex = Math.round(Math.random() * messages.length);\r\n queueWaitingMessage = messages[randomIndex];\r\n break;\r\n case queuePosition >= 5 && queuePosition <= 9: //eg: Queue position between 5 and 9\r\n queueWaitingMessage = [`Thank you for your patience. It shouldn't be too long now.`];\r\n break;\r\n default:\r\n queueWaitingMessage = [];\r\n }\r\n\r\n setLCQueueMessage(queueWaitingMessage);\r\n }\r\n\r\n const liveChatEvents = (data: any) => {\r\n switch (data.type) {\r\n case 'chat.msg':\r\n if (data.msg.indexOf('LC Context') !== 0) {\r\n const speaker = (data.nick === \"agent:trigger\") ? Speaker.BWS : (data.nick.indexOf('visitor') >= 0) ? Speaker.User : Speaker.Agent;\r\n addToLiveChatMessages(data.msg, speaker, data.options);\r\n }\r\n break;\r\n case 'chat.memberleave':\r\n if (data.nick.includes(\"agent\")) {\r\n let agent_name: string = data.display_name.split(' ')[0];\r\n\r\n addToLiveChatMessages(`${agent_name} has left the chat`, Speaker.System);\r\n\r\n setAgentNames(removeFromStateArray(agent_name));\r\n\r\n agentChatCount.current = parseInt(agentChatCount.current) - 1;\r\n\r\n // trigger this countdown only if there are no more agents left\r\n if (agentChatCount.current <= 0) {\r\n intervalFunction = setTimeout(ratingWindowDisplayDecision, livechat.ENDCHAT_TIMEOUT);\r\n }\r\n }\r\n break;\r\n case 'chat.request.rating':\r\n setShowLiveChatRating(true);\r\n break;\r\n case 'typing':\r\n setLoader(data.typing);\r\n break;\r\n case 'chat.queue_position':\r\n if (queuePosition.current !== data.queue_position && data.queue_position !== 0) {\r\n addToLiveChatMessages(`You are now no ${data.queue_position} in the queue.`, Speaker.System);\r\n }\r\n\r\n if (!queuePosition.current) {\r\n dispatch(updateLCUserInitalPosition(data.queue_position));\r\n }\r\n\r\n dispatch(updateLCUserPosition(data.queue_position));\r\n\r\n //Resetting back the triggered message for another group\r\n if (data.queue_position === 49 || data.queue_position === 9) {\r\n dispatch(isCustomQueueMessageTriggered(false));\r\n }\r\n\r\n queuePosition.current = data.queue_position;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const closeUserForm = () => {\r\n setShowUserForm(false);\r\n\r\n let visitorInfo = {\r\n display_name: name,\r\n email: email\r\n };\r\n }\r\n\r\n const getCookie = (cookieName: string) => {\r\n if (cookies.get(cookieName) === undefined) {\r\n return null\r\n } else {\r\n return cookies.get(cookieName);\r\n }\r\n }\r\n\r\n const setlocalStorage = (storageName: string, storageObj: any) => {\r\n }\r\n\r\n const getlocalStorage = (storageName: string) => {\r\n var items = null; //window.localStorage.getItem(storageName);\r\n if (items === null) return null;\r\n\r\n return JSON.parse(items);\r\n }\r\n\r\n const setCookie = (cookieName: string, cookieObj: any) => {\r\n const cookieString = JSON.stringify(cookieObj);\r\n\r\n if (window.location.hostname === \"localhost\") {\r\n cookies.set(cookieName, cookieString, {\r\n domain: 'localhost'\r\n });\r\n } else {\r\n cookies.set(cookieName, cookieString, {\r\n path: '/',\r\n domain: '.windows.net',\r\n sameSite: 'none',\r\n secure: true,\r\n maxAge: 31536000\r\n });\r\n }\r\n }\r\n\r\n\r\n const isSafeInput = (trimmedInput: any) => {\r\n if (!trimmedInput || trimmedInput === '') {\r\n return false;\r\n }\r\n if ((trimmedInput.length > 256 || trimmedInput.length < 1) && isLiveChatOn.current === false) {\r\n setMessages((messages: any) => [...messages, ...[{ text: 'Sorry, I didn\\'t quite get that - can you make your question shorter for me? I can only accept up to 256 characters', from: Speaker.System, type: MessageTypes.Message }]]);\r\n return false;\r\n }\r\n\r\n var regex = new RegExp(config.ALLOWED_CHARACTERS, 'i');\r\n if (!trimmedInput.match(regex)) {\r\n setMessages((messages: any) => [...messages, ...[{ text: 'Oops! I can\\'t receive your message as it contains special characters such as ; ><{}[]|^. Do us a favor, remove them & try again, cheers!', from: Speaker.BWS, type: MessageTypes.Message }]]);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n\r\n const sendMessage = (event: any) => {\r\n event.preventDefault();\r\n let divTextBox = event.currentTarget.ownerDocument.getElementById('divTextBox');\r\n\r\n // if the user is chatting with an agent, send message to livechat\r\n // if not, send to dialogflow\r\n const trimmedInput = divTextBox.innerText.trim();\r\n\r\n if (isLiveChatOn.current === true) {\r\n addToLiveChatMessages(trimmedInput, Speaker.User);\r\n sendLiveChatMessage(trimmedInput);\r\n setLoader(false);\r\n } else {\r\n // check validity of input\r\n if (!isSafeInput(trimmedInput)) {\r\n return false;\r\n }\r\n\r\n setMessages((messages: any) => [...messages, ...[{ text: trimmedInput, from: Speaker.User, type: MessageTypes.Message }]]);\r\n dialogflowTextQueryAsync(trimmedInput);\r\n setLoader(true);\r\n }\r\n\r\n setInput('');\r\n divTextBox.innerText = '';\r\n if (divFooterContainer != null) {\r\n divFooterContainer.style.height = '72px';\r\n }\r\n }\r\n\r\n const chooseWinePreference = (storeName: string, streetNumber: string, intentGroupId: string, intentGroupName: string, intentGroupTypeId: number) => {\r\n fawProps = {\r\n storeName: storeName,\r\n streetNumber: streetNumber,\r\n resumeGlobalTimeout: () => resumeGlobalTimeout(),\r\n quickReplyHandler: (event: any, queryType: DialogflowQueryType, eventText: string, showText: boolean) => quickReplyHandler(event, queryType, eventText, showText),\r\n sessionId: sessionId.current,\r\n userId: chatbotUserId.current,\r\n intentGroupId: intentGroupId,\r\n intentGroupName: intentGroupName,\r\n intentGroupTypeId: intentGroupTypeId\r\n }\r\n dispatch(showFawPage(true));\r\n }\r\n\r\n const handleAnalyticsBot = (linkName: string, linkType: string, methodHandler: string) => {\r\n const objCall = {\r\n data: {\r\n linkName: linkName,\r\n linkType: linkType,\r\n },\r\n methodHandler: methodHandler\r\n };\r\n postMessageToClient(objCall);\r\n }\r\n\r\n const quickReplyHandler = (event: any, queryType: DialogflowQueryType = DialogflowQueryType.Text, eventText: string = \"\", showText: boolean = true, params: any = null, renew: boolean = false, intentGroupInfo: any = null) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // show timeout screen after 10 mins\r\n resumeGlobalTimeout();\r\n\r\n if (intentGroupInfo !== null) {\r\n intentGroupName.current = intentGroupInfo.intentGroupName;\r\n intentGroupId.current = intentGroupInfo.intentGroupId;\r\n }\r\n\r\n let text = event.currentTarget.textContent;\r\n if (event.currentTarget.className !== 'vote__button') {\r\n if (text.toLowerCase() === 'store stock availability') {\r\n\r\n handleAnalyticsBot('web:chatbot:linkname:store stock availability', 'chatbot product availability', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'find another product') {\r\n\r\n handleAnalyticsBot('web:chatbot:product availability:follow up:find another product', 'chatbot product availability', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'find nearby' && eventText === dialogflowEvent.PRODUCT_AVAIL_FIND_NEARBY_STORES) {\r\n\r\n handleAnalyticsBot(`web:chatbot:product availability:find nearby:${params.productData.productName}`, 'chatbot product availability find nearby', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === \"yes, i'm done\") {\r\n\r\n handleAnalyticsBot('web:chatbot:product availability:follow up:yes I am done', 'chatbot product availability', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'change store') {\r\n\r\n handleAnalyticsBot('web:chatbot:product availability:follow up:change store', 'chatbot product availability', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if ((text.toLowerCase() === 'select store') && (eventText === 'PRODUCT_AVAIL_SET_STORE')) {\r\n\r\n handleAnalyticsBot('web:chatbot:product availability:select store', 'chatbot product availability', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'help me choose a wine') {\r\n\r\n handleAnalyticsBot('web:chatbot:linkname:find a wine', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'yes, thanks' && eventText === dialogflowEvent.Chatbot_FAW_Followup_Questions) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:did i help you choose a wine:yes thanks', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'no' && eventText === dialogflowEvent.Chatbot_FAW_Followup_Questions) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:did i help you choose a wine:no', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'yes, lets try again' && eventText === dialogflowEvent.Chatbot_FAW_Try_Again) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:would you like to try again:yes', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'no' && eventText === dialogflowEvent.Chatbot_FAW_Try_Again) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:would you like to try again:no', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'same store' && eventText === dialogflowEvent.Chatbot_FAW_Select_Store_Again) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:try different store:same store', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else if (text.toLowerCase() === 'choose a different store' && eventText === dialogflowEvent.Chatbot_FAW_Select_Store_Again) {\r\n\r\n handleAnalyticsBot('web:chatbot:find a wine:try different store:choose a different store', 'chatbot find a wine', 'chatbotTriggerAdobeAnalytics');\r\n\r\n } else {\r\n switch (text.toLowerCase()) {\r\n case 'subscriptions':\r\n handleAnalyticsBot('web:chatbot:linkname:subscription', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'manage subscription':\r\n handleAnalyticsBot('web:chatbot:subscription:manage subscription', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'returns and refunds':\r\n handleAnalyticsBot('web:chatbot:subscription:returns and refunds', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'how to subscribe':\r\n handleAnalyticsBot('web:chatbot:subscription:how to subscribe', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'track subscriptions delivery':\r\n handleAnalyticsBot('web:chatbot:subscription:track subscriptions delivery', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'delivery faqs':\r\n handleAnalyticsBot('web:chatbot:subscription:delivery faqs', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'skip a subscriptions delivery':\r\n handleAnalyticsBot('web:chatbot:subscription:manage subscription:skip a subscriptions delivery', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'cancel subscription':\r\n handleAnalyticsBot('web:chatbot:subscription:manage subscription:cancel subscription', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'update my subscription':\r\n handleAnalyticsBot('web:chatbot:subscription:manage subscription:update my subscription', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n case 'update my details':\r\n handleAnalyticsBot('web:chatbot:subscription:manage subscription:update my details', 'chatbot subscription', 'chatbotTriggerAdobeAnalytics');\r\n break;\r\n default:\r\n if (eventText !== dialogflowEvent.Chatbot_Additional_Questions && eventText !== dialogflowEvent.Chatbot_FAW_Followup_Questions) {\r\n postMessageToClient({ name: \"chatbotQRClicked\", text: text });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // if live chat is on. handle Quick Replies differently\r\n if (isLiveChatOn.current === true) {\r\n addToLiveChatMessages(text, Speaker.User);\r\n sendLiveChatMessage(text);\r\n\r\n } else {\r\n if (showText) {\r\n setMessages((messages: any) => [...messages, ...[{ text: text, from: Speaker.User, type: MessageTypes.Message }]]);\r\n }\r\n setLoader(true);\r\n\r\n if (queryType === DialogflowQueryType.Text) {\r\n dialogflowTextQueryAsync(text);\r\n } else {\r\n dialogflowEventQueryAsync(eventText, params);\r\n }\r\n }\r\n\r\n if (renew === true) {\r\n // set pending renew back to false\r\n intentGroupPendingRenew.current = true;\r\n } else {\r\n intentGroupPendingRenew.current = false;\r\n }\r\n }\r\n\r\n const globalBotTimeoutHandler = () => {\r\n setTimeoutType(2);\r\n setisOverlayScreenMounted(true)\r\n setShowVerifyAge(false)\r\n setShowManualEndSessionScreen(true);\r\n\r\n clearTimeout(globalBotTimeout);\r\n globalBotTimeout = setTimeout(() => {\r\n setShowManualEndSessionScreen(false);\r\n setAutoEndSessionScreen(true);\r\n\r\n sessionId.current = \"\";\r\n globalThis.userSessionId = \"\";\r\n\r\n // autoEndBotSession();\r\n }, config.AUTOEND_TIMEOUT);\r\n\r\n }\r\n\r\n useEffect(() => {\r\n if (showOrderTrackingDetail === true) {\r\n clearTimeout(timeoutAcceptance);\r\n }\r\n\r\n if (orderDataExpandedTile !== null) {\r\n setCurrentOrderId(orderDataExpandedTile?.orderId);\r\n }\r\n\r\n }, [showOrderTrackingDetail, orderDataExpandedTile]);\r\n\r\n\r\n useEffect(() => {\r\n if (openLiveChat) {\r\n toggleWidget();\r\n setLoader(true);\r\n dialogflowTextQueryAsync('Live Chat');\r\n }\r\n }, [openLiveChat]);\r\n\r\n useEffect(() => {\r\n if (pdpOpened) {\r\n toggleWidget();\r\n dispatch(openPdp(false));\r\n }\r\n }, [pdpOpened]);\r\n\r\n useEffect(() => {\r\n if (liveChatUserQueuePosition !== '') {\r\n //If the initial position was 10 or more then notify the user on queue position less than or equal to 5\r\n if (lcUserInitialPosition >= 10 && (liveChatUserQueuePosition <= 5)) {\r\n const displayText = liveChatUserQueuePosition === 0 ? 'Murphy messaged you. Agent joined.' : `Murphy messaged you. You're ${liveChatUserQueuePosition}${getOrdinalSuffix(liveChatUserQueuePosition)} in line`;\r\n postMessageToClient({ name: \"notifyUser\", text: displayText, queuePosition: liveChatUserQueuePosition });\r\n }\r\n\r\n (liveChatUserQueuePosition !== 0) && getLcQueueMessage(liveChatUserQueuePosition);\r\n }\r\n }, [liveChatUserQueuePosition]);\r\n\r\n\r\n useEffect(() => {\r\n if (!customQueueMessageTriggered && lCQueueMessage && lCQueueMessage.length) {\r\n clearInterval(lCQueueNotificationInterval);\r\n lCQueueNotificationInterval = setTimeout(() => {\r\n lCQueueMessage.forEach(queueMessage => {\r\n addToLiveChatMessages(queueMessage, Speaker.BWS);\r\n })\r\n dispatch(isCustomQueueMessageTriggered(true));\r\n }, 6000)\r\n }\r\n }, [customQueueMessageTriggered, lCQueueMessage]);\r\n\r\n useEffect(() => {\r\n if (!isWidgetOpenFirstTime && !showWidget) {\r\n toggleWidget();\r\n dispatch(isBotOpenFirstTime(true));\r\n }\r\n }, [isWidgetOpenFirstTime]);\r\n\r\n useEffect(() => {\r\n if (isBotOpenFromBWS && !showWidget) {\r\n toggleWidget();\r\n }\r\n }, [isBotOpenFromBWS]);\r\n\r\n const openWelcomeMessage = () => {\r\n // try to fetch the auth key if present as a global variable\r\n\r\n let params = new URL(document.location.toString()).searchParams;\r\n\r\n if (config.ISWEBVIEW) {\r\n if (window?.globalShopperDetails !== null && window?.globalShopperDetails?.authKey !== undefined\r\n && window?.globalShopperDetails?.authKey !== null && window?.globalShopperDetails?.authKey !== '') {\r\n\r\n userAuthKey.current = window.globalShopperDetails?.authKey;\r\n userAuthKeyRetryCount.current = 0;\r\n\r\n }\r\n else if (params && params.get(\"ak\") !== null && params.get(\"ak\") !== undefined) {\r\n getAuthBackwardCompatibilitySetting().then((result: any) => {\r\n if (result.statusCode === 200) {\r\n authenticationBackwardCompatibility.current = result.data;\r\n } else {\r\n authenticationBackwardCompatibility.current = false;\r\n }\r\n\r\n // if the backward compatibility is turned on\r\n if (authenticationBackwardCompatibility.current === true) {\r\n userAuthKey.current = params.get(\"ak\");\r\n\r\n window.globalShopperDetails = {\r\n authKey: params.get(\"ak\"),\r\n appVersion: '0',\r\n deviceType: 'unknown'\r\n }\r\n } else {\r\n window.globalShopperDetails = {\r\n authKey: '',\r\n appVersion: '0',\r\n deviceType: 'unknown'\r\n }\r\n }\r\n });\r\n\r\n userAuthKeyRetryCount.current = 0;\r\n }\r\n else {\r\n if (userAuthKeyRetryCount.current <= 5) {\r\n userAuthKeyRetryCount.current += 1;\r\n setLoader(true);\r\n setTimeout(() => {\r\n openWelcomeMessage();\r\n }, 500);\r\n\r\n return;\r\n } else {\r\n // reset the counter and proceed\r\n userAuthKeyRetryCount.current = 0;\r\n }\r\n }\r\n }\r\n\r\n if (authenticationBackwardCompatibility.current === null) {\r\n\r\n if (settingsRetryCount.current <= 5) {\r\n settingsRetryCount.current += 1;\r\n setLoader(true);\r\n setTimeout(() => {\r\n openWelcomeMessage();\r\n }, 500);\r\n\r\n return;\r\n } else {\r\n // reset the counter and proceed\r\n settingsRetryCount.current = 0;\r\n }\r\n }\r\n\r\n // set the autoend session screen to false immediately to prevent delay on the user's click\r\n setAutoEndSessionScreen(false);\r\n\r\n if ((shopperId.current > 0 || userAuthKey.current) && isChangeAlerted.current === false) {\r\n isChangeAlerted.current = true;\r\n callGreetShopper(shopperId.current, !isChangeAlerted.current && userAuthKey.current ? userAuthKey.current : '', startBotSession);\r\n } else if(!isGreetShopperCalledFromToggle.current) {\r\n setLoader(true);\r\n startBotSession();\r\n }\r\n }\r\n\r\n const callGreetShopper = (shopperIdParam: number, authKeyParam: string = '', callBackFn: any = null) => {\r\n // call the chatserver greet endpoint\r\n setLoader(true);\r\n greetLoggedInShopper(shopperIdParam, widgetSessionIdLive.current, sessionId.current, chatbotUserId.current, intentGroupId.current, intentGroupName.current, authKeyParam)\r\n .then((result: any) => {\r\n\r\n // store the new session if present\r\n const userSessionId = result?.Data?.SessionId;\r\n if (userSessionId) {\r\n sessionId.current = userSessionId;\r\n globalThis.userSessionId = userSessionId;\r\n }\r\n\r\n if (result?.Data?.ShopperId) {\r\n updateShopperId(result?.Data?.ShopperId);\r\n } else if (shopperIdParam > 0) {\r\n updateShopperId(shopperIdParam);\r\n }\r\n\r\n isChangeAlerted.current = true;\r\n\r\n if (result && result.StatusCode === 200) {\r\n\r\n setFirstName(result.Data.LoggedInFirstName);\r\n setLoader(false);\r\n setMessages((messages: []) => [...messages, ...[\r\n {\r\n icon: `/images/Vector-LoggedIn.svg`,\r\n shopper: result.Data.LoggedInName,\r\n text: `You're logged in as`,\r\n from: Speaker.System,\r\n type: MessageTypes.Message\r\n }\r\n ]]);\r\n } else {\r\n setLoader(false);\r\n }\r\n\r\n if (callBackFn) { callBackFn(); }\r\n });\r\n }\r\n\r\n const postClientToCloseBot = (value: boolean) => {\r\n const objCall = {\r\n data: { showWidget: value },\r\n methodHandler: \"toggleWidget\"\r\n };\r\n\r\n postMessageToClient(objCall);\r\n\r\n } \r\n\r\n const toggleWidget = (toggledByPopup?: boolean) => {\r\n if (shouldInitWithWelcome && isWidgetOpenFirstTime) {\r\n\r\n setShouldInitWithWelcome(false);\r\n setShowManualEndSessionScreen(false);\r\n setAutoEndSessionScreen(false);\r\n\r\n dispatch(isBotOpenFirstTime(false));\r\n\r\n isInitWelcomeShown.current = true;\r\n if (!openLiveChat) {\r\n openWelcomeMessage();\r\n }\r\n } else {\r\n // we check for the previous value of showWidget before the new value is assigned\r\n if (isUserLoggedOn.current === true && isChangeAlerted.current === false && !showWidget && !isGreetShopperCalledFromToggle.current) {\r\n isChangeAlerted.current = true;\r\n isGreetShopperCalledFromToggle.current = true;\r\n callGreetShopper(shopperId.current, userAuthKey.current, startBotSession);\r\n }\r\n }\r\n messageListArray = []\r\n // set the unread count to 0 if the user opens or closes the widget\r\n setUnreadMessageCount(0);\r\n\r\n setShowWidget(!showWidget);\r\n isWidgetShown.current = !showWidget;\r\n\r\n postClientToCloseBot(!showWidget);\r\n\r\n if (!showWidget) {\r\n //skip call to client for analytics in case bot opened by popup click\r\n if (!toggledByPopup) {\r\n postMessageToClient({ name: \"chatbotOpened\" });\r\n setShowMurphyPopup(false);\r\n }\r\n }\r\n\r\n if (showVocSurvey) {\r\n setShowManualEndSessionScreen(false);\r\n }\r\n if (isBotOpenFromBWS) {\r\n setIsBotOpenFromBWS(false);\r\n }\r\n }\r\n\r\n const closeButton = () => {\r\n setShowVerifyAge(false)\r\n if (showVocSurvey) {\r\n // minimize widget\r\n setShowWidget(false);\r\n isWidgetShown.current = false;\r\n postClientToCloseBot(false);\r\n handleBotTermination();\r\n }\r\n if (!showManualEndSessionScreen) {\r\n setTimeoutType(1);\r\n setisOverlayScreenMounted(true);\r\n setShowManualEndSessionScreen(true)\r\n } else {\r\n endBotSession(true)\r\n postClientToCloseBot(false);\r\n }\r\n\r\n if (autoEndSessionScreen) {\r\n // just minimize the widget if the session has already ended\r\n setShowWidget(false);\r\n isWidgetShown.current = false;\r\n isChangeAlerted.current = false;\r\n endBotSession(true);\r\n postClientToCloseBot(false);\r\n }\r\n }\r\n\r\n const backToWidget = (hasVoted: boolean = false) => {\r\n resumeGlobalTimeout();\r\n\r\n setArticleData({});\r\n setShowArticle(false);\r\n setIsArticleFound(null)\r\n setShowTicketForm(false);\r\n setShowThankYou(false);\r\n\r\n isLiveChatOn.current = false;\r\n setShowInputTextBox(true);\r\n setShowUserForm(false);\r\n\r\n dispatch(setShowOrderTrackingDetail(false));\r\n dispatch(setOrderForTile(null));\r\n\r\n if (hasVoted !== true && !acceptIntentTriggeredOnQueryResp) {\r\n if (lastFollowUpEventName !== null && lastFollowUpEventName !== '') {\r\n const params: any = {\r\n acceptanceIntentName: intentName.current\r\n }\r\n\r\n initDynamicFollowup(params, acceptanceIntent.DEFAULT_TIMEOUT, lastFollowUpEventName);\r\n } else {\r\n const params: any = {\r\n acceptanceIntentName: 'FAQ-Default-Intent'\r\n }\r\n\r\n initAcceptanceRate(params);\r\n }\r\n }\r\n\r\n if (openLiveChat) {\r\n openWelcomeMessage();\r\n setOpenLiveChat(false);\r\n }\r\n }\r\n\r\n const resumeGlobalTimeout = () => {\r\n if (config.ISWEBVIEW === false) {\r\n if (globalBotTimeout) clearTimeout(globalBotTimeout);\r\n globalBotTimeout = setTimeout(globalBotTimeoutHandler, config.IDLE_TIMEOUT);\r\n }\r\n }\r\n\r\n //Bot session dialog flow pings\r\n\r\n const keepSessionAlive = () => {\r\n if (!globalBotSessionAlive) {\r\n globalBotSessionAlive = setInterval(dialogFlowPing, config.SESSION_ALIVE_PING);\r\n }\r\n }\r\n\r\n const clearBotSession = () => {\r\n clearInterval(globalBotSessionAlive);\r\n globalBotSessionAlive = '';\r\n }\r\n\r\n const initAcceptanceRate = (params: any = null, timeout: number | null = null) => {\r\n setAcceptIntentTriggeredOnQueryResp(false);\r\n timeout = timeout ?? acceptanceIntent.DEFAULT_TIMEOUT;\r\n clearTimeout(timeoutAcceptance);\r\n\r\n timeoutAcceptance = setTimeout(() => {\r\n // fire event\r\n if (params === null) {\r\n dialogflowEventQueryAsync(dialogflowEvent.Chatbot_Contact_Options);\r\n } else {\r\n dialogflowEventQueryAsync(dialogflowEvent.Chatbot_Contact_Options, params);\r\n }\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }, timeout);\r\n }\r\n\r\n const initStoreLocatorAcceptanceRate = (params: any = null, timeout: number | null = null) => {\r\n setAcceptIntentTriggeredOnQueryResp(false);\r\n timeout = timeout ?? acceptanceIntent.DEFAULT_TIMEOUT;\r\n timeoutAcceptance = setTimeout(() => {\r\n // fire event\r\n if (params === null) {\r\n dialogflowEventQueryAsync(dialogflowEvent.STORE_LOCATOR_Acceptance_Question);\r\n } else {\r\n dialogflowEventQueryAsync(dialogflowEvent.STORE_LOCATOR_Acceptance_Question, params);\r\n }\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }, timeout);\r\n }\r\n\r\n const initProductAvailAcceptanceRate = (params: any = null, timeout: number | null = null) => {\r\n setAcceptIntentTriggeredOnQueryResp(false);\r\n timeout = timeout ?? acceptanceIntent.DEFAULT_TIMEOUT;\r\n timeoutAcceptance = setTimeout(() => {\r\n // fire event\r\n if (params === null) {\r\n dialogflowEventQueryAsync(dialogflowEvent.PRODUCT_AVAIL_Acceptance_Question);\r\n } else {\r\n dialogflowEventQueryAsync(dialogflowEvent.PRODUCT_AVAIL_Acceptance_Question, params);\r\n }\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }, timeout);\r\n }\r\n\r\n const initOrderTrackingFollowup = (params: any = null, timeout: number | null = null, acceptanceName: string = \"\") => {\r\n timeout = timeout ?? acceptanceIntent.DEFAULT_TIMEOUT;\r\n\r\n timeoutAcceptance = setTimeout(() => {\r\n if (lastMessageTimeout.current > 0) {\r\n setTimeout(() => {\r\n acceptanceName = (acceptanceName !== '') ? acceptanceName : dialogflowEvent.ORDER_TRACKING_Acceptance_Question;\r\n dialogflowEventQueryAsync(acceptanceName, params);\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }, lastMessageTimeout.current + 2000);\r\n } else {\r\n acceptanceName = (acceptanceName !== '') ? acceptanceName : dialogflowEvent.ORDER_TRACKING_Acceptance_Question;\r\n dialogflowEventQueryAsync(acceptanceName, params);\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }\r\n\r\n }, timeout);\r\n }\r\n\r\n const initDynamicFollowup = (params: any = null, timeout: number | null = null, acceptanceName: string = '') => {\r\n // if acceptanceName is blank or null call default acceptance\r\n if (acceptanceName == null || acceptanceName === '') {\r\n initAcceptanceRate(params, timeout);\r\n return;\r\n }\r\n\r\n setAcceptIntentTriggeredOnQueryResp(false);\r\n timeout = timeout ?? acceptanceIntent.DEFAULT_TIMEOUT;\r\n clearTimeout(timeoutAcceptance);\r\n\r\n timeoutAcceptance = setTimeout(() => {\r\n // fire event\r\n if (params === null) {\r\n dialogflowEventQueryAsync(acceptanceName);\r\n } else {\r\n dialogflowEventQueryAsync(acceptanceName, params);\r\n }\r\n setAcceptIntentTriggeredOnQueryResp(true);\r\n }, timeout);\r\n }\r\n\r\n const showUserInput = (show: boolean) => {\r\n setShowInputTextBox(show);\r\n }\r\n\r\n const openArticle = (data: any) => {\r\n // remove timeout for acceptane rate\r\n clearTimeout(timeoutAcceptance);\r\n setShowArticle(true);\r\n setArticleData(data);\r\n\r\n dispatch(updateLastFollowUpEventName(data?.followUpEventName));\r\n }\r\n\r\n const onSubmitTicket = () => {\r\n setShowThankYou(true);\r\n setShowTicketForm(false);\r\n }\r\n\r\n const setRatingValue = (value: number) => {\r\n switch (value) {\r\n case 1:\r\n setLiveChatRating(liveChatRating === 'good' ? '' : 'good')\r\n break;\r\n case -1:\r\n setLiveChatRating(liveChatRating === 'bad' ? '' : 'bad')\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n\r\n useEffect(() => {\r\n if (showWelcomeMessage) {\r\n var formedGreetingText = greetingTemplate.current.replace('{0}', (firstName !== '') ? ' ' + firstName : '');\r\n setMessages((messages: []) => [...messages, ...[{ text: formedGreetingText, from: Speaker.BWS, type: MessageTypes.Message }]]);\r\n setLoader(true);\r\n dialogflowEventQueryAsync(dialogflowEvent.Chatbot_Article_FirstSuggestions);\r\n setShouldInitWithWelcome(false);\r\n isInitWelcomeShown.current = true;\r\n }\r\n }, [showWelcomeMessage, firstName]);\r\n\r\n const startBotSession = () => {\r\n setAutoEndSessionScreen(false);\r\n messageListArray = [];\r\n setShowWelcomeMessage(true);\r\n verifyAge();\r\n }\r\n const verifyAge = () => {\r\n if (featureSddPrompt.current) {\r\n setMessages((messages: []) => [...messages, ...[\r\n {\r\n icon: `/images/Id-verification-alert.svg`,\r\n text: `Online age check required for same-day deliveries in NSW from June 1`,\r\n from: Speaker.System,\r\n type: MessageTypes.Message,\r\n isVerifyAge: `true`\r\n }\r\n ]]);\r\n }\r\n }\r\n\r\n const endBotSession = (value: boolean) => {\r\n switch (value) {\r\n case true:\r\n // end live chat\r\n endLiveChat(\"Triggered by end session screen\");\r\n\r\n ResetWidgetSettings();\r\n\r\n //clear live chat comments\r\n setLiveChatRating(\"\");\r\n setLiveChatComment(\"\");\r\n setLCReviewDone(false);\r\n\r\n setShowWelcomeMessage(false);\r\n dispatch(showVOCSurvey(false));\r\n\r\n if (config.ISWEBVIEW) {\r\n window.parent.location.href = config.APPCLOSEURL;\r\n }\r\n\r\n // reset the bot opening \r\n dispatch(isBotOpenFirstTime(true));\r\n setShowWidget(false)\r\n\r\n break;\r\n case false:\r\n setLCReviewDone(false);\r\n manualDialogFlowPing();\r\n //dialogflowEventQueryAsync(dialogflowEvent.Chatbot_Article_FirstSuggestions);\r\n break;\r\n default:\r\n break;\r\n }\r\n setisOverlayScreenMounted(false)\r\n setShowVerifyAge(false)\r\n setIsBotOpenFromBWS(false)\r\n // setShowManualEndSessionScreen(false);\r\n }\r\n\r\n const clearAnalyticsVariables = () => {\r\n intentGroupId.current = \"\";\r\n intentGroupName.current = \"\";\r\n intentGroupPendingRenew.current = false;\r\n queryId.current = \"\";\r\n }\r\n\r\n const autoEndBotSession = () => {\r\n ResetWidgetSettings();\r\n setShowVerifyAge(false)\r\n }\r\n\r\n const ResetWidgetSettings = () => {\r\n setUnreadMessageCount(0);\r\n\r\n // clear all messages \r\n setMessages([]);\r\n\r\n setShouldInitWithWelcome(true);\r\n\r\n isInitWelcomeShown.current = false;\r\n isChangeAlerted.current = false;\r\n\r\n // clear session id\r\n sessionId.current = \"\";\r\n globalThis.userSessionId = \"\";\r\n\r\n // always create a new sessionId\r\n refreshWidgetSessionId();\r\n\r\n //Clear bot session interval\r\n clearBotSession();\r\n\r\n // close order tracking detail and remove order info set for expanded tile\r\n dispatch(setShowOrderTrackingDetail(false));\r\n dispatch(setOrderForTile(null));\r\n\r\n // close the live chat user form\r\n setShowUserForm(false);\r\n\r\n // close the find a wine out put page\r\n dispatch(showFawPage(false));\r\n\r\n clearAnalyticsVariables();\r\n\r\n setCurrentOrderId('');\r\n\r\n // close FAQ \r\n setShowArticle(false);\r\n\r\n\r\n }\r\n\r\n const postLiveChatAvailabilityToHC = () => {\r\n const objCall = {\r\n data: { isLCAvailable: isLiveChatAvailable() },\r\n methodHandler: \"isLCAvailable\"\r\n };\r\n\r\n postMessageToClient(objCall);\r\n }\r\n\r\n const refreshChatBotUserId = () => {\r\n chatbotUserId.current = uuid();\r\n\r\n // the new chatbot user id should always be saved to the cookie to prevent any\r\n // security issues \r\n cookies.set(config.COOKIES_CHATBOT_USER_ID_TEXT, chatbotUserId.current, {\r\n path: '/',\r\n domain: '.windows.net',\r\n sameSite: 'none',\r\n secure: true,\r\n maxAge: 31536000\r\n });\r\n }\r\n\r\n const refreshWidgetSessionId = () => {\r\n let newId = uuid();\r\n widgetSessionIdLive.current = newId;\r\n dispatch(setWidgetSessionId(newId));\r\n }\r\n\r\n //initial load\r\n useEffect(() => {\r\n if (cookies.get(config.COOKIES_CHATBOT_USER_ID_TEXT) === undefined) {\r\n refreshChatBotUserId();\r\n } else {\r\n chatbotUserId.current = cookies.get(config.COOKIES_CHATBOT_USER_ID_TEXT);\r\n }\r\n\r\n // fetch feature settings\r\n getFeatureSetting('SddPrompt')\r\n .then((result: any) => {\r\n featureSddPrompt.current = (result !== null) ? result.isEnabled : false;\r\n });\r\n\r\n // fetch feature settings\r\n getFeatureSetting('DelGuarranteeMicroCopy')\r\n .then((result: any) => {\r\n featureDelGuarranteeMicroCopy.current = result.isEnabled;\r\n });\r\n\r\n // fetch feature settings\r\n getConfigSettings()\r\n .then((result: any) => {\r\n greetingTemplate.current = (result !== null) ? result.greetingTemplate : `Hi{0}, I’m Dan Murphy’s assistant bot. Ask me anything, if I can’t help I’ll connect you to a live chat agent.`;\r\n });\r\n\r\n\r\n // always create a new sessionId\r\n refreshWidgetSessionId();\r\n\r\n // make sure the live chat overlays and form are down\r\n setShowUserForm(false);\r\n setShowLiveChatRating(false);\r\n\r\n // this will not be used for the moment \r\n // until the time we need to link the user data from \r\n window.addEventListener(\"message\", messageHandler, false);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n window.localStorage.setItem('messageLength', '0');\r\n // COMMENTING TILL CACHING IMPLEMENTATION\r\n //fetchLiveChatHours().then(res => liveChatHours.current = res?.data);\r\n\r\n window.addEventListener(\"keyup\", onChangeHandler, false);\r\n window.addEventListener(\"keydown\", onChangeHandler, false);\r\n\r\n // if staging.. load more params\r\n // only allow staging mode on UAT\r\n if (config.ISSTAGING && window.location.hostname === 'botwidget.uat.bws.com.au') {\r\n const params = new URL(document.location.toString()).searchParams;\r\n const shopperIdParam = params.get(\"shopperId\") ?? 0;\r\n\r\n // shopper code\r\n setTimeout(() => {\r\n const objCall = {\r\n data: {\r\n shopperId: shopperIdParam\r\n },\r\n methodHandler: 'changeShopperId'\r\n };\r\n window.postMessage(objCall, window.location.origin);\r\n }, 500);\r\n }\r\n\r\n if (config.ISWEBVIEW) {\r\n // if the widget is loaded via webview\r\n // open the widget from the initial load\r\n toggleWidget();\r\n }\r\n }, []);\r\n\r\n const handleZendeskConnectionError = (event_data: any) => {\r\n switch (event_data) {\r\n case \"connecting\": resetLiveChatOnError();\r\n break;\r\n // consider connection lost in case of null or closed.\r\n case null:\r\n case \"closed\":\r\n setLoader(true);\r\n resetLiveChatOnError();\r\n setTimeout(() => {\r\n setMessages((messages: []) => [...messages, ...[{ text: pickRandomString(zendeskErrorConfig.ERROR_RESPONSE_ARRAY), from: Speaker.BWS, type: MessageTypes.Message }]]);\r\n setLoader(false);\r\n }, 3000);\r\n break;\r\n default: break;\r\n }\r\n }\r\n\r\n\r\n const resetLiveChatOnError = () => {\r\n if (isLiveChatOn.current === true) {\r\n // if the user is currently in live chat disconnect\r\n // and start a new session\r\n addToLiveChatMessages(\"There has been a disruption. Please check your connection.\", Speaker.System);\r\n agentChatCount.current = 0;\r\n setAgentNames([livechat.HEADER_TEXT]);\r\n resumeGlobalTimeout();\r\n // set the default value of live chat status to false\r\n isLiveChatOn.current = false;\r\n }\r\n }\r\n\r\n const messageHandler = (event: any) => {\r\n const eventData = event.data;\r\n const params = typeof eventData === 'string' ? JSON.parse(eventData) : eventData;\r\n\r\n switch (params.methodHandler) {\r\n case \"setIsHostDevice\":\r\n setIsHostDevice(params.data.setIsHostDevice === true)\r\n break;\r\n case \"changeShopperId\":\r\n isChangeAlerted.current = false;\r\n if (params.data.shopperId > 0) {\r\n // if it is a valid shopper id\r\n // and if the new shopper id is not the same as the current one\r\n if (shopperId.current !== params.data.shopperId) {\r\n // refresh widget session Id\r\n refreshWidgetSessionId();\r\n\r\n updateShopperId(params.data.shopperId);\r\n\r\n isUserLoggedOn.current = true;\r\n isChangeAlerted.current = false;\r\n\r\n if ((isInitWelcomeShown.current === true || isWidgetShown.current === true) && isChangeAlerted.current === false && showWidget) {\r\n\r\n // call the shopper greeting if the wiget has already been opened\r\n // for the first time\r\n isChangeAlerted.current = true;\r\n callGreetShopper(params.data.shopperId);\r\n }\r\n\r\n\r\n }\r\n\r\n // if its the same id, dont do anything\r\n } else {\r\n // if its 0 then log off the user if the user is not currently logged off\r\n if (isUserLoggedOn.current === true) {\r\n intentGroupPendingRenew.current = true;\r\n // refresh widget session Id\r\n refreshWidgetSessionId();\r\n\r\n updateShopperId(0);\r\n\r\n shopperEncryptedEmail.current = \"\";\r\n\r\n isUserLoggedOn.current = false;\r\n isChangeAlerted.current = true;\r\n\r\n dispatch(setShowOrderTrackingDetail(false));\r\n dispatch(setOrderForTile(null));\r\n\r\n setCurrentOrderId('');\r\n\r\n if (isInitWelcomeShown.current === true || isWidgetShown.current === true) {\r\n // call the shopper greeting if the wiget has already been opened\r\n // for the first time\r\n setMessages((messages: []) => [...messages, ...[{ text: `You're logged off`, from: Speaker.System, type: MessageTypes.Message }]]);\r\n }\r\n }\r\n }\r\n break;\r\n case \"openWidget\":\r\n if (!showWidget) {\r\n setIsBotOpenFromBWS(true);\r\n }\r\n break;\r\n case \"sendMessage\":\r\n sendMessageFromBackground(params.data.messageString);\r\n break;\r\n case \"openLiveChatOnBot\":\r\n setOpenLiveChat(true);\r\n break;\r\n case \"getLiveChatStatusFromBot\":\r\n postLiveChatAvailabilityToHC();\r\n break;\r\n case \"showMurphyPopup\":\r\n handleMurphyPopup(params.data.setShowMurphyPopup);\r\n break;\r\n case \"bwsSiteScrollStart\":\r\n setIsBwsSiteScrolling(params.data.isScrolling);\r\n break;\r\n case \"bwsSiteScrollEnd\":\r\n setIsBwsSiteScrolling(params.data.isScrolling);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const updateShopperId = (id: number) => {\r\n dispatch(setShopperId(id));\r\n shopperId.current = id;\r\n globalThis.userShopperId = id;\r\n }\r\n\r\n\r\n const onChangeHandler = (event: any) => {\r\n if (event.target.className === \"divTextBox\") {\r\n setInput(event.target.innerText.trim());\r\n let footerContainer = event.currentTarget.document.getElementById(\"divFooterContainer\");\r\n if (footerContainer !== null) {\r\n event.target.style.overflowY = (event.target.scrollHeight >= 80) ? 'scroll' : 'hidden';\r\n }\r\n }\r\n }\r\n\r\n const sendMessageFromBackground = (messageString: string) => {\r\n // if the user is chatting with an agent, send message to livechat\r\n // if not, send to dialogflow\r\n if (isLiveChatOn.current === true) {\r\n addToLiveChatMessages(messageString, Speaker.User);\r\n sendLiveChatMessage(messageString);\r\n setLoader(false);\r\n } else {\r\n setMessages((messages: any) => [...messages, ...[{ text: messageString, from: Speaker.User, type: MessageTypes.Message }]]);\r\n dialogflowTextQueryAsync(messageString);\r\n setLoader(true);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n messagesEndRef?.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [showArticle, messages, showWidget, loader]);\r\n\r\n useEffect(() => {\r\n }, [isHostDevice]);\r\n\r\n useEffect(() => {\r\n // save conversation to session storage\r\n setlocalStorage(\"allMessageHistory\", messages);\r\n window.localStorage.setItem(\"messageLength\", messages.length);\r\n }, [messages]);\r\n\r\n const closeLiveChatRating = (event: any) => {\r\n event.preventDefault();\r\n\r\n setShowLiveChatRating(false);\r\n\r\n // this sends the Zendesk ratin and additional comments\r\n endLiveChat(\"Natural end live chat session\");\r\n\r\n setTimeoutType(4);\r\n setShowManualEndSessionScreen(true);\r\n setLCReviewDone(true);\r\n }\r\n\r\n const closeLiveChat = () => {\r\n }\r\n\r\n const sendLiveChatComment = () => {\r\n }\r\n\r\n const sendLiveChatRating = () => {\r\n }\r\n\r\n const endLiveChat = (endLiveChatReason = \"\") => {\r\n // send ratings\r\n if (liveChatRating !== '') {\r\n sendLiveChatRating();\r\n } else if (liveChatComment !== '') {\r\n sendLiveChatComment();\r\n } else {\r\n closeLiveChat();\r\n }\r\n\r\n setShowLiveChatRating(false);\r\n\r\n // set agent counts to 0\r\n agentChatCount.current = 0;\r\n\r\n addToLiveChatMessages(\"Live Chat has ended.\", Speaker.System);\r\n\r\n isLiveChatOn.current = false;\r\n\r\n // remove chat related cookies\r\n cookies.remove(\"visitorInfo\");\r\n\r\n // reset agent name array\r\n setAgentNames([livechat.HEADER_TEXT]);\r\n\r\n // clear live chat interval markers\r\n clearInterval(intervalFunction);\r\n\r\n clearInterval(lCQueueNotificationInterval);\r\n\r\n resumeGlobalTimeout();\r\n\r\n // remove additional comments\r\n dispatch(setAddtlComments(\"\"));\r\n }\r\n\r\n function handleMurphyPopup(showMurphyPopup: any) {\r\n if (showMurphyPopup) {\r\n setShowMurphyPopup(false);\r\n setMurphyTyping(true);\r\n setTimeout(() => {\r\n setMurphyTyping(false);\r\n setShowMurphyPopup(showMurphyPopup);\r\n }, 2000);\r\n } else setShowMurphyPopup(showMurphyPopup);\r\n }\r\n\r\n const closeMurphyPopup = (event?: any, fireAnalytics: boolean = true) => {\r\n event?.stopPropagation();\r\n setShowMurphyPopup(false);\r\n if (fireAnalytics)\r\n handleAnalyticsBot('web:chatbot:auto pop up:close', 'chatbot auto pop up', 'chatbotTriggerAdobeAnalytics');\r\n }\r\n\r\n const onMurphyPopupClick = () => {\r\n // reset to first time to trigger welcome intent.\r\n setShouldInitWithWelcome(true);\r\n isInitWelcomeShown.current = false;\r\n isChangeAlerted.current = false;\r\n dispatch(isBotOpenFirstTime(true));\r\n toggleWidget(true);\r\n closeMurphyPopup(null, false);\r\n handleAnalyticsBot('web:chatbot:auto pop up:open', 'chatbot auto pop up', 'chatbotTriggerAdobeAnalytics');\r\n }\r\n\r\n const onEnterPress = (e: any) => {\r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n if (e.target.innerText) {\r\n sendMessage(e);\r\n }\r\n }\r\n }\r\n\r\n const displayMessages = useMemo(() => {\r\n //To add the 'showBotLabel' for the last bot message\r\n\r\n const botMessages = messages.filter((message: MessageModel) => message.type === \"message\" && message.from !== \"user\" && message.from !== \"system\");\r\n const lastBotMessageIndex = botMessages.length ? messages.lastIndexOf(botMessages[botMessages.length - 1]) : -1;\r\n const messagesWithDisplayProp = messages.map((message: MessageModel, index: number) => ({\r\n ...message,\r\n showBotLabel: index === lastBotMessageIndex,\r\n }));\r\n\r\n //To add 'isFirstBotMessageInConversation' in the first message of consecutive bot messages\r\n\r\n let isFirstMessage = true;\r\n let lastMessageType = '';\r\n for (let i = 0; i < messagesWithDisplayProp.length; i++) {\r\n const message = messagesWithDisplayProp[i];\r\n if (message.type === 'message' && message.from !== 'system' && message.from !== 'user') {\r\n if (lastMessageType !== 'message') {\r\n isFirstMessage = true;\r\n }\r\n message.isFirstBotMessageInConversation = isFirstMessage;\r\n isFirstMessage = false;\r\n } else {\r\n isFirstMessage = true;\r\n }\r\n lastMessageType = message.type;\r\n }\r\n return messagesWithDisplayProp;\r\n }, [messages]);\r\n\r\n const getMessageParentClassName = (m: MessageModel) => {\r\n const classNames: string[] = [];\r\n if (m.from === Speaker.User) {\r\n classNames.push('widget__message-right');\r\n } else if (m.from === Speaker.System) {\r\n classNames.push('widget__message-center');\r\n } else if (m.type === MessageTypes.ArticlePayload) {\r\n classNames.push('widget__message-faq');\r\n } else if (\r\n m.type !== MessageTypes.Message &&\r\n m.type !== MessageTypes.OrderTracking &&\r\n m.type !== MessageTypes.LiveChatMessage &&\r\n m.type !== MessageTypes.QuickReply &&\r\n m.type !== MessageTypes.QuickReplyPayload\r\n ) {\r\n classNames.push('widget__message-qr');\r\n } else {\r\n classNames.push('widget__message-left');\r\n }\r\n\r\n return classNames.join(' ');\r\n }\r\n // check if qrPayLoad is Loaded, it is used to conditonally render bot's input text box and send button.\r\n const isQRPayloadLoaded = (obj: any): boolean => {\r\n for (let key in obj) {\r\n if (typeof obj[key] === 'object' && obj[key] !== null) {\r\n if (Array.isArray(obj[key])) {\r\n for (let i = 0; i < obj[key].length; i++) {\r\n if (isQRPayloadLoaded(obj[key][i])) {\r\n return true;\r\n }\r\n }\r\n } else {\r\n if (obj[key].type === 'qrPayload') {\r\n return true;\r\n }\r\n if (isQRPayloadLoaded(obj[key])) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n const handleBotTermination = () => {\r\n endBotSession(true);\r\n toggleWidget();\r\n }\r\n\r\n useEffect(() => {\r\n let surveyScreenTimeout: ReturnType | null = null;\r\n let surveyScreenInitialLoadTimeout: ReturnType | null = null;\r\n //In order to load the VOC survey screen\r\n setShowVOCLoader(true);\r\n window?.KAMPYLE_ONSITE_SDK?.updatePageView();\r\n //closing bot after 2 sec form surveyScreen(voc)\r\n window.addEventListener(\"MDigital_Submit_Feedback\", () => {\r\n surveyScreenTimeout = setTimeout(() => {\r\n handleBotTermination();\r\n }, 2000);\r\n }, false);\r\n\r\n //Initial form load\r\n window.addEventListener(\"MDigital_Form_Displayed\", () => {\r\n surveyScreenInitialLoadTimeout = setTimeout(() => {\r\n setShowCloseAndSkip(true);\r\n setShowVOCLoader(false);\r\n }, 1500);\r\n }, false);\r\n\r\n //Handling hiding of close & skip on click of any feedback button\r\n window.addEventListener('message', function (event) {\r\n const eventData = event?.data;\r\n if (eventData && typeof eventData === 'string') {\r\n const mdJSON = JSON.parse(eventData);\r\n if (mdJSON?.action === 'iFrameHeightChanged' && mdJSON?.formId === '9263' && (mdJSON?.newHeight > 356)) {\r\n setShowCloseAndSkip(false);\r\n }\r\n }\r\n })\r\n\r\n return () => {\r\n if (surveyScreenTimeout) { clearTimeout(surveyScreenTimeout); }\r\n if (surveyScreenInitialLoadTimeout) { clearTimeout(surveyScreenInitialLoadTimeout); }\r\n }\r\n\r\n }, [showVocSurvey])\r\n\r\n const toggleMessageBodyVisibility = (showArticle: boolean) => {\r\n return showArticle ? { display: 'none' } : {};\r\n };\r\n\r\n useEffect(() => {\r\n let manualEndScreenTimeout: ReturnType | null = null;\r\n\r\n if (isOverlayScreenMounted || showVocSurvey) {\r\n setEndScreenMountingStyle(' mounting')\r\n } else {\r\n setEndScreenMountingStyle(' unmounting')\r\n }\r\n\r\n if (!isOverlayScreenMounted && showManualEndSessionScreen) {\r\n manualEndScreenTimeout = setTimeout(() => {\r\n setShowManualEndSessionScreen(false)\r\n }, 400);\r\n }\r\n\r\n return () => {\r\n if (manualEndScreenTimeout) { clearTimeout(manualEndScreenTimeout); }\r\n }\r\n }, [isOverlayScreenMounted])\r\n\r\n const calculateVOCStyle = (): CSSProperties => {\r\n const visibility = showVOCLoader ? 'hidden' : 'visible';\r\n return { visibility };\r\n }\r\n\r\n return (\r\n
\r\n\r\n
\r\n\r\n
\r\n
{ }}\r\n isAgentName={agentNames.length > 1}\r\n />\r\n
\r\n\r\n {showUserForm &&\r\n \r\n }\r\n\r\n {showOrderTrackingDetail &&\r\n \r\n }\r\n\r\n {showLiveChatRating &&\r\n \r\n }\r\n\r\n {showManualEndSessionScreen &&\r\n \r\n }\r\n\r\n {autoEndSessionScreen &&\r\n \r\n }\r\n\r\n {showVocSurvey &&\r\n
\r\n {showVOCLoader ?
: null}\r\n
\r\n {(showCloseAndSkip && !showVOCLoader) &&
handleBotTermination()}>SKIP & CLOSE
}\r\n
\r\n }\r\n\r\n {\r\n showFAW && \r\n }\r\n\r\n {showVerifyAge && featureSddPrompt.current &&\r\n \r\n }\r\n\r\n {\r\n showArticle &&\r\n
\r\n \r\n
\r\n }\r\n\r\n\r\n {!showFAW && !showOrderTrackingDetail &&\r\n
\r\n {showTicketForm ? :\r\n showThankYou ? :\r\n
\r\n {displayMessages.map((m: any, index: number) => (\r\n
\r\n {m.type === MessageTypes.Message && }\r\n {m.type === MessageTypes.LiveChatMessage && }\r\n {m.type === MessageTypes.Article && }\r\n {m.type === MessageTypes.ArticleList && }\r\n {m.type === MessageTypes.Stores && }\r\n {m.type === MessageTypes.PAStoreSelector && }\r\n {m.type === MessageTypes.StoreSelector && }\r\n {m.type === MessageTypes.Product && }\r\n {m.type === MessageTypes.ProductNearbyStore && }\r\n {m.type === MessageTypes.OrderTracking && }\r\n\r\n { // this code is specific to Chatserver V2, duplicate code can be retired after we go live\r\n m.type === MessageTypes.QuickReplyPayload &&\r\n
\r\n {\r\n m.data.length && m.data.map((message: QrPayloadModel, index: number) => (\r\n
\r\n {message.type === MessageTypes.Qr && }\r\n {message.type === MessageTypes.ConditionalQr && }\r\n {message.type === MessageTypes.DynamicQr && }\r\n {message.type === MessageTypes.Help && }\r\n {message.type === MessageTypes.Form && }\r\n {message.type === MessageTypes.Url && }\r\n {message.type === MessageTypes.LiveChatQr && }\r\n {message.type === MessageTypes.End && }\r\n {message.type === MessageTypes.QrEvent && }\r\n
\r\n ))}\r\n
\r\n }\r\n\r\n { // this code is specific to Chatserver V2, duplicate code can be retired after we go live\r\n m.type === MessageTypes.ArticlePayload &&\r\n
\r\n \r\n
\r\n }\r\n\r\n { // this code is specific to Chatserver V2, duplicate code can be retired after we go live\r\n m.type === MessageTypes.VerifiedOrders &&\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n
\r\n ))}\r\n {loader ? : null}\r\n
\r\n
\r\n }\r\n
\r\n }\r\n\r\n
\r\n\r\n {!showFAW && !showArticle && !showTicketForm && !showThankYou && !showOrderTrackingDetail && isQRPayloadLoaded(messages) &&\r\n
divFooterContainer = el} >\r\n\r\n \r\n
onEnterPress(event)}\r\n spellCheck=\"false\"\r\n autoCorrect=\"off\"\r\n autoCapitalize=\"off\"\r\n aria-autocomplete='none'>\r\n\r\n
\r\n \r\n \r\n\r\n
}\r\n\r\n\r\n {showArticle && isArticleFound && articleData != null && }\r\n
\r\n\r\n {!showWidget && isHostDevice !== null && showMurphyPopup &&
\r\n \"BWS\" closeMurphyPopup(e)} />\r\n

👋 Hi, I'm Murphy!
Ask me a question if you need help.

}\r\n\r\n\r\n\r\n {!showWidget && isHostDevice !== null && !murphyTyping &&\r\n \r\n }\r\n\r\n {!showWidget && isHostDevice !== null && murphyTyping &&\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default Widget","import React, { useEffect, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { RootState } from '../../reducers/index';\r\n\r\nimport ResultCatergory from '../result-category/resultCatergory'\r\nimport Loader from '../../widget/loader/Loader';\r\nimport { ResultProps } from '../models/fawTypes';\r\nimport { toTitleCase } from '../../widget/util/commonUtil';\r\nimport { Varietals } from '../varietal/VarietalsModel';\r\nimport { Prices } from '../price/PriceModel';\r\nimport { Types } from '../wine-type/wineTypeModel';\r\n\r\nconst Results = ({recommendedWines, bestSellers, topRatedSellers, newAndNoteworthySellers, intentData}: ResultProps) => {\r\n \r\n const isFetching = useSelector((state: any) => { return state.productData.isFetching});\r\n const [noResultDisplay, setNoResultDisplay] = useState(false);\r\n const wineType = useSelector((state: RootState) => { return state.fawData.selectedWineType;});\r\n const priceRange = useSelector((state: RootState) => { return state.fawData.selectedPriceRange;});\r\n const varietal = useSelector((state: RootState) => { return state.fawData.selectedVarietal;});\r\n const storeName = useSelector((state: RootState) => { return state.fawData.selectedStoreName });\r\n\r\n useEffect(() => {\r\n if(recommendedWines.length) {\r\n if(!bestSellers.length && !topRatedSellers.length && !newAndNoteworthySellers.length) {\r\n setNoResultDisplay(true);\r\n } else {\r\n setNoResultDisplay(false);\r\n }\r\n } else {\r\n setNoResultDisplay(true);\r\n }\r\n }, [recommendedWines.length]);\r\n\r\n const getNoResultDisplayText = () => {\r\n if(varietal && varietal !== Varietals.NotSure && priceRange !== Prices.any) {\r\n return `

Hmm, looks like Dan Murphy’s ${toTitleCase(storeName)} is running dry on ${varietal} between ${priceRange}.

\r\n

Try changing the filters you used by starting again or going back.

`;\r\n } else if (varietal && varietal !== Varietals.NotSure && priceRange === Prices.any) {\r\n return `

Hmm, looks like Dan Murphy’s ${toTitleCase(storeName)} is running dry on ${varietal}.

\r\n

Try changing the filters you used by starting again or going back.

`;\r\n } else if (wineType && wineType === Types.NotSure && priceRange !== Prices.any) {\r\n return `

Hmm, looks like Dan Murphy’s ${toTitleCase(storeName)} is running dry for anything between ${priceRange}.

\r\n

Try changing the filters you used by starting again or going back.

`;\r\n } else {\r\n return `

Hmm, looks like Dan Murphy’s ${toTitleCase(storeName)} is running dry at the moment.

\r\n

Try changing the filters you used by starting again or going back.

`;\r\n }\r\n }\r\n\r\n\r\n return (\r\n <>\r\n {isFetching ? \r\n
\r\n \r\n
: \r\n
\r\n { noResultDisplay ?
: \r\n <>\r\n \r\n \r\n \r\n \r\n }\r\n
\r\n }\r\n \r\n )\r\n}\r\n \r\nexport default Results","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../reducers/index';\r\n\r\nimport { RecommendationListProps } from '../models/fawTypes';\r\nimport './recommendationList.scss';\r\n\r\nimport { openPdpDansPage } from '../../actions/index';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\nconst RecommendationList = ({ recommendationList, intentData }: RecommendationListProps ) => {\r\n \r\n const dispatch = useDispatch();\r\n const storeName = useSelector((state: RootState) => { return state.fawData.selectedStoreName });\r\n const storeID = useSelector((state: RootState) => { return state.fawData.selectedStoreId });\r\n const selectedType = useSelector((state: RootState) => { return state.fawData.selectedType });\r\n\r\n const openPDPpage = (wineLink: string, wineName:string) => {\r\n dispatch(openPdpDansPage(wineLink, storeName, storeID, wineName, selectedType, intentData));\r\n }\r\n return (\r\n <>\r\n {recommendationList.map((item, index) => \r\n
openPDPpage(item.wineLink, item.wineName)}>\r\n\r\n
\r\n #{index+1}\r\n
\r\n
\r\n {item.wineName}/\r\n
\r\n
\r\n
{item.brandName}
\r\n
{item.wineName}
\r\n
\r\n ${item.price} \r\n per bottle\r\n
\r\n
\r\n
\r\n \r\n {(Math.round(item.rating * 10) / 10).toFixed(1)}\r\n ({item.review} reviews)\r\n
\r\n
More details
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n \r\n )\r\n}\r\n \r\nexport default RecommendationList","import React from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport './cancelFaw.scss';\r\nimport { updateCurrentView, showFawPage, resetSelection } from '../../actions/index';\r\nimport { RootState } from '../../reducers/index';\r\n\r\nimport { dialogflowEvent } from '../../config/config';\r\nimport { DialogflowQueryType } from '../../widget/models/enum';\r\nimport { postMessageToClient } from '../../widget/chatservice/communicationService';\r\n\r\ntype CancelProps = {\r\n quickReplyHandler: (event:any, queryType : DialogflowQueryType, eventText: string, showText: boolean) => void\r\n}\r\n\r\nconst CancelFaw = ({quickReplyHandler}: CancelProps) => {\r\n\r\n const dispatch = useDispatch();\r\n const lastSelectedScreen = useSelector((state: RootState) => { return state.fawData.lastSelectedScreen});\r\n \r\n const getStepNumber = () => {\r\n switch(lastSelectedScreen) {\r\n case 'type':\r\n return 1;\r\n case 'price':\r\n return 2;\r\n case 'varietal':\r\n return 3;\r\n default:\r\n }\r\n}\r\n\r\n const onCancel = (e: any) => {\r\n dispatch(showFawPage(false));\r\n dispatch(resetSelection());\r\n const linkName = `web:chatbot:find a wine:preference:step${getStepNumber()}:cancel`;\r\n postMessageToClient({\r\n data : {\r\n linkName : linkName.toLowerCase(),\r\n linkType: 'chatbot find a wine',\r\n },\r\n methodHandler : \"chatbotTriggerAdobeAnalytics\"\r\n })\r\n \r\n quickReplyHandler(e, DialogflowQueryType.Event, dialogflowEvent.Chatbot_Additional_Questions, false);\r\n }\r\n\r\n const onTakeMeBack = () => {\r\n dispatch(updateCurrentView(lastSelectedScreen));\r\n }\r\n \r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
If you cancel now, you’ll lose your current
\r\n
selection and I can’t show you Dan’s
\r\n
superb wines.
\r\n
Are you sure you want to cancel?
\r\n
\r\n\r\n
\r\n onCancel(event) }/>\r\n onTakeMeBack() }/>\r\n
\r\n
\r\n )\r\n}\r\n \r\nexport default CancelFaw","import React from 'react'\r\nimport './WineMerchantRedirect.scss' \r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { updateCurrentView, showFawPage, resetSelection } from '../../actions/index';\r\nimport { DialogflowQueryType } from '../../widget/models/enum';\r\nimport { dialogflowEvent } from '../../config/config';\r\n\r\n\r\ntype WineMerchantRedirectPros = {\r\n updateWineExpert: (wineExpert: string) => void;\r\n selectWineExpert : string,\r\n quickReplyHandler: any\r\n}\r\n\r\n const WineMerchantRedirect = ({updateWineExpert,selectWineExpert,quickReplyHandler}: WineMerchantRedirectPros ) => {\r\n const dispatch = useDispatch();\r\n const openTab= (e: any)=>{\r\n handleDone(e);\r\n window.open(\"https://www.danmurphys.com.au/list/meet-our-merchants?size=24\", \"_blank\") \r\n }\r\n \r\n const cancelTab = (e: any)=>{\r\n console.log(\"wine expert \" + selectWineExpert);\r\n dispatch(updateCurrentView('results'));\r\n }\r\n\r\n const handleDone = (e: any) => {\r\n dispatch(showFawPage(false));\r\n dispatch(resetSelection());\r\n quickReplyHandler(e, DialogflowQueryType.Event, dialogflowEvent.Chatbot_FAW_Followup_Questions, false);\r\n}\r\n\r\n return (\r\n
\r\n
\r\n \"\"\r\n \"\"/\r\n \"\"\r\n
\r\n
\r\n

Want expert advice?

\r\n

Connect with our Wine Merchants for personalised recommendations through live chat* or a 1-to-1 appointment.

\r\n
\r\n
\r\n *Wine Merchants may be offline during busy periods in-store.
\r\n Live chat hours: 10:00am to 4:00pm, Tues to Sat
\r\n
\r\n
\r\n \r\n cancelTab(event)} />\r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport default WineMerchantRedirect\r\n","import { createSelector } from 'reselect';\r\nimport { recommendedWine } from '../find-a-wine/models/fawTypes';\r\n \r\nconst getProductArray = (state: any) => state.productData.productArray\r\n\r\n//To get the searched products list\r\nexport const getRecommendedWines = createSelector(\r\n [ getProductArray ],\r\n (productArray) => {\r\n\r\n const recommendedWines: recommendedWine[] = productArray.map((product: any) => {\r\n return {\r\n brandName: product.brand,\r\n wineName: product.productName,\r\n price: product.singlePrice,\r\n rating: product.averageOverallRating,\r\n review: product.totalReviewCount,\r\n imageURL: `https://media.danmurphys.com.au/dmo/product/${product.sku}-1.png?impolicy=Prod_MD`,\r\n salesRank: product.salesRank,\r\n newAndNoteworthyRank: product.newAndNoteworthyRank,\r\n wineLink: product.link\r\n }\r\n })\r\n\r\n const bestSellers : recommendedWine[] = recommendedWines.filter(item => item.salesRank !== null).sort((a,b) => {return (b.salesRank - a.salesRank)});\r\n const topRatedSellers : recommendedWine[] = recommendedWines.filter(item => item.rating !== null).sort((a,b) => { return ((b.rating - a.rating) || (b.review - a.review)) });\r\n const newAndNoteworthySellers : recommendedWine[] = recommendedWines.filter(item => item.newAndNoteworthyRank !== null).sort((a,b) => {return (b.newAndNoteworthyRank - a.newAndNoteworthyRank)});\r\n \r\n return {\r\n recommendedWines: [...recommendedWines], \r\n bestSellers: bestSellers.length > 20 ? [...bestSellers.splice(0, 20)] : [...bestSellers], \r\n topRatedSellers: topRatedSellers.length > 20 ? [...topRatedSellers.splice(0, 20)] : [...topRatedSellers],\r\n newAndNoteworthySellers: newAndNoteworthySellers.length > 20 ? [...newAndNoteworthySellers.splice(0, 20)] : [...newAndNoteworthySellers],\r\n intentData : {}\r\n }\r\n }\r\n)","import React, { useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { updateWineType, updatePriceRange, updateWineVarietal, updateCurrentView, fetchProducts, updateSelectedStore, resetSelection, showFawPage, showWineExpert} from '../actions/index';\r\nimport { RootState } from '../reducers/index';\r\nimport WineType from './wine-type/WineType';\r\nimport Varietal from './varietal/Varietal';\r\nimport Price from './price/Price';\r\nimport Results from './results/Results';\r\nimport RecommendationList from './recommendation-list/recommendationList';\r\nimport CancelFaw from './cancel-faw/cancelFaw';\r\nimport WineMerchantRedirect from './wine-merchant-redirect/WineMerchantRedirect';\r\n\r\nimport { Prices, PriceRangeMapping } from './price/PriceModel';\r\nimport { Types, WineTypeMapping } from './wine-type/wineTypeModel';\r\nimport { RedVarietals, SparklingVarietals, WhiteVarietals, VarietalTypeMapping, Varietals } from './varietal/VarietalsModel';\r\nimport { FAWChildProps, FAWProps, ResultProps, recommendedWine } from './models/fawTypes';\r\nimport { getRecommendedWines } from '../selectors/recommendedWines';\r\nimport { postMessageToClient } from '../widget/chatservice/communicationService';\r\nimport { config, dialogflowEvent } from '../config/config';\r\nimport { DialogflowQueryType } from '../widget/models/enum';\r\n\r\nimport { toTitleCase } from '../widget/util/commonUtil';\r\nimport './findAWine.scss';\r\nimport { addAnalyticsEvent } from '../widget/chatservice/dialogflowQuery';\r\nimport { v4 } from 'uuid';\r\nimport { getUniqueId } from '../widget/util/commonUtil';\r\n\r\n\r\n\r\n\r\nexport const FindAWine = ({storeName, streetNumber, resumeGlobalTimeout, quickReplyHandler, sessionId, userId, intentGroupId, intentGroupName, intentGroupTypeId }: FAWProps) => {\r\n const dispatch = useDispatch();\r\n const recommendedWinesResult: ResultProps = useSelector(getRecommendedWines);\r\n const fawWrapper = useRef(document.createElement(\"div\"));\r\n const [isFetchingRequired, setIsFetchingRequired] = useState(true);\r\n const intentData = {\r\n sessionId : sessionId,\r\n userId: userId,\r\n intentGroupId: intentGroupId,\r\n intentGroupName: intentGroupName,\r\n intentGroupTypeId: intentGroupTypeId\r\n };\r\n \r\n //Fetching the values from the state\r\n const wineType = useSelector((state: RootState) => { return state.fawData.selectedWineType;}),\r\n priceRange = useSelector((state: RootState) => { return state.fawData.selectedPriceRange;}),\r\n wineExpert = useSelector((state: RootState) => {return state.fawData.selectWineExpert}),\r\n varietal = useSelector((state: RootState) => { return state.fawData.selectedVarietal;}),\r\n currentView = useSelector((state: RootState) => { return state.fawData.currentView;}),\r\n selectedType = useSelector((state: RootState) => { return state.fawData.selectedType}),\r\n showFAW = useSelector((state: RootState) => { return state.fawData.showFAW});\r\n \r\n //Child Props\r\n const fawChildProps: FAWChildProps = {\r\n updateType: (type: string) => dispatch(updateWineType(type)),\r\n updatePrice: (priceRange: string) => dispatch(updatePriceRange(priceRange)),\r\n updateWineExpert :(wineExpert:string) => dispatch(showWineExpert(wineExpert)),\r\n updateVarietal: (varietal: string) => dispatch(updateWineVarietal(varietal)),\r\n quickReplyHandler: quickReplyHandler,\r\n type: wineType,\r\n range: priceRange,\r\n selectWineExpert : wineExpert,\r\n selectedVarietal: varietal,\r\n }\r\n\r\n const sendAnalyticsTag = (linkName: string) => {\r\n const objCall = {\r\n data : {\r\n linkName : linkName.toLowerCase(),\r\n linkType: 'chatbot find a wine',\r\n },\r\n methodHandler : \"chatbotTriggerAdobeAnalytics\"\r\n }; \r\n postMessageToClient(objCall);\r\n }\r\n\r\n const updateAnalytics = () => { \r\n let linkName = 'web:chatbot:find a wine:preference:'\r\n let eventName = 'PREFERENCE_SELECTION_START';\r\n\r\n switch (currentView) {\r\n case 'price':\r\n linkName += `step1:${wineType}`;\r\n eventName = `WINETYPE::${wineType}`;\r\n break;\r\n case 'varietal':\r\n linkName += `step2:${wineType}:${priceRange}`;\r\n eventName = `PRICERANGE::${priceRange}`;\r\n break;\r\n case 'results':\r\n linkName += `step3:${wineType}:${priceRange}:${varietal}`;\r\n eventName = `VARIETAL::${varietal}`;\r\n break;\r\n case 'recommendationList':\r\n linkName = `web:chatbot:find a wine:recommendations:see more ${selectedType}`;\r\n eventName = `RECOMMENDATIONS::${selectedType}`;\r\n break;\r\n default:\r\n } \r\n \r\n if (showFAW && currentView !== 'type' && currentView !== 'cancelFaw') {\r\n sendAnalyticsTag(linkName);\r\n }\r\n\r\n const analyticsData = {\r\n queryId : v4(),\r\n isSuccessful : null,\r\n eventName: eventName,\r\n intentGroupId : intentGroupId,\r\n intentGroupName : intentGroupName,\r\n intentGroupTypeId : intentGroupTypeId,\r\n source : config.SOURCE\r\n };\r\n\r\n // FAW Set Store in Analytics\r\n addAnalyticsEvent(sessionId, userId, analyticsData);\r\n }\r\n \r\n\r\n useEffect(() => {\r\n if(currentView === 'results' && isFetchingRequired) {\r\n const getProducts = async() => {\r\n dispatch(fetchProducts({\r\n storeNumber: streetNumber,\r\n wineTypes: wineType && WineTypeMapping[wineType], \r\n priceRange: priceRange && PriceRangeMapping[priceRange], \r\n wineVarietal: varietal && VarietalTypeMapping[varietal]\r\n }))\r\n }\r\n getProducts()\r\n }\r\n\r\n if(currentView === 'results' || currentView === 'recommendationList') {\r\n //Scroll to top\r\n if(fawWrapper.current) {\r\n fawWrapper.current.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n updateAnalytics();\r\n\r\n },[currentView])\r\n\r\n //Update store details\r\n useEffect(()=> {\r\n dispatch(updateSelectedStore(streetNumber, storeName, intentData));\r\n }, [storeName, streetNumber])\r\n\r\n const getVarietals = () => {\r\n if (wineType === Types.Red) {\r\n return RedVarietals;\r\n }\r\n\r\n if (wineType === Types.WhiteRose) {\r\n return WhiteVarietals;\r\n }\r\n\r\n if (wineType === Types.ChampagneSparkling) {\r\n return SparklingVarietals;\r\n }\r\n\r\n return [];\r\n }\r\n\r\n const getRecommendedList = () => {\r\n let recommendedList: recommendedWine[];\r\n \r\n switch (selectedType) {\r\n case 'Best Sellers':\r\n recommendedList = recommendedWinesResult.bestSellers;\r\n break;\r\n case 'Top Rated':\r\n recommendedList = recommendedWinesResult.topRatedSellers; \r\n break;\r\n case 'New & Noteworthy':\r\n recommendedList = recommendedWinesResult.newAndNoteworthySellers;\r\n break;\r\n default:\r\n recommendedList = [];\r\n }\r\n\r\n return {recommendationList: recommendedList};\r\n }\r\n \r\n //To be done\r\n const handleCloseOrStartAgain = () => {\r\n if(currentView === \"results\" || currentView === \"recommendationList\") {\r\n //Handle start again\r\n dispatch(resetSelection());\r\n dispatch(updateCurrentView('type'));\r\n sendAnalyticsTag(`web:chatbot:find a wine:recommendations:${currentView === \"recommendationList\" ? `${selectedType}:` : ''}start again`);\r\n } else {\r\n //Handle Cancel\r\n dispatch(updateCurrentView('cancelFaw'));\r\n }\r\n }\r\n\r\n const handleBackButton = () => {\r\n setIsFetchingRequired(true);\r\n switch (currentView) {\r\n case 'type':\r\n //Handle going back to the screen\r\n break;\r\n case 'price':\r\n dispatch(updateCurrentView('type'));\r\n break;\r\n case 'varietal':\r\n dispatch(updateCurrentView('price'));\r\n break;\r\n case 'results':\r\n wineType !== Types.NotSure ? dispatch(updateCurrentView('varietal')) : dispatch(updateCurrentView('price'))\r\n break\r\n case 'recommendationList':\r\n setIsFetchingRequired(false);\r\n dispatch(updateCurrentView('results'));\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n const handleDone = (e: any) => {\r\n dispatch(showFawPage(false));\r\n dispatch(resetSelection());\r\n quickReplyHandler(e, DialogflowQueryType.Event, dialogflowEvent.Chatbot_FAW_Followup_Questions, false);\r\n }\r\n\r\n const updateView = (e: any) => {\r\n resumeGlobalTimeout();\r\n let eventName = '';\r\n switch (currentView) {\r\n case 'type':\r\n dispatch(updateCurrentView('price'));\r\n break;\r\n case 'price':\r\n wineType !== Types.NotSure ? dispatch(updateCurrentView('varietal')) : dispatch(updateCurrentView('results'))\r\n \r\n break;\r\n case 'WineMerchantRedirect':\r\n //dispatch(updateCurrentView('WineMerchantRedirect'))\r\n //wineType !== Types.NotSure ? dispatch(updateCurrentView('varietal')) : dispatch(updateCurrentView('results'))\r\n console.log(\"wine expert \" + wineExpert);\r\n break;\r\n case 'varietal':\r\n if (priceRange === Prices.any || priceRange === Prices.under10 || priceRange === Prices.under20)\r\n {\r\n dispatch(updateCurrentView('results'));\r\n }\r\n else\r\n {\r\n dispatch(updateCurrentView('WineMerchantRedirect')) \r\n }\r\n break;\r\n case 'results':\r\n sendAnalyticsTag(`web:chatbot:find a wine:recommendations:i'm done`);\r\n handleDone(e);\r\n eventName = `I'm done`;\r\n break;\r\n case 'recommendationList':\r\n sendAnalyticsTag(`web:chatbot:find a wine:recommendations:${selectedType}:i'm done`);\r\n handleDone(e);\r\n eventName = `I'm done`;\r\n break;\r\n default:\r\n }\r\n\r\n if (eventName !== '') {\r\n const analyticsData = {\r\n queryId : v4(),\r\n isSuccessful : null,\r\n eventName: eventName,\r\n intentGroupId : intentGroupId,\r\n intentGroupName : intentGroupName,\r\n intentGroupTypeId : intentGroupTypeId,\r\n channel : config.SOURCE\r\n };\r\n\r\n // FAW Set Store in Analytics\r\n addAnalyticsEvent(sessionId, userId, analyticsData);\r\n }\r\n }\r\n\r\n const isDisabled = () => {\r\n switch (currentView) {\r\n case 'type':\r\n return wineType === '';\r\n case 'price':\r\n return priceRange === '';\r\n case 'varietal':\r\n return varietal === '';\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n const getRecommendationText = () => {\r\n if(currentView === \"results\" && !showRecommendationText()) {\r\n return '';\r\n }\r\n if(currentView === \"results\" || currentView === \"recommendationList\") {\r\n if(varietal && varietal !== Varietals.NotSure && priceRange !== Prices.any) {\r\n return `I can recommend these ${varietal} from ${priceRange} at Dan Murphy’s ${toTitleCase(storeName)}.`;\r\n } else if (varietal && varietal !== Varietals.NotSure && priceRange === Prices.any) {\r\n return `I can recommend these ${varietal} at Dan Murphy’s ${toTitleCase(storeName)}.`;\r\n } else if (wineType && wineType === Types.NotSure && priceRange !== Prices.any) {\r\n return `I can recommend these wines from ${priceRange} at Dan Murphy’s ${toTitleCase(storeName)}.`;\r\n } else {\r\n return `Recommendations from Dan Murphy’s ${toTitleCase(storeName)}.`;\r\n }\r\n } else if (currentView === 'type') {\r\n return `Tell me what type of wine you’re curious about and I’ll give you a recommendation you can grab at Dan Murphy’s ${toTitleCase(storeName)}.`\r\n } else if (currentView === 'price') {\r\n if (wineType === Types.Red) {\r\n return `How much are you looking to spend per bottle on your red wine?`;\r\n } else if (wineType === Types.WhiteRose) {\r\n return `How much are you looking to spend per bottle on your white wine or rosé?`\r\n } else if (wineType === Types.ChampagneSparkling) {\r\n return `How much are you looking to spend per bottle on your Champagne or sparkling wine?`\r\n } else if (wineType === Types.NotSure) {\r\n return `How much are you looking to spend per bottle on your wine?`\r\n }\r\n } else if (currentView === 'varietal') {\r\n return `Which wine varietal are you interested in? I’ll show recommendations that are available at Dan Murphy’s ${toTitleCase(storeName)}.`\r\n }\r\n }\r\n\r\n const getScreenHeading = () => {\r\n if (currentView === \"results\") {\r\n return \"Wine Recommendation\" \r\n } else if(currentView === \"recommendationList\") {\r\n return `${selectedType} (${getRecommendedList().recommendationList.length})`\r\n }\r\n else if(currentView === \"WineMerchantRedirect\"){\r\n return \"\"\r\n }\r\n else {\r\n return \"Choose your wine preference\";\r\n }\r\n }\r\n\r\n const showRecommendationText = ( ) => {\r\n const {recommendedWines, bestSellers, topRatedSellers, newAndNoteworthySellers} = recommendedWinesResult;\r\n if(recommendedWines.length) {\r\n if(!bestSellers.length && !topRatedSellers.length && !newAndNoteworthySellers.length) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n \r\n return (\r\n
\r\n {currentView === 'cancelFaw' ? :\r\n <>\r\n {/* back button */}\r\n {currentView === 'type' || currentView === \"WineMerchantRedirect\" ? null :
{`< Back`}
}\r\n\r\n {/* scrollable container */}\r\n
\r\n {/* Header */}\r\n {currentView !== \"WineMerchantRedirect\" ?
\r\n
\r\n \r\n

{getScreenHeading()}

\r\n
\r\n
\r\n
\r\n : null}\r\n \r\n {/* description text */}\r\n {currentView !== \"WineMerchantRedirect\" ?
\r\n : null }\r\n {/* Main Content */}\r\n
\r\n {currentView === \"type\" && }\r\n {currentView === \"price\" && }\r\n {currentView === \"WineMerchantRedirect\" && }\r\n {currentView === \"varietal\" && }\r\n {currentView === \"results\" && }\r\n {currentView === \"recommendationList\" && }\r\n
\r\n
\r\n {/* fixed footer */}\r\n {currentView !== \"WineMerchantRedirect\" ?
\r\n handleCloseOrStartAgain() }/>\r\n updateView(event) }/>\r\n
: null }\r\n \r\n }\r\n
\r\n )\r\n}\r\n \r\nexport default FindAWine\r\n\r\n\r\n\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport './messageQrArticle.scss';\r\nimport { getUniqueId } from '../../widget/util/commonUtil';\r\n\r\ntype ArticleListProps = {\r\n message: any,\r\n clickHandler: any\r\n}\r\n\r\nconst ArticleListProps = ({message, clickHandler}: ArticleListProps) => {\r\n return (\r\n
\r\n
clickHandler(message)} >\r\n {message.text}\r\n
\r\n
\r\n {message.summary}\r\n \"\"\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ArticleListProps\r\n","import React from 'react'\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\nimport './SkeletonScreenFAQs.scss'\r\nconst SkeletonScreenFAQs = () => {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {\r\n [1,2].map((i)=>{\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n })\r\n }\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SkeletonScreenFAQs;","import React, { useEffect, useRef, useState } from 'react';\r\nimport moment from 'moment';\r\nimport parse from 'html-react-parser';\r\nimport './article.scss';\r\nimport { viewArticle, fetchArticle } from '../chatservice/zendeskApis';\r\nimport { postMessageToClient } from '../chatservice/communicationService';\r\nimport { config } from '../../config/config';\r\nimport SkeletonScreenFAQs from '../SkeletonScreens/SkeletonScreenFAQs';\r\n\r\ntype ArticleDetailProps = {\r\n sessionId: any,\r\n userId: any,\r\n data: any,\r\n setIsArticleFound: any,\r\n isArticleFound: any\r\n}\r\n\r\n\r\nconst ArticleDetail = ({ sessionId, userId, data, isArticleFound, setIsArticleFound }: ArticleDetailProps) => {\r\n const articleStartRef: any = useRef(null);\r\n const [articleTitle, setArticleTitle] = useState(\"\");\r\n const [articleBody, setArticleBody] = useState(\"\");\r\n const [articleLink, setArticleLink] = useState(\"\");\r\n\r\n const [articleLastUpdated, setArticleLastUpdated] = useState(\"\");\r\n\r\n const clickHandler = () => {\r\n postMessageToClient({ name: \"chatbotOpenArticle\", articleName: data.text });\r\n }\r\n\r\n const scrollToStart = () => {\r\n articleStartRef?.current?.scrollIntoView({ behavior: \"smooth\" });\r\n };\r\n\r\n const trimTheLastUpdated = (articleBodyHtmlString: string) => {\r\n const pattern = /Last updated: .*?<\\/strong>/gi;\r\n return articleBodyHtmlString.replace(pattern, '');\r\n }\r\n\r\n const appendOutboundIconAndAriaTag = (articleBodyHtmlString: string) => {\r\n const regex = /(.*?)<\\/a>/g;\r\n const modifiedHTMLString = articleBodyHtmlString?.replace(regex, (match, href, content) => {\r\n const urlParts = href?.split('/');\r\n const imageTag = '\"External';\r\n return `${content}${imageTag}`;\r\n });\r\n\r\n return modifiedHTMLString;\r\n }\r\n\r\n const articleToBeRendered = (articleBody: string) => {\r\n const stringWithLastUpdatedTrimmed = trimTheLastUpdated(articleBody);\r\n const stringWithAppendedOutBoundIcon = appendOutboundIconAndAriaTag(stringWithLastUpdatedTrimmed);\r\n return parse(stringWithAppendedOutBoundIcon);\r\n }\r\n\r\n useEffect(() => {\r\n viewArticle(sessionId, userId, data.intentGroupId, data.queryId, data.articleId, true);\r\n scrollToStart();\r\n\r\n // fetch article data\r\n if (isArticleFound === null) {\r\n fetchArticle(data.articleId).then\r\n (response => {\r\n if (!response.error) {\r\n setArticleTitle(response.article.name);\r\n setArticleBody(response.article.body);\r\n setArticleLastUpdated(response.article.edited_at);\r\n\r\n const articlePageName = response.article.html_url && response.article.html_url.split('.zendesk.com/hc/en-us/articles/')[1];\r\n setArticleLink(`${config.DAN_HELP_CENTRE_URL}/articles/${articlePageName}`);\r\n setIsArticleFound(true);\r\n } else {\r\n setIsArticleFound(false);\r\n }\r\n })\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n {\r\n isArticleFound === true &&\r\n
\r\n
\r\n
\r\n
{parse(articleTitle)}
\r\n
\r\n
Last updated: {moment(articleLastUpdated\r\n )?.format('Do MMMM YYYY')}
\r\n
{articleToBeRendered(articleBody)}
\r\n
\r\n }\r\n\r\n {isArticleFound === null && }\r\n\r\n {isArticleFound === false && There was an issue loading the article you selected. Please come back again at another time.}\r\n
\r\n )\r\n}\r\n\r\nexport default ArticleDetail\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport './messageQrArticle.scss';\r\n\r\ntype ArticleListPayloadProps = {\r\n messages: any,\r\n clickHandler: any\r\n}\r\n\r\nconst ArticleListPayloadProps = ({messages, clickHandler}: ArticleListPayloadProps) => {\r\n return (\r\n <>\r\n {messages.map((m: any, index: number) => ( \r\n
clickHandler(m)}>\r\n
\r\n {m.text}\r\n
\r\n
\r\n {m.summary}\r\n \"\"\r\n
\r\n
\r\n ))}\r\n \r\n )\r\n}\r\n\r\nexport default ArticleListPayloadProps\r\n","import { config } from '../../config/config';\r\n\r\nconst URL_GREET_SHOPPER: string = `${config.CHATSERVER_URL}/api/Shopper/GreetShopper`;\r\nconst URL_SHOPPER_GET_ORDER_DETAIL: string = `${config.CHATSERVER_URL}/api/Shopper/GetOrderDetail`;\r\nconst URL_SHOPPER_GET_SUBSCRIPTION_DETAIL: string = `${config.CHATSERVER_URL}/api/Shopper/GetSubscriptionDetail`;\r\nconst AUTH_BACKWARD_COMPATIBILITY_SETTING: string = `${config.CHATSERVER_URL}/api/Settings/BackwardCompatibilitySetting`;\r\nconst URL_SETTINGS_GET_FEATURE: string = `${config.CHATSERVER_URL}/api/Settings/IsFeatureEnabled/`;\r\nconst URL_CONFIGURATIONS: string = `${config.CHATSERVER_URL}/api/Settings/GetWidgetConfiguration/bws`;\r\n\r\nconst requestPost = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': config.APIMGT_KEY,\r\n 'Ak' : '',\r\n 'Rt' : ''\r\n },\r\n body: JSON.stringify({})\r\n};\r\n\r\nconst requestGet = {\r\n method: 'GET',\r\n headers: { 'Content-Type': 'application/json','Ocp-Apim-Subscription-Key': config.APIMGT_KEY }\r\n};\r\n\r\nconst greetLoggedInShopper = async (shopperId: number, widgetSessionId: string, sessionId: string, userId: string, intentGroupId: string, intentGroupName: string, ak:string = '') => {\r\n try {\r\n requestPost.body = JSON.stringify({ \r\n \"shopperId\": shopperId, \r\n \"widgetSessionId\": widgetSessionId, \r\n \"dialogFlowSessionId\" : sessionId , \r\n \"chatbotUserId\" : userId,\r\n \"intentGroupId\" : intentGroupId,\r\n \"intentGroupName\" : intentGroupName,\r\n \"source\" : (config.ISSTAGING) ? 'bwsstaging' : config.SOURCE\r\n });\r\n\r\n if (ak !== '')\r\n requestPost.headers['Ak'] = ak;\r\n\r\n const response = await fetch(URL_GREET_SHOPPER, requestPost);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n \r\n}\r\n\r\nconst getOrderDetailByShopperId = async (shopperId: number, widgetSessionId: string, orderNumber: number, sessionId: string, userId: string) => {\r\n try {\r\n requestPost.body = JSON.stringify({ \"shopperId\": shopperId, \"widgetSessionId\": widgetSessionId, \"dialogFlowSessionId\" : sessionId , \"chatbotUserId\" : userId, \"source\" : config.SOURCE });\r\n const response = await fetch(`${URL_SHOPPER_GET_ORDER_DETAIL}/${ orderNumber }`, requestPost);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n } \r\n}\r\n\r\nconst getSubscriptionDetailByShopperId = async (shopperId: number, widgetSessionId: string, subscriptionId: string) => {\r\n try {\r\n requestPost.body = JSON.stringify({ \"shopperId\": shopperId, \"widgetSessionId\": widgetSessionId });\r\n const response = await fetch(`${URL_SHOPPER_GET_SUBSCRIPTION_DETAIL}/${ subscriptionId }`, requestPost);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n \r\n}\r\n\r\nconst getAuthBackwardCompatibilitySetting = async () => {\r\n try {\r\n const response = await fetch(`${ AUTH_BACKWARD_COMPATIBILITY_SETTING}`, requestGet);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n \r\n}\r\n\r\nconst getFeatureSetting = async (featureName: string) => {\r\n try {\r\n const response = await fetch(`${ URL_SETTINGS_GET_FEATURE}${ featureName }`, requestGet);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n \r\n}\r\n\r\nconst getConfigSettings = async () => {\r\n try {\r\n const response = await fetch(`${ URL_CONFIGURATIONS }`, requestGet);\r\n const result = await response.json();\r\n return result;\r\n } catch(error) {\r\n console.log(JSON.stringify(error));\r\n return error;\r\n }\r\n}\r\n\r\nexport {\r\n greetLoggedInShopper,\r\n getOrderDetailByShopperId,\r\n getSubscriptionDetailByShopperId,\r\n getAuthBackwardCompatibilitySetting,\r\n getFeatureSetting,\r\n getConfigSettings\r\n}\r\n","import moment, { Moment } from \"moment\";\r\n\r\nconst getShippingStatus = (shippingStatus: string) => {\r\n let deliveryStatus = '';\r\n let shippingIconUrl = '';\r\n if (shippingStatus === 'Placed' || shippingStatus === 'ArrivedForPickUp' || shippingStatus === 'Awaiting Pick' || shippingStatus === 'Picking' || shippingStatus === 'Confirmed') {\r\n deliveryStatus = 'Confirmed';\r\n shippingIconUrl = '/images/Confirmed.svg';\r\n }\r\n else if (shippingStatus === 'DeliveryRequested') {\r\n deliveryStatus = 'Delivery Requested';\r\n shippingIconUrl = '/images/Confirmed.svg';\r\n }\r\n else if (shippingStatus === 'Collected') {\r\n deliveryStatus = 'Collected';\r\n shippingIconUrl = '/images/Onitsway.svg';\r\n }\r\n else if (shippingStatus === 'DriverNotAssigned') {\r\n deliveryStatus = 'Driver Not Assigned';\r\n shippingIconUrl = '/images/Cancelled.svg';\r\n }\r\n else if (shippingStatus === 'DriverAssigned') {\r\n deliveryStatus = 'Driver Assigned';\r\n shippingIconUrl = '/images/Confirmed.svg';\r\n }\r\n else if (shippingStatus === 'Cancelled') {\r\n deliveryStatus = 'Cancelled';\r\n shippingIconUrl = '/images/Cancelled.svg';\r\n }\r\n else if (shippingStatus === 'Failed' || shippingStatus === 'DeliveryFailed') {\r\n deliveryStatus = 'Delivery Failed';\r\n shippingIconUrl = '/images/Delivery-failed.svg';\r\n }\r\n else if (shippingStatus === 'Packed') {\r\n deliveryStatus = 'Packed';\r\n shippingIconUrl = '/images/Packed.svg';\r\n }\r\n else if (shippingStatus === 'Delivered') {\r\n deliveryStatus = 'Delivered';\r\n shippingIconUrl = '/images/Delivered.svg';\r\n }\r\n else {\r\n deliveryStatus = 'On its way'\r\n shippingIconUrl = '/images/Onitsway.svg';\r\n }\r\n return {\r\n deliveryStatus,\r\n shippingIconUrl\r\n }\r\n}\r\n\r\nconst getShippingType = (shippingType: string, orderDate: Moment, deliveryDate: Moment) => {\r\n let deliveryType = '';\r\n let calculatedDeliveryDate: Moment;\r\n let shippingIconUrl: string = '';\r\n\r\n if (shippingType === 'ASAP') {\r\n deliveryType = 'ASAP';\r\n shippingIconUrl = '/images/icon-track-order-jsw.svg';\r\n calculatedDeliveryDate = moment(deliveryDate);\r\n } else {\r\n deliveryType = shippingType;\r\n calculatedDeliveryDate = orderDate;\r\n shippingIconUrl = '/images/Onitsway.svg';\r\n }\r\n\r\n return {\r\n deliveryType,\r\n calculatedDeliveryDate,\r\n shippingIconUrl\r\n }\r\n}\r\n\r\nexport {\r\n getShippingType,\r\n getShippingStatus\r\n}","import React from 'react'\r\nimport './SkeletonScreenOrderTracking.scss'\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\nconst SkeletonScreenOrderTracking = () => {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {\r\n [1,2,3,4].map((i)=>{\r\n return (\r\n <>\r\n \r\n {i <4 ?\r\n :''\r\n }\r\n\r\n \r\n )\r\n })\r\n }\r\n
\r\n\r\n
\r\n { \r\n [1,2,3,4].map((i)=>{\r\n return (\r\n <>\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
\r\n\r\n
\r\n {\r\n [1,2,3].map((i)=>{\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n })\r\n }\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SkeletonScreenOrderTracking;\r\n","import moment from 'moment';\r\nimport React, { useEffect, useRef } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../../reducers';\r\nimport './OrderExpandedTile.scss';\r\nimport { Accordion, AccordionSummary, AccordionDetails, Typography, Stepper, Step, StepLabel, Button, Chip, StepIconProps, StepConnector, withStyles, AccordionProps, Theme, createStyles } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport LaunchIcon from '@material-ui/icons/Launch';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\n\r\nimport { getOrderDetailByShopperId } from '../../chatservice/chatserverApis';\r\nimport { getShippingType,getShippingStatus } from './VerifiedOrderUtils';\r\nimport { DialogflowQueryType, MessageTypes, Speaker } from '../../models/enum';\r\nimport { dialogflowEvent, orderTrackingStatusMapping, vote } from '../../../config/config';\r\nimport { updateAnalyticsStatus } from '../../chatservice/dialogflowQuery';\r\nimport { setOrderForTile, setShowOrderTrackingDetail } from '../../../actions';\r\nimport { Check } from '@material-ui/icons';\r\nimport { makeStyles, styled } from '@material-ui/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport SkeletonScreenOrderTracking from '../../SkeletonScreens/SkeletonScreenOrderTracking';\r\nimport { getDeliveryTime } from '../../util/dateTimeHelper';\r\nimport { isDeliveryDateToday } from '../../util/commonUtil';\r\n\r\n\r\ntype OrderExpandedTileProps = {\r\n order: any,\r\n quickReplyHandler: any,\r\n backToWidget: any,\r\n sessionId: any,\r\n userId: any,\r\n setMessages: any,\r\n msgs: any,\r\n featureDelGuarranteeMicroCopy:any\r\n}\r\n\r\ntype DateStatus = {\r\n statusName: string;\r\n statusDateTime: string;\r\n}\r\n \r\n\r\nconst OrderExpandedTile = ({order, quickReplyHandler, backToWidget, sessionId, userId, setMessages, msgs, featureDelGuarranteeMicroCopy}: OrderExpandedTileProps) => {\r\n const shopperId = useSelector((state: RootState) => { return state.botData.shopperId }); \r\n const widgetSessionId = useSelector((state: RootState) => { return state.botData.widgetSessionId }); \r\n\r\n const tileStartRef: any = useRef(null);\r\n const [isDataLoaded, setIsDataLoaded] = React.useState(false);\r\n const [lastDeliveryDate, setLastDeliveryDate] = React.useState(new Date());\r\n const [lastDeliveryDateTime, setLastDeliveryDateTime] = React.useState(new Date());\r\n const [deliveryStartTime, setDeliveryStartTime] = React.useState('');\r\n const [deliveryEndTime, setDeliveryEndTime] = React.useState('');\r\n\r\n const [deliveryType, setDeliveryType] = React.useState('');\r\n const [isDeliveryToday, setIsDeliveryToday] = React.useState(false);\r\n const [orderData, setOrderData] = React.useState(null);\r\n const [deliveryStatusIcon, setDeliveryStatusIcon] = React.useState('');\r\n const [deliveryStatus, setDeliveryStatus] = React.useState('');\r\n const [showAllProduct , setShowAllProduct] = React.useState(false);\r\n const dispatch = useDispatch();\r\n const steps = ['Confirmed', 'Packed', 'On its way', 'Delivered'];\r\n const stepsFailedDelivery = ['Confirmed', 'Packed', 'On its way', 'DeliveryFailed'];\r\n const [showProduct, setShowProduct] = React.useState()\r\n\r\n const [isFailed, setIsFailed] = React.useState(false);\r\n\r\n const [expanded, setExpanded] = React.useState(false);\r\n\r\n const [deliveryMap, setDeliveryMap] = React.useState(new Map());\r\n\r\n let allProducts=2;\r\n\r\n const handleChange = (panel: string) => (event: React.ChangeEvent<{}>, newExpanded: boolean) => {\r\n setExpanded(newExpanded ? panel : false);\r\n };\r\n\r\n const showProducts = () => {\r\n setShowAllProduct(!showAllProduct)\r\n if (!showAllProduct) {\r\n setShowProduct(orderData?.products)\r\n allProducts = orderData?.products.length;\r\n\r\n }else {\r\n allProducts = 3;\r\n setShowProduct(orderData?.products.slice(0,3))\r\n }\r\n }\r\n\r\n const processAcceptance = (e: any, isSuccessful: boolean) => {\r\n updateAnalyticsStatus(sessionId, userId, order.intentGroupId, isSuccessful);\r\n \r\n const intentGroupInfo = {\r\n intentGroupId: order.intentGroupId,\r\n intentGroupName: order.intentGroupName\r\n }\r\n\r\n let eventName = (isSuccessful) ? dialogflowEvent.ORDER_TRACKING_EXPANDEDTILE_YES : dialogflowEvent.ORDER_TRACKING_EXPANDEDTILE_NO;\r\n let disPlayClickAsText = true;\r\n let renewIntentGroup = false;\r\n\r\n quickReplyHandler(e, DialogflowQueryType.Event, eventName, disPlayClickAsText, null, renewIntentGroup, intentGroupInfo);\r\n\r\n backToWidget(true);\r\n }\r\n\r\n const scrollToStart = () => {\r\n tileStartRef?.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }; \r\n\r\n const formatDateTimeStamp = (dateString: string) => {\r\n if (!dateString) return '';\r\n const date = moment(dateString);\r\n return {\r\n day: date.format('D MMM'),\r\n time: date.format('h:mm A')\r\n };\r\n };\r\n\r\n const getOrderStatusDateTime = (orderType:string, orderData:any) => {\r\n const statusDateTime = orderData?.statusDateList.find((item:DateStatus) => item?.statusName?.toLowerCase() === orderType?.toLowerCase())?.statusDateTime;\r\n return statusDateTime;\r\n }\r\n\r\n\r\n useEffect(() => {\r\n scrollToStart();\r\n // fetch article data\r\n if (isDataLoaded === false) {\r\n getOrderDetailByShopperId(shopperId, widgetSessionId, order.orderId, sessionId, userId)\r\n .then((result:any) => {\r\n if (result.statusCode && result.statusCode !== 200) {\r\n dispatch(setShowOrderTrackingDetail(false)); \r\n dispatch(setOrderForTile(null));\r\n\r\n setMessages((messages: any) => [...messages, ...[{ text: `We can no longer show you these delivery details.`, from: Speaker.BWS, type: MessageTypes.Message }]]);\r\n setMessages((messages: any) => [...messages, ...[{ text: `To do this, you need to log in to the account associated with the orders.`, from: Speaker.BWS, type: MessageTypes.Message }]]);\r\n \r\n if (shopperId === 0) {\r\n setMessages((messages: any) => [...messages, ...[{ text: null, from: Speaker.BWS, type: MessageTypes.QuickReplyPayload, data: [{\r\n intentGroupId : order.intentGroupId,\r\n intentGroupName : order.intentGroupName,\r\n target : \"route\",\r\n text : \"Login\",\r\n type : \"url\",\r\n uri : \"https://bws.com.au/secure-login\"\r\n }] }]]);\r\n }\r\n } else {\r\n setIsDataLoaded(true);\r\n setOrderData(result.data);\r\n\r\n let sortedDates = result?.data?.deliveryBookingList?.sort(\r\n (a:any, b:any) => new Date(b.deliveryAtDate).getTime() - new Date(a.deliveryAtDate).getTime()\r\n );\r\n // get the latest date\r\n setLastDeliveryDate(sortedDates[0].deliveryAtDate);\r\n \r\n const deliveryTime = getDeliveryTime(result?.data?.deliveryBookingList[0]?.deliveryAtTime);\r\n setDeliveryStartTime(deliveryTime[0])\r\n setDeliveryEndTime(deliveryTime[1]);\r\n\r\n let { deliveryStatus, shippingIconUrl } = getShippingStatus(result?.data?.status);\r\n setDeliveryStatusIcon(shippingIconUrl);\r\n setDeliveryStatus(deliveryStatus);\r\n setShowProduct(result?.data?.products?.slice(0,3))\r\n setIsDeliveryToday(isDeliveryDateToday(result?.data?.deliveryDate));\r\n \r\n \r\n if (result.data.status === \"DeliveryFailed\" || result.data.status === \"Failed\") {\r\n setIsFailed(true)\r\n }\r\n }\r\n });\r\n }\r\n }, [allProducts]);\r\n \r\n useEffect(() => {\r\n if (!orderData || ['cancelled'].includes(orderData.status?.toLowerCase())) {\r\n return;\r\n }\r\n const map = new Map();\r\n steps.forEach(step => {\r\n switch (step) {\r\n case 'Confirmed':\r\n const orderConfirmedDate = getOrderStatusDateTime('Order Created', orderData);\r\n map.set(step, formatDateTimeStamp(orderConfirmedDate));\r\n break;\r\n case 'Packed':\r\n let orderPackedDate;\r\n orderPackedDate = getOrderStatusDateTime('Order Packed', orderData);\r\n if(!orderPackedDate) {\r\n orderPackedDate = getOrderStatusDateTime('Delivery Requested', orderData);\r\n }\r\n map.set(step, formatDateTimeStamp(orderPackedDate));\r\n break;\r\n case 'On its way':\r\n const orderOnItsWayDate = getOrderStatusDateTime('Driver Collected', orderData);\r\n map.set(step, formatDateTimeStamp(orderOnItsWayDate));\r\n break;\r\n case 'Delivered':\r\n const orderDeliveredDate = getOrderStatusDateTime('Delivered', orderData);\r\n map.set(step, formatDateTimeStamp(orderDeliveredDate));\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if(isFailed) {\r\n map.set('DeliveryFailed', '');\r\n }\r\n\r\n setDeliveryMap(map);\r\n }, [orderData]);\r\n \r\n\r\n if (orderData?.deliveryBookingList.length > 1) {\r\n orderData?.deliveryBookingList.sort(\r\n (a:any, b:any) => new Date(b.createdDate).getTime() - new Date(a.createdDate).getTime()\r\n );\r\n }\r\n \r\n let deliveryBooking = orderData?.deliveryBookingList[orderData?.deliveryBookingList.length - 1];\r\n const QontoStepIconRoot = styled(\"div\")<{ ownerState: { active?: boolean } }>(\r\n () => ({\r\n display: \"flex\",\r\n height: 22,\r\n alignItems: \"center\",\r\n \r\n \"& .QontoStepIcon-completedIcon\": {\r\n color: \"white\",\r\n zIndex: 1,\r\n fontSize: 18,\r\n },\r\n \"& .QontoStepIcon-circle\": {\r\n width: 24,\r\n height: 24,\r\n borderRadius: \"50%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n },\r\n \"& .QontoStepIcon\": {\r\n width: 24,\r\n height: 24,\r\n borderRadius: \"50%\",\r\n backgroundColor: \"#D1D2D1\",\r\n display:\"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n \r\n },\r\n \"& .QontoStepIcon-error\": {\r\n width: 24,\r\n height: 24,\r\n borderRadius: \"50%\",\r\n backgroundColor: \"#8C0728\",\r\n display:\"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n \r\n },\r\n })\r\n );\r\n \r\n \r\n function QontoStepIcon(props: StepIconProps) {\r\n const { active, completed, className } = props;\r\n \r\n return (\r\n \r\n\r\n {!active ? (\r\n completed ? (\r\n
\r\n \r\n
):\r\n (
\r\n \r\n
)\r\n ) : isFailed?(
\r\n
\r\n\r\n \r\n
\r\n
):\r\n (
\r\n \r\n
\r\n\r\n )}\r\n
\r\n );\r\n }\r\n const Connector = withStyles({\r\n alternativeLabel: { top: 9 },\r\n \r\n active:{'& $line': { borderColor: '#00B5A9' } },\r\n completed: { '& $line': { borderColor: '#00B5A9' } }, \r\n line: {\r\n borderTopWidth: 2,\r\n },\r\n vertical: {\r\n marginLeft: 9,\r\n }, \r\n \r\n })(StepConnector); \r\n const ConnectorFailed = withStyles({\r\n alternativeLabel: { top: 9 },\r\n \r\n active:{'& $line': { borderColor: '#8C0728' } },\r\n completed: { '& $line': { borderColor: '#00B5A9' } }, \r\n line: {\r\n borderTopWidth: 2,\r\n },\r\n vertical: {\r\n marginLeft: 9,\r\n }, \r\n \r\n })(StepConnector); \r\n \r\n return (\r\n
\r\n {\r\n isDataLoaded === true && \r\n
\r\n
\r\n
\r\n \"icon\"\r\n
\r\n { deliveryStatus ?? orderData?.status }\r\n
\r\n
\r\n Confirmed { moment(orderData?.date).format('DD MMM YYYY') } | Order #{ orderData?.orderId }\r\n {isDeliveryToday?\r\n
\r\n Expected delivery: \r\n {moment(deliveryStartTime, \"HH:mm:ss\").format(\"LT\")} - {moment(deliveryEndTime, \"HH:mm:ss\").format(\"LT\")}, today \r\n
\r\n :
\r\n Expected delivery on: \r\n { moment(lastDeliveryDate).format('DD MMM') }, {moment(deliveryStartTime, \"HH:mm:ss\").format(\"LT\")} - {moment(deliveryEndTime, \"HH:mm:ss\").format(\"LT\")}\r\n
\r\n }\r\n
\r\n\r\n {featureDelGuarranteeMicroCopy.current && orderData?.deliveryType===\"ASAP\" && steps.indexOf(orderData?.status)>0 && orderData?.status!=='Delivered' && \r\n
\r\n If we’re more than 1hr, your next delivery will be on us. T&Cs\r\n
\r\n }\r\n\r\n {orderData?.status===\"Cancelled\" && \r\n
\r\n \r\n Didn’t cancel? It may be that we’re having trouble finding you a driver right now. You should receive a text message for the next step.\r\n \r\n
\r\n }\r\n\r\n { (orderData?.status===\"Failed\" || orderData?.status===\"DeliveryFailed\") &&\r\n
\r\n Sorry it looks like the driver attempted the delivery but was unsuccessful.\r\n
\r\n }\r\n\r\n \r\n\r\n \r\n \r\n {orderData?.status!==\"Cancelled\"?\r\n
\r\n {isFailed? \r\n \r\n }>\r\n { stepsFailedDelivery.map((label) => (\r\n \r\n \r\n {label === 'DeliveryFailed' ? 'Failed' : label}\r\n {deliveryMap.has(label) && {deliveryMap.get(label)?.day}}\r\n {deliveryMap.has(label) && {deliveryMap.get(label)?.time}}\r\n \r\n \r\n ))}\r\n :\r\n }>\r\n\r\n { steps.map((label) => (\r\n \r\n \r\n {label}\r\n {deliveryMap.has(label) && {deliveryMap.get(label)?.day}}\r\n {deliveryMap.has(label) && {deliveryMap.get(label)?.time}}\r\n \r\n \r\n ))}\r\n }\r\n
:'' \r\n }\r\n \r\n
\r\n {showProduct?.map((product:any, index:number)=>{\r\n return(\r\n <>\r\n \r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n {product.name}\r\n {product.quantity} {product.quantity===1?'Unit':'Units'}\r\n
\r\n
\r\n \r\n )\r\n \r\n })\r\n }\r\n {orderData?.products.length>3 &&\r\n (\r\n
\r\n {!showAllProduct?\r\n
\r\n Show More\r\n \"\"\r\n
\r\n :
\r\n Show less\r\n \"\"\r\n
\r\n }\r\n
\r\n )\r\n }\r\n
\r\n\r\n { orderData?.status!=='Cancelled'? \r\n
\r\n {\r\n deliveryBooking?.deliveryUpdate?.trackingUrl &&\r\n orderData?.status !== 'DeliveryFailed' && \r\n orderData?.status !== 'Cancelled' && \r\n orderData?.status !== 'DeliveryCancelled' && \r\n LaunchIcon}\r\n href={ deliveryBooking?.deliveryUpdate?.trackingUrl }\r\n target=\"_blank\"\r\n >\r\n Track your order\r\n \r\n }\r\n \r\n {\r\n !deliveryBooking?.deliveryUpdate?.trackingUrl &&\r\n
\r\n \"\"\r\n Tracking link will appear once the order is on its way\r\n
\r\n }\r\n
:\"\"\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
{vote.QUESTION_TEXT_ORDERTRACKING}
\r\n
\r\n
processAcceptance(event, true)}>{vote.YES_TEXT}
\r\n
processAcceptance(event, false)}>{vote.NO_TEXT}
\r\n
\r\n
\r\n
\r\n }\r\n\r\n { isDataLoaded === false && }\r\n
\r\n )\r\n}\r\n\r\nexport default OrderExpandedTile","import moment, { Moment } from 'moment';\r\nimport React from 'react'\r\nimport { useDispatch } from 'react-redux';\r\nimport { setOrderForTile, setShowOrderTrackingDetail } from '../../../actions';\r\nimport './VerifiedOrderList.scss';\r\nimport { getShippingType, getShippingStatus } from './VerifiedOrderUtils';\r\nimport { getDeliveryTime } from '../../util/dateTimeHelper';\r\nimport { isDeliveryDateToday } from '../../util/commonUtil';\r\n\r\ntype VerifiedOrderListProps = {\r\n orderList: any\r\n}\r\n\r\nconst VerifiedOrderList = ({orderList}: VerifiedOrderListProps) => {\r\n const dispatch = useDispatch();\r\n\r\n const changeDetailFlag = (order: any) => {\r\n if (!order.isSubscription) {\r\n dispatch(setShowOrderTrackingDetail(true)); \r\n dispatch(setOrderForTile(order));\r\n }\r\n }\r\n \r\n return (\r\n
\r\n {\r\n orderList.map((data: any, index: number) => {\r\n let deliveryDate:Moment;\r\n let deliveryTypeString;\r\n let estimatedDeliveryDateText = '';\r\n let estimatedDeliveryTimeText='';\r\n let orderDate:Moment;\r\n let orderId;\r\n let products;\r\n let isSubscription = data.isSubscription ?? false;\r\n let extraDeliveryInfo = '';\r\n let iconUrl = '';\r\n let deliveryCount = 0;\r\n let status;\r\n \r\n deliveryCount = data.deliveryCount;\r\n deliveryTypeString = '';\r\n orderId = data.orderId;\r\n status = data.status;\r\n let deliveryDatesAllConsignments = data.consignmentShippingTypes.map((shippingType:string) => {\r\n orderDate = moment(data.orderDate);\r\n deliveryDate = moment(data.deliveryDate);\r\n\r\n let { deliveryType, calculatedDeliveryDate, shippingIconUrl } = getShippingType(shippingType, orderDate, deliveryDate);\r\n\r\n // if the delivery type is Supplier, show a standard delivery\r\n deliveryTypeString = (deliveryType === 'Supplier')? 'Standard' : deliveryType;\r\n\r\n iconUrl = shippingIconUrl;\r\n\r\n return calculatedDeliveryDate;\r\n });\r\n\r\n let { deliveryStatus, shippingIconUrl } = getShippingStatus(data.status);\r\n\r\n let sortedDates = deliveryDatesAllConsignments.sort(\r\n (a:Date, b:Date) => new Date(b).getTime() - new Date(a).getTime()\r\n );\r\n \r\n // get the latest date\r\n estimatedDeliveryDateText= moment(sortedDates[0]).format('DD MMM');\r\n estimatedDeliveryTimeText= moment(sortedDates[0], \"HH:mm:ss\").format(\"LT\");\r\n const deliveryTime = getDeliveryTime(moment(data?.deliveryDate)?.format(\"HH:mm:ss\").toString());\r\n const deliveryStartTime = deliveryTime[0];\r\n const deliveryEndTime = deliveryTime[1];\r\n\r\n const isDeliveryToday = isDeliveryDateToday(data?.deliveryDate);\r\n\r\n products = data.productImages;\r\n\r\n return (\r\n
changeDetailFlag(data) } >\r\n
\r\n
\r\n \"icon\"\r\n { deliveryStatus }\r\n
\r\n
\r\n Order # { orderId } \r\n
\r\n
\r\n \r\n { isDeliveryToday ?\r\n \r\n Expected delivery: {moment(deliveryStartTime, \"HH:mm:ss\").format(\"LT\")} - {moment(deliveryEndTime, \"HH:mm:ss\").format(\"LT\")}, today\r\n :\r\n\r\n \r\n Expected delivery on: { moment(data.deliveryDate).format('DD MMM') }, {moment(deliveryStartTime, \"HH:mm:ss\").format(\"LT\")} - {moment(deliveryEndTime, \"HH:mm:ss\").format(\"LT\")}\r\n \r\n\r\n }\r\n \r\n
\r\n {\r\n products.map(( productImage: any, indexinner: number) => {\r\n return (\r\n indexinner < 4 &&\r\n
\r\n {\r\n indexinner === 3 && +{ products.length - 3 } \r\n }\r\n\r\n { indexinner === 3 &&\r\n
\r\n }\r\n\r\n {\r\n
\r\n\r\n
\r\n }\r\n
)\r\n \r\n })\r\n }\r\n
\r\n
)\r\n })\r\n \r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default VerifiedOrderList\r\n","import React, { useEffect, useRef, useState } from \"react\"\r\nimport './AgeVerification.scss'\r\nimport { config } from '../../config/config';\r\nimport { handleAnalyticsBot, isMobileOS } from '../util/commonUtil'\r\n\r\ntype AgeVerification = {\r\n setShowVerifyAge: (type: boolean) => void,\r\n endScreenMountingStyle: string,\r\n setisOverlayScreenMounted: (type: boolean) => void,\r\n showVerifyAge: boolean,\r\n}\r\n\r\nconst AgeVerification = ({setShowVerifyAge, endScreenMountingStyle, showVerifyAge, setisOverlayScreenMounted}:AgeVerification) => {\r\n\r\n const verifyAge = useRef(null);\r\n let timoutIdShowVerifyAge: ReturnType | null = null;\r\n\r\n\r\n const closeAgeVerificationPage = () => {\r\n timoutIdShowVerifyAge = setTimeout(() => {\r\n setShowVerifyAge(false)\r\n }, 500);\r\n setisOverlayScreenMounted(false)\r\n }\r\n\r\n const onclickHandler = () => {\r\n handleAnalyticsBot(`${isMobileOS() ? 'app' : 'web'}:chatbot:nsw id verification:verify my age`, 'chatbot nsw id verification', 'chatbotTriggerAdobeAnalytics');\r\n window.open(`${config.BWS_MY_ACCOUNT_URL}?i_cid=chatbot-nsw-id-verification`, '_blank');\r\n }\r\n\r\n useEffect(() => {\r\n let timeoutId: ReturnType | null = null;\r\n \r\n window.onclick = (event:Event) => {\r\n const { className } = event.target as HTMLElement;\r\n if ( verifyAge.current && !verifyAge.current.contains(event.target as HTMLElement) && className && className.indexOf('header') && className.indexOf('brand') ) {\r\n timeoutId = setTimeout(() => {\r\n closeAgeVerificationPage();\r\n }, 450);\r\n }\r\n }\r\n \r\n return () => {\r\n if(timeoutId) { clearTimeout(timeoutId);}\r\n if(timoutIdShowVerifyAge) { clearTimeout(timoutIdShowVerifyAge);}\r\n }\r\n}, [showVerifyAge])\r\n\r\n return (\r\n
\r\n
\r\n

Online age check required for same-day deliveries in NSW from June 1

\r\n
\r\n \r\n
\r\n
\r\n \"\"\r\n This is only mandatory for same-day deliveries in NSW after June 1.\r\n
\r\n
\r\n \"\"\r\n Verify your ID now will save you time at checkout in the future. If you're a BWS member you'll only have to complete this once.\r\n
\r\n
\r\n \"\"\r\n Simply go to your account & follow the prompt in 'My Details' section.\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default AgeVerification","import { config } from '../../config/config';\r\n//import io from 'socket.io-client';\r\nimport zChat from '../../zendesk/web-sdk';\r\nimport { MessageModel } from '../models/messageModel';\r\nimport { MessageTypes, Speaker } from '../models/enum';\r\nimport axios from 'axios/index';\r\n\r\n\r\nconst initLiveChat = function() {\r\n // create socket\r\n // let socket = io(`${config.CHATSERVER_URL}`);\r\n\r\n // socket.on('messageListener', function(msg:any) {\r\n // setMessages((messages: any) => [...messages, ...[msg]]);\r\n // setLoader(false); \r\n // }); \r\n}\r\n\r\nconst sendLiveChatMessage = (message: string)=> {\r\n /*\r\n COMMENT OUT WHAT LIVE CHAT IS NOT AVAILABLE\r\n zChat.sendChatMsg(message, function(err: any) {\r\n if (err) \r\n console.log(`err : ${err}`);\r\n });\r\n */\r\n}\r\n\r\nconst isLiveChatAvailable = () => {\r\n let isAvailable: boolean = false;\r\n\r\n /*\r\n COMMENT OUT WHAT LIVE CHAT IS NOT AVAILABLE\r\n const connectionStatus = zChat.getConnectionStatus();\r\n\r\n const currentDate = new Date();\r\n const currentMinutes = (currentDate.getHours() * 60) + currentDate.getMinutes();\r\n const departmentId = parseInt(config.ZENDESK_LIVECHAT_GROUP_ID);\r\n\r\n const operatingHoursObj = zChat.getOperatingHours();\r\n let operatingHoursToday = (operatingHoursObj) ? operatingHoursObj.department_schedule[departmentId] : null;\r\n let departmentStatuses = zChat.getAllDepartments();\r\n let liveChatDepartment = departmentStatuses.find((a: { id: number; name: string; status: string}) => a.id === departmentId);\r\n\r\n if (connectionStatus !== 'connected') {\r\n isAvailable = false;\r\n } else if (operatingHoursToday !== undefined && operatingHoursToday !== null && liveChatDepartment.status && liveChatDepartment.status.toLowerCase() === 'online') {\r\n // online hours are present\r\n isAvailable = (operatingHoursToday[currentDate.getDay()][0].start <= currentMinutes && currentMinutes <= operatingHoursToday[currentDate.getDay()][0].end);\r\n } else {\r\n isAvailable = false;\r\n }\r\n */\r\n return isAvailable;\r\n}\r\n\r\n// this function will remove the top messages of the message history array\r\n// removeCount = number of messages to be removed\r\nconst removeTopBotMessage = (messages: MessageModel[], removeCount: number) => {\r\n for (let i = 0; i < removeCount; i++) {\r\n let index = messages.findIndex(a => a.from !== Speaker.User && a.type === MessageTypes.Message);\r\n messages.splice(index, 1);\r\n }\r\n\r\n return messages;\r\n}\r\n\r\nconst selectUserMessages = (messages: MessageModel[], data: any = null) => {\r\n let conversationHistory = messages.filter(\r\n a => a.from === Speaker.User || a.type === MessageTypes.Message);\r\n conversationHistory = removeTopBotMessage(conversationHistory, 2);\r\n\r\n return `LC Context\\n==============\\n` + ((data?.orderNumber) ? `Order Number : ${ data?.orderNumber }\\n==============\\n` : '') + conversationHistory\r\n .map(a => (a.from === Speaker.User) ? `User: ${ a.text }` : `Murphy: ${ a.text }`)\r\n .join(`\\n`);\r\n} \r\n\r\nconst selectLiveChatMessages = (messages: MessageModel[]) => {\r\n let conversationHistory = messages && messages.filter(a => a.type === MessageTypes.LiveChatMessage);\r\n\r\n conversationHistory && conversationHistory.splice(0, 2);\r\n\r\n return conversationHistory && conversationHistory\r\n .map(a => (a.from === Speaker.User) ? `User: ${ a.text }` : `Agent: ${ a.text }`)\r\n .join(`\\n`);\r\n} \r\n\r\nconst logEndChatReason = (chatbotUserId: any, sessionId: any, endLiveChatReason = \"\") => {\r\n const requestConfig = {\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': config.APIMGT_KEY\r\n },\r\n }\r\n\r\n const body = { \r\n msg: `LIVE CHAT END: user: ${ chatbotUserId } : session : ${sessionId} : ${endLiveChatReason}`\r\n };\r\n\r\n axios.post(`${config.CHATSERVER_URL}/api/log/trace`, body, requestConfig);\r\n}\r\n\r\nexport {\r\n initLiveChat,\r\n sendLiveChatMessage,\r\n isLiveChatAvailable,\r\n removeTopBotMessage,\r\n selectUserMessages,\r\n selectLiveChatMessages,\r\n logEndChatReason\r\n}","import React from 'react'\r\nimport { isValidEmail } from '../../util/validators';\r\n\r\ntype LiveChatUserFormWebProps = {\r\n setName: React.Dispatch>;\r\n setEmail: React.Dispatch>;\r\n setPrivacyConsent: React.Dispatch>;\r\n email: string;\r\n name: string;\r\n privacyConsent: boolean;\r\n backToWidget: (voted: boolean) => void;\r\n closeUserForm: () => void;\r\n}\r\n\r\nconst LiveChatUserFormWeb = ({setName, setEmail, setPrivacyConsent, email, name, privacyConsent, backToWidget, closeUserForm}: LiveChatUserFormWebProps) => {\r\n const cancel = (e: any) => { \r\n backToWidget(true);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \"BWS\"\r\n Live Chat\r\n
\r\n \r\n
\r\n Please tell me your name and email address below.\r\n
\r\n {/* user name */}\r\n
\r\n \r\n setName(e.target.value))} required/>\r\n
\r\n \r\n \r\n {/* email address */}\r\n
\r\n \r\n setEmail(e.target.value))} required/>\r\n
\r\n \r\n
\r\n setPrivacyConsent(!privacyConsent)}/>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default LiveChatUserFormWeb","import React, { useState } from 'react';\r\nimport { config } from '../config/config';\r\nimport LiveChatUserForm from '../widget/message/livechat/LiveChatUserForm';\r\nimport LiveChatUserFormWeb from '../widget/message/livechat/LiveChatUserFormWeb';\r\nimport './privacyForm.scss';\r\nimport axios from 'axios/index';\r\n\r\ndeclare global {\r\n interface Window { \r\n WebviewSdk: any,\r\n MessengerExtensions: any\r\n }\r\n}\r\n\r\nconst PrivacyForm = (props: any) => {\r\n const [name, setName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [privacyConsent, setPrivacyConsent] = useState(false);\r\n\r\n const closeForm = () => {\r\n if (window.WebviewSdk.hasFeature('close') || window.WebviewSdk.features.includes(\"close\")) {\r\n window.WebviewSdk.close();\r\n } else {\r\n window.MessengerExtensions.requestCloseBrowser();\r\n }\r\n }\r\n\r\n const submit = async () => {\r\n const requestConfig = {\r\n headers: { \r\n 'Content-Type': 'application/json',\r\n 'Ocp-Apim-Subscription-Key': config.APIMGT_KEY\r\n },\r\n }\r\n\r\n const body = { \r\n userId: props.userId,\r\n conversationId: props.conversationId,\r\n appId: props.appId,\r\n projectId: props.projectId,\r\n userName: name,\r\n userEmail: email\r\n };\r\n\r\n axios.post(`${config.CHATSERVER_URL}/api/livechat/form/submit`, body, requestConfig).then(_ => {\r\n closeForm();\r\n });\r\n }\r\n \r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n \r\nexport default PrivacyForm\r\n\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport Widget from './widget/Widget';\r\nimport PrivacyForm from './privacy-form/PrivacyForm';\r\nimport './App.scss';\r\nimport {\r\n Switch,\r\n Route,\r\n useLocation,\r\n} from \"react-router-dom\";\r\n\r\ndeclare global {\r\n interface Window { \r\n WebviewSdk: any,\r\n MessengerExtensions: any,\r\n globalShopperDetails: any\r\n }\r\n}\r\n\r\nconst useQuery = () => {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nconst App = () => {\r\n let query = useQuery();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n

404: Not Found

\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default App\r\n\r\n\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import * as ACTIONS from '../actions/actionTypes';\r\nconst defaultState = {\r\n isWidgetOpenFirstTime: true,\r\n liveChatUserInitialPosition: '',\r\n liveChatUserQueuePosition: '',\r\n isCustomQueueMessageTriggered: false,\r\n chipSelection: [],\r\n additionalComments: '',\r\n showAdditionalComments: false,\r\n showOrderTrackingDetail: false,\r\n shopperId : 0,\r\n widgetSessionId : \"\",\r\n orderDataExpandedTile: null,\r\n lastFollowUpEventName: '',\r\n showVocSurvey: false\r\n}\r\nconst botData = (state = defaultState, action: any) => {\r\n switch (action.type) {\r\n case ACTIONS.IS_WIDGET_OPEN_FIRST_TIME:\r\n return {\r\n ...state,\r\n isWidgetOpenFirstTime: action.isWidgetOpenFirstTime\r\n }\r\n case ACTIONS.UPDATE_LC_USER_INITIAL_POSITION:\r\n return {\r\n ...state,\r\n liveChatUserInitialPosition: action.liveChatUserInitialPosition\r\n }\r\n case ACTIONS.UPDATE_LC_USER_POSITION:\r\n return {\r\n ...state,\r\n liveChatUserQueuePosition: action.liveChatUserQueuePosition\r\n }\r\n case ACTIONS.IS_LC_MESSAGE_TRIGGERED:\r\n return {\r\n ...state,\r\n isCustomQueueMessageTriggered: action.isCustomQueueMessageTriggered\r\n }\r\n case ACTIONS.FEEDBACK_CHIP_SELECTION:\r\n return {\r\n ...state,\r\n chipSelection: action.chipSelection\r\n }\r\n case ACTIONS.FEEDBACK_ADDITIONAL_COMMENTS:\r\n return {\r\n ...state,\r\n additionalComments: action.additionalComments\r\n }\r\n case ACTIONS.SHOW_ORDERTRACKING_DETAIL:\r\n return {\r\n ...state,\r\n showOrderTrackingDetail: action.showOrderTrackingDetail\r\n }\r\n case ACTIONS.SHOPPER_ID:\r\n return {\r\n ...state,\r\n shopperId: action.shopperId\r\n }\r\n case ACTIONS.WIDGET_SESSION_ID:\r\n return {\r\n ...state,\r\n widgetSessionId: action.widgetSessionId\r\n }\r\n case ACTIONS.ORDERDATA_EXPANDED_TILE:\r\n return {\r\n ...state,\r\n orderDataExpandedTile: action.orderDataExpandedTile\r\n }\r\n case ACTIONS.LAST_FOLLOWUP_EVENT_NAME:\r\n return {\r\n ...state,\r\n lastFollowUpEventName: action.lastFollowUpEventName\r\n }\r\n case ACTIONS.SHOW_VOC_SURVEY:\r\n return {\r\n ...state,\r\n showVocSurvey: action.showVocSurvey\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default botData;","import * as ACTIONS from '../actions/actionTypes';\r\nconst defaultState = {\r\n selectedWineType: '',\r\n selectedPriceRange: '',\r\n selectedVarietal: '',\r\n currentView: 'type',\r\n selectedType: '',\r\n selectedStoreId: '',\r\n selectedStoreName: '',\r\n pdpOpened: false,\r\n lastSelectedScreen: '' ,\r\n showFAW: false,\r\n intentData: null,\r\n selectWineExpert: ''\r\n}\r\nconst fawData = (state = defaultState, action:any) => {\r\n switch (action.type) {\r\n case ACTIONS.UPDATE_WINE_TYPE:\r\n return {\r\n ...state,\r\n selectedWineType: action.selectedWineType,\r\n selectedVarietal: ''\r\n }\r\n case ACTIONS.UPDATE_PRICE_RANGE: \r\n return {\r\n ...state,\r\n selectedPriceRange: action.selectedPriceRange,\r\n }\r\n case ACTIONS.SHOW_WINE_EXPERT:\r\n return {\r\n ...state,\r\n selectWineExpert: action.selectWineExpert,\r\n }\r\n case ACTIONS.UPDATE_VARIETAL:\r\n return {\r\n ...state,\r\n selectedVarietal: action.selectedVarietal\r\n }\r\n case ACTIONS.UPDATE_CURRENT_VIEW:\r\n return {\r\n ...state,\r\n lastSelectedScreen: state.currentView,\r\n currentView: action.currentView\r\n }\r\n case ACTIONS.UPDATE_SELECTED_TYPE:\r\n return {\r\n ...state,\r\n selectedType: action.selectedType\r\n }\r\n case ACTIONS.UPDATE_STORE_DETAILS:\r\n return {\r\n ...state,\r\n selectedStoreId: action.selectedStoreId,\r\n selectedStoreName: action.selectedStoreName,\r\n intentData: action.intentData\r\n }\r\n case ACTIONS.PDP_OPENED:\r\n return {\r\n ...state,\r\n pdpOpened: action.pdpOpened\r\n }\r\n case ACTIONS.SHOW_FAW:\r\n return {\r\n ...state,\r\n showFAW: action.showFAW\r\n }\r\n case ACTIONS.RESET_SELECTION:\r\n return {\r\n ...state,\r\n selectedWineType: '',\r\n selectedPriceRange: '',\r\n selectedVarietal: '',\r\n currentView: 'type'\r\n };\r\n \r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default fawData","import * as ACTIONS from '../actions/actionTypes';\r\nconst defaultState = {\r\n isFetching: false,\r\n productArray: [],\r\n errorMsg:'',\r\n}\r\nconst productData = (state = defaultState, action: any) => {\r\n switch (action.type) {\r\n case ACTIONS.REQUEST_PRODUCTS:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n productArray: [],\r\n errorMsg:''\r\n }\r\n case ACTIONS.RECEIVED_PRODUCTS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n productArray: [...action.productsData],\r\n errorMsg:''\r\n }\r\n case ACTIONS.ERROR_RECEIVED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n productArray: [],\r\n errorMsg: action.errorMessage\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default productData","import { combineReducers } from 'redux'\r\nimport botData from './botData'\r\nimport fawData from './fawData'\r\nimport productData from './productData'\r\n\r\nexport const rootReducer = combineReducers({\r\n botData: botData,\r\n fawData: fawData,\r\n productData: productData,\r\n });\r\n \r\nexport type RootState = ReturnType","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.scss';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport {\r\n BrowserRouter as Router\r\n} from \"react-router-dom\";\r\n\r\nimport { createStore, applyMiddleware } from 'redux';\r\nimport thunkMiddleware from 'redux-thunk';\r\nimport { createLogger } from 'redux-logger';\r\nimport { Provider } from 'react-redux';\r\nimport { rootReducer } from './reducers';\r\n\r\nconst environment = process.env.NODE_ENV;\r\nconst defaultState = {};\r\nconst devMode = false;\r\n\r\nconst loggerMiddleware = createLogger({\r\n predicate: (getState, action) => (environment !== 'production' && devMode)\r\n});\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n defaultState,\r\n applyMiddleware(\r\n thunkMiddleware,\r\n loggerMiddleware\r\n )\r\n)\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}