{"version":3,"sources":["analytics/ga4/gtag.js","analytics/ga4/ga4.js","redux/localApi.js","redux/actions/addressActions.js","analytics/ga4/ga4helper.js","redux/actions/cartActions.js","redux/actions/userActions.js","views/addressVerification/SelectIsland.js","views/addressVerification/AddressSearch.js","views/addressVerification/AptSearch.js","redux/actions/campaignActions.js","redux/actions/addonsActions.js","lib/addons.js","redux/actions/productActions.js","redux/actions/stepActions.js","lib/schedule.js","redux/actions/scheduleActions.js","redux/actions/stateHandlerActions.js","views/addressVerification/CheckAddressButton.js","views/addressVerification/RedirectDialog.js","views/addressVerification/AlreadyHtCustomer.js","lib/validation.js","components/disableEnterKey.js","views/addressVerification/AddressLookup.js","views/addressVerification/StepHeader.js","redux/actions/orderActions.js","views/login/LoginDialog.js","views/login/ForgotPassword.js","views/login/CodeVerificationDialog.js","views/login/ResetPassword.js","redux/actions/authActions.js","views/login/LoginForm.js","views/addressVerification/StepHeadernew.js","views/addressVerification/AddressVerification.js","views/addressVerification/AddressLookupDigiHeader.js","views/addressVerification/AddressLookupDigi.js","views/addressVerification/AddressVerificationDigi.js","views/addressVerification/AddressLookupMini.js","views/addressVerification/AddressVerificationMini.js","resources/Strings.js","views/products/ItemImage.js","views/addons/TruncateText.js","views/addons/SingleAddon.js","views/addons/TruncatedTooltipText.js","views/addons/MultiAddon.js","views/addons/Category.js","views/addons/SetTopBoxAddon.js","views/addons/CategoryHeading.js","views/addons/CategoryWarningMsg.js","views/addons/CategoryQtyHeading.js","views/addons/BYOG.js","views/addons/Addons.js","views/products/ProductsFilter.js","views/products/ProductPrice.js","views/products/BroadbandLabelView.js","views/products/ProductView.js","views/products/ProductGroup.js","views/products/SpeedTiersView.js","lib/address.js","views/SameAsServiceAddress.js","components/IMaskInputs.js","views/WarmLeads.js","components/useForm.js","views/NewOrder/CreateUserForm.js","views/CustomerInfo.js","views/Checkout.js","views/ReviewServiceAddress.js","views/ReviewInstallationInformation.js","views/ReviewSubmit.js","views/Cart.js","views/CartMobile.js","views/ShippingInfo.js","views/InstallationPaymentOptions.js","views/ScheduleArrivalWindow.js","views/InstallationInformation.js","views/Schedule.js","views/Installation.js","views/NewOrder/Next.js","views/NewOrder/Previous.js","views/NewOrder/SubmitButton.js","views/NewOrder/TermsSubmit.js","views/NewOrder/ProductPromoDisclaimer.js","views/NewOrder/OrderWizard.js","lib/product.js","images/fiopticslogo-white@2x.png","views/Confirmation.js","views/ConfirmationInterestForm.js","views/ConfirmationError.js","views/IframeRedirector.js","views/addressVerification/ConfirmAddressSingle.js","views/addressVerification/ConfirmAddressMulti.js","views/addressVerification/ConfirmAddressNoQual.js","views/addressVerification/ServicesExistPopup.js","views/addressVerification/ConfirmAddress.js","data/digiCartData.js","views/digiCart/DigiCartProductBanner.js","views/digiCart/DigiCartProductDetails.js","views/digiCart/DigiCartProductPrice.js","views/digiCart/DigiCartProductPromo.js","views/digiCart/DigiCartProduct.js","views/digiCart/DigiCartItemPrice.js","images/check-box-checked.svg","images/check-box-unchecked.svg","views/digiCart/DigiCartMainProduct.js","images/plus-circle.svg","views/digiCart/DigiCartBundleProduct.js","views/digiCart/DigiCartBundleProductGroup.js","views/digiCart/DigiCartMainProductGroup.js","images/minus-circle.svg","views/digiCart/DigiCartProductMatrix.js","views/digiCart/DigiCartFooter.js","views/digiCart/DigiCart.js","views/SessionTimeoutModal.js","views/digiCart/DigiCartContainer.js","views/layout/Logo.js","images/ht-logo.png","views/NewOrder/StepsNav.js","views/layout/Header.js","views/layout/Footer.js","AppSession.js","views/digiCart/AutoResize.js","views/digiCart/Cookievalue.js","views/tester/PricingApiTester.js","views/Upgrade.js","App.js","redux/reducers/productReducer.js","redux/reducers/addressReducer.js","redux/reducers/cartReducer.js","redux/reducers/scheduleReducer.js","redux/reducers/userReducer.js","redux/reducers/orderReducer.js","redux/reducers/stepsReducer.js","redux/reducers/campaignReducer.js","redux/reducers/authReducer.js","redux/reducers/stateHandlerReducer.js","redux/reducers/index.js","redux/store/store.js","serviceWorker.js","index.js"],"names":["gtag","args","window","dataLayer","push","arguments","reset","isInitialized","_currentMeasurementId","_hasLoadedGA","_gtag","_loadGA","GA_MEASUREMENT_ID","nonce","document","script","createElement","async","src","setAttribute","body","appendChild","_toGtagOptions","gaOptions","gtagOptions","Object","entries","reduce","prev","key","value","console","log","initialize","debug_mode","Date","event","optionsOrName","params","custom_environment","process","set","ga4_property","ga4_value","this","localApi","axios","create","baseURL","AddressActions","setAddress","address","type","payload","resetAddress","dispatch","a","resetAddresses","setRecaptcha","captchaValue","setAddressSubmitted","submitted","searchAddress","aptSuite","islandId","getstate","LocalApi","post","response","data","doesAddressHaveServices","addressId","get","resetAddressHaveServices","send_GA4event_update_cart","cart","oldCart","calculateCartDifferenceMonthlyCharges","mode","diffCart","ga4Cart","transformDiffCartToGA4Cart","GA4","error","send_GA4event_purchase","orderId","transaction_id","send_GA4event_checkout","cartDeepCopyForGA4","copiedCart","JSON","parse","stringify","convertPrice","price","includes","parseFloat","replace","toFixed","monthlyCharges","newMonthlyChargesWithoutDescription","totalDescription","todaysTotal","newMonthlyCharges","monthlyTotal","items","map","item","itemPrice","miniCartDiscountAmount","oneTimeCharges","newOneTimeChargesWithoutDescription","total","newCart","newCartItemCount","length","oldCartItemCount","supersetCart","subsetCart","determineSupersetAndSubset","supersetItems","subsetItems","filter","supersetItem","some","subsetItem","itemLabel","currency","item_name","item_category","coupon","miniCartDiscountName","discount","CartActions","setCart","getState","oldCartCopy","cartCopy","resetCheckout","pricingApiTester","requestXml","checkout","optAssessmentFeeAccepted","undefined","optionalAssessmentFeeAccepted","selfInstallDeclined","installmentPlan","setSelfInstallDeclined","state","UserActions","ScheduleActions","setProfileEmail","email","setHasAccount","hasAccount","setProfileAccountNumber","accountNumber","setBillingInfo","customerInfo","billingInfo","firstName","lastName","aptUnit","city","zip","resetEstablishNewOrder","setEstablishNewOrder","skipInstallation","getScheduling","SelectIsland","props","handleIslandChange","FormControl","variant","sx","minWidth","InputLabel","id","Select","label","labelId","displayEmpty","defaultValue","onChange","fontSize","borderBottomColor","MenuItem","className","FormHelperText","useStyles","makeStyles","color","marginTop","uppercase","textTransform","AddressSearch","classes","useState","open","setOpen","isError","setIsError","clear","setClear","options","setOptions","setAddressSelected","loading","required","setEnteredAddress","enteredAddress","useEffect","onChangeHandle","query","active","i","title","obj","theme","createTheme","typography","body1","StylePaper","styled","Paper","StylePaperMini","fontFamily","ThemeProvider","Autocomplete","PaperComponent","freeSolo","width","onOpen","onClose","isOptionEqualToValue","option","getOptionLabel","onSelect","renderInput","TextField","placeholder","ev","target","InputProps","input","style","endAdornment","Fragment","CircularProgress","size","AptSearch","mainAddress","selectedApt","enteredApartment","setEnteredApartment","setApartments","React","aptSuiteTypeAheadLabel","fetchApartments","helperText","CampaignActions","setSession","campaignType","campaignSource","utmparams","getCampaignStarted","utm_medium","utm_source","utm_campaign","sessionId","ga4","user_id","setCampaign","campaign","setCampaignSource","clearCampaign","AddonsActions","setIsAutoSelectInit","isAutoSelectInit","getCategorys","addons","index","self","x","groupingCategory","indexOf","name","requiredQty","groupingCategoryRequiredQty","groupingCategorySelectMode","text","groupingCategoryText","isAddonGroupOpenByDefault","MYWAY_TV","getDuplicates","array","aa","lastIndexOf","isSetTopBox","addon","addonName","toUpperCase","ProductActions","getProducts","getProductsStarted","addDigiCart","resetQualCheck","qualCheck","productVersionId","setProduct","productId","sagCode","setSelectedDigiCartProduct","setSelectedDigiCartBundleIndex","submitDigiCartId","StepActions","ScreenSteps","setStep","step","saveHistory","history","skipInstallationStep","getArrivalWindowString","arrivalWindow","date","getDateAW","arrivalWindowTimeSlot","timeSlot","toLocaleDateString","weekday","year","month","day","dateAW","dateArray","split","parseInt","getAWStringByShortDate","selectedDate","formatTimeSlot","SELF_INSTALL_TYPE","parts","part","time","trim","hoursMinutes","substring","amPm","join","addBusinessDaysAndFormat","daysToAdd","weekdays","today","endDate","setDate","getDate","getDay","setWaitForScheduling","waitForScheduling","resetNextScreen","StateHandlerActions","exitIframe","top","location","href","htBtn","padding","borderRadius","whiteSpace","fontWeight","backgroundColor","boxShadow","background","CheckAddressButton","recaptchaLoaded","setRecaptchaLoaded","setCaptchaValue","errorMessage","setErrorMessage","isFormValid","setIsFormValid","useHistory","useDispatch","useSelector","addresses","selectedAddress","selectedAptOption","showRequiredMsg","showEmailRequiredMsg","isBusiness","isEmailRequired","emailValid","checkAddressButtonId","_reCaptchaRef","createRef","submitAddress","hasTooManyResults","destination","gs","user","profileInfo","hasMultiBuildings","isValid","isApartmentRequired","onSubmit","current","execute","c_action","ml","Button","onClick","disabled","display","ref","sitekey","asyncScriptOnLoad","RedirectDialog","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","checkbox","border","checkboxLabel","AlreadyHtCustomer","checkedCheckbox","setCheckedCheckbox","FormControlLabel","control","Checkbox","checked","e","icon","checkedIcon","Grid","container","spacing","columnSpacing","xs","sm","md","fullWidth","isEmailValid","test","String","toLowerCase","isNotContainSpace","isPhoneValid","phone","disableEnterKey","isTextArea","matches","keyCode","preventDefault","AddressLookup","useForm","watch","register","handleSubmit","errors","formState","submitFormInput","useRef","setIslandId","selectedAddrOption","setSelectedAddrOption","setSelectedAptOption","setRequired","aptRequired","setAptRequired","setEmailValid","validateNotEmpty","validationFuction","emailValue","click","initState","fieldName","mt","flexDirection","handleAddressChange","apt","direction","lg","onKeyDown","message","getErrorState","validate","v","h1","lineHeight","marginBottom","flexBasis","p","margin","StepHeader","Typography","gutterBottom","OrderActions","resetOrder","resetWarmLead","LoginDialog","forgotPassword","login","pwRequired","setpwRequired","salesRepId","setSalesRepId","password","setPassword","auth","Alert","severity","disableShrink","Link","component","underline","ForgotPassword","handleBackToLogin","verifyCode","CodeVerificationDialog","resendCode","handleResetPassword","code","setCode","ResetPassword","resetPassword","conPassword","setConPassword","setError","HtmlTooltip","Tooltip","popper","tooltipClasses","tooltip","maxWidth","pxToRem","placement","AuthActions","isAuthRequired","authIsRequired","authenticateUser","loginFormMode","checkForgotPassword","put","checkVerifyCode","updatePassword","newPassword","changeFormMode","formMode","LoginForm","verificationCode","setVerificationCode","salesRepName","setSalesRepName","StepHeadernew","textDecoration","AddressVerification","match","onpopstate","onload","loggedInSalesRepId","AddressLookupDigiHeader","view","pl","pt","pb","AddressLookupDigi","columns","AddressVerificationDigi","routePath","pathname","route","cs","AddressLookupMini","emailRequired","setEmailRequired","Box","flexGrow","class","isEmailNotEmpty","validateEmailNotEmpty","AddressVerificationMini","strings","staticVerbiage","image","height","ItemImage","isAddon","mdMaxHeight","maxHeight","alt","productName","imageUrl","truncatedtext","WebkitBoxOrient","overflow","textOverflow","WebkitLineClamp","cursor","TruncateText","truncatedText","setTruncatedText","textRef","content","innerHTML","scrollWidth","slice","truncate","arrow","card","cardSelected","cardDisabled","addBtn","textAlign","addBtnDisabled","addBtnSelected","addBtnSelect","addQtyDisabled","description","terms","section1","section2","section3","addonQty","verticalAlign","marginRight","recommendedLabel","position","left","SingleAddon","handleToggle","selected","isGatewayCategory","maxQty","minQty","setAddonQty","qty","xl","addonDescription","paddingTop","priceLabel","priceSuffix","priceSuffix2","paddingLeft","limit","handleChangeRemove","IconButton","Card","clsx","CardContent","paddingBottom","TruncatedTextContainer","lineLimit","TruncatedTooltipText","charLimit","truncateText","titleRow","minHeight","descRow","section4","section5","MultiAddon","isSm","useMediaQuery","breakpoints","down","isLgUp","up","handleChangeNotSelected","stbNumber","multiCard","Category","selectedIdsCheck","incompatibleAddonIds","byogState","byogIdsArray","isEquipmentStep","getDisableAddonValue","addonId","hidden","autoSelect","formControl","stbCard","orange","white","CategoryHeading","category","addonTitle","CategoryWarningMsg","fun","handleChangeOpenClose","getElementById","scrollIntoView","behavior","block","radio","BYOG","handleChange","disable","gatewayFree","FormLabel","RadioGroup","Radio","Addons","categoryWarning","setHomePhoneAddonSelected","products","selectedProduct","mainProducts","selectedProductId","selectedAddonIds","addonLoading","selectedAddons","setSelectedAddons","wirelessGatewaySelected","byogValue","showWirelessGatewayForm","setSelectedAddonsRedux","setIncompatibleAddonIds","idsToUncheck","setIdsToUncheck","setByogValue","byogIds","setByogIds","byogDisable","addOnCategories","expanded","setExpanded","handleChangeOpenCloseWarning","panel","isExpanded","acc","condition","isEquipment","hasRequiredAddons","isRequiredAddonSelected","onAddonChange","nonEquipmentAddons","byogRestricted","requiredAddonVersionIds","requiredAddonSelected","forEach","requiredAddonVersionId","selectedAddon","isAddonIncompatibleWithAnotherSelectedAddon","incompatibleAddonId","addonBeingUnchecked","incompatibleAddons","uncheckIncompatibleAddons","preserveDuplicates","duplicates","result","currentSelectedAddon","unSelectedRadioAddons","currentAddonCaregory","currentCaregoryAddons","unSelected","alreadySelected","results","checkIncompatibleAddons","subAddonIdsToUncheck","setHomePhoneAddonSelectedByIds","stbQty","addonsObj","ids","wirelessGateway","setAddons","selectedAddonIdValues","isHomePhoneAddonSelected","onBYOGChange","Number","categoriesCard","hasPremierValueBundle","categoryToLinkWithBOYG","categories","c","addonsResult","ad","hideCategory","r","Accordion","AccordionSummary","expandIcon","flexShrink","AccordionDetails","sa","Stack","Skeleton","animation","Backdrop","zIndex","drawer","thickness","h5","link","wrapper","formGroup","justifyContent","lastLabel","price2","price3","priceDollarSign","priceDollar","priceCents","right","marginLeft","ProductPrice","product","BroadbandLabelView","labelUrl","labelHTML","SetLabelHTML","labelHTMLError","SetLabelHTMLError","defaultErrorMsg","encodedLabelUrl","encodeURIComponent","html","getProductLabel","srcDoc","cardContent","gridContainer","selectBtn","promoTitle","fontStyle","promoDescription","termsToolTip","termsTitle","ProductView","innerWidth","setWidth","bbL_FullURL","bbL_URL","handleResize","addEventListener","removeEventListener","alignItems","productDescription","promoDetails","termsAndConditions","mx","ProductGroup","setHomePhoneSelected","isPhone","outlinedSelect","CustomTab","Tab","paddingRight","CustomTabs","Tabs","CenteredTabsWrapper","SpeedTiersView","selectedTab","setSelectedTab","SelectDisplayProps","speedTierName","newValue","getDisplayAddress","houseNumber","streetName","SameAsServiceAddress","readOnly","zipCode","PhoneMaskInput","forwardRef","other","unmask","placeholderChar","mask","inputRef","mainWrapper","hr","checkBoxTitle","pos","warmLeadsFormFormHeader","why","blueText","btn","WarmLeads","warmLead","order","tvChecked","isCurrentCustomer","setIsCurrentCustomer","hsiChecked","fiberChecked","setValue","useImperativeHandle","valideteForm","bestTimeToCall","getErrorMsg","keys","k","trimfield","warmLeadInfo","createWarmLead","render","field","inputComponent","rules","Form","children","autoComplete","IconWithTooltip","root","CreateUserForm","submited","setSubmited","orderResponse","internalOrderId","createUserMsg","createUserHasError","fieldValues","values","temp","username","confirmPassword","localeCompare","setErrors","every","initialFValues","validateOnChange","setValues","handleInputChange","resetForm","createUserRequest","Divider","InputLabelProps","pointerEvents","letterSpacing","customerFormHeader","CustomerInfo","setProfileInfoStarted","profileInfoError","isScheduleLoading","schedule","secretQuestions","getValues","useServiceAddressChecked","isSubmitted","setIsSubmitted","formData","setFormData","setProfileInfoError","formData1","formdata","sharedSecretQuestionText","sq","secrectQ","questionId","sharedSecretQuestionId","questionText","pi","passwordPIN","sharedSecretAnswer","lastFourSsn","employerName","employerPhone","myAccountUsername","myAccountPassword","setProfileInfo","onInvalid","handleValidationFail","m","minLength","maxLength","pattern","requiredOneLeterNumber","gridRow","nameSection","nameSectionElements","rootSection","ReviewServiceAddress","userInfo","serviceAddress","getStreetAddress","steps","getApt","toString","dividerSection","nameSectionProfessional","FalloutInstallInfo","ReviewInstallationInformation","scheduleInfo","isSelfInstall","specialInstructions","contactName","preferredContactPhone","preferredContactTextMsg","preferredContactEmail","ecomComputedActivationDate","editLabel","infoWrapper","ReviewSubmit","onChangeAccount","establishNewOrderInfo","forceFallout","checkoutCart","cartError","htmlReceiptList","template","__html","dangerouslySetInnerHTML","productItem","productSubItem","productItemPrice","h6","totalDescriptionRight","devider","todayTotal","Cart","setIsCartError","setGatewayFree","hideOneTimeFees","freeGateway","table","numeral","format","CartMobile","subTitle","ShippingInfo","shippingInfo","useServiceAddress","setUseServiceAddress","getShippingDefaultValue","shippingAddress","validatePOBoxes","contactMeCheckBox","InstallationPaymentOptions","hideInstallment","overflowY","float","ScheduleArrivalWindow","handleClick","list","selectedIndex","contactMeCheck","showErrorMsg","hideContactMeToSchedule","setSelectedArrivalWindow","earlyDate","setEarlyDate","pickerDay","setPickerDay","showContactMeToSchedule","scheduleWrapper","toISOString","List","ListItem","button","innerText","dense","divider","ListItemText","primary","errorMsg","mtSpace","cmBottomText","InstallationInformation","preferredContactMethod","inputValues","setInputValues","cmTextMsgDisabled","setCmTextMsgDisabled","cmEmailDisabled","setCmEmailDisabled","contactPhone","validateNotDisabled","onContactMethodChange","clearName","cmArray","cm","getFormValues","FormGroup","contactMethodText","multiline","rows","smallText","contactMethod","thanks","redSmall","Schedule","arrivalWindowList","availableAppointments","billMeValueRadio","setBillMeValueRadio","setSelectedIndex","selectedArrivalWindow","selectedIndexArrival","contactMeToSchedule","preferToSchedule","setShowErrorMsg","installationInfoRef","cartHasTivoItems","isTiVoSelected","selfInstallType","info","installType","setSchedule","bullet","transform","subTitle1","allYouNeed","allYouNeedBold","textWifi","Installation","shippingInfoRef","scheduleRef","valueInstallRadio","setValueInstallRadio","handleInstallChange","getInstallationType","pageTitle","TagManager","pagePath","installationFormValues","Next","onNext","Previous","onPrevious","btnDisabled","btnEnabled","SubmitButton","TermsSubmit","accept","setAccept","acceptExistService","setAcceptExistService","ProductPromoDisclaimer","showProductPromoDisclaimer","groupTitle","borderBottom","flexContainer","borderColor","indicator","tabRoot","bottom","tabSelected","OrderWizard","uhistory","cartMonthlyChargesTotal","campaignerror","status","campaignAuthError","authErrorCampaignName","hasCampaignError","speedTierTypeIsFiber","isAddressFiberQualified","setFeaturedProducts","nonFeaturedProducts","setNonFeaturedProducts","showWarmLeadsForm","campaignPromoText","productsLoading","updateCart","nextScreen","currentStep","establishNewOrderComplete","setState","productsFilter","setFilteredProducts","setCategoryWarning","installScreen","setInstallScreen","testMode","homePhoneSelected","homePhoneAddonSelected","setLoading","isCartError","orderSubmitLoading","setOrderSubmitLoading","customerInfoRef","installationRef","startStep","digiCartSubmittedId","digiCartProcesed","destinationStep","setCurrentStep","campaignId","qualLevel","maxHsi","island","itm","sortOrder","getFeaturedProducts","getNonFeaturedProducts","productFilter","isHsi","isTV","getMainProductGroup","goToNextStep","resetCampaign","restartCampaign","orderError","poduct","productDisplayName","prodName","addonsDisplayNameList","convertCommaDelimitedString","orderTotalMrc","orderCurrency","offset","navigateStep","prodNameList","addOnName","element","newStep","skipCategoryWarningForRequiredAddonUnchecked","categoryAddons","skipCategoryWarning","categoryAddon","hasRequiredAddonChecked","selectedAddonId","next","len","overlap","hasSag","pr","goToPrevStep","ineligibleAddressErrorMessage","action","alignSelf","AlertTitle","LinearProgress","completeOrder","account","userName","sourceId","mduId","orderWithResponsData","placeOrder","iconsWrapper","listStyleType","Confirmation","customThankYouURL","scrollTo","ConfirmationInterestForm","ConfirmationError","getStateData","ConfirmAddressSingle","onConfirm","onStartOver","labelRadio","secondaryHtBtn","ConfirmAddressMulti","addressesObj","selectedAddressId","setSelectedAddressId","ConfirmAddressNoQual","dialogPaper","iconSize","muiDialogTitleSection","muiDialogTitle","muiDialogText","components","MuiButton","styleOverrides","ServicesExistPopup","onIsNewCustomer","onCheckAnotherAddress","selectedAddressTitle","handleCheckAnotherAddress","paper","_event","reason","rowSpacing","alignContent","ConfirmAddress","loadingSession","qualCheckResult","servicesExist","ecomCampaignType","ecomCampaignName","campaignName","aaisAdressId","Id","iisEcomSessionId","redirectToStepOne","hasService","hasError","redirectToProducts","getCampaignType","mduSiteId","sagCustomExt","sag","getMainProduct","mainProductVerionId","find","mainProductId","getSelectProductVersionId","offers","defaultProductVersionId","productVersions","mainProduct","productHsiTitle","productHsiSpeedValue","productSpeedUnitLabel","uploadDownloadLabel","promoline1","promoline2","promoline3","bundleInfo","DigiCartProductBanner","box","productTitle","DigiCartProductDetails","priceIntoLabel","priceCent","DigiCartProductPrice","mainProductPrice","bundleAddonPrice","DigiCartProductPromo","digiCartProductBox","buttonBox","termsLink","DigiCartProduct","selectedMainVersionProductId","selectedBundleIndex","DigiCartData","_circle","_path","priceValue","DigiCartItemPrice","priceSuffix1","_extends","assign","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgCheckBoxChecked","_ref","svgRef","titleId","viewBox","xmlns","cx","cy","fill","d","ForwardRef","SvgCheckBoxUnchecked","stroke","checkBoxSection","descriptionSection","selectedItemBox","unselectedItemBox","DigiCartMainProduct","onSelectMainProduct","showTerms","_path2","DigiCartBundleProduct","DigiCartBundleProductGroup","onSelectedBundleIndex","groupName","productCnt","DigiCartMainProductGroup","selectedOfferProducts","SvgPlusCircle","strokeWidth","SvgMinusCircle","accordionSummaryTitle","AccordionDetailsTitle","AccordionDetailsSubTitle","matrixFooter","disableGutters","elevation","square","palette","MuiAccordionDetails","borderLeft","borderRight","DigiCartProductMatrix","isQualForTv","newExpanded","DigiCartFooter","getFullYear","DigiCart","digiCartOffer","digiCartOfferId","digiCartSelectedMainVersionProductId","digiCartselectedBundleIndex","offer","getSagCode","findIndex","mainVersionProductId","selectProductVersionId","bgcolor","SessionTimeoutModal","getProducts400","getAddons400","cart400","scheduling400","user400","checkout400","showModal","Modal","disableEnforceFocus","mb","DigiCartContainer","Logo","campaignTypeStore","StepsNav","currentTarget","getAttribute","screen","Header","Footer","AppSession","onIdle","timeout","AutoResize","docHeight","enabled","ResizeIFrame","parent","getDocHeight","D","offsetHeight","Math","max","iframes","getElementsByTagName","maxFrameHeight","maxFrameKey","frameCounter","iframeOffsetHeight","parentElement","domain","setInterval","UtmParams","Cookievalue","cookie","urlParams","URLSearchParams","search","setUtmParams","PricingApiTester","pricingApiRequestXml","setPricingApiRequestXml","pricingApiResponseXml","setPricingApiResponseXml","counter","setCounter","pricingApiTesterResponse","Upgrade","fetchData","tagManagerArgs","gtmId","App","basename","path","IframeRedirector","from","to","Component","connect","productReducer","productPayload","isAutoSelectEquipmentInit","addressReducer","cartReducer","nextInstallScreen","scheduleReducer","userReducer","installationType","orderReducer","stepReducer","stateHandler","appReducer","combineReducers","maskedEmail","stepsReducer","rootReducer","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","presistedState","serializedState","localStorage","getItem","loadFromLocalStorage","store","createStore","reducers","applyMiddleware","thunk","subscribe","setItem","saveToLocalStorage","Boolean","hostname","ReactDOM","StyledEngineProvider","injectFirst","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.793ec5ec.chunk.js","sourcesContent":["const gtag = (...args) => {\r\n if (typeof window !== \"undefined\") {\r\n if (typeof window.gtag === \"undefined\") {\r\n window.dataLayer = window.dataLayer || [];\r\n window.gtag = function gtag() {\r\n window.dataLayer.push(arguments);\r\n };\r\n }\r\n\r\n window.gtag(...args);\r\n }\r\n};\r\n\r\nexport default gtag;\r\n","import gtag from \"./gtag\";\r\nimport format from \"./format\";\r\n\r\n/*\r\nLink\r\nhttps://developers.google.com/tag-platform/gtagjs/reference\r\n*/\r\n\r\nexport class GA4 {\r\n constructor() {\r\n this.reset();\r\n }\r\n\r\n reset = () => {\r\n this.isInitialized = false;\r\n this._currentMeasurementId = null;\r\n this._hasLoadedGA = false;\r\n };\r\n\r\n _gtag = (...args) => {\r\n gtag(...args);\r\n };\r\n\r\n _loadGA = (GA_MEASUREMENT_ID, nonce) => {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (!this._hasLoadedGA) {\r\n // Global Site Tag (gtag.js) - Google Analytics\r\n const script = document.createElement(\"script\");\r\n script.async = true;\r\n script.src = `https://www.googletagmanager.com/gtag/js?id=${GA_MEASUREMENT_ID}`;\r\n //the nonce attribute is way to tell browsers the inline contents of a particular script or style element weren�t injected into the\r\n //document by some (malicious) third party, but were instead put in the document intentionally by whoever controls the server the document is served from.\r\n if (nonce) {\r\n script.setAttribute(\"nonce\", nonce);\r\n }\r\n document.body.appendChild(script);\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n window.gtag = function gtag() {\r\n window.dataLayer.push(arguments);\r\n };\r\n\r\n this._hasLoadedGA = true;\r\n }\r\n };\r\n\r\n _toGtagOptions = (gaOptions) => {\r\n if (!gaOptions) {\r\n return;\r\n }\r\n\r\n const gtagOptions = Object.entries(gaOptions).reduce(\r\n (prev, [key, value]) => {\r\n prev[key] = value;\r\n return prev;\r\n },\r\n {}\r\n );\r\n console.log(\"_toGtagOptions G4\", gtagOptions);\r\n return gtagOptions;\r\n };\r\n\r\n /**\r\n * Initializes GA4 for the given measurement ID and user ID.\r\n * @param {string} GA_MEASUREMENT_ID - The GA4 measurement ID.\r\n * @param {boolean} debug_mode - Whether to enable debug mode.\r\n */\r\n initialize = (GA_MEASUREMENT_ID, debug_mode) => {\r\n this._currentMeasurementId = GA_MEASUREMENT_ID;\r\n const nonce = {};\r\n\r\n this._loadGA(this._currentMeasurementId, nonce);\r\n\r\n // Check if gtag('config') has already been called\r\n if (!this.isInitialized) {\r\n this._gtag(\"js\", new Date());\r\n\r\n // Call gtag('config') only once\r\n this._gtag(\"config\", GA_MEASUREMENT_ID, {\r\n debug_mode: debug_mode,\r\n });\r\n this.isInitialized = true;\r\n console.log(\"initialize GA4\");\r\n }\r\n };\r\n\r\n /**\r\n * Sends an event to GA4.\r\n * @param {string} optionsOrName - The event name.\r\n * @param {Object} [params] - The event parameters.\r\n */\r\n event = (optionsOrName, params) => {\r\n this._gtag(\"event\", optionsOrName, {\r\n ...this._toGtagOptions(params),\r\n custom_environment: process.env.REACT_APP_GA_ENV,\r\n });\r\n };\r\n set = (ga4_property, ga4_value) => {\r\n this._gtag(\"set\", ga4_property, ga4_value);\r\n console.log(\"set global properties GA4\");\r\n };\r\n}\r\n\r\nexport default new GA4();\r\n","import axios from \"axios\";\r\n\r\nconst localApi = axios.create({ baseURL: process.env.PUBLIC_URL || \"/\" });\r\n\r\nexport default localApi;\r\n","import LocalApi from \"../localApi\";\r\n\r\nexport const AddressActions = {\r\n GET_ADDRESS_STARTED: \"GET_ADDRESS_STARTED\",\r\n SET_ADDRESS_SUCCESS: \"SET_ADDRESS_SUCCESS\",\r\n SET_ADDRESS_FAILURE: \"SET_ADDRESS_FAILURE\",\r\n SEARCH_ADDRESS_SUCCESS: \"SEARCH_ADDRESS_SUCCESS\",\r\n SEARCH_ADDRESS_FAILURE: \"SEARCH_ADDRESS_FAILURE\",\r\n RESET_ADDRESS: \"RESET_ADDRESS\",\r\n RESET_ADDRESSES: \"RESET_ADDRESSES\",\r\n SET_ADDRESS_SUBMITTED: \"SET_ADDRESS_SUBMITTED\",\r\n SET_RECAPTCHA: \"SET_RECAPTCHA\",\r\n RESET_RECAPTCHA: \"RESET_RECAPTCHA\",\r\n DOES_ADDRESS_HAVE_SERVICES_SUCCESS: \"DOES_ADDRESS_HAVE_SERVICES_SUCCESS\",\r\n DOES_ADDRESS_HAVE_SERVICES_FAILURE: \"DOES_ADDRESS_HAVE_SERVICES_FAILURE\",\r\n DOES_ADDRESS_HAVE_SERVICES_RESET: \"DOES_ADDRESS_HAVE_SERVICES_RESET\",\r\n};\r\n\r\nexport const setAddress = (address) => {\r\n return {\r\n type: \"SET_ADDRESS_SUCCESS\",\r\n payload: address,\r\n };\r\n};\r\n\r\nexport const resetAddress = () => async (dispatch) => {\r\n await dispatch({\r\n type: AddressActions.RESET_ADDRESS,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const resetAddresses = () => async (dispatch) => {\r\n await dispatch({\r\n type: AddressActions.RESET_ADDRESSES,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const setRecaptcha = (captchaValue) => {\r\n return {\r\n type: \"SET_RECAPTCHA\",\r\n payload: captchaValue,\r\n };\r\n};\r\n\r\nexport const resetRecaptcha = () => async (dispatch) => {\r\n await dispatch({\r\n type: AddressActions.RESET_RECAPTCHA,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const setAddressSubmitted = (submitted) => async (dispatch) => {\r\n await dispatch({\r\n type: AddressActions.SET_ADDRESS_SUBMITTED,\r\n payload: submitted,\r\n });\r\n};\r\n\r\nexport const searchAddress =\r\n (address, aptSuite, islandId) => async (dispatch, getstate) => {\r\n try {\r\n const response = await LocalApi.post(`/api/Address/searchAddress`, {\r\n address,\r\n aptSuite,\r\n islandId,\r\n });\r\n dispatch({\r\n type: AddressActions.SEARCH_ADDRESS_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AddressActions.SEARCH_ADDRESS_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n };\r\n\r\nexport const getAddress = () => async (dispatch, getstate) => {\r\n try {\r\n const response = await LocalApi.get(`/api/Address/sessionAddress`);\r\n dispatch({\r\n type: AddressActions.SET_ADDRESS_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n if (error.response && error.response.data) {\r\n dispatch({\r\n type: AddressActions.SEARCH_ADDRESS_FAILURE,\r\n payload: error.response.data,\r\n });\r\n } else {\r\n dispatch({\r\n type: AddressActions.SEARCH_ADDRESS_FAILURE,\r\n payload: \"Unknown error - SEARCH_ADDRESS_FAILURE\",\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const doesAddressHaveServices =\r\n (addressId) => async (dispatch, getstate) => {\r\n dispatch({\r\n type: AddressActions.DOES_ADDRESS_HAVE_SERVICES_RESET,\r\n });\r\n try {\r\n const response = await LocalApi.get(\r\n `/api/Address/doesAddressHaveServices/${addressId}`\r\n );\r\n dispatch({\r\n type: AddressActions.DOES_ADDRESS_HAVE_SERVICES_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AddressActions.DOES_ADDRESS_HAVE_SERVICES_FAILURE,\r\n });\r\n }\r\n };\r\n\r\nexport const resetAddressHaveServices = () => async (dispatch, getstate) => {\r\n dispatch({\r\n type: AddressActions.DOES_ADDRESS_HAVE_SERVICES_RESET,\r\n });\r\n};\r\n","import GA4 from \"./ga4\";\r\n\r\nexport const send_GA4event_update_cart = (cart, oldCart) => {\r\n try {\r\n console.log(\"send_GA4event_add_to_cart cart\", cart);\r\n console.log(\"send_GA4event_add_to_cart oldcart value\", oldCart);\r\n\r\n const { mode, diffCart } = calculateCartDifferenceMonthlyCharges(\r\n cart,\r\n oldCart\r\n );\r\n //\r\n if (mode && diffCart) {\r\n // get GA4Cart payload\r\n console.log(\"GA4 event add_to_cart diffCart\", diffCart);\r\n const ga4Cart = transformDiffCartToGA4Cart(diffCart);\r\n if (mode == \"add\" && ga4Cart) {\r\n GA4.event(\"add_to_cart\", ga4Cart);\r\n console.log(\"GA4 event add_to_cart\", ga4Cart);\r\n } else if (mode == \"remove\" && ga4Cart) {\r\n GA4.event(\"remove_from_cart\", ga4Cart);\r\n console.log(\"GA4 event remove_to_cart\", ga4Cart);\r\n }\r\n }\r\n } catch (error) {\r\n console.log(\"send_GA4event_update_cart had an exception \");\r\n }\r\n};\r\n\r\nexport const send_GA4event_purchase = (cart, orderId) => {\r\n try {\r\n console.log(\"send_GA4event_purchase cart\", cart);\r\n console.log(\"send_GA4event_purchase orderId\", orderId);\r\n\r\n //\r\n if (cart) {\r\n // get GA4Cart payload\r\n\r\n const ga4Cart = transformDiffCartToGA4Cart(cart);\r\n ga4Cart.transaction_id = orderId;\r\n GA4.event(\"purchase\", ga4Cart);\r\n console.log(\"GA4 event send_GA4event_purchase\", ga4Cart);\r\n }\r\n } catch (error) {\r\n console.log(\"send_GA4event_purchase had an exception \");\r\n }\r\n};\r\n\r\nexport const send_GA4event_checkout = (cart) => {\r\n try {\r\n console.log(\"send_GA4event_checkout cart\", cart);\r\n\r\n //\r\n if (cart) {\r\n // get GA4Cart payload\r\n\r\n const ga4Cart = transformDiffCartToGA4Cart(cart);\r\n\r\n GA4.event(\"begin_checkout\", ga4Cart);\r\n console.log(\"GA4 event send_GA4event_checkout ga4Cart\", ga4Cart);\r\n }\r\n } catch (error) {\r\n console.log(\"send_GA4event_purchase had an exception \");\r\n }\r\n};\r\n\r\nexport const cartDeepCopyForGA4 = (cart) => {\r\n try {\r\n // Make a deep copy of the cart to avoid modifying the original object\r\n if (!cart) {\r\n return null;\r\n }\r\n const copiedCart = JSON.parse(JSON.stringify(cart));\r\n\r\n // Helper function to convert price string to number\r\n const convertPrice = (price) => {\r\n if (!price) return null; // return null for empty or null values\r\n // Check if the price is in the format of negative \"($5.00)\"\r\n if (price.includes(\"(\")) {\r\n return parseFloat(price.replace(/[($,)]/g, \"\")).toFixed(2);\r\n }\r\n // Otherwise, convert it as a positive number\r\n return parseFloat(price.replace(/[$,]/g, \"\")).toFixed(2);\r\n };\r\n\r\n // Creating a new object with converted values for monthly charges, excluding totalDescription and todaysTotal\r\n const {\r\n totalDescription: _,\r\n todaysTotal: __,\r\n ...newMonthlyChargesWithoutDescription\r\n } = copiedCart.monthlyCharges;\r\n\r\n const newMonthlyCharges = {\r\n ...newMonthlyChargesWithoutDescription,\r\n monthlyTotal: convertPrice(copiedCart.monthlyCharges.monthlyTotal),\r\n items: copiedCart.monthlyCharges.items.map((item) => ({\r\n ...item,\r\n itemPrice: convertPrice(item.itemPrice),\r\n miniCartDiscountAmount: convertPrice(item.miniCartDiscountAmount),\r\n })),\r\n };\r\n\r\n // Creating a new object with converted values for one-time charges, excluding totalDescription\r\n const { totalDescription: ___, ...newOneTimeChargesWithoutDescription } =\r\n copiedCart.oneTimeCharges;\r\n\r\n const newOneTimeCharges = {\r\n ...newOneTimeChargesWithoutDescription,\r\n total: convertPrice(copiedCart.oneTimeCharges.total),\r\n items: copiedCart.oneTimeCharges.items.map((item) => ({\r\n ...item,\r\n itemPrice: convertPrice(item.itemPrice),\r\n miniCartDiscountAmount: convertPrice(item.miniCartDiscountAmount),\r\n })),\r\n };\r\n\r\n // Returning a new object containing only the necessary parts, without totalDescription or todaysTotal\r\n return {\r\n monthlyCharges: newMonthlyCharges,\r\n oneTimeCharges: newOneTimeCharges,\r\n };\r\n } catch (error) {\r\n console.log(\"cartDeepCopyForGA4 had an exception \");\r\n return null;\r\n }\r\n};\r\n\r\nconst calculateCartDifferenceMonthlyCharges = (newCart, oldCart) => {\r\n // Check if either newCart or oldCart is null\r\n if (!newCart && oldCart) {\r\n return {\r\n mode: \"remove\",\r\n diffCart: { monthlyCharges: oldCart.monthlyCharges },\r\n }; // If newCart is null, return oldCart's monthlyCharges and mode 'remove'\r\n }\r\n if (newCart && !oldCart) {\r\n return {\r\n mode: \"add\",\r\n diffCart: { monthlyCharges: newCart.monthlyCharges },\r\n }; // If oldCart is null, return newCart's monthlyCharges and mode 'add'\r\n }\r\n if (!newCart && !oldCart) {\r\n return { mode: null, diffCart: null }; // If both are null, there's no diffCart\r\n }\r\n console.log(\"GA4 calculateCartDifferenceMonthlyCharges - newCart \", newCart);\r\n console.log(\"GA4 calculateCartDifferenceMonthlyCharges - oldCart \", oldCart);\r\n // Helper function to determine the superset and subset\r\n const determineSupersetAndSubset = (newCart, oldCart) => {\r\n const newCartItemCount = newCart.monthlyCharges.items.length;\r\n const oldCartItemCount = oldCart.monthlyCharges.items.length;\r\n\r\n if (newCartItemCount === oldCartItemCount) {\r\n return { supersetCart: null, subsetCart: null, mode: null }; // If item counts are equal, no difference and mode is null\r\n }\r\n\r\n return newCartItemCount > oldCartItemCount\r\n ? { supersetCart: newCart, subsetCart: oldCart, mode: \"add\" }\r\n : { supersetCart: oldCart, subsetCart: newCart, mode: \"remove\" };\r\n };\r\n\r\n // Determine which cart is the superset and subset\r\n const { supersetCart, subsetCart, mode } = determineSupersetAndSubset(\r\n newCart,\r\n oldCart\r\n );\r\n console.log(\r\n \"GA4 calculateCartDifferenceMonthlyCharges - supersetCart \",\r\n supersetCart\r\n );\r\n console.log(\r\n \"GA4 calculateCartDifferenceMonthlyCharges - subsetCart \",\r\n subsetCart\r\n );\r\n // If both carts have equal items, return null for diffCart\r\n if (!supersetCart || !subsetCart) {\r\n return { mode: null, diffCart: null };\r\n }\r\n\r\n // Helper function to get items that are only in the superset\r\n const getItemsOnlyInSuperset = (supersetItems, subsetItems) => {\r\n return supersetItems.filter(\r\n (supersetItem) =>\r\n !subsetItems.some(\r\n (subsetItem) => subsetItem.itemLabel === supersetItem.itemLabel\r\n )\r\n );\r\n };\r\n\r\n console.log(\r\n \"GA4 calculateCartDifferenceMonthlyCharges - supersetCart.monthlyTotal \",\r\n supersetCart.monthlyTotal\r\n );\r\n console.log(\r\n \"GA4 calculateCartDifferenceMonthlyCharges - subsetCart.monthlyTotal \",\r\n subsetCart.monthlyTotal\r\n );\r\n // Build the diffCart object for only monthlyCharges\r\n const diffCart = {\r\n monthlyCharges: {\r\n ...supersetCart.monthlyCharges,\r\n monthlyTotal: (\r\n supersetCart.monthlyCharges.monthlyTotal -\r\n subsetCart.monthlyCharges.monthlyTotal\r\n ).toFixed(2), // Calculate monthlyTotal difference\r\n items: getItemsOnlyInSuperset(\r\n supersetCart.monthlyCharges.items,\r\n subsetCart.monthlyCharges.items\r\n ), // Filter items only in superset\r\n },\r\n };\r\n\r\n // Return an object with mode and diffCart\r\n return {\r\n mode,\r\n diffCart,\r\n };\r\n};\r\n\r\n// this one not used but has differences for both sections\r\nconst calculateCartDifference = (newCart, oldCart) => {\r\n // Check if either newCart or oldCart is null\r\n if (!newCart && oldCart) {\r\n return { mode: \"remove\", diffCart: oldCart }; // If newCart is null, return oldCart as diffCart and mode 'remove'\r\n }\r\n if (newCart && !oldCart) {\r\n return { mode: \"add\", diffCart: newCart }; // If oldCart is null, return newCart as diffCart and mode 'add'\r\n }\r\n if (!newCart && !oldCart) {\r\n return { mode: null, diffCart: null }; // If both are null, there's no diffCart\r\n }\r\n\r\n // Helper function to determine the superset and subset\r\n const determineSupersetAndSubset = (newCart, oldCart) => {\r\n const newCartItemCount =\r\n newCart.monthlyCharges.items.length + newCart.oneTimeCharges.items.length;\r\n const oldCartItemCount =\r\n oldCart.monthlyCharges.items.length + oldCart.oneTimeCharges.items.length;\r\n\r\n if (newCartItemCount === oldCartItemCount) {\r\n return { supersetCart: null, subsetCart: null, mode: null }; // If item counts are equal, no difference and mode is null\r\n }\r\n\r\n return newCartItemCount > oldCartItemCount\r\n ? { supersetCart: newCart, subsetCart: oldCart, mode: \"add\" }\r\n : { supersetCart: oldCart, subsetCart: newCart, mode: \"remove\" };\r\n };\r\n\r\n // Determine which cart is the superset and subset\r\n const { supersetCart, subsetCart, mode } = determineSupersetAndSubset(\r\n newCart,\r\n oldCart\r\n );\r\n\r\n // If both carts have equal items, return null for diffCart\r\n if (!supersetCart || !subsetCart) {\r\n return { mode: null, diffCart: null };\r\n }\r\n\r\n // Helper function to get items that are only in the superset\r\n const getItemsOnlyInSuperset = (supersetItems, subsetItems) => {\r\n return supersetItems.filter(\r\n (supersetItem) =>\r\n !subsetItems.some(\r\n (subsetItem) => subsetItem.itemLabel === supersetItem.itemLabel\r\n )\r\n );\r\n };\r\n\r\n // Build the diffCart object\r\n const diffCart = {\r\n monthlyCharges: {\r\n ...supersetCart.monthlyCharges,\r\n monthlyTotal: supersetCart.monthlyTotal - subsetCart.monthlyTotal, // Calculate monthlyTotal difference\r\n items: getItemsOnlyInSuperset(\r\n supersetCart.monthlyCharges.items,\r\n subsetCart.monthlyCharges.items\r\n ), // Filter items only in superset\r\n },\r\n oneTimeCharges: {\r\n ...supersetCart.oneTimeCharges,\r\n total:\r\n supersetCart.oneTimeCharges.total - subsetCart.oneTimeCharges.total, // Calculate total difference\r\n items: getItemsOnlyInSuperset(\r\n supersetCart.oneTimeCharges.items,\r\n subsetCart.oneTimeCharges.items\r\n ), // Filter items only in superset\r\n },\r\n };\r\n\r\n // Return an object with mode and diffCart\r\n return {\r\n mode,\r\n diffCart,\r\n };\r\n};\r\n\r\nconst transformDiffCartToGA4Cart = (diffCart) => {\r\n if (!diffCart || !diffCart.monthlyCharges) {\r\n return null; // Handle case where diffCart is null or doesn't have monthlyCharges\r\n }\r\n // - create addToCart payLoad\r\n // - set currency to USD\r\n // - calc value -- value is equal to the dollar amount for the total of addToCart items\r\n // - create item payload from cart\r\n // - item rules ( same for monthly cart and one time charge)\r\n // - set item_name = itemLabel\r\n // - set product id not possible, we need to update cart structure to support id\r\n // - set price - price = itemPrice - miniCartDiscountAmount\r\n // - set coupon = miniCartDiscountName\r\n // - set discount price ( minicartDiscount) note: not a negative value\r\n // - item category ( \"monthly charges\" )\r\n const ga4Cart = {\r\n currency: \"USD\",\r\n value: diffCart.monthlyCharges.monthlyTotal, // Map monthlyTotal to value\r\n items: diffCart.monthlyCharges.items.map((item) => ({\r\n item_name: item.itemLabel, // Map itemLabel to item_name\r\n item_category: \"monthlyCharges\",\r\n price: item.itemPrice - (item.miniCartDiscountAmount || 0), // Calculate price as itemPrice - miniCartDiscountAmount\r\n coupon: item.miniCartDiscountName || null, // Map miniCartDiscountName to coupon\r\n discount: item.miniCartDiscountAmount || 0, // Map miniCartDiscountAmount to discount\r\n })),\r\n };\r\n\r\n return ga4Cart;\r\n};\r\n","import LocalApi from \"../localApi\";\r\nimport {\r\n send_GA4event_update_cart,\r\n send_GA4event_checkout,\r\n cartDeepCopyForGA4,\r\n} from \"../../analytics/ga4/ga4helper\";\r\n\r\nexport const CartActions = {\r\n SET_CART_SUCCESS: \"SET_CART_SUCCESS\",\r\n SET_CART_FAILURE: \"SET_CART_FAILURE\",\r\n CHECKOUT_SUCCESS: \"CHECKOUT_SUCCESS\",\r\n CHECKOUT_FAILURE: \"CHECKOUT_FAILURE\",\r\n RESET_CHECKOUT: \"RESET_CHECKOUT\",\r\n RESET_CART: \"RESET_CART\",\r\n SET_INSTALLMENT_PLAN_SUCCESS: \"SET_INSTALLMENT_PLAN_SUCCESS\",\r\n SET_INSTALLMENT_PLAN_FAILURE: \"SET_INSTALLMENT_PLAN_FAILURE\",\r\n SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_SUCCESS:\r\n \"SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_SUCCESS\",\r\n SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_FAILURE:\r\n \"SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_FAILURE\",\r\n SET_SELF_INSTALL_DECLINED_SUCCESS: \"SET_SELF_INSTALL_DECLINED_SUCCESS\",\r\n SET_SELF_INSTALL_DECLINED_FAILURE: \"SET_SELF_INSTALL_DECLINED_FAILURE\",\r\n PRICING_API_TESTER_SUCCESS: \"PRICING_API_TESTER_SUCCESS\",\r\n PRICING_API_TESTER_FAILURE: \"PRICING_API_TESTER_FAILURE\",\r\n};\r\n\r\nexport const setCart = (cart) => async (dispatch, getState) => {\r\n try {\r\n const { cart: oldCart } = getState().cart;\r\n //do a deep copy\r\n const oldCartCopy = cartDeepCopyForGA4(oldCart);\r\n const cartCopy = cartDeepCopyForGA4(cart);\r\n dispatch({\r\n type: CartActions.SET_CART_SUCCESS,\r\n payload: cart,\r\n });\r\n // call GA4 event add_to_cart\r\n send_GA4event_update_cart(cartCopy, oldCartCopy);\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.SET_CART_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const resetCart = () => async (dispatch, getState) => {\r\n const { cart: oldCart } = getState().cart;\r\n const oldCartCopy = cartDeepCopyForGA4(oldCart);\r\n send_GA4event_update_cart(null, oldCartCopy);\r\n\r\n await dispatch({\r\n type: CartActions.RESET_CART,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const resetCheckout = () => async (dispatch, getState) => {\r\n console.log(\"GA4 resetCheckout\");\r\n await dispatch({\r\n type: CartActions.RESET_CHECKOUT,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const pricingApiTester = (requestXml) => async (dispatch) => {\r\n try {\r\n const response = await LocalApi.post(`/api/cart/pricingApiTester`, {\r\n requestXml: requestXml,\r\n });\r\n\r\n dispatch({\r\n type: CartActions.PRICING_API_TESTER_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.PRICING_API_TESTER_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const checkout = () => async (dispatch, getstate) => {\r\n try {\r\n console.log(\"GA4 checkout \");\r\n let optAssessmentFeeAccepted =\r\n getstate().cart.optionalAssessmentFeeAccepted === undefined\r\n ? false\r\n : getstate().cart.optionalAssessmentFeeAccepted;\r\n\r\n const response = await LocalApi.post(`/api/cart/checkout`, {\r\n optionalAssessmentFeeAccepted:\r\n optAssessmentFeeAccepted === true ? true : false,\r\n selfInstallDeclined:\r\n getstate().cart.selfInstallDeclined === true ? true : false,\r\n installmentPlan: getstate().cart.installmentPlan,\r\n });\r\n // add code to call GA4 begin_checkout\r\n const { cart } = getstate().cart;\r\n const cartCopy = cartDeepCopyForGA4(cart);\r\n send_GA4event_checkout(cartCopy);\r\n console.log(\"GA4 checkout oldCartCopy \", cartCopy);\r\n dispatch({\r\n type: CartActions.CHECKOUT_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.CHECKOUT_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setInstallmentPlan = (state) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CartActions.SET_INSTALLMENT_PLAN_SUCCESS,\r\n payload: state,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.SET_INSTALLMENT_PLAN_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setOptionalAssessmentFeeAccepted = (state) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CartActions.SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_SUCCESS,\r\n payload: state,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setSelfInstallDeclined = (state) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CartActions.SET_SELF_INSTALL_DECLINED_SUCCESS,\r\n payload: state,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CartActions.SET_SELF_INSTALL_DECLINED_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n","import LocalApi from \"../localApi\";\r\nimport { checkout } from \"../../redux/actions/cartActions\";\r\nexport const UserActions = {\r\n SET_USER_PROFILE_STARTED: \"SET_USER_PROFILE_STARTED\",\r\n SET_USER_PROFILE_SUCCESS: \"SET_USER_PROFILE_SUCCESS\",\r\n SET_USER_PROFILE_FAILURE: \"SET_USER_PROFILE_FAILURE\",\r\n SET_USER_PROFILE_EMAIL_SUCCESS: \"SET_USER_PROFILE_EMAIL_SUCCESS\",\r\n SET_USER_PROFILE_ACCOUNT_NUMBER_SUCCESS: \"SET_USER_PROFILE_ACCOUNT_NUMBER_SUCCESS\",\r\n SET_BILLING_SUCCESS: \"SET_BILLING_SUCCESS\",\r\n SET_BILLING_FAILURE: \"SET_BILLING_FAILURE\",\r\n CREATE_USER_SUCCESS: \"CREATE_USER_SUCCESS\",\r\n CREATE_USER_FAILURE: \"CREATE_USER_FAILURE\",\r\n CREATE_USER_RESET: \"CREATE_USER_RESET\",\r\n SET_USER_HAS_ACCOUNT:\"SET_USER_HAS_ACCOUNT\",\r\n RESET_ESTABLISHNEWORDER: \"RESET_ESTABLISHNEWORDER\",\r\n SET_ESTABLISHNEWORDER_SUCCESS: \"SET_ESTABLISHNEWORDER_SUCCESS\",\r\n SET_ESTABLISHNEWORDER_FAILURE: \"SET_ESTABLISHNEWORDER_FAILURE\",\r\n GET_CHECKINSTALLATIONTYPE_STARTED: \"GET_CHECKINSTALLATIONTYPE_STARTED\",\r\n GET_CHECKINSTALLATIONTYPE_SUCCESS: \"GET_CHECKINSTALLATIONTYPE_SUCCESS\",\r\n GET_CHECKINSTALLATIONTYPE_FAILURE: \"GET_CHECKINSTALLATIONTYPE_FAILURE\", \r\n GET_SECRETQUESTIONS_STARTED: \"GET_SECRETQUESTIONS_STARTED\",\r\n GET_SECRETQUESTIONS_SUCCESS: \"GET_SECRETQUESTIONS_SUCCESS\",\r\n GET_SECRETQUESTIONS_FAILURE: \"GET_SECRETQUESTIONS_FAILURE\", \r\n};\r\nexport const ScheduleActions = {\r\n GET_SCHEDULING_STARTED: \"GET_SCHEDULING_STARTED\",\r\n GET_SCHEDULING_SUCCESS: \"GET_SCHEDULING_SUCCESS\",\r\n GET_SCHEDULING_FAILURE: \"GET_SCHEDULING_FAILURE\"\r\n };\r\nexport const setProfileInfo = (profileInfo, skipInstallation) => async (dispatch, getState) => {\r\n let hasAccount =false;\r\n let sharedSecretQuestionText='';\r\ntry{\r\nlet state= getState()\r\nhasAccount= state && state.user && state.user.profileInfo && state.user.profileInfo.hasAccount === true ? true : false;\r\nlet sq=state && state.user && state.user.secretQuestions && \r\nstate.user.secretQuestions.filter((secrectQ) => secrectQ.questionId == profileInfo.sharedSecretQuestionId)\r\nsharedSecretQuestionText=sq.length>0?sq[0].questionText:\"\";\r\n}\r\ncatch{\r\n\r\n}\r\n let pi = {\r\n firstName: profileInfo.firstName,\r\n lastName: profileInfo.lastName,\r\n phone: profileInfo.phone,\r\n bestTimeToCall: \"AM\",\r\n hasAccount:hasAccount,\r\n email: profileInfo.email,\r\n passwordPIN: profileInfo.passwordPIN,\r\n sharedSecretQuestionId: profileInfo.sharedSecretQuestionId,\r\n sharedSecretAnswer: profileInfo.sharedSecretAnswer,\r\n sharedSecretQuestionText:sharedSecretQuestionText,\r\n accountNumber: profileInfo.accountNumber || \"\",\r\n lastFourSsn: profileInfo.lastFourSsn,\r\n employerName: profileInfo.employerName,\r\n employerPhone: profileInfo.employerPhone,\r\n myAccountUsername: profileInfo.myAccountUsername,\r\n myAccountPassword: profileInfo.myAccountPassword,\r\n };\r\n\r\n try {\r\n dispatch({\r\n type: UserActions.SET_USER_PROFILE_STARTED,\r\n payload: pi\r\n });\r\n await LocalApi.post(`/api/user/setprofileinfo`, pi);\r\n dispatch({\r\n type: UserActions.SET_USER_PROFILE_SUCCESS,\r\n payload: pi\r\n });\r\n await dispatch(setBillingInfo(profileInfo));\r\n await dispatch(setEstablishNewOrder(skipInstallation())); \r\n \r\n } catch (error) {\r\n dispatch({\r\n type: UserActions.SET_USER_PROFILE_FAILURE,\r\n payload: error\r\n });\r\n }\r\n};\r\n\r\nexport const setProfileEmail = (email) => async (dispatch) => {\r\n dispatch({\r\n type: UserActions.SET_USER_PROFILE_EMAIL_SUCCESS,\r\n payload: email\r\n });\r\n};\r\nexport const setHasAccount = (hasAccount) => async (dispatch) => {\r\n dispatch({\r\n type: UserActions.SET_USER_HAS_ACCOUNT,\r\n payload: hasAccount\r\n });\r\n};\r\n\r\nexport const setProfileAccountNumber = (accountNumber) => async (dispatch) => {\r\n dispatch({\r\n type: UserActions.SET_USER_PROFILE_ACCOUNT_NUMBER_SUCCESS,\r\n payload: accountNumber\r\n });\r\n};\r\n\r\nexport const setBillingInfo = (customerInfo) => async (dispatch) => {\r\n let billingInfo = {\r\n firstName: customerInfo.firstName,\r\n lastName: customerInfo.lastName,\r\n address: customerInfo.address,\r\n aptUnit: customerInfo.aptUnit,\r\n city: customerInfo.city,\r\n state: customerInfo.state,\r\n zip: customerInfo.zip\r\n };\r\n //console.log(\"setBillingInfo: \", billingInfo);\r\n\r\n try {\r\n await LocalApi.post(`/api/user/setbillinginfo`, billingInfo);\r\n dispatch({\r\n type: UserActions.SET_BILLING_SUCCESS,\r\n payload: billingInfo\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: UserActions.SET_BILLING_FAILURE,\r\n payload: error\r\n });\r\n }\r\n};\r\nexport const resetEstablishNewOrder = () => async (dispatch) => {\r\n dispatch({\r\n type: UserActions.RESET_ESTABLISHNEWORDER\r\n });\r\n}\r\nexport const setEstablishNewOrder = (skipInstallation) => async (dispatch) => {\r\n \r\n try {\r\n let establishNewOrder = {};\r\n var response = await LocalApi.post(`/api/user/setestablishneworder`);\r\n dispatch({\r\n type: UserActions.SET_ESTABLISHNEWORDER_SUCCESS,\r\n payload: response.data\r\n });\r\n if (!skipInstallation) { \r\n dispatch(getScheduling());\r\n }\r\n else{\r\n dispatch(checkout());\r\n } \r\n } catch (error) {\r\n dispatch({\r\n type: UserActions.SET_ESTABLISHNEWORDER_FAILURE,\r\n payload: error\r\n });\r\n }\r\n};\r\nexport const checkInstallationType = () => async dispatch => {\r\n try {\r\n dispatch({\r\n type: UserActions.GET_CHECKINSTALLATIONTYPE_STARTED\r\n });\r\n const response = await LocalApi.get(`/api/scheduling/checkInstallationType`);\r\n dispatch({\r\n type: UserActions.GET_CHECKINSTALLATIONTYPE_SUCCESS,\r\n payload: response.data\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: UserActions.GET_CHECKINSTALLATIONTYPE_FAILURE,\r\n payload: error\r\n });\r\n }\r\n };\r\nexport const getScheduling = () => async dispatch => {\r\n try {\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_STARTED\r\n });\r\n const response = await LocalApi.get(`/api/scheduling`);\r\n \r\n //console.log(\"/api/scheduling data:\", response.data);\r\n \r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_SUCCESS,\r\n payload: response.data\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_FAILURE,\r\n payload: error\r\n });\r\n }\r\n };\r\nexport const createUser = (createUserRequest) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: UserActions.CREATE_USER_RESET\r\n });\r\n //console.log(\"/api/order/createUser\", createUserRequest);\r\n // get completeOrder from state.orderReducer\r\n var response = await LocalApi.post(\r\n `/api/order/createUser`,\r\n createUserRequest\r\n );\r\n\r\n dispatch({\r\n type: UserActions.CREATE_USER_SUCCESS,\r\n payload: response.data\r\n });\r\n } catch (error) {\r\n if (error.response && error.response.data) {\r\n dispatch({\r\n type: UserActions.CREATE_USER_FAILURE,\r\n payload: error.response.data\r\n });\r\n } else {\r\n dispatch({\r\n type: UserActions.CREATE_USER_FAILURE,\r\n payload: \"Unknown error creating user.\"\r\n });\r\n }\r\n }\r\n};\r\nexport const getSecretQuestions = () => async dispatch => {\r\n try {\r\n dispatch({\r\n type: UserActions.GET_SECRETQUESTIONS_STARTED\r\n });\r\n const response = await LocalApi.get(`/api/user/getsecretquestions`);\r\n dispatch({\r\n type: UserActions.GET_SECRETQUESTIONS_SUCCESS,\r\n payload: response.data\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: UserActions.GET_SECRETQUESTIONS_FAILURE,\r\n payload: error\r\n });\r\n }\r\n };\r\n","import React from \"react\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport FormHelperText from '@mui/material/FormHelperText';\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport Select from \"@mui/material/Select\";\r\n\r\nconst SelectIsland = props => {\r\n const { handleIslandChange, mode } = props;\r\n\r\n return (\r\n <>\r\n <FormControl variant=\"standard\" sx={{ minWidth: mode === \"minicart\" ? \"100%\" : 135 }}>\r\n <InputLabel id=\"island-label\">{mode === \"digicart\" || mode === \"minicart\" ? \"\" : \"Island\"}</InputLabel>\r\n <Select\r\n label=\"Island\"\r\n labelId=\"island-label\"\r\n displayEmpty\r\n defaultValue={\"1\"}\r\n onChange={handleIslandChange} \r\n sx={{\r\n fontSize: mode === \"minicart\" ? '14px' : '16px',\r\n ':before': { borderBottomColor: mode === \"minicart\" ? 'white' : \"black\" },\r\n ':after': { borderBottomColor: mode === \"minicart\" ? 'white' : \"black\" },\r\n }}\r\n >\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={1}>Oahu</MenuItem>\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={2}>Hawaii</MenuItem>\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={3}>Maui</MenuItem>\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={4}>Kauai</MenuItem>\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={5}>Lanai</MenuItem>\r\n <MenuItem className={mode === \"minicart\" ? \"miniIslandSelect\" : \"\" } value={6}>Molokai</MenuItem>\r\n </Select>\r\n {(mode === \"digicart\" || mode === \"minicart\") && <FormHelperText>Island</FormHelperText>}\r\n </FormControl>\r\n </>\r\n );\r\n};\r\nexport default SelectIsland;\r\n","import React, { useEffect, useState } from \"react\";\r\n\r\nimport LocalApi from \"../../redux/localApi\";\r\n\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Paper from '@mui/material/Paper';\r\n\r\nconst useStyles = makeStyles({\r\n error: {\r\n color: \"red\",\r\n fontSize: \"12px\",\r\n marginTop: \"3px\"\r\n },\r\n uppercase: {\r\n textTransform: \"uppercase\"\r\n }\r\n});\r\n\r\nconst AddressSearch = props => {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [clear, setClear] = useState(false);\r\n const [options, setOptions] = useState([]);\r\n const [addressSelected, setAddressSelected] = useState(null); \r\n const loading = open && options.length === 0;\r\n\r\n const { islandId, required, enteredAddress, setEnteredAddress, mode } = props;\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n setOptions([]);\r\n }\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n setClear(!clear);\r\n }, [islandId]);\r\n\r\n const onChangeHandle = async query => { \r\n let active = true;\r\n\r\n if (!loading) {\r\n //return undefined;\r\n }\r\n try { \r\n setIsError(false);\r\n const response = await LocalApi.get(`/api/Address/${islandId}/${query}`);\r\n const options = response.data.map(i => ({\r\n title: i.title,\r\n addressId: i.addressId,\r\n obj: i\r\n }));\r\n\r\n if (active) {\r\n setOptions([...options]);\r\n }\r\n } catch (error) { \r\n setIsError(true);\r\n active = false;\r\n }\r\n };\r\n\r\n const onSelect = (event, value) => {\r\n setIsError(false);\r\n setAddressSelected(value); \r\n value && props.onSelect(value); \r\n }\r\n\r\n const theme = createTheme({\r\n typography: {\r\n body1: {\r\n fontSize: mode === \"minicart\" ? 14 : 16,\r\n }\r\n }\r\n })\r\n\r\n const StylePaper = styled(Paper)(({ theme }) => ({ }));\r\n\r\n const StylePaperMini = styled(Paper)(({ theme }) => ({\r\n '& .MuiAutocomplete-option': {\r\n fontFamily: 'GilroyRegular'\r\n },\r\n }));\r\n\r\n return (\r\n <>\r\n <ThemeProvider theme={theme}>\r\n <Autocomplete\r\n id=\"asynchronous\"\r\n PaperComponent={mode === \"minicart\" ? StylePaperMini : StylePaper}\r\n freeSolo={true}\r\n sx={{ width: mode === \"digicart\" ? 400: mode === \"minicart\" ? \"inherit\": 250, \r\n ':before': { borderBottomColor: mode === \"minicart\" ? 'white' : \"black\" },\r\n ':after': { borderBottomColor: mode === \"minicart\" ? 'white' : \"black\" },\r\n }}\r\n key={clear}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n }}\r\n onClose={() => {\r\n setOpen(false);\r\n }}\r\n isOptionEqualToValue={(option, value) => option.title === value.title}\r\n getOptionLabel={option => option.title}\r\n options={options}\r\n loading={loading}\r\n onChange={onSelect}\r\n renderInput={params => (\r\n <TextField\r\n {...params}\r\n error={isError}\r\n // helperText={\r\n // isError ? \"We can't find that address. Please try again.\" : mode === \"digicart\" || mode === \"minicart\" ? \"Start entering address & select from options in dropdown\" : null\r\n // }\r\n label={mode === \"digicart\" ? null : mode === \"minicart\" ? \"Your Street Address *\" : \"Street Address\"}\r\n placeholder={mode === \"digicart\" ? \"e.g. 123 Main Street Kalaupapa 96742\" : mode === \"minicart\" ? \"Your Street Address *\" : null}\r\n variant=\"standard\"\r\n onChange={ev => {\r\n setEnteredAddress(null);\r\n setAddressSelected(null); \r\n // dont fire API if the user delete or not entered anything\r\n if (ev.target.value !== null && ev.target.value !== \"\") { \r\n setEnteredAddress(ev.target.value);\r\n onChangeHandle(ev.target.value);\r\n }\r\n }}\r\n InputProps={{\r\n ...params.InputProps,\r\n classes: {input: classes.uppercase},\r\n style: { fontSize: mode === \"minicart\" ? 14 : 16 } ,\r\n endAdornment: (\r\n <React.Fragment>\r\n {loading ? (\r\n <CircularProgress color=\"inherit\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n )\r\n }}\r\n \r\n />\r\n )}\r\n />\r\n {required && <div className={classes.error}>Street Address Required</div>}\r\n </ThemeProvider>\r\n </>\r\n );\r\n};\r\nexport default AddressSearch;\r\n","import React, { useEffect, useState } from \"react\";\r\n\r\nimport LocalApi from \"../../redux/localApi\";\r\n\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Paper from '@mui/material/Paper';\r\n\r\nconst useStyles = makeStyles({\r\n error: {\r\n color: \"red\",\r\n fontSize: \"12px\",\r\n marginTop: \"3px\",\r\n },\r\n uppercase: {\r\n textTransform: \"uppercase\",\r\n },\r\n});\r\n\r\nconst AptSearch = (props) => {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [options, setOptions] = useState([]);\r\n const loading = open && options && options.length === 0;\r\n\r\n const {\r\n mainAddress,\r\n required,\r\n mode,\r\n selectedApt,\r\n enteredApartment,\r\n setEnteredApartment,\r\n } = props;\r\n\r\n const [apartments, setApartments] = useState(null);\r\n\r\n React.useEffect(() => {\r\n async function fetchApartments() {\r\n if (!mainAddress || !mainAddress.addressId) {\r\n return;\r\n }\r\n\r\n try {\r\n //console.log(\"59\");\r\n setIsError(false);\r\n\r\n if (mainAddress && mainAddress.addressId) {\r\n const response = await LocalApi.get(\r\n `/api/Address/apartment/${mainAddress.addressId}`\r\n );\r\n const options = response.data.map((i) => ({\r\n title: i.aptSuiteTypeAheadLabel,\r\n addressId: i.addressId,\r\n obj: i,\r\n }));\r\n\r\n setOptions([...options]);\r\n setApartments([...options]);\r\n }\r\n } catch (error) {\r\n setIsError(true);\r\n }\r\n }\r\n\r\n fetchApartments();\r\n }, [mainAddress]);\r\n\r\n const theme = createTheme({\r\n typography: {\r\n body1: {\r\n fontSize: mode === \"minicart\" ? 14 : 16,\r\n },\r\n },\r\n });\r\n\r\n const StylePaper = styled(Paper)(({ theme }) => ({ }));\r\n\r\n const StylePaperMini = styled(Paper)(({ theme }) => ({\r\n '& .MuiAutocomplete-option': {\r\n fontFamily: 'GilroyRegular'\r\n },\r\n }));\r\n\r\n return (\r\n <>\r\n <ThemeProvider theme={theme}>\r\n <Autocomplete\r\n id=\"asynchronous\"\r\n PaperComponent={mode === \"minicart\" ? StylePaperMini : StylePaper}\r\n freeSolo={true}\r\n //disabled={mainAddress && mainAddress.length === 0 ? true : false}\r\n sx={{ width: mode == \"minicart\" ? \"100%\" : 250 }}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n }}\r\n onClose={() => {\r\n setOpen(false);\r\n }}\r\n isOptionEqualToValue={(option, value) => option.title === value.title}\r\n getOptionLabel={(option) => option.title}\r\n options={options}\r\n loading={loading}\r\n onChange={(event, value) => {\r\n props.onSelect(value);\r\n }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n error={isError}\r\n helperText={\r\n isError\r\n ? \"We can't find that address. Please try again.\"\r\n : mode === \"digicart\"\r\n ? \"Apt / Unit\"\r\n : null\r\n }\r\n label={\r\n mode === \"digicart\"\r\n ? \" \"\r\n : mode === \"minicart\"\r\n ? \"Apt / Unit\"\r\n : \"Apartment/Unit\"\r\n }\r\n placeholder={mode === \"minicart\" ? \"Apt / Unit\" : null}\r\n variant=\"standard\"\r\n onChange={(ev) => {\r\n setEnteredApartment(ev.target.value);\r\n }}\r\n InputProps={{\r\n ...params.InputProps,\r\n classes: { input: classes.uppercase },\r\n endAdornment: (\r\n <React.Fragment>\r\n {loading ? (\r\n <CircularProgress color=\"inherit\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n {required && mainAddress && !selectedApt && !enteredApartment && (\r\n <div className={classes.error}>Required</div>\r\n )}\r\n {required && mainAddress && !selectedApt && enteredApartment && (\r\n <div className={classes.error}>Invalid Selection</div>\r\n )}\r\n\r\n {false && (\r\n <div>\r\n <p>required={required}</p>\r\n <p>address={mainAddress === null ? \"null\" : mainAddress.title}</p>\r\n <p>selectedApt={selectedApt === null ? \"null\" : \"Has value\"}</p>\r\n </div>\r\n )}\r\n </ThemeProvider>\r\n </>\r\n );\r\n};\r\nexport default AptSearch;\r\n","import LocalApi from \"../localApi\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\n\r\nexport const CampaignActions = {\r\n GET_CAMPAIGN_STARTED:\"GET_CAMPAIGN_STARTED\",\r\n GET_CAMPAIGN_SUCCESS: \"GET_CAMPAIGN_SUCCESS\",\r\n GET_CAMPAIGN_FAILURE: \"GET_CAMPAIGN_FAILURE\",\r\n SET_CAMPAIGN_SOURCE: \"SET_CAMPAIGN_SOURCE\",\r\n SET_UTM_PARAMS: \"SET_UTM_PARAMS\",\r\n CLEAR_CAMPAIGN: \"CLEAR_CAMPAIGN\",\r\n SET_CAMPAIGN: \"SET_CAMPAIGN\",\r\n};\r\n\r\nexport const setSession =\r\n (\r\n address,\r\n email,\r\n campaignType,\r\n captchaValue,\r\n campaignSource,\r\n utmparams = {}\r\n ) =>\r\n async (dispatch, getstate) => {\r\n dispatch(getCampaignStarted());\r\n try {\r\n const response = await LocalApi.post(`/api/Address/setsession`, {\r\n ...address,\r\n email,\r\n campaignType,\r\n captchaValue: captchaValue,\r\n campaignSource,\r\n utm_medium: utmparams.utm_medium,\r\n utm_source: utmparams.utm_source,\r\n utm_campaign: utmparams.utm_campaign,\r\n });\r\n console.log(\"GA4 setsession\", response.data.sessionId)\r\n if (response?.data?.sessionId)\r\n {\r\n ga4.set(\"user_properties\", { user_id: response.data.sessionId});\r\n }\r\n\r\n dispatch({\r\n type: CampaignActions.GET_CAMPAIGN_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: CampaignActions.GET_CAMPAIGN_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n };\r\n export const getCampaignStarted = () => ({\r\n type: CampaignActions.GET_CAMPAIGN_STARTED\r\n });\r\nexport const setCampaign = (campaign) => async (dispatch, getstate) => {\r\n dispatch({\r\n type: CampaignActions.GET_CAMPAIGN_SUCCESS,\r\n payload: campaign,\r\n });\r\n};\r\nexport const setCampaignSource = (campaignSource) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CampaignActions.SET_CAMPAIGN_SOURCE,\r\n payload: campaignSource,\r\n });\r\n } catch (error) {}\r\n};\r\n// TO DO same as setCampaignSource to setUtmParams\r\nexport const setUtmParams = (utmparams) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CampaignActions.SET_UTM_PARAMS,\r\n payload: utmparams,\r\n });\r\n } catch (error) {}\r\n};\r\n\r\nexport const clearCampaign = () => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: CampaignActions.CLEAR_CAMPAIGN,\r\n payload: null,\r\n });\r\n } catch (error) {}\r\n};\r\n","export const AddonsActions = {\r\n GET_ADDONS_SUCCESS: \"GET_ADDONS_SUCCESS\",\r\n GET_ADDONS_FAILURE: \"GET_ADDONS_FAILURE\",\r\n SET_ADDONS_SUCCESS: \"SET_ADDONS_SUCCESS\",\r\n SET_ADDONS_FAILURE: \"SET_ADDONS_FAILURE\",\r\n CLEAR_SELECTED_PRODUCT: \"CLEAR_SELECTED_PRODUCT\",\r\n SET_NUMBER_STB_SUCCESS: \"SET_NUMBER_STB_SUCCESS\",\r\n SET_NUMBER_STB_FAILURE: \"SET_NUMBER_STB_FAILURE\",\r\n SET_IS_AUTO_SELECT_INIT: \"SET_IS_AUTO_SELECT_INIT\",\r\n SET_IS_AUTO_SELECT_EQUIPMENT_INIT: \"SET_IS_AUTO_SELECT_EQUIPMENT_INIT\",\r\n SET_SELECTED_ADDONS: \"SET_SELECTED_ADDONS\",\r\n};\r\n\r\nexport const setIsAutoSelectInit = (isAutoSelectInit) => async (dispatch) => {\r\n await(dispatch({\r\n type: AddonsActions.SET_IS_AUTO_SELECT_INIT,\r\n payload: isAutoSelectInit\r\n }));\r\n}\r\n\r\nexport const setIsAutoSelectEquipmentInit = (isAutoSelectEquipmentInit) => async (dispatch) => {\r\n await(dispatch({\r\n type: AddonsActions.SET_IS_AUTO_SELECT_EQUIPMENT_INIT,\r\n payload: isAutoSelectEquipmentInit\r\n }));\r\n}\r\n\r\n\r\nexport const setSelectedAddonsRedux = (addons) => async (dispatch) => {\r\n await(dispatch({\r\n type: AddonsActions.SET_SELECTED_ADDONS,\r\n payload: addons\r\n }));\r\n}\r\n","export const getCategorys = (addons) => {\r\n var unique = addons.filter(\r\n (value, index, self) =>\r\n self.map((x) => x.groupingCategory).indexOf(value.groupingCategory) ===\r\n index\r\n );\r\n\r\n const groupingCategorys = unique.map((a) => ({\r\n name: a.groupingCategory,\r\n requiredQty: a.groupingCategoryRequiredQty,\r\n groupingCategorySelectMode: a.groupingCategorySelectMode,\r\n text: a.groupingCategoryText,\r\n isAddonGroupOpenByDefault:a.isAddonGroupOpenByDefault\r\n }));\r\n //console.log(\"groupingCategorys\", groupingCategorys);\r\n return groupingCategorys;\r\n};\r\n\r\nexport const SET_TOP_BOX_ADDIN_ID = 27;\r\n//TV Premium\r\nexport const PREMIER_VALUE_BUNDLE = \"Premier Value Bundle\";\r\nexport const MYWAY_TV = \"MyWay TV\";\r\n\r\nexport const getDuplicates = (array) => {\r\n return array.filter(\r\n (a, i, aa) => aa.indexOf(a) === i && aa.lastIndexOf(a) !== i\r\n );\r\n};\r\n\r\nexport const getOnlyIds = (array) => {\r\n return array.map((a) => a.id);\r\n};\r\n\r\nexport const isSetTopBox = (addon) => {\r\n return addon && addon.addonName && addon.addonName.toUpperCase().indexOf(\"SET TOP BOX\") != -1;\r\n}","import LocalApi from \"../localApi\";\r\nimport { AddonsActions } from \"./addonsActions\";\r\nimport { setCart, resetCheckout } from \"./cartActions\";\r\nimport { getOnlyIds, isSetTopBox } from \"../../lib/addons\";\r\n\r\nexport const ProductActions = {\r\n GET_PRODUCTS_STARTED: \"GET_PRODUCTS_STARTED\",\r\n GET_PRODUCTS_SUCCESS: \"GET_PRODUCTS_SUCCESS\",\r\n GET_PRODUCTS_FAILURE: \"GET_PRODUCTS_FAILURE\",\r\n SET_PRODUCT_SUCCESS: \"SET_PRODUCT_SUCCESS\",\r\n SET_PRODUCT_FAILURE: \"SET_PRODUCT_FAILURE\",\r\n QUAL_CHECK_STARTED: \"QUAL_CHECK_STARTED\",\r\n QUAL_CHECK_SUCCESS: \"QUAL_CHECK_SUCCESS\",\r\n QUAL_CHECK_FAILURE: \"QUAL_CHECK_FAILURE\",\r\n RESET_QUAL_CHECK: \"RESET_QUAL_CHECK\",\r\n SET_DIGI_CART_SELECTED_PRODUCT_SUCCESS:\r\n \"SET_DIGI_CART_SELECTED_PRODUCT_SUCCESS\",\r\n SET_DIGI_CART_SELECTED_BUNDLE_INDEX_SUCCESS:\r\n \"SET_DIGI_CART_SELECTED_BUNDLE_INDEX_SUCCESS\",\r\n SET_DIGI_CART: \"SET_DIGI_CART\",\r\n UPDATE_CART: \"UPDATE_CART\",\r\n GET_ADDON_START: \"GET_ADDON_START\",\r\n RESET_DIGI_CART: \"RESET_DIGI_CART\",\r\n SET_DIGI_CART_SUBMITTED: \"SET_DIGI_CART_SUBMITTED\",\r\n CLEAR_DIGI_CART_SUBMITTED: \"CLEAR_DIGI_CART_SUBMITTED\",\r\n SET_DIGI_CART_PROCESSED: \"SET_DIGI_CART_PROCESSED\",\r\n CLEAR_DIGI_CART_PROCESSED: \"CLEAR_DIGI_CART_PROCESSED\",\r\n};\r\n\r\nexport const getProducts = () => async (dispatch) => {\r\n dispatch(getProductsStarted());\r\n\r\n try {\r\n const response = await LocalApi.get(`/api/Products`);\r\n //console.log(\"response\",response);\r\n dispatch({\r\n type: ProductActions.GET_PRODUCTS_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n if (error && error.response) {\r\n dispatch({\r\n type: ProductActions.GET_PRODUCTS_FAILURE,\r\n payload: error.response,\r\n });\r\n } else {\r\n dispatch({\r\n type: ProductActions.GET_PRODUCTS_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const getProductsStarted = () => ({\r\n type: ProductActions.GET_PRODUCTS_STARTED,\r\n});\r\nexport const addDigiCart = () => ({\r\n type: ProductActions.SET_DIGI_CART,\r\n});\r\nexport const getAddOnStarted = () => ({\r\n type: ProductActions.GET_ADDON_START,\r\n});\r\nexport const updateCart = () => ({\r\n type: ProductActions.UPDATE_CART,\r\n});\r\nexport const getProductsTestMode =\r\n (campaignId, qualLevel, maxHsi, island) => async (dispatch) => {\r\n try {\r\n //TODO: What about sag code?\r\n const response = await LocalApi.get(\r\n `/api/Products/${campaignId}/${qualLevel}/${maxHsi}/${island}`\r\n );\r\n dispatch({\r\n type: ProductActions.GET_PRODUCTS_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ProductActions.GET_PRODUCTS_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n };\r\n\r\nexport const resetQualCheck = () => ({\r\n type: ProductActions.RESET_QUAL_CHECK,\r\n});\r\n\r\nexport const qualCheckStarted = () => ({\r\n type: ProductActions.QUAL_CHECK_STARTED,\r\n});\r\n\r\nexport const qualCheck = (addressId, productVersionId) => async (dispatch) => {\r\n dispatch(qualCheckStarted());\r\n\r\n try {\r\n const response = await LocalApi.get(\r\n `/api/Products/qualCheck/${addressId}/${productVersionId}`\r\n );\r\n dispatch({\r\n type: ProductActions.QUAL_CHECK_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ProductActions.QUAL_CHECK_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setProduct =\r\n (productId, sagCode = \"\") =>\r\n async (dispatch) => {\r\n dispatch(addDigiCart());\r\n try {\r\n const response = await LocalApi.post(`/api/products/setproduct`, {\r\n productId,\r\n sagCode: sagCode,\r\n });\r\n\r\n await dispatch(resetCheckout());\r\n\r\n // response contain Cart object\r\n if (productId === 0) {\r\n //TODOGA4 if cart is not empty then use current cart to remove all items in cart\r\n\r\n dispatch(setCart(null));\r\n } else {\r\n //TODOGA4 get the difference between current cart and new cart\r\n\r\n dispatch(setCart(response.data));\r\n }\r\n dispatch({\r\n type: ProductActions.SET_PRODUCT_SUCCESS,\r\n payload: productId === 0 ? null : productId,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ProductActions.SET_PRODUCT_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n };\r\n\r\nexport const getAddons = () => async (dispatch) => {\r\n dispatch(getAddOnStarted());\r\n\r\n try {\r\n const response = await LocalApi.get(`/api/Products/addons`);\r\n dispatch({\r\n type: AddonsActions.GET_ADDONS_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AddonsActions.GET_ADDONS_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const clearSelectedProduct = () => async (dispatch) => {\r\n dispatch({\r\n type: AddonsActions.CLEAR_SELECTED_PRODUCT,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const setAddons = (addons) => async (dispatch, getstate) => {\r\n let stbQty = 0;\r\n try {\r\n dispatch(updateCart());\r\n\r\n let addonsObj = [];\r\n stbQty =\r\n getstate().products.stbQty === null ? 1 : getstate().products.stbQty;\r\n\r\n if (addons) {\r\n addons.forEach((addon) => {\r\n if (isSetTopBox(addon)) {\r\n addonsObj.push({ id: addon.id, qty: stbQty });\r\n } else {\r\n addonsObj.push({ id: addon.id, qty: addon.qty });\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"setAddons:\", {\r\n // addons: addonsObj,\r\n // wirelessGatewaySelected: addons[0].wirelessGatewaySelected\r\n // });\r\n\r\n const response = await LocalApi.post(`/api/products/setaddons`, {\r\n addons: addonsObj,\r\n wirelessGatewaySelected: addons[0].wirelessGatewaySelected,\r\n });\r\n await dispatch(resetCheckout());\r\n // response contain Cart object\r\n dispatch(setCart(response.data));\r\n dispatch({\r\n type: AddonsActions.SET_ADDONS_SUCCESS,\r\n payload: {\r\n ids: getOnlyIds(addons),\r\n wirelessGateway: addons[0].wirelessGatewaySelected,\r\n },\r\n });\r\n if (stbQty > 0) {\r\n dispatch({\r\n type: AddonsActions.SET_NUMBER_STB_SUCCESS,\r\n payload: stbQty,\r\n });\r\n }\r\n } catch (error) {\r\n dispatch({\r\n type: AddonsActions.SET_ADDONS_FAILURE,\r\n payload: error,\r\n });\r\n if (stbQty > 0) {\r\n dispatch({\r\n type: AddonsActions.SET_NUMBER_STB_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const setSelectedDigiCartProduct = (productId) => ({\r\n type: ProductActions.SET_DIGI_CART_SELECTED_PRODUCT_SUCCESS,\r\n payload: productId,\r\n});\r\n\r\nexport const setSelectedDigiCartBundleIndex = (index) => ({\r\n type: ProductActions.SET_DIGI_CART_SELECTED_BUNDLE_INDEX_SUCCESS,\r\n payload: index,\r\n});\r\n\r\nexport const resetDigiCart = () => ({\r\n type: ProductActions.RESET_DIGI_CART,\r\n});\r\n\r\nexport const submitDigiCartId = (productVersionId) => ({\r\n type: ProductActions.SET_DIGI_CART_SUBMITTED,\r\n payload: productVersionId,\r\n});\r\nexport const clearSubmitDigiCartId = () => ({\r\n type: ProductActions.CLEAR_DIGI_CART_SUBMITTED,\r\n});\r\n\r\nexport const processedDigiCart = () => ({\r\n type: ProductActions.SET_DIGI_CART_PROCESSED,\r\n});\r\nexport const clearProcessedDigiCart = () => ({\r\n type: ProductActions.CLEAR_DIGI_CART_PROCESSED,\r\n});\r\n","export const StepActions = {\r\n SET_STEP: \"SET_STEP\",\r\n NEXT: \"NEXT\",\r\n PREV: \"PREV\",\r\n SET_HISTORY: \"SET_HISTORY\",\r\n RESET_ALL: \"RESET_ALL\",\r\n SKIP_INSTALLATION:\"SKIP_INSTALLATION\"\r\n};\r\n\r\nexport const ScreenSteps = {\r\n CUSTOMER_INFO: 2\r\n};\r\n\r\nexport const setStep = step => dispatch => {\r\n dispatch({\r\n type: StepActions.SET_STEP,\r\n payload: step\r\n });\r\n};\r\n\r\nexport const nextStep = () => dispatch => {\r\n dispatch({\r\n type: StepActions.NEXT\r\n });\r\n};\r\n\r\nexport const prevStep = () => dispatch => {\r\n dispatch({\r\n type: StepActions.PREV\r\n });\r\n};\r\n\r\nexport const saveHistory = history => dispatch => {\r\n dispatch({\r\n type: StepActions.SET_HISTORY,\r\n payload: history\r\n });\r\n};\r\n\r\nexport const resetAll = () => dispatch => {\r\n // console.log(\"resetAll dispatched\");\r\n dispatch({\r\n type: \"RESET_ALL\",\r\n payload: null\r\n });\r\n};\r\nexport const skipInstallationStep = step => dispatch => {\r\n dispatch({\r\n type: StepActions.SKIP_INSTALLATION,\r\n payload: step\r\n });\r\n};\r\n\r\n","export const getArrivalWindowString = (arrivalWindow) => {\r\n let date = getDateAW(arrivalWindow.date);\r\n let arrivalWindowTimeSlot =\r\n arrivalWindow.timeSlot == \"Undefined\" ? \"\" : \", \" + arrivalWindow.timeSlot;\r\n const arrivalWindowString =\r\n date.toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n }) + arrivalWindowTimeSlot;\r\n // \", \" +\r\n // arrivalWindow.timeSlot;\r\n\r\n return arrivalWindowString;\r\n};\r\n\r\nexport const getDateAW = (dateAW) => {\r\n if (dateAW) {\r\n let dateArray = dateAW.split(\"-\");\r\n return new Date(dateArray[0], parseInt(dateArray[1], 10) - 1, dateArray[2]);\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nconst formatShortDate = (date) => {\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are 0-based\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const year = String(date.getFullYear()).slice(-2); // Get last two digits of the year\r\n\r\n return `${month}/${day}/${year}`;\r\n};\r\n\r\nexport const getAWStringByDate = (selectedDate, timeSlot) => {\r\n let date = getDateAW(selectedDate);\r\n const arrivalWindowString =\r\n new Date(date).toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n }) +\r\n \", \" +\r\n timeSlot;\r\n\r\n return arrivalWindowString;\r\n};\r\n\r\nexport const getAWStringByShortDate = (selectedDate, timeSlot) => {\r\n let date = getDateAW(selectedDate);\r\n const arrivalWindowString =\r\n new Date(date).toLocaleDateString(\"en-US\", {\r\n year: \"2-digit\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n }) +\r\n \", \" +\r\n formatTimeSlot(timeSlot);\r\n\r\n return arrivalWindowString;\r\n};\r\n\r\nexport const getAWShortDate = (selectedDate) => {\r\n let formatedDate = \"\";\r\n const date = getDateAW(selectedDate);\r\n if (date) {\r\n formatedDate = getAWStringByDate();\r\n }\r\n\r\n return formatedDate;\r\n};\r\n\r\nexport const getAWDateString = (date) => {\r\n return date.toISOString().slice(0, 10);\r\n};\r\n\r\nexport const SELF_INSTALL_TYPE = {\r\n FIBER: \"fiber\",\r\n COPPER: \"copper\",\r\n WIFI: \"wifi\",\r\n};\r\n\r\nexport const formatTimeSlot = (timeSlot) => {\r\n if(timeSlot && timeSlot.includes(\"24\"))\r\n {\r\n return timeSlot;\r\n }\r\n const parts = timeSlot.split(\"-\");\r\n if (parts.length !== 2) {\r\n // Invalid time slot format - should have on two times\r\n return timeSlot;\r\n }\r\n\r\n const formattedParts = parts.map((part) => {\r\n const time = part.trim(); // Remove leading/trailing spaces\r\n const hoursMinutes = time.substring(0, time.lastIndexOf(\":\") + 3); // Extract hours and minutes including ':'\r\n const amPm = time.substring(time.lastIndexOf(\":\") + 3); // Extract AM/PM\r\n return `${hoursMinutes} ${amPm}`; // Combine with space\r\n });\r\n\r\n return formattedParts.join(\" - \"); // Join the parts with ' - '\r\n};\r\n\r\nexport const addBusinessDaysAndFormat = (daysToAdd) => {\r\n const weekdays = [1, 2, 3, 4, 5]; // Monday to Friday\r\n const today = new Date();\r\n const endDate = new Date(today);\r\n\r\n while (daysToAdd > 0) {\r\n endDate.setDate(endDate.getDate() + 1); // Add one day\r\n if (weekdays.includes(endDate.getDay())) {\r\n // If it's a weekday, decrease daysToAdd\r\n daysToAdd--;\r\n }\r\n }\r\n\r\n // Format the date to MM/dd/yy\r\n const formattedDate = endDate.toLocaleDateString(\"en-US\", {\r\n year: \"2-digit\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n });\r\n\r\n return formattedDate;\r\n};\r\n","import LocalApi from \"../localApi\";\r\n\r\nimport { addBusinessDaysAndFormat } from \"../../lib/schedule\";\r\nexport const ScheduleActions = {\r\n SET_WAIT_FOR_SCHEDULING: \"SET_WAIT_FOR_SCHEDULING\",\r\n GET_SCHEDULING_STARTED: \"GET_SCHEDULING_STARTED\",\r\n GET_SCHEDULING_SUCCESS: \"GET_SCHEDULING_SUCCESS\",\r\n GET_SCHEDULING_FAILURE: \"GET_SCHEDULING_FAILURE\",\r\n SET_SCHEDULE_INFO_STARTED: \"SET_SCHEDULE_INFO_STARTED\",\r\n SET_SCHEDULE_INFO_SUCCESS: \"SET_SCHEDULE_INFO_SUCCESS\",\r\n SET_SCHEDULE_INFO_FAILURE: \"SET_SCHEDULE_INFO_FAILURE\",\r\n SET_SHIPPING_ADDRESS_SUCCESS: \"SET_SHIPPING_ADDRESS_SUCCESS\",\r\n SET_SHIPPING_ADDRESS_FAILURE: \"SET_SHIPPING_ADDRESS_FAILURE\",\r\n RESET_NEXT_SCREEN: \"RESET_NEXT_SCREEN\",\r\n ADD_PRODUCT_TO_ACCESSLINE_STARTED: \"ADD_PRODUCT_TO_ACCESSLINE_STARTED\",\r\n ADD_PRODUCT_TO_ACCESSLINE_SUCCESS: \"ADD_PRODUCT_TO_ACCESSLINE_SUCCESS\",\r\n ADD_PRODUCT_TO_ACCESSLINE_FAILURE: \"ADD_PRODUCT_TO_ACCESSLINE_FAILURE\",\r\n RESET_SCHEDULING: \"RESET_SCHEDULING\",\r\n // GET_CHECKINSTALLATIONTYPE_STARTED: \"GET_CHECKINSTALLATIONTYPE_STARTED\",\r\n // GET_CHECKINSTALLATIONTYPE_SUCCESS: \"GET_CHECKINSTALLATIONTYPE_SUCCESS\",\r\n // GET_CHECKINSTALLATIONTYPE_FAILURE: \"GET_CHECKINSTALLATIONTYPE_FAILURE\",\r\n};\r\n\r\nexport const setWaitForScheduling = (waitForScheduling) => async (dispatch) => {\r\n dispatch({\r\n type: ScheduleActions.SET_WAIT_FOR_SCHEDULING,\r\n payload: waitForScheduling,\r\n });\r\n};\r\n\r\nexport const getScheduling = () => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_STARTED,\r\n });\r\n const response = await LocalApi.get(`/api/scheduling`);\r\n\r\n //console.log(\"/api/scheduling data:\", response.data);\r\n\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_SUCCESS,\r\n payload: response.data,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setSchedule = (scheduleInfo) => async (dispatch, getstate) => {\r\n let info = {\r\n selectedArrivalWindow: scheduleInfo.selectedArrivalWindow,\r\n date: scheduleInfo.selectedArrivalWindow\r\n ? scheduleInfo.selectedArrivalWindow.date\r\n : \"\",\r\n timeSlot: scheduleInfo.selectedArrivalWindow\r\n ? scheduleInfo.selectedArrivalWindow.timeSlot\r\n : \"\",\r\n id: scheduleInfo.selectedArrivalWindow\r\n ? scheduleInfo.selectedArrivalWindow.id\r\n : \"\",\r\n installType: scheduleInfo.selectedArrivalWindow\r\n ? scheduleInfo.selectedArrivalWindow.installType\r\n : \"\",\r\n isSelfInstall: getstate().schedule.isSelfInstall === true ? true : false,\r\n selfInstallDeclined:\r\n getstate().cart.selfInstallDeclined === true ? true : false,\r\n installmentPlan: getstate().cart.installmentPlan === true ? true : false,\r\n //optionalAssessmentFeeAccepted:getstate().cart.optionalAssessmentFeeAccepted === undefined ? false : getstate().cart.optionalAssessmentFeeAccepted,\r\n specialInstructions: scheduleInfo.specialInstructions\r\n ? scheduleInfo.specialInstructions\r\n : \"\",\r\n contactName: scheduleInfo.contactName ? scheduleInfo.contactName : \"\",\r\n contactPhone: scheduleInfo.contactPhone ? scheduleInfo.contactPhone : \"\",\r\n selectedIndexArrival: scheduleInfo.selectedIndexArrival\r\n ? scheduleInfo.selectedIndexArrival\r\n : \"\",\r\n preferredContactPhone: scheduleInfo.preferredContactPhone\r\n ? scheduleInfo.preferredContactPhone\r\n : \"\",\r\n preferredContactTextMsg: scheduleInfo.preferredContactTextMsg\r\n ? scheduleInfo.preferredContactTextMsg\r\n : \"\",\r\n preferredContactEmail: scheduleInfo.preferredContactEmail\r\n ? scheduleInfo.preferredContactEmail\r\n : \"\",\r\n preferredContactMethod: scheduleInfo.preferredContactMethod\r\n ? scheduleInfo.preferredContactMethod\r\n : \"\",\r\n contactMeToSchedule: scheduleInfo.contactMeToSchedule,\r\n };\r\n //console.log(\"Action setSchedule:\", info);\r\n const ecomComputedActivationDate = getstate().schedule.isSelfInstall\r\n ? addBusinessDaysAndFormat(4)\r\n : null;\r\n try {\r\n dispatch({\r\n type: ScheduleActions.SET_SCHEDULE_INFO_STARTED,\r\n });\r\n await LocalApi.post(`/api/scheduling/scheduleinfo`, info);\r\n dispatch({\r\n type: ScheduleActions.SET_SCHEDULE_INFO_SUCCESS,\r\n payload: {\r\n scheduleInfo: info,\r\n ecomComputedActivationDate: ecomComputedActivationDate,\r\n },\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ScheduleActions.SET_SCHEDULE_INFO_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const setShippingAddress =\r\n (shippingAddress) => async (dispatch, getstate) => {\r\n let sa = {\r\n firstName: shippingAddress.firstName ? shippingAddress.firstName : \"\",\r\n lastName: shippingAddress.lastName ? shippingAddress.lastName : \"\",\r\n address: shippingAddress.address ? shippingAddress.address : \"\",\r\n aptUnit: shippingAddress.aptUnit ? shippingAddress.aptUnit : \"\",\r\n city: shippingAddress.city ? shippingAddress.city : \"\",\r\n state: shippingAddress.state ? shippingAddress.state : \"\",\r\n zip: shippingAddress.zip ? shippingAddress.zip : \"\",\r\n phone: shippingAddress.phone ? shippingAddress.phone : \"\",\r\n };\r\n const ecomComputedActivationDate = getstate().schedule.isSelfInstall\r\n ? addBusinessDaysAndFormat(4)\r\n : null;\r\n try {\r\n dispatch({\r\n type: ScheduleActions.GET_SCHEDULING_STARTED,\r\n });\r\n await LocalApi.post(`/api/scheduling/shippingaddress`, sa);\r\n\r\n dispatch({\r\n type: ScheduleActions.SET_SHIPPING_ADDRESS_SUCCESS,\r\n payload: {\r\n scheduleInfo: sa,\r\n ecomComputedActivationDate: ecomComputedActivationDate,\r\n },\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: ScheduleActions.SET_SHIPPING_ADDRESS_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n };\r\n\r\nexport const resetNextScreen = () => async (dispatch) => {\r\n dispatch({\r\n type: ScheduleActions.RESET_NEXT_SCREEN,\r\n });\r\n};\r\nexport const addProductToAccessLine = () => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_STARTED,\r\n });\r\n const response = await LocalApi.post(\r\n `/api/scheduling/addProductToAccessLine`\r\n );\r\n dispatch({\r\n type: ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_SUCCESS,\r\n payload: response.data,\r\n });\r\n dispatch(getScheduling());\r\n } catch (error) {\r\n dispatch({\r\n type: ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const resetScheduling = () => async (dispatch) => {\r\n dispatch({\r\n type: ScheduleActions.RESET_SCHEDULING,\r\n });\r\n};\r\n","import LocalApi from \"../localApi\";\r\n\r\nimport { AddressActions } from \"../actions/addressActions\";\r\nimport { CampaignActions } from \"../actions/campaignActions\";\r\n\r\nimport { setProfileEmail } from \"../actions/userActions\";\r\n\r\n\r\nexport const StateHandlerActions = {\r\n SET_STATE_STARTED: \"SET_STATE_STARTED\",\r\n SET_STATE_SUCCESS: \"SET_STATE_SUCCESS\",\r\n SET_STATE_FAILURE: \"SET_STATE_FAILURE\",\r\n GET_STATE_STARTED: \"GET_STATE_STARTED\",\r\n GET_STATE_SUCCESS: \"GET_STATE_SUCCESS\",\r\n GET_STATE_FAILURE: \"GET_STATE_FAILURE\",\r\n};\r\n\r\n\r\nexport const setStateData = () => async (dispatch, getstate) => {\r\n\r\n\r\n\r\n try {\r\n dispatch({\r\n type: StateHandlerActions.SET_STATE_STARTED,\r\n });\r\n\r\n var gs = getstate(); \r\n\r\n const email = gs.user && gs.user.profileInfo && gs.user.profileInfo.email ? gs.user.profileInfo.email : \"\"; \r\n\r\n const response = await LocalApi.post(`/api/address/setState`, {\r\n address: gs.address,\r\n campaign: gs.campaign,\r\n email: email\r\n });\r\n\r\n dispatch(exitIframe());\r\n\r\n dispatch({\r\n type: StateHandlerActions.SET_STATE_SUCCESS,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: StateHandlerActions.SET_STATE_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const getStateData = (history) => async (dispatch, getstate) => {\r\n try {\r\n dispatch({\r\n type: StateHandlerActions.GET_STATE_STARTED,\r\n });\r\n const response = await LocalApi.get(`/api/address/getState`);\r\n\r\n const address = response.data && response.data.address && response.data.address.address ? response.data.address.address : null; \r\n const campaign = response.data && response.data.campaign && response.data.campaign.campaign ? response.data.campaign.campaign : null; \r\n const email = response.data && response.data.email ? response.data.email : null; \r\n\r\n dispatch(setProfileEmail(email));\r\n\r\n dispatch({\r\n type: AddressActions.SET_ADDRESS_SUCCESS,\r\n payload: address,\r\n });\r\n\r\n dispatch({\r\n type: CampaignActions.SET_CAMPAIGN,\r\n payload: campaign,\r\n });\r\n\r\n dispatch({\r\n type: StateHandlerActions.GET_STATE_SUCCESS,\r\n payload: response.data\r\n });\r\n const campaignType = campaign && campaign.campaignType ? campaign.campaignType : \"\"; \r\n var destination = \"/confirmaddress/\" + campaignType;\r\n history.push(destination);\r\n\r\n } catch (error) {\r\n dispatch({\r\n type: StateHandlerActions.GET_STATE_FAILURE,\r\n payload: error,\r\n });\r\n history.push(\"/\");\r\n }\r\n};\r\n\r\n\r\n\r\nconst exitIframe = () => {\r\n // You can handle the redirection logic in the component that dispatches these actions\r\n var destination = process.env.PUBLIC_URL + \"/iframeRedirector\";\r\n window.top.location.href = destination;\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport LocalApi from \"../../redux/localApi\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\nimport Button from \"@mui/material/Button\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { setSession } from \"../../redux/actions/campaignActions\";\r\nimport { searchAddress } from \"../../redux/actions/addressActions\";\r\nimport { setProfileEmail } from \"../../redux/actions/userActions\";\r\nimport {\r\n resetAddress,\r\n resetAddresses,\r\n setAddressSubmitted,\r\n setRecaptcha,\r\n} from \"../../redux/actions/addressActions\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\nimport { resetQualCheck } from \"../../redux/actions/productActions\";\r\nimport { setStep } from \"../../redux/actions/stepActions\";\r\nimport { resetNextScreen } from \"../../redux/actions/scheduleActions\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport { resetAddressHaveServices } from \"../../redux/actions/addressActions\";\r\nimport { setStateData } from \"../../redux/actions/stateHandlerActions\";\r\n\r\nconst useStyles = makeStyles({\r\n htBtn: {\r\n textTransform: \"none\",\r\n padding: \"11px 50px\",\r\n borderRadius: 10,\r\n //backgroundColor: \"#00AFD8\",\r\n whiteSpace: \"nowrap\",\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(1, 38, 57, 1)\",\r\n boxShadow: \"0px 0px 15px 0px rgba(1, 38, 57, 1)\",\r\n },\r\n background:\r\n \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n },\r\n error: {\r\n color: \"red\",\r\n fontSize: \"16px\",\r\n marginTop: \"3px\",\r\n },\r\n});\r\n\r\nconst CheckAddressButton = (props) => {\r\n const [recaptchaLoaded, setRecaptchaLoaded] = React.useState(false);\r\n const [captchaValue, setCaptchaValue] = React.useState(null);\r\n const [errorMessage, setErrorMessage] = React.useState(null);\r\n const [isFormValid, setIsFormValid] = React.useState(false);\r\n\r\n const classes = useStyles();\r\n let history = useHistory();\r\n const dispatch = useDispatch();\r\n const address = useSelector((state) => state.address.address);\r\n const addresses = useSelector((state) => state.address.addresses);\r\n const submitted = useSelector((state) => state.address.submitted);\r\n const loading = useSelector((state) => state.campaign.loading);\r\n const utmparams = useSelector((state) =>\r\n state.campaign\r\n ? state.campaign.utmparams\r\n : {\r\n utm_medium: \"\",\r\n utm_source: \"\",\r\n utm_campaign: \"\",\r\n }\r\n );\r\n const {\r\n enteredAddress,\r\n enteredApartment,\r\n islandId,\r\n selectedAddress,\r\n selectedAptOption,\r\n email,\r\n campaignType,\r\n showRequiredMsg,\r\n showEmailRequiredMsg,\r\n isBusiness,\r\n isEmailRequired,\r\n emailValid,\r\n mode,\r\n productVersionId,\r\n } = props;\r\n\r\n let campaignSource =\r\n props.campaignSource && props.campaignSource.length > 0\r\n ? props.campaignSource\r\n : mode === \"digicart\" || mode === \"minicart\"\r\n ? mode\r\n : \"\";\r\n\r\n const checkAddressButtonId =\r\n campaignSource && campaignSource.length > 0 ? campaignSource : \"\";\r\n\r\n const _reCaptchaRef = React.createRef();\r\n\r\n React.useEffect(() => {\r\n console.log(\"CheckAddressButton useEffect captchaValue\");\r\n if (captchaValue && isFormValid) {\r\n submitAddress(captchaValue);\r\n }\r\n }, [captchaValue, isFormValid]);\r\n\r\n React.useEffect(() => {\r\n if (!submitted) {\r\n return;\r\n }\r\n console.log(\"CheckAddressButton useEffect address submitted\", address);\r\n console.log(\"campaignType\", campaignType);\r\n dispatch(setAddressSubmitted(false));\r\n dispatch(resetAddressHaveServices());\r\n if (\r\n address ||\r\n (addresses &&\r\n addresses.addresses &&\r\n addresses.addresses.length > 0 &&\r\n !addresses.hasTooManyResults)\r\n ) {\r\n setIsFormValid(true);\r\n dispatch(resetQualCheck());\r\n dispatch(setStep(-1));\r\n dispatch(resetNextScreen());\r\n if (mode === \"digicart\") {\r\n history.push(\"/digicart/confirmaddress/\" + productVersionId);\r\n } else if (mode === \"minicart\" && isBusiness) {\r\n console.log(\"Business. Email:\", email);\r\n if (email) {\r\n console.log(\"redirecting to Check-Availability\");\r\n var destination =\r\n process.env.REACT_APP_DNN +\r\n \"/business/Business/Check-Availability?aid=\" +\r\n address.addressId +\r\n \"&em=\" +\r\n email;\r\n window.top.location.href = destination;\r\n } else {\r\n setIsFormValid(false);\r\n showEmailRequiredMsg(true);\r\n }\r\n } else if (mode === \"minicart\") {\r\n dispatch(setStateData());\r\n //TODO save state - Jim added this TODO\r\n //1- call save state\r\n //2- after save is complete\r\n // var destination =\r\n // process.env.PUBLIC_URL + \"/iframeRedirector\" ;\r\n // window.top.location.href = destination;\r\n } else {\r\n history.push(\"/confirmaddress/\" + campaignType);\r\n }\r\n } else if (addresses.hasTooManyResults && !addresses.hasMultiBuildings) {\r\n setIsFormValid(false);\r\n setErrorMessage(\r\n \"There are multiple units at your address. Please check your address, unit, apartment or suite number to help us find your service address.\"\r\n );\r\n } else {\r\n setIsFormValid(false);\r\n setErrorMessage(\"We can't find that address. Please try again. \");\r\n }\r\n }, [address, addresses, submitted]);\r\n\r\n const isValid = () => {\r\n console.log(\"CheckAddressButton isValid started\");\r\n console.log(\"enteredAddress\", enteredAddress);\r\n console.log(\"selectedAddress\", selectedAddress);\r\n console.log(\"email\", email);\r\n if (!enteredAddress) {\r\n showRequiredMsg(true);\r\n setIsFormValid(false);\r\n return false;\r\n }\r\n\r\n if (isEmailRequired && !email) {\r\n showEmailRequiredMsg(true);\r\n setIsFormValid(false);\r\n return false;\r\n }\r\n\r\n if (\r\n !selectedAptOption &&\r\n selectedAddress &&\r\n selectedAddress.isApartmentRequired === true\r\n ) {\r\n setIsFormValid(false);\r\n return false;\r\n }\r\n if (selectedAddress && selectedAddress.addressId && emailValid) {\r\n showRequiredMsg(false);\r\n setIsFormValid(true);\r\n return true;\r\n }\r\n if (enteredAddress && emailValid) {\r\n showRequiredMsg(false);\r\n setIsFormValid(true);\r\n return true;\r\n }\r\n showRequiredMsg(true);\r\n setIsFormValid(false);\r\n return false;\r\n };\r\n\r\n const onSubmit = async () => {\r\n if (isValid()) {\r\n await _reCaptchaRef.current.execute();\r\n }\r\n };\r\n\r\n const submitAddress = async (captchaValue) => {\r\n if (isValid()) {\r\n console.log(\r\n \"CheckAddressButton submitAddress selectedAddress\",\r\n selectedAddress\r\n );\r\n dispatch(setRecaptcha(captchaValue));\r\n if (!selectedAddress && enteredAddress && !enteredApartment) {\r\n await dispatch(resetAddress());\r\n\r\n //TODO: Implement dispath to setStateData\r\n //await dispatch(setStateData);\r\n\r\n await dispatch(\r\n setSession(\r\n { islandId: islandId },\r\n email,\r\n campaignType,\r\n captchaValue,\r\n campaignSource,\r\n utmparams\r\n )\r\n );\r\n await dispatch(searchAddress(enteredAddress, \"\", islandId));\r\n await dispatch(setAddressSubmitted(true));\r\n } else if (!selectedAddress && enteredAddress && enteredApartment) {\r\n await dispatch(resetAddress());\r\n\r\n //TODO: Implement dispath to setStateData\r\n //await dispatch(setStateData);\r\n\r\n await dispatch(\r\n setSession(\r\n { islandId: islandId },\r\n email,\r\n campaignType,\r\n captchaValue,\r\n campaignSource,\r\n utmparams\r\n )\r\n );\r\n await dispatch(\r\n searchAddress(enteredAddress, enteredApartment, islandId)\r\n );\r\n await dispatch(setAddressSubmitted(true));\r\n } else {\r\n await dispatch(resetAddresses());\r\n //await LocalApi.post(`/api/Address/setaddress/${addressId}`);\r\n\r\n //TODO: Implement dispath to setStateData\r\n //await dispatch(setStateData);\r\n\r\n await dispatch(\r\n setSession(\r\n selectedAddress,\r\n email,\r\n campaignType,\r\n captchaValue,\r\n campaignSource,\r\n utmparams\r\n )\r\n );\r\n await dispatch(setAddressSubmitted(true));\r\n }\r\n\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" LeadPath Enter Address Check Availability\",\r\n });\r\n }\r\n };\r\n\r\n const onCaptchaChange = (value) => {\r\n if (value) {\r\n setCaptchaValue(value);\r\n }\r\n };\r\n\r\n const asyncScriptOnLoad = () => {\r\n setRecaptchaLoaded(true);\r\n };\r\n\r\n return (\r\n <div>\r\n {errorMessage && <p className={classes.error}>{errorMessage}</p>}\r\n {loading && (\r\n <CircularProgress style={{ color: \"#012639\" }} sx={{ ml: 10 }} />\r\n )}\r\n\r\n <div\r\n className={\r\n mode === \"digicart\"\r\n ? \"digiCheckAddressButton\"\r\n : mode === \"minicart\"\r\n ? \"miniCheckAddressButton\"\r\n : \"\"\r\n }\r\n >\r\n {checkAddressButtonId.length > 0 && (\r\n <Button\r\n id={checkAddressButtonId}\r\n variant=\"contained\"\r\n onClick={onSubmit}\r\n className={classes.htBtn}\r\n disabled={!recaptchaLoaded}\r\n >\r\n {mode === \"digicart\"\r\n ? \"Find My Best Offer\"\r\n : mode === \"minicart\"\r\n ? \"GO\"\r\n : \"Check Address\"}\r\n </Button>\r\n )}\r\n {checkAddressButtonId.length == 0 && (\r\n <Button\r\n variant=\"contained\"\r\n onClick={onSubmit}\r\n className={classes.htBtn}\r\n disabled={!recaptchaLoaded}\r\n >\r\n {mode === \"digicart\"\r\n ? \"Find My Best Offer\"\r\n : mode === \"minicart\"\r\n ? \"GO\"\r\n : \"Check Address\"}\r\n </Button>\r\n )}\r\n </div>\r\n <ReCAPTCHA\r\n style={{ display: \"inline-block\" }}\r\n size=\"invisible\"\r\n ref={_reCaptchaRef}\r\n sitekey=\"6LctgS4UAAAAAEjqFNCNJKIsIiBPZzvlS1sKD-Qn\"\r\n onChange={onCaptchaChange}\r\n asyncScriptOnLoad={asyncScriptOnLoad}\r\n />\r\n </div>\r\n );\r\n};\r\nexport default CheckAddressButton;\r\n","import React from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogContentText from \"@mui/material/DialogContentText\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\n\r\nexport default function RedirectDialog({ open, onClose }) {\r\n const handleConfirm = () => {\r\n window.location.href =\r\n process.env.REACT_APP_DNN + process.env.REACT_APP_MYACC;\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={onClose}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">{\"Existing Customer\"}</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n Changes to existing customer account can be performed in My Account.\r\n You will be redirected to create an account/or log in to add new\r\n services to your existing account.\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={onClose} color=\"primary\">\r\n Disagree\r\n </Button>\r\n <Button onClick={handleConfirm} color=\"primary\" autoFocus>\r\n Agree\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport {\r\n setHasAccount,\r\n setProfileAccountNumber,\r\n} from \"../../redux/actions/userActions\";\r\nimport RedirectDialog from \"./RedirectDialog\";\r\n\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport CheckBoxOutlineBlankIcon from \"@mui/icons-material/CheckBoxOutlineBlank\";\r\nimport CheckBoxIcon from \"@mui/icons-material/CheckBox\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\n\r\nconst useStyles = makeStyles({\r\n checkbox: {\r\n border: \"1px solid #CCCCCC\",\r\n },\r\n checkboxLabel: {\r\n fontSize: \"16px\",\r\n color: \"#666666\",\r\n },\r\n});\r\n\r\nconst AlreadyHtCustomer = (props) => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { campaignType } = props;\r\n const [open, setOpen] = React.useState(false);\r\n const [checkedCheckbox, setCheckedCheckbox] = React.useState(false);\r\n\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n const accountNumber = profileInfo ? profileInfo.accountNumber : null;\r\n\r\n React.useEffect(() => {\r\n dispatch(setHasAccount(false));\r\n dispatch(setProfileAccountNumber(\"\"));\r\n }, []);\r\n\r\n const handleChangeCheckbox = (e) => {\r\n if (e.target.checked) {\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" BUYPATH Already HT Customer\",\r\n });\r\n } else {\r\n dispatch(setProfileAccountNumber(\"\"));\r\n }\r\n setCheckedCheckbox(e.target.checked);\r\n dispatch(setHasAccount(e.target.checked));\r\n\r\n //setOpen(true);\r\n };\r\n const handleAccountNumber = (event) => {\r\n //setAcountNumber(event.target.value);\r\n dispatch(setProfileAccountNumber(event.target.value));\r\n };\r\n const handleClose = () => {\r\n setCheckedCheckbox(false);\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={checkedCheckbox || accountNumber}\r\n onChange={handleChangeCheckbox}\r\n name=\"checkedA\"\r\n id=\"alreadycustomer\"\r\n color=\"primary\"\r\n icon={<CheckBoxOutlineBlankIcon fontSize=\"small\" />}\r\n checkedIcon={<CheckBoxIcon fontSize=\"small\" />}\r\n />\r\n }\r\n label=\"Already a Hawaiian Telcom Customer?\"\r\n classes={{ label: classes.checkboxLabel }}\r\n />\r\n\r\n {(checkedCheckbox || accountNumber) && (\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={4}>\r\n <TextField\r\n name=\"accountNumber\"\r\n label=\"Hawaiian Telcom Account Number\"\r\n fullWidth\r\n onChange={handleAccountNumber}\r\n variant=\"standard\"\r\n value={accountNumber || \"\"}\r\n />\r\n </Grid>\r\n </Grid>\r\n )}\r\n <RedirectDialog open={open} onClose={handleClose} />\r\n </>\r\n );\r\n};\r\nexport default AlreadyHtCustomer;\r\n","export const isNotEmpty = (value) => {\r\n return value ? true : false;\r\n};\r\n\r\nexport const isValueLength = (value, length) => {\r\n return value.length !== length ? false : true;\r\n};\r\n\r\nexport const isDigitsOnly = (value) => {\r\n return value.match(/^[0-9]+$/) === null ? false : true;\r\n};\r\n\r\nexport const isValueMinAndMaxLength = (value, min, max) => {\r\n return value.length >= min && value.length <= max ? true : false;\r\n};\r\n\r\nexport const isEmailValid = (email) => {\r\n const re =\r\n /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\r\n return re.test(String(email).toLowerCase());\r\n};\r\n\r\nexport const requiredOneLeterNumber = (value) => {\r\n return /^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/.test(value);\r\n};\r\n\r\nexport const isContainNumbers = (value) => {\r\n return /[0-9]/.test(value);\r\n};\r\n\r\nexport const isContainNonalphanumeric = (value) => {\r\n return /\\W/.test(value);\r\n};\r\n\r\nexport const isNotContainSpace = (value) => {\r\n return !/\\s/.test(value);\r\n};\r\n\r\nexport const isValuesEqual = (value1, value2) => {\r\n return value1 === value2 ? true : false;\r\n};\r\n\r\nexport const isPhoneValid = (phone) => {\r\n return /(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:(\\s*([1-9]1[01-9]|[1-9][01-9]1|[1-9][01-9][01-9])\\s*)|([1-9]1[01-9]|[1-9][01-9]1|[1-9][01-9][01-9]))\\s*(?:[.-]\\s*)?)([1-9]1[01-9]|[1-9][01-9]1|[1-9][01-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})/.test(\r\n phone\r\n );\r\n};\r\n\r\nexport const isEmpty = (e, componentThis) => {\r\n return componentThis.state[e] ? false : true;\r\n};\r\n\r\nexport const isAlphaNumeric = (value) => {\r\n var re = /^[a-zA-Z0-9]*$/;\r\n return !re.test(value) ? false : true;\r\n};\r\n\r\nexport const isUsernameEmailOnly = (email) => {\r\n var re = /^(([^<>#$%()[\\].,;:\\s@\"]+(\\.[^<>#$%()[\\].,;:\\s@\"]+)*)|(\".+\"))$/i;\r\n return re.test(String(email).toLowerCase()) && isNotContainSpace(email);\r\n};\r\n\r\nexport const validatePOBoxes = (address) => {\r\n var re =\r\n /^ *((#\\d+)|((box|bin)[-. \\/\\\\]?\\d+)|(.*p[ \\.]? ?(o|0)[-. \\/\\\\]? *-?((box|bin)|b|(#|num)?\\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\\d+)|(p *-?\\/?(o)? *-?box)|post office (box|bin)|((box|bin)|b) *(number|num|#)? *\\d+|(num|number|#) *\\d+)/gim;\r\n return !re.test(address);\r\n};\r\n","export function disableEnterKey(e){\r\n var isTextArea = e && e.target && e.target.matches(\"textarea\");\r\n if(e && e.keyCode === 13 && !isTextArea ){\r\n e.preventDefault(); \r\n }\r\n}","import React, { useRef, useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport {\r\n setAddress,\r\n resetAddressHaveServices,\r\n} from \"../../redux/actions/addressActions\";\r\nimport {\r\n setProfileEmail,\r\n setHasAccount,\r\n} from \"../../redux/actions/userActions\";\r\n\r\nimport Grid from \"@mui/material/Grid\";\r\nimport SelectIsland from \"./SelectIsland\";\r\nimport AddressSearch from \"./AddressSearch\";\r\nimport AptSearch from \"./AptSearch\";\r\nimport CheckAddressButton from \"./CheckAddressButton\";\r\nimport AlreadyHtCustomer from \"./AlreadyHtCustomer\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport {\r\n isEmailValid,\r\n isPhoneValid,\r\n isNotContainSpace,\r\n} from \"../../lib/validation\";\r\nimport { disableEnterKey } from \"../../components/disableEnterKey\";\r\n\r\nexport function AddressLookup(props) {\r\n const { campaignType } = props;\r\n\r\n const {\r\n watch,\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n } = useForm();\r\n const submitFormInput = useRef(null);\r\n\r\n const dispatch = useDispatch();\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n\r\n const email = profileInfo ? profileInfo.email : null;\r\n const [islandId, setIslandId] = useState(\"1\"); // Preselect Oahu on island dropdown\r\n const [selectedAddrOption, setSelectedAddrOption] = useState([]);\r\n const [selectedAptOption, setSelectedAptOption] = useState(null);\r\n const [enteredAddress, setEnteredAddress] = useState(null);\r\n const [enteredApartment, setEnteredApartment] = useState(null);\r\n const [required, setRequired] = useState(false);\r\n const [aptRequired, setAptRequired] = useState(false);\r\n const [emailValid, setEmailValid] = useState(true);\r\n //const [email, setEmail] = useState(\"\");\r\n\r\n const handleIslandChange = (event) => {\r\n setIslandId(event.target.value);\r\n // set of island enable search address control\r\n };\r\n\r\n const handleAddressChange = (selectedAddrOption) => {\r\n // remove error if it show\r\n setRequired(false);\r\n setAptRequired(false);\r\n // set of address enable search apartment control\r\n setSelectedAddrOption(selectedAddrOption);\r\n\r\n if (\r\n selectedAddrOption &&\r\n selectedAddrOption.obj &&\r\n selectedAddrOption.obj.isApartmentRequired === true\r\n ) {\r\n setAptRequired(true);\r\n }\r\n\r\n // save address to storage\r\n dispatch(setAddress(selectedAddrOption.obj));\r\n };\r\n\r\n const handleAptChange = (apt) => {\r\n setSelectedAptOption(apt);\r\n // if apartment control find data than that update address in storage\r\n if (apt && apt.obj) {\r\n dispatch(setAddress(apt.obj));\r\n }\r\n };\r\n\r\n const handleShowRequiredMsg = (state) => {\r\n setRequired(state);\r\n };\r\n\r\n const onSubmit = (data) => {\r\n setEmailValid(true);\r\n dispatch(setProfileEmail(data.email));\r\n };\r\n const onInvalid = (data) => {\r\n setEmailValid(false);\r\n };\r\n\r\n const getErrorState = (fieldName) => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = (fieldName) => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n const validateNotEmpty = (value, validationFuction) => {\r\n //if something entered validation will call\r\n if (value) {\r\n return validationFuction();\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n // watch email work as handleEmail onChange but in hook from framework\r\n let emailValue = watch(\"email\");\r\n React.useEffect(() => {\r\n console.log(\"AddressLookup useEffect emailValue\", emailValue);\r\n if (emailValue) {\r\n setEmailValid(false);\r\n submitFormInput.current.click();\r\n } else {\r\n setEmailValid(true);\r\n }\r\n }, [emailValue]);\r\n\r\n useEffect(() => {\r\n console.log(\"AddressLookup useEffect all\");\r\n initState();\r\n }, []);\r\n\r\n const initState = () => {\r\n dispatch(setHasAccount(false));\r\n dispatch(resetAddressHaveServices());\r\n // use this function set state to inital values\r\n // this could be used for global init but since this is being introduced\r\n //after core development has been done only using it for a specific use case\r\n };\r\n\r\n return (\r\n <>\r\n <Grid container spacing={2} sx={{ mt: 2 }}>\r\n <Grid item xs={8}>\r\n <SelectIsland handleIslandChange={handleIslandChange} />\r\n </Grid>\r\n </Grid>\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }, mt: 1 }}\r\n >\r\n <Grid item xs={4}>\r\n <AddressSearch\r\n enteredAddress={enteredAddress}\r\n setEnteredAddress={setEnteredAddress}\r\n islandId={islandId}\r\n onSelect={(value) => handleAddressChange(value)}\r\n required={required}\r\n />\r\n </Grid>\r\n <Grid item xs={4}>\r\n <AptSearch\r\n enteredApartment={enteredApartment}\r\n setEnteredApartment={setEnteredApartment}\r\n mainAddress={selectedAddrOption}\r\n selectedApt={selectedAptOption}\r\n onSelect={(value) => handleAptChange(value)}\r\n required={aptRequired}\r\n />\r\n </Grid>\r\n </Grid>\r\n <Grid container direction=\"row\" spacing={2} sx={{ mt: 1 }}>\r\n <Grid item lg={3}>\r\n <form\r\n onSubmit={handleSubmit(onSubmit, onInvalid)}\r\n onKeyDown={disableEnterKey}\r\n >\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n\r\n <TextField\r\n label=\"Email Address\"\r\n fullWidth\r\n variant=\"standard\"\r\n helperText={getErrorMsg(\"email\")}\r\n error={getErrorState(\"email\")}\r\n {...register(\"email\", {\r\n validate: {\r\n isEmailValid: (v) =>\r\n validateNotEmpty(v, () => isEmailValid(v)) ||\r\n \"Email not valid\",\r\n isNotContainSpace: (v) =>\r\n validateNotEmpty(v, () => isNotContainSpace(v)) ||\r\n \"Space in email is not allowed\",\r\n },\r\n })}\r\n />\r\n </form>\r\n </Grid>\r\n </Grid>\r\n <p className=\"email-msg\">\r\n By providing us with your email, you are opting in to receive marketing\r\n messages from Hawaiian Telcom in accordance with our{\" \"}\r\n <a\r\n target=\"_blank\"\r\n href={process.env.REACT_APP_DNN + \"/aboutus/Privacy-Policy\"}\r\n >\r\n Privacy Policy\r\n </a>\r\n . Don’t worry, you can unsubscribe at any time.\r\n </p>\r\n <Grid container spacing={2} sx={{ mt: 0 }}>\r\n <Grid item xs={8}>\r\n <CheckAddressButton\r\n islandId={islandId}\r\n enteredAddress={enteredAddress}\r\n enteredApartment={enteredApartment}\r\n selectedAddress={\r\n selectedAddrOption && selectedAddrOption.obj\r\n ? selectedAddrOption.obj\r\n : null\r\n }\r\n campaignType={campaignType}\r\n email={email}\r\n emailValid={emailValid}\r\n showRequiredMsg={handleShowRequiredMsg}\r\n selectedAptOption={\r\n selectedAptOption && selectedAptOption.obj\r\n ? selectedAptOption.obj\r\n : null\r\n }\r\n />\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nimport \"../../css/main.css\";\r\n\r\nconst useStyles = makeStyles({\r\n h1: {\r\n fontSize: 36,\r\n lineHeight: \"46px\",\r\n fontWeight: \"bold\",\r\n marginBottom: 0,\r\n flexBasis: \"100%\"\r\n },\r\n p: {\r\n fontSize: 14,\r\n color: \"#535353\",\r\n margin: \"5px 0px\",\r\n flexBasis: \"100%\"\r\n }\r\n});\r\n\r\nexport function StepHeader({ title, text }) {\r\n const classes = useStyles();\r\n return (\r\n <div className=\"step-header\">\r\n <Typography className={classes.h1 + \" title\"} gutterBottom>\r\n {title}\r\n </Typography>\r\n <Typography className={classes.p} gutterBottom>\r\n {text}\r\n </Typography>\r\n </div>\r\n );\r\n}\r\n","import LocalApi from \"../localApi\";\r\nimport {\r\n send_GA4event_purchase,\r\n cartDeepCopyForGA4,\r\n} from \"../../analytics/ga4/ga4helper\";\r\n\r\nexport const OrderActions = {\r\n SET_ORDER_SUCCESS: \"SET_ORDER_SUCCESS\",\r\n SET_ORDER_FAILURE: \"SET_ORDER_FAILURE\",\r\n RESET_ORDER: \"RESET_ORDER\",\r\n SET_WARM_LEAD_SUCCESS: \"SET_WARM_LEAD_SUCCESS\",\r\n SET_WARM_LEAD_FAILURE: \"SET_WARM_LEAD_FAILURE\",\r\n RESET_WARM_LEAD: \"RESET_WARM_LEAD\",\r\n};\r\n\r\nexport const resetOrder = () => async (dispatch) => {\r\n await dispatch({\r\n type: OrderActions.RESET_ORDER,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const placeOrder = (order) => async (dispatch, getState) => {\r\n try {\r\n console.log(\"GA4 order\", order);\r\n const completeOrder = {\r\n account: {\r\n userName: order.userName,\r\n password: order.password,\r\n },\r\n sourceId: \"BUNDLES\",\r\n mduId: \"\",\r\n };\r\n\r\n //console.log(\"call /api/order:\", completeOrder);\r\n // get completeOrder from state.orderReducer\r\n var response = await LocalApi.post(`/api/order`, completeOrder);\r\n var orderWithResponsData = {\r\n ...completeOrder,\r\n orderResponse: response.data,\r\n };\r\n //TODOGA4 add purchse event here\r\n console.log(\"GA4 order \", response.data); // response.data.internalOrderId\r\n const { cart } = getState().cart;\r\n const cartCopy = cartDeepCopyForGA4(cart);\r\n console.log(\"GA4 order oldCartCopy \", cartCopy);\r\n if (response?.data?.internalOrderId) {\r\n send_GA4event_purchase(cartCopy, response.data.internalOrderId);\r\n }\r\n dispatch({\r\n type: OrderActions.SET_ORDER_SUCCESS,\r\n payload: orderWithResponsData,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: OrderActions.SET_ORDER_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const resetWarmLead = () => async (dispatch) => {\r\n await dispatch({\r\n type: OrderActions.RESET_WARM_LEAD,\r\n payload: null,\r\n });\r\n};\r\n\r\nexport const createWarmLead = (warmLead) => async (dispatch) => {\r\n let warmLeadInfo = {\r\n firstName: warmLead.firstName,\r\n lastName: warmLead.lastName,\r\n phone: warmLead.phone,\r\n bestTimeToCall: warmLead.bestTimeToCall,\r\n email: warmLead.email,\r\n tvChecked: warmLead.tvChecked,\r\n hsiChecked: warmLead.hsiChecked,\r\n fiberChecked: warmLead.fiberChecked,\r\n accountNumber: warmLead.accountNumber,\r\n };\r\n\r\n try {\r\n await LocalApi.post(`/api/order/createWarmLead`, warmLeadInfo);\r\n dispatch({\r\n type: OrderActions.SET_WARM_LEAD_SUCCESS,\r\n payload: warmLeadInfo,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: OrderActions.SET_WARM_LEAD_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n","\r\nimport React, { useState } from \"react\";\r\nimport { Alert, Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Link, TextField } from \"@mui/material\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\n\r\nexport default function LoginDialog(props) {\r\n const { open, forgotPassword, login } = props;\r\n const [required, setRequired] = useState(false);\r\n const [pwRequired, setpwRequired] = useState(false);\r\n const [salesRepId, setSalesRepId] = useState(null);\r\n const [password, setPassword] = useState(null);\r\n const auth = useSelector((state) => state.auth);\r\n\r\n const salesRepIdChange = (value) => {\r\n if (!value || value === '')\r\n setRequired(true);\r\n else\r\n setRequired(false);\r\n setSalesRepId(value);\r\n }\r\n const passwordChange = (value) => {\r\n if (!value || value === '')\r\n setpwRequired(true);\r\n else\r\n setpwRequired(false);\r\n setPassword(value);\r\n }\r\n const chkValidation = () => {\r\n if (!salesRepId)\r\n setRequired(true);\r\n if (!password)\r\n setpwRequired(true);\r\n if (salesRepId && password)\r\n login(salesRepId, password);\r\n }\r\n return (\r\n <Dialog open={open}>\r\n <DialogTitle>Sign In</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText>\r\n To continue to this website, please sign in here.\r\n </DialogContentText>\r\n\r\n <TextField\r\n autoFocus\r\n required\r\n margin=\"dense\"\r\n label=\"SalesRepId\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={required}\r\n helperText={required ? 'Required!' : ' '}\r\n onChange={e => salesRepIdChange(e.target.value.trim())}\r\n />\r\n <TextField\r\n required\r\n margin=\"dense\"\r\n id=\"password\"\r\n label=\"Password\"\r\n type=\"password\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={pwRequired}\r\n helperText={pwRequired ? 'Required!' : ' '}\r\n onChange={e => passwordChange(e.target.value.trim())}\r\n\r\n />\r\n </DialogContent>\r\n {auth.error ? <Alert severity=\"error\">{auth.error}</Alert> : ''}\r\n <DialogActions sx={{ flexDirection: 'column' }}>\r\n <Button fullWidth disabled={auth.loading} color=\"primary\" variant=\"contained\" onClick={e => chkValidation()}>\r\n {auth.loading ? <CircularProgress disableShrink size='1.6rem' /> : 'Login'}\r\n </Button>\r\n <Link component=\"button\" disabled={auth.loading} underline='none' variant=\"subtitle1\" style={{ padding: 'inherit' }} onClick={forgotPassword}>Forgot Password</Link>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\n","import React, { useState } from \"react\";\r\nimport {\r\n Alert,\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n Link,\r\n TextField,\r\n} from \"@mui/material\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport default function ForgotPassword(props) {\r\n const { open, handleBackToLogin, verifyCode } = props;\r\n const [required, setRequired] = useState(false);\r\n const [salesRepId, setSalesRepId] = useState(null);\r\n const auth = useSelector((state) => state.auth);\r\n const salesRepIdChange = (value) => {\r\n if (!value || value === \"\") {\r\n setRequired(true);\r\n } else {\r\n setRequired(false);\r\n setSalesRepId(value);\r\n }\r\n };\r\n const chkValidation = () => {\r\n if (salesRepId) {\r\n verifyCode(salesRepId);\r\n setSalesRepId(null);\r\n } else setRequired(true);\r\n };\r\n const backToLogin = () => {\r\n setSalesRepId(null);\r\n handleBackToLogin();\r\n };\r\n return (\r\n <Dialog open={open}>\r\n <DialogTitle>Forgot Password </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText>\r\n Enter your SalesRepId, using resistered email we'll send you a message\r\n with recovery code. So you can reset Password.\r\n </DialogContentText>\r\n <TextField\r\n autoFocus\r\n margin=\"dense\"\r\n label=\"SalesRepId\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={required}\r\n helperText={required ? \"Required!\" : \" \"}\r\n onChange={(e) => salesRepIdChange(e.target.value.trim())}\r\n />\r\n </DialogContent>\r\n {auth.error ? <Alert severity=\"error\">{auth.error}</Alert> : \"\"}\r\n\r\n <DialogActions sx={{ flexDirection: \"column\" }}>\r\n <Button\r\n fullWidth\r\n color=\"primary\"\r\n disabled={required || auth.loading}\r\n variant=\"contained\"\r\n onClick={(e) => chkValidation()}\r\n >\r\n {auth.loading ? (\r\n <CircularProgress disableShrink size=\"1.6rem\" />\r\n ) : (\r\n \"Submit\"\r\n )}\r\n </Button>\r\n <Link\r\n component=\"button\"\r\n underline=\"none\"\r\n variant=\"subtitle1\"\r\n style={{ padding: \"inherit\" }}\r\n onClick={(e) => backToLogin()}\r\n >\r\n Back to Login\r\n </Link>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n","\r\n\r\nimport React, { useState } from \"react\";\r\nimport { Alert, Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Link, TextField } from \"@mui/material\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport default function CodeVerificationDialog(props) {\r\n\r\n const { open, resendCode, handleBackToLogin, handleResetPassword } = props;\r\n const [required, setRequired] = useState(false);\r\n const [code, setCode] = useState(null);\r\n const auth = useSelector((state) => state.auth);\r\n\r\n const codeChange = (value) => {\r\n if(!value || value==='')\r\n setRequired(true);\r\n else\r\n setRequired(false);\r\n setCode(value);\r\n }\r\n const chkValidation = () => {\r\n if(code)\r\n handleResetPassword(code)\r\n else\r\n setRequired(true);\r\n }\r\n return (\r\n <Dialog open={open}>\r\n <DialogTitle>Verify Code </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText>\r\n Please Check your email({auth.email}) and follow the instructions.\r\n </DialogContentText>\r\n <TextField\r\n autoFocus\r\n margin=\"dense\"\r\n label=\"Code\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={required}\r\n helperText={required ? 'Required!' : ' '}\r\n onChange={e => codeChange(e.target.value.trim())}\r\n />\r\n </DialogContent>\r\n {auth.error?<Alert severity=\"error\">{auth.error}</Alert>:''}\r\n\r\n <DialogActions sx={{ flexDirection: 'column' }}>\r\n\r\n <Button fullWidth color=\"primary\" disabled={required || auth.loading} variant=\"contained\" onClick={ e =>chkValidation()}>\r\n {auth.loading ? <CircularProgress disableShrink size='1.6rem' />:'Submit'}</Button>\r\n <Link component=\"button\" variant=\"subtitle1\" underline='none' style={{ padding: 'inherit' }} onClick={resendCode}>I have not received Recovery Code, Send Again</Link>\r\n <Link component=\"button\" underline='none' variant=\"subtitle1\" style={{ padding: 'inherit' }} onClick={handleBackToLogin}>Back to Login</Link>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\n","import React, { useState, useEffect } from \"react\";\r\nimport {\r\n Alert,\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n Link,\r\n TextField,\r\n Tooltip,\r\n tooltipClasses,\r\n} from \"@mui/material\";\r\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport default function ResetPassword(props) {\r\n const { open, handleBackToLogin, resetPassword } = props;\r\n const [required, setRequired] = useState(false);\r\n const [pwRequired, setpwRequired] = useState(false);\r\n const [password, setPassword] = useState(null);\r\n const [conPassword, setConPassword] = useState(null);\r\n const auth = useSelector((state) => state.auth);\r\n\r\n const [error, setError] = useState(auth.error);\r\n\r\n useEffect(() => {\r\n setError(auth.error);\r\n }, [auth]);\r\n const passwordChange = (value) => {\r\n setPassword(value);\r\n if (!value || value === \"\") setRequired(true);\r\n else setRequired(false);\r\n };\r\n const conPasswordChange = (value) => {\r\n setConPassword(value);\r\n if (!value || value === \"\") setpwRequired(true);\r\n else setpwRequired(false);\r\n };\r\n const chkValidation = () => {\r\n if (conPassword && password == conPassword) {\r\n resetPassword(conPassword);\r\n setError(\"\");\r\n }\r\n if (!password) setRequired(true);\r\n if (!conPassword) setpwRequired(true);\r\n if (conPassword != password) setError(\"Password mismatch\");\r\n };\r\n const HtmlTooltip = styled(({ className, ...props }) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n ))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n maxWidth: 250,\r\n fontSize: theme.typography.pxToRem(12),\r\n },\r\n }));\r\n return (\r\n <Dialog open={open}>\r\n <DialogTitle>Reset Password </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText>\r\n Please add a strong and secure password.\r\n <HtmlTooltip\r\n placement=\"left-start\"\r\n title={\r\n <React.Fragment>\r\n <ul>\r\n <li>Password must not contain your username</li>\r\n <li>It must be 8 to 20 characters long</li>\r\n <li>Passwords must contain A number 0 through 9 </li>\r\n <li>It must contain atleast one Lowercase characters </li>\r\n <li>It must contain atleast one Uppercase characters </li>\r\n <li>\r\n There must be a Nonalphanumeric characters: ~!@#$%^&*_-+=|()\r\n {}[]:;,.?/.\"\"{\" \"}\r\n </li>\r\n </ul>\r\n </React.Fragment>\r\n }\r\n >\r\n <InfoOutlinedIcon color=\"primary\" />\r\n </HtmlTooltip>\r\n </DialogContentText>\r\n <TextField\r\n autoFocus\r\n margin=\"dense\"\r\n label=\"New Password\"\r\n type=\"password\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={required}\r\n helperText={required ? \"Required!\" : \" \"}\r\n onChange={(e) => passwordChange(e.target.value)}\r\n />\r\n <TextField\r\n margin=\"dense\"\r\n label=\"Confirm New Password\"\r\n type=\"password\"\r\n fullWidth\r\n variant=\"standard\"\r\n error={pwRequired}\r\n helperText={pwRequired ? \"Required!\" : \" \"}\r\n onChange={(e) => conPasswordChange(e.target.value)}\r\n />\r\n </DialogContent>\r\n {error ? <Alert severity=\"error\">{error}</Alert> : \"\"}\r\n <DialogActions sx={{ flexDirection: \"column\" }}>\r\n <Button\r\n fullWidth\r\n color=\"primary\"\r\n disabled={required || auth.loading}\r\n variant=\"contained\"\r\n onClick={(e) => chkValidation()}\r\n >\r\n {auth.loading ? (\r\n <CircularProgress disableShrink size=\"1.6rem\" />\r\n ) : (\r\n \"Submit\"\r\n )}\r\n </Button>\r\n <Link\r\n component=\"button\"\r\n underline=\"none\"\r\n variant=\"subtitle1\"\r\n style={{ padding: \"inherit\" }}\r\n onClick={handleBackToLogin}\r\n >\r\n Back to Login\r\n </Link>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n","import LocalApi from \"../localApi\";\r\n\r\nexport const AuthActions = {\r\n GET_IS_AUTH_REQUIRED_SUCCESS: \"GET_IS_AUTH_REQUIRED_SUCCESS\",\r\n GET_IS_AUTH_REQUIRED_FAILURE: \"GET_IS_AUTH_REQUIRED_FAILURE\",\r\n AUTH_CLEAR: \"AUTH_CLEAR\",\r\n LOGIN_SUCCESS: \"LOGIN_SUCCESS\",\r\n LOGIN_FAILURE: \"LOGIN_FAILURE\",\r\n FORGOTPASSWORD_SUCCESS: \"FORGOTPASSWORD_SUCCESS\",\r\n FORGOTPASSWORD_FAILURE: \"FORGOTPASSWORD_FAILURE\",\r\n VERIFY_CODE_SUCCESS: \"VERIFY_CODE_SUCCESS\",\r\n VERIFY_CODE_FAILURE: \"VERIFY_CODE_FAILURE\",\r\n UPDATE_PASSWORD_SUCCESS: \"UPDATE_PASSWORD_SUCCESS\",\r\n UPDATE_PASSWORD_FAILURE: \"UPDATE_PASSWORD_FAILURE\",\r\n UPDATE_LOGIN_FORM_MODE: \"UPDATE_LOGIN_FORM_MODE\",\r\n AUTH_LOADING: \"AUTH_LOADING\",\r\n};\r\n\r\nexport const isAuthRequired = (campaignType) => async (dispatch, getState) => {\r\n try {\r\n dispatch({\r\n type: AuthActions.AUTH_CLEAR,\r\n });\r\n const response = await LocalApi.get(\r\n `/api/Auth/isAuthRequired/${campaignType}`\r\n );\r\n const payload = { authIsRequired: response.data, campaignType };\r\n\r\n dispatch({\r\n type: AuthActions.GET_IS_AUTH_REQUIRED_SUCCESS,\r\n payload: payload,\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AuthActions.GET_IS_AUTH_REQUIRED_FAILURE,\r\n payload: error,\r\n });\r\n }\r\n};\r\n\r\nexport const authenticateUser =\r\n (salesRepId, password, campaignType) => async (dispatch, getState) => {\r\n const auth = getState().auth;\r\n try {\r\n dispatch({\r\n type: AuthActions.AUTH_LOADING,\r\n });\r\n const response = await LocalApi.post(`/api/Auth`, {\r\n salesRepId,\r\n password,\r\n campaignType,\r\n });\r\n dispatch({\r\n type: AuthActions.LOGIN_SUCCESS,\r\n payload: { salesRepId, loginFormMode: \"closed\" },\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AuthActions.LOGIN_FAILURE,\r\n payload: error.response.data,\r\n });\r\n }\r\n };\r\n\r\nexport const checkForgotPassword = (salesRepId) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: AuthActions.AUTH_LOADING,\r\n });\r\n const response = await LocalApi.put(\r\n `/api/Auth/Forgotpassword/${salesRepId}`\r\n );\r\n dispatch({\r\n type: AuthActions.FORGOTPASSWORD_SUCCESS,\r\n payload: { ...response.data, loginFormMode: \"verifyCode\" },\r\n });\r\n } catch (error) {\r\n console.log(\"error.response\", error.response);\r\n dispatch({\r\n type: AuthActions.FORGOTPASSWORD_FAILURE,\r\n payload: error.response?.data,\r\n });\r\n }\r\n};\r\n\r\nexport const checkVerifyCode = (salesRepId, code) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: AuthActions.AUTH_LOADING,\r\n });\r\n const response = await LocalApi.put(`/api/Auth/Verifyforgotpasswordcode`, {\r\n salesRepId,\r\n code,\r\n });\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_SUCCESS,\r\n payload: { ...response.data, loginFormMode: \"resetPassword\" },\r\n });\r\n } catch (error) {\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_FAILURE,\r\n payload: error.response.data,\r\n });\r\n }\r\n};\r\n\r\nexport const updatePassword =\r\n (newPassword, salesRepId, code) => async (dispatch) => {\r\n try {\r\n dispatch({\r\n type: AuthActions.AUTH_LOADING,\r\n });\r\n const response = await LocalApi.put(`/api/Auth/updatePassword`, {\r\n newPassword,\r\n salesRepId,\r\n code,\r\n });\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_SUCCESS,\r\n payload: { salesRepId, loginFormMode: \"login\" },\r\n });\r\n } catch (error) {\r\n if (error.response.data && error.response.data.code) {\r\n if (error.response.data.code > 4) {\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_FAILURE,\r\n payload:\r\n \"Error updating password. Please review password requirements.\",\r\n });\r\n } else {\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_FAILURE,\r\n payload: error.response.data.message,\r\n });\r\n }\r\n } else {\r\n dispatch({\r\n type: AuthActions.VERIFY_CODE_FAILURE,\r\n payload: error.response.data,\r\n });\r\n }\r\n }\r\n };\r\nexport const changeFormMode = (formMode) => (dispatch) => {\r\n dispatch({\r\n type: AuthActions.UPDATE_LOGIN_FORM_MODE,\r\n payload: formMode,\r\n });\r\n};\r\n","\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport LoginDialog from \"../login/LoginDialog\";\r\nimport ForgotPassword from \"../login/ForgotPassword\";\r\nimport CodeVerificationDialog from \"../login/CodeVerificationDialog\";\r\nimport ResetPassword from \"../login/ResetPassword\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { authenticateUser, changeFormMode, checkForgotPassword, checkVerifyCode, updatePassword } from \"../../redux/actions/authActions\";\r\n\r\nexport function LoginForm(props) {\r\n const { campaignType,auth } = props;\r\n\r\n //const [openLogin, setOpenLogin] = useState(true);\r\n const [verificationCode, setVerificationCode] = useState(false);\r\n const [salesRepName, setSalesRepName] = useState(false);\r\n const dispatch = useDispatch();\r\n\r\n const login = async (salesRepId,password) => {\r\n await dispatch(authenticateUser(salesRepId,password,campaignType));\r\n };\r\n\r\n const forgotPassword = () => {\r\n dispatch(changeFormMode('forgotPassword'))\r\n };\r\n const handleBackToLogin = () => {\r\n dispatch(changeFormMode('login'));\r\n };\r\n\r\n const verifyCode = async (salesRepId) => {\r\n setSalesRepName(salesRepId);\r\n await dispatch(checkForgotPassword(salesRepId));\r\n };\r\n const handleResetPassword = async (code) => {\r\n setVerificationCode(code);\r\n await dispatch(checkVerifyCode(salesRepName,code));\r\n };\r\n const resendCode =async () => {\r\n await dispatch(checkForgotPassword(salesRepName));\r\n };\r\n const resetPassword = async (newPassword) => {\r\n await dispatch(updatePassword(newPassword,salesRepName,verificationCode));\r\n };\r\n return (\r\n <>\r\n <LoginDialog open={auth.loginFormMode ==='login'}\r\n login={login}\r\n forgotPassword={forgotPassword}\r\n></LoginDialog>\r\n<ForgotPassword\r\n open={auth.loginFormMode ==='forgotPassword'}\r\n handleBackToLogin={handleBackToLogin}\r\n verifyCode={verifyCode}\r\n></ForgotPassword>\r\n<CodeVerificationDialog\r\n open={auth.loginFormMode ==='verifyCode'}\r\n //open={openVerifyCode}\r\n handleResetPassword={handleResetPassword}\r\n resendCode={resendCode}\r\n handleBackToLogin={handleBackToLogin}\r\n></CodeVerificationDialog>\r\n<ResetPassword\r\n open={auth.loginFormMode ==='resetPassword'}\r\n //open={openRP}\r\n resetPassword={resetPassword}\r\n handleBackToLogin={handleBackToLogin}\r\n></ResetPassword>\r\n</>\r\n )\r\n}","import React from \"react\";\r\n\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nimport \"../../css/main.css\";\r\n\r\nconst useStyles = makeStyles({\r\n h1: {\r\n fontSize: 36,\r\n lineHeight: \"46px\",\r\n fontWeight: \"bold\",\r\n marginBottom: 0,\r\n flexBasis: \"100%\"\r\n },\r\n p: {\r\n fontSize: 14,\r\n color: \"#535353\",\r\n margin: \"5px 0px\",\r\n flexBasis: \"100%\"\r\n }\r\n});\r\n\r\nexport function StepHeadernew({ title, text }) {\r\n const classes = useStyles();\r\n return (\r\n <div className=\"step-header\">\r\n <Typography className={classes.h1 + \" title\"} gutterBottom>\r\n {title}\r\n </Typography>\r\n <Typography className={classes.p} gutterBottom>\r\n {text}\r\n <a style={{ textDecoration: \"none\" }} href=\"https://hawaiiantel.com/address-assistance\">Click here.</a>\r\n </Typography>\r\n </div>\r\n );\r\n}","import React, { useEffect, useState } from \"react\";\r\n\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { AddressLookup } from \"./AddressLookup\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport {\r\n setCampaignSource,\r\n clearCampaign,\r\n} from \"./../../redux/actions/campaignActions\";\r\nimport { resetOrder, resetWarmLead } from \"./../../redux/actions/orderActions\";\r\nimport { setStep } from \"../../redux/actions/stepActions\";\r\nimport { LoginForm } from \"../login/LoginForm\";\r\nimport { isAuthRequired } from \"../../redux/actions/authActions\";\r\nimport { StepHeadernew } from \"./StepHeadernew\";\r\n\r\nexport function AddressVerification(props) {\r\n const dispatch = useDispatch();\r\n const campaignState = useSelector((state) => state.campaign);\r\n const { campaign } = campaignState;\r\n const history = useHistory();\r\n const { campaignType } = props.match.params; //props;\r\n const auth = useSelector((state) => state.auth);\r\n const campaignMismatch =\r\n campaign && campaign.campaignType && campaign.campaignType != campaignType;\r\n\r\n useEffect(() => {\r\n dispatch(isAuthRequired(campaignType));\r\n }, []);\r\n\r\n useEffect(() => {\r\n window.onpopstate = (e) => {\r\n if (e.type == \"popstate\" && campaignMismatch) {\r\n //history.replace(\"/addressVerification/\" + campaign.campaignType);\r\n }\r\n };\r\n window.onload = (e) => {\r\n dispatch(clearCampaign());\r\n };\r\n }, []);\r\n useEffect(() => {\r\n window.onpopstate = (e) => {\r\n if (e.type == \"popstate\" && campaignMismatch) {\r\n //history.replace(\"/addressVerification/\" + campaign.campaignType);\r\n }\r\n };\r\n window.onload = (e) => {\r\n dispatch(clearCampaign());\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(resetOrder());\r\n dispatch(resetWarmLead());\r\n dispatch(setStep(-1));\r\n dispatch(setCampaignSource(null));\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n \r\n }, []);\r\n return (\r\n <>\r\n <StepHeadernew\r\n title=\"Check availability\"\r\n text=\"Aloha! Let’s get started with your address, and we’ll find the services available for you. Can’t find your address? \"\r\n />\r\n\r\n <AddressLookup campaignType={campaignType} />\r\n {auth && auth.authIsRequired && !auth.loggedInSalesRepId ? (\r\n <LoginForm campaignType={campaignType} auth={auth} />\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport './AddressLookupDigi.css';\r\n\r\nexport const AddressLookupDigiHeader = (props) => {\r\n const {view} = props; \r\n\r\n useEffect(() => {\r\n document.body.style = 'background-color: #F9F4F9';\r\n }, []);\r\n\r\n const campaignSource = useSelector((state) => state.campaign && state.campaign.campaignSource ? state.campaign.campaignSource : null);\r\n\r\n return (\r\n <>\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" } }}\r\n className={\"digiheaderGrid\"}\r\n >\r\n <Grid item xs={12} md={12} sx={{ pl: 1, pt: 1, pb: 1 }}>\r\n <div id=\"digiheader\">\r\n {view == \"confirm\"? <h1>Please confirm <b>your address</b></h1> : \r\n view == \"noQual\" ? <h1>We’re so sorry.</h1> : \r\n campaignSource == \"DA1ASWBannerCA\" ? <h1>Experience the difference of Fioptics, <b>now with FREE activation when you order online.</b></h1> : \r\n campaignSource == \"DA2FEBannerCA\" ? <h1>Experience the difference of Fioptics, <b>now with FREE activation when you order online.</b></h1> : \r\n campaignSource == \"DA3ESFBannerCA\" ? <h1>Experience the difference of Fioptics, <b>now with FREE activation when you order online.</b></h1> : \r\n campaignSource == \"DA4GBOBannerCA\" ? <h1>Experience the difference of Fioptics, <b>now with FREE activation when you order online.</b></h1> : \r\n campaignSource == \"DA5TFBannerCA\" ? <h1>Experience the difference of Fioptics, <b>now with FREE activation when you order online.</b></h1> : \r\n <h1>Find the best offer just for <b>you & your family...</b></h1>}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React, { useRef, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setAddress } from \"../../redux/actions/addressActions\";\r\nimport { setProfileEmail } from \"../../redux/actions/userActions\";\r\n\r\nimport Grid from \"@mui/material/Grid\";\r\nimport SelectIsland from \"./SelectIsland\";\r\nimport AddressSearch from \"./AddressSearch\";\r\nimport AptSearch from \"./AptSearch\";\r\nimport CheckAddressButton from \"./CheckAddressButton\";\r\nimport AlreadyHtCustomer from \"./AlreadyHtCustomer\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport {\r\n isEmailValid,\r\n isPhoneValid,\r\n isNotContainSpace\r\n} from \"../../lib/validation\";\r\nimport { AddressLookupDigiHeader } from \"./AddressLookupDigiHeader\";\r\nimport { disableEnterKey } from \"../../components/disableEnterKey\";\r\n\r\nexport function AddressLookupDigi(props) {\r\n const { campaignType, productVersionId, campaignSource } = props;\r\n\r\n const {\r\n watch,\r\n register,\r\n handleSubmit,\r\n formState: { errors }\r\n } = useForm();\r\n const submitFormInput = useRef(null);\r\n\r\n const dispatch = useDispatch();\r\n const profileInfo = useSelector(state => state.user.profileInfo);\r\n\r\n const email = profileInfo ? profileInfo.email : null;\r\n const [islandId, setIslandId] = useState(\"1\"); // Preselect Oahu on island dropdown\r\n const [selectedAddrOption, setSelectedAddrOption] = useState([]);\r\n const [selectedAptOption, setSelectedAptOption] = useState(null);\r\n const [enteredAddress, setEnteredAddress] = useState(null);\r\n const [enteredApartment, setEnteredApartment] = useState(null);\r\n const [required, setRequired] = useState(false);\r\n const [aptRequired, setAptRequired] = useState(false);\r\n const [emailValid, setEmailValid] = useState(true);\r\n //const [email, setEmail] = useState(\"\");\r\n\r\n const handleIslandChange = event => {\r\n setIslandId(event.target.value);\r\n // set of island enable search address control\r\n };\r\n\r\n const handleAddressChange = selectedAddrOption => {\r\n // remove error if it show\r\n setRequired(false);\r\n setAptRequired(false);\r\n // set of address enable search apartment control\r\n setSelectedAddrOption(selectedAddrOption);\r\n\r\n if (\r\n selectedAddrOption &&\r\n selectedAddrOption.obj &&\r\n selectedAddrOption.obj.isApartmentRequired === true\r\n ) {\r\n setAptRequired(true);\r\n }\r\n\r\n // save address to storage\r\n dispatch(setAddress(selectedAddrOption.obj));\r\n };\r\n\r\n const handleAptChange = apt => {\r\n setSelectedAptOption(apt);\r\n // if apartment control find data than that update address in storage\r\n if (apt && apt.obj) {\r\n dispatch(setAddress(apt.obj));\r\n }\r\n };\r\n\r\n const handleShowRequiredMsg = state => {\r\n setRequired(state);\r\n };\r\n\r\n const onSubmit = data => {\r\n setEmailValid(true);\r\n dispatch(setProfileEmail(data.email));\r\n };\r\n const onInvalid = data => {\r\n setEmailValid(false);\r\n };\r\n\r\n const getErrorState = fieldName => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = fieldName => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n const validateNotEmpty = (value, validationFuction) => {\r\n //if something entered validation will call\r\n if (value) {\r\n return validationFuction();\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n // watch email work as handleEmail onChange but in hook from framework\r\n let emailValue = watch(\"email\");\r\n React.useEffect(() => {\r\n if (emailValue) {\r\n setEmailValid(false);\r\n submitFormInput.current.click();\r\n } else {\r\n setEmailValid(true);\r\n }\r\n }, [emailValue]);\r\n\r\n return (\r\n <>\r\n <AddressLookupDigiHeader />\r\n\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }}}\r\n id=\"digiAddressContentContainer\"\r\n > \r\n\r\n <Grid item xs={12} sm={12} md={8} id=\"digiAddressLeftContentGrid\">\r\n <Grid\r\n columns={100}\r\n container\r\n spacing={0}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }}}\r\n > \r\n <Grid item xs={100} md={18} className={\"digiIslandGridItem\"}>\r\n <div id=\"digiIsland\">\r\n <SelectIsland handleIslandChange={handleIslandChange} mode=\"digicart\" />\r\n </div>\r\n </Grid>\r\n <Grid item xs={100} md={50} lg={50}\r\n className={\"digiAddressGridItem\"}> \r\n <div id=\"digiAddress\">\r\n <AddressSearch\r\n enteredAddress={enteredAddress}\r\n setEnteredAddress={setEnteredAddress}\r\n islandId={islandId}\r\n onSelect={value => handleAddressChange(value)}\r\n required={required}\r\n mode={\"digicart\"}\r\n />\r\n </div>\r\n </Grid>\r\n <Grid item xs={100} md={100} lg={10}\r\n className={\"digiAptGridItem\"}> \r\n <div id=\"digiApt\">\r\n <AptSearch\r\n enteredApartment={enteredApartment}\r\n setEnteredApartment={setEnteredApartment}\r\n mainAddress={selectedAddrOption}\r\n selectedApt={selectedAptOption}\r\n onSelect={value => handleAptChange(value)}\r\n required={aptRequired}\r\n mode={\"digicart\"}\r\n />\r\n </div>\r\n </Grid>\r\n <Grid item xs={100} sx={{ pl: 0, pt: 1, pb: 1 }} className={\"digiAddressHelpTextGrid digiAddressHelpTextGridTop\"}>\r\n <div className=\"digiAddressHelpText\"> \r\n <p>This site is protected by reCAPTCHA and the <a href=\"https://policies.google.com/privacy?hl=en\" target=\"_blank\">Google Privacy Policy</a> and <a href=\"https://policies.google.com/terms?hl=en\" target=\"_blank\">Terms of Service apply</a></p>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={4} sm={4} md={4} id=\"digiCheckGrid\">\r\n <div id=\"digiCheck\">\r\n <CheckAddressButton\r\n productVersionId={productVersionId}\r\n mode=\"digicart\"\r\n islandId={islandId}\r\n enteredAddress={enteredAddress}\r\n enteredApartment={enteredApartment}\r\n selectedAddress={\r\n selectedAddrOption && selectedAddrOption.obj\r\n ? selectedAddrOption.obj\r\n : null\r\n }\r\n campaignType={campaignType}\r\n email={email}\r\n emailValid={emailValid}\r\n showRequiredMsg={handleShowRequiredMsg}\r\n selectedAptOption={\r\n selectedAptOption && selectedAptOption.obj\r\n ? selectedAptOption.obj\r\n : null\r\n }\r\n campaignSource={campaignSource}\r\n />\r\n </div>\r\n <div id=\"existingCustomer\">\r\n <p id=\"existingCustomerHeader\">Already a Customer?</p> \r\n <p id=\"existingCustomerLink\">Please contact Customer Service <br className=\"desktop\"/>at <a href=\"tel:808-643-3456\">808-643-3456</a> or <a href=\"tel:877-482-2211\">877-482-2211</a>. <br/>Available 24 hrs. </p> \r\n </div>\r\n </Grid>\r\n <Grid item xs={100} md={100} sx={{ pl: 0, pt: 1, pb: 1 }} className={\"digiAddressHelpTextGrid digiAddressHelpTextGridBottom\"}>\r\n <div className=\"digiAddressHelpText\"> \r\n <p>This site is protected by reCAPTCHA and the <a href=\"https://policies.google.com/privacy?hl=en\" target=\"_blank\">Google Privacy Policy</a> and <a href=\"https://policies.google.com/terms?hl=en\" target=\"_blank\">Terms of Service apply</a></p>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n\r\n <div style={{\"display\": \"none\"}}>\r\n <Grid container direction=\"row\" spacing={2} sx={{ mt: 1 }}>\r\n <Grid item lg={3}>\r\n <form onSubmit={handleSubmit(onSubmit, onInvalid)} onKeyDown={disableEnterKey}>\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n\r\n </form>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container spacing={2} sx={{ mt: 0 }}>\r\n <Grid item sm={8} md={8}>\r\n <AlreadyHtCustomer campaignType={campaignType} />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\n\r\nimport { useDispatch } from \"react-redux\";\r\nimport { AddressLookupDigi } from \"./AddressLookupDigi\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport { resetOrder, resetWarmLead } from \"../../redux/actions/orderActions\";\r\nimport { setCampaignSource } from \"../../redux/actions/campaignActions\";\r\nimport { StepHeadernew } from \"./StepHeadernew\";\r\n\r\nexport function AddressVerificationDigi(props) {\r\n const dispatch = useDispatch();\r\n const { campaignType, productVersionId, campaignSource } = props.match.params;\r\n const routePath = window.location.pathname;\r\n const route =\r\n routePath.split(\"/\")[1] == \"cart\"\r\n ? routePath.split(\"/\")[2]\r\n : routePath.split(\"/\")[1];\r\n\r\n useEffect(() => {\r\n dispatch(resetOrder());\r\n dispatch(resetWarmLead());\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cs =\r\n campaignSource && campaignSource.length > 0 ? campaignSource : \"digicart\";\r\n dispatch(setCampaignSource(cs));\r\n }, [campaignSource]);\r\n\r\n React.useEffect(() => {\r\n \r\n }, []);\r\n return (\r\n <>\r\n <div style={{ display: \"none\" }}>\r\n <StepHeadernew\r\n title=\"Check availability\"\r\n text=\"Aloha! Let’s get started with your address, and we’ll find the services available for you. Can’t find your address? \"\r\n />\r\n </div>\r\n {route === \"digicart\" && (\r\n <AddressLookupDigi\r\n campaignType={campaignType}\r\n productVersionId={productVersionId}\r\n campaignSource={campaignSource}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n","import React, { useRef, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setAddress } from \"../../redux/actions/addressActions\";\r\nimport { setProfileEmail } from \"../../redux/actions/userActions\";\r\n\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport SelectIsland from \"./SelectIsland\";\r\nimport AddressSearch from \"./AddressSearch\";\r\nimport AptSearch from \"./AptSearch\";\r\nimport CheckAddressButton from \"./CheckAddressButton\";\r\nimport AlreadyHtCustomer from \"./AlreadyHtCustomer\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport {\r\n isEmailValid,\r\n isPhoneValid,\r\n isNotEmpty,\r\n isNotContainSpace,\r\n} from \"../../lib/validation\";\r\nimport { AddressLookupMiniHeader } from \"./AddressLookupMiniHeader\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { disableEnterKey } from \"../../components/disableEnterKey\";\r\n\r\nconst useStyles = makeStyles({\r\n error: {\r\n color: \"red\",\r\n fontSize: \"12px\",\r\n marginTop: \"3px\",\r\n },\r\n uppercase: {\r\n textTransform: \"uppercase\",\r\n },\r\n});\r\n\r\nexport function AddressLookupMini(props) {\r\n const classes = useStyles();\r\n const { campaignType, productVersionId, campaignSource } = props;\r\n const isBusiness = campaignType.toLowerCase() === \"business\";\r\n const isEmailRequired = isBusiness;\r\n\r\n const {\r\n watch,\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n } = useForm();\r\n const submitFormInput = useRef(null);\r\n\r\n const dispatch = useDispatch();\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n\r\n const email = isBusiness ? null : profileInfo ? profileInfo.email : null;\r\n const [islandId, setIslandId] = useState(\"1\"); // Preselect Oahu on island dropdown\r\n const [selectedAddrOption, setSelectedAddrOption] = useState([]);\r\n const [selectedAptOption, setSelectedAptOption] = useState(null);\r\n const [enteredAddress, setEnteredAddress] = useState(null);\r\n const [enteredApartment, setEnteredApartment] = useState(null);\r\n const [required, setRequired] = useState(false);\r\n const [emailRequired, setEmailRequired] = useState(false);\r\n const [aptRequired, setAptRequired] = useState(false);\r\n const [emailValid, setEmailValid] = useState(true);\r\n\r\n const handleIslandChange = (event) => {\r\n setIslandId(event.target.value);\r\n // set of island enable search address control\r\n };\r\n\r\n const handleAddressChange = (selectedAddrOption) => {\r\n // remove error if it show\r\n setRequired(false);\r\n setAptRequired(false);\r\n // set of address enable search apartment control\r\n setSelectedAddrOption(selectedAddrOption);\r\n\r\n if (\r\n selectedAddrOption &&\r\n selectedAddrOption.obj &&\r\n selectedAddrOption.obj.isApartmentRequired === true\r\n ) {\r\n setAptRequired(true);\r\n }\r\n\r\n // save address to storage\r\n dispatch(setAddress(selectedAddrOption.obj));\r\n };\r\n\r\n const handleAptChange = (apt) => {\r\n setSelectedAptOption(apt);\r\n // if apartment control find data than that update address in storage\r\n if (apt && apt.obj) {\r\n dispatch(setAddress(apt.obj));\r\n }\r\n };\r\n\r\n const handleShowRequiredMsg = (state) => {\r\n setRequired(state);\r\n };\r\n\r\n const handleShowEmailRequiredMsg = (state) => {\r\n setEmailRequired(state);\r\n };\r\n\r\n const validateEmailNotEmpty = (email) => {\r\n if (isNotEmpty(email) || !isEmailRequired) {\r\n setEmailRequired(false);\r\n } else {\r\n setEmailRequired(true);\r\n }\r\n return true;\r\n };\r\n \r\n\r\n const onSubmit = (data) => {\r\n setEmailValid(true);\r\n if (!isBusiness) dispatch(setProfileEmail(data.email));\r\n };\r\n const onInvalid = (data) => {\r\n setEmailValid(false);\r\n };\r\n\r\n const getErrorState = (fieldName) => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = (fieldName) => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n const validateNotEmpty = (value, validationFuction) => {\r\n //if something entered validation will call\r\n if (value) {\r\n return validationFuction();\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n // watch email work as handleEmail onChange but in hook from framework\r\n let emailValue = watch(\"email\");\r\n React.useEffect(() => {\r\n console.log(\"AddressLookupMini useEffect emailValue\", emailValue);\r\n if (emailValue) {\r\n setEmailValid(false);\r\n submitFormInput.current.click();\r\n } else {\r\n setEmailValid(true);\r\n }\r\n }, [emailValue]);\r\n\r\n return (\r\n <>\r\n <Box id=\"controlsBox\" sx={{ flexGrow: 1, maxWidth: 1000 }}>\r\n {/* <Grid item xs={100} sm={36} md={21}> */}\r\n <Grid container spacing={1} columns={100}>\r\n <Grid item xs={100} sm={100} md={85}>\r\n <div class=\"item-container\">\r\n <div id=\"headParagraph\">\r\n <p>Check Your Fioptics Availability</p>{\" \"}\r\n {/* Adding new paragraph */}\r\n </div>\r\n <Grid container spacing={1} columns={79}>\r\n <Grid item xs={79} sm={16} md={8}>\r\n <div class=\"item-container\">\r\n <div id=\"miniIsland\">\r\n <SelectIsland\r\n handleIslandChange={handleIslandChange}\r\n mode=\"minicart\"\r\n />\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={58} sm={65} md={37}>\r\n <div class=\"item-container\">\r\n <div id=\"miniAddress\">\r\n <AddressSearch\r\n enteredAddress={enteredAddress}\r\n setEnteredAddress={setEnteredAddress}\r\n islandId={islandId}\r\n onSelect={(value) => handleAddressChange(value)}\r\n required={required}\r\n mode={\"minicart\"}\r\n />\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={21} sm={14} md={12}>\r\n <div class=\"item-container\">\r\n <div id=\"miniApt\">\r\n <AptSearch\r\n enteredApartment={enteredApartment}\r\n setEnteredApartment={setEnteredApartment}\r\n mainAddress={selectedAddrOption}\r\n selectedApt={selectedAptOption}\r\n onSelect={(value) => handleAptChange(value)}\r\n required={aptRequired}\r\n mode={\"minicart\"}\r\n />\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={79} sm={80} md={21}>\r\n <div class=\"item-container\">\r\n <div id=\"email\">\r\n <form\r\n onSubmit={handleSubmit(onSubmit, onInvalid)}\r\n onKeyDown={disableEnterKey}\r\n >\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n <TextField\r\n label=\"Email *\"\r\n placeholder=\"Email *\"\r\n fullWidth\r\n variant=\"standard\"\r\n // helperText={\"Email\"}\r\n error={getErrorState(\"email\")}\r\n {...register(\"email\", {\r\n validate: {\r\n isEmailNotEmpty: (v) =>\r\n validateEmailNotEmpty(v),\r\n isEmailValid: (v) =>\r\n validateNotEmpty(v, () => isEmailValid(v)) ||\r\n \"Email not valid\",\r\n isNotContainSpace: (v) =>\r\n validateNotEmpty(v, () =>\r\n isNotContainSpace(v)\r\n ) || \"Space in email is not allowed\",\r\n },\r\n })}\r\n />\r\n {getErrorState(\"email\") && (\r\n <div className={classes.error}>\r\n {getErrorMsg(\"email\")}\r\n </div>\r\n )}\r\n {emailRequired && <div className={classes.error}>Email is required</div>}\r\n </form>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </Grid>\r\n <Grid item xs={100} sm={100} md={15}>\r\n <div class=\"item-container\">\r\n <div id=\"miniCheck\">\r\n <CheckAddressButton\r\n productVersionId={productVersionId}\r\n mode=\"minicart\"\r\n islandId={islandId}\r\n enteredAddress={enteredAddress}\r\n enteredApartment={enteredApartment}\r\n selectedAddress={\r\n selectedAddrOption && selectedAddrOption.obj\r\n ? selectedAddrOption.obj\r\n : null\r\n }\r\n campaignType={campaignType}\r\n email={isBusiness? emailValue : email}\r\n emailValid={emailValid}\r\n showRequiredMsg={handleShowRequiredMsg}\r\n showEmailRequiredMsg={handleShowEmailRequiredMsg}\r\n isBusiness={isBusiness}\r\n isEmailRequired={isEmailRequired}\r\n selectedAptOption={\r\n selectedAptOption && selectedAptOption.obj\r\n ? selectedAptOption.obj\r\n : null\r\n }\r\n campaignSource={campaignSource}\r\n />\r\n </div>\r\n {/* <div id=\"existingCustomer\">\r\n <p id=\"existingCustomerHeader\">Already a Customer?</p> \r\n <p id=\"existingCustomerLink\">Please contact Customer Service <br className=\"desktop\"/>at <a href=\"tel:808-643-3456\">808-643-3456</a> or <a href=\"tel:877-482-2211\">877-482-2211</a>. <br/>Available 24 hrs. </p> \r\n </div> */}\r\n </div>\r\n </Grid>\r\n <Grid item md={100} sx={{ pt: 0 }} id=\"miniAddressHelpTextGrid\">\r\n <div class=\"item-container\">\r\n <div className=\"miniAddressHelpText\">\r\n <p>\r\n This site is protected by reCAPTCHA and the{\" \"}\r\n <a\r\n href=\"https://policies.google.com/privacy?hl=en\"\r\n target=\"_blank\"\r\n >\r\n Google Privacy Policy\r\n </a>{\" \"}\r\n and{\" \"}\r\n <a\r\n href=\"https://policies.google.com/terms?hl=en\"\r\n target=\"_blank\"\r\n >\r\n Terms of Service apply\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\n\r\nimport { useDispatch } from \"react-redux\";\r\nimport { AddressLookupMini } from \"./AddressLookupMini\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport { resetOrder, resetWarmLead } from \"../../redux/actions/orderActions\";\r\nimport { setCampaignSource } from \"../../redux/actions/campaignActions\";\r\nimport { StepHeadernew } from \"./StepHeadernew\";\r\n\r\nexport function AddressVerificationMini(props) {\r\n const dispatch = useDispatch();\r\n const { campaignType, productVersionId, campaignSource } = props.match.params;\r\n const routePath = window.location.pathname;\r\n const route =\r\n routePath.split(\"/\")[1] == \"cart\"\r\n ? routePath.split(\"/\")[2]\r\n : routePath.split(\"/\")[1];\r\n\r\n useEffect(() => {\r\n console.log(\r\n \"AddressVerificationMini useEffect all\",\r\n campaignType + \", \" + campaignSource + \", \" + productVersionId\r\n );\r\n dispatch(resetOrder());\r\n dispatch(resetWarmLead());\r\n }, []);\r\n\r\n useEffect(() => {\r\n let cs =\r\n campaignSource && campaignSource.length > 0 ? campaignSource : \"minicart\";\r\n dispatch(setCampaignSource(cs));\r\n }, [campaignSource]);\r\n\r\n React.useEffect(() => {\r\n \r\n }, []);\r\n return (\r\n <>\r\n <div style={{ display: \"none\" }}>\r\n <StepHeadernew\r\n title=\"Check availability\"\r\n text=\"Aloha! Let’s get started with your address, and we’ll find the services available for you. Can’t find your address? \"\r\n />\r\n </div>\r\n {route === \"minicart\" && (\r\n <AddressLookupMini\r\n campaignType={campaignType}\r\n productVersionId={productVersionId}\r\n campaignSource={campaignSource}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n","\r\nexport const strings=({\r\n \r\n common: {\r\n staticVerbiage: \"*For Basic TV, pricing includes core service plus: $28.91 Broadcast TV Fee and $0.25 PEG Capital Fee Fund. For all other TV packages, pricing includes core service plus: $28.91 Broadcast TV Fee, $7.43 Sports Programming Fee and $0.25 PEG Capital Fee Fund. If you are in a bulk agreement or military housing, these fees may be included as part of your agreement.\"\r\n }, \r\n \r\n});\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\nconst useStyles = makeStyles({\r\n image: {\r\n \"& > .ant-image-img\": {\r\n height: \"initial !important\"\r\n }\r\n }\r\n});\r\n\r\nexport default function ItemImage({ item, isAddon,mdMaxHeight }) {\r\n const classes = useStyles();\r\n\r\n if (!item) return;\r\n\r\n return (\r\n <Box\r\n component=\"img\"\r\n sx={{\r\n width: \"inherit\",\r\n maxHeight: { xs: 233, md: mdMaxHeight },\r\n maxWidth: \"100%\"\r\n }}\r\n className={classes.image}\r\n alt={isAddon ? item.addonName : item.productName}\r\n src={item.imageUrl}\r\n />\r\n );\r\n}\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { Tooltip, Typography, Box } from '@mui/material';\r\nconst useStyles = makeStyles({\r\n truncatedtext: {\r\n display: '-webkit-box',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n WebkitLineClamp: 2, // Limit to 2 lines\r\n cursor: 'pointer',\r\n }\r\n});\r\nconst TruncateText = ({ text, maxWidth }) => {\r\n const [truncatedText, setTruncatedText] = useState(text);\r\n const textRef = useRef(null);\r\n const classes = useStyles();\r\n useEffect(() => {\r\n const truncate = () => {\r\n const container = textRef.current;\r\n if (!container) return;\r\n\r\n let content = text;\r\n container.innerHTML = content;\r\n\r\n // Check if the text overflows the container\r\n if (container.scrollWidth > maxWidth) {\r\n while (container.scrollWidth > maxWidth && content.length > 0) {\r\n content = content.slice(0, -1);\r\n container.innerHTML = content + '...';\r\n }\r\n setTruncatedText(container.innerHTML);\r\n }\r\n };\r\n\r\n truncate();\r\n }, [text, maxWidth]);\r\n\r\n return (\r\n // <div\r\n // ref={textRef}\r\n // className={classes.truncatedtext}\r\n // style={{ maxWidth: maxWidth }}\r\n // title={text} // For tooltip showing full text\r\n // >\r\n // {truncatedText}\r\n // </div>\r\n <Tooltip title={text} arrow>\r\n <div\r\n ref={textRef}\r\n className={classes.truncatedtext}\r\n style={{ maxWidth: maxWidth }}\r\n >\r\n {truncatedText}\r\n </div>\r\n </Tooltip>\r\n );\r\n};\r\n\r\nexport default TruncateText;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport AddonDescription from \"./AddonDescription\";\r\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutline\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutline\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport ItemImage from \"../products/ItemImage\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport clsx from 'clsx';\r\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\r\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\r\nimport TruncateText from \"./TruncateText\";\r\nconst useStyles = makeStyles({\r\n card: {\r\n borderRadius: 4,\r\n border: \"1px solid #A1A1A1\"\r\n },\r\n cardSelected: {\r\n borderRadius: 4,\r\n border: \"1px solid #A1A1A1\",\r\n backgroundColor: \"#E2F4F6\"\r\n },\r\n cardDisabled: {\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n title: {\r\n fontSize: 20,\r\n color: \"#002A42\"\r\n },\r\n addBtn: {\r\n color: \"#33333347\",\r\n textAlign: \"center\",\r\n padding: \"0px 0\",\r\n fontSize: \"18px\",\r\n },\r\n addBtnDisabled: {\r\n color: \"#33333347\",\r\n textAlign: \"center\",\r\n padding: \"0px 0\",\r\n fontSize: \"18px\",\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n addBtnSelected: {\r\n color: \"#012639\",\r\n fontSize: \"30px\"\r\n },\r\n addBtnSelect: {\r\n color: \"\",\r\n fontSize: \"30px\"\r\n },\r\n addQtyDisabled: {\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n description: {\r\n fontSize: \"14px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginBottom: \"10px\"\r\n },\r\n terms: {\r\n fontSize: \"14px\",\r\n color: \"#002A42\",\r\n textDecoration: \"none\"\r\n },\r\n section1: {\r\n textAlign: \"center\"\r\n },\r\n section2: { minWidth: \"0px\" },\r\n section3: {\r\n textAlign: \"right\",\r\n },\r\n addonQty: {\r\n fontSize: \"30px\",\r\n color: \"#333\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n marginRight: \"3px\"\r\n },\r\n recommendedLabel: {\r\n color: \"red\",\r\n fontSize: \"12px\",\r\n fontWeight: \"bold\",\r\n position: \"relative\",\r\n top: \"-5px\",\r\n left: \"10px\"\r\n\r\n }\r\n});\r\n\r\nconst SingleAddon = props => {\r\n const { addon, handleToggle, selected, disabled, isGatewayCategory } = props;\r\n const classes = useStyles();\r\n const isRad = addon.groupingCategorySelectMode === \"radiobutton\";\r\n const [addonQty, setAddonQty] = useState(addon && addon.maxQty > 1 && addon.minQty > 0 ? addon.minQty : 0);\r\n\r\n useEffect(() => {\r\n var item = { addon: { ...addon, qty: addonQty }, checked: addonQty > 0 };\r\n\r\n handleToggle(item);\r\n\r\n }, [addonQty]);\r\n\r\n\r\n\r\n\r\n const handleChangeAdd = () => {\r\n if (addonQty < addon.maxQty) {\r\n setAddonQty(addonQty + 1);\r\n }\r\n };\r\n\r\n const handleChangeRemove = () => {\r\n var limit = addon.minQty >= 0 ? addon.minQty : 0;\r\n if (addonQty > limit) {\r\n setAddonQty(addonQty - 1);\r\n }\r\n };\r\n\r\n const component = (<Grid container spacing={2}>\r\n <Grid item xs={12} md={3} className={classes.section1}\r\n sx={{ display: { xs: 'none', sm: 'none', md: 'block', lg: 'block', xl: 'block' } }}>\r\n {addon.imageUrl ? <ItemImage item={addon} isAddon={true} mdMaxHeight={100}/> : \"\"}\r\n </Grid>\r\n\r\n <Grid item xs={8} sx={{ display: { xs: 'block', sm: 'block', md: 'none', lg: 'none', xl: 'none' } }}>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n {addon.addonName}{(addon.addonName === 'Premier Value Bundle' || addon.addonName === 'Hawaiian Telcom Gateway') && <span class={classes.recommendedLabel}>Recommended</span>}\r\n\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={4} className={classes.section1}\r\n sx={{ display: { xs: 'block', sm: 'block', md: 'none', lg: 'none', xl: 'none' } }}>\r\n {addon.imageUrl ? <ItemImage item={addon} isAddon={true} mdMaxHeight={100}/> : \"\"}\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n md={9}\r\n className={classes.section2 + \" addon-body\"}\r\n >\r\n <Grid container spacing={2}>\r\n <Grid\r\n item\r\n xs={12}\r\n md={12}\r\n className={classes.section2 + \" addon-body\"}\r\n >\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n sx={{ display: { xs: 'none', sm: 'none', md: 'block', lg: 'block', xl: 'block' } }}\r\n >\r\n {addon.addonName}{(addon.addonName === 'Premier Value Bundle' || addon.addonName === 'Hawaiian Telcom Gateway') && <span class={classes.recommendedLabel}>Recommended</span>}\r\n\r\n </Typography>\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n md={12}\r\n className={classes.section2 + \" addon-body\"}\r\n >\r\n <div className={classes.description}>\r\n {/* <AddonDescription text={addon.addonDescription} /> */}\r\n <TruncateText text={addon.addonDescription} maxWidth={800} />\r\n </div>\r\n </Grid>\r\n\r\n {addon.maxQty > 1 ? (<Grid\r\n item\r\n xs={6}\r\n md={8} style={{ paddingTop: 2 }}\r\n className={classes.section2 + \" addon-body\"}\r\n > <Typography\r\n className={classes.price}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceLabel} {addon.priceSuffix}\r\n </Typography>\r\n <Typography\r\n className={classes.priceSuffix}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceSuffix2}\r\n </Typography></Grid>) : (<Grid\r\n item\r\n xs={8}\r\n md={8} style={{ paddingTop: 2 }}\r\n className={classes.section2 + \" addon-body\"}\r\n > <Typography\r\n className={classes.price}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceLabel} {addon.priceSuffix}\r\n </Typography>\r\n <Typography\r\n className={classes.priceSuffix}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceSuffix2}\r\n </Typography></Grid>)}\r\n\r\n\r\n {addon.maxQty > 1 ?\r\n (<Grid xs={6} md={4} style={{ paddingTop: 2, paddingLeft: 2 }}\r\n item className={classes.section3}>\r\n <Link\r\n disabled={disabled}\r\n className={disabled ? classes.addQtyDisabled : \"\"}\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeRemove();\r\n }}\r\n >\r\n <RemoveCircleOutlineIcon style={{ fontSize: \"30px\" }} color=\"disabled\" />\r\n </Link>{\" \"}\r\n <Typography style={{lineHeight:0}} className={classes.addonQty}>{addonQty}</Typography>\r\n <Link\r\n disabled={disabled}\r\n className={disabled ? classes.addQtyDisabled : \"\"}\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeAdd();\r\n }}\r\n >\r\n <AddCircleOutlineIcon style={{ fontSize: \"30px\" }} color=\"disabled\" />\r\n </Link>\r\n </Grid>)\r\n :\r\n (<Grid item xs={4} md={4} style={{ paddingTop: 2 }}\r\n className={classes.section3}>\r\n <IconButton\r\n disabled={disabled}\r\n underline=\"none\"\r\n component=\"button\"\r\n className={disabled ? classes.addBtnDisabled : classes.addBtn}>\r\n {selected ? <CheckCircleIcon className={selected ? classes.addBtnSelected : classes.addBtnSelect} /> :\r\n <CheckCircleOutlineIcon className={selected ? classes.addBtnSelected : classes.addBtnSelect} />}\r\n </IconButton>\r\n\r\n </Grid>)\r\n\r\n }\r\n </Grid>\r\n </Grid>\r\n </Grid>);\r\n\r\n return (\r\n <>\r\n\r\n {addon.maxQty > 1 ?\r\n (<Card className={clsx(selected ? classes.cardSelected : classes.card, disabled ? classes.cardDisabled : '')}\r\n disabled={disabled}>\r\n <CardContent>{component} </CardContent>\r\n </Card>) :\r\n\r\n (disabled ? <Card disabled={disabled}\r\n className={clsx(selected ? classes.cardSelected : classes.card, disabled ? classes.cardDisabled : '')}\r\n >\r\n <CardContent style={{ paddingBottom: \"10px\" }} >{component} </CardContent>\r\n </Card> : <Card style={{ cursor: 'pointer' }}\r\n className={clsx(selected ? classes.cardSelected : classes.card)}\r\n onClick={() => {\r\n handleToggle({ addon: addon, checked: !selected });\r\n }}>\r\n <CardContent style={{ paddingBottom: \"10px\" }} >{component} </CardContent>\r\n </Card>)\r\n }\r\n </>\r\n\r\n );\r\n};\r\nexport default SingleAddon;\r\n","import React from 'react';\r\nimport { Tooltip, Typography, Box } from '@mui/material';\r\nimport { styled } from '@mui/system';\r\n\r\n// Function to truncate text after a specified number of characters\r\nconst truncateText = (text, charLimit) => {\r\n if (text.length > charLimit) {\r\n return text.slice(0, charLimit) + '...';\r\n }\r\n return text;\r\n};\r\n\r\nconst TruncatedTextContainer = styled(Box)(({ lineLimit }) => ({\r\n display: 'block',\r\n display: '-webkit-box',\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n WebkitLineClamp: lineLimit, // Limit to 2 lines\r\n maxWidth: '400px', // Adjust this value as needed\r\n cursor: 'pointer',\r\n}));\r\n\r\nconst TruncatedTooltipText = ({ text, charLimit = 0,lineLimit=0 }) => {\r\n const truncatedText = truncateText(text, charLimit);\r\n return (\r\n <>\r\n {text.length > charLimit ?\r\n (<Tooltip title={text} arrow>\r\n <TruncatedTextContainer lineLimit={lineLimit}>\r\n {truncatedText}\r\n </TruncatedTextContainer>\r\n </Tooltip>) : <TruncatedTextContainer lineLimit={lineLimit}>\r\n {truncatedText}\r\n </TruncatedTextContainer>}\r\n </>\r\n );\r\n\r\n};\r\n\r\nexport default TruncatedTooltipText;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport AddonDescription from \"./AddonDescription\";\r\nimport TruncatedTooltipText from \"./TruncatedTooltipText\";\r\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutline\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutline\";\r\nimport ItemImage from \"../products/ItemImage\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\r\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\r\n\r\nimport { useMediaQuery } from '@mui/material';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\nimport TruncateText from \"./TruncateText\";\r\nimport clsx from 'clsx';\r\nconst theme = createTheme();\r\nconst useStyles = makeStyles({\r\n card: {\r\n borderRadius: 4,\r\n border: \"1px solid #A1A1A1\",\r\n },\r\n cardSelected: {\r\n borderRadius: 4,\r\n border: \"1px solid #A1A1A1\",\r\n backgroundColor: \"#E2F4F6\"\r\n },\r\n cardDisabled: {\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n title: {\r\n fontSize: 20,\r\n color: \"#002A42\"\r\n },\r\n titleRow: {\r\n minHeight: 75\r\n },\r\n descRow: {\r\n minHeight: 60\r\n },\r\n addBtn: {\r\n color: \"#33333347\",\r\n textAlign: \"center\",\r\n padding: \"0px 0\",\r\n fontSize: \"18px\",\r\n },\r\n addBtnDisabled: {\r\n color: \"#33333347\",\r\n textAlign: \"center\",\r\n padding: \"0px 0\",\r\n fontSize: \"18px\",\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n addBtnSelected: {\r\n color: \"#012639\",\r\n fontSize: \"30px\"\r\n },\r\n addBtnSelect: {\r\n color: \"\",\r\n fontSize: \"30px\"\r\n },\r\n addQtyDisabled: {\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n description: {\r\n fontSize: \"14px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginBottom: \"10px\"\r\n },\r\n terms: {\r\n fontSize: \"14px\",\r\n color: \"#002A42\",\r\n textDecoration: \"none\"\r\n },\r\n section1: {\r\n textAlign: \"center\"\r\n },\r\n section2: { minWidth: \"400px\" },\r\n section3: {\r\n textAlign: \"center\",\r\n minWidth: \"196px\"\r\n },\r\n section4: {\r\n textAlign: \"right\"\r\n },\r\n section5: {\r\n textAlign: \"left\",\r\n },\r\n addonQty: {\r\n fontSize: \"30px\",\r\n color: \"#333\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n marginRight: \"3px\"\r\n },\r\n recommendedLabel: {\r\n color: \"red\",\r\n fontSize: \"12px\",\r\n fontWeight: \"bold\",\r\n position: \"relative\",\r\n top: \"-5px\",\r\n left: \"10px\"\r\n\r\n }\r\n});\r\n\r\nconst MultiAddon = props => {\r\n const { addon, handleToggle, selected, disabled, isGatewayCategory } = props;\r\n\r\n \r\n const classes = useStyles();\r\n const isRad = addon.groupingCategorySelectMode === \"radiobutton\";\r\n\r\n const [addonQty, setAddonQty] = useState(addon && addon.maxQty > 1 && addon.minQty > 0 ? addon.minQty : 0);\r\n const isXs = useMediaQuery(theme.breakpoints.down('xs'));\r\n const isSm = useMediaQuery(theme.breakpoints.down('sm'));\r\n const isMd = useMediaQuery(theme.breakpoints.down('md'));\r\n const isLgUp = useMediaQuery(theme.breakpoints.up('lg'));\r\n useEffect(() => {\r\n var item = { addon: { ...addon, qty: addonQty }, checked: addonQty > 0 };\r\n\r\n handleToggle(item);\r\n\r\n }, [addonQty]);\r\n\r\n // this is used to reset Set Top to 0 if customer choose the use there own Streaming device\r\n useEffect(() => {\r\n if (addon.groupingCategory == \"Set Top Box\" && addon.maxQty > 1 && !selected) {\r\n \r\n handleChangeNotSelected();\r\n }\r\n }, [selected]);\r\n\r\n\r\n const handleChangeAdd = () => {\r\n if (addonQty < addon.maxQty) {\r\n setAddonQty(addonQty + 1);\r\n }\r\n };\r\n\r\n const handleChangeRemove = () => {\r\n var limit = addon.minQty >= 0 ? addon.minQty : 0;\r\n if (addonQty > limit) {\r\n setAddonQty(addonQty - 1);\r\n }\r\n };\r\n\r\n const handleChangeNotSelected = () => {\r\n setAddonQty(0);\r\n };\r\n\r\n const component = (<Grid container spacing={2}>\r\n <Grid item xs={8} className={classes.titleRow}>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n {isLgUp && (\r\n <TruncatedTooltipText text={addon.addonName} charLimit={25} lineLimit={0} />\r\n )}\r\n {isSm && (\r\n <TruncatedTooltipText text={addon.addonName} charLimit={50} lineLimit={0} />\r\n )}\r\n \r\n {!isSm && !isLgUp && (\r\n <TruncatedTooltipText text={addon.addonName} charLimit={25} lineLimit={0} />\r\n )}\r\n {/* {addon.addonName} */}\r\n {(addon.addonName === 'Premier Value Bundle' || addon.addonName === 'Hawaiian Telcom Gateway') && <span class={classes.recommendedLabel}>Recommended</span>}\r\n\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={4} className={classes.section1}>\r\n {addon.imageUrl ? <ItemImage item={addon} isAddon={true} mdMaxHeight={100}/> : \"\"}\r\n </Grid>\r\n <Grid\r\n item\r\n className={classes.descRow}\r\n xs={12} style={{ paddingTop: 2 }}\r\n // className={classes.section2 + \" addon-body\"}\r\n >\r\n\r\n <div className={classes.description}>\r\n {/* <AddonDescription text={addon.addonDescription} /> */}\r\n <TruncateText text={addon.addonDescription} maxWidth={800} />\r\n \r\n </div>\r\n\r\n </Grid>\r\n\r\n {addon.maxQty > 1 ?(<Grid\r\n item\r\n xs={6}\r\n //className={classes.section5}\r\n md={6} style={{ paddingTop: 2 }}\r\n //className={classes.section2 + \" addon-body\"}\r\n >\r\n <Typography\r\n className={classes.price}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceLabel} {addon.priceSuffix}\r\n </Typography>\r\n <Typography\r\n className={classes.priceSuffix}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceSuffix2}\r\n </Typography>\r\n </Grid>):(<Grid\r\n item\r\n xs={8}\r\n //className={classes.section5}\r\n md={8} style={{ paddingTop: 2 }}\r\n //className={classes.section2 + \" addon-body\"}\r\n >\r\n <Typography\r\n className={classes.price}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceLabel} {addon.priceSuffix}\r\n </Typography>\r\n <Typography\r\n className={classes.priceSuffix}\r\n style={{ fontSize: \"19px\" }}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {addon.priceSuffix2}\r\n </Typography>\r\n </Grid>)}\r\n {addon.maxQty > 1 ?\r\n (<Grid xs={6} md={6} style={{ paddingTop: 2, paddingLeft: 2 }}\r\n item className={classes.section4}>\r\n <Link\r\n disabled={disabled}\r\n className={disabled ? classes.addQtyDisabled : \"\"}\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeRemove();\r\n }}\r\n >\r\n <RemoveCircleOutlineIcon style={{ fontSize: \"30px\" }} color=\"disabled\" />\r\n </Link>{\" \"}\r\n <Typography style={{lineHeight:0}} className={classes.addonQty}>{addonQty}</Typography>\r\n <Link\r\n disabled={disabled}\r\n className={disabled ? classes.addQtyDisabled : \"\"}\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeAdd();\r\n }}\r\n >\r\n <AddCircleOutlineIcon style={{ fontSize: \"30px\" }} color=\"disabled\" />\r\n </Link>\r\n </Grid>)\r\n :\r\n (<Grid item xs={4} md={4} style={{ paddingTop: 2 }}\r\n className={classes.section4}>\r\n <IconButton\r\n disabled={disabled}\r\n underline=\"none\"\r\n component=\"button\"\r\n className={disabled ? classes.addBtnDisabled : classes.addBtn}>\r\n {selected ? <CheckCircleIcon className={selected ? classes.addBtnSelected : classes.addBtnSelect} /> :\r\n <CheckCircleOutlineIcon className={selected ? classes.addBtnSelected : classes.addBtnSelect} />}\r\n </IconButton>\r\n\r\n </Grid>)\r\n\r\n }\r\n </Grid>);\r\n\r\n return (\r\n <>\r\n\r\n {addon.maxQty > 1 ?\r\n (<Card className={clsx(selected ? classes.cardSelected : classes.card, disabled ? classes.cardDisabled : '')}\r\n disabled={disabled} >\r\n <CardContent style={{ paddingBottom: \"10px\" }} >{component} </CardContent>\r\n </Card>) :\r\n (disabled ? <Card disabled={disabled}\r\n className={clsx(selected ? classes.cardSelected : classes.card, disabled ? classes.cardDisabled : '')}\r\n >\r\n <CardContent style={{ paddingBottom: \"10px\" }} >{component} </CardContent>\r\n </Card> : <Card style={{ cursor: 'pointer' }}\r\n className={clsx(selected ? classes.cardSelected : classes.card)}\r\n onClick={() => {\r\n handleToggle({ addon: addon, checked: !selected });\r\n }}>\r\n <CardContent style={{ paddingBottom: \"10px\" }} >{component} </CardContent>\r\n </Card>)}\r\n </>\r\n\r\n );\r\n};\r\nexport default MultiAddon;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport SingleAddon from \"./SingleAddon\";\r\nimport MultiAddon from \"./MultiAddon\";\r\nimport SetTopBoxAddon from \"./SetTopBoxAddon\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { isSetTopBox } from \"../../lib/addons\";\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n minWidth: 275,\r\n borderRadius: 4,\r\n marginBottom: \"20px\",\r\n border: \"1px solid #A1A1A1\"\r\n },\r\n multiCard:{ \r\n // \"@media (max-width: 1140px)\": {\r\n // maxWidth: \"100%\",\r\n // flexBasis: \"100%\"\r\n // },\r\n }\r\n});\r\n\r\nexport default function Category({\r\n addons,\r\n onChange,\r\n selectedIdsCheck,\r\n incompatibleAddonIds,\r\n byogState,\r\n byogIdsArray,\r\n isGatewayCategory,\r\n isEquipmentStep\r\n}) {\r\n const classes = useStyles();\r\n const getDisableAddonValue = addon => {\r\n return (\r\n incompatibleAddonIds.includes(addon.addonId) ||\r\n (byogState === 2 && byogIdsArray && byogIdsArray.includes(addon.addonId))\r\n );\r\n };\r\n let component;\r\n if (addons.length == 1) {\r\n //const component = (addons.length\r\n component = (addons.length\r\n ? addons.map(item =>\r\n // <div style={{ display: item.hidden === true ? 'none' : 'inline' }}>\r\n <React.Fragment>\r\n <Grid item xs={12} lg={12} md={12} style={{ display: item.hidden === true ? 'none' : '' }}>\r\n <SingleAddon\r\n key={item.addonId}\r\n addon={item}\r\n handleToggle={onChange}\r\n selected={\r\n selectedIdsCheck\r\n ? selectedIdsCheck.includes(item.addonId)\r\n : item.autoSelect\r\n }\r\n disabled={getDisableAddonValue(item)}\r\n isGatewayCategory={isGatewayCategory}\r\n isEquipmentStep={isEquipmentStep}\r\n />\r\n </Grid>\r\n {/* {isGatewayCategory && <p style={{ marginBottom: 0 }}> </p>} */}\r\n {/* </div> */}\r\n </React.Fragment>\r\n\r\n )\r\n : null);\r\n }\r\n else {\r\n component = (addons.length\r\n ? addons.map(item =>\r\n // <div style={{ display: item.hidden === true ? 'none' : 'inline' }}>\r\n <React.Fragment>\r\n <Grid item xs={12} md={6} lg={4} className={classes.multiCard} style={{ display: item.hidden === true ? 'none' : '' }}>\r\n <MultiAddon\r\n key={item.addonId}\r\n addon={item}\r\n handleToggle={onChange}\r\n selected={\r\n selectedIdsCheck\r\n ? selectedIdsCheck.includes(item.addonId)\r\n : item.autoSelect\r\n }\r\n disabled={getDisableAddonValue(item)}\r\n isGatewayCategory={isGatewayCategory}\r\n isEquipmentStep={isEquipmentStep}\r\n />\r\n </Grid>\r\n {/* {isGatewayCategory && <p style={{ marginBottom: 0 }}> </p>} */}\r\n </React.Fragment>\r\n\r\n )\r\n : null);\r\n }\r\n\r\n return (\r\n <>\r\n {isGatewayCategory ?\r\n <React.Fragment>\r\n {addons.length\r\n ? <Grid container spacing={2}>\r\n {component}\r\n </Grid> : { component }}\r\n </React.Fragment>\r\n :\r\n <Grid container spacing={2}>\r\n {component}</Grid>}\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport AddonDescription from \"./AddonDescription\";\r\nimport { useSelector } from \"react-redux\";\r\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutline\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutline\";\r\nimport ItemImage from \"../products/ItemImage\";\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n minWidth: 275,\r\n borderRadius: 4,\r\n marginBottom: \"25px\",\r\n border: \"1px solid #A1A1A1\"\r\n },\r\n title: {\r\n fontSize: 26,\r\n color: \"#002A42\"\r\n },\r\n addBtn: {\r\n borderRadius: \"22px\",\r\n color: \"#333\",\r\n border: \"1px solid #707070\",\r\n width: \"144px\",\r\n textAlign: \"center\",\r\n padding: \"8px 0\",\r\n fontSize: \"18px\",\r\n marginTop: \"40px\"\r\n },\r\n addBtnDisabled: {\r\n borderRadius: \"22px\",\r\n color: \"#333\",\r\n border: \"1px solid #707070\",\r\n width: \"144px\",\r\n textAlign: \"center\",\r\n padding: \"8px 0\",\r\n fontSize: \"18px\",\r\n marginTop: \"40px\",\r\n backgroundColor: \"#EBEBE4\"\r\n },\r\n description: {\r\n fontSize: \"14px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginBottom: \"10px\"\r\n },\r\n section1: {\r\n textAlign: \"center\"\r\n },\r\n section2: { minWidth: \"435px\" },\r\n section3: {\r\n textAlign: \"center\",\r\n minWidth: \"161px\",\r\n paddingTop: \"40px\"\r\n },\r\n stbNumber: {\r\n fontSize: \"50px\",\r\n color: \"#333\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n marginRight: \"3px\"\r\n }\r\n});\r\n\r\nconst SetTopBoxAddon = props => {\r\n const { stbAddon, handleToggle } = props;\r\n const classes = useStyles();\r\n const stbQty = useSelector(state => state.products.stbQty);\r\n\r\n const [numberOfStb, setNumberOfStb] = useState(stbQty ? stbQty : stbAddon.minQty > 0 ? stbAddon.minQty : 0);\r\n\r\n useEffect(() => {\r\n let item = { addon: {...stbAddon, qty: numberOfStb}, checked: numberOfStb > 0 }; \r\n \r\n handleToggle(item);\r\n\r\n }, [numberOfStb]);\r\n \r\n\r\n const handleChangeAdd = () => {\r\n if (numberOfStb < stbAddon.maxQty) {\r\n setNumberOfStb(numberOfStb + 1);\r\n }\r\n };\r\n\r\n const handleChangeRemove = () => {\r\n if (numberOfStb > stbAddon.minQty) {\r\n setNumberOfStb(numberOfStb - 1);\r\n }\r\n };\r\n\r\n return (\r\n <Card className={classes.card}>\r\n <CardContent>\r\n <Grid container spacing={2}>\r\n <Grid item xs={12} md={3} className={classes.section1}>\r\n <ItemImage item={stbAddon} isAddon={true} mdMaxHeight={100}/>\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n md={6}\r\n className={classes.section2 + \" addon-body\"}\r\n >\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n {stbAddon.addonName}\r\n </Typography>\r\n <div className={classes.description}>\r\n <AddonDescription text={stbAddon.addonDescription} />\r\n </div>\r\n <Typography\r\n className={classes.price}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {stbAddon.priceLabel} {stbAddon.priceSuffix}\r\n {stbAddon.priceSuffix2}\r\n </Typography>\r\n <Typography\r\n className={classes.priceSuffix}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {stbAddon.priceSuffix2}\r\n </Typography>\r\n </Grid>\r\n <Grid item className={classes.section3}>\r\n <Link\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeRemove();\r\n }}\r\n >\r\n <RemoveCircleOutlineIcon fontSize=\"large\" color=\"disabled\" />\r\n </Link>{\" \"}\r\n <Typography className={classes.stbNumber}>{numberOfStb}</Typography>\r\n <Link\r\n underline=\"none\"\r\n component=\"button\"\r\n onClick={() => {\r\n handleChangeAdd();\r\n }}\r\n >\r\n <AddCircleOutlineIcon fontSize=\"large\" color=\"disabled\" />\r\n </Link>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\nexport default SetTopBoxAddon;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Link from \"@mui/material/Link\";\r\nimport \"../../css/main.css\";\r\nimport { MYWAY_TV } from \"../../lib/addons\";\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n minWidth: 120\r\n },\r\n stbCard: {\r\n marginBottom: \"20px\"\r\n },\r\n orange: {\r\n color: \"orange\"\r\n },\r\n white: {\r\n color: \"white\"\r\n }\r\n});\r\n\r\nconst CategoryHeading = ({ category }) => {\r\n const classes = useStyles();\r\n return (\r\n // <div className={classes.stbCard}>\r\n <div>\r\n <Typography style={{color:\"white\"}}\r\n className={classes.addonTitle}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {category.text}\r\n </Typography>\r\n\r\n {/* {category.name === MYWAY_TV ? (\r\n <div className={classes.white}> \r\n <b>\r\n Please{\" \"}\r\n <span>\r\n select one or more genre packs*\r\n </span>{\" \"}\r\n to complete your order.{\" \"}\r\n <Link\r\n target=\"_blank\"\r\n href={\r\n process.env.REACT_APP_DNN +\r\n \"/Residential/TV/TV-Packages/MyWay-TV\"\r\n }\r\n >\r\n See what’s in each Genre Pack.\r\n </Link>\r\n </b>\r\n </div>\r\n ) : null} */}\r\n </div>\r\n );\r\n};\r\nexport default CategoryHeading;\r\n","import { React, useEffect } from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport \"../../css/main.css\";\r\nimport { MYWAY_TV } from \"../../lib/addons\";\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n minWidth: 120\r\n },\r\n stbCard: {\r\n \"& .ant-card-body\": {\r\n padding: 15\r\n },\r\n marginBottom: \"20px\",\r\n backgroundColor: \"#ffa500\"\r\n },\r\n addonTitle: {\r\n color: \"white\",\r\n fontSize: 14\r\n }\r\n});\r\n\r\nconst useMountEffect = fun => useEffect(fun, []);\r\n\r\nconst CategoryWarningMsg = ({ handleChangeOpenClose,category }) => {\r\n const classes = useStyles();\r\n\r\n const executeScroll = () => {\r\n var categoryDiv = document.getElementById(category.name.replace(\" \", \"\"));\r\n categoryDiv.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n };\r\n\r\n useMountEffect(executeScroll); // Scroll on mount\r\n useEffect(() => {\r\n //if(category.name=== categoryWarning\r\n handleChangeOpenClose();\r\n}, []);\r\n return (\r\n <div className={classes.stbCard} id={category.name.replace(\" \", \"\")}>\r\n <Typography\r\n className={classes.addonTitle}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n \r\n {/* <span>Oops, looks like you haven't selected a {category.name === MYWAY_TV ? \"genre pack\" : category.name + \" item\"} yet!</span> */}\r\n <span>{category.name === MYWAY_TV ? \"To move forward with your purchase you must select a product.\" : \"To move forward with your purchase you must select a product.\"}</span>\r\n {/* {category.groupingCategorySelectMode === \"radiobutton\" && <span> Please select a {category.name} item to complete your order. </span>} */}\r\n {category.groupingCategorySelectMode !== \"radiobutton\" && <span> Please select {category.requiredQty} or more {category.name === MYWAY_TV ? \"genre packs\" : category.name + \" items\"} to complete your order. </span>}\r\n </Typography>\r\n </div>\r\n );\r\n};\r\nexport default CategoryWarningMsg;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport \"../../css/main.css\";\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n minWidth: 120\r\n },\r\n stbCard: {\r\n marginBottom: \"20px\"\r\n }\r\n});\r\n\r\nconst CategoryQtyHeading = ({ category }) => {\r\n const classes = useStyles();\r\n return (\r\n <div className={classes.stbCard}>\r\n <Typography\r\n className={classes.addonTitle}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {category.name} requires at least {category.requiredQty} {category.requiredQty == 1 ? \"addon\" : \"addons\"}.\r\n </Typography>\r\n </div>\r\n );\r\n};\r\nexport default CategoryQtyHeading;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Link from \"@mui/material/Link\";\r\nimport \"../../css/main.css\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n radio: {\r\n fontSize: 14,\r\n fontWeight: \"bold\"\r\n },\r\n stbCard: {\r\n marginTop: \"10px\",\r\n marginBottom: \"10px\",\r\n color: \"orange !important\",\r\n fontSize: 16,\r\n fontWeight: \"bold\"\r\n },\r\n orange: {\r\n color: \"orange\"\r\n },\r\n description: {\r\n fontSize: 14,\r\n color: \"orange\"\r\n }\r\n}));\r\n\r\nconst BYOG = ({ handleChange, value, disable, gatewayFree }) => {\r\n const classes = useStyles();\r\n return (\r\n <div className=\"byog-wrapper\">\r\n <FormControl>\r\n <FormLabel className={classes.stbCard}>Choose your gateway:</FormLabel>\r\n <RadioGroup onChange={handleChange} value={value} defaultValue={value}>\r\n <FormControlLabel\r\n value={1}\r\n control={<Radio />}\r\n label={\r\n <>\r\n Hawaiian Telcom provided gateway (\r\n {gatewayFree === true ? \"$0\" : \"$9.99\"} per month)\r\n <Link\r\n target=\"_blank\"\r\n href={\r\n process.env.REACT_APP_DNN +\r\n \"/Residential/Support/Support-Articles/hawaiian-telcom-wireless-gateway\"\r\n }\r\n >\r\n Learn More\r\n </Link>\r\n <br />\r\n <Typography className={classes.description}>\r\n You must choose this option if you wish to add Premier,\r\n Premier Plus, or Whole Home WiFi\r\n </Typography>\r\n </>\r\n }\r\n className={classes.radio}\r\n />\r\n <FormControlLabel\r\n value={2}\r\n className={classes.radio}\r\n disabled={disable}\r\n control={<Radio />}\r\n label={\r\n <>\r\n I have my own gateway I would like to use ($0 per month)\r\n <Link\r\n target=\"_blank\"\r\n href={\r\n process.env.REACT_APP_DNN +\r\n \"/Residential/Support/Support-Articles/hawaiian-telcom-wireless-gateway\"\r\n }\r\n >\r\n Learn More\r\n </Link>\r\n <br />\r\n <Typography className={classes.description}>\r\n Premier, Premier Plus, or Whole Home WiFi options\r\n are not available if you choose this option\r\n </Typography>\r\n </>\r\n }\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n </div>\r\n );\r\n};\r\nexport default BYOG;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { getAddons, setAddons } from \"../../redux/actions/productActions\";\r\nimport { setIsAutoSelectInit, setSelectedAddonsRedux } from \"../../redux/actions/addonsActions\";\r\nimport { getCategorys, getDuplicates } from \"../../lib/addons\";\r\nimport Category from \"./Category\";\r\n\r\nimport CategoryHeading from \"./CategoryHeading\";\r\nimport CategoryQtyHeading from \"./CategoryQtyHeading\";\r\nimport CategoryWarningMsg from \"./CategoryWarningMsg\";\r\nimport BYOG from \"./BYOG\";\r\nimport { Backdrop, CircularProgress, Skeleton, Stack, Typography } from \"@mui/material\";\r\n\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionActions from '@mui/material/AccordionActions';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\n\r\nexport default function Addons({\r\n categoryWarning,\r\n setHomePhoneAddonSelected,\r\n gatewayFree,\r\n isEquipmentStep\r\n}) {\r\n const dispatch = useDispatch();\r\n const addons = useSelector((state) => state.products.addons);\r\n const selectedProduct = useSelector(\r\n (state) =>\r\n state.products && state.products.mainProducts ?\r\n state.products.mainProducts.filter(\r\n (p) => p.productId === state.products.selectedProductId\r\n )[0] : null\r\n );\r\n const selectedIdsCheck = useSelector(\r\n (state) => state.products.selectedAddonIds\r\n );\r\n const isAutoSelectInit = useSelector((state) => state.products.isAutoSelectInit);\r\n const addonLoading = useSelector((state) => state.products.addonLoading);\r\n\r\n const selectedAddons = useSelector((state) => state.products && state.products.selectedAddons ? state.products.selectedAddons : []);\r\n\r\n const setSelectedAddons = (addons) => {\r\n if (addons.length === 0) {\r\n addons = [\r\n {\r\n id: -1,\r\n qty: 1,\r\n maxQty: 1, // use this property to update qty\r\n wirelessGatewaySelected:\r\n byogValue === 1 && selectedProduct && selectedProduct.showWirelessGatewayForm\r\n ? true\r\n : false\r\n }\r\n ];\r\n }\r\n dispatch(setSelectedAddonsRedux(addons));\r\n }\r\n\r\n const [incompatibleAddonIds, setIncompatibleAddonIds] = useState([]);\r\n const [idsToUncheck, setIdsToUncheck] = useState([]);\r\n const [byogValue, setByogValue] = useState(1);\r\n const [byogIds, setByogIds] = useState([]);\r\n const [byogDisable, setByogDisable] = useState(false);\r\n let addOnCategories = [];\r\n const [expanded, setExpanded] = useState([]);\r\n\r\n const handleChangeOpenClose = (panel) => (event, isExpanded) => {\r\n setExpanded((prev) => {\r\n if (isExpanded) {\r\n return [...prev, panel];\r\n } else {\r\n return prev.filter((p) => p !== panel);\r\n }\r\n });\r\n };\r\n const handleChangeOpenCloseWarning = (panel) => (event, isExpanded) => {\r\n setExpanded((prev) => {\r\n if (prev.filter((p) => p == panel).length == 0) {\r\n return [...prev, panel];\r\n }\r\n else {\r\n return prev;\r\n }\r\n });\r\n };\r\n useEffect(() => {\r\n if (!isEquipmentStep) {\r\n dispatch(setIsAutoSelectInit(false));\r\n dispatch(getAddons());\r\n }\r\n }, []);\r\n useEffect(() => {\r\n if (addons) {\r\n addOnCategories = getCategorys(addons);\r\n setExpanded(\r\n addOnCategories.reduce((acc, item, index) => {\r\n if (item.isAddonGroupOpenByDefault) acc.push(`panel${index}`);\r\n return acc;\r\n }, []));\r\n }\r\n }, [addons]);\r\n\r\n useEffect(() => {\r\n //set SelectedAddons for autoSelect addons on init only\r\n if (addons && !isAutoSelectInit && !isEquipmentStep) {\r\n var items = addons.filter((item) => {\r\n var condition = !item.isEquipment && (item.autoSelect || item.minQty > 0)\r\n if (condition) {\r\n onAddonChange({ addon: { ...item, qty: item.minQty > 0 ? item.minQty : 1 }, checked: true });\r\n }\r\n return condition;\r\n })\r\n\r\n setSelectedAddons(items);\r\n dispatch(setIsAutoSelectInit(true));\r\n }\r\n else if (addons && isEquipmentStep) {\r\n var items = addons.filter((item) => {\r\n var condition = item.isEquipment === true && (item.autoSelect || item.minQty > 0) && (!hasRequiredAddons(item) || isRequiredAddonSelected(item))\r\n if (condition) {\r\n onAddonChange({ addon: { ...item, qty: item.minQty > 0 ? item.minQty : 1 }, checked: true });\r\n }\r\n return condition;\r\n })\r\n\r\n const nonEquipmentAddons = selectedAddons.filter((addon) => {\r\n return addon.isEquipment !== true\r\n })\r\n\r\n\r\n setSelectedAddons([\r\n ...nonEquipmentAddons,\r\n ...items\r\n ]);\r\n }\r\n }, [addons]);\r\n\r\n useEffect(() => {\r\n // get all addons id with the property “byogRestricted†set to true\r\n // run this only once at the begining if product has property showWirelessGatewayForm = true\r\n if (\r\n selectedProduct &&\r\n selectedProduct.showWirelessGatewayForm &&\r\n addons &&\r\n !byogIds.length\r\n ) {\r\n setByogIds(\r\n addons.filter((item) => item.byogRestricted).map((a) => a.addonId)\r\n );\r\n }\r\n }, [addons]);\r\n const hasRequiredAddons = (addon) => {\r\n return addon.requiredAddonVersionIds && addon.requiredAddonVersionIds.length > 0;\r\n }\r\n const isRequiredAddonSelected = (addon) => {\r\n var requiredAddonSelected = false;\r\n if (hasRequiredAddons) {\r\n addon.requiredAddonVersionIds.forEach((requiredAddonVersionId) => {\r\n selectedAddons.forEach((selectedAddon) => {\r\n if (selectedAddon.addonId == requiredAddonVersionId) {\r\n requiredAddonSelected = true;\r\n }\r\n });\r\n });\r\n if (!requiredAddonSelected) {\r\n return;\r\n }\r\n }\r\n return requiredAddonSelected;\r\n }\r\n\r\n const checkIncompatibleAddons = (addon) => {\r\n // check if incompatibleAddons exist\r\n if (addon && addon.incompatibleAddons && addon.incompatibleAddons.length) {\r\n for (let id of addon.incompatibleAddons) {\r\n if (incompatibleAddonIds && !incompatibleAddonIds.includes(id)) {\r\n setIncompatibleAddonIds((incompatibleAddonIds) => [\r\n ...incompatibleAddonIds,\r\n id\r\n ]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n\r\n //if an addon is being unchecked, clear all incompatible addons for that addon, unless the incompatible addon is an incompatible addon of another selected addon\r\n const isAddonIncompatibleWithAnotherSelectedAddon = (incompatibleAddonId, addonBeingUnchecked) => {\r\n\r\n return selectedAddons &&\r\n addonBeingUnchecked &&\r\n incompatibleAddonId &&\r\n selectedAddons.some((selectedAddon) =>\r\n\r\n selectedAddon.incompatibleAddons &&\r\n selectedAddon.incompatibleAddons.some((i) => {\r\n\r\n return i == incompatibleAddonId && selectedAddon.addonId != addonBeingUnchecked.addonId;\r\n }\r\n ));\r\n }\r\n\r\n const uncheckIncompatibleAddons = (addon, preserveDuplicates = true) => {\r\n if (addon && addon.incompatibleAddons && addon.incompatibleAddons.length) {\r\n // keep duplicates to not overwrite by next filter includes(id)\r\n let duplicates = getDuplicates(incompatibleAddonIds);\r\n\r\n var result =\r\n incompatibleAddonIds.filter(\r\n (id) => isAddonIncompatibleWithAnotherSelectedAddon(id, addon) || !addon.incompatibleAddons.includes(id)\r\n );\r\n setIncompatibleAddonIds(result\r\n );\r\n\r\n if (preserveDuplicates && duplicates.length) {\r\n setIncompatibleAddonIds(duplicates);\r\n }\r\n }\r\n };\r\n\r\n\r\n const updByogForm = (addon) => {\r\n if (byogIds.includes(addon.addonId) && !byogDisable) {\r\n // disable \"I have my own..\"\r\n setByogValue(1);\r\n setByogDisable(true);\r\n } else {\r\n // enable \"I have my own..\"\r\n setByogDisable(false);\r\n }\r\n };\r\n\r\n const onAddonChange = (e) => {\r\n\r\n if (e) {\r\n let currentSelectedAddon = e.addon;\r\n let unSelectedRadioAddons = [];\r\n if (isEquipmentStep && currentSelectedAddon.isEquipment !== true) {\r\n return;\r\n }\r\n\r\n if (isEquipmentStep) {\r\n if (hasRequiredAddons(currentSelectedAddon) && !isRequiredAddonSelected(currentSelectedAddon)) {\r\n return;\r\n }\r\n if (currentSelectedAddon.requiredAddonVersionIds && currentSelectedAddon.requiredAddonVersionIds.length > 0) {\r\n var requiredAddonSelected = false;\r\n currentSelectedAddon.requiredAddonVersionIds.forEach((requiredAddonVersionId) => {\r\n selectedAddons.forEach((selectedAddon) => {\r\n if (selectedAddon.addonId == requiredAddonVersionId) {\r\n requiredAddonSelected = true;\r\n }\r\n });\r\n });\r\n if (!requiredAddonSelected) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (currentSelectedAddon.groupingCategorySelectMode === \"radiobutton\") {\r\n // take category name\r\n const currentAddonCaregory = currentSelectedAddon.groupingCategory;\r\n // find all ids in that caregory\r\n let currentCaregoryAddons = addons.filter(\r\n (item) => item.groupingCategory === currentAddonCaregory\r\n );\r\n // add to deselectedRadioAddons\r\n if (currentAddonCaregory.length > 0) {\r\n var unSelected = selectedAddons.filter((item) =>\r\n currentCaregoryAddons && currentCaregoryAddons.length && currentCaregoryAddons.includes(item)\r\n );\r\n if (unSelected.length > 0) {\r\n unSelectedRadioAddons = unSelected;\r\n }\r\n }\r\n\r\n // remove from selectedAddons addon with array above (uncheck setted radiobutton)\r\n currentCaregoryAddons.length &&\r\n setSelectedAddons(\r\n selectedAddons.filter(\r\n (item) => !currentCaregoryAddons.includes(item)\r\n )\r\n );\r\n }\r\n\r\n\r\n const alreadySelected = selectedAddons.filter((item) => item.addonId === currentSelectedAddon.addonId).length > 0;\r\n\r\n if (e.checked) {\r\n let results = [];\r\n if (alreadySelected) {\r\n // update qty of addon object in selected objects array\r\n for (const selectedAddon of selectedAddons) {\r\n if (selectedAddon.addonId == currentSelectedAddon.addonId) {\r\n results.push({\r\n ...selectedAddon,\r\n qty: currentSelectedAddon.qty\r\n });\r\n }\r\n else {\r\n results.push(selectedAddon);\r\n }\r\n }\r\n setSelectedAddons(results);\r\n }\r\n else {\r\n if (currentSelectedAddon.groupingCategorySelectMode === \"radiobutton\") {\r\n\r\n for (const selectedAddon of selectedAddons) {\r\n if (selectedAddon.addonId !== currentSelectedAddon.addonId && selectedAddon.groupingCategoryText == currentSelectedAddon.groupingCategoryText) {\r\n //skip this so it gets unchecked\r\n }\r\n else {\r\n\r\n results.push(selectedAddon);\r\n }\r\n }\r\n results.push(currentSelectedAddon);\r\n\r\n setSelectedAddons(results);\r\n }\r\n else {\r\n setSelectedAddons([\r\n ...selectedAddons,\r\n currentSelectedAddon\r\n ])\r\n }\r\n }\r\n\r\n if (unSelectedRadioAddons.length > 0) {\r\n unSelectedRadioAddons.map((item) =>\r\n uncheckIncompatibleAddons(item, false)\r\n );\r\n }\r\n checkIncompatibleAddons(currentSelectedAddon);\r\n } else {\r\n // remove addon object from selected objects array\r\n // e.target.valuePropName === addon object\r\n\r\n //uncheck sub-addons if required addon is not checked\r\n var subAddonIdsToUncheck = [];\r\n\r\n selectedAddons.forEach((selectedAddon) => {\r\n\r\n if (selectedAddon.requiredAddonVersionIds && selectedAddon.requiredAddonVersionIds.length > 0) {\r\n if (selectedAddon.requiredAddonVersionIds.includes(currentSelectedAddon.addonId)) {\r\n subAddonIdsToUncheck.push(selectedAddon.addonId);\r\n }\r\n }\r\n });\r\n var items = selectedAddons.filter((item) => item.addonId !== currentSelectedAddon.addonId && !subAddonIdsToUncheck.includes(item.addonId) && !subAddonIdsToUncheck.includes(item.addonId));\r\n\r\n setSelectedAddons(\r\n items\r\n );\r\n\r\n // remove incompatibleAddons Ids\r\n uncheckIncompatibleAddons(currentSelectedAddon);\r\n }\r\n }\r\n };\r\n\r\n\r\n\r\n // old location addon groups logic\r\n // let categoriesCard = [];\r\n // if (addons) {\r\n // const categories = getCategorys(addons);\r\n\r\n // categoriesCard = categories.length\r\n // ? categories.map((c) => (\r\n // <div key={c.name}>\r\n // {c.requiredQty > 0 ? <CategoryQtyHeading category={c} /> : null}\r\n // {c.text ? <CategoryHeading category={c} /> : null}\r\n // {c.name === categoryWarning ? (\r\n // <CategoryWarningMsg category={c} />\r\n // ) : null}\r\n\r\n // <Category\r\n // addons={addons.filter((ad) => ad.groupingCategory === c.name)}\r\n // onChange={onAddonChange}\r\n // selectedIdsCheck={\r\n // selectedIdsCheck &&\r\n // selectedIdsCheck.filter((sa) => !idsToUncheck.includes(sa))\r\n // }\r\n // incompatibleAddonIds={incompatibleAddonIds}\r\n // byogState={byogValue}\r\n // byogIdsArray={byogIds}\r\n // />\r\n // {selectedProduct && selectedProduct.showWirelessGatewayForm ? (\r\n // <BYOG\r\n // handleChange={onBYOGChange}\r\n // value={byogValue}\r\n // disable={byogDisable}\r\n // gatewayFree={gatewayFree}\r\n // />\r\n // ) : null}\r\n // </div>\r\n // ))\r\n // : null;\r\n // }\r\n\r\n // end old location\r\n\r\n useEffect(() => {\r\n if (selectedAddons && selectedAddons.length > 0) {\r\n // get Ids from selected addons objects\r\n let selectedAddonIds = selectedAddons.map((a) => ({\r\n id: a.addonId,\r\n qty: a.qty > 1 ? a.qty : 1,\r\n maxQty: a.maxQty, // use this property to update qty\r\n wirelessGatewaySelected:\r\n byogValue === 1 && selectedProduct && selectedProduct.showWirelessGatewayForm\r\n ? true\r\n : false\r\n }));\r\n\r\n if (byogValue === 2) {\r\n selectedAddonIds = selectedAddonIds.filter((item) => {\r\n return !byogIds.includes(item.id);\r\n });\r\n setIdsToUncheck(byogIds);\r\n } else {\r\n setIdsToUncheck([]);\r\n }\r\n\r\n // if (selectedAddonIds.length === 0) {\r\n // selectedAddonIds = [\r\n // {\r\n // id: -1,\r\n // qty: 1,\r\n // maxQty: 1, // use this property to update qty\r\n // wirelessGatewaySelected:\r\n // byogValue === 1 && selectedProduct && selectedProduct.showWirelessGatewayForm\r\n // ? true\r\n // : false\r\n // }\r\n // ];\r\n // }\r\n setHomePhoneAddonSelectedByIds(selectedAddonIds);\r\n\r\n dispatch(setAddons(selectedAddonIds));\r\n }\r\n }, [selectedAddons, byogValue]);\r\n\r\n const setHomePhoneAddonSelectedByIds = (selectedAddonIds) => {\r\n var selectedAddonIdValues = selectedAddonIds.map((item) => item.id);\r\n var isHomePhoneAddonSelected = false;\r\n if (selectedAddonIdValues && selectedAddonIdValues.length > 0 &&\r\n addons &&\r\n addons.filter(\r\n (item) =>\r\n selectedAddonIdValues.includes(item.addonId) &&\r\n item.addonName.toUpperCase().includes(\"PHONE\")\r\n ).length > 0\r\n ) {\r\n isHomePhoneAddonSelected = true;\r\n }\r\n setHomePhoneAddonSelected(isHomePhoneAddonSelected);\r\n };\r\n\r\n const onBYOGChange = (event) => {\r\n setByogValue(Number(event.target.value));\r\n };\r\n // new location addon groups logic\r\n let categoriesCard = [];\r\n let hasPremierValueBundle = false;\r\n const categoryToLinkWithBOYG = \"Premier Value Bundle\".toLowerCase();\r\n if (addons) {\r\n const categories = getCategorys(addons);\r\n //used to move BOYG under premier value bundle if it exist\r\n //note that conditional logic below Category control is part of this functionality\r\n // -- {c.name.toLowerCase() == \"premier value bundle\" && show when premier value bundle exist\r\n // -- {!hasPremierValueBundle && to show when premier value bundle does not exist\r\n // let accData=[];\r\n // for(let index=0;index<categories.length; index++)\r\n // {\r\n // if (categories[index].isAddonGroupOpenByDefault)\r\n // {\r\n // accData.push(`panel${index}`);\r\n // }\r\n // } \r\n\r\n\r\n hasPremierValueBundle = categories.some(\r\n (c) => c.name.toLowerCase() === categoryToLinkWithBOYG\r\n );\r\n categoriesCard = categories.length\r\n ? categories.map((c, index) => {\r\n var addonsResult = addons.filter((ad) => ad.groupingCategory === c.name); // && ad.isEquipment === isEquipmentStep);\r\n\r\n var hideCategory = false;\r\n if (addonsResult) {\r\n addonsResult.forEach((a) => {\r\n if (a && a.requiredAddonVersionIds && a.requiredAddonVersionIds.length > 0) {\r\n hideCategory = true;\r\n a.requiredAddonVersionIds.forEach((r) => {\r\n if (selectedIdsCheck && selectedIdsCheck.length > 0 && selectedIdsCheck.includes(r)) {\r\n hideCategory = false;\r\n }\r\n });\r\n }\r\n });\r\n addonsResult.forEach((a) => {\r\n a.hidden = false;\r\n if (a.isEquipment !== isEquipmentStep) {\r\n a.hidden = true;\r\n }\r\n else if (a.requiredAddonVersionIds.length > 0) {\r\n a.hidden = true;\r\n a.requiredAddonVersionIds.forEach((r) => {\r\n if (selectedIdsCheck && selectedIdsCheck.length && selectedIdsCheck.length > 0 && selectedIdsCheck.includes(r)) {\r\n a.hidden = false;\r\n }\r\n });\r\n }\r\n });\r\n if (addonsResult.filter(a => a.hidden !== true).length === 0) {\r\n hideCategory = true;\r\n }\r\n }\r\n return (\r\n <div key={c.name} style={{ display: hideCategory ? 'none' : 'inline' }}>\r\n {/* {c.requiredQty > 0 && c.groupingCategorySelectMode !== \"radiobutton\" ? <CategoryQtyHeading category={c} /> : null} */}\r\n <Accordion key={index}\r\n expanded={expanded.includes(`panel${index}`)}\r\n onChange={handleChangeOpenClose(`panel${index}`)}\r\n style={{ marginBottom: \"5px\" }} >\r\n <AccordionSummary style={{ background: \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\", height: \"10px !important\" }}\r\n expandIcon={<ExpandMoreIcon style={{ color: \"white\" }} fontSize=\"large\" />}\r\n aria-controls=\"panel1-content\"\r\n id=\"panel1-header\"\r\n >\r\n <Typography sx={{ width: { xs: '75%', sm: '80%', md: '85%', lg: '90%', xl: '90%' }, flexShrink: 0 }}>\r\n {c.text && c.text !== c.name ? <CategoryHeading category={c} /> : null}\r\n </Typography>\r\n <Typography sx={{ color: 'white', flexShrink: 0 }}>\r\n {c.requiredQty > 0 ? \"Required\" : \"Optional\"}</Typography>\r\n\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n {c.name === categoryWarning ? (\r\n <CategoryWarningMsg\r\n handleChangeOpenClose={handleChangeOpenCloseWarning(`panel${index}`)}\r\n category={c} />\r\n ) : null}\r\n <Category\r\n addons={addonsResult}\r\n selectedAddons={selectedAddons}\r\n onChange={onAddonChange}\r\n selectedIdsCheck={\r\n selectedIdsCheck &&\r\n selectedIdsCheck.filter((sa) => !idsToUncheck || !idsToUncheck.length > 0 || !idsToUncheck.includes(sa))\r\n }\r\n incompatibleAddonIds={incompatibleAddonIds}\r\n byogState={byogValue}\r\n byogIdsArray={byogIds}\r\n isGatewayCategory={c.name === \"Gateway\"}\r\n isEquipmentStep={isEquipmentStep}\r\n />\r\n {c.name.toLowerCase() == categoryToLinkWithBOYG &&\r\n selectedProduct &&\r\n selectedProduct.showWirelessGatewayForm ? (\r\n <>\r\n <BYOG\r\n handleChange={onBYOGChange}\r\n value={byogValue}\r\n disable={byogDisable}\r\n gatewayFree={gatewayFree}\r\n />\r\n <br></br>\r\n </>\r\n ) : null}\r\n </AccordionDetails>\r\n </Accordion>\r\n {/* {c.text && c.text !== c.name ? <CategoryHeading category={c} /> : null}\r\n {c.name === categoryWarning ? (\r\n <CategoryWarningMsg category={c} />\r\n ) : null}\r\n <Category\r\n addons={addonsResult}\r\n selectedAddons={selectedAddons}\r\n onChange={onAddonChange}\r\n selectedIdsCheck={\r\n selectedIdsCheck &&\r\n selectedIdsCheck.filter((sa) => !idsToUncheck || !idsToUncheck.length > 0 || !idsToUncheck.includes(sa))\r\n }\r\n incompatibleAddonIds={incompatibleAddonIds}\r\n byogState={byogValue}\r\n byogIdsArray={byogIds}\r\n isGatewayCategory={c.name === \"Gateway\"}\r\n isEquipmentStep={isEquipmentStep}\r\n />\r\n {c.name.toLowerCase() == categoryToLinkWithBOYG &&\r\n selectedProduct &&\r\n selectedProduct.showWirelessGatewayForm ? (\r\n <>\r\n <BYOG\r\n handleChange={onBYOGChange}\r\n value={byogValue}\r\n disable={byogDisable}\r\n gatewayFree={gatewayFree}\r\n />\r\n <br></br>\r\n </>\r\n ) : null} */}\r\n </div>\r\n )\r\n })\r\n : null;\r\n }\r\n //new location end\r\n\r\n return (\r\n <>\r\n {addonLoading && <Stack spacing={1}>\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton />\r\n <Skeleton variant=\"rectangular\" width=\"100%\" height={70} />\r\n <Skeleton variant=\"rounded\" width=\"100%\" height={100} />\r\n </Stack>}\r\n <React.Fragment>{categoriesCard}</React.Fragment>\r\n\r\n <Backdrop\r\n sx={{ backgroundColor: 'rgba(240, 240, 240,0.5)', color: '#fff', height: 'auto', width: '100%', display: 'flex', flexDirection: 'column', zIndex: (theme) => theme.zIndex.drawer + 1 }}\r\n open={addonLoading}\r\n //onClick={handleClose}\r\n >\r\n <CircularProgress style={{ 'color': '#012639', 'margin-bottom': '18px' }} thickness={8} size={64} />\r\n <Typography sx={{\r\n textAlign: \"center\",\r\n color: \"black\",\r\n fontWeight: 700,\r\n fontSize: \"1.5rem\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1\r\n }}\r\n >\r\n Just a moment while we update your cart\r\n </Typography>\r\n </Backdrop>\r\n\r\n {!hasPremierValueBundle &&\r\n selectedProduct &&\r\n selectedProduct.showWirelessGatewayForm ? (\r\n <BYOG\r\n handleChange={onBYOGChange}\r\n value={byogValue}\r\n disable={byogDisable}\r\n gatewayFree={gatewayFree}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport FormGroup from \"@mui/material/FormGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Link from \"@mui/material/Link\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n h5: {\r\n fontSize: \"18px\",\r\n fontWeight: \"normal\",\r\n color: \"#000\",\r\n marginBottom: \"2px\"\r\n },\r\n p: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#535353\"\r\n },\r\n link: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#797979\",\r\n textDecoration: \"none\"\r\n },\r\n wrapper: {\r\n textAlign: \"center\",\r\n marginTop: \"25px\"\r\n },\r\n formGroup: {\r\n justifyContent: \"center\"\r\n },\r\n label: {\r\n marginRight: \"60px\"\r\n },\r\n lastLabel: {\r\n marginRight: \"0px\"\r\n }\r\n});\r\n\r\nconst ProductsFilter = props => {\r\n const classes = useStyles();\r\n\r\n const { handleFilterChange, onClearFilters, filter } = props;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography className={classes.h5} gutterBottom>\r\n Know what you’re looking for?\r\n </Typography>\r\n <Typography className={classes.p} gutterBottom>\r\n Choose your services and we’ll find the best offers for you.\r\n </Typography>\r\n <FormGroup row={true} className={classes.formGroup + \" filter-group\"}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={filter.includes(\"HSI\")}\r\n onChange={handleFilterChange}\r\n name=\"HSI\"\r\n />\r\n }\r\n label={\r\n <>\r\n <div className=\"filter-icon hsi\"></div>\r\n <span>Internet</span>\r\n </>\r\n }\r\n className={classes.label}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={filter.includes(\"TV\")}\r\n onChange={handleFilterChange}\r\n name=\"TV\"\r\n />\r\n }\r\n label={\r\n <>\r\n <div className=\"filter-icon tv\"></div>\r\n <span>TV</span>\r\n </>\r\n }\r\n className={classes.label}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={filter.includes(\"PHONE\")}\r\n onChange={handleFilterChange}\r\n name=\"PHONE\"\r\n />\r\n }\r\n label={\r\n <>\r\n <div className=\"filter-icon phone\"></div>\r\n <span>Home Phone</span>\r\n </>\r\n }\r\n className={classes.lastLabel}\r\n />\r\n </FormGroup>\r\n <Link\r\n className={classes.link}\r\n component=\"button\"\r\n variant=\"body2\"\r\n onClick={onClearFilters}\r\n sx={{ mt: 1 }}\r\n >\r\n Clear Filters\r\n </Link>\r\n </div>\r\n );\r\n};\r\nexport default ProductsFilter;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nconst useStyles = makeStyles({\r\n price2: {\r\n textAlign: \"left\",\r\n position: \"relative\",\r\n width: \"131px\",\r\n margin: \"4 auto\",\r\n },\r\n price3: {\r\n textAlign: \"left\",\r\n position: \"relative\",\r\n width: \"165px\",\r\n margin: \"4 auto\",\r\n },\r\n priceDollarSign: {\r\n color: \"#333\",\r\n fontSize: 27,\r\n lineHeight: \"27px\",\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n },\r\n priceDollar: {\r\n color: \"#333\",\r\n fontSize: 60,\r\n lineHeight: \"43px\",\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n },\r\n priceCents: {\r\n color: \"#333\",\r\n fontSize: 26,\r\n lineHeight: \"22px\",\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n },\r\n priceSuffix: {\r\n color: \"#333\",\r\n fontSize: 21,\r\n position: \"absolute\",\r\n right: \"11px\",\r\n top: \"19px\",\r\n },\r\n priceSuffix2: {\r\n color: \"#333\",\r\n fontSize: 16,\r\n marginLeft: \"20px\",\r\n display: \"inline-block\",\r\n },\r\n});\r\n\r\nexport default function ProductPrice({ product }) {\r\n const classes = useStyles();\r\n\r\n if (!product) return;\r\n\r\n const price = product.priceLabel.split(\".\");\r\n const priceDollar = price[0].replace(\"$\", \"\");\r\n const priceCents = \".\" + price[1];\r\n const priceSuffix = product.priceSuffix.replace(\" \", \"\");\r\n\r\n return (\r\n <div className={priceDollar.length === 3 ? classes.price3 : classes.price2}>\r\n <Typography className={classes.priceDollarSign}>$</Typography>\r\n <Typography className={classes.priceDollar}>{priceDollar}</Typography>\r\n <Typography className={classes.priceCents}>{priceCents}</Typography>\r\n <Typography className={classes.priceSuffix}>{priceSuffix}</Typography>\r\n <Typography className={classes.priceSuffix2}>\r\n {product.priceSuffix2}\r\n </Typography>\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport LocalApi from \"../../redux/localApi\";\r\n\r\nexport default function BroadbandLabelView(props) {\r\n const { labelUrl = null } = props;\r\n //state\r\n const [labelHTML, SetLabelHTML] = useState(null);\r\n const [labelHTMLError, SetLabelHTMLError] = useState(null);\r\n const defaultErrorMsg =\r\n \"Sorry, we are not currently able to display our Broadband Label.\";\r\n console.log(\"JWP labelHTML \", labelHTML);\r\n\r\n //make call\r\n useEffect(() => {\r\n // call new api getBroadbandLabel\r\n\r\n async function getProductLabel(labelUrl) {\r\n try {\r\n const encodedLabelUrl = encodeURIComponent(labelUrl);\r\n const response = await LocalApi.get(\r\n `/api/Products/GetBroadbandLabel/${encodedLabelUrl}`\r\n );\r\n //console.log(\"response\",response);\r\n console.log(\"JWP getProductLabel response\", response);\r\n if (response?.data?.html) {\r\n SetLabelHTML(response.data.html);\r\n } else {\r\n SetLabelHTMLError(defaultErrorMsg);\r\n }\r\n } catch (error) {\r\n console.log(\"JWP getProductLabel error\", error);\r\n SetLabelHTMLError(defaultErrorMsg);\r\n }\r\n }\r\n\r\n if (labelUrl) {\r\n getProductLabel(labelUrl);\r\n } else {\r\n SetLabelHTMLError(defaultErrorMsg);\r\n }\r\n }, []);\r\n\r\n if (labelHTML || labelHTMLError) {\r\n return (\r\n <div>\r\n {labelHTML && !labelHTMLError && (\r\n <div>\r\n <div style={{ height: \"55vh\" }}>\r\n <iframe\r\n title=\"Embedded Content\"\r\n srcDoc={labelHTML}\r\n // added 15px to account for scroll bar width 265px(label width) - 15px scrollbar = 280px\r\n style={{ width: \"280px\", height: \"100%\" }}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {labelHTMLError && <div>{labelHTMLError}</div>}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <Box sx={{ width: \"265px\" }}>\r\n <Skeleton height={40} />\r\n <Skeleton />\r\n <Skeleton height={25} />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton height={25} />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton height={25} />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton />\r\n <Skeleton height={40} />\r\n </Box>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { makeStyles, ThemeProvider } from \"@mui/styles\";\r\nimport { styled, createTheme } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Tooltip, { tooltipClasses } from \"@mui/material/Tooltip\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport Box from \"@mui/material/Box\";\r\nimport \"../../css/main.css\";\r\nimport ProductPrice from \"./ProductPrice\";\r\nimport ProductPromoTitle from \"./ProductPromoTitle\";\r\nimport ProductPromoDetails from \"./ProductPromoDetails\";\r\nimport ItemImage from \"./ItemImage\";\r\nimport BblIframe from \"./BblIframe\";\r\nimport BroadbandLabelView from \"./BroadbandLabelView\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n card: {\r\n minWidth: 275,\r\n borderRadius: 4,\r\n marginBottom: \"25px\",\r\n border: \"1px solid #A1A1A1\",\r\n position: \"relative\",\r\n },\r\n cardSelected: {\r\n minWidth: 275,\r\n borderRadius: 4,\r\n marginBottom: \"25px\",\r\n border: \"3px solid rgba(1, 38, 57, 1)\",\r\n position: \"relative\",\r\n },\r\n cardContent: {\r\n paddingTop: \"24px\",\r\n },\r\n gridContainer: {},\r\n title: {\r\n fontSize: 26,\r\n fontWeight: \"600\",\r\n fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#002A42\",\r\n marginTop: \"15px\",\r\n },\r\n selectBtn: {\r\n borderRadius: \"22px\",\r\n color: \"#333\",\r\n border: \"1px solid #707070\",\r\n width: \"80%\",\r\n textAlign: \"center\",\r\n padding: \"8px 0\",\r\n fontSize: \"18px\",\r\n marginTop: \"15px\",\r\n marginBottom: \"25px\",\r\n },\r\n description: {\r\n fontSize: \"14px\",\r\n fontWeight: \"normal\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n //textAlign: \"left\",\r\n marginTop: \"15px\",\r\n marginBottom: \"10px\",\r\n },\r\n promoTitle: {\r\n fontSize: \"14px\",\r\n fontStyle: \"italic\",\r\n fontWeight: \"bold\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n //textAlign: \"left\",\r\n marginBottom: \"0px\",\r\n },\r\n promoDescription: {\r\n fontSize: \"14px\",\r\n fontStyle: \"italic\",\r\n fontWeight: \"bold\",\r\n color: \"#434343\",\r\n marginTop: \"0px\",\r\n marginBottom: \"10px\",\r\n },\r\n termsToolTip: {\r\n fontSize: \"14px\",\r\n fontWeight: \"600\",\r\n fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#002A42\",\r\n textDecoration: \"none\",\r\n },\r\n termsTitle: {\r\n fontSize: \"14px\",\r\n fontWeight: \"600\",\r\n fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#434343\",\r\n textDecoration: \"none\",\r\n },\r\n terms: {\r\n fontSize: \"11px\",\r\n fontWeight: \"400\",\r\n fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#434343\",\r\n textDecoration: \"none\",\r\n },\r\n section1: {\r\n textAlign: \"left\",\r\n },\r\n section2: {},\r\n section3: {\r\n textAlign: \"center\",\r\n minWidth: \"161px\",\r\n margin: \"auto\",\r\n },\r\n}));\r\n\r\nconst HtmlTooltip = styled(({ className, ...props }) => (\r\n <Tooltip {...props} classes={{ popper: className }} />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: \"#f5f5f9\",\r\n color: \"rgba(0, 0, 0, 0.87)\",\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: \"1px solid #dadde9\",\r\n },\r\n}));\r\n\r\nexport default function ProductView(props) {\r\n const classes = useStyles();\r\n const { product, onSelect, selected } = props;\r\n const [width, setWidth] = useState(window.innerWidth);\r\n\r\n const bbL_FullURL = product.bbL_URL ?? null;\r\n\r\n useEffect(() => {\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, []);\r\n\r\n return (\r\n <>\r\n <Card className={selected ? classes.cardSelected : classes.card}>\r\n <CardContent className={classes.cardContent}>\r\n <Grid\r\n className={classes.gridContainer}\r\n container\r\n direction=\"row\"\r\n justifyContent={{ xs: \"flex-start\", sm: \"center\" }}\r\n alignItems=\"flex-start\"\r\n spacing={0}\r\n >\r\n <Grid item xs={12} md={5} className={classes.section1}>\r\n <ItemImage item={product} mdMaxHeight={167}/>\r\n\r\n <Stack direction=\"column\" spacing={0} alignItems=\"left\">\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title + \" product-name\"}\r\n >\r\n {product.productName}\r\n </Typography>\r\n <ProductPrice product={product} />\r\n <div className={classes.description}>\r\n {product.productDescription}\r\n </div>\r\n {product.promoTitle && (\r\n <Typography component=\"div\" className={classes.promoTitle}>\r\n {product.promoTitle}\r\n </Typography>\r\n )}\r\n {product.promoDetails && (\r\n <Typography\r\n component=\"div\"\r\n className={classes.promoDescription}\r\n >\r\n {product.promoDetails}\r\n </Typography>\r\n )}\r\n <HtmlTooltip title={product.termsAndConditions}>\r\n <Link\r\n href=\"#\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n }}\r\n className={classes.termsToolTip}\r\n >\r\n Terms and Conditions\r\n </Link>\r\n </HtmlTooltip>\r\n <div>\r\n <Link\r\n underline=\"none\"\r\n component=\"button\"\r\n variant=\"body2\"\r\n onClick={() => {\r\n onSelect(product);\r\n }}\r\n className={classes.selectBtn + \" select-btn\"}\r\n >\r\n {selected ? <CheckIcon /> : null}\r\n {selected ? \" Selected\" : \"Select\"}\r\n </Link>\r\n </div>\r\n </Stack>\r\n </Grid>\r\n <Grid item xs={2} md={1}></Grid>\r\n <Grid item xs={12} md={3}>\r\n {bbL_FullURL && (\r\n <Box\r\n // maxWidth={270}\r\n mx=\"auto\" // Centers the box horizontally\r\n >\r\n <BroadbandLabelView\r\n labelUrl={bbL_FullURL}\r\n ></BroadbandLabelView>\r\n </Box>\r\n )}\r\n <div></div>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport ProductView from \"./ProductView\";\r\nimport { setProduct } from \"../../redux/actions/productActions\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\n\r\nexport default function ProductGroup({\r\n products,\r\n setHomePhoneSelected,\r\n selectedProductId,\r\n campaignType,\r\n}) {\r\n const dispatch = useDispatch();\r\n\r\n const [selectedId, setSelectedId] = useState(selectedProductId);\r\n\r\n const onSelect = (product) => {\r\n setHomePhoneSelected(product.isPhone);\r\n if (product && product.productId) {\r\n if (product.productId === selectedProductId) {\r\n //unselect porduct\r\n // setSelectedId(null);\r\n dispatch(setProduct(0));\r\n } else {\r\n ga4.event(\"c_button\", {\r\n c_action:\r\n campaignType + \" LeadPath \" + product.productName + \" Select\",\r\n });\r\n // setSelectedId(product.productId);\r\n dispatch(setProduct(product.productId, product.sagCode));\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {products.length\r\n ? products.map((item, i) => (\r\n <ProductView\r\n key={i}\r\n product={item}\r\n onSelect={onSelect}\r\n selected={item.productId === selectedProductId ? true : false}\r\n />\r\n ))\r\n : null}\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport Select from \"@mui/material/Select\";\r\nimport OutlinedInput from \"@mui/material/OutlinedInput\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport Tabs from \"@mui/material/Tabs\";\r\nimport Tab from \"@mui/material/Tab\";\r\nimport { styled } from \"@mui/system\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport ProductView from \"./ProductView\";\r\nimport { setProduct } from \"../../redux/actions/productActions\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n outlinedSelect: {\r\n \"& .MuiOutlinedInput-root\": {\r\n \"&.MuiOutlinedInput-notchedOutline\": {\r\n border: \"1px solid\", // Set border to be solid\r\n borderRadius: \"4px\", // Set border radius\r\n },\r\n },\r\n },\r\n}));\r\n\r\nconst CustomTab = styled(Tab)(({ theme, selected }) => ({\r\n textTransform: \"none\",\r\n fontSize: \"16px\",\r\n fontWeight: \"bold\",\r\n color: selected ? \"black\" : \"black\", // Set tab label color\r\n //borderBottom: selected && `2px solid #3381AE`,\r\n \"&:hover\": {\r\n color: selected ? \"black\" : \"black\",\r\n },\r\n \"&.Mui-selected\": {\r\n color: \"black\", // Set text color when selected\r\n },\r\n marginLeft: \"20px\",\r\n marginRight: \"20px\",\r\n paddingRight: \"0px\",\r\n paddingLeft: \"0px\",\r\n paddingBottom: \"0px\",\r\n}));\r\n\r\n// Customized Tabs component for styling the indicator (underline)\r\nconst CustomTabs = styled(Tabs)(({ theme }) => ({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n \"& .MuiTabs-indicator\": {\r\n backgroundColor: \"#012639\", // Set underline color for the active tab\r\n height: \"5px\",\r\n },\r\n}));\r\n\r\nconst CenteredTabsWrapper = styled(\"div\")({\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n});\r\n\r\n// Customized MenuItem component for styling the dropdown options\r\nconst CustomMenuItem = styled(MenuItem)(({ theme }) => ({\r\n \"&.Mui-selected\": {\r\n backgroundColor: \"#012639\", // Set background color for the selected option\r\n color: \"white\", // Set text color for the selected option\r\n },\r\n}));\r\n\r\nexport default function SpeedTiersView({\r\n products,\r\n setHomePhoneSelected,\r\n selectedProductId,\r\n campaignType,\r\n}) {\r\n const [selectedTab, setSelectedTab] = React.useState(0);\r\n const [width, setWidth] = useState(window.innerWidth);\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n const handleResize = () => setWidth(window.innerWidth);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, []);\r\n const handleChange = (event, newValue) => {\r\n //console.log(\"handleChange JWP\", newValue);\r\n setSelectedTab(newValue);\r\n };\r\n const handleChangeDropDown = (event) => {\r\n //console.log(\"handleChange JWP\", event);\r\n setSelectedTab(event.target.value);\r\n };\r\n const dispatch = useDispatch();\r\n\r\n const onSelect = (product) => {\r\n setHomePhoneSelected(false);\r\n if (product && product.productId) {\r\n if (product.productId === selectedProductId) {\r\n //unselect porduct\r\n // setSelectedId(null);\r\n dispatch(setProduct(0));\r\n } else {\r\n ga4.event(\"c_button\", {\r\n c_action:\r\n campaignType + \" LeadPath \" + product.productName + \" Select\",\r\n });\r\n // setSelectedId(product.productId);\r\n dispatch(setProduct(product.productId, product.sagCode));\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div>\r\n {width <= 640 ? (\r\n <>\r\n <FormControl variant=\"outlined\" fullWidth>\r\n <Select\r\n sx={{ \"& legend\": { display: \"none\" }, \"& fieldset\": { top: 0 } }}\r\n value={selectedTab}\r\n onChange={handleChangeDropDown}\r\n SelectDisplayProps={{\r\n // This is to apply styles to the select component itself\r\n style: {\r\n padding: \"10px\", // Example of adding padding\r\n },\r\n }}\r\n >\r\n {products.map((product, index) => (\r\n <MenuItem key={index} value={index}>\r\n {product.speedTierName}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </>\r\n ) : (\r\n <CenteredTabsWrapper>\r\n <CustomTabs\r\n variant=\"scrollable\"\r\n value={selectedTab}\r\n onChange={handleChange}\r\n >\r\n {products.map((product, index) => (\r\n <CustomTab key={index} label={product.speedTierName} />\r\n ))}\r\n </CustomTabs>\r\n </CenteredTabsWrapper>\r\n )}\r\n {products.map((product, index) => (\r\n <div key={index} hidden={selectedTab !== index}>\r\n <br></br>\r\n <ProductView\r\n key={index}\r\n product={product}\r\n onSelect={onSelect}\r\n selected={product.productId === selectedProductId ? true : false}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","export const getDisplayAddress = address => {\r\n const displayAddress = address ? (address.houseNumber + \" \" + address.streetName) : \"\"\r\n return displayAddress;\r\n};\r\n","import React from \"react\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\n\r\nimport \"../css/main.css\";\r\nimport { getDisplayAddress } from \"../lib/address\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nexport default function SameAsServiceAddress({ address }) {\r\n return (\r\n <>\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }} sx={{ display: \"none\" }}>\r\n <Grid item xs={6}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Address\"\r\n fullWidth\r\n defaultValue={getDisplayAddress(address)}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n defaultValue={address && address.aptSuite ? address.aptSuite : \" \"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"City\"\r\n fullWidth\r\n defaultValue={address && address.city ? address.city : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"State\"\r\n fullWidth\r\n defaultValue={address && address.state ? address.state : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Zip\"\r\n fullWidth\r\n defaultValue={address && address.zipCode ? address.zipCode : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { IMaskInput } from \"react-imask\";\r\n\r\nexport const SsnMaskInput = React.forwardRef((props, ref) => {\r\n const { ...other } = props;\r\n return <IMaskInput {...other} mask=\"0000\" inputRef={ref} />;\r\n});\r\n\r\nexport const PhoneMaskInput = React.forwardRef((props, ref) => {\r\n const { ...other } = props;\r\n\r\n return (\r\n <IMaskInput\r\n {...other}\r\n unmask={true}\r\n placeholderChar=\"_\"\r\n mask=\"000-000-0000\"\r\n inputRef={ref}\r\n />\r\n );\r\n});\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport DividerM from \"@mui/material/Divider\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Button from \"@mui/material/Button\";\r\nimport \"../css/main.css\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { createWarmLead } from \"./../redux/actions/orderActions\";\r\nimport { resetAll } from \"./../redux/actions/stepActions\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport Select from \"@mui/material/Select\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { getDisplayAddress } from \"../lib/address\";\r\nimport {\r\n isNotEmpty,\r\n isEmailValid,\r\n isNotContainSpace,\r\n isPhoneValid,\r\n} from \"../lib/validation\";\r\nimport SameAsServiceAddress from \"./SameAsServiceAddress\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { PhoneMaskInput, SsnMaskInput } from \"../components/IMaskInputs\";\r\nimport { Card, CardContent } from \"@mui/material\";\r\nimport { disableEnterKey } from \"../components/disableEnterKey\";\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n marginBottom: \"30px\",\r\n },\r\n mainWrapper: {\r\n marginTop: \"5px\",\r\n },\r\n hr: {\r\n backgroundColor: \"#E2E2E3\",\r\n },\r\n title: {\r\n fontSize: 18,\r\n margin: \"40px 0px 0px 0px\",\r\n },\r\n checkBoxTitle: {\r\n fontSize: 14,\r\n margin: \"5px 4px\",\r\n display: \"inline-block\",\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n formControl: {\r\n width: \"100%\",\r\n },\r\n warmLeadsFormFormHeader: {\r\n textAlign: \"center\",\r\n marginBottom: 20,\r\n fontWeight: \"bold\",\r\n },\r\n why: { fontWeight: \"bold\", color: \"#0099cc\" },\r\n p: { fontSize: 14 },\r\n blueText: { color: \"#0170a0\", fontWeight: \"bold\" },\r\n btn:{\r\n background: \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n },\r\n});\r\n\r\n// Form fields in WarmLeads component\r\n// firstName\r\n// lastName\r\n// address\r\n// aptUnit\r\n// city\r\n// zip\r\n// phone\r\n// email\r\n// bestTimeToCall\r\n// accountNumber\r\n\r\nconst WarmLeads = forwardRef((props, ref) => {\r\n const dispatch = useDispatch();\r\n\r\n const address = useSelector((state) => state.address.address);\r\n const warmLead = useSelector((state) => state.order.warmLead);\r\n const [submitted, setSubmitted] = useState(false);\r\n\r\n const classes = useStyles();\r\n let history = useHistory();\r\n\r\n const [tvChecked, setTvChecked] = useState(false);\r\n const [isCurrentCustomer, setIsCurrentCustomer] = useState(false);\r\n const [hsiChecked, setHsiChecked] = useState(false);\r\n const [fiberChecked, setFiberChecked] = useState(false);\r\n\r\n const onTvChange = (e) => {\r\n setTvChecked(e.target.checked);\r\n };\r\n const onCurrentCustomerChange = (e) => {\r\n setIsCurrentCustomer(e.target.checked);\r\n };\r\n //onTvChange\r\n const onHsiChange = (e) => {\r\n setHsiChecked(e.target.checked);\r\n };\r\n\r\n const onFiberChange = (e) => {\r\n setFiberChecked(e.target.checked);\r\n };\r\n\r\n const {\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n control,\r\n } = useForm();\r\n\r\n const submitFormInput = useRef(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // emulate click on form input to run useForm validation\r\n submitFormInput.current.click();\r\n },\r\n }));\r\n const trimfield = (data) => {\r\n Object.keys(data).forEach((k) => {\r\n if (data[k] && typeof data[k] === \"string\") {\r\n data[k] = data[k].trim();\r\n }\r\n });\r\n return data;\r\n };\r\n const onSubmit = (data) => {\r\n // data valid and ready to submit to server\r\n //props.setWarmLeadError(null);\r\n //console.log('before trim',data);\r\n\r\n data = trimfield(data);\r\n\r\n //console.log('after trim',data);\r\n\r\n var payload = {\r\n ...data,\r\n tvChecked,\r\n hsiChecked,\r\n fiberChecked,\r\n };\r\n\r\n dispatch(createWarmLead(payload));\r\n };\r\n\r\n const onInvalid = (data) => {\r\n //props.handleValidationFail();\r\n //console.log(\"onInvalid\", data);\r\n };\r\n\r\n useEffect(() => {\r\n if (warmLead) {\r\n // console.log(\"resetAll triggered in WarmLead\");\r\n dispatch(resetAll());\r\n history.push(\"/confirmationInterestForm\");\r\n }\r\n }, [warmLead]);\r\n\r\n useEffect(() => {\r\n if (warmLead) {\r\n setValue(\"firstName\", warmLead.firstName);\r\n setValue(\"lastName\", warmLead.lastName);\r\n setValue(\"address\", warmLead.address);\r\n setValue(\"aptUnit\", warmLead.aptUnit);\r\n setValue(\"city\", warmLead.city);\r\n setValue(\"zip\", warmLead.zip);\r\n setValue(\"phone\", warmLead.phone);\r\n setValue(\"email\", warmLead.email);\r\n setValue(\"bestTimeToCall\", warmLead.bestTimeToCall);\r\n setValue(\"accountNumber\", warmLead.accountNumber);\r\n }\r\n }, []);\r\n\r\n const getErrorState = (fieldName) => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = (fieldName) => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n return (\r\n <Card className={classes.card}>\r\n <CardContent className={classes.mainWrapper}>\r\n <form\r\n onSubmit={handleSubmit(onSubmit, onInvalid)}\r\n onKeyDown={disableEnterKey}\r\n >\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={12}>\r\n <h2 className={classes.blueText}>\r\n Get Notified when Fioptics is available for you.\r\n </h2>\r\n {/* <p><b><i>Submit your information bellow and we'll let you know as soon as Fioptics fiber is available at your address.</i></b></p> */}\r\n <p>\r\n Submit your information below and we'll let you know as soon as\r\n Fioptics Internet is available at your address.\r\n </p>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"First Name\"\r\n fullWidth\r\n error={getErrorState(\"firstName\")}\r\n variant=\"standard\"\r\n {...register(\"firstName\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Tooltip\r\n title=\"Enter the last name of the individual who will be authorized to access this account.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n label=\"Last Name\"\r\n fullWidth\r\n error={getErrorState(\"lastName\")}\r\n variant=\"standard\"\r\n {...register(\"lastName\", { required: true })}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n\r\n <Grid item xs={6}>\r\n <TextField\r\n disabled\r\n className=\"standard-read-only-input\"\r\n label=\"Address\"\r\n fullWidth\r\n defaultValue={getDisplayAddress(address)}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n disabled\r\n className=\"standard-read-only-input\"\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n defaultValue={\r\n address && address.aptSuite ? address.aptSuite : \" \"\r\n }\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n disabled\r\n className=\"standard-read-only-input\"\r\n label=\"City\"\r\n fullWidth\r\n defaultValue={address && address.city ? address.city : \"\"}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n disabled\r\n className=\"standard-read-only-input\"\r\n label=\"Zip\"\r\n fullWidth\r\n defaultValue={address && address.zipCode ? address.zipCode : \"\"}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n error={getErrorState(\"phone\")}\r\n helperText={getErrorMsg(\"phone\")}\r\n label=\"Phone\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"phone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: (v) =>\r\n isPhoneValid(v) || \"Required 10 digits\",\r\n },\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Email\"\r\n fullWidth\r\n variant=\"standard\"\r\n helperText={getErrorMsg(\"email\")}\r\n error={getErrorState(\"email\")}\r\n {...register(\"email\", {\r\n required: true,\r\n validate: {\r\n isEmailValid: (v) => isEmailValid(v) || \"Email not valid\",\r\n isNotContainSpace: (v) =>\r\n isNotContainSpace(v) || \"Space in email is not allowed\",\r\n },\r\n })}\r\n />\r\n </Grid>\r\n {/* <Grid item xs={12}>\r\n <Grid item xs={2}>\r\n <FormControl variant=\"standard\" className={classes.formControl}>\r\n <InputLabel>Best time to call</InputLabel>\r\n <Select\r\n {...register(\"bestTimeToCall\", { required: true })}\r\n error={getErrorState(\"bestTimeToCall\")}\r\n defaultValue=\"AM\"\r\n >\r\n <MenuItem value={\"AM\"}>AM</MenuItem>\r\n <MenuItem value={\"PM\"}>PM</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid> \r\n </Grid> */}\r\n <Grid item xs={6}>\r\n <Checkbox\r\n id=\"currentCustomer\"\r\n style={{color:\"#012639\"}}\r\n checked={isCurrentCustomer}\r\n onChange={onCurrentCustomerChange}\r\n ></Checkbox>\r\n <Typography\r\n className={classes.checkBoxTitle}\r\n color=\"textSecondary\"\r\n gutterBottom\r\n >\r\n I'm a current Hawaiian Telcom Customer.\r\n </Typography>\r\n </Grid>\r\n {isCurrentCustomer && (\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Account Number\"\r\n fullWidth\r\n error={getErrorState(\"accountNumber\")}\r\n variant=\"standard\"\r\n {...register(\"accountNumber\")}\r\n />\r\n </Grid>\r\n )}\r\n <Grid item xs={12}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n // color=\"primary\"\r\n disabled={submitted}\r\n className={classes.btn}\r\n >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </form>\r\n </CardContent>\r\n </Card>\r\n );\r\n});\r\n\r\nexport default WarmLeads;\r\n","import React, { useState } from \"react\";\r\n//import { makeStyles } from \"@mui/material\";\r\n\r\nexport function useForm(initialFValues, validateOnChange = false, validate) {\r\n const [values, setValues] = useState(initialFValues);\r\n const [errors, setErrors] = useState({});\r\n\r\n const handleInputChange = (e) => {\r\n const { name, value } = e.target;\r\n setValues({\r\n ...values,\r\n [name]: value\r\n });\r\n if (validateOnChange) validate({ [name]: value });\r\n };\r\n\r\n const resetForm = () => {\r\n setValues(initialFValues);\r\n setErrors({});\r\n };\r\n\r\n return {\r\n values,\r\n setValues,\r\n errors,\r\n setErrors,\r\n handleInputChange,\r\n resetForm\r\n };\r\n}\r\n\r\nexport function Form(props) {\r\n //const classes = useStyles();\r\n const { children, ...other } = props;\r\n return (\r\n //<form className={classes.root} autoComplete=\"off\" {...other}>\r\n // {props.children}\r\n //</form>\r\n <form autoComplete=\"off\" {...other}>\r\n {props.children}\r\n </form>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport HelpIcon from \"@mui/icons-material/Help\";\r\nimport Cardm from \"@mui/material/Card\";\r\nimport DividerM from \"@mui/material/Divider\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { useForm, Form } from \"../../components/useForm\";\r\nimport { createUser } from \"../../redux/actions/userActions\";\r\nimport { disableEnterKey} from \"../../components/disableEnterKey\";\r\n\r\nconst IconWithTooltip = () => (\r\n <Tooltip title=\"Passwords must not contain the user's username (entire or partial). Passwords must contain characters from three of the following four categories: 1) Uppercase characters. 2) Lowercase characters. 3) A number 0 through 9. 4) Nonalphanumeric characters: ~!@#$%^&*_-+=`|(){}[]:;,.?/\">\r\n <HelpIcon />\r\n </Tooltip>\r\n);\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n title: {\r\n fontSize: 18,\r\n },\r\n label: {\r\n fontSize: 14,\r\n },\r\n});\r\n\r\nexport default function CreateUserForm() {\r\n const [submited, setSubmited] = useState(false);\r\n // order has internalOrderId (uumax created order id), orderSubmitted, orderId\r\n const order = useSelector((state) => state.order.order);\r\n let orderResponse = null;\r\n let internalOrderId = null;\r\n if (order) {\r\n ({ orderResponse } = order);\r\n }\r\n\r\n if (orderResponse) {\r\n ({ internalOrderId } = orderResponse);\r\n }\r\n\r\n let createUserMsg = null,\r\n createUserHasError = null;\r\n const user = useSelector((state) => state.user);\r\n if (user) {\r\n ({ createUserMsg, createUserHasError } = user);\r\n }\r\n\r\n const dispatch = useDispatch();\r\n //console.log(\"order \", order);\r\n\r\n const initialFValues = {\r\n orderId: null,\r\n username: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n };\r\n\r\n const myAccountUrl = process.env.REACT_APP_DNN + process.env.REACT_APP_MYACC;\r\n\r\n const validate = (fieldValues = values) => {\r\n let temp = { ...errors };\r\n if (\"username\" in fieldValues)\r\n temp.username = fieldValues.username ? \"\" : \"This field is required.\";\r\n if (\"password\" in fieldValues)\r\n temp.password = fieldValues.password ? \"\" : \"This field is required.\";\r\n if (\"confirmPassword\" in fieldValues && \"password\" in fieldValues) {\r\n if (fieldValues.confirmPassword == \"\") {\r\n temp.confirmPassword = \"This field is required.\";\r\n } else if (\r\n fieldValues.password != \"\" &&\r\n fieldValues.confirmPassword.localeCompare(fieldValues.password) != 0\r\n ) {\r\n temp.confirmPassword = \"Passwords do not match.\";\r\n } else {\r\n temp.confirmPassword = \"\";\r\n }\r\n }\r\n\r\n setErrors({\r\n ...temp,\r\n });\r\n\r\n if (fieldValues === values)\r\n return Object.values(temp).every((x) => x === \"\");\r\n };\r\n\r\n const { values, setValues, errors, setErrors, handleInputChange, resetForm } =\r\n useForm(initialFValues, true, validate);\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n if (validate()) {\r\n setSubmited(true);\r\n var payload = {\r\n username: values.username,\r\n password: values.password,\r\n internalOrderId: internalOrderId,\r\n };\r\n dispatch(createUser(payload));\r\n }\r\n };\r\n\r\n const classes = useStyles();\r\n if (submited && createUserHasError) {\r\n setSubmited(false);\r\n }\r\n\r\n if (!internalOrderId) {\r\n return null;\r\n }\r\n return (\r\n <Cardm className={classes.root} variant=\"outlined\">\r\n <CardContent>\r\n <Form onSubmit={onSubmit} onKeyDown={disableEnterKey}>\r\n <Grid container direction=\"column\" spacing={3}>\r\n <Grid item xs={3}>\r\n <Typography\r\n className={classes.title}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n Set Up MyAccount (Optional)\r\n </Typography>\r\n <DividerM></DividerM>\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n name=\"username\"\r\n id=\"Username\"\r\n label=\"Username\"\r\n value={values.username}\r\n style={{\r\n marginTop: 8,\r\n marginBottom: 8,\r\n marginRight: 8,\r\n }}\r\n onChange={handleInputChange}\r\n variant=\"filled\"\r\n error={errors.username}\r\n helperText={errors.username}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n InputLabelProps={{\r\n style: { pointerEvents: \"auto\" },\r\n }}\r\n name=\"password\"\r\n id=\"Password\"\r\n label={\r\n <div>\r\n Password <IconWithTooltip />\r\n </div>\r\n }\r\n value={values.password}\r\n style={{\r\n marginTop: 8,\r\n marginBottom: 8,\r\n marginRight: 8,\r\n }}\r\n onChange={handleInputChange}\r\n variant=\"filled\"\r\n type=\"password\"\r\n error={errors.password}\r\n helperText={errors.password}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n name=\"confirmPassword\"\r\n id=\"ConfirmPassword\"\r\n label=\"Confirm Password\"\r\n value={values.confirmPassword}\r\n style={{ marginTop: 8, marginBottom: 8 }}\r\n onChange={handleInputChange}\r\n variant=\"filled\"\r\n type=\"password\"\r\n error={errors.confirmPassword}\r\n helperText={errors.confirmPassword}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={submited}\r\n >\r\n Submit\r\n </Button>\r\n </Grid>\r\n {createUserMsg && createUserHasError && (\r\n <Grid item xs={3}>\r\n <Typography variant=\"body1\" color={\"error\"}>\r\n {createUserMsg}\r\n </Typography>\r\n </Grid>\r\n )}\r\n {createUserMsg && !createUserHasError && (\r\n <Grid item xs={3}>\r\n <Typography variant=\"body1\" color={\"primary\"}>\r\n <span>\r\n Thank you for registering.{\" \"}\r\n <a href={myAccountUrl}>Log into your account here. </a>\r\n </span>\r\n </Typography>\r\n </Grid>\r\n )}\r\n </Grid>\r\n </Form>\r\n </CardContent>\r\n </Cardm>\r\n );\r\n}\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport DividerM from \"@mui/material/Divider\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport \"../css/main.css\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport MenuItem from \"@mui/material/MenuItem\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport Select from \"@mui/material/Select\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { getDisplayAddress } from \"../lib/address\";\r\nimport {\r\n requiredOneLeterNumber,\r\n isNotContainSpace,\r\n isEmailValid,\r\n isPhoneValid,\r\n} from \"../lib/validation\";\r\nimport SameAsServiceAddress from \"./SameAsServiceAddress\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { PhoneMaskInput, SsnMaskInput } from \"../components/IMaskInputs\";\r\nimport CreateUserForm from \"./NewOrder/CreateUserForm\";\r\nimport LocalApi from \"../redux/localApi\";\r\nimport { disableEnterKey } from \"../components/disableEnterKey\";\r\n\r\nimport { setProfileInfo } from \"./../redux/actions/userActions\";\r\nimport { setSelfInstallDeclined } from \"../redux/actions/cartActions\";\r\nimport InfoIcon from '@mui/icons-material/Info';\r\n\r\nconst useStyles = makeStyles({\r\n mainWrapper: {\r\n marginTop: \"10px\",\r\n },\r\n hr: {\r\n backgroundColor: \"#E2E2E3\",\r\n },\r\n title: {\r\n fontSize: 13,\r\n margin: \"15px 0px 0px 0px\",\r\n background: \"linear-gradient(90deg, rgb(1, 38, 57) 0%, rgb(1, 38, 57) 49%, rgba(1, 38, 57, 0.9) 100%)\",\r\n color: \"white !important\",\r\n lineHeight: 2.5,\r\n padding: \"0 0 0 10px\",\r\n letterSpacing: \"0.2px\",\r\n // fontWeight: \"bold\",\r\n },\r\n checkBoxTitle: {\r\n fontSize: 14,\r\n margin: \"5px 4px\",\r\n display: \"none\",\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n formControl: {\r\n width: \"100%\",\r\n },\r\n customerFormHeader: {\r\n textAlign: \"center\",\r\n marginBottom: 20,\r\n fontWeight: \"bold\",\r\n },\r\n why: { fontWeight: \"bold\", color: \"#0099cc\" },\r\n p: {\r\n fontSize: 14,\r\n color: \"#012639\",\r\n fontWeight: \"bold\",\r\n marginTop: 12,\r\n },\r\n});\r\n\r\n// Form fields in CustomerInfo component\r\n// firstName\r\n// lastName\r\n// phone\r\n// email\r\n// address\r\n// aptUnit\r\n// city\r\n// state\r\n// zip\r\n// passwordPIN\r\n// lastFourSsn\r\n// sharedSecretQuestionId\r\n// sharedSecretAnswer\r\n// employerName\r\n// employerPhone\r\nconst CustomerInfo = forwardRef((props, ref) => {\r\n const dispatch = useDispatch();\r\n\r\n const address = useSelector((state) => state.address.address);\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n const setProfileInfoStarted = useSelector(\r\n (state) => state.user.setProfileInfoStarted\r\n );\r\n const profileInfoError = useSelector((state) => state.user.error);\r\n const billingInfo = useSelector((state) => state.user.billingInfo);\r\n const isScheduleLoading = useSelector((state) => state.schedule.loading);\r\n const secretQuestions = useSelector((state) => state.user.secretQuestions);\r\n\r\n const showMyAccountSection = false;\r\n //run once\r\n useEffect(() => {\r\n setValue(\"address\", getDisplayAddress(address));\r\n setValue(\"aptUnit\", address.aptSuite);\r\n setValue(\"city\", address.city);\r\n setValue(\"state\", address.state);\r\n setValue(\"zip\", address.zipCode);\r\n dispatch(setSelfInstallDeclined(false));\r\n //console.log(\"JWP cust info\");\r\n }, []);\r\n\r\n const classes = useStyles();\r\n const {\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n getValues,\r\n control,\r\n } = useForm();\r\n\r\n const [useServiceAddressChecked, setUseServiceAddressChecked] =\r\n useState(true);\r\n\r\n const [isSubmitted, setIsSubmitted] = useState(null);\r\n const [formData, setFormData] = useState(null);\r\n\r\n const submitFormInput = useRef(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // emulate click on form input to run useForm validation\r\n submitFormInput.current.click();\r\n },\r\n }));\r\n\r\n const trimfield = (formdata) => {\r\n Object.keys(formdata).forEach((k) => {\r\n if (formdata[k] && typeof formdata[k] === \"string\") {\r\n formdata[k] = formdata[k].trim();\r\n }\r\n });\r\n return formdata;\r\n };\r\n\r\n useEffect(() => {\r\n if (\r\n isSubmitted &&\r\n !setProfileInfoStarted &&\r\n !isScheduleLoading &&\r\n formData\r\n ) {\r\n setIsSubmitted(false);\r\n props.setProfileInfoError(null);\r\n //console.log(\"Call from Customer Info\");\r\n let formData1 = trimfield(formData);\r\n dispatch(setProfileInfo(formData1, props.skipInstallation));\r\n }\r\n }, [isSubmitted, isScheduleLoading, formData]);\r\n\r\n const onSubmit = (data) => {\r\n setFormData(data);\r\n setIsSubmitted(true);\r\n };\r\n\r\n const onInvalid = (data) => {\r\n props.handleValidationFail();\r\n //console.log(\"onInvalid\", data);\r\n };\r\n\r\n const onUseServiceAddressChange = (e) => {\r\n setUseServiceAddressChecked(e.target.checked);\r\n\r\n if (e.target.checked) {\r\n setValue(\"address\", getDisplayAddress(address));\r\n setValue(\"aptUnit\", address.aptSuite);\r\n setValue(\"city\", address.city);\r\n setValue(\"state\", address.state);\r\n setValue(\"zip\", address.zipCode);\r\n } else {\r\n setValue(\"address\", \"\");\r\n setValue(\"aptUnit\", \"\");\r\n setValue(\"city\", \"\");\r\n setValue(\"state\", \"\");\r\n setValue(\"zip\", \"\");\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (profileInfoError) {\r\n onInvalid(profileInfoError);\r\n props.setProfileInfoError(\r\n \"Error, please check your data and try again, or call our customer service hotline at 643-0812 to order.\"\r\n );\r\n return;\r\n }\r\n props.setProfileInfoError(null);\r\n }, profileInfoError);\r\n\r\n useEffect(() => {\r\n if (profileInfo) {\r\n setValue(\"firstName\", profileInfo.firstName);\r\n setValue(\"lastName\", profileInfo.lastName);\r\n setValue(\"phone\", profileInfo.phone);\r\n setValue(\"email\", profileInfo.email);\r\n setValue(\"passwordPIN\", profileInfo.passwordPIN);\r\n setValue(\"lastFourSsn\", profileInfo.lastFourSsn);\r\n setValue(\"sharedSecretAnswer\", profileInfo.sharedSecretAnswer);\r\n //setValue(\"sharedSecretQuestionText\", profileInfo.sharedSecretQuestionText);\r\n setValue(\"employerName\", profileInfo.employerName);\r\n setValue(\"employerPhone\", profileInfo.employerPhone);\r\n setValue(\"accountNumber\", profileInfo.accountNumber);\r\n setValue(\"myAccountUsername\", profileInfo.myAccountUsername);\r\n }\r\n }, []);\r\n\r\n const getErrorState = (fieldName) => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = (fieldName) => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n const isUsernameUniqueAsync = async (username) => {\r\n const response = await LocalApi.head(`/api/User/${username}`);\r\n const exists = response && response.status === 200;\r\n if (exists) return false;\r\n else return true;\r\n };\r\n\r\n const passwordNotInclidesUsername = (password, username) => {\r\n if (!password || !username) return true;\r\n return password.toLowerCase().indexOf(username.toLowerCase()) === -1;\r\n };\r\n const passwordRequired = (username) => {\r\n if (username) return true;\r\n };\r\n const passwordClear = (username) => {\r\n if (!username) {\r\n setValue(\"myAccountPassword\", \"\");\r\n return false;\r\n }\r\n };\r\n // used for get default value only for sharedSecretQuestionId Select\r\n const getProfileDefaultValue = (fieldName) => {\r\n return profileInfo && profileInfo[fieldName] ? profileInfo[fieldName] : \"\";\r\n };\r\n\r\n return (\r\n <div className={classes.mainWrapper + \" form-main-wrapper\"}>\r\n <form\r\n onSubmit={handleSubmit(onSubmit, onInvalid)}\r\n onKeyDown={disableEnterKey}\r\n >\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n {/* <DividerM className={classes.hr}></DividerM> */}\r\n <Grid item xs={12} md={12} lg={12}>\r\n <Typography xs={12} md={12} lg={12}\r\n className={classes.title + \" form-title\"}\r\n // color=\"textSecondary\"\r\n gutterBottom\r\n >\r\n Service Address: <b>{getDisplayAddress(address)}, {address && address.aptSuite ? address.aptSuite+\", \" : \"\"} {address && address.city ? address.city : \"\"}, {address && address.state ? address.state : \"\"}, {address && address.zipCode ? address.zipCode : \"\"} \r\n </b>\r\n </Typography>\r\n\r\n </Grid>\r\n <Typography className={classes.p} color=\"textPrimary\" gutterBottom>\r\n Please enter your account information.\r\n </Typography>\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <TextField\r\n label=\"First Name *\"\r\n fullWidth\r\n error={getErrorState(\"firstName\")}\r\n variant=\"standard\"\r\n {...register(\"firstName\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <Tooltip\r\n title=\"Enter the last name of the individual who will be authorized to access this account.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n label=\"Last Name *\"\r\n fullWidth\r\n error={getErrorState(\"lastName\")}\r\n variant=\"standard\"\r\n {...register(\"lastName\", { required: true })}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <TextField\r\n label=\"Email Address * (Used for eBill Paperless Billing)\"\r\n fullWidth\r\n variant=\"standard\"\r\n helperText={getErrorMsg(\"email\")}\r\n error={getErrorState(\"email\")}\r\n {...register(\"email\", {\r\n required: true,\r\n validate: {\r\n isEmailValid: (v) => isEmailValid(v) || \"Email not valid\",\r\n isNotContainSpace: (v) =>\r\n isNotContainSpace(v) || \"Space in email is not allowed\",\r\n },\r\n })}\r\n />\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n error={getErrorState(\"phone\")}\r\n helperText={getErrorMsg(\"phone\")}\r\n label=\"Primary Phone *\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"phone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: (v) => isPhoneValid(v) || \"Required 10 digits\",\r\n },\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Address\"\r\n fullWidth\r\n defaultValue={getDisplayAddress(address)}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n fontSize=\"12\"\r\n />\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n defaultValue={\r\n address && address.aptSuite ? address.aptSuite : \" \"\r\n }\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"City\"\r\n fullWidth\r\n defaultValue={address && address.city ? address.city : \"\"}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3} sx={{ display: \"none\" }}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"State\"\r\n fullWidth\r\n defaultValue={address && address.state ? address.state : \"\"}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3} sx={{ display: \"none\" }}>\r\n <TextField\r\n className=\"standard-read-only-input\"\r\n label=\"Zip\"\r\n fullWidth\r\n defaultValue={address && address.zipCode ? address.zipCode : \"\"}\r\n InputProps={{\r\n readOnly: true,\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n </Grid>\r\n <Typography\r\n className={classes.title}\r\n color=\"textSecondary\"\r\n display={\"none\"}\r\n gutterBottom\r\n >\r\n Billing Address\r\n </Typography>\r\n {/* <Checkbox\r\n style={{color:\"#012639\"}}\r\n checked={useServiceAddressChecked}\r\n onChange={onUseServiceAddressChange}\r\n display={\"none\"}\r\n ></Checkbox> */}\r\n <Typography\r\n className={classes.checkBoxTitle}\r\n color=\"textSecondary\"\r\n gutterBottom\r\n >\r\n Same as service address\r\n </Typography>\r\n\r\n {!useServiceAddressChecked && (\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }} sx={{ display: \"none\" }}>\r\n <Grid item xs={6}>\r\n <TextField\r\n id=\"BillingAddress\"\r\n label=\"Address\"\r\n fullWidth\r\n error={getErrorState(\"address\")}\r\n variant=\"standard\"\r\n {...register(\"address\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n id=\"BillingAptSuite\"\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n error={getErrorState(\"aptUnit\")}\r\n variant=\"standard\"\r\n {...register(\"aptUnit\", { required: false })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n id=\"BillingCity\"\r\n label=\"City\"\r\n fullWidth\r\n error={getErrorState(\"city\")}\r\n variant=\"standard\"\r\n {...register(\"city\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <FormControl variant=\"standard\" sx={{ m: 0, minWidth: 120 }}>\r\n <InputLabel id=\"bill-state-label\">{\"State\"}</InputLabel>\r\n\r\n <Select\r\n labelId=\"bill-state-select-label\"\r\n id=\"BillingState\"\r\n label=\"State\"\r\n fullWidth\r\n error={getErrorState(\"state\")}\r\n variant=\"standard\"\r\n {...register(\"state\", { required: true })}\r\n >\r\n <MenuItem value={\"\"}></MenuItem>\r\n <MenuItem value={\"AL\"}>Alabama</MenuItem>\r\n <MenuItem value={\"AK\"}>Alaska</MenuItem>\r\n <MenuItem value={\"AZ\"}>Arizona</MenuItem>\r\n <MenuItem value={\"AR\"}>Arkansas</MenuItem>\r\n <MenuItem value={\"CA\"}>California</MenuItem>\r\n <MenuItem value={\"CO\"}>Colorado</MenuItem>\r\n <MenuItem value={\"CT\"}>Connecticut</MenuItem>\r\n <MenuItem value={\"DE\"}>Delaware</MenuItem>\r\n <MenuItem value={\"DC\"}>District of Columbia</MenuItem>\r\n <MenuItem value={\"FL\"}>Florida</MenuItem>\r\n <MenuItem value={\"GA\"}>Georgia</MenuItem>\r\n <MenuItem value={\"HI\"}>Hawaii</MenuItem>\r\n <MenuItem value={\"ID\"}>Idaho</MenuItem>\r\n <MenuItem value={\"IL\"}>Illinois</MenuItem>\r\n <MenuItem value={\"IN\"}>Indiana</MenuItem>\r\n <MenuItem value={\"IA\"}>Iowa</MenuItem>\r\n <MenuItem value={\"KS\"}>Kansas</MenuItem>\r\n <MenuItem value={\"KY\"}>Kentucky</MenuItem>\r\n <MenuItem value={\"LA\"}>Louisiana</MenuItem>\r\n <MenuItem value={\"ME\"}>Maine</MenuItem>\r\n <MenuItem value={\"MD\"}>Maryland</MenuItem>\r\n <MenuItem value={\"MA\"}>Massachusetts</MenuItem>\r\n <MenuItem value={\"MI\"}>Michigan</MenuItem>\r\n <MenuItem value={\"MN\"}>Minnesota</MenuItem>\r\n <MenuItem value={\"MS\"}>Mississippi</MenuItem>\r\n <MenuItem value={\"MO\"}>Missouri</MenuItem>\r\n <MenuItem value={\"MT\"}>Montana</MenuItem>\r\n <MenuItem value={\"NE\"}>Nebraska</MenuItem>\r\n <MenuItem value={\"NV\"}>Nevada</MenuItem>\r\n <MenuItem value={\"NH\"}>New Hampshire</MenuItem>\r\n <MenuItem value={\"NJ\"}>New Jersey</MenuItem>\r\n <MenuItem value={\"NM\"}>New Mexico</MenuItem>\r\n <MenuItem value={\"NY\"}>New York</MenuItem>\r\n <MenuItem value={\"NC\"}>North Carolina</MenuItem>\r\n <MenuItem value={\"ND\"}>North Dakota</MenuItem>\r\n <MenuItem value={\"OH\"}>Ohio</MenuItem>\r\n <MenuItem value={\"OK\"}>Oklahoma</MenuItem>\r\n <MenuItem value={\"OR\"}>Oregon</MenuItem>\r\n <MenuItem value={\"PA\"}>Pennsylvania</MenuItem>\r\n <MenuItem value={\"RI\"}>Rhode Island</MenuItem>\r\n <MenuItem value={\"SC\"}>South Carolina</MenuItem>\r\n <MenuItem value={\"SD\"}>South Dakota</MenuItem>\r\n <MenuItem value={\"TN\"}>Tennessee</MenuItem>\r\n <MenuItem value={\"TX\"}>Texas</MenuItem>\r\n <MenuItem value={\"UT\"}>Utah</MenuItem>\r\n <MenuItem value={\"VT\"}>Vermont</MenuItem>\r\n <MenuItem value={\"VA\"}>Virginia</MenuItem>\r\n <MenuItem value={\"WA\"}>Washington</MenuItem>\r\n <MenuItem value={\"WV\"}>West Virginia</MenuItem>\r\n <MenuItem value={\"WI\"}>Wisconsin</MenuItem>\r\n <MenuItem value={\"WY\"}>Wyoming</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n id=\"BillingZip\"\r\n label=\"Zip\"\r\n fullWidth\r\n error={getErrorState(\"zip\")}\r\n variant=\"standard\"\r\n {...register(\"zip\", { required: true })}\r\n />\r\n </Grid>\r\n </Grid>\r\n )}\r\n\r\n {useServiceAddressChecked && <SameAsServiceAddress address={address} />}\r\n\r\n <Grid item xs={12} md={12} lg={12}>\r\n <Tooltip\r\n title=\"We will use this information to validate your identity when you reach out to us in the future.\"\r\n placement=\"top-start\"\r\n >\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n Account Security<InfoIcon style={{ width: \"16px\", padding: \"0 0 0 3px\" }} />\r\n </Typography>\r\n </Tooltip>\r\n </Grid>\r\n {/* <Typography className={classes.p} color=\"textPrimary\" gutterBottom>\r\n We’ll use this information to validate your identity when you reach\r\n out to us in the future.\r\n </Typography> */}\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <Tooltip\r\n title=\"Your account password will be used to verify that you are authorized to access and/or make changes to your account. Your password must be 6 to 20 alphanumeric characters and can include both upper and lower case. You must use at least one letter AND one number. No special characters please.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n label=\"Create Account Verification Password\"\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n error={getErrorState(\"passwordPIN\")}\r\n helperText={getErrorMsg(\"passwordPIN\")}\r\n variant=\"standard\"\r\n {...register(\"passwordPIN\", {\r\n required: true,\r\n minLength: {\r\n value: 6,\r\n message: \"Required min length 6\",\r\n },\r\n maxLength: { value: 20, message: \"Allowed max length 20\" },\r\n pattern: {\r\n value: /^[a-z0-9]+$/gi,\r\n message: \"Not allowed special characters\",\r\n },\r\n validate: {\r\n requiredOneLeterNumber: (v) =>\r\n requiredOneLeterNumber(v) ||\r\n \"Need at least one letter and one number\",\r\n },\r\n })}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n <Grid item xs={0} md={6} lg={6}>\r\n {/* <Controller\r\n render={({ field }) => (\r\n <Tooltip\r\n title=\"Enter the last four digits of the social security number of the individual who will be authorized to access this account. Hawaiian Telcom uses your social security number for the sole purpose of having an added layer of security to confirm your identity.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n error={getErrorState(\"lastFourSsn\")}\r\n helperText={getErrorMsg(\"lastFourSsn\")}\r\n label=\"Last 4 SSN Digits\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n InputProps={{ inputComponent: SsnMaskInput }}\r\n />\r\n </Tooltip>\r\n )}\r\n name=\"lastFourSsn\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n pattern: {\r\n value: /[0-9]{4}/,\r\n message: \"Required four digits\",\r\n },\r\n }}\r\n /> */}\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <Tooltip\r\n title=\"We will ask you the shared secret question that you select in case you forget your password and we need to verify your identity. Please be sure to select a question and answer that you will be able to remember.\"\r\n placement=\"top\"\r\n >\r\n <FormControl variant=\"standard\" className={classes.formControl}>\r\n <InputLabel>Secret Question</InputLabel>\r\n <Select\r\n {...register(\"sharedSecretQuestionId\", { required: true })}\r\n error={getErrorState(\"sharedSecretQuestionId\")}\r\n defaultValue={getProfileDefaultValue(\r\n \"sharedSecretQuestionId\"\r\n )}\r\n >\r\n <MenuItem value=\"\">\r\n <em>Please select a question</em>\r\n </MenuItem>\r\n {secretQuestions != null\r\n ? secretQuestions.map((item) => (\r\n <MenuItem value={item.questionId}>\r\n {item.questionText}\r\n </MenuItem>\r\n ))\r\n : null}\r\n {/* <MenuItem value=\"\">\r\n <em>Please select a question</em>\r\n </MenuItem>\r\n <MenuItem value={1}>What is your favorite color?</MenuItem>\r\n <MenuItem value={2}>What is your favorite food?</MenuItem>\r\n <MenuItem value={3}>\r\n What is your favorite vacation spot?\r\n </MenuItem>\r\n <MenuItem value={4}>\r\n What is your favorite kind of music?\r\n </MenuItem>\r\n <MenuItem value={5}>\r\n What is the name of your favorite restaurant?\r\n </MenuItem> */}\r\n </Select>\r\n </FormControl>\r\n </Tooltip>\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6}>\r\n <TextField\r\n label=\"Answer\"\r\n style={{ marginTop: 0 }}\r\n fullWidth\r\n error={getErrorState(\"sharedSecretAnswer\")}\r\n variant=\"standard\"\r\n {...register(\"sharedSecretAnswer\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <Tooltip\r\n title=\"Enter the name of the employer of the individual who will be authorized to access this account. Don't know? Don't worry. This field is optional.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n label=\"Employer Name (optional)\"\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n variant=\"standard\"\r\n {...register(\"employerName\")}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <Controller\r\n render={({ field }) => (\r\n <Tooltip\r\n title=\"Enter the phone number of the employer of the individual who will be authorized to access this account. Don't know? Don't worry. This field is optional.\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n fullWidth\r\n style={{ marginTop: 8 }}\r\n error={getErrorState(\"employerPhone\")}\r\n helperText={getErrorMsg(\"employerPhone\")}\r\n label=\"Employer Phone (optional)\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n </Tooltip>\r\n )}\r\n name=\"employerPhone\"\r\n control={control}\r\n />\r\n </Grid>\r\n <Grid item xs={6} sx={{ display: \"none\" }}>\r\n <TextField\r\n id=\"AccountNumber\"\r\n label=\"Account Number\"\r\n fullWidth\r\n variant=\"standard\"\r\n {...register(\"accountNumber\", { required: false })}\r\n />\r\n </Grid>\r\n </Grid>\r\n {showMyAccountSection && (\r\n <>\r\n <Typography\r\n className={classes.title}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n Create your MyAccount Login (Optional)\r\n </Typography>\r\n\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"User Name\"\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n error={getErrorState(\"myAccountUsername\")}\r\n helperText={getErrorMsg(\"myAccountUsername\")}\r\n variant=\"standard\"\r\n {...register(\"myAccountUsername\", {\r\n required: passwordClear(getValues(\"myAccountUsername\")),\r\n validate: {\r\n isUsernameUniqueAsync: async (v) => {\r\n let userName = v === undefined ? \"\" : v;\r\n if (userName != \"\") {\r\n const unique = await isUsernameUniqueAsync(userName);\r\n // console.log(\r\n // userName + \" validating unique:\" + unique\r\n // );\r\n return unique || \"Username already exists\";\r\n }\r\n },\r\n },\r\n })}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <Tooltip\r\n title=\"Passwords must not contain the user's username (entire or partial). Passwords must contain characters from three of the following four categories: 1) Uppercase characters. 2) Lowercase characters. 3) A number 0 through 9. 4) Nonalphanumeric characters: ~!@#$%^&*_-+=`|(){}[]:;,.?/\"\r\n placement=\"top\"\r\n >\r\n <TextField\r\n label=\"Password\"\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n error={getErrorState(\"myAccountPassword\")}\r\n helperText={getErrorMsg(\"myAccountPassword\")}\r\n variant=\"standard\"\r\n type=\"password\"\r\n {...register(\"myAccountPassword\", {\r\n minLength: {\r\n value: 8,\r\n message: \"Required min length 8\",\r\n },\r\n maxLength: {\r\n value: 20,\r\n message: \"Allowed max length 20\",\r\n },\r\n pattern: {\r\n value:\r\n /(?=^.{8,20}$)(?=^\\S*$)((?=.*\\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*/,\r\n message:\r\n \"Supplied Password does not meet password requirements\",\r\n },\r\n validate: {\r\n includeUsername: (v) =>\r\n passwordNotInclidesUsername(\r\n v,\r\n getValues(\"myAccountUsername\")\r\n ) || \"password includes username\",\r\n },\r\n required: passwordRequired(\r\n getValues(\"myAccountUsername\")\r\n ),\r\n })}\r\n />\r\n </Tooltip>\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"Confirm Password\"\r\n style={{ marginTop: 8 }}\r\n fullWidth\r\n error={getErrorState(\"confirmMyAccountPassword\")}\r\n helperText={getErrorMsg(\"confirmMyAccountPassword\")}\r\n variant=\"standard\"\r\n type=\"password\"\r\n {...register(\"confirmMyAccountPassword\", {\r\n required:\r\n getValues(\"myAccountPassword\") &&\r\n getValues(\"myAccountPassword\").length > 0,\r\n validate: {\r\n confirmPassword: (v) =>\r\n getValues(\"myAccountPassword\") === v ||\r\n \"Doesn't matches password\",\r\n },\r\n })}\r\n />\r\n </Grid>\r\n </Grid>\r\n </>\r\n )}\r\n {/*<div className={classes.wrapper}>\r\n <CreateUserForm></CreateUserForm>\r\n </div>*/}\r\n </form>\r\n </div>\r\n );\r\n});\r\n\r\nexport default CustomerInfo;\r\n","import React, { useEffect } from \"react\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { checkout } from \"../redux/actions/cartActions\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport numeral from \"numeral\";\r\nimport { Box } from \"@mui/system\";\r\nimport TagManager from \"react-gtm-module\";\r\nconst useStyles = makeStyles({\r\n label: {\r\n fontSize: 14,\r\n color: \"#666\"\r\n },\r\n priceLabel: {\r\n fontSize: 14,\r\n color: \"#666\",\r\n textAlign: \"right\"\r\n },\r\n gridRow: {\r\n marginTop: \"15px\"\r\n },\r\n error: {\r\n color: \"#666\",\r\n fontSize: \"16px\",\r\n marginTop: \"3px\"\r\n }\r\n});\r\n\r\nexport default function Checkout() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(checkout());\r\n }, [dispatch]);\r\n \r\n useEffect(() => {\r\n //console.log(cart);\r\n if (cart!=null)\r\n {\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: window.location.pathname,\r\n pageTitle: \"CheckOut\",\r\n //orderTotalMrc: cart.monthlyTotals.total,\r\n //orderCurrency:\"USD\",\r\n },\r\n });\r\n }\r\n });\r\n const cart = useSelector(state => state.cart.checkoutCart);\r\n const cartError = useSelector(state => state.cart.error);\r\n if (cartError || (cart && !cart.monthlyTotals)) { \r\n return (\r\n <div className={classes.error}>\r\n Sorry, we are currently unable to display pricing at this time.\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n {!cart && !cartError && (\r\n <>\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton animation=\"wave\" />\r\n </>\r\n )}\r\n {cart ? (\r\n <Grid item xs={12} md={8}>\r\n {cart.packages.map((product, pi) => (\r\n <Grid container key={pi} sx={{ pb: 3 }}>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>{product.decription}</b>\r\n <br />\r\n <Grid container sx={{ pl: 1 }}>\r\n <b>{product.itemsLabel}</b>\r\n </Grid>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{numeral(product.total).format(\"$0,0.00\")}</b>\r\n </Typography>\r\n </Grid>\r\n {product.items.map((item, ii) => (\r\n <Grid container sx={{ pl: 1 }} key={ii}>\r\n <Grid item xs={10} md={6}>\r\n <Typography className={classes.label}>\r\n {item.name}\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n {numeral(item.price).format(\"$0,0.00\")}\r\n </Typography>\r\n </Grid>\r\n {item.discounts.map(discount => (\r\n <>\r\n <Grid item xs={10} md={6}>\r\n <Typography className={classes.label}>\r\n {discount.discountLabel}\r\n {discount.discountLabel2 &&\r\n discount.discountLabel2 != \"\" && (\r\n <>\r\n <br />\r\n <Box sx={{ pl: 5, pb: 1 }}>\r\n <i>{discount.discountLabel2}</i>\r\n </Box>\r\n </>\r\n )}\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n {numeral(discount.discount).format(\"$0,0.00\")}\r\n </Typography>\r\n </Grid>\r\n </>\r\n ))}\r\n </Grid>\r\n ))}\r\n {product.fees && product.fees.length > 0 && (\r\n <Grid container sx={{ pl: 1 }}>\r\n <Grid item xs={12}>\r\n <Typography className={classes.label}>\r\n <br />\r\n <b>{product.feesLabel}</b>\r\n </Typography>\r\n </Grid>\r\n {product.fees.map(fee => (\r\n <>\r\n <Grid item xs={10} md={6}>\r\n <Typography className={classes.label}>\r\n {fee.name}\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n {numeral(fee.price).format(\"$0,0.00\")}\r\n </Typography>\r\n </Grid>\r\n </>\r\n ))}\r\n </Grid>\r\n )}\r\n </Grid>\r\n ))}\r\n\r\n <Grid container className={classes.gridRow}>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>Subtotal</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.monthlyTotals.subtotal}</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>Promotional Discounts Total</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.monthlyTotals.discounts}</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>TOTAL MONTHLY CHARGES</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.monthlyTotals.total}</b>\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid className={classes.gridRow}>\r\n <Typography className={classes.label}>\r\n <b>One-Time Charges</b>\r\n </Typography>\r\n </Grid>\r\n\r\n {cart.oneTimeCharges.items.map(item => (\r\n <Grid container key={item} sx={{ pl: 1 }}>\r\n <Grid item xs={10} md={6}>\r\n <Typography className={classes.label}>{item.name}</Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n {numeral(item.price).format(\"$0,0.00\")}\r\n </Typography>\r\n </Grid>\r\n {item.discounts.length > 0 ? (\r\n <>\r\n {item.discounts.map(discount => (\r\n <>\r\n <Grid item xs={10} md={6}>\r\n <Typography className={classes.label}>\r\n {discount.discountLabel}\r\n {discount.discountLabel2 &&\r\n discount.discountLabel2 != \"\" && (\r\n <>\r\n <br />\r\n <Box sx={{ pl: 5, pb: 1 }}>\r\n <i>{discount.discountLabel2}</i>\r\n </Box>\r\n </>\r\n )}\r\n </Typography>\r\n </Grid>\r\n\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n {numeral(discount.discount).format(\"$0,0.00\")}\r\n </Typography>\r\n </Grid>\r\n </>\r\n ))}\r\n </>\r\n ) : null}\r\n </Grid>\r\n ))}\r\n\r\n <Grid container className={classes.gridRow}>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>Subtotal</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.oneTimeCharges.subtotal}</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>Promotional Discounts Total</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.oneTimeCharges.discounts}</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={10} md={7}>\r\n <Typography className={classes.label}>\r\n <b>TOTAL ONE-TIME CHARGES</b>\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={2} md={1}>\r\n <Typography className={classes.priceLabel}>\r\n <b>{cart.oneTimeCharges.total}</b>\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n ) : null}\r\n </React.Fragment>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport { setStep, ScreenSteps } from \"./../redux/actions/stepActions\";\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n title: {\r\n fontSize: 16,\r\n fontWeight: \"bold\",\r\n marginBottom: \"10px\",\r\n marginRight: \"6px\",\r\n },\r\n label: {\r\n fontSize: 16,\r\n // color: \"#666\",\r\n marginRight: \"6px\",\r\n },\r\n nameSection: {\r\n marginTop: \"10px\",\r\n },\r\n nameSectionElements: {\r\n // marginTop: \"-2px\",\r\n // marginBottom: \"-2px\",\r\n },\r\n rootSection: {\r\n // marginTop: \"-2px\",\r\n marginBottom: \"15px\",\r\n },\r\n value: {\r\n fontSize: 16,\r\n // color: \"#666\",\r\n },\r\n gridRow: {\r\n marginBottom: \"10px\",\r\n },\r\n});\r\n\r\nexport default function ReviewServiceAddress() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const userInfo = useSelector((state) => state.user.profileInfo);\r\n const serviceAddress = useSelector((state) => state.address.address);\r\n const history = useSelector((state) => state.steps.history);\r\n\r\n const getStreetAddress = () => {\r\n return (\r\n (serviceAddress.houseNumber ? serviceAddress.houseNumber : null) +\r\n \" \" +\r\n (serviceAddress.streetName ? serviceAddress.streetName : null)\r\n );\r\n };\r\n\r\n const getApt = () => {\r\n if (serviceAddress.aptSuite) {\r\n return serviceAddress.aptSuite.toString().toLowerCase() == \"no apt/unit\"\r\n ? null\r\n : serviceAddress.aptSuite;\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <div>\r\n <Box className={classes.rootSection}>\r\n <Typography\r\n display=\"inline\"\r\n className={classes.title}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n Service Address:\r\n </Typography>\r\n <Typography\r\n display=\"inline\"\r\n className={classes.label}\r\n color=\"textPrimary\"\r\n gutterBottom\r\n >\r\n {getStreetAddress() ? `${getStreetAddress()}, ` : \"\"}\r\n {getApt() ? `${getApt()}, ` : \"\"}\r\n {serviceAddress.city ? `${serviceAddress.city}, ` : \"\"}\r\n {serviceAddress.state ? `${serviceAddress.state} ` : \"\"}\r\n {serviceAddress.zipCode ? serviceAddress.zipCode : \"\"}\r\n </Typography>\r\n\r\n <Box className={classes.nameSection}>\r\n <Stack spacing={-0.5}>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n First Name:\r\n </Typography>\r\n <Tooltip title={userInfo.firstName} placement=\"top\">\r\n <Typography display=\"inline\" className={classes.value}>\r\n {userInfo.firstName}\r\n </Typography>\r\n </Tooltip>\r\n </Box>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Last Name:\r\n </Typography>\r\n <Tooltip title={userInfo.lastName} placement=\"top\">\r\n <Typography display=\"inline\" className={classes.value}>\r\n {userInfo.lastName}\r\n </Typography>\r\n </Tooltip>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Phone:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {userInfo.phone}\r\n </Typography>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Email:\r\n </Typography>\r\n <Tooltip title={userInfo.email} placement=\"bottom\">\r\n <Typography display=\"inline\" className={classes.value}>\r\n {userInfo.email}\r\n </Typography>\r\n </Tooltip>\r\n </Box>\r\n </Stack>\r\n </Box>\r\n </Box>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { getAWStringByDate, getAWStringByShortDate } from \"../lib/schedule\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n dividerSection: {\r\n height: \"15px\",\r\n },\r\n title: {\r\n fontSize: 16,\r\n fontWeight: \"bold\",\r\n marginBottom: \"0px\",\r\n },\r\n label: {\r\n fontSize: 16,\r\n // color: \"#666\",\r\n marginRight: \"6px\",\r\n },\r\n nameSection: {\r\n marginTop: \"10px\",\r\n },\r\n nameSectionProfessional: {\r\n marginTop: \"0px\",\r\n \"@media (max-width: 500px)\": {\r\n marginTop: \"10px\",\r\n },\r\n },\r\n nameSectionElements: {\r\n // marginTop: \"-2px\",\r\n // marginBottom: \"-2px\",\r\n },\r\n value: {\r\n fontSize: 16,\r\n },\r\n gridRow: {\r\n marginBottom: \"10px\",\r\n },\r\n});\r\n\r\nconst FalloutInstallInfo = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Box className={classes.nameSection}>\r\n <Stack spacing={-0.5}>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Your installation date is not currently available. You will be\r\n contacted by a Hawaiian Telcom representative to confirm your order\r\n and installation date.\r\n </Typography>\r\n </Box>\r\n </Stack>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default function ReviewInstallationInformation() {\r\n const classes = useStyles();\r\n const schedule = useSelector((state) => state.schedule);\r\n const scheduleInfo = schedule?.scheduleInfo ?? null;\r\n const isSelfInstall = schedule?.isSelfInstall ?? null;\r\n //console.log(\"scheduleInfo\", schedule);\r\n\r\n return (\r\n <div>\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n Installation Information:\r\n </Typography>\r\n\r\n {scheduleInfo != null ? (\r\n /* is professional install */\r\n <Box className={classes.nameSectionProfessional}>\r\n <Stack spacing={-0.5}>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Install Method:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n Professional\r\n </Typography>\r\n </Box>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Arrival Window:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.date\r\n ? getAWStringByShortDate(\r\n scheduleInfo.date,\r\n scheduleInfo.timeSlot\r\n )\r\n : null}\r\n </Typography>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Special Instructions:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.specialInstructions\r\n ? scheduleInfo.specialInstructions\r\n : null}\r\n </Typography>\r\n </Box>\r\n <Box className={classes.dividerSection}></Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Contact Name:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.contactName\r\n ? scheduleInfo.contactName\r\n : null}\r\n </Typography>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Phone:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.preferredContactPhone\r\n ? scheduleInfo.preferredContactPhone\r\n : null}\r\n </Typography>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Text:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.preferredContactTextMsg\r\n ? scheduleInfo.preferredContactTextMsg\r\n : null}\r\n </Typography>\r\n </Box>\r\n <Box>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Email:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {scheduleInfo && scheduleInfo.preferredContactEmail\r\n ? scheduleInfo.preferredContactEmail\r\n : null}\r\n </Typography>\r\n </Box>\r\n </Stack>\r\n </Box>\r\n ) : isSelfInstall === true ? (\r\n /* is self install */\r\n <Box className={classes.nameSection}>\r\n <Stack spacing={-0.5}>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Install Method:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n Self Install\r\n </Typography>\r\n </Box>\r\n <Box className={classes.nameSectionElements}>\r\n <Typography display=\"inline\" className={classes.label}>\r\n Activation Date:\r\n </Typography>\r\n <Typography display=\"inline\" className={classes.value}>\r\n {schedule?.ecomComputedActivationDate ?? null}\r\n </Typography>\r\n </Box>\r\n </Stack>\r\n </Box>\r\n ) : (\r\n /* is customer rep will call to schedule */\r\n <FalloutInstallInfo></FalloutInstallInfo>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport Checkout from \"./Checkout\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport DividerM from \"@mui/material/Divider\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport ReviewServiceAddress from \"./ReviewServiceAddress\";\r\nimport ReviewInstallationInformation from \"./ReviewInstallationInformation\";\r\nimport { resetNextScreen } from \"./../redux/actions/scheduleActions\";\r\nimport Skeleton from \"@mui/material/Skeleton\";\r\nimport { checkout } from \"../redux/actions/cartActions\";\r\nimport { setStep, ScreenSteps } from \"./../redux/actions/stepActions\";\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n title: {\r\n fontSize: 18,\r\n marginBottom: \"15px\",\r\n },\r\n editLabel: {\r\n fontSize: 14,\r\n },\r\n label: {\r\n fontSize: 14,\r\n },\r\n infoWrapper: {\r\n marginTop: \"20px\",\r\n },\r\n hr: {\r\n margin: \"30px 0\",\r\n },\r\n});\r\n\r\nexport default function ReviewSubmit({ onChangeAccount }) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const establishNewOrderInfo = useSelector(\r\n (state) => state.user.establishNewOrderInfo\r\n );\r\n\r\n const hasAccount = useSelector((state) => state.user.profileInfo.hasAccount);\r\n const history = useSelector((state) => state.steps.history);\r\n useEffect(() => {\r\n // to allow to get here(ReviewSubmit screen) again from Installation screen\r\n dispatch(resetNextScreen());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!hasAccount) {\r\n dispatch(checkout());\r\n }\r\n }, [hasAccount]);\r\n\r\n useEffect(() => {\r\n \r\n }, []);\r\n const forceFallout = useSelector(state =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.forceFallout\r\n ? state.campaign.campaign.forceFallout\r\n : false\r\n );\r\n const cart = useSelector((state) => state.cart.checkoutCart);\r\n let cartError = useSelector((state) => state.cart.error);\r\n const htmlReceiptList =\r\n cart && cart.htmlReceiptList && cart.htmlReceiptList.length > 0\r\n ? cart.htmlReceiptList[0]\r\n : \"\";\r\n if ((cart && htmlReceiptList == \"\") || !!cartError)\r\n cartError =\r\n \"Thanks for your patience while we prepare your order.\";\r\n //const htmlReceiptList=cart?.htmlReceiptList[0];\r\n var template = { __html: htmlReceiptList };\r\n return (\r\n <div className={classes.infoWrapper}>\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n Customer Information{\" \"}\r\n <Link\r\n className={classes.editLabel}\r\n component=\"button\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n dispatch(setStep(ScreenSteps.CUSTOMER_INFO));\r\n history.push(\"/orderwizard/CustomerInfo\");\r\n }}\r\n >\r\n edit\r\n </Link>\r\n </Typography>\r\n\r\n <Grid container>\r\n <Grid item xs={12} md={5}>\r\n <ReviewServiceAddress />\r\n </Grid>\r\n <Grid item xs={12} md={5}>\r\n {forceFallout==false?( \r\n <><ReviewInstallationInformation /></>\r\n ):\"\"}\r\n </Grid>\r\n </Grid>\r\n\r\n <DividerM className={classes.hr}></DividerM>\r\n\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n {!cart && !cartError && (\r\n <>\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton animation=\"wave\" />\r\n </>\r\n )}\r\n {/* <iframe src={cart && cart.receiptUrl ? cart.receiptUrl : \"\"} width=\"100%\" height=\"500\" title=\"Review Submit\" /> */}\r\n {/* Service Bill Summary */}\r\n </Typography>\r\n {cartError ? (\r\n <Typography color=\"textPrimary\" gutterBottom>\r\n {cartError}\r\n </Typography>\r\n ) : (\r\n \"\"\r\n )}\r\n <div\r\n dangerouslySetInnerHTML={template}\r\n style={{ width: \"-webkit-fill-available\", margin: \"0 -14px\" }}\r\n />\r\n {/* <Checkout /> */}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nimport numeral from \"numeral\";\r\n\r\nconst useStyles = makeStyles({\r\n title: {\r\n fontSize: 26\r\n },\r\n productItem: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\"\r\n },\r\n productSubItem: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\",\r\n paddingLeft: \"15px\"\r\n },\r\n productItemPrice: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\"\r\n },\r\n h5: {\r\n fontSize: \"23px\",\r\n color: \"#333333\",\r\n marginBottom: \"0px\",\r\n marginTop: \"10px\",\r\n fontWeight: \"normal\",\r\n\r\n \"& .title\": {\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\"\r\n },\r\n \"& .cost\": {\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\"\r\n }\r\n },\r\n h6: {\r\n fontSize: \"18px\",\r\n color: \"#333333\",\r\n fontWeight: \"normal\",\r\n marginTop: \"15px\",\r\n\r\n \"& .title\": {\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\"\r\n },\r\n \"& .cost\": {\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\"\r\n }\r\n },\r\n totalDescription: {\r\n fontSize: \"16px\",\r\n color: \"#333333\",\r\n lineHeight: \"20px\",\r\n marginTop: \"5px\"\r\n },\r\n totalDescriptionRight: {\r\n fontSize: \"16px\",\r\n color: \"#333333\",\r\n lineHeight: \"20px\",\r\n marginTop: \"5px\",\r\n textAlign: \"right\"\r\n },\r\n devider: {\r\n margin: \"10px 0\"\r\n },\r\n todayTotal: {\r\n fontSize: \"23px\",\r\n color: \"#333333\",\r\n fontWeight: \"600\"\r\n }\r\n});\r\n\r\nexport default function Cart(props) {\r\n const { setIsCartError, setGatewayFree } = props;\r\n\r\n const classes = useStyles();\r\n const cart = useSelector(state => state.cart.cart);\r\n const hideOneTimeFees = useSelector(state =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.hideOneTimeFees\r\n ? state.campaign.campaign.hideOneTimeFees\r\n : false\r\n );\r\n\r\n React.useEffect(() => {\r\n if(cart && cart.freeGateway === true){\r\n setGatewayFree(true);\r\n }\r\n else {\r\n setGatewayFree(false);\r\n }\r\n }, [cart]);\r\n\r\n if (!cart) return null;\r\n\r\n if (!cart.monthlyCharges) {\r\n setIsCartError(true);\r\n\r\n\r\n return (\r\n <div className=\"cart\">\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n Cart\r\n </Typography>\r\n <h5>Unable to show cart at this time</h5>\r\n <h6>Please try again later</h6>\r\n </div>\r\n );\r\n }\r\n\r\n setIsCartError(false);\r\n\r\n console.log('cart.monthlyCharges:');\r\n console.table(cart.monthlyCharges);\r\n\r\n return (\r\n <div className=\"cart\">\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n Cart\r\n </Typography>\r\n {cart.monthlyCharges &&\r\n cart.monthlyCharges.items.map((product, i) => (\r\n <div key={i}>\r\n <div>\r\n <div className={classes.productItem}>{product.itemLabel}</div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.itemPrice).format(\"$0,0.00\")}\r\n </div>\r\n </div>\r\n {product.miniCartDiscountAmount && numeral(product.miniCartDiscountAmount).value() !== 0 &&\r\n <div>\r\n <div className={classes.productSubItem}>{product.miniCartDiscountName}</div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.miniCartDiscountAmount).format(\"$0,0.00\")}\r\n </div>\r\n </div>}\r\n </div>\r\n ))}\r\n\r\n {/* \r\n <h5 className={classes.h5}>\r\n <div className=\"title\">Monthly Plan:</div>\r\n <div className=\"cost\">\r\n {cart.monthlyCharges && cart.monthlyCharges.monthlyTotal}\r\n </div>\r\n </h5>*/}\r\n \r\n {!hideOneTimeFees && (\r\n <>\r\n <h5 className={classes.h6}>\r\n <div className=\"title\">One-Time Fee(s):</div>\r\n <div className=\"cost\">\r\n {cart.oneTimeCharges && cart.oneTimeCharges.total}\r\n </div>\r\n </h5>\r\n <div className={classes.totalDescription}>\r\n {cart.oneTimeCharges && cart.oneTimeCharges.totalDescription}\r\n </div>\r\n {cart.oneTimeCharges &&\r\n cart.oneTimeCharges.items.map((product, i) => (\r\n <div key={i}>\r\n <div className={classes.productItem}>{product.itemLabel}</div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.itemPrice).format(\"$0,0.00\")}\r\n </div>\r\n </div>\r\n ))}\r\n </>\r\n )}\r\n\r\n <Divider className={classes.devider}></Divider>\r\n <h5 className={classes.h5}>\r\n <div className=\"title\">Today’s Total:</div>\r\n <div className=\"cost\">\r\n {!hideOneTimeFees &&\r\n cart &&\r\n cart.oneTimeCharges &&\r\n cart.monthlyCharges &&\r\n numeral(\r\n numeral(cart.oneTimeCharges.total).value() +\r\n numeral(cart.monthlyCharges.todaysTotal).value()\r\n ).format(\"$0,0.00\")}\r\n {hideOneTimeFees &&\r\n numeral(numeral(cart.monthlyCharges.todaysTotal).value()).format(\r\n \"$0,0.00\"\r\n )}\r\n </div>\r\n </h5>\r\n <div className={classes.totalDescriptionRight}>\r\n {cart.monthlyCharges && cart.monthlyCharges.totalDescription}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Accordion from \"@mui/material/Accordion\";\r\nimport AccordionSummary from \"@mui/material/AccordionSummary\";\r\nimport AccordionDetails from \"@mui/material/AccordionDetails\";\r\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\n\r\nimport numeral from \"numeral\";\r\n\r\nconst useStyles = makeStyles({\r\n title: {\r\n fontSize: 26,\r\n },\r\n productItem: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\",\r\n },\r\n productSubItem: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\",\r\n paddingLeft: \"15px\",\r\n },\r\n productItemPrice: {\r\n fontSize: 18,\r\n lineHeight: \"26px\",\r\n color: \"#333333\",\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\",\r\n },\r\n h5: {\r\n fontSize: \"23px\",\r\n color: \"#333333\",\r\n marginBottom: \"0px\",\r\n marginTop: \"10px\",\r\n fontWeight: \"normal\",\r\n\r\n \"& .title\": {\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\",\r\n },\r\n \"& .cost\": {\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\",\r\n },\r\n },\r\n h6: {\r\n fontSize: \"18px\",\r\n color: \"#333333\",\r\n fontWeight: \"normal\",\r\n marginTop: \"15px\",\r\n\r\n \"& .title\": {\r\n display: \"inline-block\",\r\n width: \"70%\",\r\n verticalAlign: \"top\",\r\n },\r\n \"& .cost\": {\r\n display: \"inline-block\",\r\n width: \"30%\",\r\n textAlign: \"right\",\r\n },\r\n },\r\n totalDescription: {\r\n fontSize: \"16px\",\r\n color: \"#333333\",\r\n lineHeight: \"20px\",\r\n marginTop: \"5px\",\r\n },\r\n devider: {\r\n margin: \"10px 0\",\r\n },\r\n todayTotal: {\r\n fontSize: \"23px\",\r\n color: \"#333333\",\r\n fontWeight: \"600\",\r\n },\r\n});\r\n\r\nexport default function CartMobile(props) {\r\n const { setIsCartError, setGatewayFree } = props;\r\n\r\n const classes = useStyles();\r\n const cart = useSelector((state) => state.cart.cart);\r\n const hideOneTimeFees = useSelector((state) =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.hideOneTimeFees\r\n ? state.campaign.campaign.hideOneTimeFees\r\n : false\r\n );\r\n\r\n React.useEffect(() => {\r\n if (cart && cart.freeGateway === true) {\r\n setGatewayFree(true);\r\n } else {\r\n setGatewayFree(false);\r\n }\r\n }, [cart]);\r\n\r\n if (!cart) return null;\r\n\r\n if (!cart.monthlyCharges) {\r\n setIsCartError(true);\r\n\r\n return (\r\n <div className=\"cart\">\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n Cart\r\n </Typography>\r\n <h5>Unable to show cart at this time</h5>\r\n <h6>Please try again later</h6>\r\n </div>\r\n );\r\n }\r\n\r\n setIsCartError(false);\r\n\r\n return (\r\n <div className=\"cart\">\r\n <Accordion>\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n <h5 className={classes.h5}>\r\n <div className=\"title\">Today’s Total:</div>\r\n <div className=\"cost\">\r\n {!hideOneTimeFees &&\r\n cart &&\r\n cart.oneTimeCharges &&\r\n cart.monthlyCharges &&\r\n numeral(\r\n numeral(cart.oneTimeCharges.total).value() +\r\n numeral(cart.monthlyCharges.todaysTotal).value()\r\n ).format(\"$0,0.00\")}\r\n {hideOneTimeFees &&\r\n numeral(\r\n numeral(cart.monthlyCharges.todaysTotal).value()\r\n ).format(\"$0,0.00\")}\r\n </div>\r\n </h5>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.title}\r\n >\r\n Cart Mini\r\n </Typography>\r\n {cart.monthlyCharges &&\r\n cart.monthlyCharges.items.map((product, i) => (\r\n <div key={i}>\r\n <div className={classes.productItem}>{product.itemLabel}</div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.itemPrice).format(\"$0,0.00\")}\r\n </div>\r\n {product.miniCartDiscountAmount &&\r\n numeral(product.miniCartDiscountAmount).value() !== 0 && (\r\n <div>\r\n <div className={classes.productSubItem}>\r\n {product.miniCartDiscountName}\r\n </div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.miniCartDiscountAmount).format(\r\n \"$0,0.00\"\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n <h5 className={classes.h5}>\r\n <div className=\"title\">Monthly Plan:</div>\r\n <div className=\"cost\">\r\n {cart.monthlyCharges && cart.monthlyCharges.monthlyTotal}\r\n </div>\r\n </h5>\r\n <div className={classes.totalDescription}>\r\n {cart.monthlyCharges && cart.monthlyCharges.totalDescription}\r\n </div>\r\n {!hideOneTimeFees && (\r\n <>\r\n <h5 className={classes.h6}>\r\n <div className=\"title\">One-Time Fee(s):</div>\r\n <div className=\"cost\">\r\n {cart.oneTimeCharges && cart.oneTimeCharges.total}\r\n </div>\r\n </h5>\r\n <div className={classes.totalDescription}>\r\n {cart.oneTimeCharges && cart.oneTimeCharges.totalDescription}\r\n </div>\r\n {cart.oneTimeCharges &&\r\n cart.oneTimeCharges.items.map((product, i) => (\r\n <div key={i}>\r\n <div className={classes.productItem}>\r\n {product.itemLabel}\r\n </div>\r\n <div className={classes.productItemPrice}>\r\n {numeral(product.itemPrice).format(\"$0,0.00\")}\r\n </div>\r\n </div>\r\n ))}\r\n </>\r\n )}\r\n </AccordionDetails>\r\n </Accordion>\r\n </div>\r\n );\r\n}\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle\r\n} from \"react\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport \"../css/main.css\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { getDisplayAddress } from \"../lib/address\";\r\nimport { validatePOBoxes, \r\n isPhoneValid } from \"../lib/validation\";\r\nimport { setShippingAddress } from \"./../redux/actions/scheduleActions\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { PhoneMaskInput } from \"../components/IMaskInputs\";\r\nimport { disableEnterKey } from \"../components/disableEnterKey\";\r\n\r\nconst useStyles = makeStyles({\r\n subTitle: {\r\n fontSize: 18,\r\n marginTop: \"30px\",\r\n color: \"#000\"\r\n },\r\n checkBoxTitle: {\r\n fontSize: 14,\r\n margin: \"5px 4px\",\r\n display: \"inline-block\"\r\n }\r\n});\r\n\r\nconst ShippingInfo = forwardRef((props, ref) => {\r\n const classes = useStyles();\r\n const {\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n control\r\n } = useForm();\r\n const dispatch = useDispatch();\r\n\r\n const address = useSelector(state => state.address.address);\r\n const shippingInfo = useSelector(state => state.schedule.shippingInfo);\r\n const profileInfo = useSelector(state => state.user.profileInfo);\r\n\r\n const [useServiceAddress, setUseServiceAddress] = useState(false);\r\n\r\n const submitFormInput = useRef(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // call submitFormInput from ShippingInfo component\r\n submitFormInput.current.click();\r\n }\r\n }));\r\n\r\n const onSubmit = data => {\r\n // data valid and ready to submit to server\r\n //console.log(\"onSubmit:\", data);\r\n dispatch(setShippingAddress(data));\r\n };\r\n\r\n const onInvalid = data => {\r\n //console.log(\"onInvalid\", data);\r\n };\r\n\r\n const onUseServiceAddressChange = e => {\r\n setUseServiceAddress(e.target.checked);\r\n\r\n if (e.target.checked) {\r\n setValue(\r\n \"firstName\",\r\n profileInfo && profileInfo.firstName ? profileInfo.firstName : \" \"\r\n );\r\n setValue(\r\n \"lastName\",\r\n profileInfo && profileInfo.lastName ? profileInfo.lastName : \" \"\r\n );\r\n\r\n setValue(\r\n \"phone\",\r\n profileInfo && profileInfo.phone ? profileInfo.phone : \" \"\r\n );\r\n\r\n setValue(\"address\", getDisplayAddress(address));\r\n setValue(\"aptUnit\", address.aptSuite); \r\n setValue(\"city\", address.city);\r\n setValue(\"state\", address.state);\r\n setValue(\"zip\", address.zipCode);\r\n } else {\r\n setValue(\"firstName\", \"\");\r\n setValue(\"lastName\", \"\");\r\n setValue(\"phone\", \"\"); \r\n setValue(\"address\", \"\");\r\n setValue(\"aptUnit\", \"\");\r\n setValue(\"city\", \"\");\r\n setValue(\"state\", \"HI\");\r\n setValue(\"zip\", \"\");\r\n }\r\n };\r\n\r\n const getShippingDefaultValue = fieldName => {\r\n return shippingInfo && shippingInfo[fieldName]\r\n ? shippingInfo[fieldName]\r\n : \"\";\r\n };\r\n\r\n const getErrorState = fieldName => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = fieldName => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n useEffect(() => {\r\n setValue(\"state\", \"HI\");\r\n }, []);\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit(onSubmit, onInvalid)} onKeyDown={disableEnterKey}>\r\n <input\r\n type=\"submit\"\r\n ref={submitFormInput}\r\n style={{ display: \"none\" }}\r\n />\r\n <Typography\r\n className={classes.subTitle}\r\n color=\"textSecondary\"\r\n gutterBottom\r\n >\r\n Shipping Information\r\n </Typography>\r\n\r\n <FormControlLabel\r\n className={classes.checkBoxTitle}\r\n label=\"Same as Service Address\"\r\n control={\r\n <Checkbox\r\n style={{color:\"#012639\"}}\r\n checked={useServiceAddress}\r\n onChange={onUseServiceAddressChange}\r\n />\r\n }\r\n />\r\n\r\n {!useServiceAddress && (\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"First Name\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"firstName\")}\r\n error={getErrorState(\"firstName\")}\r\n variant=\"standard\"\r\n {...register(\"firstName\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Last Name\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"lastName\")}\r\n error={getErrorState(\"lastName\")}\r\n variant=\"standard\"\r\n {...register(\"lastName\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"phone\")}\r\n error={getErrorState(\"phone\")}\r\n helperText={getErrorMsg(\"phone\")}\r\n label=\"Phone\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n {...register(\"phone\", { required: true })}\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"phone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: v => isPhoneValid(v) || \"Required 10 digits\"\r\n }\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <></>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Address\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"address\")}\r\n helperText={getErrorMsg(\"address\")}\r\n error={getErrorState(\"address\")}\r\n variant=\"standard\"\r\n {...register(\"address\", {\r\n required: true,\r\n validate: {\r\n validatePOBoxes: v =>\r\n validatePOBoxes(v) || \"P.O. Box addresses not allowed\"\r\n }\r\n })}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"aptUnit\")}\r\n variant=\"standard\"\r\n {...register(\"aptUnit\")}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"City\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"city\")}\r\n error={getErrorState(\"city\")}\r\n variant=\"standard\"\r\n {...register(\"city\", { required: true })}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"State\"\r\n fullWidth\r\n disabled\r\n defaultValue=\"HI\"\r\n error={getErrorState(\"state\")}\r\n variant=\"standard\"\r\n {...register(\"state\")}\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"Zip\"\r\n fullWidth\r\n defaultValue={getShippingDefaultValue(\"zip\")}\r\n error={getErrorState(\"zip\")}\r\n variant=\"standard\"\r\n {...register(\"zip\", { required: true })}\r\n />\r\n </Grid>\r\n </Grid>\r\n )}\r\n\r\n {useServiceAddress && (\r\n <Grid container spacing={2} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"First Name\"\r\n fullWidth\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n defaultValue={\r\n profileInfo && profileInfo.firstName\r\n ? profileInfo.firstName\r\n : \" \"\r\n }\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Last Name\"\r\n fullWidth\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n defaultValue={\r\n profileInfo && profileInfo.lastName\r\n ? profileInfo.lastName\r\n : \" \"\r\n }\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n error={getErrorState(\"phone\")}\r\n helperText={getErrorMsg(\"phone\")}\r\n label=\"Phone\"\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n {...register(\"phone\", { required: true })}\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"phone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: v => isPhoneValid(v) || \"Required 10 digits\"\r\n }\r\n }}\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <></>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Address\"\r\n fullWidth\r\n defaultValue={getDisplayAddress(address)}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"Apt/Unit\"\r\n fullWidth\r\n defaultValue={\r\n address && address.aptSuite ? address.aptSuite : \" \"\r\n }\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={6}>\r\n <TextField\r\n label=\"City\"\r\n fullWidth\r\n defaultValue={address && address.city ? address.city : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"State\"\r\n fullWidth\r\n defaultValue={address && address.state ? address.state : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={3}>\r\n <TextField\r\n label=\"Zip\"\r\n fullWidth\r\n defaultValue={address && address.zipCode ? address.zipCode : \"\"}\r\n InputProps={{\r\n readOnly: true\r\n }}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n </Grid>\r\n )}\r\n </form>\r\n </div>\r\n );\r\n});\r\n\r\nexport default ShippingInfo;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\n\r\nconst useStyles = makeStyles({\r\n checkBoxTitle: {\r\n fontSize: 18,\r\n color: \"#000 !important\"\r\n },\r\n contactMeCheckBox: {\r\n marginTop: 20\r\n }\r\n});\r\n\r\nexport default function InstallationPaymentOptions({ onChange, value, hideInstallment }) {\r\n const classes = useStyles();\r\n return (\r\n <FormControl>\r\n <FormLabel\r\n id=\"controlled-radio-buttons-group\"\r\n className={classes.checkBoxTitle}\r\n >\r\n Installation Payment Options:\r\n </FormLabel>\r\n <RadioGroup\r\n aria-labelledby=\"controlled-radio-buttons-group\"\r\n name=\"controlled-radio-buttons-group\"\r\n value={value}\r\n onChange={onChange}\r\n >\r\n <FormControlLabel\r\n value={1}\r\n control={<Radio />}\r\n label=\"Bill me one time for $120\"\r\n />\r\n {!hideInstallment && \r\n <FormControlLabel\r\n value={2}\r\n control={<Radio />}\r\n label=\"Bill me in 3 monthly installation of $40\"\r\n />\r\n }\r\n </RadioGroup>\r\n </FormControl>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport List from \"@mui/material/List\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { addProductToAccessLine } from \"./../redux/actions/scheduleActions\";\r\nimport {\r\n getArrivalWindowString,\r\n getDateAW,\r\n getAWDateString\r\n} from \"../lib/schedule\";\r\nimport { useSelector,useDispatch } from \"react-redux\";\r\nimport { DayPicker } from \"react-day-picker\";\r\nimport \"react-day-picker/dist/style.css\";\r\nimport {setStep} from \"../redux/actions/stepActions\";\r\nconst useStyles = makeStyles({\r\n title: {\r\n fontSize: 18,\r\n marginBottom: \"20px\"\r\n },\r\n checkBoxTitle: {\r\n fontSize: 18,\r\n color: \"#000 !important\"\r\n },\r\n contactMeCheckBox: {\r\n marginTop: 20,\r\n\r\n \"& .MuiFormControlLabel-label\": {\r\n fontSize: \"15px\",\r\n color: \"#666\"\r\n }\r\n },\r\n checkBoxTitle: {\r\n margin: 0,\r\n fontSize: \"16px\"\r\n },\r\n list: {\r\n height: \"300px\",\r\n overflowY: \"scroll\",\r\n display: \"inline-block\",\r\n float: \"right\",\r\n width: \"50%\"\r\n },\r\n scheduleWrapper: {\r\n marginTop: \"30px\"\r\n },\r\n selectedArrivalWindow: {\r\n textAlign: \"center\",\r\n marginTop: \"20px\"\r\n },\r\n errorMsg: {\r\n color: \"red\",\r\n fontSize: \"14px\"\r\n },\r\n upgradebtn:\r\n { \r\n borderRadius: \"25px\",\r\n textTransform: \"none\",\r\n backgroundColor: \"#00AFD8 !important;\"\r\n },\r\n upgradetxt:{ \r\n width: \"70%\",\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n },upgradediv:{ \r\n width: \"30%\",\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n }\r\n});\r\n\r\nexport default function ScheduleArrivalWindow({\r\n handleClick,\r\n list,\r\n selectedIndex,\r\n contactMeCheck,\r\n onChange,\r\n showErrorMsg\r\n}) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const hideContactMeToSchedule = useSelector(state =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.hideContactMeToSchedule\r\n ? state.campaign.campaign.hideContactMeToSchedule\r\n : false\r\n );\r\n\r\n const [selectedArrivalWindow, setSelectedArrivalWindow] = useState(\"\");\r\n const [earlyDate, setEarlyDate] = useState(\"\");\r\n const [pickerDay, setPickerDay] = useState(\"\");\r\n\r\n const showContactMeToSchedule = () => {\r\n if (!hideContactMeToSchedule) {\r\n return true;\r\n } else if ((hideContactMeToSchedule && !list) || list.length === 0) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n // restore selected arrival window from shedule info\r\n useEffect(() => {\r\n if (selectedIndex) {\r\n setSelectedArrivalWindow(getArrivalWindowString(list[selectedIndex]));\r\n }\r\n }, [selectedIndex]);\r\n\r\n useEffect(() => {\r\n if (list.length) {\r\n //get early possible date from Arrival Windows list\r\n const earlyDate = list[0].date;\r\n setEarlyDate(earlyDate);\r\n }\r\n }, [list]);\r\n\r\n const handlePickerDay = data => {\r\n let day = getAWDateString(data);\r\n setPickerDay(day);\r\n };\r\n const onUpgradeClick = async() => { \r\n //await dispatch(addProductToAccessLine()); \r\n //dispatch(setStep(3));\r\n // const unique = await addProductToAccessLine(); \r\n}\r\n return (\r\n <div className={classes.scheduleWrapper}>\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n Schedule Arrival Window\r\n </Typography>\r\n\r\n <Card variant=\"outlined\">\r\n <CardContent>\r\n <DayPicker\r\n mode=\"single\"\r\n selected={pickerDay ? getDateAW(pickerDay) : getDateAW(earlyDate)}\r\n onSelect={handlePickerDay}\r\n />\r\n <div className=\"arrival-window-devider\"></div>\r\n <List\r\n component=\"nav\"\r\n aria-label=\"main mailbox folders\"\r\n className={classes.list + \" arrival-window-list\"}\r\n >\r\n {list\r\n ? list.map((arrivalWindow, index) => {\r\n if( pickerDay ? arrivalWindow.date !== pickerDay : (earlyDate && parseInt((arrivalWindow.date - earlyDate) / (1000 * 60 * 60 * 24), 10) > 30))\r\n {\r\n return null;\r\n }\r\n return (\r\n <ListItem\r\n key={index}\r\n button\r\n selected={selectedIndex === index}\r\n onClick={event => {\r\n handleClick(event, index, arrivalWindow);\r\n setSelectedArrivalWindow(event.target.innerText);\r\n }}\r\n dense\r\n divider\r\n >\r\n <ListItemText\r\n primary={getArrivalWindowString(arrivalWindow)}\r\n />\r\n </ListItem>\r\n );\r\n })\r\n : null}\r\n </List>\r\n \r\n </CardContent>\r\n </Card>\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n \r\n </Typography>\r\n {/* <div>\r\n <div className={classes.upgradetxt}><b>If you don't want to do the install yourself. you can update to professional installation for $120. </b></div>\r\n <div className={classes.upgradediv}>\r\n {list.filter(e => e.installType!=\"Professional\").length>0?\r\n <Button\r\n variant=\"contained\" \r\n onClick={() => {\r\n onUpgradeClick();\r\n }}\r\n className={classes.upgradebtn}\r\n >\r\n Upgrade to Professional Install\r\n </Button>:null}</div>\r\n </div> */}\r\n\r\n {showContactMeToSchedule() && (\r\n <div className={classes.contactMeCheckBox}>\r\n <Typography className={classes.checkBoxTitle}>\r\n Don't see any times that work for you? Have a Hawaiian Telcom\r\n representative call you to schedule a time.\r\n </Typography>\r\n <FormControlLabel\r\n control={\r\n <Checkbox style={{ color: \"#012639\" }}\r\n checked={list.length === 0 ? true : contactMeCheck}\r\n onChange={onChange}\r\n />\r\n }\r\n label=\"Contact me to schedule an installation time\"\r\n />\r\n </div>\r\n )}\r\n {showErrorMsg && (\r\n <p className={classes.errorMsg}>\r\n Selected date{\" \"}\r\n {showContactMeToSchedule() && \"or checking “Contact me to Scheduleâ€\"}{\" \"}\r\n must be selected before move to next screen\r\n </p>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormGroup from \"@mui/material/FormGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport {\r\n isEmailValid,\r\n isPhoneValid,\r\n isNotContainSpace,\r\n} from \"../lib/validation\";\r\nimport { PhoneMaskInput } from \"../components/IMaskInputs\";\r\nimport { disableEnterKey } from \"../components/disableEnterKey\";\r\n\r\nconst useStyles = makeStyles({\r\n title: {\r\n fontSize: 18,\r\n marginBottom: \"0px\",\r\n },\r\n mtSpace: {\r\n marginTop: \"30px\",\r\n },\r\n cmBottomText: {\r\n fontSize: \"12px\",\r\n marginTop: \"20px\",\r\n },\r\n specialInstructions: {\r\n marginTop: \"10px\",\r\n },\r\n});\r\n\r\nconst InstallationInformation = forwardRef((props, ref) => {\r\n const classes = useStyles();\r\n const {\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n setValue,\r\n control,\r\n } = useForm();\r\n\r\n const submitFormInput = useRef(null);\r\n\r\n const [inputValues, setInputValues] = useState({\r\n preferredContactMethod: [\"phone\"],\r\n });\r\n\r\n const [cmTextMsgDisabled, setCmTextMsgDisabled] = useState(true);\r\n const [cmEmailDisabled, setCmEmailDisabled] = useState(true);\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // emulate click on form input to run useForm validation\r\n submitFormInput.current.click();\r\n },\r\n }));\r\n\r\n const trimfield = (data) => {\r\n Object.keys(data).forEach((k) => {\r\n if (data[k] && typeof data[k] === \"string\") {\r\n data[k] = data[k].trim();\r\n }\r\n });\r\n return data;\r\n };\r\n\r\n const onSubmit = (data) => {\r\n // call parent mathod to lead installation form values\r\n //console.log('before trim',data);\r\n\r\n data = trimfield(data);\r\n\r\n //console.log('after trim',data);\r\n props.getFormValues({ ...data, ...inputValues });\r\n };\r\n\r\n const onInvalid = (data) => {\r\n //console.log(\"onInvalid\", data);\r\n };\r\n\r\n useEffect(() => {\r\n if (props.scheduleInfo) {\r\n setValue(\"contactName\", props.scheduleInfo.contactName);\r\n setValue(\"contactPhone\", props.scheduleInfo.contactPhone);\r\n setValue(\r\n \"preferredContactMethod\",\r\n props.scheduleInfo.preferredContactMethod\r\n );\r\n setValue(\r\n \"preferredContactPhone\",\r\n props.scheduleInfo.preferredContactPhone\r\n );\r\n\r\n setValue(\r\n \"preferredContactTextMsg\",\r\n props.scheduleInfo.preferredContactTextMsg\r\n );\r\n setValue(\r\n \"preferredContactEmail\",\r\n props.scheduleInfo.preferredContactEmail\r\n );\r\n setValue(\"specialInstructions\", props.scheduleInfo.specialInstructions);\r\n }\r\n if (props.profileInfo) {\r\n // auto-filled to the customer info contact phone\r\n setValue(\"preferredContactPhone\", props.profileInfo.phone);\r\n }\r\n }, []);\r\n\r\n const getErrorState = (fieldName) => {\r\n return errors && errors[fieldName] ? true : false;\r\n };\r\n\r\n const getErrorMsg = (fieldName) => {\r\n return errors && errors[fieldName] && errors[fieldName].message;\r\n };\r\n\r\n const validateNotDisabled = (state, validationFuction) => {\r\n if (!state) {\r\n return validationFuction();\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n const onContactMethodChange = (e) => {\r\n const { name } = e.target;\r\n const clearName = name.replace(\"cm\", \"\").toLowerCase();\r\n\r\n if (e.target.checked) {\r\n let cmArray = inputValues.preferredContactMethod;\r\n cmArray.push(clearName);\r\n setInputValues({\r\n ...inputValues,\r\n preferredContactMethod: cmArray,\r\n });\r\n } else {\r\n setInputValues({\r\n ...inputValues,\r\n preferredContactMethod: inputValues.preferredContactMethod.filter(\r\n (cm) => cm !== clearName\r\n ),\r\n });\r\n }\r\n\r\n if (name === \"cmTextMsg\") {\r\n e.target.checked\r\n ? setCmTextMsgDisabled(false)\r\n : setCmTextMsgDisabled(true);\r\n }\r\n if (name === \"cmEmail\") {\r\n e.target.checked ? setCmEmailDisabled(false) : setCmEmailDisabled(true);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (cmTextMsgDisabled) {\r\n setValue(\"preferredContactTextMsg\", \"\");\r\n }\r\n }, [cmTextMsgDisabled]);\r\n\r\n useEffect(() => {\r\n if (cmEmailDisabled) {\r\n setValue(\"preferredContactEmail\", \"\");\r\n }\r\n }, [cmEmailDisabled]);\r\n\r\n return (\r\n <form\r\n onSubmit={handleSubmit(onSubmit, onInvalid)}\r\n onKeyDown={disableEnterKey}\r\n >\r\n <input type=\"submit\" ref={submitFormInput} style={{ display: \"none\" }} />\r\n <Typography className={classes.title} color=\"textPrimary\" gutterBottom>\r\n Installation Information\r\n </Typography>\r\n <p>\r\n Because we care about our employees, our Technicians reserve the right\r\n to leave the premise whenever they feel their health, personal safety,\r\n or safety of the community is in jeopardy. We ask that you contact us to\r\n reschedule your appointment if a situation should arise that would risk\r\n the health or safety of our Technicians.\r\n </p>\r\n <div>Installation Contact</div>\r\n <p>\r\n The person who will be the contact on the installation day. This person\r\n must be 18 years or older.\r\n </p>\r\n\r\n <Grid container spacing={1} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={4}>\r\n <TextField\r\n label=\"Contact Name\"\r\n style={{\r\n marginRight: 8,\r\n }}\r\n {...register(\"contactName\", { required: true })}\r\n error={getErrorState(\"contactName\")}\r\n variant=\"standard\"\r\n />\r\n </Grid>\r\n <Grid item xs={4}>\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n label=\"Contact Phone\"\r\n error={getErrorState(\"contactPhone\")}\r\n helperText={getErrorMsg(\"contactPhone\")}\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"contactPhone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: (v) => isPhoneValid(v) || \"Required 10 digits\",\r\n },\r\n }}\r\n />\r\n </Grid>\r\n </Grid>\r\n\r\n <div className={classes.mtSpace}>Preferred Contact Method</div>\r\n <p>\r\n You will receive a reminder call prior to your appointment as well as on\r\n the day of your appointment. If you would also like to receive a\r\n reminder message via text and/or email, please check the button and\r\n enter your information below.\r\n </p>\r\n\r\n <Grid container spacing={1} columnSpacing={{ xs: 4, sm: 5, md: 6 }}>\r\n <Grid item xs={4}>\r\n <FormControl variant=\"standard\">\r\n <FormGroup>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n style={{ color: \"#012639\" }}\r\n checked\r\n disabled\r\n onChange={onContactMethodChange}\r\n name=\"cmPhone\"\r\n />\r\n }\r\n label=\"Phone\"\r\n />\r\n\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n label=\"Phone\"\r\n error={getErrorState(\"preferredContactPhone\")}\r\n helperText={getErrorMsg(\"preferredContactPhone\")}\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n className={classes.contactMethodText}\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"preferredContactPhone\"\r\n control={control}\r\n rules={{\r\n required: true,\r\n validate: {\r\n isPhoneValid: (v) =>\r\n isPhoneValid(v) || \"Required 10 digits\",\r\n },\r\n }}\r\n />\r\n </FormGroup>\r\n </FormControl>\r\n </Grid>\r\n <Grid item xs={4}>\r\n <FormControl variant=\"standard\">\r\n <FormGroup>\r\n <FormControlLabel\r\n control={\r\n <Checkbox style={{ color: \"#012639\" }} onChange={onContactMethodChange} name=\"cmTextMsg\" />\r\n }\r\n label=\"Text\"\r\n />\r\n\r\n <Controller\r\n render={({ field }) => (\r\n <TextField\r\n fullWidth\r\n label=\"Text\"\r\n error={getErrorState(\"preferredContactTextMsg\")}\r\n helperText={getErrorMsg(\"preferredContactTextMsg\")}\r\n value={field.value}\r\n onChange={field.onChange}\r\n inputRef={field.ref}\r\n variant=\"standard\"\r\n className={classes.contactMethodText}\r\n disabled={cmTextMsgDisabled}\r\n InputProps={{ inputComponent: PhoneMaskInput }}\r\n />\r\n )}\r\n name=\"preferredContactTextMsg\"\r\n control={control}\r\n />\r\n </FormGroup>\r\n </FormControl>\r\n {!cmTextMsgDisabled && (\r\n <p className={classes.cmBottomText}>\r\n By selecting Text, you have given consent for SMS (text) messages\r\n to be sent via our dispatch system. Standard text message rates\r\n would apply if you don’t have incoming texts on your wireless\r\n plan.\r\n </p>\r\n )}\r\n </Grid>\r\n <Grid item xs={4}>\r\n <FormControl variant=\"standard\">\r\n <FormGroup>\r\n <FormControlLabel\r\n control={\r\n <Checkbox style={{ color: \"#012639\" }} onChange={onContactMethodChange} name=\"cmEmail\" />\r\n }\r\n label=\"Email\"\r\n />\r\n <TextField\r\n label=\"Email\"\r\n className={classes.contactMethodText}\r\n variant=\"standard\"\r\n disabled={cmEmailDisabled}\r\n helperText={getErrorMsg(\"preferredContactEmail\")}\r\n error={getErrorState(\"preferredContactEmail\")}\r\n {...register(\"preferredContactEmail\", {\r\n validate: {\r\n isEmailValid: (v) =>\r\n validateNotDisabled(cmEmailDisabled, () =>\r\n isEmailValid(v)\r\n ) || \"Email not valid\",\r\n isNotContainSpace: (v) =>\r\n validateNotDisabled(cmEmailDisabled, () =>\r\n isNotContainSpace(v)\r\n ) || \"Space in email is not allowed\",\r\n },\r\n })}\r\n />\r\n </FormGroup>\r\n </FormControl>\r\n {!cmEmailDisabled && (\r\n <p className={classes.cmBottomText}>\r\n By selecting Email, you have given consent for email messages to\r\n be sent via our dispatch system.\r\n </p>\r\n )}\r\n </Grid>\r\n </Grid>\r\n\r\n <div className={classes.mtSpace}>\r\n Please let us know if there are any special driving or parking\r\n instructions.\r\n </div>\r\n\r\n <TextField\r\n className={classes.specialInstructions}\r\n label=\"Special instructions\"\r\n multiline\r\n fullWidth\r\n rows={10}\r\n variant=\"outlined\"\r\n {...register(\"specialInstructions\")}\r\n />\r\n </form>\r\n );\r\n});\r\n\r\nexport default InstallationInformation;\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport DividerM from \"@mui/material/Divider\";\r\n\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\nimport { setInstallmentPlan } from \"../redux/actions/cartActions\";\r\nimport { setSchedule } from \"../redux/actions/scheduleActions\";\r\n\r\nimport InstallationPaymentOptions from \"./InstallationPaymentOptions\";\r\nimport ScheduleArrivalWindow from \"./ScheduleArrivalWindow\";\r\nimport InstallationInformation from \"./InstallationInformation\";\r\nimport { getAccordionUtilityClass } from \"@mui/material\";\r\nimport { SELF_INSTALL_TYPE } from \"../lib/schedule\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n title: {\r\n fontSize: 18,\r\n },\r\n smallText: {\r\n fontSize: 12,\r\n },\r\n contactMethod: {\r\n fontSize: 12,\r\n marginTop: 20,\r\n },\r\n thanks: {\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n },\r\n redSmall: {\r\n fontSize: 12,\r\n color: \"red\",\r\n },\r\n schedule: {\r\n marginTop: \"35px\",\r\n },\r\n hr: {\r\n margin: \"25px 0\",\r\n },\r\n mtSpace: {\r\n marginTop: \"30px\",\r\n },\r\n /*, contactMethodText: {\r\n \"& label + .MuiInput-formControl\": {\r\n marginTop: \"0\"\r\n }\r\n }*/\r\n});\r\n\r\n// todo: add props.installationFormValues fields to submission object\r\nconst Schedule = forwardRef((props, ref) => {\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n const scheduleInfo = useSelector((state) => state.schedule.scheduleInfo);\r\n const arrivalWindowList = useSelector((state) =>\r\n state.schedule &&\r\n state.schedule.availableAppointments &&\r\n state.schedule.availableAppointments.length > 0\r\n ? state.schedule.availableAppointments\r\n : []\r\n );\r\n\r\n const [billMeValueRadio, setBillMeValueRadio] = useState(0);\r\n const [selectedIndex, setSelectedIndex] = useState(\"\");\r\n const [selectedArrivalWindow, setSelectedArrivalWindow] = useState(\"\"); // {date: \"2021-07-21\", timeSlot: \"1:00 PM - 2:00 PM\"}\r\n const [inputValues, setInputValues] = useState({\r\n selectedArrivalWindow: \"\",\r\n selectedIndexArrival: \"\",\r\n contactMeToSchedule: arrivalWindowList.length === 0 ? true : false,\r\n preferToSchedule: true,\r\n });\r\n const [showErrorMsg, setShowErrorMsg] = useState(false);\r\n\r\n const installationInfoRef = useRef();\r\n\r\n const cartHasTivoItems = useSelector(\r\n (state) =>\r\n state.cart && state.cart.cart && state.cart.cart.isTiVoSelected === true\r\n );\r\n\r\n useEffect(() => {\r\n if (cartHasTivoItems) {\r\n setBillMeValueRadio(1);\r\n } else {\r\n setBillMeValueRadio(0);\r\n }\r\n }, [cartHasTivoItems]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // EITHER a selected date OR checking off “Contact me to Schedule†must be selected before being allowed to move to next screen\r\n if (\r\n inputValues.selectedArrivalWindow ||\r\n inputValues.contactMeToSchedule\r\n ) {\r\n setShowErrorMsg(false);\r\n // call validation and get InstallationInformation values for submition\r\n installationInfoRef.current.valideteForm();\r\n } else {\r\n // show error message for a selected date OR checking off “Contact me to Scheduleâ€\r\n setShowErrorMsg(true);\r\n }\r\n },\r\n }));\r\n\r\n const handleListItemClick = (event, index, selectedArrivalWindow) => {\r\n //onArrivalWindowChange(event.target.innerText);\r\n setSelectedIndex(index);\r\n setSelectedArrivalWindow(() => {\r\n setInputValues({\r\n ...inputValues,\r\n selectedArrivalWindow: selectedArrivalWindow,\r\n selectedIndexArrival: index,\r\n });\r\n });\r\n setShowErrorMsg(false);\r\n };\r\n\r\n const onContactMeChange = (e) => {\r\n setInputValues({\r\n ...inputValues,\r\n contactMeToSchedule: e.target.checked,\r\n });\r\n };\r\n\r\n const onChangePreferToSchedule = (e) => {\r\n setInputValues({\r\n ...inputValues,\r\n preferToSchedule: e.target.checked,\r\n });\r\n };\r\n\r\n const onChangeBillMe = (e) => {\r\n setBillMeValueRadio(e.target.value);\r\n // set installmentPlan true for value === 2 and false for 1 in reducer\r\n dispatch(setInstallmentPlan(e.target.value === \"2\" ? true : false));\r\n };\r\n\r\n const getInstallationInfoValues = (data) => {\r\n setInputValues({\r\n ...inputValues,\r\n isSelfInstall: props.isSelfInstall,\r\n });\r\n dispatch(setSchedule({ ...data, ...inputValues }));\r\n };\r\n\r\n useEffect(() => {\r\n if (scheduleInfo) {\r\n setInputValues({\r\n ...inputValues,\r\n selectedArrivalWindow: scheduleInfo.selectedArrivalWindow,\r\n selectedIndexArrival: scheduleInfo.selectedIndexArrival,\r\n contactMeToSchedule: scheduleInfo.contactMeToSchedule,\r\n });\r\n\r\n if (selectedIndex === \"\") {\r\n setSelectedIndex(scheduleInfo.selectedIndexArrival);\r\n }\r\n }\r\n }, []);\r\n\r\n return (\r\n <div className={classes.schedule}>\r\n {props.isSelfInstall &&\r\n props.selfInstallType !== SELF_INSTALL_TYPE.WIFI && (\r\n <InstallationPaymentOptions\r\n onChange={onChangeBillMe}\r\n value={billMeValueRadio}\r\n hideInstallment={cartHasTivoItems}\r\n />\r\n )}\r\n\r\n <ScheduleArrivalWindow\r\n handleClick={handleListItemClick}\r\n list={arrivalWindowList}\r\n selectedIndex={selectedIndex}\r\n contactMeCheck={inputValues.contactMeToSchedule}\r\n onChange={onContactMeChange}\r\n showErrorMsg={showErrorMsg}\r\n />\r\n\r\n <DividerM className={classes.hr}></DividerM>\r\n\r\n <InstallationInformation\r\n profileInfo={profileInfo}\r\n scheduleInfo={scheduleInfo}\r\n getFormValues={getInstallationInfoValues}\r\n ref={installationInfoRef}\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nexport default Schedule;\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport DividerM from \"@mui/material/Divider\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport \"../css/main.css\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setOptionalAssessmentFeeAccepted } from \"../redux/actions/cartActions\";\r\nimport { setSelfInstallDeclined } from \"../redux/actions/cartActions\";\r\nimport { SELF_INSTALL_TYPE } from \"../lib/schedule\";\r\nimport ShippingInfo from \"./ShippingInfo\";\r\nimport Schedule from \"./Schedule\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport { resetNextScreen } from \"./../redux/actions/scheduleActions\";\r\nimport { Backdrop, CircularProgress } from \"@mui/material\";\r\n// import { checkInstallationType } from \"./../redux/actions/scheduleActions\";\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n margin: \"5px 0px\",\r\n },\r\n bullet: {\r\n display: \"inline-block\",\r\n margin: \"0 2px\",\r\n transform: \"scale(0.8)\",\r\n },\r\n title: {\r\n fontSize: 18,\r\n },\r\n subTitle: {\r\n fontSize: 18,\r\n marginTop: \"30px\",\r\n color: \"#000\",\r\n },\r\n subTitle1: {\r\n fontSize: 18,\r\n color: \"#000 !important\",\r\n },\r\n checkBoxTitle: {\r\n fontSize: 14,\r\n margin: \"5px 4px\",\r\n display: \"inline-block\",\r\n },\r\n formControl: {\r\n width: \"100%\",\r\n },\r\n customerFormHeader: {\r\n marginTop: 20,\r\n marginBottom: 20,\r\n fontSize: 14,\r\n color: \"#000\",\r\n },\r\n allYouNeed: {\r\n fontSize: 14,\r\n marginBottom: 30,\r\n color: \"#000\",\r\n },\r\n allYouNeedBold: {\r\n fontSize: 14,\r\n marginBottom: \"20px\",\r\n marginTop: \"20px\",\r\n color: \"#000\",\r\n fontWeight: \"bold\",\r\n },\r\n devider: {\r\n margin: \"20px 0\",\r\n backgroundColor: \"#E2E2E3\",\r\n },\r\n textWifi: {\r\n color: \"orange\",\r\n fontSize: 14,\r\n maxWidth: 500,\r\n },\r\n\r\n \"span + .MuiFormControlLabel-label\": {\r\n color: \"#666 !important\",\r\n },\r\n});\r\n\r\nconst Installation = forwardRef((props, ref) => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const shippingInfoRef = useRef();\r\n const scheduleRef = useRef();\r\n const [valueInstallRadio, setValueInstallRadio] = useState(0);\r\n const loading = useSelector((state) => state.schedule.loading);\r\n\r\n const selfInstallType = useSelector(\r\n (state) => state.schedule.selfInstallType\r\n );\r\n const isSelfInstall = useSelector((state) => state.schedule.isSelfInstall);\r\n //const installationType = useSelector(state => state.user.installationType)\r\n // const selfInstallType = SELF_INSTALL_TYPE.COPPER;\r\n // const isSelfInstall = true;\r\n\r\n useImperativeHandle(ref, () => ({\r\n valideteForm() {\r\n // select which form call click() according selected radio\r\n if (valueInstallRadio === 1) {\r\n // call validation from ShippingInfo component\r\n shippingInfoRef.current.valideteForm();\r\n }\r\n if (valueInstallRadio === 2) {\r\n // call validation from Schedule component\r\n scheduleRef.current.valideteForm();\r\n }\r\n },\r\n }));\r\n\r\n const [inputValues, setInputValues] = useState({\r\n selfInstallDeclined: false,\r\n optionalAssessmentFeeAccepted: false,\r\n });\r\n\r\n useEffect(() => {\r\n if (!isSelfInstall) {\r\n setValueInstallRadio(2);\r\n props.getInstallationType(2);\r\n } else handleInstallChange({ target: { value: 1 } });\r\n }, [isSelfInstall]);\r\n\r\n useEffect(() => {\r\n // as current sreen is already Installation we reset nextInstallationScreen\r\n // to allow to get here again from Customer info screen\r\n dispatch(resetNextScreen());\r\n }, []);\r\n const onChangeWifi = (e) => {\r\n var optionalAssessmentFeeAccepted = e.target.value === \"2\" ? true : false;\r\n setInputValues({\r\n ...inputValues,\r\n optionalAssessmentFeeAccepted: optionalAssessmentFeeAccepted,\r\n });\r\n dispatch(\r\n setOptionalAssessmentFeeAccepted(\r\n optionalAssessmentFeeAccepted === true ? true : false\r\n )\r\n );\r\n dispatch(setSelfInstallDeclined(false));\r\n\r\n handleInstallChange(e);\r\n };\r\n\r\n const handleInstallChange = (event) => {\r\n const type = event.target.value;\r\n props.getInstallationType(type);\r\n setValueInstallRadio(Number(type));\r\n\r\n var pageTitle = type === \"2\" ? \"ScheduleInstallation\" : \"SelfInstallation\";\r\n \r\n\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: \"orderwizard\",\r\n pageTitle: pageTitle,\r\n },\r\n });\r\n\r\n setInputValues({\r\n ...inputValues,\r\n selfInstallDeclined: type === \"2\" ? true : false,\r\n });\r\n\r\n dispatch(setSelfInstallDeclined(type === \"2\"));\r\n };\r\n\r\n return (\r\n <div>\r\n {isSelfInstall && (\r\n <>\r\n <Typography\r\n className={classes.customerFormHeader}\r\n color=\"textSecondary\"\r\n gutterBottom\r\n >\r\n Congratulations! Your address is eligible for self-installation!\r\n Here's how it works:\r\n <br />\r\n <ul>\r\n <li>\r\n Your equipment will be sent to the address provided below.\r\n Please note, we can only ship equipment to Hawaii and cannot\r\n ship to a P.O. Box.\r\n </li>\r\n <li>\r\n {\" \"}\r\n In your shipment, you'll find instructions on how to get your\r\n internet set-up.\r\n </li>\r\n <li>\r\n Your equipment should arrive 4 business days after placing your\r\n order. Please note, 4 business days after your purchase is when\r\n your internet will be activated and your billing cycle will\r\n start.\r\n </li>\r\n <li>\r\n {\" \"}\r\n If you'd prefer a professional technican complete your\r\n installation, you can select that option below. There is a $120\r\n installation fee for any professional installation.\r\n </li>\r\n </ul>\r\n </Typography>\r\n <DividerM className={classes.devider}></DividerM>\r\n\r\n {/* {selfInstallType === SELF_INSTALL_TYPE.FIBER ? (\r\n <Typography\r\n className={classes.allYouNeed}\r\n gutterBottom\r\n color=\"textSecondary\"\r\n >\r\n If you opt to schedule an appointment to have a professional\r\n technician complete your installation, you will be charged a $120\r\n Installation Fee.\r\n </Typography>\r\n ) \r\n \r\n : null} */}\r\n </>\r\n )}\r\n\r\n {/* {isSelfInstall && selfInstallType !== SELF_INSTALL_TYPE.WIFI && (\r\n <FormControl>\r\n <FormLabel\r\n id=\"controlled-radio-buttons-group\"\r\n className={classes.subTitle1}\r\n >\r\n How would you like to install your network equipment?\r\n </FormLabel>\r\n <RadioGroup\r\n aria-labelledby=\"controlled-radio-buttons-group\"\r\n name=\"controlled-radio-buttons-group\"\r\n value={valueInstallRadio}\r\n onChange={handleInstallChange}\r\n >\r\n <FormControlLabel\r\n value={1}\r\n control={<Radio />}\r\n label=\"I’d like to self-install\"\r\n />\r\n <FormControlLabel\r\n value={2}\r\n control={<Radio />}\r\n label=\"I prefer to schedule an appointment to have a professional technician complete my installation\"\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n )} */}\r\n {isSelfInstall && (\r\n <FormControl>\r\n <FormLabel\r\n id=\"controlled-radio-buttons-group\"\r\n className={classes.subTitle1}\r\n >\r\n How would you like to install your network equipment?\r\n </FormLabel>\r\n <RadioGroup\r\n aria-labelledby=\"controlled-radio-buttons-group\"\r\n name=\"controlled-radio-buttons-group\"\r\n value={valueInstallRadio}\r\n onChange={handleInstallChange}\r\n >\r\n <FormControlLabel\r\n value={1}\r\n control={<Radio style={{ color: \"#012639\" }} />}\r\n label=\"Self-Install\"\r\n />\r\n <FormControlLabel\r\n value={2}\r\n control={<Radio style={{ color: \"#012639\" }} />}\r\n label=\"Professional Installation (additional charge applies)\"\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n )}\r\n\r\n {/* {isSelfInstall && selfInstallType === SELF_INSTALL_TYPE.WIFI ? (\r\n <>\r\n <FormControl>\r\n <FormLabel className={classes.subTitle1}>\r\n You have selected our Whole Home WiFi product and are eligible to\r\n have a tech install your equipment and optimize your home for the\r\n best WiFi coverage. This fee is an additional $50 and will be\r\n added to your first bill.\r\n </FormLabel>\r\n <RadioGroup onChange={onChangeWifi}>\r\n <FormControlLabel\r\n value={2}\r\n control={<Radio />}\r\n label=\"I accept the $50 WiFi Assessment Fee\"\r\n />\r\n <FormControlLabel\r\n value={1}\r\n control={<Radio />}\r\n label=\"I decline the WiFi Assessment Fee and with to install my own\r\n hardware\"\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n </>\r\n ) : null} */}\r\n\r\n {!!loading && (\r\n <Backdrop\r\n sx={{\r\n backgroundColor: \"rgba(240, 240, 240,0.5)\",\r\n color: \"#fff\",\r\n height: \"auto\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1,\r\n }}\r\n open={loading}\r\n >\r\n <CircularProgress\r\n style={{ color: \"#012639\", \"margin-bottom\": \"18px\" }}\r\n thickness={8}\r\n size={64}\r\n />\r\n <Typography\r\n sx={{\r\n textAlign: \"center\",\r\n color: \"black\",\r\n fontWeight: 700,\r\n fontSize: \"1.5rem\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1,\r\n }}\r\n >\r\n Just a moment while we update your cart\r\n </Typography>\r\n </Backdrop>\r\n )}\r\n {isSelfInstall ? (\r\n <DividerM className={classes.devider}></DividerM>\r\n ) : (\r\n <Typography className={classes.allYouNeedBold}>\r\n Please fill out your installation information and select an\r\n appointment window below.\r\n </Typography>\r\n )}\r\n\r\n {valueInstallRadio === 1 ? <ShippingInfo ref={shippingInfoRef} /> : null}\r\n\r\n {valueInstallRadio === 2 ? (\r\n <Schedule\r\n ref={scheduleRef}\r\n installationFormValues={inputValues}\r\n isSelfInstall={isSelfInstall}\r\n selfInstallType={selfInstallType}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n});\r\n\r\nexport default Installation;\r\n","import React from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n htBtn: {\r\n textTransform: \"none\",\r\n padding: \"11px 50px\",\r\n borderRadius: 10,\r\n // backgroundColor: \"#00AFD8\",\r\n // \"&:hover\": {\r\n // backgroundColor: \"#00AFD8\",\r\n // boxShadow: \"0px 0px 15px 0px #38FCFC\"\r\n // }\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n background: \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n }\r\n});\r\n\r\nconst Next = props => {\r\n const classes = useStyles();\r\n const { onNext, loading } = props;\r\n\r\n return (\r\n <Box className=\"next-btn-wrapper\">\r\n <Button\r\n variant=\"contained\"\r\n onClick={onNext}\r\n className={classes.htBtn}\r\n disabled={loading}\r\n >\r\n Next\r\n </Button>\r\n {loading && (\r\n <CircularProgress\r\n style={{ color: \"#012639\" }}\r\n size={24}\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: \"-12px\",\r\n marginLeft: \"-12px\",\r\n }}\r\n />\r\n )}\r\n </Box>\r\n );\r\n};\r\nexport default Next;\r\n","import React from \"react\";\r\nimport Link from \"@mui/material/Link\";\r\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\r\n\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n fontSize: \"12px\",\r\n lineHeight: \"16px\",\r\n fontWeight: \"normal\",\r\n color: \"#707070\",\r\n textDecoration: \"none\",\r\n \"&:hover\": {}\r\n }\r\n});\r\n\r\nconst Previous = props => {\r\n const classes = useStyles();\r\n\r\n const { onPrevious } = props;\r\n\r\n return (\r\n <Link\r\n className={classes.link}\r\n component=\"button\"\r\n variant=\"body2\"\r\n onClick={onPrevious}\r\n >\r\n <ChevronLeftIcon />\r\n Previous\r\n </Link>\r\n );\r\n};\r\nexport default Previous;\r\n","import React from \"react\";\r\n\r\nimport Box from \"@mui/material/Box\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport clsx from 'clsx';\r\nconst useStyles = makeStyles({\r\n htBtn: {\r\n textTransform: \"none\",\r\n padding: \"11px 50px\",\r\n borderRadius: 10,\r\n //backgroundColor: \"#707070\",\r\n fontWeight: \"bold\",\r\n //background: \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n },\r\n btnDisabled: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.12)\",\r\n },\r\n btnEnabled: {\r\n background: \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n }\r\n});\r\n\r\nconst SubmitButton = (props) => {\r\n const classes = useStyles();\r\n\r\n const { onSubmit, disabled, loading } = props;\r\n\r\n return (\r\n <>\r\n <Box className=\"review-submit\">\r\n <Button\r\n disabled={disabled || loading}\r\n style={{ color: \"#FFFFFF\" }}\r\n variant=\"contained\"\r\n onClick={onSubmit}\r\n className={clsx(classes.htBtn, disabled ? classes.btnDisabled : classes.btnEnabled)}\r\n >\r\n Submit\r\n </Button> \r\n {loading && (\r\n <CircularProgress\r\n style={{ color: \"#012639\" }}\r\n size={24}\r\n sx={{\r\n marginLeft: \"10px\",\r\n marginBottom: \"-8px\"\r\n }}\r\n />\r\n )} \r\n </Box>\r\n \r\n </>\r\n );\r\n};\r\nexport default SubmitButton;\r\n","import React, { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport SubmitButton from \"./SubmitButton\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\n\r\nconst useStyles = makeStyles({\r\n terms: {\r\n fontSize: 14,\r\n color: \"#666\",\r\n\r\n \"& a\": {\r\n textDecoration: \"underline\",\r\n fontSize: 14,\r\n color: \"#666\",\r\n },\r\n\r\n \"& span\": {\r\n color: \"red\",\r\n },\r\n },\r\n wrapper: {\r\n marginTop: \"30px\",\r\n },\r\n});\r\n\r\nexport default function TermsSubmit({ onSubmit, loading }) {\r\n const classes = useStyles();\r\n\r\n const [accept, setAccept] = useState(false);\r\n const [acceptExistService, setAcceptExistService] = useState(false);\r\n const hasAccount = useSelector((state) => state.user.profileInfo.hasAccount);\r\n const onChange = (e) => {\r\n setAccept(e.target.checked);\r\n };\r\n const onChangeExistService = (e) => {\r\n setAcceptExistService(e.target.checked);\r\n };\r\n\r\n let enableSubmit = () => {\r\n if (hasAccount) {\r\n return accept && acceptExistService;\r\n } else {\r\n return accept;\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {hasAccount && (\r\n <div>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n style={{ color: \"#012639\" }}\r\n checked={acceptExistService}\r\n onChange={onChangeExistService}\r\n />\r\n }\r\n label={\r\n <div className={classes.terms}>\r\n Because there is already working service at this address, my\r\n order will not be placed until a Hawaiian Telcom representative\r\n contacts me to confirm my order.\r\n </div>\r\n }\r\n />\r\n </div>\r\n )}\r\n <FormControlLabel\r\n control={<Checkbox style={{ color: \"#012639\" }} checked={accept} onChange={onChange} />}\r\n label={\r\n <div className={classes.terms}>\r\n I accept the summary of monthly costs and{\" \"}\r\n <a\r\n target=\"_blank\"\r\n href={process.env.REACT_APP_DNN + \"/residential/all-terms\"}\r\n >\r\n terms & conditions\r\n </a>\r\n <span> (required)</span>\r\n </div>\r\n }\r\n />\r\n <SubmitButton\r\n target=\"_blank\"\r\n disabled={hasAccount ? !accept || !acceptExistService : !accept}\r\n onSubmit={onSubmit}\r\n loading={loading}\r\n />\r\n </div>\r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\nexport default function ProductPromoDisclaimer() {\r\n \r\n const cart = useSelector((state) => state.cart);\r\n\r\n const visible = cart && cart.checkoutCart && cart.checkoutCart \r\n && cart.checkoutCart.showProductPromoDisclaimer \r\n && cart.checkoutCart.showProductPromoDisclaimer === true;\r\n\r\n\r\n return (\r\n visible ? \r\n <div id=\"productPromoDisclaimer\">\r\n <p class=\"topp\">*Limited-time offer. Only available to residential customers. The offer “One Month Free Internet†is available to customers who add new internet service, with speeds from 300 Mbps to 1 Gig.</p>\r\n <p class=\"bottomp\">One Month Free Internet promotion allows customers to receive In-Market promotional pricing after the first month; services do not revert to standard rates after the first month.</p>\r\n </div>\r\n :\r\n <></>\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { strings } from \"../../resources/Strings\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Box from \"@mui/material/Box\";\r\nimport \"../../css/main.css\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Addons from \"../addons/Addons\";\r\nimport {\r\n processedDigiCart,\r\n getProducts,\r\n getProductsTestMode,\r\n setProduct,\r\n clearSelectedProduct,\r\n} from \"../../redux/actions/productActions\";\r\nimport { setIsAutoSelectInit } from \"../../redux/actions/addonsActions\";\r\nimport { placeOrder } from \"../../redux/actions/orderActions\";\r\nimport {\r\n resetScheduling,\r\n setWaitForScheduling,\r\n} from \"../../redux/actions/scheduleActions\";\r\nimport {\r\n resetEstablishNewOrder,\r\n getSecretQuestions,\r\n} from \"../../redux/actions/userActions\";\r\nimport {\r\n setStep,\r\n saveHistory,\r\n resetAll,\r\n skipInstallationStep\r\n} from \"../../redux/actions/stepActions\";\r\n\r\nimport ProductsFilter from \"../products/ProductsFilter\";\r\nimport ProductGroup from \"../products/ProductGroup\";\r\nimport SpeedTiersView from \"../products/SpeedTiersView\";\r\nimport WarmLeads from \"../WarmLeads\";\r\nimport CustomerInfo from \"../CustomerInfo\";\r\nimport ReviewSubmit from \"../ReviewSubmit\";\r\nimport Cart from \"../Cart\";\r\nimport CartMobile from \"../CartMobile\";\r\nimport Installation from \"../Installation\";\r\nimport {\r\n getMainProductGroup,\r\n getFeaturedProducts,\r\n getNonFeaturedProducts,\r\n} from \"../../lib/product\";\r\n\r\nimport { getCategorys } from \"../../lib/addons\";\r\nimport { StepHeader } from \"../addressVerification/StepHeader\";\r\nimport Next from \"./Next\";\r\nimport Previous from \"./Previous\";\r\nimport Loading from \"../layout/Loading\";\r\nimport TermsSubmit from \"./TermsSubmit\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport ProductPromoDisclaimer from \"./ProductPromoDisclaimer\";\r\nimport {\r\n Alert,\r\n AlertTitle,\r\n Backdrop,\r\n Button,\r\n CircularProgress,\r\n LinearProgress,\r\n Link,\r\n Skeleton,\r\n Stack,\r\n Tab,\r\n Tabs,\r\n} from \"@mui/material\";\r\nimport { ConsoleSqlOutlined } from \"@ant-design/icons\";\r\nimport { Campaign, Margin } from \"@mui/icons-material\";\r\nimport { setSession } from \"../../redux/actions/campaignActions\";\r\n\r\nimport { resetCart } from \"./../../redux/actions/cartActions\";\r\nimport { setCampaign } from \"../../redux/actions/campaignActions\";\r\nimport zIndex from \"@mui/material/styles/zIndex\";\r\n\r\nconst useStyles = makeStyles({\r\n h1: {\r\n fontSize: 36,\r\n lineHeight: \"46px\",\r\n fontWeight: \"bold\",\r\n marginBottom: 0,\r\n flexBasis: \"100%\",\r\n },\r\n p: {\r\n fontSize: 14,\r\n color: \"#000000\",\r\n margin: \"5px 0px\",\r\n flexBasis: \"100%\",\r\n },\r\n error: {\r\n color: \"red\",\r\n fontSize: \"16px\",\r\n marginTop: \"3px\",\r\n },\r\n groupTitle: {\r\n fontSize: 14,\r\n fontWeight: \"600\",\r\n fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n // color: \"#002A42\"\r\n },\r\n root: {\r\n borderBottom: \"0px solid\",\r\n },\r\n flexContainer: {\r\n borderColor: \"#A1A1A1\",\r\n //borderBottom: \"1px #A1A1A1 solid\",\r\n marginRight: \"8px\",\r\n },\r\n indicator: {\r\n display: \"none\",\r\n },\r\n tabRoot: {\r\n borderRadius: \"10px 10px 0px 0px\",\r\n backgroundColor: \"#E5E5E5\",\r\n color: \"#212529\",\r\n marginRight: \"10px\",\r\n //width: \"140px\",\r\n minWidth: \"100px\",\r\n fontWeight: \"bold\",\r\n marginBottom: \"1px\",\r\n bottom: \"0px\",\r\n // height: \"-31px !important\",\r\n // height: \"42px !important\",\r\n borderBottom: \"0px solid !important\",\r\n textTransform: \"none\",\r\n height: \"62px !important\",\r\n width: \"159px\",\r\n textAlign: \"left\",\r\n },\r\n tabSelected: {\r\n backgroundColor: \"#fff\",\r\n borderColor: \"#aaa\",\r\n borderRadius: \"10px 10px 0 0\",\r\n border: \"1px solid\",\r\n paddingBottom: \"-72px\",\r\n position: \"relative\",\r\n marginRight: \"10px\",\r\n color: \"#212529 !important\",\r\n borderBottom: \"0px\",\r\n bottom: \"-1px\",\r\n height: \"62px !important\",\r\n width: \"169px\",\r\n textAlign: \"left\",\r\n },\r\n});\r\nconst useProdBoxStyles = makeStyles(() => ({\r\n root: {\r\n border: \"1px solid\",\r\n borderColor: \" #A1A1A1\",\r\n borderRadius: \"0px 0px\",\r\n // borderTop: \"0px\",\r\n borderRadius: \"0 10px 10px 10px\",\r\n },\r\n}));\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index } = props;\r\n const boxClasses = useProdBoxStyles();\r\n return (\r\n <div>\r\n {value === index && (\r\n <Box className={boxClasses.root} sx={{ p: 3 }}>\r\n {children}\r\n </Box>\r\n )}\r\n </div>\r\n );\r\n}\r\nexport default function OrderWizard(props) {\r\n const classes = useStyles();\r\n let uhistory = useHistory();\r\n const dispatch = useDispatch();\r\n const selectedAddress = useSelector((state) => state.address.address);\r\n const captchaValue = useSelector((state) => state.address.captchaValue);\r\n\r\n const campaign = useSelector((state) => state.campaign);\r\n const cartMonthlyChargesTotal = useSelector((state) =>\r\n state.cart &&\r\n state.cart.cart &&\r\n state.cart.cart.monthlyCharges &&\r\n state.cart.cart.monthlyCharges.monthlyTotal\r\n ? state.cart.cart.monthlyCharges.monthlyTotal\r\n : null\r\n );\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n const isSelfInstall = useSelector((state) => state.schedule.isSelfInstall);\r\n const email = profileInfo ? profileInfo.email : null;\r\n const campaignType =\r\n campaign && campaign.campaign && campaign.campaign.campaignType\r\n ? campaign.campaign.campaignType\r\n : \"\";\r\n\r\n const forceFallout = useSelector(state =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.forceFallout\r\n ? state.campaign.campaign.forceFallout\r\n : false\r\n ); \r\n //products error\r\n const error = useSelector((state) => state.products.error);\r\n const campaignerror = error?.status === 409 ? error.data : null;\r\n const campaignAuthError = error?.status === 401 ? error.data : null;\r\n const authErrorCampaignName = campaignAuthError?.campaignType ?? null;\r\n const hasCampaignError = campaignerror || authErrorCampaignName;\r\n\r\n const products = useSelector((state) => state.products.mainProducts);\r\n const isAddressFiberQualified = useSelector(\r\n (state) => state.products.isAddressFiberQualified\r\n );\r\n const speedTierTypeIsFiber = useSelector(\r\n (state) => state.products.speedTierTypeIsFiber\r\n );\r\n const [featuredProducts, setFeaturedProducts] = useState([]);\r\n const [nonFeaturedProducts, setNonFeaturedProducts] = useState([]);\r\n const showWarmLeadsForm = useSelector(\r\n (state) => state.products.showWarmLeadsForm\r\n );\r\n const campaignPromoText = useSelector(\r\n (state) => state.products.campaignPromoText\r\n );\r\n const selectedProductId = useSelector(\r\n (state) => state.products.selectedProductId\r\n );\r\n const productsLoading = useSelector((state) => state.products.loading);\r\n const updateCart = useSelector((state) => state.products.updateCart);\r\n\r\n const addons = useSelector((state) => state.products.addons);\r\n const selectedAddonIds = useSelector(\r\n (state) => state.products.selectedAddonIds\r\n );\r\n const billingInfo = useSelector((state) => state.user.billingInfo);\r\n const nextScreen = useSelector((state) => state.schedule.nextScreen);\r\n const currentStep = useSelector((state) => state.steps.currentStep);\r\n const history = useSelector((state) => state.steps.history);\r\n // const establishNewOrderInfo=useSelector((state) => state.user.establishNewOrderInfo);\r\n const establishNewOrderComplete = useSelector((state) =>\r\n state.user && state.user.establishNewOrderComplete === true ? true : false\r\n );\r\n const [state, setState] = useState({});\r\n\r\n const [productsFilter, setProductsFilter] = useState([]);\r\n const [filteredProducts, setFilteredProducts] = useState([]);\r\n\r\n const [categoryWarning, setCategoryWarning] = useState([]);\r\n const [installScreen, setInstallScreen] = useState(0);\r\n\r\n const [testMode, setTestMode] = useState(false);\r\n\r\n const [homePhoneSelected, setHomePhoneSelected] = useState(false);\r\n const [homePhoneAddonSelected, setHomePhoneAddonSelected] = useState(false);\r\n\r\n const [loading, setLoading] = useState(false);\r\n const availableAppointmentsData = useSelector(\r\n (state) => state.schedule.availableAppointments\r\n );\r\n const [availableAppointments, setavailableAppointments] = useState([]);\r\n const waitForScheduling = useSelector(\r\n (state) => state.schedule.waitForScheduling\r\n );\r\n\r\n const [isCartError, setIsCartError] = useState(false);\r\n const [profileInfoError, setProfileInfoError] = useState(false);\r\n const isScheduleLoading = useSelector((state) => state.schedule.loading);\r\n\r\n const [orderSubmitLoading, setOrderSubmitLoading] = useState(false);\r\n const [gatewayFree, setGatewayFree] = useState(false);\r\n const customerInfoRef = useRef();\r\n const installationRef = useRef();\r\n const [tab, setTab] = React.useState(0);\r\n\r\n const startStep =\r\n props &&\r\n props.match.params &&\r\n props.match.params.startStep &&\r\n props.match.params.startStep != \"\"\r\n ? props.match.params.startStep\r\n : \"\";\r\n\r\n const digiCartSubmittedId = useSelector(\r\n (state) => state.products.digiCartSubmittedId\r\n );\r\n const digiCartProcesed = useSelector(\r\n (state) => state.products.digiCartProcesed\r\n );\r\n\r\n //set for digicart\r\n if (digiCartSubmittedId && !digiCartProcesed) {\r\n dispatch(processedDigiCart());\r\n }\r\n useEffect(() => {\r\n dispatch(getSecretQuestions());\r\n }, []);\r\n useEffect(() => {\r\n if (!history || !history.push) {\r\n dispatch(saveHistory(uhistory));\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n var destinationStep = 0;\r\n\r\n switch (startStep.toLowerCase()) {\r\n case \"products\":\r\n //dispatch(setStep(0));\r\n destinationStep = 0; //setCurrentStep(0);\r\n break;\r\n case \"addons\":\r\n //dispatch(setStep(1));\r\n destinationStep = 1; //setCurrentStjji8uyyyyg6tep(1);\r\n break;\r\n case \"equipment\":\r\n //dispatch(setStep(2));\r\n destinationStep = 2; //setCurrentStjji8uyyyyg6tep(2);\r\n break;\r\n case \"customerinfo\":\r\n // setWaitForScheduling(true);\r\n\r\n dispatch(resetScheduling());\r\n dispatch(setWaitForScheduling(true));\r\n dispatch(resetEstablishNewOrder());\r\n destinationStep = 3; //setCurrentStep(3);\r\n break;\r\n case \"installation\":\r\n dispatch(setWaitForScheduling(true));\r\n // setWaitForScheduling(true);\r\n dispatch(resetEstablishNewOrder());\r\n destinationStep = 4; //setCurrentStep(4);\r\n break;\r\n case \"reviewsubmit\":\r\n dispatch(resetEstablishNewOrder());\r\n destinationStep = 5; //setCurrentStep(5);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n setCurrentStep(destinationStep);\r\n }, [startStep]);\r\n\r\n useEffect(() => {\r\n \r\n }, []);\r\n\r\n useEffect(() => {\r\n if (\r\n props &&\r\n props.match &&\r\n props.match.params &&\r\n props.match.params.campaignId &&\r\n props.match.params.qualLevel &&\r\n props.match.params.maxHsi &&\r\n props.match.params.island\r\n ) {\r\n dispatch(\r\n getProductsTestMode(\r\n props.match.params.campaignId,\r\n props.match.params.qualLevel,\r\n props.match.params.maxHsi,\r\n props.match.params.island\r\n )\r\n );\r\n } else {\r\n dispatch(getProducts());\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n setFeaturedProducts(getFeaturedProducts(products));\r\n setNonFeaturedProducts(getNonFeaturedProducts(products));\r\n }, [products]);\r\n\r\n useEffect(() => {\r\n setFilteredProducts(\r\n getMainProductGroup(productsFilter, nonFeaturedProducts)\r\n );\r\n }, [productsFilter]);\r\n\r\n useEffect(() => {\r\n if (currentStep === 1) {\r\n // setWaitForScheduling(true);\r\n dispatch(setWaitForScheduling(true));\r\n }\r\n // if (currentStep === 2 && !skipInstallation()) {\r\n // dispatch(getScheduling());// comment for testing SOE\r\n // }\r\n }, [currentStep]);\r\n useEffect(() => {\r\n if (currentStep === 2) {\r\n // setWaitForScheduling(true);\r\n dispatch(setWaitForScheduling(true));\r\n }\r\n // if (currentStep === 2 && !skipInstallation()) {\r\n // dispatch(getScheduling());// comment for testing SOE\r\n // }\r\n }, [currentStep]);\r\n\r\n useEffect(() => {\r\n // getScheduling request complete and data available\r\n if (\r\n billingInfo &&\r\n establishNewOrderComplete &&\r\n currentStep === 3 &&\r\n skipInstallation()\r\n ) {\r\n setLoading(false);\r\n goToNextStep();\r\n }\r\n }, [billingInfo, establishNewOrderComplete]);\r\n\r\n useEffect(() => {\r\n // getScheduling request complete and data available\r\n if (\r\n billingInfo &&\r\n establishNewOrderComplete &&\r\n currentStep === 4 &&\r\n skipInstallation()\r\n ) {\r\n setLoading(false);\r\n goToNextStep();\r\n }\r\n }, [currentStep, establishNewOrderComplete]);\r\n\r\n // this useEffect used to switch to next screen\r\n useEffect(() => {\r\n // getScheduling request complete and data available\r\n // setShippingAddress submit data to server and after that ...\r\n // setSchedule submit data to server and after that ...\r\n\r\n // ... waiting for user data will be set from null to true (nextScreen)\r\n if (\r\n nextScreen &&\r\n billingInfo &&\r\n !(waitForScheduling && currentStep === 3)\r\n ) {\r\n setLoading(false);\r\n goToNextStep();\r\n }\r\n }, [nextScreen, billingInfo]);\r\n\r\n //** if Campaign error, reset campaign and fetch product again */\r\n const resetCampaign = async () => {\r\n if (campaignerror) {\r\n //await dispatch(resetAddress());\r\n // await dispatch(resetAddresses());\r\n // await dispatch(setAddress(campaignerror.address));\r\n await dispatch(\r\n setSession(\r\n selectedAddress,\r\n email,\r\n campaignerror.resetCampaign,\r\n captchaValue\r\n )\r\n );\r\n await dispatch(setProduct(0));\r\n await dispatch(getProducts());\r\n }\r\n };\r\n\r\n const restartCampaign = async (authErrorCampaignName) => {\r\n dispatch(resetAll());\r\n var destination = \"/addressVerification/\" + authErrorCampaignName;\r\n history.push(destination);\r\n };\r\n\r\n const setCurrentStep = (step) => {\r\n dispatch(setStep(step));\r\n };\r\n\r\n const onChangeSetUpMyAccount = (e) => {\r\n setState({\r\n ...state,\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n const order = useSelector((state) => state.order.order);\r\n const orderError = useSelector((state) => state.order.error);\r\n\r\n useEffect(() => {\r\n if (orderError && !order) {\r\n setOrderSubmitLoading(false);\r\n dispatch(resetAll());\r\n if (campaign && campaign.campaign) {\r\n dispatch(setCampaign(campaign.campaign));\r\n }\r\n if (history) {\r\n dispatch(saveHistory(history));\r\n }\r\n history.push(\"/confirmationError/\");\r\n }\r\n }, orderError);\r\n\r\n useEffect(() => {\r\n if (order) {\r\n setOrderSubmitLoading(false);\r\n dispatch(resetAll());\r\n if (campaign && campaign.campaign) {\r\n dispatch(setCampaign(campaign.campaign));\r\n }\r\n if (history) {\r\n dispatch(saveHistory(history));\r\n }\r\n history.push(\"/confirmation/\");\r\n\r\n }\r\n }, order);\r\n\r\n useEffect(() => {\r\n if (currentStep === 0) {\r\n dispatch(clearSelectedProduct());\r\n dispatch(resetCart());\r\n dispatch(setIsAutoSelectInit(false));\r\n }\r\n }, [currentStep]);\r\n\r\n const onSubmit = () => {\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" Buypath Terms Accept Submit Order\",\r\n });\r\n setOrderSubmitLoading(true);\r\n dispatch(placeOrder(state));\r\n };\r\n\r\n const goToNextStep = () => {\r\n switch (currentStep) {\r\n case 0:\r\n \r\n let productName = \"\";\r\n if (\r\n products.filter((poduct) => poduct.productId == selectedProductId)\r\n .length > 0\r\n ) {\r\n productName = products.filter(\r\n (poduct) => poduct.productId == selectedProductId\r\n )[0].productName;\r\n }\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: \"orderwizard\",\r\n pageTitle: \"Addons\",\r\n productDisplayName: productName,\r\n },\r\n });\r\n break;\r\n case 1:\r\n \r\n let prodName = \"\";\r\n if (\r\n products.filter((poduct) => poduct.productId == selectedProductId)\r\n .length > 0\r\n ) {\r\n prodName = products.filter(\r\n (poduct) => poduct.productId == selectedProductId\r\n )[0].productName;\r\n }\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: \"orderwizard\",\r\n pageTitle: \"Equipment\",\r\n productDisplayName: prodName,\r\n },\r\n });\r\n break;\r\n case 2:\r\n \r\n\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" Buypath Enter Buypath\",\r\n });\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: \"orderwizard\",\r\n pageTitle: \"Customer Info\",\r\n addonsDisplayNameList:\r\n convertCommaDelimitedString(selectedAddonIds),\r\n orderTotalMrc: cartMonthlyChargesTotal,\r\n orderCurrency: \"USD\",\r\n },\r\n });\r\n break;\r\n case 3:\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" Buypath Profile Next\",\r\n });\r\n break;\r\n case 4:\r\n if (installScreen === 1) {\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" Self Install Submit Order\",\r\n });\r\n } else {\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" Schedule Submit Order\",\r\n });\r\n }\r\n\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: \"orderwizard\",\r\n pageTitle: \"Review and Submit\",\r\n },\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n var offset = 1;\r\n\r\n // if (skipInstallation() && establishNewOrderComplete && currentStep == 2) {\r\n // offset = 2;\r\n // }\r\n if (skipInstallation() && establishNewOrderComplete && currentStep == 3) {\r\n //offset = 2;\r\n offset = 2;\r\n }\r\n // setCurrentStep(currentStep + offset);\r\n // window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n navigateStep(currentStep + offset);\r\n };\r\n\r\n function convertCommaDelimitedString(selectedAddonIds) {\r\n let prodNameList = \"\";\r\n let addOnName = \"\";\r\n if (selectedAddonIds != null) {\r\n selectedAddonIds.forEach((element) => {\r\n if (addons.filter((addon) => addon.addonId == element).length > 0) {\r\n addOnName = addons.filter((addon) => addon.addonId == element)[0]\r\n .addonName;\r\n }\r\n if (prodNameList != \"\") {\r\n prodNameList = prodNameList + \",\" + addOnName;\r\n } else {\r\n prodNameList = addOnName;\r\n }\r\n });\r\n }\r\n return prodNameList;\r\n }\r\n const navigateStep = (newStep) => {\r\n let destination;\r\n\r\n switch (newStep) {\r\n case -2:\r\n case -1:\r\n destination = \"/\";\r\n break;\r\n case 0:\r\n destination = \"/orderwizard/products\";\r\n break;\r\n case 1:\r\n destination = \"/orderwizard/addons\";\r\n break;\r\n case 2:\r\n destination = \"/orderwizard/equipment\";\r\n break;\r\n case 3:\r\n // setWaitForScheduling(true);\r\n dispatch(setWaitForScheduling(true));\r\n destination = \"/orderwizard/customerinfo\";\r\n break;\r\n case 4:\r\n destination = \"/orderwizard/installation\";\r\n break;\r\n case 5:\r\n destination = \"/orderwizard/reviewsubmit\";\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n history.push(destination);\r\n };\r\n\r\n const skipCategoryWarningForRequiredAddonUnchecked = (\r\n categoryAddons,\r\n selectedAddonIds\r\n ) => {\r\n var skipCategoryWarning = false;\r\n\r\n categoryAddons.forEach((categoryAddon) => {\r\n if (\r\n categoryAddon.requiredAddonVersionIds &&\r\n categoryAddon.requiredAddonVersionIds.length > 0\r\n ) {\r\n var hasRequiredAddonChecked = false;\r\n\r\n categoryAddon.requiredAddonVersionIds.forEach(\r\n (requiredAddonVersionId) => {\r\n selectedAddonIds.forEach((selectedAddonId) => {\r\n if (selectedAddonId == requiredAddonVersionId) {\r\n hasRequiredAddonChecked = true;\r\n }\r\n });\r\n }\r\n );\r\n if (!hasRequiredAddonChecked) {\r\n skipCategoryWarning = true;\r\n }\r\n }\r\n });\r\n return skipCategoryWarning;\r\n };\r\n\r\n const next = () => {\r\n if (currentStep === 0 && !selectedProductId) {\r\n // if product not selected than no action on Next btn\r\n return;\r\n }\r\n if (currentStep === 1) {\r\n // Next on addons screen\r\n const categories = getCategorys(addons);\r\n let i = 0,\r\n len = categories.length;\r\n\r\n while (i < len) {\r\n if (categories[i].requiredQty > 0) {\r\n // get all addons with same current category\r\n let categoryAddons = addons.filter(\r\n (ad) =>\r\n ad.groupingCategory === categories[i].name &&\r\n ad.isEquipment !== true\r\n );\r\n\r\n // get selected addons id for that category\r\n let overlap = categoryAddons.filter((ad) =>\r\n selectedAddonIds.includes(ad.addonId)\r\n );\r\n if (\r\n categoryAddons &&\r\n categoryAddons.length > 0 &&\r\n overlap.length < categories[i].requiredQty &&\r\n !skipCategoryWarningForRequiredAddonUnchecked(\r\n categoryAddons,\r\n selectedAddonIds\r\n )\r\n ) {\r\n setCategoryWarning(categories[i].name);\r\n\r\n return;\r\n }\r\n }\r\n i++;\r\n }\r\n setCategoryWarning([]);\r\n }\r\n if (currentStep === 2) {\r\n // Next on addons screen\r\n const categories = getCategorys(addons);\r\n let i = 0,\r\n len = categories.length;\r\n\r\n while (i < len) {\r\n if (categories[i].requiredQty > 0) {\r\n // get all addons with same current category\r\n let categoryAddons = addons.filter(\r\n (ad) =>\r\n ad.groupingCategory === categories[i].name &&\r\n ad.isEquipment === true\r\n );\r\n\r\n // get selected addons id for that category\r\n let overlap = categoryAddons.filter((ad) =>\r\n selectedAddonIds.includes(ad.addonId)\r\n );\r\n if (\r\n categoryAddons &&\r\n categoryAddons.length > 0 &&\r\n overlap.length < categories[i].requiredQty &&\r\n !skipCategoryWarningForRequiredAddonUnchecked(\r\n categoryAddons,\r\n selectedAddonIds\r\n )\r\n ) {\r\n setCategoryWarning(categories[i].name);\r\n\r\n return;\r\n }\r\n }\r\n i++;\r\n }\r\n setCategoryWarning([]);\r\n }\r\n if (currentStep === 3) {\r\n // setWaitForScheduling(false);\r\n dispatch(setWaitForScheduling(false));\r\n // Customer Info\r\n // call form validation from Customer Info component\r\n setLoading(true);\r\n customerInfoRef.current.valideteForm();\r\n // after customer form vlidation\r\n // set profile info call set setBillingInfo\r\n // than getScheduling and after getScheduling set nextScreen and move to next step\r\n // in useEffect for nextScreen\r\n } else {\r\n if (currentStep === 4) {\r\n // Installation\r\n if (installScreen === 0) {\r\n return; // Installation not selected. No action if click Next btn\r\n }\r\n\r\n // validation selected form in Installation screen\r\n installationRef.current.valideteForm();\r\n // call goToNextStep() after submition to server in useEffect for nextScreen\r\n } else {\r\n goToNextStep();\r\n }\r\n }\r\n };\r\n const skipInstallation = () => {\r\n dispatch(skipInstallationStep(false));\r\n var hasSag =\r\n products &&\r\n products.filter(\r\n (product) =>\r\n selectedProductId === product.productId &&\r\n product.sagCode &&\r\n product.sagCode != \"\"\r\n ).length > 0;\r\n var hasAccount = profileInfo && profileInfo.hasAccount;\r\n\r\n // profileInfo &&\r\n // profileInfo.accountNumber &&\r\n // profileInfo.accountNumber !== \"\";\r\n dispatch(skipInstallationStep(homePhoneSelected || homePhoneAddonSelected || hasAccount || hasSag || forceFallout));\r\n return homePhoneSelected || homePhoneAddonSelected || hasAccount || hasSag || forceFallout;\r\n };\r\n\r\n const goToPrevStep = () => {\r\n var offset = 1;\r\n if (skipInstallation() && currentStep == 5) {\r\n offset = 2;\r\n }\r\n // setCurrentStep(currentStep - offset);\r\n //window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n navigateStep(currentStep - offset);\r\n };\r\n\r\n const prev = () => {\r\n // setWaitForScheduling(true);\r\n dispatch(setWaitForScheduling(true));\r\n goToPrevStep();\r\n };\r\n\r\n const handleGetInstallationType = (type) => {\r\n // set selected intalletion type by \"How would you like to install your network equipment?\" radio button\r\n setInstallScreen(Number(type));\r\n };\r\n\r\n const onChangeProductFilter = (event) => {\r\n const filterName = event.target.name;\r\n\r\n if (productsFilter.includes(filterName)) {\r\n // remove from filter array\r\n setProductsFilter(productsFilter.filter((name) => name !== filterName));\r\n } else {\r\n // add to filter array\r\n setProductsFilter([...productsFilter, filterName]);\r\n }\r\n };\r\n\r\n const onClearFilters = () => {\r\n setProductsFilter([]);\r\n };\r\n\r\n const handleValidationFail = () => {\r\n setLoading(false);\r\n };\r\n const handleTabChange = (event, newValue) => {\r\n setTab(newValue);\r\n };\r\n\r\n return (\r\n <div>\r\n {!!(loading || isScheduleLoading) && (\r\n <Backdrop\r\n sx={{\r\n backgroundColor: \"rgba(240, 240, 240,0.5)\",\r\n color: \"#fff\",\r\n height: \"auto\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1,\r\n }}\r\n open={loading}\r\n //onClick={handleClose}\r\n >\r\n <CircularProgress\r\n style={{ color: \"#012639\", \"margin-bottom\": \"18px\" }}\r\n thickness={8}\r\n size={64}\r\n />\r\n <Typography\r\n sx={{\r\n textAlign: \"center\",\r\n color: \"black\",\r\n fontWeight: 700,\r\n fontSize: \"1.5rem\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1,\r\n }}\r\n >\r\n Just a moment while we update your cart\r\n </Typography>\r\n </Backdrop>\r\n )}\r\n {currentStep !== 5 && (\r\n <Box className=\"cart-mobile-view\">\r\n {testMode ? <div>Order Wizard - Test Mode</div> : null}\r\n <div className=\"right-fixed-wrapper\">\r\n <CartMobile\r\n setIsCartError={setIsCartError}\r\n setGatewayFree={setGatewayFree}\r\n />\r\n {selectedProductId && (\r\n <Grid container justifyContent=\"flex-end\" sx={{ mt: 1 }}>\r\n {!isCartError && <Next onNext={next} loading={loading} />}\r\n {profileInfoError && (\r\n <Grid sx={{ pl: 5, pr: 0, pt: 2 }}>\r\n <div className={classes.error}>{profileInfoError}</div>\r\n </Grid>\r\n )}\r\n </Grid>\r\n )}\r\n </div>\r\n </Box>\r\n )}\r\n <div className={currentStep !== 5 ? \"order-content\" : \"order-review\"}>\r\n {currentStep !== 0 && <Previous onPrevious={prev} />}\r\n {currentStep !== 5 ? (\r\n <Grid container>\r\n <Grid item xs={12} md={9} className=\"product-grid\">\r\n {currentStep === 0 ? (\r\n <div className=\"products-wrapper\">\r\n <StepHeader\r\n title={\r\n speedTierTypeIsFiber === true\r\n ? \"Build your bundle.\"\r\n : speedTierTypeIsFiber === null\r\n ? \" \"\r\n : \"Fioptics hasn’t reached your address yet.\"\r\n }\r\n text=\"\"\r\n />\r\n {productsLoading && (\r\n <Stack spacing={1}>\r\n <Skeleton animation=\"wave\" />\r\n <Skeleton />\r\n <Skeleton\r\n variant=\"rectangular\"\r\n width=\"100%\"\r\n height={70}\r\n />\r\n <Skeleton variant=\"rounded\" width=\"100%\" height={100} />\r\n </Stack>\r\n )}\r\n\r\n {campaignerror ? (\r\n <Stack sx={{ width: \"100%\", margin: \"1em\" }} spacing={2}>\r\n <Alert\r\n severity={\r\n campaignerror.ineligibleAddressErrorMessage\r\n ? \"error\"\r\n : \"info\"\r\n }\r\n action={\r\n <Link\r\n style={{ alignSelf: \"center\", margin: \"8px\" }}\r\n component=\"button\"\r\n onClick={resetCampaign}\r\n >\r\n <strong>\r\n {\" \"}\r\n View Eligible Offers\r\n {/* {campaignerror.resetCampaign} */}\r\n </strong>\r\n </Link>\r\n }\r\n >\r\n <AlertTitle>\r\n {\" \"}\r\n <strong>\r\n {campaignerror.ineligibleAddressErrorMessage\r\n ? \"Campaign Error\"\r\n : \"Your address is eligible for a special program\"}\r\n </strong>\r\n </AlertTitle>\r\n {campaignerror.ineligibleAddressErrorMessage ? (\r\n campaignerror.ineligibleAddressErrorMessage\r\n ) : (\r\n <>\r\n {/* Your address is eligible for a special program.{\" \"} */}\r\n </>\r\n )}\r\n </Alert>\r\n </Stack>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n {authErrorCampaignName ? (\r\n <Stack sx={{ width: \"100%\", margin: \"1em\" }} spacing={2}>\r\n <Alert\r\n severity={\"error\"}\r\n action={\r\n <Link\r\n style={{ alignSelf: \"center\", margin: \"8px\" }}\r\n component=\"button\"\r\n onClick={() =>\r\n restartCampaign(authErrorCampaignName)\r\n }\r\n >\r\n <strong>Click here to login</strong>\r\n </Link>\r\n }\r\n >\r\n <AlertTitle>Authentication Error</AlertTitle>\r\n <strong>This campaign requires a login.</strong>\r\n </Alert>\r\n </Stack>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n {!hasCampaignError && showWarmLeadsForm && <WarmLeads />}\r\n\r\n {!hasCampaignError && products && !speedTierTypeIsFiber ? (\r\n <>\r\n <></>\r\n <>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.groupTitle}\r\n >\r\n {campaignPromoText ? campaignPromoText : \"\"}\r\n </Typography>\r\n\r\n {products.filter(\r\n (p) => p.isHsi && !p.isTV && !p.isPhone\r\n ).length ? (\r\n <div>\r\n <strong>\r\n Start by selecting your internet speed.\r\n </strong>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.groupTitle}\r\n >\r\n <SpeedTiersView\r\n products={products}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n campaignType={campaignType}\r\n ></SpeedTiersView>\r\n </Typography>\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n {products.filter((p) => p.isHsi && p.isTV && !p.isPhone)\r\n .length ? (\r\n <div>\r\n <strong>Internet + TV</strong>\r\n\r\n <ProductGroup\r\n campaignType={campaignType}\r\n products={products.filter(\r\n (p) => p.isHsi && p.isTV && !p.isPhone\r\n )}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n />\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n {products.filter((p) => p.isHsi && p.isPhone && !p.isTV)\r\n .length ? (\r\n <div>\r\n <strong>Internet + Home Phone</strong>\r\n\r\n <ProductGroup\r\n campaignType={campaignType}\r\n products={products.filter(\r\n (p) => p.isHsi && p.isPhone && !p.isTV\r\n )}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n />\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n {products.filter((p) => p.isHsi && p.isPhone && p.isTV)\r\n .length ? (\r\n <div>\r\n <strong>Internet + TV+ Home Phone</strong>\r\n\r\n <ProductGroup\r\n campaignType={campaignType}\r\n products={products.filter(\r\n (p) => p.isHsi && p.isPhone && p.isTV\r\n )}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n />\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n {products.filter(\r\n (p) => !p.isHsi && !p.isPhone && p.isTV\r\n ).length ? (\r\n <div>\r\n <strong>TV</strong>\r\n\r\n <ProductGroup\r\n campaignType={campaignType}\r\n products={products.filter(\r\n (p) => !p.isHsi && !p.isPhone && p.isTV\r\n )}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n />\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n {products.filter(\r\n (p) => !p.isHsi && !p.isTV && p.isPhone\r\n ).length ? (\r\n <div>\r\n <strong>Home Phone</strong>\r\n\r\n <ProductGroup\r\n campaignType={campaignType}\r\n products={products.filter(\r\n (p) => !p.isHsi && !p.isTV && p.isPhone\r\n )}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n />\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n </>{\" \"}\r\n </>\r\n ) : null}\r\n {!hasCampaignError && products && speedTierTypeIsFiber ? (\r\n <>\r\n <>\r\n <Typography\r\n gutterBottom\r\n variant=\"h6\"\r\n component=\"div\"\r\n fontSize=\"14px\"\r\n className={classes.groupTitle}\r\n >\r\n Start by selecting your internet speed.\r\n </Typography>\r\n <Typography\r\n gutterBottom\r\n variant=\"h5\"\r\n component=\"div\"\r\n className={classes.groupTitle}\r\n >\r\n <SpeedTiersView\r\n products={products}\r\n setHomePhoneSelected={setHomePhoneSelected}\r\n selectedProductId={selectedProductId}\r\n campaignType={campaignType}\r\n ></SpeedTiersView>\r\n </Typography>\r\n </>\r\n </>\r\n ) : (\r\n \"\"\r\n )}\r\n </div>\r\n ) : null}\r\n {currentStep === 1 ? (\r\n <div className=\"products-wrapper\">\r\n {/* <StepHeader\r\n title=\"Choose your optional bundled services\"\r\n text=\"Add additional services below or click Next.\"\r\n /> */}\r\n\r\n <div className=\"step-header\">\r\n <Typography className={classes.h1 + \" title\"} gutterBottom>\r\n {\"Choose your optional bundled services.\"}\r\n </Typography>\r\n <Typography className={classes.p} gutterBottom>\r\n <strong>\r\n {\"Add additional services below or click Next.\"}\r\n </strong>\r\n </Typography>\r\n </div>\r\n <p style={{ marginBottom: 0 }}> </p>\r\n <Addons\r\n gatewayFree={gatewayFree}\r\n categoryWarning={categoryWarning}\r\n setHomePhoneAddonSelected={setHomePhoneAddonSelected}\r\n isEquipmentStep={false}\r\n />\r\n <Typography style={{fontSize:14}}>\r\n {strings.common.staticVerbiage}\r\n </Typography>\r\n </div>\r\n ) : null}\r\n {currentStep === 2 ? (\r\n <div className=\"products-wrapper\">\r\n <StepHeader title=\"Select Your Equipment Options\" text=\"\" />\r\n <p style={{ marginBottom: 0 }}> </p>\r\n <Addons\r\n gatewayFree={gatewayFree}\r\n categoryWarning={categoryWarning}\r\n setHomePhoneAddonSelected={setHomePhoneAddonSelected}\r\n isEquipmentStep={true}\r\n />\r\n <Typography style={{fontSize:14}}>\r\n {strings.common.staticVerbiage}\r\n </Typography>\r\n </div>\r\n \r\n ) : null}\r\n {currentStep === 3 ? (\r\n <div className=\"products-wrapper\">\r\n <StepHeader\r\n title=\"Customer Info\"\r\n // text=\"Confirm the address where your service will be installed, and set up security information for your profile.\"\r\n text=\"Please verify your installation address, contact information and establish your account security.\"\r\n />\r\n <CustomerInfo\r\n ref={customerInfoRef}\r\n handleValidationFail={handleValidationFail}\r\n setProfileInfoError={setProfileInfoError}\r\n profileInfoError={profileInfoError}\r\n skipInstallation={skipInstallation}\r\n />\r\n <Typography style={{marginTop:12,fontSize:14}}>\r\n {strings.common.staticVerbiage}\r\n </Typography>\r\n </div>\r\n ) : null}\r\n {currentStep === 4 ? (\r\n <div className=\"products-wrapper\">\r\n <StepHeader\r\n title=\"Installation\"\r\n // text=\"Thanks for setting up your profile! Now let’s take care of your installation.\"\r\n />\r\n <Typography\r\n gutterBottom\r\n component=\"div\"\r\n fontSize=\"18px\"\r\n color={\"#000 !important\"}\r\n >\r\n Thanks for setting up your profile! Now let’s take care of\r\n your installation.\r\n </Typography>\r\n <Installation\r\n getInstallationType={handleGetInstallationType}\r\n ref={installationRef}\r\n />\r\n <Typography style={{marginTop:12,fontSize:14}}>\r\n {strings.common.staticVerbiage}\r\n </Typography>\r\n </div>\r\n ) : null}\r\n </Grid>\r\n\r\n <Grid item xs={3} sx={{ display: { xs: \"none\", md: \"block\" } }}>\r\n {testMode ? <div>Order Wizard - Test Mode</div> : null}\r\n\r\n <div className=\"right-fixed-wrapper\">\r\n <Cart\r\n setIsCartError={setIsCartError}\r\n setGatewayFree={setGatewayFree}\r\n />\r\n {updateCart && (\r\n <LinearProgress\r\n sx={{\r\n \"& .MuiLinearProgress-bar\": {\r\n backgroundColor: \"#012639\", // Custom blue color\r\n },\r\n ml: 3,\r\n mt: 2,\r\n }}\r\n />\r\n )}\r\n {selectedProductId && (\r\n <Grid\r\n container\r\n justifyContent=\"flex-end\"\r\n style={{ paddingTop: \"10%\" }}\r\n >\r\n {!isCartError && (\r\n <Next\r\n onNext={next}\r\n loading={updateCart || loading || isScheduleLoading}\r\n />\r\n )}\r\n {profileInfoError && (\r\n <Grid sx={{ pl: 5, pr: 0, pt: 2 }}>\r\n <div className={classes.error}>{profileInfoError}</div>\r\n </Grid>\r\n )}\r\n </Grid>\r\n )}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n ) : (\r\n <>\r\n <StepHeader\r\n title=\"Review & Submit\"\r\n text=\"You’re almost done! Let’s take a moment to review your information.\"\r\n />\r\n <ReviewSubmit onChangeAccount={onChangeSetUpMyAccount} />\r\n <ProductPromoDisclaimer />\r\n <TermsSubmit onSubmit={onSubmit} loading={orderSubmitLoading} />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","//todo: add tests for that fuction\r\nexport const getMainProductGroup = (productFilter, products) => {\r\n let filteredproducts = null;\r\n if (productFilter.length === 3)\r\n filteredproducts = products.filter(\r\n (itm) => itm.isHsi || itm.isPhone || itm.isTV\r\n );\r\n else if (productFilter.length === 0) {\r\n filteredproducts = [];\r\n }\r\n //HSI TV\r\n else if (productFilter.includes(\"HSI\") && productFilter.includes(\"TV\")) {\r\n filteredproducts = products.filter(\r\n (itm) => (itm.isHsi || itm.isTV) && !itm.isPhone\r\n );\r\n }\r\n //HSI PHONE\r\n else if (productFilter.includes(\"HSI\") && productFilter.includes(\"PHONE\")) {\r\n filteredproducts = products.filter(\r\n (itm) => (itm.isHsi || itm.isPhone) && !itm.isTV\r\n );\r\n }\r\n //TV PHONE\r\n else if (productFilter.includes(\"TV\") && productFilter.includes(\"PHONE\")) {\r\n filteredproducts = products.filter(\r\n (itm) => (itm.isTV || itm.isPhone) && !itm.isHsi\r\n );\r\n }\r\n //HSI\r\n else if (productFilter.includes(\"HSI\")) {\r\n filteredproducts = products.filter(\r\n (itm) => itm.isHsi && !itm.isTV && !itm.isPhone\r\n );\r\n }\r\n //PHONE\r\n else if (productFilter.includes(\"PHONE\")) {\r\n filteredproducts = products.filter(\r\n (itm) => itm.isPhone && !itm.isHsi && !itm.isTV\r\n );\r\n }\r\n //TV\r\n else {\r\n filteredproducts = products.filter(\r\n (itm) => itm.isTV && !itm.isHsi && !itm.isPhone\r\n );\r\n }\r\n return filteredproducts;\r\n};\r\n\r\nexport const getFeaturedProducts = (products) => {\r\n if (products) {\r\n //console.log(\"products\",products.filter((itm) => itm.sortOrder >= 1 && itm.sortOrder <= 5));\r\n return products.filter((itm) => itm.sortOrder >= 1 && itm.sortOrder <= 5);\r\n }\r\n return [];\r\n};\r\n\r\nexport const getNonFeaturedProducts = (products) => {\r\n if (products) {\r\n return products.filter((itm) => itm.sortOrder > 5);\r\n }\r\n return [];\r\n};\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAAABOCAMAAAC31DssAAAAtFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////oK74hAAAAO3RSTlMA/PoCB/cE7PTwEOgU5ApnIg3f1rw9gibSpJ0eYZYrzcdUsbfawI90Wzg0by95GE5CG4qHSay0qWpFfadFHm8AAA62SURBVHja1VzpmrI6DIYCsigKuCMqbrgv467c/30dQW1aWtD5nmc8M+8/oZQ0SZNmQSELuUJ1OSjnNfSAU4+vTpumoo/WsvBbkOu4pqJ1PVv4KKRZzdfFkACq3i4Xx058UR3/Fg5JXjkmT9l+lEOrwEQhjXzrJq258vhlToXfgXX+Sd9F+Bhym1HIoCsLQqeM9WksCf8H5CL9u1XGBO6ET0H2hmLIoHm7c1aev8RtTvg45Na61u5QlyYKQeCHIHlqyMH4dssFi1T7NIOk1qRvKqJYo3R9C6JsCx/C3gk50Na3W0342RM+idzNo+bvvChROhVgBime8BkshiEP5uJ2b4fJ8b+ET8JqoOferlJqNUbYRlrCR2AfQi4aEUf2z82nb4SP4qI96dBb1I2p/mRc6UNeo0caICU/LD+wK0bc22oxMY2J8FnMQVBFeu+N8zFFw/mHDma5AVg9/eBNO/U7LCO+bXh+Xm1sF5+20GD8TknP1hvk1WF7+imKNhpYnQnvpbJl2cKnIXfBmbIybUXS+xDkPqZEvfHnt6CVx5t+L/yv6GAFEoPfwx+hinDA0xH+V3hYgZzZP53m5KJtGHbxe8zN3R+SU/3QGWx04dtWVZblt8iRcje82mEBpqT//X1td9bjwD0cjwd3V6q+uZKitZ/v3FP/2G8G48sXl0IJyDra3wpNqpNxLQi2tXlvYWRycXUbudu+HGgMMCWVc+mJyXOti+eVKrsOyZoPTF1BYrw/kZbvXusCi+lzins24KvUd54PhUhRy8FC4nAeLOOo5Hle9Pw9I2V5j+k2HIJKh6GqKSiCopt+LdX3ytV2Ix4ZDxyNWwKAjY1ZiI8o5wufscv1BDGrdTMvJh/Lt6fJw8mXg7fwSjAubZOJivXmpigkn+qyRKF1JPgjdil1lqDkI+ppz9OOQm+g0ISbu04KL2cwKQn3YSqxBR/S5NheRedydrhNCGODra3ZWveBpxR57aTqLXjRYRQMrkzMV+oZo8QnSD1VGUXb9NmhqHEu8o/RCned3sOCI6zoK4qtvhimoUvb+iU4gZOS+lA5sYy9ytGgTvRmhEVWJAnqphKknxNKPeHrhNgGY5egn4U2vRuyGn7tiXi6MHfCdIiNTY4Q1yl8C8MetYwSh5dOgXK6lXcJ0moGqftzPW3clqdD/EDV/Lr7G8gGEdmyzkkLM2H2JFD9bvge8h68AZIIJCrRgICTDKq/IEgPYOVSSU0fd82xLrfMHerfZyxU8JUSkOOHr1CGXWblwzdhkruMp3fbSP4DyABjPzMSw2yISxkbNzNjHGIP7Rafnyc56eI2TwlMYbenQuwXBAHM/Jvw6yDnLmfSSeTdGljcvW8QZF4EAUSeDkw3xoU7ubiTEi5Ot7A15DAeickru5wAZp6B4vjHw6Cbp++JTWwrwFcB1AUoAKFwnVH4GuJAvnPzjDLHqes3bbSXdHFl+ykBkXqxXj6N19PpfnxwFMqiTIWEmYdH/Nq0IMUx+eSo4ttYKSJM8WTKqHLHoBatca1jiu4iM44iPb1mdo/NZt83NfIG8lgFQmrjeLoNJAk/JM/bTXAjA4D7UPZr8sHCSaQOPcH6GSnIVok0BSiQwcyTUJtrQo2Llz4i5jvaTLasaxQfkASqyDIyYv60EaW53aDXMWRJko36hDo3llfxhjfhZeVatSBLOaMz9wnykoHGCE99LQBsxsWNH8k8RAq8vShSB/1AIwhqcfd8o2ck6pU7hZhx8yJbJkFJoylHvyc6ZWqWdYIiY10mmB9rJ7HD/KqMK9nAIS1po4esegPsMlGEjjAbkscd7Mwx+UsgF004kYxyZIM1eUewtf/Quwb4H3owiCy+0fLJ2Q/JxEjdJ0pE0dRtkMWeZIPzvOomsy551skC6ni9+a+Y1S4CBvQ5MabRFmGtOSaSQe6KV/M+ESrUuROsp9SabHAR60giO0SYvWWBDZRBPpXoLujzgDoUblH8ssokOcVEI2wegz1ebjdmxoaU9Ypb4C9ThX0w8+BEWdQJlzW/y02kjD2ghYdq9Yj9OmE9PImT0wArupWp08OVLverEQsmRYHZE4iweQyWtI22j4SJSUnzwSYXNwkvKaYW1moIgmQZknicJEIV83t4o1duE/vryo01O2r8arXiGfTx6kgJq+A63SuHvFxbJClLdXHiLj4zqRAWwYZMM2rhOXEiNmHXp4fuo4huqUb/BsxhgRLZWBEiXqQZW4VIDd2n5xwBQ5tUVcRYWNx6RYWweQwMH89WooviCoxOT3RtwdqClcxI2oHGFMGJNYsptaAaHdF2DYGPr67eBG0nDx1ac/qy8GiAvNcc2zCkTH7BD1/XfGXQybYEkQybe2fL7ZAXL4yAD7AGit+oR51CtJKQhkILVCM+RgH00XKzgrtpOxSyT6kuLr+IPIIK6pY6aw7siZsjs2VhAEvlm0IwyhZsHY+20ZgEdXZbugMSawlvYeYkYh6zcp3JGb1aCKs2qCjPxUX2awzKAArEug2KQXMykgKkm3a1GokCS0as0iKjDsZ7cAhj4T0U25zAcLAvpo3fgQfOlGvFvv0cgKuR0hm0I7eY5IK1BSJYlECDIo70NMyvFlMLAooCsP8w7AXqvPSUXvEKfNUGG33luTiKI6DQSi+j7OKSZtSovFeUhAjGjGzQUuT3LeQCPJ0rC7LPivc1Fg1uqmzArQnCmtE608XNI3ul4EXUMwploGceGWgocyEFtH8cdihf1Uzp00FXCVIiEI+8g02Dm/Fw1hwJwprzCw77hpicTXSsfqvU2RqS4dvUzAj1APaJsLZU38KZdtlYZ7SJIFjKv/W+ddp5LocmEmujSZvHYKFC1EBny40Ms6+Qae2ejo3JRQBkFMH6BtW3MKWXNiRt+ULEv77X21XcDBReUnyTEUoMbE5BCJHtwMI5sxbM5pcGN4HMlbfWsFGp2kAVLBLIjT7KO5YgzEKCXd+DvG8ONbYosEo1qCLvlLujLcE8m0GgdeB5pQCEnNXDAsPCCZ0to7Xew/z2jX9iEMCenU9OwhipyZ0KPgYtpSwXN45dMXhsI/0cDQq7oFqPtEmG3TKBRovJlvFFFkViiGzH5cO25HQ1+vIqtBq5TB9pFvkFh35/D5KzqaeOqkMZKrsRkm4nBfKWSAnnbk/5WAtr9Mg+JbKW/vKcuOmq/tqmlIJqTZOnuy7Bo0aCm1MzS0cXYG4X8WgQ2D5tqQeR0Em6JnaUs7kKM1sOFSMD5AblVo0yEdqnnwrzwRfMsD40DnXKaFpjIDL/lfA4OmHzGPSodmDwLaCKSUhXBO+aRQJUCB/Rec3VsGtTMZ/mpdTwVItWKLXOj4HRnf7qU+Z9hW3Pl0oinc8EzPF6fFvIcnFG/LrRC6NYfITKYPXHVNGryLcSRNJeWUqU3NCcdmKI3gslEURmc+iZPxlqzuVoOwXm/WGbTSzzGUSHEi9d3BXoOa44Hn5ObCjHYurHiifxuEqm7IedxMcqborI+smqtjphZ77qEEksBKE3FB+EXBKJZURniQEj9sAKKDAubqbCYneMRVltFYIZc8jewPI5emfUtJA05ODM2aBG6hMJzhgDIgWcKCFIhSCeBtK//ZRsq3EECos0cQ5V1El1cWgCpwLol2jRc+2PCnnkakH2Bqj0L3LyexWqY8hfJT93EisdCd7RSH7EMlfIIpRNindSQeTMBSq7VisQIwkRDfj9v2C9+S5Omz6EQtATolEP2G2v+3QJ+QK1CRJ5qlFHqgcOOcLcPFReJ5ja9VZPFtXVZNzSKdOtZDbunRzp1HsvkDGIoA0uxWdtEY5CzKliAkWdHMeJ6RBUgVIRQP7y0rFa1qy3TcTHeklKNBjDes+dQlHOyUXD2idiRqUmP5ZtUo84g3awj200lo+z4Bb+lW57Ppmct5U8XAaDUDWTQ72xW1ZIFu9TbXR6igZ6haDOC20I5rDs5JOBnx59eAe1CRrIGTWDbeAOylriRnP11Ee2Q8WXqKya/wXhPQ0RIZHtxYmHG4fkUDE7FpNHyYNoNvsgI58N0X3sI6hNJCnjrYKwnB5zt0LnKvvY3GzeaM/yW4+tq2SPQ5OE23Ey0ykjXt7cgqtp0NsG+MG3IQ4If2UzHWNtmt+QncwttVczjxY4Q4oy+ZM8qM3AyMwyIzHirjRtvOo0HGPpQm1CVF9ontKsUydC/HLiwFjgnkqMLVcvuC0ErVEmI63U/t+GxYnENMy+AhV5d7N7VTeYHKI2oXvlzKe0mpw4c9IM1dd0zXZD+sKaksX5QE7WsVhAQS756Sf0PTCYkAYSA8czfKhuh5SABi32i6OWvogu3TQA//ZAqXhVJdsBAfbSFNNmbpRs+tDcQCkjK9OMEqhbfG2jAav5kE+Q1qfb/sd42EgWVmMn5MO81iU2brk85AAqPoFIzE58dnHkN8M77MyzA+JKdmdl1cN5qRoXPcApR9SbKmKo0Ud7Oe2byiDenO08Sxwyt62UIH9zMrXI391wNOIIBD3gMmFXqawk6VGc2hdvWo8dqh86vNy+wynLA6xl7Y455zVydesTqxU1Z7S92Ekl8KF/9/7UrDZwNJEgbNgfd3IZXzZdStddEGx3vVysuQ+KlhYn7e+dGiqCPk7f9SxJ4MI6H8p4KNKdynZTfFHttfjZnTtSiF9NvWDQGDrDht+89harHEszxCoLHEEuetemX44eG7njfd2Q3vnkTXqHItvalHbN/qDf3M57s6+sOq5Rv5Rq7ql/cHfnfafAF9EK/PVBEv4ROdswUhOFkIF0jAR3DcP+LX+1A0htJtQuwo/gDEl+4c/B3ungxn9ImC7hB/8Uiq1ZyUdEmlP4Edgj4quTvwR5WabcbaMj/AhaZAf2X8KKzhCgkvAzmKnhb/trr/dQd5Ih7M+gpxF9mX8JUUgDGP0E8Wyo95fgIToK/CHIgUh08v4lBGTi/Qf4w/ZL14Q/hQphfzrCj6HQJTpa/hScJ3uG3k8e9+EDFTQT/hRi5yLmK8uf9S0bjegS+1NoaGq5P55CDPszmJniHaj5i/6U6A38B50wqlccNoCkAAAAAElFTkSuQmCC\"","import React from \"react\";\r\nimport { StepHeader } from \"./addressVerification/StepHeader\";\r\nimport CreateUserForm from \"./NewOrder/CreateUserForm\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { useSelector } from \"react-redux\";\r\nimport fiopticslogo from \"./../images/fiopticslogo-white@2x.png\";\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n marginTop: \"30px\",\r\n\r\n \"& h5\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"5px\",\r\n textTransform: \"uppercase\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#00AFD8\",\r\n },\r\n },\r\n iconsWrapper: {\r\n marginTop: \"10px\",\r\n padding: \"10px\",\r\n\r\n \"& ul\": {\r\n listStyleType: \"none\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n display: \"inline-block\",\r\n width: \"35%\",\r\n verticalAlign: \"top\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n display: \"inline-block\",\r\n fontWeight: \"bold\",\r\n width: \"75%\",\r\n verticalAlign: \"middle\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#000\",\r\n },\r\n \"& li\": {\r\n marginBottom: \"20px\",\r\n },\r\n },\r\n});\r\nexport default function Confirmation() {\r\n const classes = useStyles();\r\n const order = useSelector((state) => state.order.order);\r\n const orderError = useSelector((state) => state.order.error);\r\n const campaign = useSelector((state) => state.campaign);\r\n const customThankYouURL = useSelector(state =>\r\n state.campaign &&\r\n state.campaign.campaign &&\r\n state.campaign.campaign.customThankYouURL!==null\r\n ? state.campaign.campaign.customThankYouURL\r\n : \"\"\r\n );\r\n React.useEffect(() => {\r\n window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n \r\n }, []);\r\n\r\n return (\r\n <>\r\n {campaign && customThankYouURL!= \"\" ? (\r\n <iframe src={campaign && campaign.campaign && campaign.campaign.customThankYouURL ? campaign.campaign.customThankYouURL : \"\"} width=\"100%\" height=\"500\" title=\"Confirmation\" /> \r\n\r\n ) : (\r\n <React.Fragment>\r\n <StepHeader\r\n title=\"Mahalo for choosing Hawaiian Telcom!\"\r\n text=\"We’re grateful to have the opportunity to serve you. As a Hawaiian Telcom customer, you’ll have access to a growing collection of exclusive benefits and innovative products. Take a minute to check out some of the great things in store. \"\r\n />\r\n {/* <iframe src={order && order.orderResponse.receiptUrl ? order.receiptUrl : \"\"} width=\"100%\" height=\"500\" title=\"Confirmation\" /> */}\r\n <div className={classes.wrapper}>\r\n <h5>MY ACCOUNT</h5>\r\n <p>\r\n Keep an eye out for a welcome email from us in the next few days! Once\r\n you get your account number, you can sign up for My Account. This\r\n service allows you to manage all your services in one place.\r\n </p>\r\n </div>\r\n\r\n <div className={classes.iconsWrapper + \" icons-wrapper\"}>\r\n <ul>\r\n <li>\r\n <span className=\"thank-you-icon img-1\"></span>\r\n <p>View all your services on one page</p>\r\n </li>\r\n <li>\r\n <span className=\"thank-you-icon img-2\"></span>\r\n <p>Check hawaiiantel.net email accounts</p>\r\n </li>\r\n <li>\r\n <span className=\"thank-you-icon img-3\"></span>\r\n <p>Submit support inquiries</p>\r\n </li>\r\n </ul>\r\n <ul>\r\n <li>\r\n <span className=\"thank-you-icon img-4\"></span>\r\n <p>Submit support inquiries</p>\r\n </li>\r\n <li>\r\n <span className=\"thank-you-icon img-5\"></span>\r\n <p>Set up auto pay</p>\r\n </li>\r\n <li>\r\n <span className=\"thank-you-icon img-6\"></span>\r\n <p>\r\n Download the mobile app from{\" \"}\r\n <a href=\"https://apps.apple.com/us/app/ht-my-account/id1262963153\">\r\n Apple\r\n </a>{\" \"}\r\n or{\" \"}\r\n <a href=\"https://play.google.com/store/apps/details?id=com.hawaiiantel.myht\">\r\n Google Play\r\n </a>{\" \"}\r\n Store\r\n </p>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div className=\"fioprics-banner\">\r\n <h2>\r\n Proudly connecting Hawaii with <img alt=\"\" src={fiopticslogo} />{\" \"}\r\n internet.\r\n </h2>\r\n <p>\r\n Our next-generation fiber network connects you to all the\r\n possibilities the world has to offer.\r\n </p>\r\n <a target=\"_blank\" href={process.env.REACT_APP_DNN + \"/Fioptics\"}>\r\n Learn More\r\n </a>\r\n </div>\r\n\r\n <div className={classes.wrapper}>\r\n <h5>Benefits when you refer a friend</h5>\r\n <p>\r\n Get $50 off your next bill when you refer a friend or family member\r\n and they sign up for Hawaiian Telcom services.\r\n </p>\r\n <a target=\"_blank\" href={process.env.REACT_APP_DNN + \"/referral\"}>\r\n Learn More\r\n </a>\r\n </div>\r\n\r\n <div className={classes.wrapper}>\r\n <h5>FIBER IS THE FUTURE</h5>\r\n <p>\r\n We call it “Fiber over the last mile,†and it means a faster and more\r\n reliable way to access the Internet. Find out what makes our Fiber\r\n awesome.\r\n </p>\r\n <a\r\n target=\"_blank\"\r\n href={process.env.REACT_APP_DNN + \"/Fiber-is-The-Future\"}\r\n >\r\n Learn More\r\n </a>\r\n </div>\r\n\r\n <div className={classes.wrapper}>\r\n <h5>CONNECTIONS The Hawaiian Telcom Blog</h5>\r\n <p>\r\n Stay informed with all the new and exciting things going on at\r\n Hawaiian Telcom. Get information on all sorts of information\r\n surrounding Internet, television, security, and much more.\r\n </p>\r\n <a target=\"_blank\" href={process.env.REACT_APP_HTBLOG + \"/connections\"}>\r\n Visit CONNECTIONS Blog\r\n </a>\r\n </div>\r\n\r\n <div className={classes.wrapper}>\r\n <h5>SERVICE TIPS</h5>\r\n <p>\r\n Easily search for information, browse through our quick links or\r\n download full PDFs of support materials.\r\n </p>\r\n <a\r\n target=\"_blank\"\r\n href={process.env.REACT_APP_DNN + \"/Residential/Support/Overview\"}\r\n >\r\n View Tips\r\n </a>\r\n </div>\r\n <div className={classes.wrapper}>\r\n <CreateUserForm></CreateUserForm>\r\n </div>\r\n </React.Fragment>\r\n )}\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { StepHeader } from \"./addressVerification/StepHeader\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nimport fiopticslogo from \"./../images/fiopticslogo-white@2x.png\";\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n marginTop: \"30px\",\r\n\r\n \"& h5\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"5px\",\r\n textTransform: \"uppercase\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#00AFD8\",\r\n },\r\n },\r\n iconsWrapper: {\r\n marginTop: \"10px\",\r\n padding: \"10px\",\r\n\r\n \"& ul\": {\r\n listStyleType: \"none\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n display: \"inline-block\",\r\n width: \"35%\",\r\n verticalAlign: \"top\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n display: \"inline-block\",\r\n fontWeight: \"bold\",\r\n width: \"75%\",\r\n verticalAlign: \"middle\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#000\",\r\n },\r\n \"& li\": {\r\n marginBottom: \"20px\",\r\n },\r\n },\r\n});\r\nexport default function ConfirmationInterestForm() {\r\n const classes = useStyles();\r\n\r\n React.useEffect(() => {\r\n \r\n }, []);\r\n\r\n return (\r\n <>\r\n <StepHeader\r\n title=\"Thank You\"\r\n text=\"Thank you for your interest in Hawaiian Telcom. A representative will follow up with you to assist in placing an order.\"\r\n />\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { StepHeader } from \"./addressVerification/StepHeader\";\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nimport fiopticslogo from \"./../images/fiopticslogo-white@2x.png\";\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n marginTop: \"30px\",\r\n\r\n \"& h5\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"5px\",\r\n textTransform: \"uppercase\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#00AFD8\",\r\n },\r\n },\r\n iconsWrapper: {\r\n marginTop: \"10px\",\r\n padding: \"10px\",\r\n\r\n \"& ul\": {\r\n listStyleType: \"none\",\r\n padding: \"0px\",\r\n margin: \"0px\",\r\n display: \"inline-block\",\r\n width: \"35%\",\r\n verticalAlign: \"top\",\r\n },\r\n \"& p\": {\r\n fontSize: \"14px\",\r\n display: \"inline-block\",\r\n fontWeight: \"bold\",\r\n width: \"75%\",\r\n verticalAlign: \"middle\",\r\n marginBottom: \"0px\",\r\n },\r\n \"& a\": {\r\n fontSize: \"14px\",\r\n color: \"#000\",\r\n },\r\n \"& li\": {\r\n marginBottom: \"20px\",\r\n },\r\n },\r\n});\r\nexport default function ConfirmationError() {\r\n const classes = useStyles();\r\n\r\n React.useEffect(() => {\r\n \r\n }, []);\r\n\r\n return (\r\n <>\r\n <StepHeader\r\n title=\"Error\"\r\n text=\"An error occurred while submitting your order. Please call our customer service hotline at 643-0812 to order.\"\r\n />\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { getStateData } from \"../redux/actions/stateHandlerActions\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Backdrop, CircularProgress, Skeleton, Stack, Typography } from \"@mui/material\";\r\n\r\nexport default function ConfirmationError() {\r\n\r\n const showSpinner = true;\r\n\r\n let history = useHistory();\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmationError useEffect all\", history);\r\n dispatch(getStateData(history));\r\n }, []);\r\n\r\n return (\r\n <> \r\n <Backdrop\r\n sx={{ backgroundColor: 'rgba(240, 240, 240,0.5)', color: '#fff', height: 'auto', width: '100%', display: 'flex', flexDirection: 'column', zIndex: (theme) => theme.zIndex.drawer + 1 }}\r\n open={showSpinner}\r\n >\r\n <CircularProgress style={{'color': '#012639', 'margin-bottom': '18px'}} thickness={8} size={64} />\r\n <Typography sx={{\r\n textAlign: \"center\",\r\n color: \"black\",\r\n fontWeight: 700,\r\n fontSize: \"1.5rem\",\r\n zIndex: (theme) => theme.zIndex.drawer + 1\r\n }}\r\n >\r\n Just a moment while we update your cart\r\n </Typography>\r\n </Backdrop>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport { PropaneSharp } from \"@mui/icons-material\";\r\nimport { AddressLookupDigiHeader } from \"./AddressLookupDigiHeader\";\r\nimport { StepHeadernew } from \"./StepHeadernew\";\r\n\r\nexport default function ConfirmAddressSingle(props) {\r\n\r\n const {classes, selectedAddress, onConfirm, loading, onStartOver, mode} = props\r\n const onConfirmClick = () => {\r\n onConfirm(selectedAddress); \r\n }\r\n\r\n return (\r\n <>\r\n \r\n {mode !== \"digicart\" && mode !== \"minicart\" && \r\n <StepHeader\r\n title=\"Confirm your address\"\r\n text=\"\"\r\n />\r\n }\r\n {(mode === \"digicart\" || mode === \"minicart\") && <AddressLookupDigiHeader view={\"confirm\"} />}\r\n \r\n <div id=\"confirmAddressContainer\">\r\n <FormControl className={classes.radio}>\r\n {mode !== \"digicart\" && mode !== \"minicart\" && \r\n <FormLabel className={classes.labelRadio}>\r\n Please confirm your address.\r\n </FormLabel>\r\n }\r\n <RadioGroup>\r\n <FormControlLabel\r\n value={selectedAddress ? selectedAddress.addressId : null}\r\n control={<Radio style={{ color: \"#012639\" }} />}\r\n label={selectedAddress ? selectedAddress.title : null}\r\n checked={true}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n \r\n </div>\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }, mt: 1 }}\r\n > \r\n <Grid item xs={4} md={4} lg={3}>\r\n <Box sx={{ position: \"relative\", maxWidth: \"max-content\" }}>\r\n <div id=\"btnConfirmAddress\">\r\n <Button\r\n id=\"SCConfirmAddress22\"\r\n variant=\"contained\"\r\n onClick={onConfirmClick}\r\n className={classes.htBtn}\r\n disabled={loading}\r\n >\r\n Confirm Address\r\n </Button>\r\n </div>\r\n {loading && (\r\n <CircularProgress\r\n size={24}\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: \"-12px\",\r\n marginLeft: \"-12px\"\r\n }}\r\n />\r\n )}\r\n </Box>\r\n </Grid>\r\n <Grid item xs={3} sx={{ pl: { xs: 1, md: 0 } }}>\r\n <div id=\"goBackButtonContainer\">\r\n <Button\r\n variant=\"contained\"\r\n onClick={onStartOver}\r\n className={classes.secondaryHtBtn}\r\n >\r\n Go Back\r\n </Button>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React, {useState} from \"react\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport { PropaneSharp } from \"@mui/icons-material\";\r\nimport { AddressLookupDigiHeader } from \"./AddressLookupDigiHeader\";\r\nimport { StepHeadernew } from \"./StepHeadernew\";\r\n\r\nexport default function ConfirmAddressMulti(props) {\r\n\r\n const {classes, addressesObj, onConfirm, loading, onStartOver, mode} = props;\r\n \r\n const [selectedAddressId, setSelectedAddressId] = useState(0);\r\n\r\n const addresses = addressesObj.addresses; \r\n\r\n const onConfirmClick = () => {\r\n const selectedAddressFilter = addresses.filter(i=> {\r\n return selectedAddressId === i.addressId;\r\n });\r\n var selectedAddress = selectedAddressFilter[0];\r\n if(selectedAddressId === 0 && addresses.length > 0){\r\n selectedAddress = addresses[0];\r\n }\r\n onConfirm(selectedAddress); \r\n }\r\n\r\n const onChange = (e) => {\r\n const addressId = parseInt(e.target.value); \r\n setSelectedAddressId(addressId); \r\n\r\n }\r\n return (\r\n <>\r\n\r\n {mode !== \"digicart\" && mode !== \"minicart\" && \r\n\r\n <StepHeader\r\n title=\"Confirm your address\"\r\n text=\"\"\r\n />\r\n }\r\n {(mode === \"digicart\" || mode === \"minicart\") && <AddressLookupDigiHeader view={\"confirm\"} />}\r\n \r\n <div id=\"confirmAddressContainer\">\r\n\r\n <FormControl className={classes.radio}>\r\n {mode !== \"digicart\" && mode !== \"minicart\" && \r\n <FormLabel className={classes.labelRadio}>\r\n Please confirm your address.\r\n </FormLabel>\r\n }\r\n \r\n <RadioGroup>\r\n {addresses && addresses.map((address, index) => (\r\n <FormControlLabel\r\n value={address ? address.addressId : null}\r\n control={<Radio style={{ color: \"#012639\" }} />}\r\n label={address ? address.title : null}\r\n onChange={onChange}\r\n checked={selectedAddressId === address.addressId ? true : !(selectedAddressId > 0) && index === 0 ? true : false}\r\n />\r\n ))} \r\n </RadioGroup>\r\n </FormControl>\r\n </div>\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }, mt: 1 }}\r\n >\r\n <Grid item xs={3}>\r\n <Box sx={{ position: \"relative\", maxWidth: \"max-content\" }}>\r\n <div id=\"btnConfirmAddress\">\r\n <Button\r\n id=\"SCConfirmAddress22\"\r\n variant=\"contained\"\r\n onClick={onConfirmClick}\r\n className={classes.htBtn}\r\n disabled={loading}\r\n > \r\n Confirm Address\r\n </Button>\r\n </div>\r\n {loading && (\r\n <CircularProgress\r\n size={24}\r\n style={{ color: \"#012639\" }}\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: \"-12px\",\r\n marginLeft: \"-12px\"\r\n }}\r\n />\r\n )}\r\n </Box>\r\n </Grid>\r\n <Grid item xs={3} sx={{ pl: { xs: 1, md: 0 } }}>\r\n <div id=\"goBackButtonContainer\">\r\n <Button\r\n variant=\"contained\"\r\n onClick={onStartOver}\r\n className={classes.secondaryHtBtn}\r\n >\r\n Go Back\r\n </Button>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Radio from \"@mui/material/Radio\";\r\nimport RadioGroup from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport FormLabel from \"@mui/material/FormLabel\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { StepHeader } from \"./StepHeader\";\r\nimport { PropaneSharp } from \"@mui/icons-material\";\r\nimport { AddressLookupDigiHeader } from \"./AddressLookupDigiHeader\";\r\n\r\nexport default function ConfirmAddressNoQual(props) {\r\n\r\n const {classes, selectedAddress, loading, onStartOver, mode} = props\r\n const onConfirmClick = () => {\r\n \r\n var destination = process.env.PUBLIC_URL + \"/orderwizard/products\";\r\n window.top.location.href = destination;\r\n\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n <AddressLookupDigiHeader view={\"noQual\"} />\r\n \r\n <div id=\"confirmAddressContainer\">\r\n <FormControl className={classes.radio}>\r\n \r\n <FormLabel className={classes.labelRadio}>\r\n Fioptics fiber internet is on its way to your home. In the meantime, view other offers. \r\n </FormLabel>\r\n\r\n </FormControl>\r\n \r\n </div>\r\n <Grid\r\n container\r\n spacing={2}\r\n sx={{ flexDirection: { xs: \"column\", md: \"row\" }, mt: 1 }}\r\n > \r\n <Grid item xs={3}>\r\n <Box sx={{ position: \"relative\", maxWidth: \"max-content\" }}>\r\n <div id=\"btnConfirmAddress\">\r\n <Button\r\n id=\"SCConfirmAddress22\"\r\n variant=\"contained\"\r\n onClick={onConfirmClick}\r\n className={classes.htBtn}\r\n >\r\n Search other products\r\n </Button>\r\n </div>\r\n {loading && (\r\n <CircularProgress\r\n size={24}\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: \"-12px\",\r\n marginLeft: \"-12px\"\r\n }}\r\n />\r\n )}\r\n </Box>\r\n </Grid>\r\n\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Stack from \"@mui/material/Stack\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogContentText from \"@mui/material/DialogContentText\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\nimport { setHasAccount } from \"../../redux/actions/userActions\";\r\n\r\nimport { makeStyles } from \"@mui/styles\";\r\n\r\nconst useStyles = makeStyles({\r\n dialogPaper: {\r\n bottom: \"10%\",\r\n backgroundColor: \"#012639\",\r\n verticalAlign: \"top\",\r\n \"@media (max-width: 740px)\": {\r\n bottom: \"0%\",\r\n },\r\n },\r\n iconSize: {\r\n fontSize: \"60px\",\r\n \"@media (max-width: 740px)\": {\r\n fontSize: \"30px\",\r\n },\r\n },\r\n muiDialogTitleSection: {\r\n color: \"white\", // Set text color to white\r\n \"@media (max-width: 740px)\": {\r\n lineHeight: 1,\r\n paddingLeft: \"4px\",\r\n paddingRight: \"20px\",\r\n },\r\n },\r\n muiDialogTitle: {\r\n fontSize: \"26px\",\r\n paddingLeft: \"4px\",\r\n color: \"white\", // Set text color to white\r\n \"@media (max-width: 740px)\": {\r\n fontSize: \"18px\",\r\n paddingLeft: \"8px\",\r\n lineHeight: 1,\r\n },\r\n },\r\n muiDialogText: {\r\n color: \"white\", // Set text color to white\r\n lineHeight: 1.2,\r\n marginLeft: \"65px\", // Set left margin\r\n marginRight: \"65px\", // Set right margin\r\n \"@media (max-width: 740px)\": {\r\n fontSize: \"14px\",\r\n marginLeft: \"5px\", // Set left margin\r\n marginRight: \"5px\", // Set right margin\r\n },\r\n },\r\n});\r\n\r\nconst theme = createTheme({\r\n components: {\r\n // Name of the component âš›ï¸\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n width: \"205px\",\r\n paddingLeft: \"6px\",\r\n paddingRight: \"6px\",\r\n textTransform: \"none\",\r\n color: \"#00AFD8\",\r\n fontWeight: \"bold\",\r\n backgroundColor: \"#FFFFFF\",\r\n \"&:hover\": {\r\n backgroundColor: \"#FFFFFF\",\r\n boxShadow: \"0px 0px 15px 0px #FFFFFF\",\r\n },\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default function ServicesExistPopup(props) {\r\n const { open, setOpen, onIsNewCustomer, onCheckAnotherAddress } = props;\r\n const dispatch = useDispatch();\r\n const selectedAddress = useSelector((state) => state.address.address);\r\n const selectedAddressTitle = selectedAddress && selectedAddress.title;\r\n const campaign = useSelector((state) => state.campaign.campaign);\r\n\r\n const campaignType = campaign && campaign.campaignType;\r\n const [disabled, setDisabled] = React.useState(false);\r\n\r\n const classes = useStyles();\r\n\r\n const handleClose = (_event, reason) => {\r\n // but don't even need to have the dialog to have a handle close handler - i.e.\r\n if (reason !== \"backdropClick\") {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const handleIsCurrentCustomer = () => {\r\n // but don't even need to have the dialog to have a handle close handler - i.e.\r\n //disable buttons\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" BUYPATH Already HT Customer\",\r\n });\r\n //disable buttons\r\n setOpen(false);\r\n onCheckAnotherAddress();\r\n // console.log(\r\n // \"handleIsCurrentCustomer - Send GA envent: BUYPATH Already HT Customer \"\r\n // );\r\n };\r\n const handleIsCurrentCustomerCall = () => {\r\n window.location.href = \"tel:+18087451823\";\r\n };\r\n const handleIsNewCustomer = () => {\r\n // but don't even need to have the dialog to have a handle close handler - i.e.\r\n setOpen(false);\r\n dispatch(setHasAccount(true));\r\n onIsNewCustomer();\r\n };\r\n const handleCheckAnotherAddress = () => {\r\n // but don't even need to have the dialog to have a handle close handler - i.e.\r\n setOpen(false);\r\n onCheckAnotherAddress();\r\n };\r\n\r\n return (\r\n <React.Fragment>\r\n <ThemeProvider theme={theme}>\r\n <Box>\r\n {/* <Button variant=\"outlined\" onClick={handleClickOpen}>\r\n Open responsive dialog\r\n </Button> */}\r\n {/* //<ThemeProvider theme={theme}> */}\r\n\r\n <Dialog\r\n classes={{ paper: classes.dialogPaper }}\r\n open={open}\r\n onClose={handleClose}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n >\r\n <DialogTitle className={classes.muiDialogTitleSection}>\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"flex-start\"\r\n alignItems={{\r\n xs: \"flex-start\",\r\n sm: \"center\",\r\n }}\r\n rowSpacing={0}\r\n columnSpacing={0}\r\n columns={{ xs: 12, sm: 12, md: 15, lg: 20 }}\r\n >\r\n <Grid item xs={1}>\r\n <ErrorOutlineIcon\r\n className={classes.iconSize}\r\n ></ErrorOutlineIcon>\r\n </Grid>\r\n <Grid item xs>\r\n <Typography className={classes.muiDialogTitle}>\r\n An account already exists at this address\r\n </Typography>\r\n </Grid>{\" \"}\r\n </Grid>\r\n </DialogTitle>\r\n <IconButton\r\n aria-label=\"close\"\r\n onClick={handleCheckAnotherAddress}\r\n sx={{\r\n color: \"#FFFFFF\",\r\n position: \"absolute\",\r\n right: 8,\r\n top: 8,\r\n \"@media (max-width: 740px)\": {\r\n right: 0,\r\n top: 0,\r\n },\r\n }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n <DialogContent>\r\n <DialogContentText className={classes.muiDialogText}>\r\n According to our records, there is already working service at\r\n this address. You can order in our cart, but a Hawaiian Telcom\r\n representative will contact you to complete your order.\r\n </DialogContentText>\r\n <br></br>\r\n <DialogContentText className={classes.muiDialogText}>\r\n Please select an option below to proceed. You can call us at\r\n 808-745-1823 or chat.\r\n </DialogContentText>\r\n <br></br>\r\n <Grid\r\n container\r\n justifyContent=\"center\"\r\n spacing={{ xs: 1, sm: 10, md: 30 }}\r\n columns={{ xs: 1, sm: 1 }}\r\n >\r\n <Grid item>\r\n <Button\r\n id=\"alreadycustomer\"\r\n variant=\"contained\"\r\n onClick={handleIsCurrentCustomerCall}\r\n style={{ display: \"block\" }}\r\n disabled={disabled}\r\n >\r\n <Typography\r\n id=\"alreadycustomer\"\r\n sx={{\r\n fontWeight: \"bold\",\r\n color: \"#012639\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n I'm a current customer\r\n </Typography>\r\n <Typography\r\n id=\"alreadycustomer\"\r\n sx={{\r\n fontWeight: \"bold\",\r\n color: \"#012639\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n at this address\r\n </Typography>\r\n </Button>\r\n </Grid>\r\n <Grid item>\r\n <Button\r\n variant=\"contained\"\r\n onClick={handleIsNewCustomer}\r\n style={{ display: \"block\" }}\r\n disabled={disabled}\r\n >\r\n <Typography\r\n sx={{\r\n fontWeight: \"bold\",\r\n color: \"#012639\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n I'm a new customer\r\n </Typography>\r\n <Typography\r\n sx={{\r\n fontWeight: \"bold\",\r\n color: \"#012639\",\r\n lineHeight: 1.2,\r\n }}\r\n >\r\n at this address\r\n </Typography>\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n <br></br>\r\n <Stack\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n spacing={0}\r\n >\r\n <Typography\r\n variant=\"button\"\r\n display=\"block\"\r\n sx={{ color: \"#FFFFFF\", lineHeight: 1 }}\r\n >\r\n {selectedAddressTitle}\r\n </Typography>\r\n\r\n <Button\r\n variant=\"text\"\r\n onClick={handleCheckAnotherAddress}\r\n disabled={disabled}\r\n sx={{\r\n alignContent: \"center\",\r\n color: \"#4294F7\",\r\n backgroundColor: \"#012639\",\r\n \"&:hover\": {\r\n backgroundColor: \"#012639\",\r\n boxShadow: \"0px 0px 15px 0px #012639\",\r\n textDecoration: \"underline\",\r\n },\r\n }}\r\n >\r\n Check another address\r\n </Button>\r\n </Stack>\r\n </DialogContent>\r\n </Dialog>\r\n </Box>\r\n </ThemeProvider>\r\n </React.Fragment>\r\n );\r\n}\r\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport \"../../css/main.css\";\r\nimport ConfirmAddressSingle from \"./ConfirmAddressSingle\";\r\nimport ConfirmAddressMulti from \"./ConfirmAddressMulti\";\r\nimport ConfirmAddressNoQual from \"./ConfirmAddressNoQual\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport {\r\n setStep,\r\n resetAll,\r\n saveHistory,\r\n} from \"../../redux/actions/stepActions\";\r\nimport {\r\n setAddress,\r\n doesAddressHaveServices,\r\n} from \"../../redux/actions/addressActions\";\r\nimport { setSession } from \"../../redux/actions/campaignActions\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n resetAddress,\r\n resetAddresses,\r\n} from \"../../redux/actions/addressActions\";\r\nimport ga4 from \"../../analytics/ga4/ga4\";\r\nimport {\r\n qualCheck,\r\n resetQualCheck,\r\n setProduct,\r\n resetDigiCart,\r\n} from \"../../redux/actions/productActions\";\r\n\r\nimport TagManager from \"react-gtm-module\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport ServicesExistPopup from \"./ServicesExistPopup\";\r\n\r\nconst useStyles = makeStyles({\r\n labelRadio: {\r\n fontSize: 14,\r\n fontWeight: \"bold\",\r\n color: \"#000000\",\r\n },\r\n radio: {\r\n marginTop: 20,\r\n },\r\n htBtn: {\r\n textTransform: \"none\",\r\n // padding: \"10px 50px\",\r\n borderRadius: 10,\r\n //backgroundColor: \"#00AFD8\",\r\n whiteSpace: \"nowrap\",\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(1, 38, 57, 1)\",\r\n boxShadow: \"0px 0px 15px 0px rgba(1, 38, 57, 1)\",\r\n },\r\n background:\r\n \"linear-gradient(90deg, rgba(1, 38, 57, 1) 0%, rgba(1, 38, 57, 1) 49%, rgb(1, 38, 57, 0.9) 100%)\",\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n },\r\n secondaryHtBtn: {\r\n textTransform: \"none\",\r\n // padding: \"9px 50px\",\r\n borderRadius: 10,\r\n color: \"rgba(1, 38, 57, 1)\",\r\n border: \"2px solid rgba(1, 38, 57, 1)\",\r\n backgroundColor: \"#FFF\",\r\n whiteSpace: \"nowrap\",\r\n \"&:hover\": {\r\n backgroundColor: \"#FFF\",\r\n boxShadow: \"0px 0px 15px 0px rgba(1, 38, 57, 1)\",\r\n },\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n },\r\n});\r\n\r\nexport default function ConfirmAddress(props) {\r\n const { mode } = props;\r\n const { productVersionId } = props.match.params;\r\n const classes = useStyles();\r\n let history = useHistory();\r\n const dispatch = useDispatch();\r\n const [loading, setLoading] = useState(true);\r\n const profileInfo = useSelector((state) => state.user.profileInfo);\r\n const email = profileInfo ? profileInfo.email : null;\r\n const selectedAddress = useSelector((state) => state.address.address);\r\n const addresses = useSelector((state) => state.address.addresses);\r\n const address = useSelector((state) => state.address.address);\r\n const captchaValue = useSelector((state) => state.address.captchaValue);\r\n const campaign = useSelector((state) => state.campaign);\r\n const loadingSession = useSelector((state) => state.campaign.loading);\r\n\r\n const qualCheckResult = useSelector((state) => state.products.qualCheck);\r\n const campaignSource = useSelector((state) =>\r\n state.campaign && state.campaign.campaignSource\r\n ? state.campaign.campaignSource\r\n : null\r\n );\r\n const utmparams = useSelector((state) =>\r\n state.campaign\r\n ? state.campaign.utmparams\r\n : {\r\n utm_medium: \"\",\r\n utm_source: \"\",\r\n utm_campaign: \"\",\r\n }\r\n );\r\n\r\n const servicesExist = useSelector((state) => state.address.servicesExist);\r\n const [open, setOpen] = React.useState(false);\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmAddress useEffect all\");\r\n \r\n //as this is first loaded component in route we store hispory for future switching header sreens\r\n dispatch(saveHistory(history));\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmAddress useEffect campaign\", campaign);\r\n if (campaign.campaign) {\r\n setLoading(false);\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n event: \"History\",\r\n pagePath: window.location.pathname,\r\n pageTitle: \"ConfirmAddress\",\r\n\r\n ecomCampaignType: campaign.campaign.campaignType,\r\n ecomCampaignName: campaign.campaign.campaignName,\r\n aaisAdressId: address && address.Id ? address.addressId : null,\r\n iisEcomSessionId: campaign.campaign.sessionId,\r\n },\r\n });\r\n }\r\n }, [campaign]);\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmAddress useEffect addresses\", addresses);\r\n if (!selectedAddress && !addresses) {\r\n redirectToStepOne();\r\n }\r\n }, [selectedAddress, addresses]);\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmAddress useEffect qualCheckResult\", qualCheckResult);\r\n if (qualCheckResult === true) {\r\n dispatch(resetQualCheck());\r\n dispatch(resetDigiCart());\r\n dispatch(setStep(1));\r\n let digiCartOffer = productVersionId;\r\n let destination =\r\n process.env.PUBLIC_URL +\r\n \"/digicart/\" +\r\n digiCartOffer +\r\n (campaignSource && campaignSource.length > 0\r\n ? \"/\" + campaignSource\r\n : \"\");\r\n window.top.location.href = destination;\r\n }\r\n if (qualCheckResult === false) {\r\n dispatch(setProduct(0));\r\n }\r\n }, [qualCheckResult]);\r\n\r\n useEffect(() => {\r\n console.log(\"ConfirmAddress useEffect servicesExist\", servicesExist);\r\n // Check the status of the first API call in Redux state\r\n if (servicesExist.hasService) {\r\n // If successful, trigger the second API call\r\n //show popup\r\n setOpen(true);\r\n } else if (servicesExist.hasService == false || servicesExist.hasError) {\r\n redirectToProducts();\r\n }\r\n }, [servicesExist]);\r\n\r\n const redirectToProducts = () => {\r\n dispatch(setProduct(0));\r\n history.push(\"/orderwizard/products\");\r\n };\r\n\r\n const redirectToStepOne = () => {\r\n if (mode === \"digicart\") {\r\n dispatch(setProduct(parseInt(productVersionId)));\r\n // console.log(\"resetAll triggered in ConfirmAddress redirectToStepOne()\");\r\n dispatch(resetAll());\r\n history.push(\r\n \"/digicart/addressVerification/Residential/\" + productVersionId\r\n );\r\n } else if (mode === \"minicart\") {\r\n dispatch(setProduct(parseInt(productVersionId)));\r\n // console.log(\"resetAll triggered in ConfirmAddress redirectToStepOne()\");\r\n dispatch(resetAll());\r\n history.push(\"/minicart/addressVerification/Residential/\");\r\n } else {\r\n // console.log(\r\n // \"resetAll triggered in ConfirmAddress redirectToStepOne() NOT DIGICART\"\r\n // );\r\n var destination = \"/addressVerification/\" + getCampaignType();\r\n dispatch(resetAll());\r\n history.push(destination);\r\n }\r\n };\r\n\r\n const onConfirm = async (selectedAddress) => {\r\n selectedAddress.mduSiteId = selectedAddress.sagCustomExt\r\n ?.split(\";\")\r\n .filter((sag) => sag.includes(\"MDU\"))[0]\r\n ?.trim();\r\n var campaignType = getCampaignType();\r\n\r\n ga4.event(\"c_button\", {\r\n c_action: campaignType + \" LeadPath Continue Address Confirmation\",\r\n });\r\n\r\n if (mode === \"digicart\") {\r\n dispatch(qualCheck(selectedAddress.addressId, productVersionId));\r\n } else {\r\n await dispatch(setAddress(selectedAddress));\r\n await dispatch(\r\n setSession(\r\n selectedAddress,\r\n email,\r\n campaignType,\r\n captchaValue,\r\n campaignSource,\r\n utmparams\r\n )\r\n );\r\n\r\n if (mode === \"minicart\") {\r\n await dispatch(setProduct(0));\r\n var destination = process.env.PUBLIC_URL + \"/orderwizard/products\";\r\n window.top.location.href = destination;\r\n } else {\r\n //call check for services\r\n dispatch(doesAddressHaveServices(selectedAddress.addressId));\r\n }\r\n }\r\n };\r\n\r\n const getCampaignType = () => {\r\n var campaignType =\r\n campaign && campaign.campaign && campaign.campaign.campaignType\r\n ? campaign.campaign.campaignType\r\n : \"\";\r\n return campaignType;\r\n };\r\n\r\n const onStartOver = async () => {\r\n if (mode != \"digicart\") {\r\n await dispatch(resetAddress());\r\n await dispatch(resetAddresses());\r\n }\r\n\r\n ga4.event(\"c_button\", {\r\n c_action:\r\n getCampaignType() + \" LeadPath No Qual re-enter your address link\",\r\n });\r\n if (mode == \"digicart\") {\r\n await dispatch(resetQualCheck());\r\n await dispatch(setProduct(parseInt(productVersionId)));\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <ServicesExistPopup\r\n open={open}\r\n setOpen={setOpen}\r\n onIsNewCustomer={redirectToProducts}\r\n onCheckAnotherAddress={redirectToStepOne}\r\n ></ServicesExistPopup>\r\n {qualCheckResult === false && (\r\n <ConfirmAddressNoQual\r\n classes={classes}\r\n selectedAddress={selectedAddress}\r\n loading={loading}\r\n onStartOver={onStartOver}\r\n mode={mode}\r\n />\r\n )}\r\n {qualCheckResult !== false && selectedAddress && !addresses && (\r\n <ConfirmAddressSingle\r\n classes={classes}\r\n selectedAddress={selectedAddress}\r\n onConfirm={onConfirm}\r\n loading={loading}\r\n onStartOver={onStartOver}\r\n mode={mode}\r\n />\r\n )}\r\n {qualCheckResult !== false && !selectedAddress && addresses && (\r\n <>\r\n <ConfirmAddressMulti\r\n classes={classes}\r\n addressesObj={addresses}\r\n onConfirm={onConfirm}\r\n loading={loading}\r\n onStartOver={onStartOver}\r\n mode={mode}\r\n />\r\n </>\r\n )}\r\n {loadingSession && (\r\n <CircularProgress style={{ color: \"#012639\" }} sx={{ ml: 30, mt: 2 }} />\r\n )}\r\n </>\r\n );\r\n}\r\n","export function getOffer(productVersionId) {\r\n return data.offers.find((x) => x.defaultProductVersionId == productVersionId);\r\n}\r\n\r\nexport function getMainProducts(productVersionId) {\r\n const offer = data.offers.find(\r\n (x) => x.defaultProductVersionId == productVersionId\r\n );\r\n if (!offer) {\r\n // console.log(\r\n // \"getMainProducts - Could not find offers for:\",\r\n // productVersionId\r\n // );\r\n return null;\r\n }\r\n const mainProducts = data.mainProducts.filter((p) =>\r\n offer.productVersions.find((id) => p.mainProductId == id)\r\n );\r\n if (!mainProducts) {\r\n // console.log(\"getMainProducts - Products not found for:\", productVersionId);\r\n return null;\r\n }\r\n return mainProducts;\r\n}\r\n\r\nexport function getMainProduct(mainProductVerionId) {\r\n const products = data.mainProducts.find(\r\n (p) => p.mainProductId == mainProductVerionId\r\n );\r\n\r\n return products;\r\n}\r\n\r\nexport function getSelectProductVersionId(mainProductVerionId, index) {\r\n if (!index && index != 0) {\r\n return 0;\r\n }\r\n const products = data.mainProducts.find(\r\n (p) => p.mainProductId == mainProductVerionId\r\n ).products;\r\n\r\n if (products.length < index + 1) {\r\n return 0;\r\n }\r\n\r\n const productVersionId = data.mainProducts.find(\r\n (p) => p.mainProductId == mainProductVerionId\r\n ).products[index].productVersionId;\r\n\r\n return productVersionId;\r\n}\r\n\r\nexport function getDefaultBundleIndex(productVersionId) {\r\n // find product\r\n const index = data.mainProducts\r\n .find((p) => p.mainProductId == productVersionId)\r\n .products.findIndex((p) => p.productVersionId == productVersionId);\r\n\r\n return index; //index; //index;\r\n}\r\n\r\nexport const data = {\r\n offers: [\r\n {\r\n defaultProductVersionId: 33,\r\n productVersions: [33, 32, 30],\r\n },\r\n {\r\n defaultProductVersionId: 32,\r\n productVersions: [33, 32, 30],\r\n },\r\n {\r\n defaultProductVersionId: 31,\r\n productVersions: [32, 31, 30],\r\n },\r\n {\r\n defaultProductVersionId: 30,\r\n productVersions: [32, 31, 30],\r\n },\r\n ],\r\n mainProducts: [\r\n {\r\n mainProductId: 33,\r\n mainProduct: {\r\n productHsiTitle: \"fiber internet\",\r\n productHsiSpeedValue: 300,\r\n productSpeedUnitLabel: \"Mbps\",\r\n uploadDownloadLabel: \"300 download/300 upload\",\r\n title: \"Fioptics 300\",\r\n description:\r\n \"- Internet up to 300 Mbps download & 300 Mbps upload\\n- Includes Google WiFi with mesh technology to cover your entire home\\n- 30-day satisfaction guarantee\",\r\n price: 39.99,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $39.99/mo for 1 year from service start date for customers subscribing to Fioptics 300 Internet, then price will increase by $10 for year 2 and year 3. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n },\r\n products: [\r\n {\r\n productVersionId: 33,\r\n priceSuffix: \"/month for 1 year\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $39.99/mo for 1 year from service start date for customers subscribing to Fioptics 300 Internet, then price will increase by $10 for year 2 and year 3. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n bundleInfo: {\r\n title: \"No TV Package\",\r\n description: \"\",\r\n price: 0,\r\n priceSuffix: \"Included\",\r\n priceSuffix2: \"\",\r\n termsAndConditions: \"\",\r\n },\r\n },\r\n {\r\n productVersionId: 60,\r\n priceSuffix: \"/month for 1 year\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $49.99/mo for 1 year from service start date for customers subscribing to Basic TV, HD, Fioptics 300 Internet. TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Basic TV\",\r\n description:\r\n \"- 55+ channels including HD\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 10.0,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n mainProductId: 32,\r\n mainProduct: {\r\n productHsiTitle: \"fiber internet\",\r\n productHsiSpeedValue: 500,\r\n productSpeedUnitLabel: \"Mbps\",\r\n uploadDownloadLabel: \"500 download/500 upload\",\r\n title: \"Fioptics 500\",\r\n description:\r\n \"- Internet up to 500 Mbps download & 500 Mbps upload\\n- Includes eero WiFi with mesh technology to cover your entire home.\\n- 30-day satisfaction guarantee\",\r\n price: 44.99,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 2 years\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $44.99/mo for 2 years from service start date for customers subscribing to Fioptics 500 Internet. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n },\r\n products: [\r\n {\r\n productVersionId: 32,\r\n priceSuffix: \"/month for 2 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $44.99/mo for 2 years from service start date for customers subscribing to Fioptics 500 Internet. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n bundleInfo: {\r\n title: \"No TV Package\",\r\n description: \"\",\r\n price: 0,\r\n priceSuffix: \"Included\",\r\n priceSuffix2: \"\",\r\n termsAndConditions: \"\",\r\n },\r\n },\r\n {\r\n productVersionId: 198,\r\n priceSuffix: \"/month for 2 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $69.99/mo for 1 year from service start date for customers subscribing to Basic TV, HD, Fioptics 500 Internet, then price will increase by $10 for year 2. TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Basic TV\",\r\n description:\r\n \"- 55+ channels including HD\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 25,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n {\r\n productVersionId: 28,\r\n priceSuffix: \"/month for 2 year\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $89.99/mo for 1 year from service start date for customers subscribing to Advantage TV, HD, Fioptics 500 Internet, then price will increase by $10 for year 2. TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Advantage TV\",\r\n description:\r\n \"- 285+ channels with HD Free\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 45,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n mainProductId: 31,\r\n mainProduct: {\r\n productHsiTitle: \"fiber internet\",\r\n productHsiSpeedValue: 750,\r\n productSpeedUnitLabel: \"Mbps\",\r\n uploadDownloadLabel: \"750 download/300 upload\",\r\n title: \"Fioptics 750\",\r\n description:\r\n \"- Internet up to 750 Mbps download & 300 Mbps upload\\n- Includes eero WiFi with mesh technology to cover your entire home\\n- 30-day satisfaction guarantee\",\r\n price: 54.99,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $54.99/mo for 3 years from service start date for customers subscribing to Fioptics 750 Internet. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard gateway fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n products: [\r\n {\r\n productVersionId: 31,\r\n priceSuffix: \"/month for 2 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $54.99/mo for 3 years from service start date for customers subscribing to Fioptics 750 Internet. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard gateway fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"No TV Package\",\r\n description: \"\",\r\n price: 0,\r\n priceSuffix: \"Included\",\r\n priceSuffix2: \"\",\r\n termsAndConditions: \"\",\r\n },\r\n },\r\n {\r\n productVersionId: 199,\r\n priceSuffix: \"/month for 2 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $84.99/mo for 2 years from service start date for customers subscribing to Basic TV, HD, Fioptics 750 Internet. TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Basic TV\",\r\n description:\r\n \"- 55+ channels including HD\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 30,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n {\r\n productVersionId: 201,\r\n priceSuffix: \"/month for 2 year\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $104.99/mo for 2 years from service start date for customers subscribing to Advantage TV, HD, Fioptics 750 Internet. TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Advantage TV\",\r\n description:\r\n \"- 285+ channels with HD Free\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 50,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n mainProductId: 30,\r\n mainProduct: {\r\n productHsiTitle: \"fiber internet\",\r\n productHsiSpeedValue: 1,\r\n productSpeedUnitLabel: \"Gig\",\r\n uploadDownloadLabel: \"940 download/500 upload\",\r\n title: \"Fioptics 1 Gig\",\r\n description:\r\n \"- Internet up to 940 Mbps download & 500 Mbps upload\\n- Includes eero WiFi with mesh technology to cover your entire home.\\n- 30-day satisfaction guarantee\",\r\n price: 74.99,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 3 years\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $74.99/mo for 3 years from service start date for customers subscribing to Fioptics 1 Gig Internet (with speeds up to 940 Mbps). Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n },\r\n products: [\r\n {\r\n productVersionId: 30,\r\n priceSuffix: \"/month for 3 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $74.99/mo for 3 years from service start date for customers subscribing to Fioptics 1 Gig Internet (with speeds up to 940 Mbps). Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Any change to account or service plan will cancel promotional price. Service/speeds not available in all areas; subject to final confirmation of service. Advertised price does not include one-time Activation Fee or monthly standard Gateway Fee (currently $9.99). Taxes, surcharges and other fees apply. Rates, rate plans, fees and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom.\",\r\n bundleInfo: {\r\n title: \"No TV Package\",\r\n description: \"\",\r\n price: 0,\r\n priceSuffix: \"Included\",\r\n priceSuffix2: \"\",\r\n termsAndConditions: \"\",\r\n },\r\n },\r\n {\r\n productVersionId: 200,\r\n priceSuffix: \"/month for 3 years\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $94.99/mo for 2 years from service start date for customers subscribing to Basic TV, HD, Fioptics 1 Gig Internet (with speeds up to 940 Mbps). TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Basic TV\",\r\n description:\r\n \"- 55+ channels including HD\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 20,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n {\r\n productVersionId: 202,\r\n priceSuffix: \"/month for 2 year\",\r\n promoline1: \"Experience the difference of\",\r\n promoline2: \"Fioptics,\",\r\n promoline3: \"now with FREE activation when you order online.\",\r\n termsAndConditions:\r\n \"Limited time offer for new residential customers. $114.99/mo for 2 years from service start date for customers subscribing to Advantage TV, HD, Fioptics 1 Gig Internet (with speeds up to 940 Mbps). TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. Any change to service will cancel the promotional price. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service/speeds not available in all areas or on all lines; subject to final confirmation of service. Faster speeds may be available for additional cost. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n bundleInfo: {\r\n title: \"Advantage TV\",\r\n description:\r\n \"- 285+ channels with HD Free\\n- Requires 1 minimum Set Top Box\\n- 30-day satisfaction guarantee\",\r\n price: 40,\r\n priceSuffix: \"/mo\",\r\n priceSuffix2: \"For 1 year\",\r\n termsAndConditions:\r\n \"TV service requires a Hawaiian Telcom standard gateway and Set-Top-Box for each TV, subject to monthly charges. Standard Rates apply after promotional period. 30-day satisfaction guarantee entitles customer to cancel service within 30 days of installation and receive a credit in the amount of the first month’s charges excluding any non-recurring charges. Service not available in all areas or on all lines; subject to final confirmation of service. Service activation of Hawaiian Telcom TV service is subject to credit approval. Advertised price does not include one-time Activation Fee. Taxes, surcharges and other fees apply. Rates, rate plans and offers subject to change. Other terms, conditions and restrictions apply. Visit http://hawaiiantel.com/terms for details. © 2023 Hawaiian Telcom\",\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n","import React from \"react\";\r\nimport \"../../css/digiCart.css\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\nexport default function DigiCartProductBanner() {\r\n \r\n return (\r\n <>\r\n <div className=\"banner-details\">\r\n <Box>\r\n <p>\r\n Experience the difference of Fioptics, {\" \"}\r\n <b>now with FREE activation when you order online.</b>\r\n </p>\r\n </Box>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport \"../../css/digiCart.css\";\r\n\r\nconst useStyles = makeStyles({\r\n box: {\r\n paddingTop: 17,\r\n paddingLeft: 56\r\n },\r\n productTitle: {\r\n fontSize: 24,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 20\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 14\r\n }\r\n },\r\n productHsiSpeedValue: {\r\n fontSize: 92,\r\n fontWeight: \"400\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 64\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 36\r\n }\r\n },\r\n productSpeedUnitLabel: {\r\n fontSize: 32,\r\n fontWeight: \"400\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n paddingTop: 14,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 24\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 14\r\n }\r\n },\r\n uploadDownloadLabel: {\r\n fontSize: 16,\r\n fontWeight: \"700\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 12\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 8\r\n }\r\n }\r\n});\r\n\r\nexport default function DigiCartProductDetails({\r\n productTitle,\r\n productHsiSpeedValue,\r\n productSpeedUnitLabel,\r\n uploadDownloadLabel\r\n}) {\r\n const classes = useStyles();\r\n return (\r\n <Box\r\n sx={{\r\n paddingTop: \"17px\",\r\n paddingLeft: \"56px\",\r\n \"@media (max-width: 1300px)\": {\r\n paddingTop: \"25px\",\r\n paddingLeft: \"25px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n paddingTop: \"20px\",\r\n paddingLeft: \"12px\"\r\n }\r\n }}\r\n >\r\n <Typography className={classes.productTitle}>{productTitle}</Typography>\r\n <Typography className={classes.productHsiSpeedValue}>\r\n {productHsiSpeedValue}\r\n </Typography>\r\n <Typography className={classes.productSpeedUnitLabel}>\r\n {productSpeedUnitLabel}\r\n </Typography>\r\n <Typography className={classes.uploadDownloadLabel}>\r\n {uploadDownloadLabel}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\nconst useStyles = makeStyles({\r\n box: {\r\n paddingTop: \"17px\",\r\n paddingLeft: \"40px\",\r\n \"@media (max-width: 1300px)\": {\r\n paddingTop: \"25px\",\r\n paddingLeft: \"30px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n paddingTop: \"20px\",\r\n paddingLeft: \"16px\"\r\n }\r\n },\r\n priceIntoLabel: {\r\n fontSize: 24,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 20\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 14\r\n }\r\n },\r\n priceDollarSign: {\r\n fontSize: 32,\r\n fontWeight: \"400\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n paddingTop: 14,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 24\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 14\r\n }\r\n },\r\n priceDollar: {\r\n fontSize: 92,\r\n fontWeight: \"400\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 64\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 36\r\n }\r\n },\r\n priceCent: {\r\n fontSize: 32,\r\n fontWeight: \"400\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n display: \"inline-block\",\r\n verticalAlign: \"top\",\r\n paddingTop: 14,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 20\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 14\r\n }\r\n },\r\n\r\n priceSuffix: {\r\n fontSize: 16,\r\n fontWeight: \"700\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n color: \"#101014\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 12\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 8\r\n }\r\n }\r\n});\r\n\r\nexport default function DigiCartProductPrice({\r\n mainProductPrice,\r\n bundleAddonPrice,\r\n priceSuffix\r\n}) {\r\n const classes = useStyles();\r\n\r\n //get price total\r\n const totalPrice = mainProductPrice + bundleAddonPrice;\r\n\r\n const price = totalPrice.toFixed(2).toString().split(\".\");\r\n\r\n const priceDollar = price[0].replace(\"$\", \"\");\r\n const priceCents = price[1];\r\n\r\n return (\r\n <Box className={classes.box}>\r\n <Typography className={classes.priceIntoLabel}>starting at...</Typography>\r\n <Typography className={classes.priceDollarSign}>$</Typography>\r\n <Typography className={classes.priceDollar}>{priceDollar}</Typography>\r\n <Typography className={classes.priceCent}>{priceCents}</Typography>\r\n <Typography className={classes.priceSuffix}>{priceSuffix}</Typography>\r\n </Box>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Box from \"@mui/material/Box\";\r\n\r\nconst useStyles = makeStyles({\r\n box: {\r\n paddingTop: \"20px\",\r\n paddingLeft: \"40px\",\r\n \"@media (max-width: 1300px)\": {\r\n paddingTop: \"24px\",\r\n paddingLeft: \"20px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n paddingLeft: \"16px\"\r\n }\r\n },\r\n promoline1: {\r\n fontSize: 20,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n color: \"#58A618\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 16\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 10\r\n }\r\n },\r\n promoline2: {\r\n fontSize: 32,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n paddingTop: 6,\r\n color: \"#58A618\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 28\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 18\r\n }\r\n },\r\n promoline3: {\r\n fontSize: 20,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n lineHeight: 1,\r\n paddingTop: 6,\r\n color: \"#58A618\",\r\n \"@media (max-width: 1300px)\": {\r\n fontSize: 16\r\n },\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 10\r\n }\r\n }\r\n});\r\n\r\nexport default function DigiCartProductPromo({\r\n promoline1,\r\n promoline2,\r\n promoline3\r\n}) {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Box className={classes.box}>\r\n <Typography className={classes.promoline1}>\r\n {promoline1 && promoline1}\r\n </Typography>\r\n <Typography className={classes.promoline2}>\r\n {promoline2 && promoline2}\r\n </Typography>\r\n <Typography className={classes.promoline3}>\r\n {promoline3 && promoline3}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nimport Tooltip, { tooltipClasses } from \"@mui/material/Tooltip\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport * as DigiCartData from \"../../data/digiCartData\";\r\nimport \"../../css/digiCart.css\";\r\nimport DigiCartProductBanner from \"./DigiCartProductBanner\";\r\nimport DigiCartProductDetails from \"./DigiCartProductDetails\";\r\nimport DigiCartProductPrice from \"./DigiCartProductPrice\";\r\nimport DigiCartProductPromo from \"./DigiCartProductPromo\";\r\nimport { getProducts, setProduct } from \"../../redux/actions/productActions\";\r\nimport { setSession } from \"../../redux/actions/campaignActions\";\r\n\r\n//8E258D\r\nconst useStyles = makeStyles({\r\n digiCartProductBox: {\r\n height: \"176px\",\r\n width: \"1288px\",\r\n background: \"#f9f4f9\",\r\n \"@media (max-width: 1300px)\": {\r\n width: \"664px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n width: \"664px\"\r\n }\r\n },\r\n card: {\r\n minWidth: 275,\r\n maxWidth: \"1288px\",\r\n height: 241,\r\n marginTop: \"50px\",\r\n marginBottom: \"10px\",\r\n //border: \"1px solid #A1A1A1\",\r\n borderRadius: 0,\r\n backgroundColor: \"#F9F4F9\",\r\n position: \"relative\"\r\n },\r\n cardContent: {\r\n backgroundColor: \"#F9F4F9\",\r\n marginTop: \"10px\",\r\n borderRadius: 0\r\n },\r\n\r\n cardSelected: {\r\n minWidth: 275,\r\n borderRadius: 4,\r\n marginBottom: \"25px\",\r\n border: \"3px solid rgba(1, 38, 57, 1)\",\r\n position: \"relative\"\r\n },\r\n title: {\r\n fontSize: 26,\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#002A42\"\r\n },\r\n buttonBox: {\r\n paddingTop: \"40px\",\r\n paddingLeft: \"40px\",\r\n \"@media (max-width: 1300px)\": {\r\n paddingTop: \"50px\",\r\n paddingLeft: \"0px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n paddingTop: \"26px\",\r\n paddingLeft: \"0px\"\r\n }\r\n },\r\n selectBtn: {\r\n textTransform: \"none\",\r\n fontSize: 18,\r\n fontWeight: 600,\r\n padding: \"5px 50px\",\r\n marginBottom: \"12px\",\r\n width: \"235px\",\r\n height: \"48px\",\r\n borderRadius: 25,\r\n backgroundColor: \"#8E258D\",\r\n whiteSpace: \"nowrap\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: \"#8E258D\",\r\n boxShadow: \"0px 0px 10px 0px #8d248b\"\r\n }\r\n },\r\n description: {\r\n fontSize: \"20px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginBottom: \"10px\"\r\n },\r\n termsTitle: {\r\n fontSize: \"20px\",\r\n fontWeight: \"600\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n textDecoration: \"none\",\r\n marginBottom: \"16px\"\r\n },\r\n terms: {\r\n fontSize: \"14px\",\r\n fontWeight: \"400\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n\r\n color: \"#101014\",\r\n textDecoration: \"none\"\r\n },\r\n termsLink: {\r\n fontSize: \"14px\",\r\n fontWeight: \"600\",\r\n fontFamily: \"Arial,Helvetica,Roboto,sans-serif\",\r\n color: \"#515151\",\r\n textDecoration: \"underline\",\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 12\r\n }\r\n },\r\n section1: {\r\n textAlign: \"center\"\r\n },\r\n section2: {},\r\n section3: {\r\n textAlign: \"center\",\r\n minWidth: \"161px\",\r\n margin: \"auto\"\r\n }\r\n});\r\n\r\nconst HtmlTooltip = styled(({ className, ...props }) => (\r\n <Tooltip\r\n {...props}\r\n classes={{ popper: className }}\r\n placement=\"bottom-start\"\r\n />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: \"#FFFFFF\",\r\n color: \"#101014\",\r\n maxWidth: 560,\r\n padding: \"30px 40px 40px 40px\",\r\n border: \"1px solid #8E258D\",\r\n borderRadius: 0\r\n }\r\n}));\r\n\r\nexport default function DigiCartProduct({\r\n selectedMainVersionProductId,\r\n selectedBundleIndex,\r\n onSubmit\r\n}) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const mainProduct = DigiCartData.getMainProduct(selectedMainVersionProductId);\r\n const products = mainProduct.products;\r\n\r\n return (\r\n <Grid\r\n container\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item>\r\n <DigiCartProductBanner />\r\n </Grid>\r\n <Grid item>\r\n <Box\r\n sx={{\r\n height: \"176px\",\r\n width: \"1288px\",\r\n background: \"#f9f4f9\",\r\n \"@media (max-width: 1300px)\": {\r\n width: \"664px\",\r\n height: \"288px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n width: \"430px\",\r\n height: \"208px\"\r\n }\r\n }}\r\n >\r\n <Grid\r\n container\r\n justifyContent=\"space-evenly\"\r\n alignItems=\"center\"\r\n spacing={0}\r\n columns={{ md: 18, lg: 24 }}\r\n >\r\n <Grid item xs={6}>\r\n <DigiCartProductDetails\r\n productTitle={mainProduct.mainProduct.productHsiTitle}\r\n productHsiSpeedValue={\r\n mainProduct.mainProduct.productHsiSpeedValue\r\n }\r\n productSpeedUnitLabel={\r\n mainProduct.mainProduct.productSpeedUnitLabel\r\n }\r\n uploadDownloadLabel={\r\n mainProduct.mainProduct.uploadDownloadLabel\r\n }\r\n />\r\n </Grid>\r\n <Grid item xs={5}>\r\n {products[selectedBundleIndex] && (\r\n <DigiCartProductPrice\r\n mainProductPrice={mainProduct.mainProduct.price}\r\n bundleAddonPrice={\r\n products[selectedBundleIndex].bundleInfo.price\r\n }\r\n priceSuffix={products[selectedBundleIndex].priceSuffix}\r\n ></DigiCartProductPrice>\r\n )}\r\n </Grid>\r\n <Grid item xs={7}>\r\n {products[selectedBundleIndex] && (\r\n <DigiCartProductPromo\r\n promoline1={products[selectedBundleIndex].promoline1}\r\n promoline2={products[selectedBundleIndex].promoline2}\r\n promoline3={products[selectedBundleIndex].promoline3}\r\n ></DigiCartProductPromo>\r\n )}\r\n </Grid>\r\n <Grid item xs={6}>\r\n <Box className={classes.buttonBox}>\r\n <Grid\r\n container\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n {\" \"}\r\n <Grid item xs={3}>\r\n <Button\r\n variant=\"contained\"\r\n className={classes.selectBtn}\r\n onClick={onSubmit}\r\n >\r\n Claim your offer\r\n </Button>\r\n </Grid>{\" \"}\r\n <Grid item xs={3}>\r\n <HtmlTooltip\r\n title={\r\n <div>\r\n <div className={classes.termsTitle}>\r\n Terms & Conditions\r\n </div>\r\n <div className={classes.terms}>\r\n {products[selectedBundleIndex] &&\r\n mainProduct.products[selectedBundleIndex]\r\n .termsAndConditions}\r\n </div>\r\n </div>\r\n }\r\n >\r\n <Link\r\n href=\"#\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n }}\r\n className={classes.termsLink}\r\n >\r\n Terms & Conditions\r\n </Link>\r\n </HtmlTooltip>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nconst useStyles = makeStyles({\r\n price2: {\r\n textAlign: \"left\",\r\n position: \"relative\",\r\n width: \"115px\",\r\n margin: \"24px auto 0 auto\"\r\n },\r\n price3: {\r\n textAlign: \"left\",\r\n position: \"relative\",\r\n width: \"165px\",\r\n margin: \"0 auto\"\r\n },\r\n priceValue: {\r\n // color: \"#101014\",\r\n fontSize: \"18px\",\r\n display: \"inline-block\",\r\n lineHeight: \"18px\"\r\n },\r\n priceSuffix: {\r\n fontSize: \"10px\",\r\n // color: \"#101014\",\r\n whiteSpace: \"pre-line\",\r\n marginBottom: \"10px\"\r\n }\r\n});\r\n\r\nexport default function DigiCartItemPrice(props) {\r\n const { price, priceSuffix1, priceSuffix2 } = props;\r\n const classes = useStyles(props);\r\n\r\n // if (!price) return;\r\n const price2 = parseFloat(price).toFixed(2);\r\n let priceValue = `${priceSuffix1}`;\r\n if (price !== 0) {\r\n priceValue = `$${price2}${priceSuffix1}`;\r\n }\r\n\r\n return (\r\n <div>\r\n <div className={classes.price2}>\r\n <Typography className={classes.priceValue}>{priceValue}</Typography>\r\n <Typography className={classes.priceSuffix}>{priceSuffix2}</Typography>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","var _circle, _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCheckBoxChecked(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 21 21\",\n width: \"21px\",\n height: \"21px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.5,\n cy: 10.5,\n r: 10.5,\n fill: \"#8E258D\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 9.057 13.862 L 6.132 10.811 C 5.956 10.628 5.956 10.331 6.132 10.148 L 6.768 9.484 C 6.944 9.301 7.229 9.301 7.405 9.484 L 9.375 11.539 L 13.595 7.137 C 13.771 6.954 14.056 6.954 14.232 7.137 L 14.868 7.801 C 15.044 7.984 15.044 8.281 14.868 8.465 L 9.693 13.862 C 9.517 14.046 9.233 14.046 9.057 13.862 Z\",\n fill: \"white\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckBoxChecked);\nexport default __webpack_public_path__ + \"static/media/check-box-checked.68d1125f.svg\";\nexport { ForwardRef as ReactComponent };","var _circle, _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCheckBoxUnchecked(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 21 21\",\n width: \"21px\",\n height: \"21px\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.345,\n cy: 10.387,\n r: 10,\n fill: \"#EBEBEB\",\n stroke: \"#515151\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M 8.902 13.75 L 5.977 10.699 C 5.801 10.516 5.801 10.218 5.977 10.035 L 6.613 9.371 C 6.789 9.188 7.074 9.188 7.249 9.371 L 9.22 11.426 L 13.44 7.025 C 13.616 6.841 13.901 6.841 14.077 7.025 L 14.713 7.688 C 14.889 7.872 14.889 8.169 14.713 8.352 L 9.538 13.75 C 9.362 13.933 9.077 13.933 8.902 13.75 Z\",\n fill: \"#515151\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheckBoxUnchecked);\nexport default __webpack_public_path__ + \"static/media/check-box-unchecked.cb0a8acc.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useEffect } from \"react\";\r\nimport DigiCartItemPrice from \"./DigiCartItemPrice\";\r\nimport Tooltip, { tooltipClasses } from \"@mui/material/Tooltip\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { ReactComponent as CheckedIcon } from \"../../images/check-box-checked.svg\";\r\nimport { ReactComponent as UncheckedIcon } from \"../../images/check-box-unchecked.svg\";\r\n\r\nconst useStyles = makeStyles({\r\n checkBoxSection: {\r\n fontSize: \"14px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginLeft: \"16px\",\r\n marginTop: \"24px\"\r\n },\r\n title: {\r\n fontSize: \"14px\",\r\n fontWeight: \"600\",\r\n // color: \"#101014\",\r\n whiteSpace: \"pre-line\",\r\n marginTop: \"22px\",\r\n marginLeft: \"8px\"\r\n },\r\n descriptionSection: {\r\n height: \"110px\",\r\n marginLeft: \"8px\",\r\n marginTop: \"4px\"\r\n },\r\n description: {\r\n fontSize: \"12px\",\r\n fontWeight: \"400\",\r\n // color: \"#101014\",\r\n whiteSpace: \"pre-line\"\r\n },\r\n\r\n selectedItemBox: {\r\n height: 198,\r\n width: 410,\r\n color: \"#101014\",\r\n border: \"2px solid #8E258D\",\r\n background: \"#F9F4F9\",\r\n margin: \"4px\"\r\n },\r\n unselectedItemBox: {\r\n height: 198,\r\n width: 410,\r\n background: \"#FFFFFF\",\r\n color: \"#616161\",\r\n border: \"1px solid #CCCCCC\",\r\n margin: \"4px\",\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n }\r\n },\r\n termsLink: {\r\n fontSize: \"14px\",\r\n fontWeight: \"500\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n marginLeft: \"8px\"\r\n },\r\n termsTitle: {\r\n fontSize: \"16px\",\r\n fontWeight: \"600\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n textDecoration: \"none\",\r\n marginBottom: \"16px\"\r\n },\r\n terms: {\r\n fontSize: \"10px\",\r\n fontWeight: \"400\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#002A42\",\r\n textDecoration: \"none\",\r\n borderRadius: 0\r\n }\r\n});\r\n\r\nconst HtmlTooltip = styled(({ className, ...props }) => (\r\n <Tooltip {...props} classes={{ popper: className }} placement=\"bottom\" />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: \"#f5f5f9\",\r\n // color: \"#101014\",\r\n fontFamily: \"Arial, Helvetica, Roboto, sans-serif\",\r\n maxWidth: 410,\r\n padding: \"22px\",\r\n border: \"1px solid #8E258D\",\r\n borderRadius: 0\r\n }\r\n}));\r\n\r\nexport default function DigiCartMainProduct(props) {\r\n const { product, onSelectMainProduct, selected } = props;\r\n\r\n const classes = useStyles();\r\n\r\n var showTerms =\r\n product.mainProduct.termsAndConditions.length > 0 ? true : false;\r\n\r\n return (\r\n <>\r\n <Box\r\n className={\r\n selected ? classes.selectedItemBox : classes.unselectedItemBox\r\n }\r\n onClick={() => {\r\n onSelectMainProduct(product.mainProductId);\r\n }}\r\n >\r\n <Grid container spacing={0} columns={41}>\r\n <Grid item xs={4}>\r\n <Link\r\n className={classes.checkBoxSection}\r\n component=\"button\"\r\n onClick={() => {\r\n onSelectMainProduct(product.mainProductId);\r\n }}\r\n >\r\n {selected ? (\r\n <CheckedIcon></CheckedIcon>\r\n ) : (\r\n <UncheckedIcon></UncheckedIcon>\r\n )}\r\n </Link>\r\n </Grid>\r\n <Grid item xs={26}>\r\n <Typography className={classes.title}>\r\n {product.mainProduct.title}\r\n </Typography>\r\n <Box className={classes.descriptionSection}>\r\n <Typography className={classes.description}>\r\n {product.mainProduct.description}\r\n </Typography>\r\n </Box>\r\n {showTerms && (\r\n <HtmlTooltip\r\n title={\r\n <div>\r\n <div className={classes.termsTitle}>\r\n Terms & Conditions\r\n </div>\r\n <div className={classes.terms}>\r\n {product.mainProduct.termsAndConditions}\r\n </div>\r\n </div>\r\n }\r\n >\r\n <Link\r\n href=\"#\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n }}\r\n className={classes.terms}\r\n >\r\n <Typography className={classes.termsLink}>\r\n + Terms & Conditions\r\n </Typography>\r\n </Link>\r\n </HtmlTooltip>\r\n )}\r\n </Grid>\r\n <Grid item xs={11}>\r\n <DigiCartItemPrice\r\n price={product.mainProduct.price}\r\n priceSuffix1={product.mainProduct.priceSuffix}\r\n priceSuffix2={product.mainProduct.priceSuffix2}\r\n ></DigiCartItemPrice>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </>\r\n );\r\n}\r\n","var _path, _path2;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPlusCircle(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 29,\n height: 29,\n viewBox: \"0 0 29 29\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.1216 13.416H20.8196V15.657H16.1216V20.355H13.8806V15.657H9.20955V13.416H13.8806V8.745H16.1216V13.416Z\",\n fill: \"#8E258D\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28 14.5C28 21.9558 21.9558 28 14.5 28C7.04416 28 1 21.9558 1 14.5C1 7.04416 7.04416 1 14.5 1C21.9558 1 28 7.04416 28 14.5Z\",\n stroke: \"#8E258D\",\n strokeWidth: 2\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlusCircle);\nexport default __webpack_public_path__ + \"static/media/plus-circle.eae1d0c2.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useEffect } from \"react\";\r\nimport DigiCartItemPrice from \"./DigiCartItemPrice\";\r\nimport Tooltip, { tooltipClasses } from \"@mui/material/Tooltip\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Link from \"@mui/material/Link\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { ReactComponent as CheckedIcon } from \"../../images/check-box-checked.svg\";\r\nimport { ReactComponent as UncheckedIcon } from \"../../images/check-box-unchecked.svg\";\r\n\r\nconst useStyles = makeStyles({\r\n checkBoxSection: {\r\n fontSize: \"14px\",\r\n color: \"#434343\",\r\n whiteSpace: \"pre-line\",\r\n marginLeft: \"16px\",\r\n marginTop: \"24px\"\r\n },\r\n title: {\r\n fontSize: \"14px\",\r\n fontWeight: \"600\",\r\n fontFamily: \"Arial,Helvetica,Roboto,sans-serif\",\r\n // color: \"#101014\",\r\n whiteSpace: \"pre-line\",\r\n marginTop: \"22px\",\r\n marginLeft: \"8px\"\r\n },\r\n descriptionSection: {\r\n height: \"110px\",\r\n marginLeft: \"8px\",\r\n marginTop: \"4px\"\r\n },\r\n description: {\r\n fontSize: \"12px\",\r\n fontWeight: \"400\",\r\n // color: \"#101014\",\r\n whiteSpace: \"pre-line\"\r\n },\r\n\r\n selectedItemBox: {\r\n height: 198,\r\n width: 410,\r\n color: \"#101014\",\r\n border: \"2px solid #8E258D\",\r\n background: \"#F9F4F9\",\r\n margin: \"4px\"\r\n },\r\n unselectedItemBox: {\r\n height: 198,\r\n width: 410,\r\n background: \"#FFFFFF\",\r\n color: \"#616161\",\r\n border: \"1px solid #CCCCCC\",\r\n margin: \"4px\",\r\n \"&:hover\": {\r\n cursor: \"pointer\"\r\n }\r\n },\r\n termsLink: {\r\n fontSize: \"14px\",\r\n fontWeight: \"500\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n marginLeft: \"8px\"\r\n },\r\n termsTitle: {\r\n fontSize: \"16px\",\r\n fontWeight: \"600\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n textDecoration: \"none\",\r\n marginBottom: \"16px\"\r\n },\r\n terms: {\r\n fontSize: \"10px\",\r\n fontWeight: \"400\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#002A42\",\r\n textDecoration: \"none\",\r\n borderRadius: 0\r\n }\r\n});\r\n\r\nconst HtmlTooltip = styled(({ className, ...props }) => (\r\n <Tooltip {...props} classes={{ popper: className }} placement=\"bottom\" />\r\n))(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: \"#f5f5f9\",\r\n color: \"#101014\",\r\n maxWidth: 410,\r\n padding: \"22px\",\r\n border: \"1px solid #8E258D\",\r\n borderRadius: 0\r\n }\r\n}));\r\n\r\nexport default function DigiCartBundleProduct(props) {\r\n const { product, onSelect, index, selected } = props;\r\n\r\n const classes = useStyles();\r\n\r\n var showTerms =\r\n product.bundleInfo.termsAndConditions.length > 0 ? true : false;\r\n\r\n return (\r\n <>\r\n <Box\r\n className={\r\n selected ? classes.selectedItemBox : classes.unselectedItemBox\r\n }\r\n onClick={() => {\r\n onSelect(index);\r\n }}\r\n >\r\n <Grid container spacing={0} columns={41}>\r\n <Grid item xs={4}>\r\n <Link\r\n className={classes.checkBoxSection}\r\n component=\"button\"\r\n onClick={() => {\r\n onSelect(index);\r\n }}\r\n >\r\n {selected ? (\r\n <CheckedIcon></CheckedIcon>\r\n ) : (\r\n <UncheckedIcon></UncheckedIcon>\r\n )}\r\n </Link>\r\n </Grid>\r\n <Grid item xs={26}>\r\n <Box className={classes.title}>{product.bundleInfo.title}</Box>\r\n <Box className={classes.descriptionSection}>\r\n <Typography className={classes.description}>\r\n {product.bundleInfo.description}\r\n </Typography>\r\n </Box>\r\n {showTerms && (\r\n <HtmlTooltip\r\n title={\r\n <div>\r\n <div className={classes.termsTitle}>\r\n Terms & Conditions\r\n </div>\r\n <div className={classes.terms}>\r\n {product.bundleInfo.termsAndConditions}\r\n </div>\r\n </div>\r\n }\r\n >\r\n <Link\r\n href=\"#\"\r\n onClick={(event) => {\r\n event.preventDefault();\r\n }}\r\n className={classes.terms}\r\n >\r\n <Typography className={classes.termsLink}>\r\n + Terms & Conditions\r\n </Typography>\r\n </Link>\r\n </HtmlTooltip>\r\n )}\r\n </Grid>\r\n <Grid item xs={11}>\r\n <DigiCartItemPrice\r\n price={product.bundleInfo.price}\r\n priceSuffix1={product.bundleInfo.priceSuffix}\r\n priceSuffix2={product.bundleInfo.priceSuffix2}\r\n ></DigiCartItemPrice>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport DigiCartMainProduct from \"./DigiCartMainProduct\";\r\nimport DigiCartBundleProduct from \"./DigiCartBundleProduct\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport * as DigiCartData from \"../../data/digiCartData\";\r\n\r\nexport default function DigiCartBundleProductGroup({\r\n selectedBundleIndex,\r\n selectedMainVersionProductId,\r\n onSelectedBundleIndex,\r\n groupName\r\n}) {\r\n const products = DigiCartData.getMainProduct(\r\n selectedMainVersionProductId\r\n ).products;\r\n\r\n // const onSelect = (item) => {\r\n // onSelectItem(groupName, item.itemKey);\r\n // };\r\n const productCnt = products.length;\r\n\r\n if (productCnt - 1 < selectedBundleIndex) {\r\n onSelectedBundleIndex(productCnt - 1);\r\n }\r\n\r\n return (\r\n <>\r\n <Grid\r\n container\r\n justifyContent={{ xs: \"center\", md: \"start\" }}\r\n columns={{ md: 4, lg: 12 }}\r\n >\r\n {products.length\r\n ? products.map((product, i) => (\r\n <Grid item key={i} xs={4}>\r\n <DigiCartBundleProduct\r\n product={product}\r\n index={i}\r\n //\r\n // key={item.internetItemKey}\r\n // product={item}\r\n onSelect={onSelectedBundleIndex}\r\n selected={i === selectedBundleIndex ? true : false}\r\n />\r\n </Grid>\r\n ))\r\n : null}\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport DigiCartMainProduct from \"./DigiCartMainProduct\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nexport default function DigiCartMainProductGroup({\r\n selectedOfferProducts,\r\n selectedMainVersionProductId,\r\n onSelectMainProduct = { onSelectMainProduct },\r\n groupName\r\n}) {\r\n // const onSelect = (item) => {\r\n // onSelectItem(groupName, item.itemKey);\r\n // };\r\n\r\n return (\r\n <>\r\n <Grid\r\n container\r\n sx={{ justifyContent: \"center\" }}\r\n columns={{ md: 4, lg: 12 }}\r\n >\r\n {selectedOfferProducts.length\r\n ? selectedOfferProducts.map((product, i) => (\r\n <Grid item key={i} xs={4}>\r\n <DigiCartMainProduct\r\n product={product}\r\n //\r\n // key={item.internetItemKey}\r\n // product={item}\r\n onSelectMainProduct={onSelectMainProduct}\r\n selected={\r\n product.mainProductId === selectedMainVersionProductId\r\n ? true\r\n : false\r\n }\r\n />\r\n </Grid>\r\n ))\r\n : null}\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","var _path, _circle;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMinusCircle(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 29,\n height: 29,\n viewBox: \"0 0 29 29\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.9322 16.845H10.0772V14.577H19.9322V16.845Z\",\n fill: \"#8E258D\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 14.5,\n cy: 14.5,\n r: 13.5,\n stroke: \"#8E258D\",\n strokeWidth: 2\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMinusCircle);\nexport default __webpack_public_path__ + \"static/media/minus-circle.5c5d8d7c.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport ArrowForwardIosSharpIcon from \"@mui/icons-material/ArrowForwardIosSharp\";\r\nimport ExpandCircleDownOutlinedIcon from \"@mui/icons-material/ExpandCircleDownOutlined\";\r\nimport MuiAccordion from \"@mui/material/Accordion\";\r\nimport MuiAccordionSummary from \"@mui/material/AccordionSummary\";\r\nimport MuiAccordionDetails from \"@mui/material/AccordionDetails\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Box from \"@mui/material/Box\";\r\nimport DigiCartBundleProductGroup from \"./DigiCartBundleProductGroup\";\r\nimport DigiCartMainProductGroup from \"./DigiCartMainProductGroup\";\r\nimport { ReactComponent as PlusIcon } from \"../../images/plus-circle.svg\";\r\nimport { ReactComponent as MinusIcon } from \"../../images/minus-circle.svg\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nconst useStyles = makeStyles({\r\n accordionSummaryTitle: {\r\n fontSize: \"24px\",\r\n fontWeight: \"500\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 18\r\n }\r\n },\r\n AccordionDetailsTitle: {\r\n fontSize: \"24px\",\r\n fontWeight: \"600\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#000000\",\r\n marginLeft: \"16px\",\r\n \"@media (max-width: 740px)\": {\r\n fontSize: 18,\r\n marginLeft: \"-55px\"\r\n }\r\n },\r\n AccordionDetailsSubTitle: {\r\n fontSize: \"18px\",\r\n fontWeight: \"400\",\r\n //fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#000000\",\r\n marginLeft: \"16px\",\r\n marginBottom: \"16px\"\r\n },\r\n matrixFooter: {\r\n fontSize: 14,\r\n fontWeight: \"14\",\r\n textAlign: \"center\",\r\n // fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n color: \"#101014\",\r\n marginBottom: \"10px\"\r\n },\r\n buttonBox: {\r\n display: \"flex\",\r\n justifyContent: \"center\"\r\n },\r\n selectBtn: {\r\n textTransform: \"none\",\r\n fontSize: \"18px\",\r\n fontWeight: 600,\r\n padding: \"5px 50px\",\r\n marginTop: \"35px\",\r\n marginBottom: \"30px\",\r\n width: 235,\r\n height: \"48px\",\r\n borderRadius: 100,\r\n backgroundColor: \"#8E258D\",\r\n whiteSpace: \"nowrap\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: \"#8E258D\",\r\n boxShadow: \"0px 0px 10px 0px #8d248b\"\r\n }\r\n }\r\n});\r\n\r\nconst Accordion = styled((props) => (\r\n <MuiAccordion disableGutters elevation={0} square {...props} />\r\n))(({ theme }) => ({\r\n border: `0px solid ${theme.palette.divider}`,\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0\r\n },\r\n \"&:before\": {\r\n display: \"none\"\r\n }\r\n}));\r\n//border: 1.5px solid #8E258D; selected option\r\n\r\n//background: #FFFFFF; not seleted\r\n//border: 0.5px solid #515151;\r\nconst AccordionSummary = styled((props) => <MuiAccordionSummary {...props} />)(\r\n ({ theme }) => ({\r\n backgroundColor: \"#F9F4F9\",\r\n\r\n flexDirection: \"row-reverse\",\r\n \"& .MuiAccordionSummary-expandIconWrapper.Mui-expanded\": {\r\n transform: \"rotate(90deg)\"\r\n },\r\n \"& .MuiAccordionSummary-content\": {\r\n marginLeft: theme.spacing(1)\r\n }\r\n })\r\n);\r\n\r\nconst AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({\r\n padding: theme.spacing(2),\r\n borderBottom: \"1px solid #CCCCCC\",\r\n borderLeft: \"1px solid #CCCCCC\",\r\n borderRight: \"1px solid #CCCCCC\"\r\n}));\r\n\r\nexport default function DigiCartProductMatrix({\r\n selectedOfferProducts,\r\n selectedMainVersionProductId,\r\n selectedBundleIndex,\r\n isQualForTv,\r\n onSelectMainProduct,\r\n onSelectedBundleIndex,\r\n onSubmit\r\n}) {\r\n const classes = useStyles();\r\n const [expanded, setExpanded] = React.useState(false);\r\n\r\n const handleChange = () => (event, newExpanded) => {\r\n setExpanded(newExpanded ? true : false);\r\n };\r\n\r\n return (\r\n <Box\r\n sx={{\r\n width: \"1288px\",\r\n\r\n \"@media (max-width: 1300px)\": {\r\n width: \"664px\"\r\n },\r\n \"@media (max-width: 740px)\": {\r\n width: \"430px\"\r\n }\r\n }}\r\n >\r\n <Accordion expanded={expanded} onChange={handleChange()}>\r\n <AccordionSummary\r\n expandIcon={\r\n expanded ? (\r\n <div className=\"rotated\">\r\n {\" \"}\r\n <MinusIcon></MinusIcon>\r\n </div>\r\n ) : (\r\n <PlusIcon></PlusIcon>\r\n )\r\n }\r\n >\r\n <Typography className={classes.accordionSummaryTitle}>\r\n Need some changes? Tweak your plan...\r\n </Typography>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Grid container sx={{ justifyContent: \"center\" }}>\r\n <Grid item xs={8} lg={12}>\r\n <Typography className={classes.AccordionDetailsTitle}>\r\n Internet Speeds\r\n </Typography>\r\n {/* <Typography className={classes.AccordionDetailsSubTitle}>\r\n Segment-specific text why 500 Mbps is selected for you...\r\n </Typography> */}\r\n <DigiCartMainProductGroup\r\n selectedOfferProducts={selectedOfferProducts}\r\n selectedMainVersionProductId={selectedMainVersionProductId}\r\n onSelectMainProduct={onSelectMainProduct}\r\n ></DigiCartMainProductGroup>\r\n {isQualForTv && (\r\n <>\r\n <br></br>\r\n <Typography className={classes.AccordionDetailsTitle}>\r\n Offer Bundles\r\n </Typography>\r\n {/* <Typography className={classes.AccordionDetailsSubTitle}>\r\n Segment-specific text why might want to upgrade to higher TV\r\n package...\r\n </Typography> */}\r\n\r\n <DigiCartBundleProductGroup\r\n selectedBundleIndex={selectedBundleIndex}\r\n selectedMainVersionProductId={selectedMainVersionProductId}\r\n onSelectedBundleIndex={onSelectedBundleIndex}\r\n ></DigiCartBundleProductGroup>\r\n </>\r\n )}\r\n <div className={classes.buttonBox}>\r\n <Button\r\n variant=\"contained\"\r\n className={classes.selectBtn}\r\n onClick={onSubmit}\r\n >\r\n Claim your offer\r\n </Button>\r\n </div>\r\n <Typography className={classes.matrixFooter}> </Typography>\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n </Box>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Paper from \"@mui/material/Paper\";\r\n\r\nexport default function DigiCartFooter(props) {\r\n return (\r\n <div style={{ width: \"100%\" }}>\r\n <Box\r\n sx={{\r\n height: 296,\r\n width: \"100%\",\r\n background: \"#F6F6F6\",\r\n paddingTop: \"85px\"\r\n }}\r\n >\r\n <div className=\"digi-cart-footer\">\r\n <Grid\r\n container\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n marginBottom: \"20px\"\r\n }}\r\n >\r\n <Grid\r\n container\r\n justifyContent=\"center\"\r\n rowSpacing={1}\r\n //columns={{ sx: 3, sm: 3, md: 3, lg: 3 }}\r\n columns={18}\r\n >\r\n <Grid item xs={6} md={4} lg={3}>\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\"\r\n }}\r\n >\r\n <a\r\n target=\"_blank\"\r\n href=\"https://www.hawaiiantel.com/Terms-Conditions\"\r\n >\r\n Terms of Use\r\n </a>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={6} md={4} lg={3}>\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\"\r\n }}\r\n >\r\n <a\r\n target=\"_blank\"\r\n href=\"https://www.hawaiiantel.com/aboutus/Privacy-Policy\"\r\n >\r\n Privacy Policy\r\n </a>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={6} md={4} lg={3}>\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\"\r\n }}\r\n >\r\n <a\r\n target=\"_blank\"\r\n href=\"https://www.hawaiiantel.com/business/Business/Customer-Support/Contact-Our-Team/Contact-Us\"\r\n >\r\n Contact Us\r\n </a>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n <Grid container justifyContent=\"center\" rowSpacing={1}>\r\n <Grid item xs={12}>\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\"\r\n }}\r\n >\r\n © {new Date().getFullYear()} Hawaiian Telcom. All Rights Reserved.\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </Box>\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport * as DigiCartData from \"../../data/digiCartData\";\r\nimport DigiCartProduct from \"./DigiCartProduct\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport DigiCartProductMatrix from \"./DigiCartProductMatrix\";\r\nimport DigiCartFooter from \"./DigiCartFooter\";\r\nimport { createTheme, ThemeProvider, styled } from \"@mui/material/styles\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport {\r\n getProducts,\r\n setProduct,\r\n setSelectedDigiCartProduct,\r\n setSelectedDigiCartBundleIndex,\r\n submitDigiCartId,\r\n clearSubmitDigiCartId,\r\n clearProcessedDigiCart,\r\n} from \"../../redux/actions/productActions\";\r\nimport { getAddress } from \"../../redux/actions/addressActions\";\r\nimport { setSession } from \"../../redux/actions/campaignActions\";\r\nimport \"../../css/digiCart.css\";\r\n//export default function OrderWizard(props) {\r\n\r\nconst theme = createTheme({\r\n typography: {\r\n fontFamily: [\"Arial\", \"Helvetica\", \"Roboto\", \"sans-serif\"].join(\",\"),\r\n },\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 740,\r\n lg: 1300,\r\n xl: 1536,\r\n },\r\n },\r\n});\r\n\r\n// const useStyles = makeStyles({\r\n// digiCartBox2: {\r\n// // width: \"100%\",\r\n// // paddingBottom: \"80px\",\r\n// // justifyContent: \"center\"\r\n// },\r\n// card: {\r\n// minWidth: 275,\r\n// borderRadius: 4,\r\n// marginBottom: \"25px\",\r\n// border: \"1px solid #A1A1A1\",\r\n// position: \"relative\"\r\n// },\r\n// cardSelected: {\r\n// minWidth: 275,\r\n// borderRadius: 4,\r\n// marginBottom: \"25px\",\r\n// border: \"3px solid #4198C7\",\r\n// position: \"relative\"\r\n// },\r\n// title: {\r\n// fontSize: 26,\r\n// fontWeight: \"600\",\r\n// fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n// color: \"#002A42\"\r\n// },\r\n// selectBtn: {\r\n// borderRadius: \"22px\",\r\n// color: \"#333\",\r\n// border: \"1px solid #707070\",\r\n// width: \"144px\",\r\n// textAlign: \"center\",\r\n// padding: \"8px 0\",\r\n// fontSize: \"18px\",\r\n// marginTop: \"40px\"\r\n// },\r\n// description: {\r\n// fontSize: \"14px\",\r\n// color: \"#434343\",\r\n// whiteSpace: \"pre-line\",\r\n// marginBottom: \"10px\"\r\n// },\r\n// terms: {\r\n// fontSize: \"14px\",\r\n// fontWeight: \"600\",\r\n// fontFamily: \"Helvetica,Roboto,Arial,sans-serif\",\r\n// color: \"#002A42\",\r\n// textDecoration: \"none\"\r\n// },\r\n// section1: {\r\n// textAlign: \"center\"\r\n// },\r\n// section2: {},\r\n// section3: {\r\n// textAlign: \"center\",\r\n// minWidth: \"161px\",\r\n// margin: \"auto\"\r\n// }\r\n// });\r\n\r\nexport default function DigiCart(props) {\r\n const { digiCartOffer } = props;\r\n const dispatch = useDispatch();\r\n\r\n const digiCartOfferId = parseInt(digiCartOffer);\r\n // console.log(\"digiCartOfferId\", digiCartOfferId);\r\n\r\n //get current selected product\r\n const selectedMainVersionProductId = useSelector(\r\n (state) => state.products.digiCartSelectedMainVersionProductId\r\n );\r\n //find index that matches to digiCartOfferId\r\n const selectedBundleIndex = useSelector(\r\n (state) => state.products.digiCartselectedBundleIndex\r\n );\r\n const digiCartSubmittedId = useSelector(\r\n (state) => state.products.digiCartSubmittedId\r\n );\r\n const digiCartProcesed = useSelector(\r\n (state) => state.products.digiCartProcesed\r\n );\r\n const mainProducts = useSelector((state) => state.products.mainProducts);\r\n const address = useSelector((state) => state.address.address);\r\n let isQualForTv = false;\r\n if (address) {\r\n isQualForTv = address.isQualForTv;\r\n }\r\n const addressError = useSelector((state) => state.address.error);\r\n if (addressError) {\r\n }\r\n\r\n //get all the mains products and it bundle products\r\n let selectedOfferProducts = null;\r\n if (digiCartOfferId) {\r\n selectedOfferProducts = DigiCartData.getMainProducts(digiCartOfferId);\r\n }\r\n\r\n //set inital selected product state\r\n useEffect(() => {\r\n if (!mainProducts || mainProducts.length == 0) {\r\n dispatch(getProducts());\r\n return;\r\n }\r\n\r\n //set selected product and index\r\n if (digiCartOfferId) {\r\n //add check for digiCartSubmittedId if previous page was confirm address alway reset value\r\n //if previous page was addon then only refresh if value is null\r\n if (!selectedMainVersionProductId || !digiCartProcesed) {\r\n //initialize digicart with initial select product, which matches the offerId\r\n // console.log(\"DigiCart setSelectedDigiCartProduct\");\r\n dispatch(setSelectedDigiCartProduct(digiCartOfferId));\r\n //set initial product\r\n dispatch(setProduct(digiCartOfferId, getSagCode(digiCartOfferId)));\r\n dispatch(submitDigiCartId(digiCartOfferId));\r\n }\r\n if (selectedBundleIndex === null || !digiCartProcesed) {\r\n // console.log(\"DigiCart setSelectedDigiCartBundleIndex\");\r\n //initialize digicart with selected bundle product\r\n dispatch(\r\n setSelectedDigiCartBundleIndex(\r\n DigiCartData.getDefaultBundleIndex(digiCartOfferId)\r\n )\r\n );\r\n }\r\n }\r\n //customer clicked browser back button to get back to digi cart\r\n dispatch(clearProcessedDigiCart());\r\n\r\n // call get address to rehdryate address state in redux after redirect from confrim address page\r\n dispatch(getAddress());\r\n // console.log(\"DigiCart getaddress\");\r\n }, [mainProducts]);\r\n\r\n const getSagCode = (productVersionId) => {\r\n let products =\r\n mainProducts && mainProducts.length > 0\r\n ? mainProducts.filter((item) => item.productId == productVersionId)\r\n : [];\r\n\r\n if (products.length > 0) {\r\n let product = products[0];\r\n return product.sagCode;\r\n }\r\n return null;\r\n };\r\n\r\n const onSelectMainProduct = (mainVersionProductId) => {\r\n const selectProductVersionId = DigiCartData.getSelectProductVersionId(\r\n mainVersionProductId,\r\n selectedBundleIndex\r\n );\r\n if (selectProductVersionId && selectProductVersionId > 0) {\r\n dispatch(setProduct(selectProductVersionId, getSagCode(digiCartOfferId)));\r\n dispatch(submitDigiCartId(selectProductVersionId));\r\n }\r\n dispatch(setSelectedDigiCartProduct(mainVersionProductId));\r\n //setSelectedMainVersionProductId(mainVersionProductId);\r\n };\r\n\r\n const onSelectedBundleIndex = (index) => {\r\n const selectProductVersionId = DigiCartData.getSelectProductVersionId(\r\n selectedMainVersionProductId,\r\n index\r\n );\r\n if (selectProductVersionId && selectProductVersionId > 0) {\r\n dispatch(setProduct(selectProductVersionId, getSagCode(digiCartOfferId)));\r\n dispatch(submitDigiCartId(selectProductVersionId));\r\n }\r\n dispatch(setSelectedDigiCartBundleIndex(index));\r\n // setSelectBundleIndex(index);\r\n };\r\n\r\n const onSubmit = async () => {\r\n const selectProductVersionId = DigiCartData.getSelectProductVersionId(\r\n selectedMainVersionProductId,\r\n selectedBundleIndex\r\n );\r\n\r\n //dispatch(setProduct(selectProductVersionId));\r\n // dispatch(submitDigiCartId(selectProductVersionId));\r\n var destination = process.env.PUBLIC_URL + \"/orderwizard/addons\";\r\n window.top.location.href = destination;\r\n };\r\n\r\n //set inital selected product state\r\n\r\n if (!digiCartOfferId) {\r\n return (\r\n <>\r\n <Box\r\n sx={{\r\n // width: \"100%\",\r\n paddingBottom: \"80px\",\r\n // fontFamily: \"Arial,Helvetica,Roboto,sans-serif\"\r\n }}\r\n >\r\n <Grid\r\n container\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item paddingTop=\"500px\">\r\n <Typography sx={{ fontSize: \"20px\" }}>\r\n Offer not available\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n <DigiCartFooter></DigiCartFooter>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <ThemeProvider theme={theme}>\r\n <Box\r\n sx={{\r\n // width: \"100%\",\r\n paddingBottom: \"80px\",\r\n // fontFamily: \"Arial,Helvetica,Roboto,sans-serif\"\r\n }}\r\n >\r\n {digiCartOfferId &&\r\n selectedMainVersionProductId &&\r\n selectedBundleIndex !== null && (\r\n <Grid\r\n container\r\n direction=\"column\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item paddingTop=\"350px\">\r\n <DigiCartProduct\r\n selectedMainVersionProductId={selectedMainVersionProductId}\r\n selectedBundleIndex={selectedBundleIndex}\r\n onSubmit={onSubmit}\r\n ></DigiCartProduct>\r\n </Grid>\r\n <Grid item paddingTop=\"50px\">\r\n <DigiCartProductMatrix\r\n selectedOfferProducts={selectedOfferProducts}\r\n selectedMainVersionProductId={selectedMainVersionProductId}\r\n selectedBundleIndex={selectedBundleIndex}\r\n isQualForTv={isQualForTv}\r\n onSelectMainProduct={onSelectMainProduct}\r\n onSelectedBundleIndex={onSelectedBundleIndex}\r\n onSubmit={onSubmit}\r\n // old\r\n // selectedOffer={selectedOffer}\r\n // selectedInternetItemKey={selectedInternetItemKey}\r\n // selectedBundleItemKey={selectedBundleItemKey}\r\n // onSelectItem={onSelectItem}\r\n //\r\n ></DigiCartProductMatrix>\r\n </Grid>\r\n </Grid>\r\n )}\r\n </Box>\r\n <DigiCartFooter></DigiCartFooter>\r\n </ThemeProvider>\r\n\r\n // </CardContent>\r\n // </Card>\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { saveHistory, resetAll } from \"../redux/actions/stepActions\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nimport Backdrop from '@mui/material/Backdrop';\r\nimport Box from '@mui/material/Box';\r\nimport Modal from '@mui/material/Modal';\r\nimport Fade from '@mui/material/Fade';\r\nimport Typography from '@mui/material/Typography';\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst style = {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: 400,\r\n bgcolor: 'background.paper',\r\n border: '2px solid #000',\r\n boxShadow: 24,\r\n p: 4,\r\n };\r\n \r\nexport default function SessionTimeoutModal() {\r\n const dispatch = useDispatch();\r\n\r\n const history = useSelector((state) => state.steps.history);\r\n let uhistory = useHistory();\r\n \r\n\r\n useEffect(() => {\r\n if(!history || !history.push){\r\n dispatch(saveHistory(uhistory));\r\n }\r\n }, []);\r\n\r\n\r\n const getProducts400 = useSelector(state =>\r\n state && state.products && \r\n state.products.error && state.products.error.status &&\r\n state.products.error.status == 400\r\n );\r\n\r\n const getAddons400 = useSelector(state =>\r\n state && state.products && state.products.addons &&\r\n state.products.addons.error && state.products.addons.error.response &&\r\n state.products.addons.error.response.status == 400\r\n );\r\n\r\n const cart400 = useSelector(state =>\r\n state && state.cart && state.cart.cart &&\r\n state.cart.cart.error && state.cart.cart.error.response &&\r\n state.cart.cart.error.response.status == 400\r\n );\r\n\r\n const scheduling400 = useSelector(state =>\r\n state && state.schedule && \r\n state.schedule.error && state.schedule.error.response &&\r\n state.schedule.error.response.status == 400\r\n );\r\n\r\n const user400 = useSelector(state =>\r\n state && state.user && \r\n state.user.error && state.user.error.response &&\r\n state.user.error.response.status == 400\r\n );\r\n\r\n const checkout400 = useSelector(state =>\r\n state && state.cart && \r\n state.cart.error && state.cart.error.response &&\r\n state.cart.error.response.status == 400\r\n );\r\n\r\n\r\n const showModal = (\r\n getProducts400 === true || \r\n getAddons400 === true || \r\n cart400 === true || \r\n scheduling400 === true || \r\n user400 === true || \r\n checkout400 === true);\r\n\r\n\r\n\r\n\r\n\r\n const onClick = async () => {\r\n // console.log(\"resetAll triggered in SessionTimeoutModal\");\r\n await dispatch(resetAll());\r\n \r\n \r\n window.top.location.href = \"/\";\r\n \r\n\r\n \r\n }\r\n\r\n\r\n return (\r\n showModal === true ?\r\n <Modal\r\n disableEnforceFocus \r\n open={showModal}\r\n aria-labelledby=\"modal-modal-title\"\r\n aria-describedby=\"modal-modal-description\"\r\n >\r\n <Box sx={style}>\r\n <Typography id=\"modal-modal-title\" variant=\"h6\" component=\"h2\">\r\n Session Expired\r\n </Typography>\r\n <Typography id=\"modal-modal-description\" sx={{ mt: 2, mb:2 }}>\r\n Please click OK to start a new order.\r\n </Typography>\r\n <Button variant=\"contained\" onClick={onClick}>OK</Button>\r\n </Box>\r\n \r\n \r\n </Modal>\r\n\r\n\r\n : <></>\r\n );\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport DigiCart from './DigiCart';\r\nimport SessionTimeoutModal from \"./../SessionTimeoutModal\";\r\nimport { setCampaignSource } from \"../../redux/actions/campaignActions\";\r\n\r\nexport default function DigiCartContainer(props) {\r\n const dispatch = useDispatch();\r\n const { digiCartOffer, campaignSource } = props.match.params;\r\n\r\n const className = campaignSource ? campaignSource + \"-HEADER\" : \"\";\r\n\r\n useEffect(() => {\r\n let cs = campaignSource && campaignSource.length > 0 ? campaignSource : \"digicart\";\r\n dispatch(setCampaignSource(cs));\r\n }, [campaignSource]);\r\n\r\n\r\n return (\r\n <div id=\"digi-cart-root\" className={className}>\r\n <SessionTimeoutModal />\r\n <DigiCart digiCartOffer={digiCartOffer} />\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Link from \"@mui/material/Link\";\r\nimport logo from \"./../../images/ht-logo.png\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\n\r\nexport default function Logo(props) {\r\n\r\n const {campaignType} = props; \r\n\r\n const campaign = useSelector((state) => state.campaign);\r\n\r\n const campaignTypeStore =\r\n campaign && campaign.campaign && campaign.campaign.campaignType\r\n ? campaign.campaign.campaignType\r\n : \"\";\r\n let src; \r\n if(campaignTypeStore && campaignTypeStore != \"\"){\r\n src = process.env.PUBLIC_URL + \"/api/image/banner/\" + campaignTypeStore;\r\n }\r\n else if(campaignType && campaignType != \"\"){\r\n src = process.env.PUBLIC_URL + \"/api/image/banner/\" + campaignType;\r\n }\r\n else{\r\n src = logo; \r\n }\r\n //console.log(\"src\",src);\r\n //console.log(\"campaign\",campaign);\r\n\r\n return (\r\n <div>\r\n <Link target=\"_blank\" href={process.env.REACT_APP_DNN}>\r\n <img alt=\"\" src={src} style={{ \"max-height\": \"115px\" }} />\r\n </Link>\r\n </div>\r\n );\r\n}\r\n","export default \"data:image/png;base64,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\"","import React, { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setStep, saveHistory } from \"../../redux/actions/stepActions\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst steps = [\r\n {\r\n title: \"Check Availability\",\r\n },\r\n {\r\n title: \"Internet\",\r\n },\r\n {\r\n title: \"Add-Ons\",\r\n },\r\n {\r\n title: \"Equipment\",\r\n },\r\n {\r\n title: \"Customer Info\",\r\n },\r\n {\r\n title: \"Installation\",\r\n },\r\n {\r\n title: \"Review & Submit\",\r\n },\r\n];\r\n\r\nexport default function StepsNav() {\r\n const dispatch = useDispatch();\r\n const history = useSelector((state) => state.steps.history);\r\n let uhistory = useHistory();\r\n const currentStep = useSelector((state) => state.steps.currentStep);\r\n const skipInstallationStep = useSelector((state) => state.steps.skipInstallationStep);\r\n const campaign = useSelector((state) => state.campaign);\r\n let campaignType = null;\r\n if (campaign && campaign.campaign) {\r\n campaignType = campaign.campaign.campaignType;\r\n } \r\n useEffect(() => {\r\n if (!history || !history.push) {\r\n dispatch(saveHistory(uhistory));\r\n }\r\n }, []);\r\n\r\n const handleClick = (e) => {\r\n if (e.currentTarget.getAttribute(\"name\")) {\r\n const screen = Number(e.currentTarget.getAttribute(\"name\"));\r\n\r\n if (screen === -1) {\r\n if (history && history.push) {\r\n if (campaignType) {\r\n history.push(\"/addressVerification/\" + campaignType);\r\n } else {\r\n history.push(\"/addressVerification/Residential\");\r\n }\r\n } else {\r\n var destination = process.env.PUBLIC_URL;\r\n window.location.href = destination;\r\n }\r\n }\r\n else {\r\n let destination;\r\n if (skipInstallationStep === true && screen === 4) {\r\n \r\n }\r\n else {\r\n\r\n switch (screen) {\r\n case 0:\r\n destination = \"/orderwizard/products\";\r\n break;\r\n case 1:\r\n destination = \"/orderwizard/addons\";\r\n break;\r\n case 2:\r\n destination = \"/orderwizard/equipment\";\r\n break;\r\n case 3:\r\n destination = \"/orderwizard/customerinfo\";\r\n break;\r\n case 4:\r\n destination = \"/orderwizard/installation\";\r\n break;\r\n case 5:\r\n destination = \"/orderwizard/reviewsubmit\";\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n dispatch(setStep(screen));\r\n if (destination) {\r\n history.push(destination);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n // scroll to view\r\n if (currentStep) {\r\n document.getElementById(\"step\" + currentStep).scrollIntoView();\r\n }\r\n }, [currentStep]);\r\n\r\n return (\r\n <div className=\"steps-nav\">\r\n <div\r\n key={-1}\r\n id=\"step-1\"\r\n name={-1}\r\n className={\"item \" + (currentStep === -1 ? \"active\" : \"asLink\")}\r\n onClick={currentStep === -1 ? null : handleClick}\r\n >\r\n {steps[0].title}\r\n </div>\r\n {steps\r\n .filter((step, i) => i !== 0)\r\n .map((item, index) => (\r\n <>\r\n {currentStep > index ? (\r\n <div\r\n key={item.title}\r\n id={\"step\" + index}\r\n name={index}\r\n className=\"item asLink\"\r\n onClick={currentStep === -1 ? null : handleClick}\r\n >\r\n {item.title}\r\n </div>\r\n ) : (\r\n <div\r\n key={item.title}\r\n id={\"step\" + index}\r\n name={index}\r\n className={\"item \" + (currentStep === index ? \"active\" : \"\")}\r\n >\r\n {item.title}\r\n </div>\r\n )}\r\n </>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport Logo from \"./Logo\";\r\nimport StepsNav from \"../NewOrder/StepsNav\";\r\n\r\nexport default function Header(props) {\r\n\r\n const { campaignType } = props.match.params; \r\n return (\r\n <div className=\"global-header\">\r\n <Logo campaignType={campaignType} />\r\n <StepsNav />\r\n </div>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function Footer() {\r\n //todo: make year dinamic value\r\n //todo:\r\n return (\r\n <div className=\"footer\">\r\n <div className=\"copyright\">\r\n © {new Date().getFullYear()} Hawaiian Telcom. All Rights Reserved.\r\n </div>\r\n <div className=\"links\">\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/aboutus/Careers\">Careers</a>\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/aboutus/About-Us/Investor-Relations\">Investor Relations</a>\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/aboutus/Privacy-Policy\">Privacy policy</a>\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/aboutus/Broadband-Policy\">Broadband Policy</a>\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/TermsConditions\">Service Terms and Conditions</a>\r\n <a target=\"_blank\" href=\"http://tariffs.net/hawaiiantel/\">Tariffs</a>\r\n <a target=\"_blank\" href=\"https://www.hawaiiantel.com/Sitemap-Page\">Site Map</a>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { Component, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setStep, saveHistory, resetAll } from \"./redux/actions/stepActions\";\r\nimport IdleTimer from \"react-idle-timer\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nfunction AppSession() {\r\n const dispatch = useDispatch();\r\n const history = useSelector((state) => state.steps.history);\r\n let uhistory = useHistory();\r\n\r\n const currentStep = useSelector((state) => state.steps.currentStep);\r\n\r\n useEffect(() => {\r\n if(!history || !history.push){\r\n dispatch(saveHistory(uhistory));\r\n }\r\n }, []);\r\n\r\n const onIdle = (e) => {\r\n // could put clear cookies here if needed - see myAccount for an example\r\n dispatch(setStep(-1));\r\n // console.log(\"resetAll triggered in AppSession onIdle()\");\r\n\r\n dispatch(resetAll());\r\n history.push(\"/\"); \r\n\r\n };\r\n\r\n return (\r\n <React.Fragment>\r\n {currentStep !== null && currentStep >= 0 && (\r\n <IdleTimer\r\n element={document}\r\n onIdle={onIdle}\r\n timeout={1000 * 60 * process.env.REACT_APP_IDLE_TIMEOUT}\r\n />\r\n )}\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default AppSession;\r\n","import React from \"react\";\r\n\r\nexport default function AutoResize(props){\r\n\r\n\r\n const {enabled, mode} = props; \r\n let docHeight; \r\n\r\n const ResizeIFrame = () => {\r\n try{\r\n window.parent.document.getElementById(\"iframeResizable\").height = getDocHeight();\r\n }\r\n catch(e){ }\r\n }\r\n\r\n const getDocHeight = () => {\r\n\r\n let D = document; \r\n let offsetHeight = Math.max(\r\n D.body.offsetHeight * 1.01 + 40\r\n ); \r\n\r\n if(mode === \"minicart\"){\r\n offsetHeight = document.getElementById(\"root\").offsetHeight;\r\n }\r\n \r\n // let offsetHeight = document.body.offsetHeight; \r\n let iframes = document.getElementsByTagName(\"iframe\");\r\n let maxFrameHeight = 0;\r\n let maxFrameKey = -1;\r\n let frameCounter = 0; \r\n for(const element of iframes){\r\n let iframeOffsetHeight = element.offsetHeight; \r\n\r\n if(iframeOffsetHeight > maxFrameHeight){\r\n maxFrameHeight = iframeOffsetHeight;\r\n maxFrameKey = frameCounter; \r\n }\r\n frameCounter += 1; \r\n }\r\n\r\n if(maxFrameHeight > offsetHeight){\r\n offsetHeight = maxFrameHeight + 20;\r\n try {\r\n if (maxFrameKey > -1) {\r\n document.getElementsByTagName(\"iframe\")[maxFrameKey].parentElement.style.height = \"\" + offsetHeight + \"px\";\r\n }\r\n }\r\n catch (e) { }\r\n \r\n }\r\n\r\n return offsetHeight;\r\n }\r\n\r\n const CheckForResize = () => {\r\n if(docHeight !== getDocHeight()) {\r\n docHeight = getDocHeight();\r\n ResizeIFrame();\r\n }\r\n }\r\n\r\n if(enabled === true){\r\n \r\n \r\n try{\r\n document.domain = \"hawaiiantel.com\"; \r\n docHeight = getDocHeight(); \r\n //console.log(\"Initial document height:\", docHeight);\r\n //var ctrParent = window.parent.document.getElementById(\"iframeResizable\");\r\n //console.log(\"Iframe parent container:\", ctrParent)\r\n ResizeIFrame(); \r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n \r\n try {\r\n //console.log(\"Setting interval for the iframe resizing.\");\r\n setInterval(CheckForResize, 400);\r\n }\r\n catch(e){\r\n console.error(e);\r\n }\r\n }\r\n\r\n return ( \r\n <></>\r\n ); \r\n}","import React, { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setUtmParams } from \"./../../redux/actions/campaignActions\";\r\nimport TagManager from \"react-gtm-module\";\r\n\r\nclass UtmParams {\r\n constructor(utm_source, utm_medium, utm_campaign) {\r\n this.utm_source = utm_source;\r\n this.utm_medium = utm_medium;\r\n this.utm_campaign = utm_campaign;\r\n }\r\n };\r\n\r\nexport default function Cookievalue(props){\r\n const dispatch = useDispatch();\r\n \r\n var utm_source = '';\r\n var utm_medium = '';\r\n var utm_campaign = '';\r\n useEffect(() => {\r\n utm_source = document.cookie.replace(/(?:(?:^|.*;\\s*)utm_source\\s*\\=\\s*([^;]*).*$)|^.*$/, \"$1\");\r\n utm_medium = document.cookie.replace(/(?:(?:^|.*;\\s*)utm_medium\\s*\\=\\s*([^;]*).*$)|^.*$/, \"$1\");\r\n utm_campaign = document.cookie.replace(/(?:(?:^|.*;\\s*)utm_campaign\\s*\\=\\s*([^;]*).*$)|^.*$/, \"$1\");\r\n \r\n // todo else try to get utm_param from the url\r\n const urlParams = new URLSearchParams(window.location.search);\r\n for (const [key, value] of urlParams) {\r\n if (key == \"utm_source\") {\r\n utm_source = value;\r\n }\r\n else if(key == \"utm_medium\") {\r\n utm_medium = value;\r\n }\r\n else if (key == \"utm_campaign\") {\r\n utm_campaign = value;\r\n }\r\n }\r\n \r\n var utmparams = new UtmParams(utm_source, utm_medium, utm_campaign);\r\n TagManager.dataLayer({\r\n dataLayer: {\r\n utmparams\r\n }\r\n });\r\n dispatch(setUtmParams(utmparams));\r\n }, []);\r\n \r\n return ( \r\n <></>\r\n ); \r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { pricingApiTester } from \"../../redux/actions/cartActions\";\r\n\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Button from \"@mui/material/Button\";\r\n\r\nexport default function PricingApiTester() {\r\n const dispatch = useDispatch();\r\n\r\n const [pricingApiRequestXml, setPricingApiRequestXml] = useState(\"\");\r\n const [pricingApiResponseXml, setPricingApiResponseXml] = useState(\"Not Set\");\r\n const [counter, setCounter] = useState(0);\r\n\r\n const onClick = async () => { \r\n await dispatch(pricingApiTester(pricingApiRequestXml));\r\n setCounter(counter + 1);\r\n }\r\n const onChange = (e) => {\r\n setPricingApiRequestXml(e.target.value);\r\n }\r\n const state = useSelector(\r\n (state) => state\r\n );\r\n React.useEffect(() => {\r\n setPricingApiResponseXml(\"\");\r\n }, []);\r\n \r\n\r\n React.useEffect(() => {\r\n try{\r\n if(pricingApiRequestXml != \"\"){\r\n setPricingApiResponseXml(state.cart.pricingApiTesterResponse);\r\n }\r\n }\r\n catch(e){\r\n setPricingApiResponseXml(\"Not Set\");\r\n }\r\n }, [state]);\r\n\r\n return (\r\n <>\r\n <h1>Pricing Api Tester</h1>\r\n <Grid container >\r\n <Grid item xs={12}>\r\n\r\n <TextField\r\n id=\"pricingApiRequestXml\"\r\n label=\"pricingApiRequestXml\"\r\n multiline\r\n rows={10}\r\n value={pricingApiRequestXml}\r\n fullWidth\r\n onChange={onChange}\r\n />\r\n </Grid>\r\n <Grid item xs={12}>\r\n\r\n <TextField\r\n id=\"pricingApiResponseXml\"\r\n label=\"pricingApiResponseXml\"\r\n multiline\r\n rows={10}\r\n value={pricingApiResponseXml}\r\n fullWidth\r\n />\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n onClick={onClick}\r\n >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import { Alert } from \"bootstrap\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport {\r\n setStep,\r\n saveHistory,\r\n resetAll,\r\n skipInstallationStep\r\n} from \"../redux/actions/stepActions\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setSession } from \"../redux/actions/campaignActions\";\r\nimport { setProduct, getProducts } from \"../redux/actions/productActions\";\r\nimport {\r\n setHasAccount,\r\n setProfileAccountNumber,\r\n} from \"../redux/actions/userActions\";\r\nimport {\r\n setAddress,\r\n resetAddressHaveServices,\r\n} from \"../redux/actions/addressActions\";\r\nimport LocalApi from \"../redux/localApi\";\r\nconst Upgrade = forwardRef((props, ref) => {\r\n const { campaignType, addressId, accountNumber, campaignSource } = props.match.params;\r\n let history = useHistory();\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n async function fetchData() {\r\n const response = await LocalApi.get(`/api/Address/getAddrressById/${1}/${addressId}`);\r\n \r\n const selectedAddrOption = response.data.map(i => ({\r\n title: i.title,\r\n addressId: i.addressId,\r\n obj: i\r\n }));\r\n\r\n dispatch(setAddress(selectedAddrOption[0].obj));\r\n await dispatch(\r\n setSession(\r\n selectedAddrOption[0].obj,\r\n null,//email,\r\n campaignType,\r\n 'MyAccountIntegrationCaptcha',//captchaValue,\r\n campaignSource,//MyAccount\r\n {},//utmparam,\r\n )\r\n );\r\n redirectToProducts();\r\n }\r\n fetchData();\r\n \r\n }, []);\r\n \r\n const setCurrentStep = (step) => {\r\n dispatch(setStep(step));\r\n };\r\n const redirectToProducts = () => {\r\n // setProfileAccountNumber(accountNumber);\r\n // setHasAccount(true);\r\n setCurrentStep();\r\n var destination = process.env.PUBLIC_URL + \"/orderwizard/products\";\r\n window.top.location.href = destination;\r\n };\r\n\r\n\r\n return (\r\n <div>\r\n\r\n </div>\r\n );\r\n});\r\n\r\nexport default Upgrade;\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n BrowserRouter,\r\n Route,\r\n Switch,\r\n Redirect,\r\n withRouter,\r\n} from \"react-router-dom\";\r\nimport ga4 from \"./analytics/ga4/ga4\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\n\r\nimport { AddressVerification } from \"./views/addressVerification/AddressVerification\";\r\nimport { CheckForAuthRequired } from \"./views/auth/CheckForAuthRequired\";\r\nimport { AddressVerificationDigi } from \"./views/addressVerification/AddressVerificationDigi\";\r\nimport { AddressVerificationMini } from \"./views/addressVerification/AddressVerificationMini\";\r\nimport \"./App.css\";\r\nimport OrderWizard from \"./views/NewOrder/OrderWizard\";\r\nimport Confirmation from \"./views/Confirmation\";\r\nimport ConfirmationInterestForm from \"./views/ConfirmationInterestForm\";\r\nimport ConfirmationError from \"./views/ConfirmationError\";\r\nimport IframeRedirector from \"./views/IframeRedirector\";\r\nimport ConfirmAddress from \"./views/addressVerification/ConfirmAddress\";\r\nimport DigiCartContainer from \"./views/digiCart/DigiCartContainer\";\r\nimport Header from \"./views/layout/Header\";\r\nimport Footer from \"./views/layout/Footer\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport AppSession from \"./AppSession\";\r\nimport AutoResize from \"./views/digiCart/AutoResize\";\r\nimport Cookievalue from \"./views/digiCart/Cookievalue\";\r\nimport PricingApiTester from \"./views/tester/PricingApiTester\";\r\nimport SessionTimeoutModal from \"./views/SessionTimeoutModal\";\r\nimport Upgrade from \"./views/Upgrade\";\r\nconst tagManagerArgs = {\r\n gtmId: process.env.REACT_APP_GTMID,\r\n};\r\n// ensures that the Google Analytics is initialized once, but before rendering happens, which is efficient.\r\nga4.initialize(\r\n process.env.REACT_APP_GAID,\r\n process.env.REACT_APP_GA_DEBUGMODE\r\n);\r\n\r\n\r\nclass App extends Component {\r\n render() {\r\n const { campaign } =\r\n this.props && this.props.campaign ? this.props.campaign : null;\r\n let campaignType = \"Residential\";\r\n if (campaign && campaign.campaignType) {\r\n campaignType = campaign.campaignType;\r\n }\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n const routePath = window.location.pathname;\r\n\r\n const route =\r\n routePath.split(\"/\")[1] == \"cart\"\r\n ? routePath.split(\"/\")[2]\r\n : routePath.split(\"/\")[1];\r\n\r\n if (\r\n route.toLowerCase() === \"digicart\" &&\r\n routePath.indexOf(\"address\") == -1\r\n ) {\r\n // console.log(\"New Route digicart\");\r\n\r\n return (\r\n <BrowserRouter basename={process.env.REACT_APP_BASENAME || \"\"}>\r\n <Switch>\r\n <Route\r\n path=\"/digicart/:digiCartOffer/:campaignSource\"\r\n component={DigiCartContainer}\r\n />\r\n <Route\r\n path=\"/digicart/:digiCartOffer\"\r\n component={DigiCartContainer}\r\n />\r\n </Switch>\r\n </BrowserRouter>\r\n );\r\n } else {\r\n //console.log(\"App New Route not digicart\", campaignType);\r\n //console.log(\"route\", route);\r\n //console.log(\"routePath\", routePath);\r\n return (\r\n <div\r\n id=\"ecom-root\"\r\n className={\r\n route.toLowerCase() === \"digicart\"\r\n ? \"digicart\"\r\n : route.toLowerCase() === \"minicart\"\r\n ? \"minicart\"\r\n : \"\"\r\n }\r\n >\r\n <SessionTimeoutModal />\r\n <Cookievalue />\r\n {route.toLowerCase() !== \"digicart\" &&\r\n routePath.indexOf(\"address\") == -1 && <AppSession />}\r\n\r\n {(route.toLowerCase() === \"digicart\" ||\r\n route.toLowerCase() === \"minicart\") &&\r\n routePath.indexOf(\"address\") !== -1 && (\r\n <AutoResize enabled={true} mode={route.toLowerCase()} />\r\n )}\r\n {route.toLowerCase() !== \"digicart\" &&\r\n route.toLowerCase() !== \"minicart\" && (\r\n <BrowserRouter basename={process.env.REACT_APP_BASENAME || \"\"}>\r\n <Switch>\r\n {/* <Route exact path=\"/\" component={AddressVerification} /> */}\r\n <Route\r\n path=\"/addressVerification/:campaignType\"\r\n component={Header}\r\n />\r\n <Route component={Header} />\r\n </Switch>\r\n </BrowserRouter>\r\n )}\r\n\r\n <Card\r\n sx={{ overflow: \"visible\" }}\r\n className=\"container main-content\"\r\n variant=\"outlined\"\r\n >\r\n <CardContent className=\"card-content\">\r\n <BrowserRouter basename={process.env.REACT_APP_BASENAME || \"\"}>\r\n <Switch>\r\n {/* <Route exact path=\"/\" component={AddressVerification} /> */}\r\n <Route\r\n path=\"/addressVerification/:campaignType\"\r\n component={AddressVerification}\r\n />\r\n <Route\r\n path=\"/digicart/addressVerification/:campaignType/:productVersionId/:campaignSource\"\r\n component={AddressVerificationDigi}\r\n />\r\n <Route\r\n path=\"/digicart/addressVerification/:campaignType/:productVersionId\"\r\n component={AddressVerificationDigi}\r\n />\r\n <Route\r\n path=\"/minicart/addressVerification/:campaignType/:campaignSource\"\r\n component={AddressVerificationMini}\r\n />\r\n <Route\r\n path=\"/minicart/addressVerification/:campaignType/\"\r\n component={AddressVerificationMini}\r\n />\r\n <Route\r\n path=\"/confirmaddress/:campaignType\"\r\n component={ConfirmAddress}\r\n />\r\n <Route\r\n path=\"/digicart/confirmaddress/:productVersionId\"\r\n render={(props) => (\r\n <ConfirmAddress {...props} mode={\"digicart\"} />\r\n )}\r\n />\r\n <Route\r\n path=\"/minicart/confirmaddress\"\r\n render={(props) => (\r\n <ConfirmAddress {...props} mode={\"minicart\"} />\r\n )}\r\n />\r\n <Route\r\n path=\"/iframeredirector\"\r\n component={IframeRedirector}\r\n />\r\n <Route\r\n path=\"/orderwizard/:startStep\"\r\n component={OrderWizard}\r\n />\r\n <Route\r\n path=\"/tester/:campaignId/:qualLevel/:maxHsi/:island\"\r\n component={OrderWizard}\r\n />\r\n <Route path=\"/confirmation\" component={Confirmation} />\r\n <Route\r\n path=\"/confirmationError\"\r\n component={ConfirmationError}\r\n />\r\n <Route\r\n path=\"/confirmationInterestForm\"\r\n component={ConfirmationInterestForm}\r\n />\r\n <Route\r\n path=\"/pricingApiTester/e947659c-c242-4b59-b07e-0e34f033a254\"\r\n component={PricingApiTester}\r\n />\r\n <Route\r\n path=\"/upgrade/:campaignType/:addressId/:accountNumber/:campaignSource\"\r\n render={(props) => (\r\n <Upgrade {...props} mode={\"digicart\"} />\r\n )}\r\n />\r\n <Redirect\r\n from=\"*\"\r\n to={`/addressVerification/${campaignType}`}\r\n />\r\n </Switch>\r\n </BrowserRouter>\r\n </CardContent>\r\n </Card>\r\n\r\n {route.toLowerCase() !== \"digicart\" &&\r\n route.toLowerCase() !== \"minicart\" && <Footer />}\r\n </div>\r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n campaign: state.campaign,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(App);\r\n","import { ProductActions } from \"../actions/productActions\";\r\nimport { AddonsActions } from \"../actions/addonsActions\";\r\n\r\nconst initState = {\r\n selectedAddonIds: null,\r\n stbQty: null,\r\n wirelessGateway: null,\r\n selectedProductId: null,\r\n mainProducts: null,\r\n addons: null,\r\n digiCartSelectedMainVersionProductId: null,\r\n digiCartselectedBundleIndex: null,\r\n digiCartSubmittedId: null,\r\n digiCartProcesed: false,\r\n error: null,\r\n loading: null,\r\n addonLoading: null,\r\n updateCart: null,\r\n speedTierTypeIsFiber: null,\r\n};\r\n\r\nconst productReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case ProductActions.GET_PRODUCTS_STARTED:\r\n return {\r\n ...state,\r\n mainProducts: null,\r\n showWarmLeadsForm: null,\r\n isAddressFiberQualified: null,\r\n speedTierTypeIsFiber: null,\r\n campaignPromoText: null,\r\n loading: true,\r\n };\r\n\r\n case ProductActions.GET_PRODUCTS_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n mainProducts: action.payload.productPayload,\r\n showWarmLeadsForm: action.payload.showWarmLeadsForm,\r\n isAddressFiberQualified: action.payload.isAddressFiberQualified,\r\n speedTierTypeIsFiber: action.payload.speedTierTypeIsFiber,\r\n campaignPromoText: action.payload.campaignPromoText,\r\n loading: false,\r\n };\r\n\r\n case ProductActions.GET_PRODUCTS_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n loading: false,\r\n };\r\n case ProductActions.QUAL_CHECK_STARTED:\r\n return {\r\n ...state,\r\n qualCheck: null,\r\n loading: true,\r\n };\r\n case ProductActions.QUAL_CHECK_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n qualCheck: action.payload,\r\n loading: false,\r\n };\r\n\r\n case ProductActions.QUAL_CHECK_FAILURE:\r\n return {\r\n ...state,\r\n qualCheck: false,\r\n error: action.payload,\r\n loading: false,\r\n };\r\n case ProductActions.RESET_QUAL_CHECK:\r\n return {\r\n ...state,\r\n qualCheck: null,\r\n loading: false,\r\n };\r\n case ProductActions.SET_DIGI_CART:\r\n return {\r\n ...state,\r\n updateCart: true,\r\n };\r\n case ProductActions.SET_PRODUCT_SUCCESS:\r\n return {\r\n ...state,\r\n selectedProductId: action.payload,\r\n addons: null, // if select product that need to clear loaded local addons\r\n stbQty: null, // and Set top box number for previous selected product\r\n error: null,\r\n updateCart: false,\r\n };\r\n\r\n case ProductActions.SET_PRODUCT_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n updateCart: false,\r\n };\r\n case ProductActions.GET_ADDON_START:\r\n return {\r\n ...state,\r\n selectedAddonIds: null,\r\n addonLoading: true,\r\n };\r\n\r\n case AddonsActions.GET_ADDONS_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n addons: action.payload,\r\n addonLoading: false,\r\n };\r\n\r\n case AddonsActions.GET_ADDONS_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n addonLoading: false,\r\n };\r\n\r\n case AddonsActions.CLEAR_SELECTED_PRODUCT:\r\n return {\r\n ...state,\r\n selectedProductId: null,\r\n addons: null,\r\n stbQty: null,\r\n error: null,\r\n };\r\n case ProductActions.UPDATE_CART:\r\n return {\r\n ...state,\r\n updateCart: true,\r\n };\r\n\r\n case AddonsActions.SET_ADDONS_SUCCESS:\r\n return {\r\n ...state,\r\n selectedAddonIds: action.payload.ids,\r\n wirelessGateway: action.payload.wirelessGateway,\r\n updateCart: false,\r\n };\r\n\r\n case AddonsActions.SET_ADDONS_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n updateCart: false,\r\n };\r\n\r\n case AddonsActions.SET_SELECTED_ADDONS:\r\n return {\r\n ...state,\r\n selectedAddons: action.payload,\r\n };\r\n\r\n\r\n case AddonsActions.SET_NUMBER_STB_SUCCESS:\r\n return {\r\n ...state,\r\n stbQty: action.payload,\r\n };\r\n\r\n case AddonsActions.SET_NUMBER_STB_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n\r\n case AddonsActions.SET_IS_AUTO_SELECT_INIT:\r\n return {\r\n ...state,\r\n isAutoSelectInit: action.payload,\r\n };\r\n case AddonsActions.SET_IS_AUTO_SELECT_EQUIPMENT_INIT:\r\n return {\r\n ...state,\r\n isAutoSelectEquipmentInit: action.payload,\r\n };\r\n\r\n case ProductActions.RESET_DIGI_CART:\r\n return {\r\n ...state,\r\n digiCartSelectedMainVersionProductId: null,\r\n digiCartselectedBundleIndex: null,\r\n };\r\n\r\n case ProductActions.SET_DIGI_CART_SELECTED_PRODUCT_SUCCESS:\r\n return {\r\n ...state,\r\n digiCartSelectedMainVersionProductId: action.payload,\r\n };\r\n\r\n case ProductActions.SET_DIGI_CART_SELECTED_BUNDLE_INDEX_SUCCESS:\r\n return {\r\n ...state,\r\n digiCartselectedBundleIndex: action.payload,\r\n };\r\n\r\n case ProductActions.SET_DIGI_CART_SUBMITTED:\r\n return {\r\n ...state,\r\n digiCartSubmittedId: action.payload,\r\n };\r\n\r\n case ProductActions.CLEAR_DIGI_CART_SUBMITTED:\r\n return {\r\n ...state,\r\n digiCartSubmittedId: null,\r\n };\r\n\r\n case ProductActions.SET_DIGI_CART_PROCESSED:\r\n return {\r\n ...state,\r\n digiCartProcesed: true,\r\n };\r\n\r\n case ProductActions.CLEAR_DIGI_CART_PROCESSED:\r\n return {\r\n ...state,\r\n digiCartProcesed: false,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default productReducer;\r\n","import { AddressActions } from \"../actions/addressActions\";\r\n\r\nconst initState = {\r\n address: null,\r\n error: null,\r\n servicesExist: {\r\n hasService: null,\r\n hasError: false\r\n }\r\n};\r\n\r\nconst addressReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case AddressActions.SET_ADDRESS_SUCCESS:\r\n return {\r\n ...state,\r\n address: action.payload,\r\n error: null\r\n };\r\n case AddressActions.SET_ADDRESS_FAILURE:\r\n return {\r\n ...state,\r\n addresses: null,\r\n error: action.payload\r\n };\r\n case AddressActions.SEARCH_ADDRESS_SUCCESS:\r\n return {\r\n ...state,\r\n addresses: action.payload,\r\n error: null\r\n };\r\n break;\r\n case AddressActions.SEARCH_ADDRESS_FAILURE:\r\n return {\r\n ...state,\r\n addresses: null,\r\n error: action.payload\r\n };\r\n break;\r\n case AddressActions.RESET_ADDRESS:\r\n return {\r\n ...state,\r\n address: null,\r\n error: null\r\n };\r\n case AddressActions.RESET_ADDRESSES:\r\n return {\r\n ...state,\r\n addresses: null,\r\n error: null\r\n };\r\n case AddressActions.SET_RECAPTCHA:\r\n return {\r\n ...state,\r\n captchaValue: action.payload\r\n };\r\n case AddressActions.RESET_RECAPTCHA:\r\n return {\r\n ...state,\r\n captchaValue: null\r\n };\r\n case AddressActions.SET_ADDRESS_SUBMITTED:\r\n return {\r\n ...state,\r\n submitted: action.payload\r\n };\r\n\r\n case AddressActions.DOES_ADDRESS_HAVE_SERVICES_SUCCESS:\r\n return {\r\n ...state,\r\n servicesExist: { hasService: action.payload, hasError: false}\r\n };\r\n\r\n case AddressActions.DOES_ADDRESS_HAVE_SERVICES_FAILURE:\r\n return {\r\n ...state,\r\n servicesExist: { hasService: null, hasError: true}\r\n };\r\n \r\n case AddressActions.DOES_ADDRESS_HAVE_SERVICES_RESET:\r\n return {\r\n ...state,\r\n servicesExist: { hasService: null, hasError: false}\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default addressReducer;\r\n","import { CartActions } from \"../actions/cartActions\";\r\n\r\nconst initState = {\r\n cart: null,\r\n checkoutCart: null,\r\n installmentPlan: false,\r\n error: null\r\n};\r\n\r\nconst cartReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case CartActions.SET_CART_SUCCESS:\r\n return {\r\n ...state,\r\n cart: action.payload,\r\n error: null\r\n };\r\n\r\n case CartActions.SET_CART_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n\r\n case CartActions.RESET_CART: \r\n return {\r\n ...state, \r\n cart: null, \r\n error: null\r\n };\r\n\r\n case CartActions.RESET_CHECKOUT: \r\n return {\r\n ...state, \r\n checkoutCart: null, \r\n error: null\r\n };\r\n\r\n case CartActions.PRICING_API_TESTER_SUCCESS:\r\n return {\r\n ...state,\r\n pricingApiTesterResponse: action.payload,\r\n error: null\r\n };\r\n\r\n case CartActions.PRICING_API_TESTER_FAILURE:\r\n return {\r\n ...state,\r\n pricingApiTesterResponse: null,\r\n error: action.payload\r\n };\r\n\r\n case CartActions.CHECKOUT_SUCCESS:\r\n return {\r\n ...state,\r\n checkoutCart: action.payload,\r\n error: null\r\n };\r\n\r\n case CartActions.CHECKOUT_FAILURE:\r\n return {\r\n ...state,\r\n checkoutCart: null,\r\n error: action.payload\r\n };\r\n\r\n case CartActions.SET_INSTALLMENT_PLAN_SUCCESS:\r\n return {\r\n ...state,\r\n installmentPlan: action.payload\r\n };\r\n\r\n case CartActions.SET_INSTALLMENT_PLAN_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n case CartActions.SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_SUCCESS:\r\n return {\r\n ...state,\r\n optionalAssessmentFeeAccepted: action.payload\r\n };\r\n \r\n case CartActions.SET_OPTIONAL_ASSESSMENT_FEE_ACCEPTED_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n case CartActions.SET_SELF_INSTALL_DECLINED_SUCCESS:\r\n return {\r\n ...state,\r\n selfInstallDeclined: action.payload\r\n };\r\n \r\n case CartActions.SET_SELF_INSTALL_DECLINED_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n \r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default cartReducer;\r\n","import { ScheduleActions } from \"../actions/scheduleActions\";\r\n\r\nconst initState = {\r\n shippingInfo: null,\r\n scheduleInfo: null,\r\n availableAppointments: null,\r\n ecomComputedActivationDate: null,\r\n selfInstallType: null,\r\n isSelfInstall: null,\r\n nextInstallScreen: null,\r\n error: null,\r\n};\r\n\r\nconst scheduleReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case ScheduleActions.SET_WAIT_FOR_SCHEDULING:\r\n return {\r\n ...state,\r\n waitForScheduling: action.payload,\r\n };\r\n case ScheduleActions.GET_SCHEDULING_STARTED:\r\n return {\r\n ...state,\r\n scheduleInfo: null,\r\n ecomComputedActivationDate: null,\r\n error: null,\r\n loading: true,\r\n };\r\n case ScheduleActions.GET_SCHEDULING_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n nextScreen: true,\r\n availableAppointments: action.payload.availableAppointments,\r\n selfInstallType: action.payload.selfInstallType, //\"fiber\", //action.payload.selfInstallType,\r\n isSelfInstall: action.payload.isSelfInstall,\r\n loading: false,\r\n };\r\n case ScheduleActions.GET_SCHEDULING_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n loading: false,\r\n };\r\n case ScheduleActions.SET_SCHEDULE_INFO_STARTED:\r\n return {\r\n ...state,\r\n error: null,\r\n loading: true,\r\n };\r\n case ScheduleActions.SET_SCHEDULE_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n nextScreen: true,\r\n scheduleInfo: action.payload.scheduleInfo, //never getting a value since scheduleInfo was returning an empty response object i.e OK()\r\n ecomComputedActivationDate:\r\n action.payload && action.payload.ecomComputedActivationDate\r\n ? action.payload.ecomComputedActivationDate\r\n : null,\r\n error: null,\r\n loading: false,\r\n };\r\n\r\n case ScheduleActions.SET_SCHEDULE_INFO_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n\r\n case ScheduleActions.SET_SHIPPING_ADDRESS_SUCCESS:\r\n return {\r\n ...state,\r\n nextScreen: true,\r\n shippingInfo: action.payload.scheduleInfo,\r\n ecomComputedActivationDate:\r\n action.payload && action.payload.ecomComputedActivationDate\r\n ? action.payload.ecomComputedActivationDate\r\n : null,\r\n loading: false,\r\n };\r\n\r\n case ScheduleActions.SET_SHIPPING_ADDRESS_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n loading: false,\r\n };\r\n\r\n case ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_STARTED:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n\r\n case ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_SUCCESS:\r\n return {\r\n ...state,\r\n nextScreen: true,\r\n shippingInfo: action.payload,\r\n };\r\n\r\n case ScheduleActions.ADD_PRODUCT_TO_ACCESSLINE_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n\r\n case ScheduleActions.RESET_NEXT_SCREEN:\r\n return {\r\n ...state,\r\n nextScreen: null,\r\n };\r\n\r\n case ScheduleActions.RESET_SCHEDULING:\r\n return {\r\n ...initState,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default scheduleReducer;\r\n","import { UserActions } from \"../actions/userActions\";\r\n\r\nconst initState = {\r\n createUserMsg: null,\r\n createUserHasError: false,\r\n profileInfo: null,\r\n billingInfo: null,\r\n error: null,\r\n establishNewOrderInfo:null,\r\n establishNewOrderComplete: false,\r\n secretQuestions:null\r\n};\r\n\r\nconst userReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case UserActions.SET_USER_PROFILE_STARTED:\r\n return {\r\n ...state,\r\n profileInfo: action.payload,\r\n setProfileInfoStarted: true,\r\n error: null\r\n };\r\n\r\n case UserActions.SET_USER_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n profileInfo: action.payload,\r\n setProfileInfoStarted: false,\r\n error: null\r\n };\r\n\r\n case UserActions.SET_USER_PROFILE_FAILURE:\r\n return {\r\n ...state,\r\n setProfileInfoStarted: false,\r\n error: action.payload\r\n };\r\n\r\n case UserActions.SET_BILLING_SUCCESS:\r\n return {\r\n ...state,\r\n billingInfo: action.payload\r\n };\r\n case UserActions.SET_USER_PROFILE_EMAIL_SUCCESS:\r\n return {\r\n ...state,\r\n profileInfo: { ...state.profileInfo, email: action.payload }\r\n };\r\n case UserActions.SET_USER_HAS_ACCOUNT:\r\n return {\r\n ...state,\r\n profileInfo: { ...state.profileInfo, hasAccount: action.payload }\r\n };\r\n case UserActions.SET_USER_PROFILE_ACCOUNT_NUMBER_SUCCESS:\r\n return {\r\n ...state,\r\n profileInfo: { ...state.profileInfo, accountNumber: action.payload }\r\n };\r\n case UserActions.SET_BILLING_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n\r\n case UserActions.CREATE_USER_SUCCESS:\r\n return {\r\n ...state,\r\n createUserMsg: action.payload,\r\n createUserHasError: false\r\n };\r\n\r\n case UserActions.CREATE_USER_FAILURE:\r\n return {\r\n ...state,\r\n createUserMsg: action.payload,\r\n createUserHasError: true\r\n };\r\n\r\n case UserActions.CREATE_USER_RESET:\r\n return {\r\n ...state,\r\n createUserMsg: null,\r\n createUserHasError: false\r\n };\r\n case UserActions.RESET_ESTABLISHNEWORDER:\r\n return {\r\n ...state,\r\n establishNewOrderInfo: null,\r\n establishNewOrderComplete: false\r\n };\r\n case UserActions.SET_ESTABLISHNEWORDER_SUCCESS:\r\n return {\r\n ...state,\r\n establishNewOrderInfo: action.payload,\r\n establishNewOrderComplete: true\r\n };\r\n case UserActions.SET_ESTABLISHNEWORDER_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n establishNewOrderInfo: null,\r\n establishNewOrderComplete: true\r\n };\r\n \r\n\r\n case UserActions.GET_CHECKINSTALLATIONTYPE_STARTED:\r\n return {\r\n ...state,\r\n error: null,\r\n loading: true\r\n };\r\n case UserActions.GET_CHECKINSTALLATIONTYPE_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n installationType: action.payload,\r\n nextScreen: true,\r\n loading: false\r\n };\r\n \r\n case UserActions.GET_CHECKINSTALLATIONTYPE_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n \r\n case UserActions.GET_SECRETQUESTIONS_STARTED:\r\n return {\r\n ...state,\r\n error: null,\r\n };\r\n case UserActions.GET_SECRETQUESTIONS_SUCCESS:\r\n return {\r\n ...state,\r\n secretQuestions:action.payload,\r\n error: null,\r\n }; \r\n case UserActions.GET_SECRETQUESTIONS_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n };\r\n \r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default userReducer;\r\n","import { OrderActions } from \"../actions/orderActions\";\r\n\r\nconst initState = {\r\n order: null,\r\n error: null\r\n};\r\n\r\nconst orderReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n\r\n case OrderActions.RESET_ORDER: \r\n return {\r\n ...state, \r\n order: null, \r\n error: null\r\n };\r\n\r\n case OrderActions.SET_ORDER_SUCCESS:\r\n return {\r\n ...state,\r\n order: action.payload,\r\n error: null\r\n };\r\n\r\n case OrderActions.SET_ORDER_FAILURE:\r\n return {\r\n ...state,\r\n order: null,\r\n error: action.payload\r\n };\r\n case OrderActions.RESET_WARM_LEAD: \r\n return {\r\n ...state, \r\n warmLead: null, \r\n error: null\r\n };\r\n\r\n case OrderActions.SET_WARM_LEAD_SUCCESS:\r\n return {\r\n ...state,\r\n warmLead: action.payload,\r\n error: null\r\n };\r\n\r\n case OrderActions.SET_WARM_LEAD_FAILURE:\r\n return {\r\n ...state,\r\n warmLead: null,\r\n error: action.payload\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default orderReducer;\r\n","import { StepActions } from \"../actions/stepActions\";\r\n\r\nconst initState = {\r\n currentStep: -1,\r\n error: null,\r\n history: null,\r\n skipInstallationStep:false\r\n};\r\n\r\nconst stepReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case StepActions.RESET_ALL: \r\n return {};\r\n \r\n case StepActions.SET_STEP:\r\n return {\r\n ...state,\r\n currentStep: action.payload\r\n };\r\n\r\n case StepActions.SET_HISTORY:\r\n return {\r\n ...state,\r\n history: action.payload\r\n };\r\n\r\n case StepActions.NEXT:\r\n return {\r\n ...state,\r\n currentStep: state.currentStep + 1\r\n };\r\n\r\n case StepActions.PREV:\r\n return {\r\n ...state,\r\n currentStep: state.currentStep !== -1 ? state.currentStep - 1 : -1\r\n };\r\n case StepActions.SKIP_INSTALLATION:\r\n return {\r\n ...state,\r\n skipInstallationStep: action.payload\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default stepReducer;\r\n","import { CampaignActions } from \"../actions/campaignActions\";\r\n\r\nconst initState = {\r\n campaign: null,\r\n error: null,\r\n loading:null,\r\n};\r\n\r\nexport default (state = initState, action) => {\r\n switch (action.type) {\r\n case CampaignActions.GET_CAMPAIGN_STARTED:\r\n return {\r\n ...state,\r\n loading:true\r\n };\r\n break;\r\n\r\n case CampaignActions.GET_CAMPAIGN_SUCCESS:\r\n return {\r\n ...state,\r\n campaign: action.payload,\r\n error: null,\r\n loading:false\r\n };\r\n break;\r\n\r\n case CampaignActions.GET_CAMPAIGN_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n loading:false\r\n };\r\n break;\r\n\r\n case CampaignActions.SET_UTM_PARAMS:\r\n return {\r\n ...state,\r\n utmparams: action.payload\r\n };\r\n\r\n case CampaignActions.SET_CAMPAIGN_SOURCE:\r\n return {\r\n ...state,\r\n campaignSource: action.payload,\r\n };\r\n break;\r\n case CampaignActions.CLEAR_CAMPAIGN:\r\n return {\r\n ...state,\r\n campaign: null,\r\n error: null,\r\n campaignSource: null,\r\n };\r\n case CampaignActions.SET_CAMPAIGN:\r\n return {\r\n ...state,\r\n campaign: action.payload,\r\n error: null,\r\n };\r\n break;\r\n default:\r\n return state;\r\n }\r\n};\r\n","/* eslint-disable import/no-anonymous-default-export */\r\nimport { AuthActions } from \"../actions/authActions\";\r\n\r\nconst initState = {\r\n campaignType: null,\r\n authIsRequired: null,\r\n loggedInSalesRepId: null,\r\n loginFormMode: 'login',\r\n error: null,\r\n email:null,\r\n loading: false,\r\n};\r\n\r\nexport default (state = initState, action) => {\r\n switch (action.type) {\r\n case AuthActions.AUTH_CLEAR:\r\n return {\r\n ...initState,\r\n };\r\n case AuthActions.AUTH_LOADING:\r\n return {\r\n ...state,\r\n loading:true\r\n };\r\n \r\n case AuthActions.GET_IS_AUTH_REQUIRED_SUCCESS:\r\n return {\r\n ...state,\r\n authIsRequired: action.payload.authIsRequired,\r\n campaignType: action.payload.campaignType,\r\n error: null,\r\n loading: false,\r\n };\r\n case AuthActions.GET_IS_AUTH_REQUIRED_FAILURE:\r\n return {\r\n ...state,\r\n authIsRequired: false,\r\n error: null,\r\n loading: false,\r\n };\r\n case AuthActions.LOGIN_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n loading:false,\r\n loginFormMode:action.payload.loginFormMode,\r\n loggedInSalesRepId: action.payload.salesRepId,\r\n };\r\n case AuthActions.LOGIN_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n loading: false,\r\n loggedInSalesRepId: null,\r\n };\r\n case AuthActions.FORGOTPASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n loading: false,\r\n loginFormMode:action.payload.loginFormMode,\r\n email: action.payload.maskedEmail,\r\n };\r\n case AuthActions.FORGOTPASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n error: action.payload,\r\n email: null,\r\n loading: false,\r\n };\r\n case AuthActions.VERIFY_CODE_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n loading:false,\r\n loginFormMode:action.payload.loginFormMode,\r\n };\r\n case AuthActions.VERIFY_CODE_FAILURE:\r\n return {\r\n ...state,\r\n loading:false,\r\n error: action.payload\r\n };\r\n case AuthActions.UPDATE_PASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n error: null,\r\n loading: false,\r\n loggedInSalesRepId:action.payload.salesRepId,\r\n loginFormMode:action.payload.loginFormMode,\r\n\r\n };\r\n case AuthActions.UPDATE_PASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n loading:false,\r\n error: action.payload\r\n };\r\n case AuthActions.UPDATE_LOGIN_FORM_MODE:\r\n return {\r\n ...state,\r\n error: null,\r\n loading: false,\r\n loginFormMode: action.payload\r\n };\r\n \r\n default:\r\n return state;\r\n }\r\n};\r\n","import { StateHandlerActions } from \"../actions/stateHandlerActions\";\r\n\r\nconst initState = {\r\n stateHandler: null,\r\n error: null,\r\n loading:null,\r\n};\r\n\r\nexport default (state = initState, action) => {\r\n switch (action.type) {\r\n case StateHandlerActions.SET_STATE_STARTED: \r\n return {\r\n ...state,\r\n loading:true,\r\n error: null\r\n };\r\n break;\r\n case StateHandlerActions.SET_STATE_SUCCESS: \r\n return {\r\n ...state,\r\n loading:false,\r\n error: null\r\n };\r\n break;\r\n case StateHandlerActions.SET_STATE_FAILURE: \r\n return {\r\n ...state,\r\n loading:false,\r\n error: action.payload\r\n };\r\n break;\r\n case StateHandlerActions.GET_STATE_STARTED: \r\n return {\r\n ...state,\r\n loading:true,\r\n error: null\r\n };\r\n break;\r\n case StateHandlerActions.GET_STATE_SUCCESS: \r\n\r\n return {\r\n ...state,\r\n loading:false,\r\n error: null\r\n };\r\n break;\r\n case StateHandlerActions.GET_STATE_FAILURE: \r\n return {\r\n ...state,\r\n loading:false,\r\n error: action.payload\r\n };\r\n break;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { combineReducers } from \"redux\";\r\nimport productReducer from \"./productReducer\";\r\nimport addressReducer from \"./addressReducer\";\r\nimport cartReducer from \"./cartReducer\";\r\nimport scheduleReducer from \"./scheduleReducer\";\r\nimport userReducer from \"./userReducer\";\r\nimport orderReducer from \"./orderReducer\";\r\nimport stepsReducer from \"./stepsReducer\";\r\nimport campaignReducer from \"./campaignReducer\";\r\nimport authReducer from \"./authReducer\";\r\nimport stateHandlerReducer from \"./stateHandlerReducer\";\r\n\r\nconst appReducer = combineReducers({\r\n auth: authReducer,\r\n steps: stepsReducer,\r\n address: addressReducer,\r\n products: productReducer,\r\n campaign: campaignReducer,\r\n cart: cartReducer,\r\n schedule: scheduleReducer,\r\n user: userReducer,\r\n order: orderReducer,\r\n stateHandler: stateHandlerReducer\r\n});\r\n\r\nconst rootReducer = (state, action) => {\r\n // when a logout action is dispatched it will reset redux state\r\n if (action.type === \"LOGGED_OUT\" || action.type === \"RESET_ALL\") {\r\n // console.log(\"state reset with action.type=\" + action.type);\r\n state = undefined;\r\n }\r\n\r\n return appReducer(state, action);\r\n};\r\n\r\nexport default rootReducer;\r\n\r\nexport { authReducer };\r\nexport { stepsReducer };\r\nexport { addressReducer };\r\nexport { productReducer };\r\nexport { campaignReducer };\r\nexport { cartReducer };\r\nexport { scheduleReducer };\r\nexport { userReducer };\r\nexport { orderReducer };\r\nexport { stateHandlerReducer };","import axios from \"axios\";\r\nimport { createStore, combineReducers, compose, applyMiddleware } from \"redux\";\r\nimport thunk from \"redux-thunk\";\r\n\r\nimport reducers from \"../reducers\";\r\n\r\nfunction saveToLocalStorage(state) {\r\n\r\n const serializedState = JSON.stringify(state);\r\n localStorage.setItem('state', serializedState);\r\n\r\n //call local api to save the state to server-side session \r\n //PSEUDO: axios.post(serializedState);\r\n}\r\n\r\nfunction loadFromLocalStorage() {\r\n \r\n const serializedState = localStorage.getItem('state');\r\n\r\n //call local api to GET the state from server-side session \r\n //PSEUDO: const serializedState = axios.GET();\r\n\r\n if (serializedState === null) return undefined;\r\n return JSON.parse(serializedState);\r\n}\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\nconst presistedState = loadFromLocalStorage();\r\n\r\nconst store = createStore(reducers, presistedState, composeEnhancers(applyMiddleware(thunk)));\r\nstore.subscribe(() => saveToLocalStorage(store.getState()));\r\nexport default store;\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\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n // console.log(\r\n // 'This web app is being served cache-first by a service ' +\r\n // 'worker. To learn more, visit 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, 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, 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.then((registration) => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { StyledEngineProvider } from \"@mui/material\";\r\nimport \"./index.css\";\r\nimport App from \"./App\";\r\nimport store from \"./redux/store/store\";\r\nimport { Provider } from \"react-redux\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport \"bootstrap/dist/css/bootstrap.css\";\r\n\r\nReactDOM.render(\r\n <Provider store={store}>\r\n <StyledEngineProvider injectFirst>\r\n <App />\r\n </StyledEngineProvider>\r\n </Provider>,\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":""}